From 07cae73c7116aee9686432783394eaba2c854ab9 Mon Sep 17 00:00:00 2001 From: NunoSempere Date: Sat, 23 Mar 2024 21:51:55 -0300 Subject: remove extra files --- README.md | 115 +- TODO.md | 56 +- images/0-architecture.png | Bin 2534491 -> 0 bytes images/1-startup.png | Bin 262932 -> 0 bytes images/2-blog.png | Bin 546534 -> 0 bytes images/3-init.png | Bin 13938 -> 0 bytes images/4-money-stuff-raw.png | Bin 255892 -> 0 bytes images/5-money-stuff-readability.png | Bin 203170 -> 0 bytes images/6-multiple-tabs.png | Bin 264119 -> 0 bytes images/7-hello-world-search.png | Bin 125658 -> 0 bytes images/architecture.excalidraw | 1621 ------------ images/flower-imgs/rose-homepage-2.png | Bin 145422 -> 0 bytes images/flower-imgs/rose-homepage.png | Bin 485022 -> 0 bytes images/flower-imgs/rose-src.txt | 1 - images/flower-imgs/rose.png | Bin 485022 -> 0 bytes images/flower-imgs/rose2.png | Bin 113204 -> 0 bytes images/flower-imgs/rosenrot-desktop-icon.png | Bin 756923 -> 0 bytes makefile | 63 +- plugins/libre_redirect/README.md | 3 - plugins/libre_redirect/libre_redirect.c | 66 - plugins/libre_redirect/libre_redirect.h | 5 - .../str_replace_test/build-example.sh | 11 - plugins/libre_redirect/str_replace_test/example.c | 19 - plugins/plugins.h | 5 - plugins/plugins.mk | 17 - plugins/readability/README.md | 2 - plugins/readability/readability | Bin 17056 -> 0 bytes plugins/readability/readability.c | 31 - plugins/readability/readability.h | 5 - plugins/readability/readability.js | 2726 -------------------- plugins/readability/recompute_READABILITY_N.sh | 9 - plugins/shortcuts/README.md | 7 - plugins/shortcuts/shortcuts.c | 65 - plugins/shortcuts/shortcuts.h | 5 - plugins/stand_in/stand_in.c | 30 - plugins/stand_in/stand_in.h | 24 - plugins/strings/strings.c | 61 - plugins/strings/strings.h | 4 - plugins/style/README.md | 5 - plugins/style/recompute_STYLE_N.sh | 9 - plugins/style/style.c | 21 - plugins/style/style.h | 5 - plugins/style/style.js | 286 -- rosenrot-mklink | 17 - style.css | 41 - .../artifacts/compile_flags/compile_flags.txt | 27 - .../artifacts/compile_flags/get-compile-flags.sh | 5 - .../debian-12/install-with-dependencies.sh | 42 - user-scripts/debian-12/rosenrot-desktop-icon.png | Bin 756923 -> 0 bytes user-scripts/debian-12/rosenrot.desktop | 9 - user-scripts/styles/images/style-nuno.png | Bin 182500 -> 0 bytes user-scripts/styles/images/style-original.png | Bin 178824 -> 0 bytes user-scripts/styles/style-v1.css | 37 - user-scripts/styles/style-v2.css | 52 - user-scripts/styles/style-v3.css | 70 - user-scripts/ubuntu-20.04/README.md | 1 - .../ubuntu-20.04/install-with-dependencies.sh | 24 - .../ubuntu-20.04/rose-GIO_MODULE_DIR.desktop | 9 - user-scripts/ubuntu-20.04/rose-images/rose-1.png | Bin 640116 -> 0 bytes user-scripts/ubuntu-20.04/rose-images/rose-2.png | Bin 485022 -> 0 bytes .../ubuntu-20.04/rose-images/rose-desktop-icon.png | Bin 756923 -> 0 bytes .../rose-images/rose-homepage-1.6-zoom.png | Bin 104014 -> 0 bytes .../ubuntu-20.04/rose-images/rose-homepage-2.png | Bin 145422 -> 0 bytes .../ubuntu-20.04/rose-images/rose-homepage.png | Bin 485022 -> 0 bytes user-scripts/ubuntu-20.04/rose-images/rose-src.txt | 1 - user-scripts/ubuntu-20.04/rose.desktop | 9 - user-scripts/ubuntu-20.04/rose.sh | 3 - user-scripts/valgrind-notes.md | 9 - 68 files changed, 6 insertions(+), 5627 deletions(-) delete mode 100644 images/0-architecture.png delete mode 100644 images/1-startup.png delete mode 100644 images/2-blog.png delete mode 100644 images/3-init.png delete mode 100644 images/4-money-stuff-raw.png delete mode 100644 images/5-money-stuff-readability.png delete mode 100644 images/6-multiple-tabs.png delete mode 100644 images/7-hello-world-search.png delete mode 100644 images/architecture.excalidraw delete mode 100644 images/flower-imgs/rose-homepage-2.png delete mode 100644 images/flower-imgs/rose-homepage.png delete mode 100644 images/flower-imgs/rose-src.txt delete mode 100644 images/flower-imgs/rose.png delete mode 100644 images/flower-imgs/rose2.png delete mode 100644 images/flower-imgs/rosenrot-desktop-icon.png delete mode 100644 plugins/libre_redirect/README.md delete mode 100644 plugins/libre_redirect/libre_redirect.c delete mode 100644 plugins/libre_redirect/libre_redirect.h delete mode 100644 plugins/libre_redirect/str_replace_test/build-example.sh delete mode 100644 plugins/libre_redirect/str_replace_test/example.c delete mode 100644 plugins/plugins.h delete mode 100644 plugins/plugins.mk delete mode 100644 plugins/readability/README.md delete mode 100755 plugins/readability/readability delete mode 100644 plugins/readability/readability.c delete mode 100644 plugins/readability/readability.h delete mode 100644 plugins/readability/readability.js delete mode 100755 plugins/readability/recompute_READABILITY_N.sh delete mode 100644 plugins/shortcuts/README.md delete mode 100644 plugins/shortcuts/shortcuts.c delete mode 100644 plugins/shortcuts/shortcuts.h delete mode 100644 plugins/stand_in/stand_in.c delete mode 100644 plugins/stand_in/stand_in.h delete mode 100644 plugins/strings/strings.c delete mode 100644 plugins/strings/strings.h delete mode 100644 plugins/style/README.md delete mode 100755 plugins/style/recompute_STYLE_N.sh delete mode 100644 plugins/style/style.c delete mode 100644 plugins/style/style.h delete mode 100644 plugins/style/style.js delete mode 100755 rosenrot-mklink delete mode 100644 style.css delete mode 100644 user-scripts/artifacts/compile_flags/compile_flags.txt delete mode 100644 user-scripts/artifacts/compile_flags/get-compile-flags.sh delete mode 100644 user-scripts/debian-12/install-with-dependencies.sh delete mode 100644 user-scripts/debian-12/rosenrot-desktop-icon.png delete mode 100755 user-scripts/debian-12/rosenrot.desktop delete mode 100644 user-scripts/styles/images/style-nuno.png delete mode 100644 user-scripts/styles/images/style-original.png delete mode 100644 user-scripts/styles/style-v1.css delete mode 100644 user-scripts/styles/style-v2.css delete mode 100644 user-scripts/styles/style-v3.css delete mode 100644 user-scripts/ubuntu-20.04/README.md delete mode 100644 user-scripts/ubuntu-20.04/install-with-dependencies.sh delete mode 100755 user-scripts/ubuntu-20.04/rose-GIO_MODULE_DIR.desktop delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-1.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-2.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-desktop-icon.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-homepage-1.6-zoom.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-homepage-2.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-homepage.png delete mode 100644 user-scripts/ubuntu-20.04/rose-images/rose-src.txt delete mode 100755 user-scripts/ubuntu-20.04/rose.desktop delete mode 100755 user-scripts/ubuntu-20.04/rose.sh delete mode 100644 user-scripts/valgrind-notes.md diff --git a/README.md b/README.md index ed40026..2201ed0 100644 --- a/README.md +++ b/README.md @@ -1,116 +1,3 @@ # Rosenrot -Rosenrot is a small browser forked from an earlier version of [rose](https://github.com/mini-rose/rose). It has some additional quality of life improvements tailored to my (@NunoSempere) tastes and setup, and detailed installation instructions for Debian 12. - -![](https://raw.githubusercontent.com/NunoSempere/rosenrot-browser/master/images/3-init.png) - -![](https://raw.githubusercontent.com/NunoSempere/rosenrot-browser/master/images/7-hello-world-search.png) - -![](https://raw.githubusercontent.com/NunoSempere/rosenrot-browser/master/images/6-multiple-tabs.png) - -### Installation and usage - -You can see detailed instructions [here](./user-scripts/debian-12/install-with-dependencies.sh), for Debian 12 in particular—though they should generalize easily to other distributions. - -The general steps are to install dependencies, and then - -``` -make build -make install # or sudo make install -rose -``` - -You can also collect some profiling info, and then use that to get a perhaps faster version: - -``` -make fast ## will ask you to use the browser for a bit -make install -rose -``` - -You can also create a rose.desktop file so that it will show up in your desktop environment. You can see this documented [here](./user-scripts/debian-12/install-with-dependencies.sh). - -## Features - -- Tabs, cookies, caching -- Minimal ui, autohiding elements -- ~454L core code (the rose.c file) -- Customize appearance of the browser through css -- Built-in rose-mklink script for in-shell static links -- Optional adblocking through [wyebadblock](https://github.com/jun7/wyebadblock) -- Plugin system, seeded with: - - Libre redirect: Redirect annoying websites to open source frontends - - Readability: Strip webpages of unnecessary elements for ease of reading with a custom shortcut - - Custom style: Override the css of predetermined websites - - Max number of tabs (by default 8), configurable. - - Stand in plugin: Mimick function definitions which do nothing for the above plugins so that they can be quickly removed - -You can see some screenshots in the [images](./images) folder. - -## Similar projects - -Here are some similar projects that I could find (minimalist, mostly based on webkit): - -- [Surf](https://git.suckless.org/surf/). Suckless community. Similar goals, higher coding standards, less actively maintained. -- [Rose](https://github.com/mini-rose/rose-browser). Lua integrations, supports compilation with GTK4. Every now and then, the developer nukes the git history and tries some different approach. -- [Epiphany](https://gitlab.gnome.org/GNOME/epiphany). GNOME. Clean browser, distributed via flathub, aimed at nontechnical users. Seems actively maintained. -- [Vimb](https://github.com/fanglingsu/vimb). Reasonably actively maintained, vim keybindings. -- [Nyxt](https://github.com/atlas-engineer/nyxt). Emphasis on sophisticated key bindings. -- [Wyeb](https://github.com/jun7/wyeb) -- [Luakit](https://github.com/luakit/luakit) -- ~~[Qutebrowser](https://github.com/qutebrowser/qutebrowser). More actively maintained. I don't understand the tech stack.~~ [Based](https://github.com/qutebrowser/qutebrowser/blob/main/doc/faq.asciidoc) on [Chromium](https://wiki.qt.io/QtWebEngine) - -Here are other projects I haven't checked out as much: [netsurf](https://www.netsurf-browser.org/), [uzbl](https://www.uzbl.org/), [edbrowse](https://github.com/CMB/edbrowse), - -Here are projects with their own rendering engines which could appeal to users of rosenrot: - -- [lynx](https://lynx.invisible-island.net/) (links, elinks), [w3m](https://w3m.sourceforge.net/): command line browsers. -- [dillo](https://github.com/dillo-browser/dillo/). Has its own rendering engine, and no javascript. -- [Ladybird](https://github.com/SerenityOS/serenity/tree/master/Ladybird). SerenityOS. Uses its own html and javascript engine. Compiling it on a mainstream Linux distribution, and documenting instructions could be an interesting project, but the few times I've tried that I've failed. -- [servo](https://github.com/servo/servo). Firefox/Mozilla. An in-development browser engine written in Rust, meant to replace Gecko. Could be extremely cool once it is ready, but it has been many years in development. - -### Relationship with [rose](https://github.com/mini-rose/rose) - -- Rose is a small browser based on webkit2gtk. Previously, it described itself as aiming to be a "basement for creating your own browser using [the] gtk and webkit libraries". It has since diverged into a more featureful small browser with lua bindings, and rebased its history. You can see the original, minimal version [here](https://github.com/NunoSempere/rosenrot-browser/blob/a45d1c70f58586fed97df70650e5d066b73d0a0d/rose.c). -- The current version offers compilation with both GTK3 and GTK4, and an up to date version of webkit. -- Rosenrot is my (@NunoSempere's) fork from that earlier minimal rose. It has accumulated quality of life features and, honestly, cruft, that I like, like a "readability" plugin that simplifies annoying websites like [Matt Levine's Money Stuff newsletter](https://www.bloomberg.com/opinion/articles/2022-10-18/matt-levine-s-money-stuff-credit-suisse-was-a-reverse-meme-stock). It also incorporates ad-blocking. -- Rosenrot is also a song by the German hardcore rock band [Rammstein](https://www.youtube.com/watch?v=af59U2BRRAU). - -### Comparison with [surf](https://git.suckless.org/surf/file/surf.c.html) - -- Surf is another browser based on GTK/Webkit, from the suckless community. -- It is significantly more complex: surf.c has [2170](https://git.suckless.org/surf/file/surf.c.html) lines, vs rose.c's [454](https://git.nunosempere.com/open.source/rosenrot/src/branch/master/rose.c). -- I find its code messier and harder to understand. -- Conversely, surf has significantly more configuration options, and digs deeper into webkit internals. -- Anecdotically, surf feels slower, though I haven't tested this rigorously. -- surf has a larger community, with patches and modifications. -- surf is more opinionated, but also less amateurish. -- Like rosenrot until very recently, it [uses](https://git.suckless.org/surf/file/config.mk.html#l15) an obsolete & deprecated version of [webkit](https://blogs.gnome.org/mcatanzaro/2023/03/21/webkitgtk-api-for-gtk-4-is-now-stable/) -- My recommendation would be to use rosenrot, and if you find some feature missing, either look how surf does it and import it to rose, or move to surf. - - But then again, I've built rosenrot to cater to my own tastes, so I'd say that. - -## Folk wisdom - -Of general interest: - -- I just found out that you can inspect a GTK application with the GTK explorer if you set a certain command-line variable. Try this with `make inspect`. -- Static variables keep their value between invocations. -- By default the searchbar is pretty gigantic. I've made this so because I'm a bit myopic, but also work with my laptop in a laptop stand. Anyways, if you are a more normal person you can change this in the style.css. -- The style.css usage isn't updated until installation. This is because by default rose uses the theme located in /usr/share/themes/rose/style.css, and that file isn't updated until make install. - -The "architecture" of the application looks as follows: - -![](https://raw.githubusercontent.com/NunoSempere/rosenrot-browser/master/images/0-architecture.png) - -## webkit2gtk-4.0 vs webkit2gtk-4.1 vs webkit2gtk-6.0 - -See [this blog post](https://blogs.gnome.org/mcatanzaro/2023/03/21/webkitgtk-api-for-gtk-4-is-now-stable/) for details. webkit2gtk-4.0 is deprecated, webkit2gtk-4.1 is the current [stable](https://webkitgtk.org/reference/webkit2gtk/stable/index.html) release and uses GTK3. webkit2gtk-6.0 is the current [unstable](https://webkitgtk.org/reference/webkitgtk/unstable/index.html) release, and uses GTK4. - -Migration instructions for migration to webkit2gtk-6 and GTK4 can be seen [here](https://github.com/WebKit/WebKit/blob/ed1422596dce5ff012e64a38faf402ac1674fc7e/Source/WebKit/gtk/migrating-to-webkitgtk-6.0.md) and [here](https://docs.gtk.org/gtk4/migrating-3to4.html). - -Rosenrot is currently on the stable webkit2gtk-4.1 release using GTK3, and has removed deprecated webkit apis. It has plans to eventually migrate to webkit2gtk-6.0 eventually but not soon, because the GTK4 rewrite seems onerous. - -## Ubuntu 20.04 - -A previous version of this repository was based on Ubuntu 20.04. You can still see documentation for that distribution [here](https://git.nunosempere.com/open.source/rosenrot/src/commit/8a1e0be30df52d5a21109297fd5bbc20efec1b3b), particularly a video installing rosenrot in a fresh Ubuntu 20.04 virtual machine [here](https://video.nunosempere.com/w/t3oAvJLPHTSAMViQ6zbwTV). However, that uses the webkit2gtk-4.0 library. Instead, I recommend adapting the Debian 12 instructions. - +This branch contains a minimalist version of rosenrot, similar in many ways to the original version of rose. diff --git a/TODO.md b/TODO.md index eb3f6b0..33e88cd 100644 --- a/TODO.md +++ b/TODO.md @@ -1,57 +1,3 @@ # To do -- [ ] Settle on a C standard (C11?), and use safer string handling functions provided by it. - - See make lint for purported insecurities -- [ ] Document creating new applications, e.g., as in [Asana for Linux](https://git.nunosempere.com/NunoSempere/asana-for-linux) - - [ ] This time, use something other than Whatsapp as an example syslink. -- [ ] Fix bug about distorted audio. Maybe related to [this pipewire issue]()? - - See whether it even exists at all -- [ ] Upgrade to GTK-4 / Webkitgtk 6.0? Will take a fair amount of time, since GTK4 redesigns the application model somewhat. - - Instructions for webkit-6.0 [here](https://github.com/WebKit/WebKit/blob/ed1422596dce5ff012e64a38faf402ac1674fc7e/Source/WebKit/gtk/migrating-to-webkitgtk-6.0.md) - - Instructions for GTK-4 [here](https://docs.gtk.org/gtk4/migrating-3to4.html) - - [ ] Prepare for GTK-3 to GTK-4 transition - - [ ] Understand wtf is going on with signals and events: . - - [ ] Remove webkit2gtk-4.1 and download webkit2gtk-6.0 - - [ ] Attempt to compile - -# Previously done - -- [x] Fix PageUp/PageDown shortcuts. -- ~~[ ] Set [`webkit_web_context_set_sandbox_enabled`](), as recommended [here]()~~. Irrelevant with upgrade to libsoup3. -- [x] Update to webkit2gtk-4.1 - - [x] Change README and point to last Ubuntu 20.04 commit -- [x] Add list of similar projects: -- [x] Add comparisons against rose & surf - - [x] Compare against rose - - [x] Compare against surf -- [x] ~~Doesn't work with when Spanish is selected as the language, for some reason~~ => Previously misdiagnosed. The real issue was that it freezes when interacting with [Espanso](https://espanso.org/) substitutions, which I had set-up automatically on my machine when using words containing an ñ, like my own name, Nuño. -- [x] Add css for js alerts - - [x] Add custom alert whose css can be customized - - [ ] ~~Debug problems, e.g., this version is non-blocking.~~ => will leave as is -- [x] Figure out better way to have plugins => stand_in code seems superfluous -- [x] Double check newtab/next-tab behavior => custom style now loading correctly. -- [x] Add a shortcut for hiding the search tab. => Already exists: Ctrl+K -- [x] Find out what each of the css elements refers to. => done, see make inspect -- [x] Figure out if downloading files is doable. => it is -- [x] Look at using relative rather than absolute paths for configuration. => now makefile is a bit smarter -- [x] Streamline installation a bit - - [x] Substitute paths in makefile - - [x] Create cache directory automatically -- [x] Add an installation video walkthrough. Done, [here](https://video.nunosempere.com/w/t3oAvJLPHTSAMViQ6zbwTV) -- [x] Document `stand_in.c` better -- [x] Use a makefile. - - [x] Add clean, uninstall to makefile -- [x] Mask user agent -- [x] Launch with more than one tab from command line -- [x] Figure out merge with upstream -- [x] String substitution on uri in order to redirect to better frontends. -- [x] Present "standard" browser keybindings as an alternative. -- [x] Fix zoom in new tab -- [x] Reader mode -- [x] Add reader mode to config.def. -- [x] Make tab bar slightly prettier. -- [x] Add "open in new window" functionality. - - Useful for opening links in new tab when clicking on them and selecting that option - - And for actually opening links with the href new_tab option. - - Links: [1](), [2](), [3](), [4]() - +- [ ] Create minimalist version of rosenrot diff --git a/images/0-architecture.png b/images/0-architecture.png deleted file mode 100644 index ebc6ee9..0000000 Binary files a/images/0-architecture.png and /dev/null differ diff --git a/images/1-startup.png b/images/1-startup.png deleted file mode 100644 index 1691ee6..0000000 Binary files a/images/1-startup.png and /dev/null differ diff --git a/images/2-blog.png b/images/2-blog.png deleted file mode 100644 index ceb423e..0000000 Binary files a/images/2-blog.png and /dev/null differ diff --git a/images/3-init.png b/images/3-init.png deleted file mode 100644 index 49526e5..0000000 Binary files a/images/3-init.png and /dev/null differ diff --git a/images/4-money-stuff-raw.png b/images/4-money-stuff-raw.png deleted file mode 100644 index 2b8c959..0000000 Binary files a/images/4-money-stuff-raw.png and /dev/null differ diff --git a/images/5-money-stuff-readability.png b/images/5-money-stuff-readability.png deleted file mode 100644 index d9afdbd..0000000 Binary files a/images/5-money-stuff-readability.png and /dev/null differ diff --git a/images/6-multiple-tabs.png b/images/6-multiple-tabs.png deleted file mode 100644 index 27bcc91..0000000 Binary files a/images/6-multiple-tabs.png and /dev/null differ diff --git a/images/7-hello-world-search.png b/images/7-hello-world-search.png deleted file mode 100644 index 74ac428..0000000 Binary files a/images/7-hello-world-search.png and /dev/null differ diff --git a/images/architecture.excalidraw b/images/architecture.excalidraw deleted file mode 100644 index 4125af2..0000000 --- a/images/architecture.excalidraw +++ /dev/null @@ -1,1621 +0,0 @@ -{ - "type": "excalidraw", - "version": 2, - "source": "https://excalidraw.com", - "elements": [ - { - "type": "rectangle", - "version": 292, - "versionNonce": 463851677, - "isDeleted": false, - "id": "lBjbsP-_NqzXWwmwk8A_X", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 329.9536803142096, - "y": 5275.360621605454, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 569.850017875787, - "height": 511.1985001194681, - "seed": 1544920861, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673753423, - "link": null, - "locked": false - }, - { - "type": "rectangle", - "version": 151, - "versionNonce": 1697833011, - "isDeleted": false, - "id": "D38guL0T8tAKru7Rric51", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 381.2549731527413, - "y": 5422.697051010744, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 449.99293922783875, - "height": 285.72208894312826, - "seed": 1269652371, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673769129, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 149, - "versionNonce": 39022033, - "isDeleted": false, - "id": "fFflEFFbQ4RRZ_eoByT6u", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 417.58882466308546, - "y": 5538.950319223284, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 367.1739196777344, - "height": 135, - "seed": 990822387, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157130, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "\n- redirect if annoying\n- set custom style", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "\n- redirect if annoying\n- set custom style", - "lineHeight": 1.25, - "baseline": 122 - }, - { - "type": "rectangle", - "version": 208, - "versionNonce": 215694365, - "isDeleted": false, - "id": "K-pKhA9fp5y9wAqulAG4u", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 438.1575179165558, - "y": 5110.275434716198, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 311.2534437057402, - "height": 142.91078863950042, - "seed": 844345885, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "QcXv_ZjKNXXlWXMrl5QCk" - } - ], - "updated": 1707672960762, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 175, - "versionNonce": 28815485, - "isDeleted": false, - "id": "QcXv_ZjKNXXlWXMrl5QCk", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 520.3277196888595, - "y": 5159.230829035949, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 146.9130401611328, - "height": 45, - "seed": 212952701, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707672960762, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "load_uri", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "K-pKhA9fp5y9wAqulAG4u", - "originalText": "load_uri", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "rectangle", - "version": 121, - "versionNonce": 1630623891, - "isDeleted": false, - "id": "L5ptkBpEItORiR21JrXNI", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1661.157899040488, - "y": 5156.947956050425, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 630.9615879030628, - "height": 373.3702566162666, - "seed": 305373757, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673702525, - "link": null, - "locked": false - }, - { - "type": "rectangle", - "version": 283, - "versionNonce": 1061180947, - "isDeleted": false, - "id": "kTn3xLEawZVegYqBQKAkU", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1634.5922790423188, - "y": 5581.239549379173, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 688.764684838534, - "height": 192.0593832722834, - "seed": 2059495219, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "Bf-8Lm_N3VLGxGi5-3DiP" - } - ], - "updated": 1707673706526, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 362, - "versionNonce": 798104499, - "isDeleted": false, - "id": "Bf-8Lm_N3VLGxGi5-3DiP", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1699.2898375260388, - "y": 5654.769241015314, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 559.3695678710938, - "height": 45, - "seed": 924059859, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673706526, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "handle_signal_create_new_tab", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "kTn3xLEawZVegYqBQKAkU", - "originalText": "handle_signal_create_new_tab", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "rectangle", - "version": 213, - "versionNonce": 1201318259, - "isDeleted": false, - "id": "2IpPyxs-x8Wz_kBqVa6CX", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1682.9828836653555, - "y": 5286.247648117623, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 567.3478333445603, - "height": 209.05727764828148, - "seed": 828279123, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673695733, - "link": null, - "locked": false - }, - { - "type": "rectangle", - "version": 120, - "versionNonce": 1691912531, - "isDeleted": false, - "id": "bnaXbVm0k4aYZLAvbDsAd", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1447.4287644530762, - "y": 4935.233271680985, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 980.1651284240668, - "height": 1000.0333404867163, - "seed": 1353279059, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "id": "OOGhcBFCoNkQmPrl9pRrp", - "type": "arrow" - } - ], - "updated": 1707673626112, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 35, - "versionNonce": 289395647, - "isDeleted": false, - "id": "4_Mza9X2bhxxRMV-25Uot", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1884.7487932437105, - "y": 5022.873697835296, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 164.4130401611328, - "height": 45, - "seed": 256892275, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157130, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "New tabs", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "New tabs", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 113, - "versionNonce": 571646781, - "isDeleted": false, - "id": "O0Alf80_Bn5JTcGMp1MoV", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 214.92743269900393, - "y": 4940.194365644143, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 813.0659476519272, - "height": 915.0533139079181, - "seed": 2044070291, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "id": "rgYQgvixyEZ0igTE5fZQB", - "type": "arrow" - }, - { - "id": "OOGhcBFCoNkQmPrl9pRrp", - "type": "arrow" - }, - { - "id": "u-ugk9JQxAw2y5eNv5Yfh", - "type": "arrow" - } - ], - "updated": 1707673774042, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 27, - "versionNonce": 36146097, - "isDeleted": false, - "id": "1xAPTzwqmBuUmYgRtoZUm", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 467.06286594298115, - "y": 5005.352960752135, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 235.17391967773438, - "height": 45, - "seed": 2070282547, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157131, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "Load content", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Load content", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 204, - "versionNonce": 1437022781, - "isDeleted": false, - "id": "hAR8oBD352ZvGSkOnh6SN", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1529.4312644428865, - "y": 6121.548024776036, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 892.3894547399203, - "height": 524.1017432599529, - "seed": 1221527987, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "id": "hrDotwFBpFULoOICzu5H1", - "type": "arrow" - }, - { - "id": "u-ugk9JQxAw2y5eNv5Yfh", - "type": "arrow" - } - ], - "updated": 1707673563657, - "link": null, - "locked": false - }, - { - "type": "rectangle", - "version": 159, - "versionNonce": 475047773, - "isDeleted": false, - "id": "zeYWzr8lPNlcL_AOgSJL6", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1747.570908934867, - "y": 6291.52696853602, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 487.2729721119563, - "height": 130.31719021598838, - "seed": 1569142781, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "XQdjVyJWffmfcqxY9N2ub" - } - ], - "updated": 1707673563657, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 115, - "versionNonce": 769504189, - "isDeleted": false, - "id": "XQdjVyJWffmfcqxY9N2ub", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1908.1530508135988, - "y": 6334.185563644014, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 166.1086883544922, - "height": 45, - "seed": 65177661, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673563657, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "show_bar", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "zeYWzr8lPNlcL_AOgSJL6", - "originalText": "show_bar", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "rectangle", - "version": 175, - "versionNonce": 919221277, - "isDeleted": false, - "id": "S05UWy65Aw7t3e_FKj6wF", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1671.080384242874, - "y": 6453.006965108006, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 662.9178806639407, - "height": 124.65122542398876, - "seed": 1399809459, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "cUKDAAqD6NId7B9-gW2Mt" - } - ], - "updated": 1707673563657, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 182, - "versionNonce": 50833533, - "isDeleted": false, - "id": "cUKDAAqD6NId7B9-gW2Mt", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1721.1480281881254, - "y": 6492.83257782, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 562.7825927734375, - "height": 45, - "seed": 1299164371, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673563657, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "handle_signal_bar_press_enter", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "S05UWy65Aw7t3e_FKj6wF", - "originalText": "handle_signal_bar_press_enter", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "text", - "version": 117, - "versionNonce": 1051526111, - "isDeleted": false, - "id": "-jDLBavavoJt3OpRHv4ll", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 486.8937427149799, - "y": 6351.019598852015, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 288.89129638671875, - "height": 45, - "seed": 913909523, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157131, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "handle_shortcut", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "handle_shortcut", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 121, - "versionNonce": 1757871805, - "isDeleted": false, - "id": "L5MRksGchbiVRhzoFbOpb", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 435.9000595869843, - "y": 6308.524862912019, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 390.9515706479651, - "height": 124.65122542398876, - "seed": 1926801363, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673251407, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 99, - "versionNonce": 293399953, - "isDeleted": false, - "id": "2Y9_gUQQFGzNZEu8t6uFs", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 447.23198917098307, - "y": 6504.000648236001, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 408.1956481933594, - "height": 45, - "seed": 1896165373, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157131, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "handle_signal_keypress", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "handle_signal_keypress", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 114, - "versionNonce": 1180316541, - "isDeleted": false, - "id": "1rI6IPuRKyVZy2I6pNp8U", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 413.23620041898675, - "y": 6464.338894692005, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 504.27086648795466, - "height": 138.81613740398734, - "seed": 983950195, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673251407, - "link": null, - "locked": false - }, - { - "type": "rectangle", - "version": 117, - "versionNonce": 373164445, - "isDeleted": false, - "id": "ZJDyrJsYvkhB_BzYIvayb", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 274.42006301499896, - "y": 6132.8799543600335, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 798.9010356719282, - "height": 543.932620031951, - "seed": 1295829843, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "id": "rgYQgvixyEZ0igTE5fZQB", - "type": "arrow" - }, - { - "id": "hKROsWtUG2MVFm6pbsAa9", - "type": "arrow" - }, - { - "id": "hrDotwFBpFULoOICzu5H1", - "type": "arrow" - } - ], - "updated": 1707673567319, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 27, - "versionNonce": 54472703, - "isDeleted": false, - "id": "Q46NuA9EPguz4jqy-C0f2", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 467.0628659429814, - "y": 6200.871531864027, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 396.3043518066406, - "height": 45, - "seed": 663162195, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157131, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "Shortcuts and actions", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Shortcuts and actions", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "arrow", - "version": 101, - "versionNonce": 191281149, - "isDeleted": false, - "id": "rgYQgvixyEZ0igTE5fZQB", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 596.2489821052908, - "y": 6127.213989568034, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 8.864939853058445, - "height": 266.30034522397546, - "seed": 523993811, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1707673774042, - "link": null, - "locked": false, - "startBinding": { - "elementId": "ZJDyrJsYvkhB_BzYIvayb", - "gap": 5.6659647919991585, - "focus": -0.16746411483253631 - }, - "endBinding": { - "elementId": "O0Alf80_Bn5JTcGMp1MoV", - "gap": 5.665964791997794, - "focus": 0.1173541054782275 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -8.864939853058445, - -266.30034522397546 - ] - ] - }, - { - "type": "arrow", - "version": 23, - "versionNonce": 686349203, - "isDeleted": false, - "id": "hKROsWtUG2MVFm6pbsAa9", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1078.9870634789268, - "y": 6138.545919152033, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 376.7866586679661, - "height": 218.13964449198193, - "seed": 1393157853, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1707673280037, - "link": null, - "locked": false, - "startBinding": { - "elementId": "ZJDyrJsYvkhB_BzYIvayb", - "focus": -0.06311111111110633, - "gap": 5.665964791999613 - }, - "endBinding": null, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 376.7866586679661, - -218.13964449198193 - ] - ] - }, - { - "type": "arrow", - "version": 216, - "versionNonce": 1565835027, - "isDeleted": false, - "id": "hrDotwFBpFULoOICzu5H1", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1087.4860106669257, - "y": 6427.510123544007, - "strokeColor": "#9c36b5", - "backgroundColor": "transparent", - "width": 424.9473593999619, - "height": 0, - "seed": 328404211, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1707673569787, - "link": null, - "locked": false, - "startBinding": { - "elementId": "ZJDyrJsYvkhB_BzYIvayb", - "focus": 0.08333333333333513, - "gap": 14.164911979998578 - }, - "endBinding": { - "elementId": "hAR8oBD352ZvGSkOnh6SN", - "focus": -0.1675675675675617, - "gap": 16.99789437599884 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 424.9473593999619, - 0 - ] - ] - }, - { - "type": "arrow", - "version": 104, - "versionNonce": 1758239933, - "isDeleted": false, - "id": "OOGhcBFCoNkQmPrl9pRrp", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1435.9428453748942, - "y": 5360.4529481605805, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 393.7845530439645, - "height": 13.2858147107072, - "seed": 482123795, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1707673774042, - "link": null, - "locked": false, - "startBinding": { - "elementId": "bnaXbVm0k4aYZLAvbDsAd", - "gap": 11.485919078181837, - "focus": 0.17603894030176798 - }, - "endBinding": { - "elementId": "O0Alf80_Bn5JTcGMp1MoV", - "gap": 14.164911979998578, - "focus": -0.02077151335312082 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -393.7845530439645, - 13.2858147107072 - ] - ] - }, - { - "type": "rectangle", - "version": 167, - "versionNonce": 1561289395, - "isDeleted": false, - "id": "AlUiNslcnYyZfAjv_2JMm", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1583.2579299668814, - "y": 4421.758587176188, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 606.2582327439459, - "height": 390.95157064796416, - "seed": 1299739283, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [], - "updated": 1707673578348, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 135, - "versionNonce": 931861361, - "isDeleted": false, - "id": "K0CghXN_uWQwYvTExNr05", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1724.907049766869, - "y": 4484.0841998881815, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 303.15216064453125, - "height": 45, - "seed": 641161555, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157132, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "Initialize and run", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Initialize and run", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 167, - "versionNonce": 1954976243, - "isDeleted": false, - "id": "N5lcCnRhJYGZLkcFGkfbe", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1724.907049766868, - "y": 4656.8961260441665, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 328.62595793597075, - "height": 121.8182430279885, - "seed": 1080775827, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "e6tfFYraAdaCqKf28dLvN" - } - ], - "updated": 1707673578348, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 154, - "versionNonce": 2087050131, - "isDeleted": false, - "id": "e6tfFYraAdaCqKf28dLvN", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1826.5026367670798, - "y": 4695.305247558161, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 125.43478393554688, - "height": 45, - "seed": 1034146483, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673578348, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "config.h", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "N5lcCnRhJYGZLkcFGkfbe", - "originalText": "config.h", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "text", - "version": 135, - "versionNonce": 687265823, - "isDeleted": false, - "id": "IK0wfqCqtOvFtoF7rkfM_", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1818.3954688348604, - "y": 4571.906654164174, - "strokeColor": "#1e1e1e", - "backgroundColor": "transparent", - "width": 99.06521606445312, - "height": 45, - "seed": 503642525, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157132, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "main.c", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "main.c", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "text", - "version": 69, - "versionNonce": 681147729, - "isDeleted": false, - "id": "Kx8WB56e2RavWYFlO2cGn", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 489.7267251109794, - "y": 5481.2940032800925, - "strokeColor": "#1971c2", - "backgroundColor": "transparent", - "width": 269.3043518066406, - "height": 45, - "seed": 1122901651, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157132, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "Optional plugins", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Optional plugins", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "text", - "version": 147, - "versionNonce": 1707375679, - "isDeleted": false, - "id": "vC0onKP_9vX3ixH76Pe7G", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1702.2431905988706, - "y": 6183.873637488028, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 613.8695678710938, - "height": 45, - "seed": 1754289821, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157133, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "Top bar for urls, search and find ", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Top bar for urls, search and find ", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "arrow", - "version": 273, - "versionNonce": 591128925, - "isDeleted": false, - "id": "u-ugk9JQxAw2y5eNv5Yfh", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1515.2663524628852, - "y": 6123.4617791436385, - "strokeColor": "#e03131", - "backgroundColor": "transparent", - "width": 481.6070073199544, - "height": 325.3664279363484, - "seed": 2127178397, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 2 - }, - "boundElements": [], - "updated": 1707673777208, - "link": null, - "locked": false, - "startBinding": { - "elementId": "hAR8oBD352ZvGSkOnh6SN", - "focus": -0.0902848528387189, - "gap": 14.164911980001307 - }, - "endBinding": { - "elementId": "O0Alf80_Bn5JTcGMp1MoV", - "focus": 0.16648899211389898, - "gap": 5.665964791999613 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - -481.6070073199544, - -325.3664279363484 - ] - ] - }, - { - "type": "text", - "version": 147, - "versionNonce": 603958065, - "isDeleted": false, - "id": "sPhKUdkpNyJCCbt_r0LiU", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 36.44954175102009, - "y": 4561.204091910091, - "strokeColor": "#c2255c", - "backgroundColor": "transparent", - "width": 1391.521728515625, - "height": 112.36221017407769, - "seed": 1216168221, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157134, - "link": null, - "locked": false, - "fontSize": 89.88976813926215, - "fontFamily": 1, - "text": "Rough architecture of rosenrot", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "Rough architecture of rosenrot", - "lineHeight": 1.25, - "baseline": 79 - }, - { - "type": "text", - "version": 106, - "versionNonce": 1569234015, - "isDeleted": false, - "id": "yee1lhHS6ghMhO_e1j08Z", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1784.3996800828627, - "y": 5322.646989104106, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 362.15216064453125, - "height": 45, - "seed": 1236843613, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157135, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "create_new_webview", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "create_new_webview", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "rectangle", - "version": 84, - "versionNonce": 1350510771, - "isDeleted": false, - "id": "LMwdgqzKNCT3uH7TaK5_P", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1753.2368737268662, - "y": 5404.803478588098, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 195.4757853239821, - "height": 76.49052469199341, - "seed": 979800371, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "gyuIu-KcZvrJ6XlsdvmlC" - } - ], - "updated": 1707673695733, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 72, - "versionNonce": 1654495827, - "isDeleted": false, - "id": "gyuIu-KcZvrJ6XlsdvmlC", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1802.333462372744, - "y": 5420.548740934095, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 97.28260803222656, - "height": 45, - "seed": 1247440083, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673695733, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "cache", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "LMwdgqzKNCT3uH7TaK5_P", - "originalText": "cache", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "rectangle", - "version": 104, - "versionNonce": 926734323, - "isDeleted": false, - "id": "s1hSl1gNctBPfZVaIi0gx", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1972.7930094168469, - "y": 5397.721022598097, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 195.4757853239821, - "height": 76.49052469199341, - "seed": 1473909011, - "groupIds": [], - "frameId": null, - "roundness": { - "type": 3 - }, - "boundElements": [ - { - "type": "text", - "id": "PB6kry_fKCvxsgmBtH-BD" - } - ], - "updated": 1707673695733, - "link": null, - "locked": false - }, - { - "type": "text", - "version": 111, - "versionNonce": 1550016915, - "isDeleted": false, - "id": "PB6kry_fKCvxsgmBtH-BD", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1994.3243819982715, - "y": 5413.466284944094, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 152.4130401611328, - "height": 45, - "seed": 591165107, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707673695733, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "style.css", - "textAlign": "center", - "verticalAlign": "middle", - "containerId": "s1hSl1gNctBPfZVaIi0gx", - "originalText": "style.css", - "lineHeight": 1.25, - "baseline": 35 - }, - { - "type": "text", - "version": 43, - "versionNonce": 304422161, - "isDeleted": false, - "id": "neK9NTR33ct1doVxU9tDD", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "angle": 0, - "x": 1727.7400321628684, - "y": 5200.828746076117, - "strokeColor": "#2f9e44", - "backgroundColor": "transparent", - "width": 478.36956787109375, - "height": 45, - "seed": 1269716797, - "groupIds": [], - "frameId": null, - "roundness": null, - "boundElements": [], - "updated": 1707683157135, - "link": null, - "locked": false, - "fontSize": 36, - "fontFamily": 1, - "text": "notebook_create_new_tab", - "textAlign": "left", - "verticalAlign": "top", - "containerId": null, - "originalText": "notebook_create_new_tab", - "lineHeight": 1.25, - "baseline": 32 - }, - { - "type": "text", - "version": 64, - "versionNonce": 1679014015, - "isDeleted": false, - "id": "sf9SE5B7Dp_E-ut2VHonj", - "fillStyle": "hachure", - "strokeWidth": 4, - "strokeStyle": "solid", - "roughness": 2, - "opacity": 100, - "a