diff --git a/example/three/sandbox/index.html b/example/three/sandbox/index.html index e8f2e57..66f4d4e 100644 --- a/example/three/sandbox/index.html +++ b/example/three/sandbox/index.html @@ -64,7 +64,7 @@ camera = new THREE.PerspectiveCamera( 70, window.innerWidth / window.innerHeight, 0.1, 2000 ); - renderer = new THREE.WebGLRenderer( { antialias: true } ); + renderer = new THREE.WebGLRenderer( { antialias: true, stencil:true } ); renderer.autoClear = false; renderer.setPixelRatio( window.devicePixelRatio ); renderer.setSize( window.innerWidth, window.innerHeight ); diff --git a/index.html b/index.html index 5b84f21..1f6958c 100644 --- a/index.html +++ b/index.html @@ -1018,7 +1018,7 @@ button.sidebar-toggle{ {"created":"20230921095138812","text":"Hypermedia browsers supporting XR Fragments can be implemented on various levels:\n\n* thru the lens of HTML (a \u003Cb>pseudo-browser\u003C/b> using javascript like \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">the sandbox\u003C/a> which uses the [THREE](#🧰%20THREE.js) or [AFRAME](#🧰%20AFRAME) javascript library)\n* the [Godot XRF Library](#%F0%9F%A7%B0%20GODOT) is also suitable direction for making native XR hypermedia browsers.\n* thru the lens of hypermedia browsers (opening XR Documents (`.gltf`, `.obj` e.g) natively using URLs, these don't exist (yet))\n> in progress: integrating the XR Fragment parser on native browserlevel (Wolvic, Chromium-based browsers e.g.) for best performance.","tags":"[[🧰 Libraries & Tools]]","title":"🌎 3D hypermedia browsers","modified":"20241209132308842","type":"text/markdown"}, {"created":"20240207122728580","text":"The current scene and [[src]] media (including the 3D timeline) can be further manipulated using [[Media Fragment URIs|https://www.w3.org/TR/media-frags/]].\n\nSo far `#t=` has been standardized by W3C.\u003Cbr>\nThough not being part of the XR Fragments standard, the demos suggest extra media fragments like `#loop`, `#s` and `#uv` to compensate for the lack of loop/speed/uv control.\n\u003Cbr>\u003Cbr>\n\nXR Fragments is endorsing W3C Media Fragments for media-control, as well as [[URI Templates|https://www.rfc-editor.org/rfc/rfc6570]] for text-templating.\n\n\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/media_uv_template_fragments.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n","tags":"[[🖇 implicit URI fragments]]","title":"🎞 Media Fragments","modified":"20241007082930415"}, {"created":"20230427172131986","text":"> [](https://github.com/coderofsalvation/xrfragment/actions)\u003Cbr>Bare minimum addressibility URI fragments for spatial browsers & apps. \u003Cbr>It allows users to share 4D (intent) URLs to eachother like:\u003Cbr>`https://linux.world/#pos=0,0,1&t=1,100`\u003Cbr>`linuxapp://conference/nixworkshop?newuser#pos=0,0,2&t=2,200`\u003Cbr>`androidapp://page1?tutorial#pos=0,0,1&t1,100`\u003Cbr>\n\nAdressibility is the core of the XR Fragments spec:\n\n\u003C\u003Ctoc-selective-expandable 'level1' sort[title]>>\n\nHere's pseudocode for a level1 XR Fragments browser in THREE.js:\n\n```\nconst url = 'world.glb#pos=roomB&car'\ndocument.location.search = url\nconst file = url.split(\"#\")[0] \nconst xrf = new URLSearchParams( url.split(\"#\")[1] )\nconst refs = ([...xrf.keys()]).filter( (k) => !k.match(/(pos|rot|t)/) ) \nconst model = loadGLB(file)\nscene.add(model)\nscene.add(cam)\nscene.traverse( (n) => {\n if( n.name == n.get('pos') ){\n cam.position.copy(n.position)\n }\n if( refs.contain(n.name) ) alert(\"selected '+n.name)\n if( n.userData.href ){\n n.addEventListener('click', () => alert('clicked') )\n }\n})\nif( xrf.get('t') ) playAnimations()\n```\n\n> for robust parsing of XR Fragments use the polyglot [parser](#🔨%20XR%20Fragments%20parser)\n\n\u003Cbr>\n\n\u003Cbr>\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Cbr>\u003Cbr>\n\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#list-of-uri-fragments\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\nFor more info see [How it works](#How%20it%20works)\n\n","tags":"Reference","title":"📜 level1: URL","modified":"20241013093133857","type":"text/markdown"}, -{"created":"20240206123412197","text":"All modern 3D editors allow embedding metadata in objects of an exported 3D file.\u003Cbr>\n\n> An Easy **nocode** way to add metadata is [by adding custom properties in blender e.g.](https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html). Basically:\n\u003Cbr>\u003Cbr>\n\n* [href](#href) for clickable links\n* [src](#src) for embedding content\n* [tag](#tag) to tag things\n\n\u003Cbr>\n\n| custom property | type | functionality |\n|----------|------|--------------|\n| [href](#href) | string (uri or [predefined view](#predefined_view)) | href navigation / portals / teleporting to other XR documents|\n| [src](#src) |string (uri or [predefined view](#predefined_view) or [query](#queries)) | lazyloading of (partial) local/external assets/scenes (3D iframes) |\n| [tag](#tag) |string|space-separated tagging of objects (like CSS class) for XRWG and or queries|\n\n\u003Cbr>\n> In Editors like \u003Ca href=\"https://blender.org\" target=\"_blank\">blender.org\u003C/a> these are called ''custom properties''.\n\u003Cbr>\u003Cbr>\n\n\u003Cb>Object metadata\u003C/b> can also be added programmatically, for example in \u003Ca href=\"https://threejs.org\" target=\"_blank\">AFRAME/THREE.js\u003C/a> can export GLB/USDZ/OBJ/COLLADA-files with them, after setting `myobject.userData.href = \"#pos=nameofplane\"` e.g.\n\n## Descriptive Metadata\n\nXR Fragments does not re-invent **descriptive metadata**, but encourages adding existing standards to 3D nodes, most notably:\n\n* [ARIA](https://www.w3.org/WAI/standards-guidelines/aria/) attributes (`aria-*: .....`)\n\n> **ARIA** (`aria-description`) is the most important to support, as it promotes accessibility and allows scene transcripts. Please start `aria-description` with a verb to aid transcripts.\n \nExample: object 'tryceratops' with `aria-description: is a huge dinosaurus standing on a #mountain` generates transcript `#tryceratops is a huge dinosaurus standing on a #mountain`.\u003Cbr>\nThese hashtags are clickable XR Fragments (activating the visible-\n\u003Cbr>\nbut also the following attributes are encouraged:\n\n* [SPDX](https://spdx.dev/) license information\n* [Open Graph](https://ogp.me) attributes (`og:*: .....`)\n* [Dublin-Core](https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/) attributes(`dc:*: .....`)\n* [BibTex](https://bibtex.eu/fields) when known bibtex-keys exist with values enclosed in `{` and `},`\n\nThese attributes can be scanned and presented during an `href` or `src` eye/mouse-over.\n\n\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/descriptive-metadata-implodes-3D-to-text.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\n## Spec\n\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#additional-scene-metadata\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n","tags":"Reference","title":"📜 level2: metadata extras","modified":"20241007085507399","type":"text/markdown"}, +{"created":"20240206123412197","text":"All modern 3D editors allow embedding metadata in objects of an exported 3D file.\u003Cbr>\n\n> An Easy **nocode** way to add metadata is [by adding custom properties in blender e.g.](https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html). This is demonstrated in the getting started video: \n\n\u003Cdiv style=\"max-width:300px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4#t=200\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\u003Cbr>\u003Cbr>\n\n* [href](#href) for clickable links\n* [src](#src) for embedding content\n* [tag](#tag) to tag things\n\n\u003Cbr>\n\n\n\n| custom property | type | functionality |\n|----------|------|--------------|\n| [href](#href) | string (uri or [predefined view](#predefined_view)) | href navigation / portals / teleporting to other XR documents|\n| [src](#src) |string (uri or [predefined view](#predefined_view) or [query](#queries)) | lazyloading of (partial) local/external assets/scenes (3D iframes) |\n| [tag](#tag) |string|space-separated tagging of objects (like CSS class) for XRWG and or queries|\n\n\u003Cbr>\n> In Editors like \u003Ca href=\"https://blender.org\" target=\"_blank\">blender.org\u003C/a> these are called ''custom properties''.\n\u003Cbr>\u003Cbr>\n\n\u003Cb>Object metadata\u003C/b> can also be added programmatically, for example in \u003Ca href=\"https://threejs.org\" target=\"_blank\">AFRAME/THREE.js\u003C/a> can export GLB/USDZ/OBJ/COLLADA-files with them, after setting `myobject.userData.href = \"#pos=nameofplane\"` e.g.\n\n## Descriptive Metadata\n\nXR Fragments does not re-invent **descriptive metadata**, but encourages adding existing standards to 3D nodes, most notably:\n\n* [ARIA](https://www.w3.org/WAI/standards-guidelines/aria/) attributes (`aria-*: .....`)\n\n> **ARIA** (`aria-description`) is the most important to support, as it promotes accessibility and allows scene transcripts. Please start `aria-description` with a verb to aid transcripts.\n \nExample: object 'tryceratops' with `aria-description: is a huge dinosaurus standing on a #mountain` generates transcript `#tryceratops is a huge dinosaurus standing on a #mountain`.\u003Cbr>\nThese hashtags are clickable XR Fragments (activating the visible-\n\u003Cbr>\nbut also the following attributes are encouraged:\n\n* [SPDX](https://spdx.dev/) license information\n* [Open Graph](https://ogp.me) attributes (`og:*: .....`)\n* [Dublin-Core](https://www.dublincore.org/specifications/dublin-core/application-profile-guidelines/) attributes(`dc:*: .....`)\n* [BibTex](https://bibtex.eu/fields) when known bibtex-keys exist with values enclosed in `{` and `},`\n\nThese attributes can be scanned and presented during an `href` or `src` eye/mouse-over.\n\n\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/descriptive-metadata-implodes-3D-to-text.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\n## Spec\n\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#additional-scene-metadata\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n","tags":"Reference","title":"📜 level2: metadata extras","modified":"20250207155122522","type":"text/markdown"}, {"created":"20230830155951504","text":"this document was [moved here](#📜%20XR%20Fragments)","tags":"","title":"📜 XR fragments","modified":"20230830160038977","type":"text/markdown"}, {"created":"20240130111558609","text":"\nfeature heuristics are basically features which can be inferred from absense or presence of certain metadata.\n\u003Cbr>\u003Cbr>\n\nFor example, 3D objects always have a name, and are (not) children of certain 3D objects.\nAll this indirect information can be used to activate certain viewer-features.\n\u003Cbr>\u003Cbr>\nAll feature heuristics have been with care, to ensure they can be extracted from both new/legacy 3D fileformats.\n\u003Cbr>\u003Cbr>\n","tags":"Reference","title":"📡 implicit scene features","modified":"20241007083525195"}, {"created":"20240626095757672","text":"URLs are the heart of XR Fragment-based 3D Hypermedia:\n\n* they allow navigating the XR browser to a model\n* they allow position/rotating the camera in front of something somewhere (see [[#pos]] and [[#rot]])\n* they allow back/forward navigation \n* they allow adressing other 3D models, images, files (see [[src]])\n* they allow [[controlling media files|🎞 Media Fragments]]\n* they allow adressing parts of a 3D model (see [[🖇 implicit URI fragments]])\n\n> To see more, please unfold the Reference > URL menu","tags":"[[📜 level1: URL]]","title":"🔗 URL","modified":"20241007085518868"}, @@ -1092,7 +1092,7 @@ button.sidebar-toggle{ {"created":"20230425164931250","title":"$:/state/folded/AFRAME template","text":"show","modified":"20230425164935940"}, {"created":"20230425164931250","title":"$:/state/folded/GLSL shader template","text":"show","modified":"20230425164939576"}, {"created":"20230424142403302","text":"checked","title":"$:/state/import/select-all","modified":"20230424142404392"}, -{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"yes","modified":"20250207151207288"}, +{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"no","modified":"20250207155128722"}, {"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Reference","modified":"20250115104419427"}, {"created":"20230427102758222","title":"$:/state/plugin-info--1887569658-$:/plugins/ihm/tidgraph--50210113","text":"documentation","modified":"20230427102759911"}, {"created":"20230427092525294","title":"$:/state/plugin-info--391242618-$:/plugins/tiddlywiki/browser-storage","text":"yes","modified":"20230427092525375"}, @@ -1101,7 +1101,7 @@ button.sidebar-toggle{ {"created":"20240627123502664","title":"$:/state/plugin-info-1605320774-$:/themes/nico/notebook--1711715474","text":"contents","modified":"20240627123505187"}, {"created":"20230424093627704","title":"$:/state/plugin-info-833095967-Draft of '$:/core'---1604322978","text":"readme","modified":"20230424093629208"}, {"created":"20230423163649566","title":"$:/state/showeditpreview","text":"no","modified":"20250207145432476"}, -{"created":"20230504174435745","title":"$:/state/sidebar","text":"“no”","modified":"20250207145419602"}, +{"created":"20230504174435745","title":"$:/state/sidebar","text":"“no”","modified":"20250207153552427"}, {"created":"20230423163453188","title":"$:/state/tab--1963855381","text":"$:/core/ui/ControlPanel/Palette","modified":"20240718192009185"}, {"created":"20230427092954391","title":"$:/state/tab--2112689675","text":"$:/core/ui/ControlPanel/Basics","modified":"20230523124903522"}, {"created":"20230424093058379","title":"$:/state/tab--697582678","text":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20230427093030201"}, @@ -1148,7 +1148,7 @@ button.sidebar-toggle{ {"created":"20230622104329622","title":"$:/state/toc/Reference/js/AFRAME-THREE.js--403145756","text":"open","modified":"20230622104329622"}, {"created":"20230622111759784","title":"$:/state/toc/Reference/The parser-THREE.js--403145756","text":"open","modified":"20230622111759784"}, {"title":"$:/status/RequireReloadDueToPluginChange","text":"no"}, -{"title":"$:/StoryList","text":"","list":"[[XR Fragments]]"}, +{"title":"$:/StoryList","created":"20250207155031738","text":"","list":"[[XR Fragments]]","modified":"20250207155031738"}, {"created":"20230423163445948","title":"$:/theme","text":"$:/themes/nico/notebook","modified":"20240718191943667"}, {"created":"20240627122947980","text":"{\n \"tiddlers\": {\n \"$:/themes/nico/notebook/LICENSE\": {\n \"title\": \"$:/themes/nico/notebook/LICENSE\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210118213330307\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\nMIT License Copyright (c) 2020 [[Nicolas Petton|https://nicolas.petton.fr]] nicolas@petton.fr\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is furnished\\nto do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice (including the next\\nparagraph) shall be included in all copies or substantial portions of the\\nSoftware.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF\\nOR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\"\n },\n \"$:/themes/nico/notebook/themetweaks\": {\n \"title\": \"$:/themes/nico/notebook/themetweaks\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20210123211851680\",\n \"tags\": \"$:/tags/ControlPanel/Appearance\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\nYou can tweak certain aspects of the ''Notebook'' theme.\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003Coption value=\\\"pre\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"pre-wrap\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">Reveal tiddler controls on mouseover\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/fontfamily\\\">\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\">\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\">\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n\\n! \u003C\u003Clingo Metrics>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\">\u003C\u003Clingo Metrics/FontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\">\u003C\u003Clingo Metrics/LineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\">\u003C\u003Clingo Metrics/BodyFontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\">\u003C\u003Clingo Metrics/BodyLineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\">\u003C\u003Clingo Metrics/SidebarBreakpoint>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarBreakpoint/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\">\u003C\u003Clingo Metrics/SidebarWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/story-width\\\">\u003C\u003Clingo Metrics/StoryWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/story-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\\n\"\n },\n \"$:/themes/nico/notebook/base\": {\n \"title\": \"$:/themes/nico/notebook/base\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210120224227503\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n\\\\define if-sidebar(text)\\n \u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n\\n\\\\define if-reveal-tiddler-controls-on-hover(text)\\n \u003C$reveal state=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n \\n/* Top and bottom bars */\\n\\n/* Hide the top-right bar */\\n.tc-topbar.tc-topbar-right {\\n display: none;\\n}\\n\\ndiv.tc-sidebar-header {\\n padding: 0;\\n min-height: 0;\\n}\\n\\n.tc-story-river {\\n padding: 6px 0 !important;\\n width: 100% !important;\\n max-width: {{$:/themes/nico/notebook/metrics/story-width}} !important;\\n margin: 0 auto !important;\\n margin-top: 34px !important;\\n}\\n\\ndiv.tc-tiddler-frame {\\n width: 100%;\\n margin: 20px 0;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n box-shadow: 0 5px 20px rgba(0,0,0, 0.12);\\n border-radius: 6px;\\n padding: 42px 60px 60px 60px;\\n}\\n\\nh1.tc-site-title {\\n margin-top: 14px;\\n font-size: 1.5em !important;\\n}\\n\\n.nc-bar {\\n padding: 10px;\\n height: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour page-background>>;\\n display: flex;\\n justify-content: space-between;\\n}\\n\\n.nc-topbar-wrapper {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar.nc-topbar {\\n top: 0;\\n background: \u003C\u003Ccolour page-background>>ee;\\n max-width: calc({{$:/themes/nico/notebook/metrics/story-width}} + 40px);\\n padding: 10px 20px;\\n margin: 0 auto;\\n}\\n\\n.nc-bar.nc-bottombar {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar .left svg {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n padding: .6em 1em;\\n margin-top: -.2em;\\n background: \u003C\u003Ccolour sidebar-button-foreground>>44;\\n color: \u003C\u003Ccolour foreground>>cc;\\n transition: all ease-in .2s;\\n border: 1px solid transparent;\\n outline: 0;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"]:focus {\\n width: 300px;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour primary>>;\\n box-shadow: 0 0 .2rem 0 \u003C\u003Ccolour primary>>;\\n}\\n\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button {\\n -webkit-appearance: auto;\\n}\\n\\n.nc-bar .tc-block-dropdown.tc-search-drop-down {\\n margin-left: 0;\\n width: 400px;\\n border: 0;\\n box-shadow: 0 0 6px 0 rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 20px 0;\\n}\\n\\n.nc-bar p {\\n margin: 0;\\n}\\n\\n.nc-bar .tc-page-controls {\\n margin-top: 0;\\n}\\n\\n.nc-bar .tc-page-controls button {\\n margin-right: .8em;\\n}\\n\\n.nc-bar .tc-page-controls button .tc-btn-text {\\n font-size: 14px;\\n}\\n\\n.nc-bar .tc-block-dropdown {\\n max-height: 70vh;\\n overflow: auto;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-topbar {\\n display: none;\\n }\\n\\n .tc-story-river {\\n padding: 0 !important;\\n margin-top: 0 !important;\\n margin-bottom: 60px !important;\\n }\\n\\n div.tc-tiddler-frame {\\n margin: 0;\\n box-shadow: none;\\n border-radius: 0;\\n border-top: 0;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-bottombar {\\n display: none;\\n }\\n}\\n\\n@media(max-width: 1100px) {\\n .nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n }\\n}\\n\\n/* Sidebar */\\n\\n@keyframes sidebar-appear {\\n 0% {\\n left: -{{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n 100% {\\n left: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n animation: sidebar-appear .14s;\\n padding-top: 10px;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n.nc-sidebar {\\n background: \u003C\u003Ccolour tiddler-background>>;\\n border-right: 1px solid \u003C\u003Ccolour tiddler-border>>;\\n width: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n overflow-y: auto;\\n overflow-x: hidden;\\n z-index: 100;\\n}\\n\\n.nc-sidebar .segment {\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar ol {\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n line-height: 1.8em;\\n}\\n\\n.nc-sidebar ol ol {\\n padding-left: 18px;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .mobile-only {\\n display: none;\\n }\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .desktop-only {\\n display: none;\\n }\\n}\\n\\n.nc-sidebar h1.tc-site-title {\\n margin: 0;\\n}\\n\\n.nc-sidebar p {\\n margin: 6px 0;\\n}\\n\\n.nc-sidebar .tc-site-subtitle {\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n}\\n\\n.nc-sidebar .section .label {\\n padding: 2px 0;\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n fill: \u003C\u003Ccolour site-title-foreground>>;\\n font-weight: bold;\\n line-height: 1.6em;\\n display: block;\\n width: 100%;\\n text-align: left;\\n padding: 8px 15px;\\n border-radius: 0;\\n}\\n\\n.nc-sidebar .section:not(.open) .label:hover {\\n background: rgba(0,0,0,.06);\\n}\\n\\n.nc-sidebar .section.open .label {\\n color: \u003C\u003Ccolour tiddler-background>>;\\n fill: \u003C\u003Ccolour tiddler-background>>;\\n background: \u003C\u003Ccolour primary>>;\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar .section .label .caret {\\n display: inline-block;\\n width: 15px;\\n float: right;\\n}\\n\\n.nc-sidebar .content {\\n padding: 6px 15px;\\n font-size: 1em;\\n}\\n\\n.nc-sidebar .tc-tiddlylink {\\n color: \u003C\u003Ccolour primary>>;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n position: fixed;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n @keyframes sidebar-slide {\\n 0% {\\n left: -100vw;\\n }\\n 100% {\\n left: 0;\\n }\\n }\\n .nc-sidebar {\\n overflow: auto;\\n position: fixed;\\n width: 100%;\\n left: 0;\\n top: 0;\\n bottom: 48px;\\n z-index: 3000;\\n animation: sidebar-slide ease-in .2s;\\n animation-fill-mode: forwards;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-page-container {\\n margin-left: {{$:/themes/nico/notebook/metrics/sidebar-width}} !important;\\n }\\n\\n .nc-topbar-wrapper {\\n left: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n/* Animate the hamburger button */\\n\\n@keyframes menu-bars-1 {\\n 0% {}\\n 100% {\\n transform: rotate(-45deg) translateY(-10px) translateX(-6px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n@keyframes menu-bars-2 {\\n 0% {}\\n 100% { opacity: 0; }\\n}\\n\\n@keyframes menu-bars-3 {\\n 0% {}\\n 100% {\\n transform: rotate(45deg) translateY(6px) translateX(2px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n.sidebar-toggle {\\n /* position: fixed; */\\n /* top: 6px; */\\n /* left: 6px; */\\n /* z-index: 600; */\\n /* padding: 4px; */\\n /* border-radius: 8px; */\\n margin-right: 10px;\\n transition: all ease-in-out .2s;\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.sidebar-toggle:hover,\\n.sidebar-toggle.open {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground-hover>>;\\n}\\n\\n/* @media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { */\\n/* .sidebar-toggle { */\\n/* top: auto; */\\n/* bottom: 10px; */\\n/* left: 10px; */\\n/* } */\\n/* } */\\n\\n.sidebar-toggle .bars .bar {\\n transform: rotate(0) translateY(0) translateX(0);\\n opacity: 1;\\n transform-origin: 20px 10px;\\n transition: transform 0.4s ease-in-out, opacity 0.2s ease-in-out, fill .4s ease-in-out;\\n}\\n\\n.sidebar-toggle .bars .bar:nth-of-type(3) {\\n transform-origin: 20px 20px;\\n}\\n\\n.sidebar-toggle.open .bars .bar:nth-of-type(1) {\\n animation: menu-bars-1 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(2) {\\n animation: menu-bars-2 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(3) {\\n animation: menu-bars-3 .6s;\\n animation-fill-mode: forwards;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n div.tc-tiddler-frame {\\n padding: 14px;\\n }\\n}\\n\\n/* Inputs */\\n\\ninput, textarea {\\n transition: border .14s ease-in-out;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n padding: .5em;\\n border-radius: 4px;\\n}\\n\\ninput:focus, textarea:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\nbutton {\\n border-radius: 1.5em;\\n border: 1px solid #ccc;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n padding: .3em 1em;\\n cursor: pointer;\\n transition: box-shadow ease-in .1s;\\n color: \u003C\u003Ccolor foreground>>;\\n}\\n\\nbutton:focus, button:active {\\n outline: 0 none;\\n}\\n\\nbutton.tc-btn-invisible {\\n border-radius: 0;\\n}\\n\\n.tc-editor-toolbar button,\\n.tc-editor-toolbar button.tc-btn-invisible {\\n border-radius: 3px;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n fill: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n}\\n\\n.tc-editor-toolbar button:hover,\\n.tc-editor-toolbar button:active {\\n border-color: \u003C\u003Ccolour primary>>;\\n background: \u003C\u003Ccolour primary>>;\\n color: \u003C\u003Ccolour background>>;\\n fill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n transition: border .14s ease-in-out;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n padding: 4px;\\n border-radius: 4px;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor:focus,\\n.tc-tiddler-frame textarea.tc-edit-texteditor:focus,\\n.tc-tiddler-frame iframe.tc-edit-texteditor:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-tiddler-controls .tc-btn-text {\\n font-size: 16px;\\n}\\n\\n\u003C\u003Cif-reveal-tiddler-controls-on-hover \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-frame .tc-tiddler-controls svg {\\n opacity: 0;\\n transition: all .2s ease-in;\\n }\\n\\n .tc-tiddler-controls svg.tc-image-close-button,\\n .tc-tiddler-controls .py-toggle-todo-button svg,\\n .tc-tiddler-controls svg.tc-image-done-button,\\n .tc-tiddler-frame .tc-tiddler-controls:hover svg {\\n opacity: 1;\\n }\\n\\n .tc-tiddler-controls .py-toggle-todo-button .done svg {\\n fill: #2da562;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n padding: 0.3em 1em !important;\\n}\\n\\n/* Fonts */\\n\\nhtml, body {\\n font-family: {{$:/themes/nico/notebook/settings/fontfamily}};\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n font-family: {{$:/themes/nico/notebook/settings/editorfontfamily}};\\n}\\n\\npre, code {\\n font-family: {{$:/themes/nico/notebook/settings/codefontfamily}};\\n}\\n\\n.tc-titlebar, .tc-site-title {\\n font-size: 28px !important;\\n line-height: 34px !important;\\n font-weight: 600 !important;\\n letter-spacing: -0.5px !important;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n font-weight: 600;\\n}\\n\\n.tc-tiddler-body h1,\\n.tc-tiddler-body h2,\\n.tc-tiddler-preview-preview h1,\\n.tc-tiddler-preview-preview h2 {\\n font-weight: bold;\\n}\\n\\ndiv.tc-tiddler-frame .tc-tiddler-body {\\n font-size: {{$:/themes/nico/notebook/metrics/bodyfontsize}};\\n line-height: {{$:/themes/nico/notebook/metrics/bodylineheight}};\\n}\\n\\n/* Tabs */\\n\\ndiv.tc-tab-buttons {\\n margin-bottom: -4px;\\n}\\n\\ndiv.tc-tab-buttons button {\\n font-weight: bold;\\n font-size: 1.2em;\\n line-height: 1em;\\n padding: .6em .8em .4em .8em;\\n border: 0;\\n border-radius: 0;\\n background: transparent;\\n cursor: pointer;\\n transition: background ease-in .2s;\\n}\\n\\ndiv.tc-tab-buttons button:hover {\\n background: rgba(0,0,0,.03);\\n}\\n\\ndiv.tc-tab-buttons button.tc-tab-selected {\\n border: 0;\\n background: transparent;\\n border-bottom: 4px solid \u003C\u003Ccolour primary>>;\\n}\\n\\n/* Dropdowns */\\n\\n@keyframes pop {\\n 0% {\\n transform: scale(0.8);\\n opacity: 0;\\n }\\n\\n 80% {\\n transform: scale(1.03);\\n opacity: 1;\\n }\\n\\n 100% {\\n transform: scale(1);\\n opacity: 1;\\n }\\n}\\n\\n.tc-drop-down {\\n box-shadow: 0 0 10px rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 10px 0 !important;\\n animation: pop .15s ease-in forwards;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n padding: 3px 15px !important;\\n}\\n\\n.tc-search-results {\\n line-height: 2em;\\n}\\n\\n.tc-search-results em {\\n font-weight: bold;\\n font-style: normal;\\n}\\n\\n/* Draft list */\\n\\n.tc-drafts-list {\\n font-size: .9em;\\n left: auto;\\n right: 0;\\n}\\n\\n.tc-drafts-list a {\\n padding: 6px 12px;\\n font-weight: bold;\\n border-top-left-radius: 6px;\\n border-top-right-radius: 6px;\\n display: inline-block;\\n}\\n\\n.nc-refs {\\n color: #888;\\n font-size: .9em;\\n}\\n\\n.nc-refs h4 {\\n margin-bottom: 4px;\\n}\\n\\n.nc-post-created {\\n color: #acacac;\\n font-size: .8em;\\n}\\n\"\n },\n \"$:/themes/nico/notebook/changelog\": {\n \"title\": \"$:/themes/nico/notebook/changelog\",\n \"caption\": \"ChangeLog\",\n \"created\": \"20201217180707912\",\n \"modified\": \"20210202214001915\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"! 1.4.1\\n\\n!! Fixes\\n\\n* Fix the transclusion mode of sidebar sections\\n* Fix section title rendering for tiddlers without a caption field\\n* Fix the colour of links in the sidebar when using Notebook palettes with Vanilla\\n\\n! 1.4.0\\n\\n!! Features\\n\\n* New redesigned topbar layout\\n* Add a configuration setting for the story width\\n* Add support for keyboard navigation in the search dropdown\\n\\n! 1.3.6\\n\\n!! Improvements\\n\\n* Improve the style of tabs\\n* New animation for drop-downs\\n* Use a lighter page background colour in the beige palette\\n\\n!! Fixes\\n\\n* Fix the default ctrl+shift+F shortcut for focusing the search input\\n\\n! 1.3.5\\n\\n!! Features\\n\\n* Add an option to reveal tiddler controls on mouseover\\n\\n! 1.3.4\\n\\n!! Improvements\\n\\n* Add a keyboard shortcut (alt+shift+s) to toggle Notebook sidebar\\n* Add missing colours to tiddler editor fields in the dark palette\\n\\n!! Fixes\\n\\n* Fix the size of toolbar button labels when the $:/config/Toolbar/Text is set to yes\\n\\n! 1.3.3\\n\\n!! Improvements\\n\\n* Make the sidebar more generic by using the default sidebar sections\\n\\n! 1.3.2\\n\\n!! Improvements\\n\\n* Add colours for messages in the dark palette\\n* Add colours for notification in the dark palette\\n* Set colours for messages in the beige palette\\n\\n! 1.3.1\\n\\n!! Features\\n\\n* New font family settings distinct from the Vanilla theme\\n\\n!! Improvements\\n\\n* Use a slightly lighter colour as the search input background\\n* Improve contrast of sidebar buttons in the dark palette\\n\\n!! Fixes\\n\\n* Fix tiddler control button colours in all three palettes\\n* Fix tab colours in palette-dark\\n\\n! 1.3.0\\n\\n!! Improvements\\n\\n* New dark colour palette\\n* Use a darker color for tiddler subtitles\\n* Add back the WebKit search cancel button in search inputs\\n\\n!! Fixes\\n\\n* Fix the z-index of the topbar for the zoomin story view\\n* Fix the font weight of tiddler titles in edit mode\\n\\n! 1.2.0\\n\\n!! Improvements\\n\\n* Better support for dark colour palettes\\n\\n!! Fixes\\n\\n* Fix rendering of overflowing/wrapping text in the sidebar\\n\\n! 1.1.0\\n\\n!! Features\\n\\n* New theme tweaks tab dedicated to Notebook in the control panel\\n* Inputs in the edit template are now styled consistently with other inputs\\n\\n!! Fixes\\n\\n* Fixes the position of sticky tiddler titles when the option is turned on\\n\"\n },\n \"$:/config/ShortcutInfo/notebook-focus-search\": {\n \"title\": \"$:/config/ShortcutInfo/notebook-focus-search\",\n \"text\": \"Focus on the topbar search field\"\n },\n \"$:/config/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/config/shortcuts/notebook-focus-search\",\n \"text\": \"ctrl+shift+F\"\n },\n \"$:/config/Search/AutoFocus\": {\n \"title\": \"$:/config/Search/AutoFocus\",\n \"text\": \"false\"\n },\n \"$:/config/shortcuts/sidebar-search\": {\n \"title\": \"$:/config/shortcuts/sidebar-search\",\n \"text\": \"\"\n },\n \"$:/themes/nico/notebook/images/bars\": {\n \"title\": \"$:/themes/nico/notebook/images/bars\",\n \"created\": \"20200428212322206\",\n \"modified\": \"20201210210231235\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg class=\\\"bars\\\" height=\\\"21pt\\\" viewBox=\\\"0 0 42 42\\\" enable-background=\\\"new 0 0 32 22.5\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cg class=\\\"svg-menu-toggle\\\" sketch:type=\\\"MSLayerGroup\\\">\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"28\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"19\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"10\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003C/g>\\n\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-down\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-down\",\n \"created\": \"20200429194348688\",\n \"modified\": \"20201210210230919\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"6pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\">\u003Cpath d=\\\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-right\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-right\",\n \"created\": \"20200429194305719\",\n \"modified\": \"20201210210230909\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"4pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 192 512\\\">\u003Cpath d=\\\"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/color-switch\": {\n \"title\": \"$:/themes/nico/notebook/images/color-switch\",\n \"created\": \"20201210170859810\",\n \"creator\": \"nico\",\n \"modified\": \"20201210205606403\",\n \"modifier\": \"nico\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"20px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 16\\\" class=\\\"bi bi-circle-half\\\" fill=\\\"currentColor\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cpath fill-rule=\\\"evenodd\\\" d=\\\"M8 15V1a7 7 0 1 1 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z\\\"/>\\n\u003C/svg\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodyfontsize\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodyfontsize\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"15px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodylineheight\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodylineheight\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"22px\"\n },\n \"$:/themes/nico/notebook/metrics/sidebar-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/sidebar-width\",\n \"created\": \"20200429144554294\",\n \"modified\": \"20201210210231246\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"350px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/story-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/story-width\",\n \"created\": \"20210123210054185\",\n \"modified\": \"20210123211911688\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"800px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/topbar-height\": {\n \"title\": \"$:/themes/nico/notebook/metrics/topbar-height\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"52px\\n\"\n },\n \"$:/themes/nico/notebook/options/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/options/stickytitles\",\n \"text\": \"no\"\n },\n \"$:/themes/nico/notebook/options/codewrapping\": {\n \"title\": \"$:/themes/nico/notebook/options/codewrapping\",\n \"text\": \"pre-wrap\"\n },\n \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\": {\n \"title\": \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\",\n \"text\": \"no\"\n },\n \"$:/core/ui/PageTemplate/sidebar\": {\n \"title\": \"$:/core/ui/PageTemplate/sidebar\",\n \"created\": \"20200430072116835\",\n \"modified\": \"20201217174129501\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\nOverwritten by $:/themes/nico/notebook so that the default sidebar does not get rendered.\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/themetweaks\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/themetweaks\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"created\": \"20201217163834291\",\n \"modified\": \"20201217163914434\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"Overwritten by $:/themes/nico/notebook so that the Vanilla theme tweaks do not appear in the control panel. \"\n },\n \"$:/themes/nico/notebook/palettes/palette-beige\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-beige\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #3F3B3B\\nmessage-background: #e6f5e8\\nmessage-border: #2b5532\\nmessage-foreground: #2b5532\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f5f5ee\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #7f4bca\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #dbdbc7;\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A beige colour palette for Notebook\",\n \"name\": \"Notebook Beige\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-dark\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-dark\",\n \"text\": \"alert-background: #643b43\\nalert-border: #3f181f\\nalert-highlight: #881122\\nalert-muted-foreground: #bc8b94\\nbackground: #383e49\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-border:\\nbutton-foreground:\\ncode-background: #2c323b\\ncode-border: #111\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #98be65\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #111\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #61afef\\nexternal-link-foreground: #c678dd\\nforeground: #c8ced8\\nmessage-background: #2c323e\\nmessage-border: #111\\nmessage-foreground: #d5e2f1\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #3a5e39\\nnotification-border: #192c19\\npage-background: #262b33\\npre-background: \u003C\u003Ccolour page-background>>\\npre-border: \u003C\u003Ccolour tiddler-border>>\\nprimary: #bf93ff\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #5e646f\\nsidebar-controls-foreground-hover: #cad2e5\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #cad2e5\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: \u003C\u003Ccolour tab-background-selected>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: \u003C\u003Ccolour foreground>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour page-background>>\\ntab-border-selected: \u003C\u003Ccolour foreground>>\\ntab-border: #cad2e5\\ntab-divider: #cad2e5\\ntab-foreground-selected: #ecf2ff\\ntab-foreground: #cad2e5\\ntable-border: #aaaaaa\\ntable-footer-background: #a8a8a8\\ntable-header-background: #262b33\\ntag-background: #fcb671\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #111\\ntiddler-controls-foreground-hover: #cad2e5\\ntiddler-controls-foreground-selected: #cad2e5\\ntiddler-controls-foreground: #5e646f\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(255, 255, 255, 0.3)\\ntiddler-editor-fields-even: \u003C\u003Ccolour background>>\\ntiddler-editor-fields-odd: #2c323b\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: \u003C\u003Ccolour foreground>>\\ntoolbar-cancel-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-done-button:\\ntoolbar-edit-button:\\ntoolbar-info-button:\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A dark colour palette for Notebook\",\n \"name\": \"Notebook Dark\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-grey\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-grey\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #283c46\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f4f4f4\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #127edd\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #ddd\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A grey color palette for Notebook\",\n \"name\": \"Notebook Grey\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/settings/codefontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/codefontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101214210227\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Fira Mono\\\",\\\"Liberation Mono\\\",Menlo,Courier,monospace\\n\"\n },\n \"$:/themes/nico/notebook/settings/fontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/fontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101213411800\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Segoe UI\\\",Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\"\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\",\n \"created\": \"20201210122048919\",\n \"key\": \"((notebook-focus-search))\",\n \"modified\": \"20210115130024907\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$action-sendmessage $message=\\\"tm-focus-selector\\\" $param=\\\".nc-topbar input\\\"/>\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\",\n \"created\": \"20210115130000707\",\n \"key\": \"((toggle-sidebar))\",\n \"modified\": \"20210115130021883\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list\\n filter=\\\"[[$:/state/notebook-sidebar]is[missing]] [{$:/state/notebook-sidebar}removeprefix[yes]]\\\"\\n emptyMessage=\\\"\\\"\\\"\u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\"/>\\\"\\\"\\\"\\n>\\n \u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"no\\\"/>\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/stickytitles\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20201217180034682\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\u003C$reveal state=\\\"$:/themes/nico/notebook/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n\\n.tc-tiddler-title {\\n position: -webkit-sticky;\\n position: -moz-sticky;\\n position: -o-sticky;\\n position: -ms-sticky;\\n position: sticky;\\n top: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour tiddler-background>>;\\n z-index: 500;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-title {\\n top: 0;\\n }\\n}\\n\\n\u003C$list filter=\\\"[range[100]]\\\">\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text=\u003C\u003CcurrentTiddler>>/>`) {\\nz-index: `\u003C$text text={{{ [[200]subtract\u003CcurrentTiddler>] }}}/>`;\\n}\\n`\\n\u003C/$list>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/tags/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"created\": \"20200429164516951\",\n \"list\": \"$:/themes/nico/notebook/ui/Buttons/menu $:/themes/nico/notebook/ui/Sidebar/Headings $:/themes/nico/notebook/ui/Sidebar/Search $:/themes/nico/notebook/Sidebar/Sections\",\n \"modified\": \"20201210205606504\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/tags/SidebarSection\": {\n \"title\": \"$:/themes/nico/notebook/tags/SidebarSection\",\n \"created\": \"20200429201017275\",\n \"list\": \"$:/themes/nico/notebook/ui/Sidebar/Open $:/themes/nico/notebook/ui/Sidebar/Recent $:/themes/nico/notebook/ui/Sidebar/Tools $:/themes/nico/notebook/ui/Sidebar/More\",\n \"modified\": \"20201210215658901\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/ui/Bottombar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Bottombar\",\n \"created\": \"20200429113453340\",\n \"modified\": \"20201210210230886\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-bottombar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-bar nc-bottombar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n {{$:/themes/nico/notebook/ui/Buttons/menu}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\",\n \"created\": \"20201210171047824\",\n \"description\": \"Toggle between grey/beige colour palette\",\n \"modified\": \"20210118213335643\",\n \"tags\": \"$:/tags/PageControls\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cspan class=\\\"desktop-only\\\">\\n \u003C$vars\\n palettes=\\\"[all[tiddlers+shadows]tag[$:/tags/notebook/Palette]]\\\"\\n popupTiddler=\u003C\u003Cqualify \\\"$:/state/notebook/palette-dropdown\\\">>\\n >\\n \u003C$button\\n popup=\u003C\u003CpopupTiddler>>\\n tooltip=\\\"Switch colours\\\"\\n aria-label=\\\"Switch colours\\\"\\n class=\u003C\u003Ctv-config-toolbar-class>>\\n >\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>match[yes]]\\\">\\n\\t{{$:/themes/nico/notebook/images/color-switch}}\\n \u003C/$list>\\n\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>match[yes]]\\\">\\n\\t\u003Cspan class=\\\"tc-btn-text\\\">Switch colours\u003C/span>\\n \u003C/$list>\\n\\n \u003C$reveal state=\u003C\u003CpopupTiddler>> type=\\\"popup\\\" position=\\\"belowleft\\\" class=\\\"tc-drop-down\\\">\\n\\t\u003C$list filter=\u003C\u003Cpalettes>>>\\n\\t \u003C$button class=\\\"tc-btn-invisible\\\">\\n\\t {{!!name}}\\n\\t \u003C$action-setfield $tiddler=\\\"$:/palette\\\" text={{!!title}}/>\\n\\t \u003C/$button>\\n\\t\u003C/$list>\\n \u003C/$reveal>\\n\\n \u003C/$button>\\n \u003C/$vars>\\n\u003C/span>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/menu\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/menu\",\n \"created\": \"20200429115248943\",\n \"modified\": \"20210124211756417\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"no\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle open\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal type=\\\"nomatch\\\" state=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"yes\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126170723413\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define advanced-search-actions()\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/input\\\" text={{$:/temp/notebook-search}}/>\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/refresh\\\" text=\\\"yes\\\"/>\\n\u003C$action-navigate $to=\\\"$:/AdvancedSearch\\\"/>\\n\\\\end\\n\\n\\\\define input-accept-actions()\\n\u003C$list filter=\\\"[\u003C__tiddler__>get[text]!is[missing]] ~[\u003C__tiddler__>get[text]is[shadow]]\\\">\\n \u003C$action-navigate $to={{{ [\u003C__tiddler__>get[text]] }}}/>\\n \u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define cancel-search-actions()\\n\u003C$list filter=\\\"[\u003CsearchTiddler>get[text]!match{$:/temp/search}]\\\" emptyMessage=\\\"\\\"\\\"\u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\\"\\\"\\\">\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search\\\" text={{{ [\u003CsearchTiddler>get[text]] }}}/>\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search/refresh\\\" text=\\\"yes\\\"/>\u003C/$list>\\n\\\\end\\n\\n\u003C$vars editTiddler=\\\"$:/temp/search\\\"\\n searchTiddler=\\\"$:/temp/search/input\\\"\\n searchListState=\u003C\u003Cqualify \\\"$:/state/search-list/selected-item\\\">>>\\n \u003C$macrocall $name=\\\"keyboard-driven-input\\\"\\n\\t tiddler=\u003C\u003CeditTiddler>>\\n\\t storeTitle=\u003C\u003CsearchTiddler>>\\n\\t selectionStateTitle=\u003C\u003CsearchListState>>\\n\\t refreshTitle=\\\"$:/temp/search/refresh\\\"\\n\\t type=\\\"search\\\"\\n\\t tag=\\\"input\\\"\\n\\t focus={{$:/config/Search/AutoFocus}}\\n\\t focusPopup=\\\"$:/state/popup/notebook-search\\\"\\n\\t class=\\\"tc-popup-handle\\\"\\n\\t filterMinLength={{$:/config/Search/MinLength}}\\n\\t placeholder=\\\"Search...\\\"\\n\\t inputAcceptActions=\u003C\u003Cinput-accept-actions>>\\n\\t inputCancelActions=\u003C\u003Ccancel-search-actions>>\\n\\t cancelPopups=\\\"yes\\\"\\n\\t configTiddlerFilter=\\\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\\\"\\n\\t />\\n \u003C$button\\n tooltip={{$:/language/Buttons/AdvancedSearch/Hint}}\\n aria-label={{$:/language/Buttons/AdvancedSearch/Caption}}\\n class=\\\"tc-btn-invisible tc-page-controls\\\"\\n >\\n {{$:/core/images/advanced-search-button}}\\n \u003C\u003Cadvanced-search-actions>>\\n \u003C/$button>\\n \u003C$reveal tag=\\\"div\\\" class=\\\"tc-block-dropdown-wrapper\\\" state=\\\"$:/state/popup/notebook-search\\\" type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\">\\n \u003C$list filter=\\\"[\u003CsearchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\\\" emptyMessage=\\\"\\\" variable=\\\"listItem\\\">\\n \u003Cdiv class=\\\"tc-block-dropdown tc-search-drop-down\\\">\\n \u003C$tiddler tiddler=\u003C\u003CconfigTiddler>>>\\n {{$:/themes/nico/notebook/ui/Sidebar/SearchResults}}\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$list>\\n \u003C/$reveal>\\n\u003C/$vars>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Headings\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Headings\",\n \"created\": \"20200429160014174\",\n \"modified\": \"20201210210231267\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content\\\">\\n \u003Ch1 class=\\\"tc-site-title\\\">\\n {{$:/SiteTitle}}\\n \u003C/h1>\\n \u003Cdiv class=\\\"tc-site-subtitle\\\">\\n {{$:/SiteSubtitle}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210124220152702\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"mobile-only\\\">\\n \u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content search\\\">\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126164631418\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define searchResultList()\\n \u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-primaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\n \u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-secondaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\\\end\\n\\n\u003Cdiv class=\\\"tc-search-results\\\">\\n \u003C\u003CsearchResultList>>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\",\n \"created\": \"20200429161226897\",\n \"modified\": \"20210202213859460\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define sidebarHeading()\\n\u003C$vars tv-wikilinks=\\\"no\\\">\\n \u003C$transclude field=\\\"caption\\\">\\n \u003C$view field=\\\"title\\\"/>\\n \u003C/$transclude>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"match\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"no\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section open\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\\\"\\\" class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-down}}\u003C/span>\\n \u003C/$button>\\n \u003Cdiv class=\\\"content\\\">\\n \u003C$transclude $tiddler=\u003C\u003CcurrentTiddler>> mode=\\\"block\\\"/>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"nomatch\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"yes\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\u003C\u003CcurrentTiddler>> class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-right}}\u003C/span>\\n \u003C/$button>\\n \u003C/div>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Sections\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Sections\",\n \"created\": \"20200429163239707\",\n \"modified\": \"20210112213620486\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list filter=\\\"[all[shadows+tiddlers]!has[draft.of]tag[$:/tags/SideBar]]\\\">\\n {{||$:/themes/nico/notebook/ui/Sidebar/SectionTemplate}}\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar\",\n \"created\": \"20200428201218885\",\n \"modified\": \"20210112213605486\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$scrollable fallthrough=\\\"no\\\">\\n \u003Cdiv class=\\\"nc-sidebar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/themes/nico/notebook/tags/Sidebar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"inline\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003C/div>\\n \u003C/$scrollable>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Topbar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Topbar\",\n \"created\": \"20200428203101797\",\n \"modified\": \"20210124213834458\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-topbar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-topbar-wrapper\\\">\\n \u003Cdiv class=\\\"nc-bar nc-topbar tc-adjust-top-of-scroll\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n\\t{{$:/themes/nico/notebook/ui/Buttons/menu}}\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n }\n }\n}","bag":"default","revision":"0","version":"1.4.1","type":"application/json","title":"$:/themes/nico/notebook","source":"https://github.com/NicolasPetton/Notebook","plugin-type":"theme","name":"Notebook theme","list":"LICENSE changelog","description":"A clean, uncluttered TiddlyWiki theme","dependents":"$:/themes/tiddlywiki/vanilla $:/plugins/nico/notebook-mobile","core-version":">=5.1.22","author":"NicolasPetton","modified":"20240627123010609"}, {"created":"20200429144554294","title":"$:/themes/nico/notebook/metrics/sidebar-width","modified":"20230423163514560","tags":"","type":"text/vnd.tiddlywiki","text":"300px"}, @@ -1191,7 +1191,7 @@ button.sidebar-toggle{ {"created":"20240624125444313","text":"\u003Cstyle type=\"text/css\">\n .examples img{\n\t border: 1px solid #CCC;\n\t\tborder-radius:6px;\n\t\tmargin: 20px 20px 20px 0px;\n\t\tdisplay:block;\n\t\twidth:100%;\n\t}\n\u003C/style>\n\u003Cdiv class=\"examples\">\n \u003Cdiv>\n \u003Ca href=\"example/aframe/sandbox\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/index.glb.jpg\"/>\n\t \u003C/a>\n\t\t\u003Cb>index.glb\u003C/b> kitchensink \n\t\u003C/div>\n\t\u003Cdiv>\n \u003Ca href=\"example/aframe/sandbox?./../../assets/example.glb\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/example.glb.jpg\"/>\n\t \u003C/a>\n\t\t\u003Cb>example.glb\u003C/b> simple startingpoint \n\t\u003C/div>\n\t\u003Cdiv>\n \u003Ca href=\"example/aframe/sandbox?./../../assets/website.glb\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/website.glb.jpg\"/>\n\t \u003C/a>\n\t\t\u003Cb>website.glb\u003C/b> website startingpoint \n\t\u003C/div>\n\t\u003Cdiv>\n \u003Ca href=\"https://coderofsalvation.codeberg.page/xrfragment-elearning-templates/?https://coderofsalvation.codeberg.page/xrfragment-elearning-templates/index.glb\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/elearning.glb.jpg\"/>\n\t \u003C/a>\n\t\t\u003Cb>elearning.glb\u003C/b> quiz startingpoint \n\t\u003C/div>\n\t\u003Cdiv>\n \u003Ca href=\"example/aframe/sandbox?./../../assets/telescopic.glb\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/telescopic.png\"/>\n\t \u003C/a>\n\t\t\u003Cb>telescopic.glb\u003C/b> reveal via [[href]] + \u003Ca href=\"#🎞%20Media%20Fragments\">media fragments\u003C/a>\n\t\u003C/div>\t\n\t\u003Cdiv>\n \u003Ca href=\"https://searxr.me\" target=\"_blank\">\n\t \u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/searxr.jpg\"/>\n\t \u003C/a>\n\t\t\u003Ca href=\"https://searxr.me\" target=\"_blank\">\u003Cb>searxr.me\u003C/b>\u003C/a> metasearch engine supporting XR Fragments\n\t\u003C/div>\t\n\u003C/div>","tags":"$:/tags/SideBar","title":"Examples","modified":"20241210145601751","list-before":"$:/core/ui/SideBar/Open"}, {"title":"feedback.png","text":"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","type":"image/png"}, {"created":"20240619105321821","text":"3D Objects inside a 3D model can be referenced/shown/hidden via URI filters:\n\u003Cbr>\n\n\u003Cimg src=\"https://coderofsalvation.codeberg.page/xrfragment.media/images/filters.gif\" style=\"width:100%\"/>\n\nThis allows high re-usability of 3D modes for remote-, local- and recursive (embedded `src`) usecases:\n\u003Cbr>\u003Cbr>\n\n\u003Cpre>\n\u003Ccode>\n my.io/scene.usdz Embeddable as:\n +─────────────────────────────+\n │ sky │ src: http://my.io/scene.udsz#sky (includes building,mainobject,floor)\n │ +─────────────────────────+ │ \n │ │ building │ │ src: http://my.io/scene.udsz#building (includes mainobject,floor)\n │ │ +─────────────────────+ │ │\n │ │ │ mainobject │ │ │ src: http://my.io/scene.udsz#mainobject (includes floor)\n │ │ │ +─────────────────+ │ │ │\n │ │ │ │ floor │ │ │ │ src: http://my.io/scene.udsz#floor (just floor object)\n │ │ │ │ │ │ │ │\n │ │ │ +─────────────────+ │ │ │ href: http://my.io/scene.udsz#-mainobject (hides mainobject when clicked)\n │ │ +─────────────────────+ │ │\n │ +─────────────────────────+ │\n +─────────────────────────────+\n\u003C/code>\n\u003C/pre>\n\nThe [[href]] and [[src]] documentation show various examples, but the full syntax is explained in the spec below.\u003Cbr>\nOn top of that, [[tagged objects]] allow using `tag` metadata to group objects to trigger grouped features\n\n\u003Ch2>What does \"&-interactions*\" do in the demo scene?\u003C/h2>\n\nThe scene-node (3D root) of the [[demo scene|example/assets/index.glb]] indeed contains (startup) [[#]] metadata (`#pos=start&rot=0,40,0&t=0&-interactions*`).\n\u003Cbr>\nIts hiding all 3D objects (and their children) which are tagged with 'interactions'.\u003Cbr>\nFor example: you can see all the menu-items in Blender, but not in the browser.\u003Cbr>\n\n* `&` is just a separator ('AND do the following:')\n* `-` means 'hide'\n* `interactions` selects all objects with name 'interactions' or tag: interactions metadata\n* `*` selects all objects inside those selected objects too (text-objects etc)\n\n> For more on syntax see the spec below\n\n\u003Cbr>\u003Cbr>\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#xr-fragment-filters\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\nFragment identifiers are derived from \u003Cb>metadata\u003C/b> inside the loaded 3D Model.\u003Cbr>More specific: \u003Cb>object-\u003C/b>, \u003Cb>material-\u003C/b>, and \u003Cb>camera-\u003C/b>names via a strategy called 'Fragment-to-metadata mapping':\n\n\u003Cbr>\u003Cbr>\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#fragment-to-metadata-mapping\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n","tags":"[[📡 implicit scene features]]","title":"filters","modified":"20241007083525208"}, -{"created":"20230808113746326","text":"Just get your hands on a 3D editor (see this [[🖥 Blender ✅🔥]] guide) and follow the steps in the video:\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://matrix.to/#/#xrfragments:matrix.org\" target=\"_blank\" style=\"padding:10px 30px\">Join Matrix Community\u003C/a>\n\u003C/center>\n\nHere are various ways to create/test 3D files with XR Fragments:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| easiest | see the [[🖥 Blender ✅🔥]] workflow using the \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">Sandbox\u003C/a> on xrfragment.org | export 3D file (.glb) in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>, after adding [[href]], [[src]] and [[tag]] \u003Cb>metadata\u003C/b> as \u003Ca href=\"https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html\" target=\"_blank\">custom properties\u003C/a>, and load exported files into \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">the sandbox\u003C/a> (see video above)|\n\n\u003Cbr>\n\n\u003Ch2>Developers\u003C/h2>\n\nFor developers wanting to integrate or build your own 3D hypermedia browser, the easiest is WebXR:\n\n\u003Ca href=\"example/aframe/sandbox\" target=\"_blank\">» View \u003Cb>index.glb\u003C/b> online\u003C/a> or \u003Ca href=\"index.glb\" target=\"_blank\">download \u003Cb>index.glb\u003C/b> and open\u003C/a> it in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>.\u003Cbr>\n(developers can extend a 3D model viewer here \u003Ca href=\"https://codepen.io/coderofsalvation/pen/yLwedvX\" target=\"_blank\">this codepen\u003C/a>)\n\u003Cbr>\u003Cbr>\n\nBut there are also other approaches, as XR Fragments is not tied to any XR-technology or fileformat:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| dev #godot | load the \u003Ca href=\"#%F0%9F%A7%B0%20GODOT\">example project\u003C/a> | |\n| dev #threejs #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-three-helloworld\">xfragment-three-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://threejs.org\" target=\"_blank\">threejs\u003C/a> developer-knowledge |\n| dev #polyglot | use the [[XR Fragment parser|https://github.com/coderofsalvation/xrfragment/tree/main/dist]] | lowlevel approach, more suitable for other scenarios |\n| dev #spec #browser | implement [[the spec|📜 XR fragments]] yourself | the spec is simple: parse URL and iterate over a scene |\n| dev #aframe #github | hosted sandbox by \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-helloworld\" target=\"_blank\">forking xrfragment-helloworld\u003C/a> | Basically #1 but it will be hosted for free at your own github URL |\n| dev #aframe #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-aframe-helloworld\">xfragment-aframe-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://aframe.io\" target=\"_blank\">aframe.io\u003C/a> developer-knowledge |\n\nNext to that, familiarize yourself with XR Fragments by checking these videos: \n\n1. \u003Ca href=\"https://github.com/coderofsalvation/xrfragment.media\" target=\"_blank\">All videos on github\u003C/a> (tip: star the repo)\u003Cbr>\n2. \u003Ca href=\"https://www.youtube.com/playlist?list=PLctjJGlTmeE64XPSQER2BSbjmqVGaWM4J\" target=\"_blank\">All videos on Youtube\u003C/a> (tip: subscribe or add to 'Watch-later' list)","tags":"","title":"Getting started","modified":"20240929105038594","type":"text/vnd.tiddlywiki"}, +{"created":"20230808113746326","text":"Just get your hands on a 3D editor (see this [[🖥 Blender ✅🔥]] guide) and follow the steps in the video:\n\u003Cbr>\u003Cbr>\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.codeberg.page/xrfragment.media/gettingstarted2024.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n\n\u003Ccenter>\n \u003Ca class=\"btn\" href=\"https://matrix.to/#/#xrfragments:matrix.org\" target=\"_blank\" style=\"padding:10px 30px\">Join Matrix Community\u003C/a>\n\u003C/center>\n\nHere are various ways to create/test 3D files with XR Fragments:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| easiest | see the [[🖥 Blender ✅🔥]] workflow using the \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">Sandbox\u003C/a> on xrfragment.org | export 3D file (.glb) in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>, after adding [[href]], [[src]] and [[tag]] \u003Cb>metadata\u003C/b> as \u003Ca href=\"https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html\" target=\"_blank\">custom properties\u003C/a>, and load exported files into \u003Ca href=\"/example/aframe/sandbox\" target=\"_blank\">the sandbox\u003C/a> (see video above)|\n\n\u003Cbr>\n\n\u003Ch2>Developers\u003C/h2>\n\nFor developers wanting to integrate or build your own 3D hypermedia browser, the easiest is WebXR:\n\n\u003Ca href=\"example/aframe/sandbox\" target=\"_blank\">» View \u003Cb>index.glb\u003C/b> online\u003C/a> or \u003Ca href=\"index.glb\" target=\"_blank\">download \u003Cb>index.glb\u003C/b> and open\u003C/a> it in \u003Ca href=\"https://blender.org\" target=\"_blank\">Blender\u003C/a>.\u003Cbr>\n(developers can extend a 3D model viewer here \u003Ca href=\"https://codepen.io/coderofsalvation/pen/yLwedvX\" target=\"_blank\">this codepen\u003C/a>)\n\u003Cbr>\u003Cbr>\n\nBut there are also other approaches, as XR Fragments is not tied to any XR-technology or fileformat:\n\n| ''scenario'' | ''how'' | ''notes'' |\n| dev #godot | load the \u003Ca href=\"#%F0%9F%A7%B0%20GODOT\">example project\u003C/a> | |\n| dev #threejs #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-three-helloworld\">xfragment-three-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://threejs.org\" target=\"_blank\">threejs\u003C/a> developer-knowledge |\n| dev #polyglot | use the [[XR Fragment parser|https://github.com/coderofsalvation/xrfragment/tree/main/dist]] | lowlevel approach, more suitable for other scenarios |\n| dev #spec #browser | implement [[the spec|📜 XR fragments]] yourself | the spec is simple: parse URL and iterate over a scene |\n| dev #aframe #github | hosted sandbox by \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-helloworld\" target=\"_blank\">forking xrfragment-helloworld\u003C/a> | Basically #1 but it will be hosted for free at your own github URL |\n| dev #aframe #github #modular | fork \u003Ca href=\"https://github.com/coderofsalvation/xrfragment-aframe-helloworld\">xfragment-aframe-helloworld\u003C/a> | requires javascript- and \u003Ca href=\"https://aframe.io\" target=\"_blank\">aframe.io\u003C/a> developer-knowledge |\n\nNext to that, familiarize yourself with XR Fragments by checking these videos: \n\n1. \u003Ca href=\"https://github.com/coderofsalvation/xrfragment.media\" target=\"_blank\">All videos on github\u003C/a> (tip: star the repo)\u003Cbr>\n2. \u003Ca href=\"https://www.youtube.com/playlist?list=PLctjJGlTmeE64XPSQER2BSbjmqVGaWM4J\" target=\"_blank\">All videos on Youtube\u003C/a> (tip: subscribe or add to 'Watch-later' list)","tags":"","title":"Getting started","modified":"20250207154804104","type":"text/vnd.tiddlywiki"}, {"created":"20230425160210102","text":"\u003Cshader-doodle>\n \u003Csd-node name=\"motionblur\" prevbuffer>\n \u003Csd-node name=\"rotate\">\n \u003Csd-node name=\"basic_gl\">\n \u003Cscript type=\"x-shader/x-fragment\">\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n vec3 color = vec3(st.x, st.y, abs(sin(u_time)));\n\n gl_FragColor = vec4(color, 1.);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D basic_gl;\n\n const float PI = 3.1415926;\n\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n\n float angle = 2. * PI * (.5 + .5 * cos(u_time));\n float scale = .7 + .4 * cos(u_time);\n\n mat2 rotation = mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\n vec2 p = (st - vec2(.5)) * rotation / scale + vec2(.5);\n\n gl_FragColor = p.x \u003C 0. || p.x > 1. || p.y \u003C 0. || p.y > 1.\n ? vec4(0., 0., 0., 1.)\n : texture2D(basic_gl, p);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D rotate, u_prevbuffer;\n\n void main () {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n gl_FragColor = vec4(mix(\n texture2D(rotate, st),\n texture2D(u_prevbuffer, st),\n .8\n ).rgb, 1.);\n }\n \u003C/script>\n \u003C/sd-node>\n \u003Cscript type=\"x-shader/x-fragment\">\n uniform sampler2D motionblur;\n\n void main() {\n vec2 st = gl_FragCoord.xy / u_resolution.xy;\n gl_FragColor = texture2D(motionblur, st);\n }\n \u003C/script>\n\u003C/shader-doodle>","tags":"GLSL","title":"GLSL template","modified":"20230425170513931","type":"text/vnd.tiddlywiki"}, {"created":"20240924135721168","text":"XR Fragments is \u003Cb>not a\u003C/b> fileformat-specific extension, it's a spec for so-called \u003Cb>embedded 'extras' in 3D assets.\u003C/b>\u003Cbr>\nThese are easier to use in any 3D editor (not only blender) than it would be to support new GLTF extensions.\u003Cbr>\nThis is not to say extensions are bad (they are superior in certain cases).\u003Cbr>\n\n> Just like URLs allow fileformat-agnostic navigation, 3D asset 'extras' are fileformat-agnostic too, which together allow for XR Fragments.\n\n# How to deal with overlapping functionality?\n\u003Cbr>\nWell, \u003Cb>extensions take precende, otherwise 'fallback' applies\u003C/b>.\n\u003Cbr>\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Cbr>\u003Cbr>\n\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#overlap-with-fileformat-specific-extensions\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\nFor more info see [How it works](#How%20it%20works)\n","tags":"Reference","title":"glTF extensions","modified":"20240925080534370","type":"text/markdown"}, {"created":"20240226111559175","text":"The hashbus sits inbetween HTML's traditional `href` and the toplevel URL.\u003Cbr>\nSay what?\u003Cbr>\n\u003Cbr>\n> Because of historical reasons the `href` bundles interaction (a click) and navigation (replacing the viewport with another resource).\n\nXR Fragments also allows separating these historicially merged actions, by introducing a hashbus:\n\n| href value | updates top-level URL |\n|-|-|\n| `#foo` | yes |\n|`xrf://#foo` | no |\n\nThis allows much more document interactions, with the following benefits:\n\n* interactions don't clutter URLs for back/forward button navigation\n* many usecases don't require a scripting language anymore (hiding/scrolling via [#uv](#uv) e.g.)\n* use same URI Fragment DSL for navigation and interactions\n* re-use URI Templates across 3D nodes\n* allow 3D nodes publish updates to other 3D nodes (via hashbus)\n\nIn short, a complete **hypermediatic feedback loop** (HFL).\n\n\u003Cbr>\nBelow is the related section of the spec (full spec here: \u003Ca href=\"doc/RFC_XR_Fragments.html\" target=\"_blank\">HTML\u003C/a>, \u003Ca href=\"doc/RFC_XR_Fragments.txt\" target=\"_blank\">TXT\u003C/a>)\n\n\u003Ciframe src=\"doc/RFC_XR_Fragments.html#hypermediatic-feedbackloop-for-xr-browsers\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n","tags":"","title":"hashbus","modified":"20240228122229072","type":"text/markdown"},