From 62dde2e53843fdba6146d6ef167116472b3d43e3 Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Thu, 13 Nov 2025 16:13:57 +0100 Subject: [PATCH] added default spawn-location --- doc/RFC_XR_Fragments.md | 14 ++++++++++++++ index.html | 13 ++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index 1b8fd59..9b72c22 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -513,6 +513,20 @@ The imported/teleported destination can be another object in the same scene-file > NOTE: hashbus links (`xrf://#foo&bar`) don't change the toplevel URL, which makes it ideal for interactions (in contrast to typical `#roomC` navigation, which benefit back/forward browser-buttons), see hashbus for more info. +> **default camera (spawn) location**: When a 3D file is loaded, it will position the user/camera at xyz: 0,0,0 OR to the location of (an object called) ''spawn''. + +Basically: + +``` +https://my.org/foo.glb +``` + +will load as default: + +``` +https://my.org/foo.glb#spawn +``` + # Level3: Media Fragments (!Level3: Media Fragments ) diff --git a/index.html b/index.html index 445e532..7dc97d2 100644 --- a/index.html +++ b/index.html @@ -868,6 +868,8 @@ button.sidebar-toggle{
  • decimate.svg
  • +
  • default spawn location
  • +
  • Draft of 'โ†ช URI.parse(url,flags)'
  • Draft of '๐Ÿ“œ level0: File'
  • @@ -1219,8 +1221,8 @@ 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":"20251113145703042"}, -{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Home","modified":"20251113150005157"}, +{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"yes","modified":"20251113150641768"}, +{"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"","modified":"20251113151136010"}, {"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"}, {"created":"20230427093219686","title":"$:/state/plugin-info--391242618-$:/plugins/tiddlywiki/browser-storage--605768392","text":"settings","modified":"20230427094141558"}, @@ -1228,7 +1230,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":"yes","modified":"20251008095541606"}, -{"created":"20230504174435745","title":"$:/state/sidebar","text":"โ€œnoโ€","modified":"20251113145659109"}, +{"created":"20230504174435745","title":"$:/state/sidebar","text":"โ€œnoโ€","modified":"20251113150638796"}, {"created":"20230423163453188","title":"$:/state/tab--1963855381","text":"$:/core/ui/ControlPanel/Palette","modified":"20240718192009185"}, {"created":"20230427092954391","title":"$:/state/tab--2112689675","text":"$:/core/ui/ControlPanel/Advanced","modified":"20250211170652750"}, {"created":"20230424093058379","title":"$:/state/tab--697582678","text":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20230427093030201"}, @@ -1300,7 +1302,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","created":"20251113145706943","text":"","list":"[[XR Fragments]]","modified":"20251113145706943"}, +{"title":"$:/StoryList","created":"20251113150701467","text":"","list":"[[XR Fragments]]","modified":"20251113151123624"}, {"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"}, @@ -1335,6 +1337,7 @@ button.sidebar-toggle{ {"created":"20240208121110799","text":"> An Easy ''nocode'' way to add metadata to a ''3D file'' in a [[3D editor|Edit a 3D scene file]] is [[by adding custom properties in blender e.g.|https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html]]. Basically:\n\n[img[xrfragment.jpg]]\n\n!! Internal teleports\n\n* create a plane object with a name (`foo` e.g.)\n* create a plane object elsewhere with a name (`bar` e.g.)\n* now create a button object, and add metadata `href`:`#bar` to teleport the user (after clicking)\n\nNow you can load the 3D file (in the example editor) and click the button to teleport.\n\n> NOTE 1: teleportations focus on the **origin** of an object, so you might need to adjust them in case of a box e.g. (the origin is usually in the middle, which might not be what you want in case you want to teleport on top of the box).\n\n> NOTE 2: put a camera object inside your (root)object, so that users can teleport to it from external files.\n\n!! External teleports\n\nCreate a plane or box-object, and add the following metadata:\n\n* `href`:`https://xrfragment.org` (open a website in a new tab, unless [[XRF microformat]] was detected)\n* `href`:`https://me.com/model.glb` (to surf to a new 3D model)\n* `href`:`#.....` (interactivity: execute some fragments, see [[๐Ÿ–‡ auto-generated fragments]] )\n\nNow you can load the 3D file (in the example editor) and click the button to teleport.","tags":"howto","title":"create a teleport button","modified":"20250920082010349"}, {"created":"20251006132138342","text":"> How to turn large objects into low-poly objects?\n\n''TIP:'' use 'decimate' effect in your 3D editor\n\n[img[decimate.svg]]\n\n> [[This blender-script|๐Ÿ–ฅ Blender export-script]] does this automatically in [[Blender|https://blender.org]] during project-save โค\n\nMany 3D designers feel disappointed when incorporating high-fidelity models downloaded from the web directly into ''Extended Reality (XR)'' experiences, such as VR or AR, because these models are often ''not optimized'' for real-time performance on resource-constrained devices like mobile headsets. They commonly feature excessively high ''polygon counts'' and overly complex geometry, which results in significant strain on the GPU and CPU, leading to ''slow, low-FPS framerates'' and a poor, disorienting user experience, often referred to as \"jank\" or \"lag\" ๐Ÿข. \n\nThe ''Decimate Modifier'' in 3D editors is a vital solution to this problem, as it is a powerful tool for ''reducing the polygon count'' of a mesh automatically while attempting to preserve the object's original shape and visual fidelity, thereby significantly ''improving rendering efficiency'' and achieving the smooth, high frame rate critical for comfortable and immersive XR applications. \n\n!! How to Decimate in Blender\n\nTo apply the Decimate Modifier in ''Blender'' ๐Ÿ› ๏ธ, follow these steps:\n\n1. ''Select Your Model:'' In ''Object Mode'', click on the $3\\text{D}$ model you wish to optimize.\n\n2. ''Add the Modifier:'' Navigate to the ''Modifier Properties'' tab (the wrench icon) in the Properties panel and click ''\"Add Modifier,\"'' selecting ''\"Decimate\"'' from the list.\n\n3. ''Adjust the Ratio:'' The default mode, ''\"Collapse,\"'' is usually best for general reduction. Adjust the ''Ratio'' value, which ranges from 0 (maximum decimation) to 1 (original geometry). For example, a ratio of ''0.25'' will attempt to reduce the face count by approximately 75. Keep an eye on the face count and the model's visual integrity as you adjust this value.\n\n4. ''Apply the Change:'' Once satisfied with the optimized look and lower face count, you must click ''\"Apply\"'' on the modifier in the stack to bake the changes permanently into the mesh geometry, making the model ready for export to your XR platform.\n\n","tags":"[[Best practices]]","title":"Decimate your objects","modified":"20251008084708990","type":"text/vnd.tiddlywiki"}, {"title":"decimate.svg","text":"\u003C?xml version=\"1.0\" standalone=\"no\"?>\n\u003C!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n\u003Csvg version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 775.7047674984103 504.7222222222226\" width=\"775.7047674984103\" height=\"504.7222222222226\">\u003C!-- svg-source:excalidraw -->\u003Cmetadata>\u003C/metadata>\u003Cdefs>\u003Csymbol id=\"image-crop-82156958ef4e9751624a13623618d747d217b4eb-3180045633\">\u003Cimage href=\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMTBtbSIgaGVpZ2h0PSIyOTdtbSIgdmlld0JveD0iMCAwIDIxMCAyOTciIHZlcnNpb249IjEuMSIgaWQ9InN2ZzEiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxkZWZzIGlkPSJkZWZzMSIvPjxnIGlkPSJsYXllcjEiPjxnIGlkPSJnODQiIHN0eWxlPSJmaWxsOiMwMDgwODA7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuODg5NzYiPjxwYXRoIGlkPSJwYXRoODkiIHN0eWxlPSJmaWxsOiNlOWU5ZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNjI2Mjc7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJNIDcyLjA1MTI5Miw5NS4xMDMyODEgODcuOTE5MzcsOTQuMTAzNDgzIHYgNDQuNDA5OTk3IGwgLTE1Ljg2ODA3OCwtMi45OTc3NSB6IiBwb2ludHM9Ijg3LjkxOTM3LDk0LjEwMzQ4MyA4Ny45MTkzNywxMzguNTEzNDggNzIuMDUxMjkyLDEzNS41MTU3MyA3Mi4wNTEyOTIsOTUuMTAzMjgxICIvPjxwYXRoIGlkPSJwYXRoODQiIHN0eWxlPSJmaWxsOiMzNTM1NjQ7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNjI2Mjc7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDMwLjQzNDYzMSw5My4wMTY3MjMgdiA0OC43NTUyNDcgbCA0MS42MTY2NjEsLTYuMjU2MjQgViA5NS4xMDMyODEgWiIgcG9pbnRzPSIzMC40MzQ2MzEsMTQxLjc3MTk3IDcyLjA1MTI5MiwxMzUuNTE1NzMgNzIuMDUxMjkyLDk1LjEwMzI4MSAzMC40MzQ2MzEsOTMuMDE2NzIzICIvPjxwYXRoIGlkPSJwYXRoODgiIHN0eWxlPSJmaWxsOiNhZmFmZGU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNjI2Mjc7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDMwLjQzNDYzMSwxNDEuNzcxOTcgMTQuNDcyOTM5LDQuNDU0MTggNDMuMDExOCwtNy43MTI2NyAtMTUuODY4MDc4LC0yLjk5Nzc1IHoiIHBvaW50cz0iNDQuOTA3NTcsMTQ2LjIyNjE1IDg3LjkxOTM3LDEzOC41MTM0OCA3Mi4wNTEyOTIsMTM1LjUxNTczIDMwLjQzNDYzMSwxNDEuNzcxOTcgIi8+PHBhdGggaWQ9InBhdGg4NSIgc3R5bGU9ImZpbGw6IzRkNGQ5ZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS42MjYyNztzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Ik0gMzAuNDM0NjMxLDkzLjAxNjcyMyA0NC45MDc1Nyw5MS41MzExOCA4Ny45MTkzNyw5NC4xMDM0ODMgNzIuMDUxMjkyLDk1LjEwMzI4MSBaIiBwb2ludHM9IjQ0LjkwNzU3LDkxLjUzMTE4IDg3LjkxOTM3LDk0LjEwMzQ4MyA3Mi4wNTEyOTIsOTUuMTAzMjgxIDMwLjQzNDYzMSw5My4wMTY3MjMgIi8+PHBhdGggaWQ9InBhdGg4NyIgc3R5bGU9ImZpbGw6I2Q3ZDdmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6MS42MjYyNztzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gNDQuOTA3NTcsOTEuNTMxMTggdiA1NC42OTQ5NyBsIDQzLjAxMTgsLTcuNzEyNjcgViA5NC4xMDM0ODMgWiIgcG9pbnRzPSI0NC45MDc1NywxNDYuMjI2MTUgODcuOTE5MzcsMTM4LjUxMzQ4IDg3LjkxOTM3LDk0LjEwMzQ4MyA0NC45MDc1Nyw5MS41MzExOCAiLz48cGF0aCBpZD0icGF0aDg2IiBzdHlsZT0iZmlsbDojODY4NmJmO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDoxLjYyNjI3O3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0iTSAzMC40MzQ2MzEsOTMuMDE2NzIzIDQ0LjkwNzU3LDkxLjUzMTE4IHYgNTQuNjk0OTcgbCAtMTQuNDcyOTM5LC00LjQ1NDE4IHoiIHBvaW50cz0iNDQuOTA3NTcsOTEuNTMxMTggNDQuOTA3NTcsMTQ2LjIyNjE1IDMwLjQzNDYzMSwxNDEuNzcxOTcgMzAuNDM0NjMxLDkzLjAxNjcyMyAiLz48L2c+PGcgaWQ9Imc4NC0zIiBzdHlsZT0iZmlsbDojMDA4MDgwO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjg4OTc2Ij48cGF0aCBpZD0icGF0aDg5LTciIHN0eWxlPSJmaWxsOiNlOWU5ZmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjUuODA1Mzk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDE1NC4wNDQ0NSw5Ny45MzAxMTcgMTQuOTE3MTcsLTAuOTQ4NzU0IHYgNDIuMTQyNjA3IGwgLTE0LjkxNzE3LC0yLjg0NDcgeiIgcG9pbnRzPSIxNjguOTYxNjIsOTYuOTgxMzYzIDE2OC45NjE2MiwxMzkuMTIzOTcgMTU0LjA0NDQ1LDEzNi4yNzkyNyAxNTQuMDQ0NDUsOTcuOTMwMTE3ICIvPjxwYXRoIGlkPSJwYXRoODQtNCIgc3R5bGU9ImZpbGw6IzM1MzU2NDtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6NS44MDUzOTtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTE0LjkyMTcyLDk1Ljk1MDA4OCB2IDQ2LjI2NjAwMiBsIDM5LjEyMjczLC01LjkzNjgyIFYgOTcuOTMwMTE3IFoiIHBvaW50cz0iMTE0LjkyMTcyLDE0Mi4yMTYwOSAxNTQuMDQ0NDUsMTM2LjI3OTI3IDE1NC4wNDQ0NSw5Ny45MzAxMTcgMTE0LjkyMTcyLDk1Ljk1MDA4OCAiLz48cGF0aCBpZD0icGF0aDg4LTUiIHN0eWxlPSJmaWxsOiNhZmFmZGU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjUuODA1Mzk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDExNC45MjE3MiwxNDIuMjE2MDkgMTMuNjA1NjMsNC4yMjY3NyA0MC40MzQyNywtNy4zMTg4OSAtMTQuOTE3MTcsLTIuODQ0NyB6IiBwb2ludHM9IjEyOC41MjczNSwxNDYuNDQyODYgMTY4Ljk2MTYyLDEzOS4xMjM5NyAxNTQuMDQ0NDUsMTM2LjI3OTI3IDExNC45MjE3MiwxNDIuMjE2MDkgIi8+PHBhdGggaWQ9InBhdGg4NS0yIiBzdHlsZT0iZmlsbDojNGQ0ZDlmO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDo1LjgwNTM5O3N0cm9rZS1saW5lam9pbjpyb3VuZCIgZD0ibSAxMTQuOTIxNzIsOTUuOTUwMDg4IDEzLjYwNTYzLC0xLjQwOTY5OSA0MC40MzQyNywyLjQ0MDk3NCAtMTQuOTE3MTcsMC45NDg3NTQgeiIgcG9pbnRzPSIxMjguNTI3MzUsOTQuNTQwMzg5IDE2OC45NjE2Miw5Ni45ODEzNjMgMTU0LjA0NDQ1LDk3LjkzMDExNyAxMTQuOTIxNzIsOTUuOTUwMDg4ICIvPjxwYXRoIGlkPSJwYXRoODctNSIgc3R5bGU9ImZpbGw6I2Q3ZDdmZjtmaWxsLXJ1bGU6ZXZlbm9kZDtzdHJva2U6bm9uZTtzdHJva2Utd2lkdGg6NS44MDUzOTtzdHJva2UtbGluZWpvaW46cm91bmQiIGQ9Im0gMTI4LjUyNzM1LDk0LjU0MDM4OSB2IDUxLjkwMjQ3MSBsIDQwLjQzNDI3LC03LjMxODg5IFYgOTYuOTgxMzYzIFoiIHBvaW50cz0iMTI4LjUyNzM1LDE0Ni40NDI4NiAxNjguOTYxNjIsMTM5LjEyMzk3IDE2OC45NjE2Miw5Ni45ODEzNjMgMTI4LjUyNzM1LDk0LjU0MDM4OSAiLz48cGF0aCBpZD0icGF0aDg2LTQiIHN0eWxlPSJmaWxsOiM4Njg2YmY7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjUuODA1Mzk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kIiBkPSJtIDExNC45MjE3Miw5NS45NTAwODggMTMuNjA1NjMsLTEuNDA5Njk5IHYgNTEuOTAyNDcxIGwgLTEzLjYwNTYzLC00LjIyNjc3IHoiIHBvaW50cz0iMTI4LjUyNzM1LDk0LjU0MDM4OSAxMjguNTI3MzUsMTQ2LjQ0Mjg2IDExNC45MjE3MiwxNDIuMjE2MDkgMTE0LjkyMTcyLDk1Ljk1MDA4OCAiLz48L2c+PC9nPjwvc3ZnPg==\" preserveAspectRatio=\"none\" width=\"1084.6882190350573\" height=\"1534.1371158392553\">\u003C/image>\u003C/symbol>\u003Cstyle class=\"style-fonts\">\n @font-face { font-family: Nunito; src: url(data:font/woff2;base64,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); }\u003C/style>\u003C/defs>\u003Cmask id=\"mask-image-crop-OL29icpZQcDsl1vkTBMgr\" fill=\"#fff\">\u003Crect x=\"137.63593380614847\" y=\"453.19148936170524\" width=\"756\" height=\"316\">\u003C/rect>\u003C/mask>\u003Cg mask=\"url(#mask-image-crop-OL29icpZQcDsl1vkTBMgr)\" transform=\"translate(-127.63593380614847 -347.3581560283713) rotate(0 515.4883175553537 610.9692671394826)\">\u003Cuse href=\"#image-crop-82156958ef4e9751624a13623618d747d217b4eb-3180045633\" width=\"893.6359338061485\" height=\"769.1914893617052\" opacity=\"1\">\u003C/use>\u003C/g>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(105.06381715642613 126.94444444444525) rotate(0 109.44444444444446 118.33333333333348)\">\u003Cpath d=\"M0 0 C79.47 85.92, 158.93 171.84, 218.89 236.67 M0 0 C68.16 73.69, 136.32 147.39, 218.89 236.67\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(322.84159493420395 139.16666666666788) rotate(0 -108.88888888888891 132.22222222222217)\">\u003Cpath d=\"M0 0 C-86.61 105.17, -173.22 210.33, -217.78 264.44 M0 0 C-57.31 69.59, -114.61 139.17, -217.78 264.44\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(29.50826160087047 131.3888888888896) rotate(0 35.5555555555556 137.22222222222217)\">\u003Cpath d=\"M0 0 C25.28 97.58, 50.57 195.16, 71.11 274.44 M0 0 C27.54 106.29, 55.08 212.57, 71.11 274.44\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(102.84159493420384 124.72222222222354) rotate(0 0 140)\">\u003Cpath d=\"M0 0 C0 66.41, 0 132.82, 0 280 M0 0 C0 75.88, 0 151.76, 0 280\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(105.06381715642613 126.94444444444525) rotate(0 -38.888888888888914 127.77777777777783)\">\u003Cpath d=\"M0 0 C-17.91 58.84, -35.82 117.68, -77.78 255.56 M0 0 C-26.57 87.31, -53.15 174.63, -77.78 255.56\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(221.73048382309275 132.5000000000009) rotate(0 2.7777777777777715 126.11111111111131)\">\u003Cpath d=\"M0 0 C2.01 91.04, 4.01 182.08, 5.56 252.22 M0 0 C2 90.68, 3.99 181.36, 5.56 252.22\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(322.84159493420395 250.2777777777792) rotate(0 -108.88888888888891 8.888888888888687)\">\u003Cpath d=\"M0 0 C-44.42 3.63, -88.84 7.25, -217.78 17.78 M0 0 C-47.41 3.87, -94.81 7.74, -217.78 17.78\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(101.73048382309275 266.94444444444525) rotate(0 -36.666666666666686 -1.1111111111108585)\">\u003Cpath d=\"M0 0 C-27.37 -0.83, -54.74 -1.66, -73.33 -2.22 M0 0 C-16.92 -0.51, -33.84 -1.03, -73.33 -2.22\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(107.2860393786483 266.94444444444525) rotate(0 56.111111111111086 -67.77777777777783)\">\u003Cpath d=\"M0 0 C43.92 -53.05, 87.83 -106.1, 112.22 -135.56 M0 0 C25.16 -30.39, 50.32 -60.79, 112.22 -135.56\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(219.50826160087047 135.83333333333394) rotate(0 52.222222222222285 55.55555555555566)\">\u003Cpath d=\"M0 0 C41.4 44.05, 82.81 88.09, 104.44 111.11 M0 0 C35.91 38.2, 71.82 76.41, 104.44 111.11\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(322.84159493420395 248.05555555555657) rotate(0 -46.66666666666674 68.88888888888869)\">\u003Cpath d=\"M0 0 C-28.36 41.86, -56.72 83.72, -93.33 137.78 M0 0 C-23.55 34.76, -47.09 69.52, -93.33 137.78\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(228.39715048975938 383.6111111111122) rotate(0 -61.111111111111086 -56.11111111111131)\">\u003Cpath d=\"M0 0 C-48.88 -44.88, -97.76 -89.76, -122.22 -112.22 M0 0 C-34.85 -32, -69.7 -64, -122.22 -112.22\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(536.1749282675372 143.61111111111222) rotate(0 102.22222222222217 113.33333333333303)\">\u003Cpath d=\"M0 0 C74.96 83.1, 149.91 166.21, 204.44 226.67 M0 0 C44.43 49.25, 88.85 98.51, 204.44 226.67\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg stroke-linecap=\"round\">\u003Cg transform=\"translate(536.1749282675372 143.61111111111222) rotate(0 -36.111111111111086 121.66666666666652)\">\u003Cpath d=\"M0 0 C-21.98 74.06, -43.96 148.12, -72.22 243.33 M0 0 C-22.1 74.45, -44.2 148.91, -72.22 243.33\" stroke=\"#1e1e1e\" stroke-width=\"1\" fill=\"none\">\u003C/path>\u003C/g>\u003C/g>\u003Cmask>\u003C/mask>\u003Cg transform=\"translate(46.17492826753721 12.50000000000091) rotate(0 140.42312622070312 45.83333333333303)\">\u003Ctext x=\"0\" y=\"69.95999999999954\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"73.33333333333285px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">BEFORE\u003C/text>\u003C/g>\u003Cg transform=\"translate(467.76266178352455 10) rotate(0 115.60161590576172 45.83333333333303)\">\u003Ctext x=\"0\" y=\"69.95999999999954\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"73.33333333333285px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">AFTER\u003C/text>\u003C/g>\u003Cg transform=\"translate(41.73048382309277 433.6111111111122) rotate(0 128.52865600585938 30.555555555555202)\">\u003Ctext x=\"0\" y=\"23.319999999999855\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"24.444444444444294px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">downloaded models\u003C/text>\u003Ctext x=\"0\" y=\"53.87555555555522\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"24.444444444444294px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">from the web / libraries\u003C/text>\u003C/g>\u003Cg transform=\"translate(468.7573833727889 433.05555555555657) rotate(0 122.35819244384766 30.555555555555202)\">\u003Ctext x=\"0\" y=\"23.319999999999855\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"24.444444444444294px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">decimated (optimized)\u003C/text>\u003Ctext x=\"0\" y=\"53.87555555555522\" font-family=\"Nunito, sans-serif, Segoe UI Emoji\" font-size=\"24.444444444444294px\" fill=\"#1e1e1e\" text-anchor=\"start\" style=\"white-space: pre;\" direction=\"ltr\" dominant-baseline=\"alphabetic\">objects ready for XR\u003C/text>\u003C/g>\u003C/svg>","type":"image/svg+xml"}, +{"created":"20251113150914705","text":"create an [[object|Edit a 3D scene file]] with name ''spawn''.\n\n> When a 3D file is loaded, it will position the user/camera at xyz: 0,0,0 OR to the location of (an object called) ''spawn''.\n\nBasically:\n\n* https://my.org/foo.glb\n\nwill load as default:\n\n* https://my.org/foo.glb#spawn","tags":"howto","title":"default spawn location","modified":"20251113151117966"}, {"modified":"20230504093652627","title":"Draft of 'โ†ช URI.parse(url,flags)'"}, {"modified":"20250922195047598","title":"Draft of '๐Ÿ“œ level0: File'"}, {"modified":"20230804102946971","title":"Draft of '๐Ÿ“œ XR fragments'"}, @@ -1426,7 +1429,7 @@ button.sidebar-toggle{ {"created":"20250926183433762","text":"> How to ''hide'' an object by default, after loading a scene?\n\n''Answer'': by [[parenting that object|child objects]] to an objectname starting with an underscore-symbol (`_`)\n\nThis indicates that the (underscore) object (and its children) should never be ''rendered'' (unless teleported by [[#!]])\n\n[img[parent_child_toggle.svg]]\n\n* objectname `_hidden` and `child` will ''be hidden'' after scene-load\n* objectname `child` will be visible after being [[teleported out|#!]] of `_hidden` (by clicking `href: #!child`)\n\n> ''Rationale:'' this prevents unused assets from floating around in space in VR/AR scenes.\n","tags":"[[๐Ÿ“œ level0: File]] level0 optional","title":"system folders","modified":"20250928160921956","type":"text/vnd.tiddlywiki"}, {"created":"20231128144347734","text":"> NOTE: `tag` is non-normative\n\n`tag` metadata allows tagging objects with strings (similar to `id` and `class` in HTML).\u003Cbr>\nIt is used by [[filters]] to reference groups of objects, and the [[XRWG]] to associate things with eachother.\u003Cbr>\n\n| fragment | type | example value |\n|`tag`| string (space separated) | `#cube`\u003Cbr>`#cubes`\u003Cbr>`#-sky&rain`\u003Cbr>`#-language&english`\u003Cbr>`#price=>2&price=\u003C5`|\n\n[[ยป discussion|https://github.com/coderofsalvation/xrfragment/issues/11]]\u003Cbr>\n","tags":"[[๐Ÿงช levelX: non-normative metadata]]","title":"tag","modified":"20250910094537660","type":"text/vnd.tiddlywiki"}, {"created":"20240130113718711","text":"XR Fragment-capable clients can reference objects with a certain `name` or `tag`, take for example this URL:\n\n`https://foo.com/index.glb#cubes`\n\nAfter loading the scene, all [[tags]] and object-names will be loaded into the XRWG, so that:\n\n1. objects with name `cubes` will be matched\n\u003Cbr>\n2. objects with [[tag]] `cubes` will be matched\n\u003Cbr>\n\u003Cbr>\nIf objects are matched, the client can draw visible links to/from the objects/visitor to 'point' to those objects of interest.\u003Cbr>\u003CBr>\n\nsee [[predefined_view]] for more info\n","tags":"[[๐Ÿงช experimental]]","title":"tagged objects","modified":"20250902143004764"}, -{"created":"20230815155307052","text":"set the position of the camera.\n\n| fragment | type | functionality |\n| \u003Cb>#roomB\u003C/b> | string | position camera to position of object with name `roomB` |\n| \u003Cb>#cam2\u003C/b> | string | position camera to position of camera with name `cam02`, and make it active camera [follow animation e.g.] |\n\n> the usercamera (usually default at `0,0,0`) is repositioned to the ''origin'' and ''upvector'' of the target object (1.6m height is added ''in VR only'')\n\nAnd to enable VR elevators e.g.:\n\n> the camera is attach/parented to that object (so it animates along with the object)\n\n\n\nYou can add this URI Fragment to the top-level URLbar, or as [[href]] value (to trigger via click) in a 3D model Editor (Blender e.g.):\u003Cbr>\u003Cbr>\n\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#t=295\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n> ''IMPORTANT:'' `#pos=roomB` has been deprecated in favor of `#roomB` to simplify the spec.\n\n\u003Ch2>Developers only:\u003C/h2>\n\n[[ยป example implementation|https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js]]\u003Cbr>\n[[ยป discussion|https://github.com/coderofsalvation/xrfragment/issues/5]]\u003Cbr>\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 sandbox=\"allow-scripts\" src=\"doc/RFC_XR_Fragments.html#navigating-3d\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n","tags":"level1 [[๐Ÿ“œ level1: URL]] href","title":"teleport camera","modified":"20251107073955775","type":"text/vnd.tiddlywiki"}, +{"created":"20230815155307052","text":"set the position of the camera.\n\n| fragment | type | functionality |\n| \u003Cb>#spawn\u003C/b> | string | (''default'') position camera to position of object with name `spawn` (if exist). Happens after loading scene, if no URI hashtag is present|\n| \u003Cb>#roomB\u003C/b> | string | position camera to position of object with name `roomB` |\n| \u003Cb>#cam2\u003C/b> | string | position camera to position of camera with name `cam02`, and make it active camera [follow animation e.g.] |\n\n> the usercamera (usually default at `0,0,0`) is repositioned to the ''origin'' and ''upvector'' of the target object (1.6m height is added ''in VR only'')\n\nAnd to enable VR elevators e.g.:\n\n> the camera is attach/parented to that object (so it animates along with the object)\n\n\n\nYou can add this URI Fragment to the top-level URLbar, or as [[href]] value (to trigger via click) in a 3D model Editor (Blender e.g.):\u003Cbr>\u003Cbr>\n\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#t=295\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\n> ''IMPORTANT:'' `#pos=roomB` has been deprecated in favor of `#roomB` to simplify the spec.\n\n\u003Ch2>Developers only:\u003C/h2>\n\n[[ยป example implementation|https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/pos.js]]\u003Cbr>\n[[ยป discussion|https://github.com/coderofsalvation/xrfragment/issues/5]]\u003Cbr>\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 sandbox=\"allow-scripts\" src=\"doc/RFC_XR_Fragments.html#navigating-3d\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n","tags":"level1 [[๐Ÿ“œ level1: URL]] href","title":"teleport camera","modified":"20251113150900847","type":"text/vnd.tiddlywiki"}, {"created":"20230426160615931","text":"\u003Cdiv class=\"scene\">\u003C/div>\n\n\u003C\u003Cscript>>\n\u003Cscript>\n $scene = document.querySelector(\".scene\")\n\tscene = new THREE.Scene();\n camera = new THREE.PerspectiveCamera( 75, $scene.offsetWidth / $scene.offsetHeight, 0.1, 1000 );\n\n\trenderer = new THREE.WebGLRenderer();\n renderer.setSize( $scene.offsetWidth, $scene.offsetHeight );\n $scene.appendChild( renderer.domElement );\n\t\n\tvar geometry = new THREE.BoxGeometry( 1, 1, 1 );\n\tvar material = new THREE.MeshBasicMaterial( { color: 0x0a84ff } );\n\tvar cube = new THREE.Mesh( geometry, material );\n\tscene.add( cube );\n\tscene.background = new THREE.Color( 0x18181c );\n\n\tcamera.position.z = 2;\n\n\tfunction animate() {\n\t\trequestAnimationFrame( animate );\n\n\t\tcube.rotation.x += 0.004;\n\t\tcube.rotation.y += 0.004;\n\n\t\trenderer.render( scene, camera );\n\t}\n\n\tanimate();\t\n\tlog(\"hello world\")\n\u003C/script>","title":"THREE template","modified":"20230523125639178","tags":""}, {"created":"20230425154949623","text":"\u003Cscript async src=\"https://unpkg.com/es-module-shims@1.6.3/dist/es-module-shims.js\">\u003C/script>\n\n\u003Cscript type=\"importmap\">\n{\n\t\"imports\": {\n\t\t\"three\": \"https://unpkg.com/three@0.151.3/build/three.module.js\",\n\t\t\t\"three/addons/\": \"https://unpkg.com/three@0.151.3/examples/jsm/\"\n\t}\n}\n\u003C/script>\n\n\u003Cscript type=\"module\">\nimport * as THREE from 'three';\n\nimport { BoxLineGeometry } from 'three/addons/geometries/BoxLineGeometry.js';\nimport { VRButton } from 'three/addons/webxr/VRButton.js';\nimport { XRControllerModelFactory } from 'three/addons/webxr/XRControllerModelFactory.js';\n\nlet camera, scene, raycaster, renderer;\nlet controller1, controller2;\nlet controllerGrip1, controllerGrip2;\n\nlet room, marker, floor, baseReferenceSpace;\n\nlet INTERSECTION;\nconst tempMatrix = new THREE.Matrix4();\n\ninit();\nanimate();\n\nfunction init() {\n\n\tscene = new THREE.Scene();\n\tscene.background = new THREE.Color( 0x505050 );\n\n\tcamera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.1, 10 );\n\tcamera.position.set( 0, 1, 3 );\n\n\troom = new THREE.LineSegments(\n\t\t\tnew BoxLineGeometry( 6, 6, 6, 10, 10, 10 ).translate( 0, 3, 0 ),\n\t\t\tnew THREE.LineBasicMaterial( { color: 0x808080 } )\n\t\t\t);\n\tscene.add( room );\n\n\tscene.add( new THREE.HemisphereLight( 0x606060, 0x404040 ) );\n\n\tconst light = new THREE.DirectionalLight( 0xffffff );\n\tlight.position.set( 1, 1, 1 ).normalize();\n\tscene.add( light );\n\n\tmarker = new THREE.Mesh(\n\t\t\tnew THREE.CircleGeometry( 0.25, 32 ).rotateX( - Math.PI / 2 ),\n\t\t\tnew THREE.MeshBasicMaterial( { color: 0x808080 } )\n\t\t\t);\n\tscene.add( marker );\n\n\tfloor = new THREE.Mesh(\n\t\t\tnew THREE.PlaneGeometry( 4.8, 4.8, 2, 2 ).rotateX( - Math.PI / 2 ),\n\t\t\tnew THREE.MeshBasicMaterial( { color: 0x808080, transparent: true, opacity: 0.25 } )\n\t\t\t);\n\tscene.add( floor );\n\n\traycaster = new THREE.Raycaster();\n\n\trenderer = new THREE.WebGLRenderer( { antialias: true } );\n\trenderer.setPixelRatio( window.devicePixelRatio );\n\trenderer.setSize( window.innerWidth, window.innerHeight );\n\trenderer.outputEncoding = THREE.sRGBEncoding;\n\n\trenderer.xr.addEventListener( 'sessionstart', () => baseReferenceSpace = renderer.xr.getReferenceSpace() );\n\trenderer.xr.enabled = true;\n\n\tdocument.body.appendChild( renderer.domElement );\n\tdocument.body.appendChild( VRButton.createButton( renderer ) );\n\n\t// controllers\n\n\tfunction onSelectStart() {\n\n\t\tthis.userData.isSelecting = true;\n\n\t}\n\n\tfunction onSelectEnd() {\n\n\t\tthis.userData.isSelecting = false;\n\n\t\tif ( INTERSECTION ) {\n\n\t\t\tconst offsetPosition = { x: - INTERSECTION.x, y: - INTERSECTION.y, z: - INTERSECTION.z, w: 1 };\n\t\t\tconst offsetRotation = new THREE.Quaternion();\n\t\t\tconst transform = new XRRigidTransform( offsetPosition, offsetRotation );\n\t\t\tconst teleportSpaceOffset = baseReferenceSpace.getOffsetReferenceSpace( transform );\n\n\t\t\trenderer.xr.setReferenceSpace( teleportSpaceOffset );\n\n\t\t}\n\n\t}\n\n\tcontroller1 = renderer.xr.getController( 0 );\n\tcontroller1.addEventListener( 'selectstart', onSelectStart );\n\tcontroller1.addEventListener( 'selectend', onSelectEnd );\n\tcontroller1.addEventListener( 'connected', function ( event ) {\n\n\t\t\tthis.add( buildController( event.data ) );\n\n\t\t\t} );\n\tcontroller1.addEventListener( 'disconnected', function () {\n\n\t\t\tthis.remove( this.children[ 0 ] );\n\n\t\t\t} );\n\tscene.add( controller1 );\n\n\tcontroller2 = renderer.xr.getController( 1 );\n\tcontroller2.addEventListener( 'selectstart', onSelectStart );\n\tcontroller2.addEventListener( 'selectend', onSelectEnd );\n\tcontroller2.addEventListener( 'connected', function ( event ) {\n\n\t\t\tthis.add( buildController( event.data ) );\n\n\t\t\t} );\n\tcontroller2.addEventListener( 'disconnected', function () {\n\n\t\t\tthis.remove( this.children[ 0 ] );\n\n\t\t\t} );\n\tscene.add( controller2 );\n\n\t// The XRControllerModelFactory will automatically fetch controller models\n\t// that match what the user is holding as closely as possible. The models\n\t// should be attached to the object returned from getControllerGrip in\n\t// order to match the orientation of the held device.\n\n\tconst controllerModelFactory = new XRControllerModelFactory();\n\n\tcontrollerGrip1 = renderer.xr.getControllerGrip( 0 );\n\tcontrollerGrip1.add( controllerModelFactory.createControllerModel( controllerGrip1 ) );\n\tscene.add( controllerGrip1 );\n\n\tcontrollerGrip2 = renderer.xr.getControllerGrip( 1 );\n\tcontrollerGrip2.add( controllerModelFactory.createControllerModel( controllerGrip2 ) );\n\tscene.add( controllerGrip2 );\n\n\t//\n\n\twindow.addEventListener( 'resize', onWindowResize, false );\n\n}\n\nfunction buildController( data ) {\n\n\tlet geometry, material;\n\n\tswitch ( data.targetRayMode ) {\n\n\t\tcase 'tracked-pointer':\n\n\t\t\tgeometry = new THREE.BufferGeometry();\n\t\t\tgeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( [ 0, 0, 0, 0, 0, - 1 ], 3 ) );\n\t\t\tgeometry.setAttribute( 'color', new THREE.Float32BufferAttribute( [ 0.5, 0.5, 0.5, 0, 0, 0 ], 3 ) );\n\n\t\t\tmaterial = new THREE.LineBasicMaterial( { vertexColors: true, blending: THREE.AdditiveBlending } );\n\n\t\t\treturn new THREE.Line( geometry, material );\n\n\t\tcase 'gaze':\n\n\t\t\tgeometry = new THREE.RingGeometry( 0.02, 0.04, 32 ).translate( 0, 0, - 1 );\n\t\t\tmaterial = new THREE.MeshBasicMaterial( { opacity: 0.5, transparent: true } );\n\t\t\treturn new THREE.Mesh( geometry, material );\n\n\t}\n\n}\n\nfunction onWindowResize() {\n\n\tcamera.aspect = window.innerWidth / window.innerHeight;\n\tcamera.updateProjectionMatrix();\n\n\trenderer.setSize( window.innerWidth, window.innerHeight );\n\n}\n\n//\n\nfunction animate() {\n\trenderer.setAnimationLoop( render );\n}\n\nfunction render() {\n\n\tINTERSECTION = undefined;\n\n\tif ( controller1.userData.isSelecting === true ) {\n\t\ttempMatrix.identity().extractRotation( controller1.matrixWorld );\n\t\traycaster.ray.origin.setFromMatrixPosition( controller1.matrixWorld );\n\t\traycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );\n\t\tconst intersects = raycaster.intersectObjects( [ floor ] );\n\t\tif ( intersects.length > 0 ) {\n\t\t\tINTERSECTION = intersects[ 0 ].point;\n\t\t}\n\t} else if ( controller2.userData.isSelecting === true ) {\n\t\ttempMatrix.identity().extractRotation( controller2.matrixWorld );\n\t\traycaster.ray.origin.setFromMatrixPosition( controller2.matrixWorld );\n\t\traycaster.ray.direction.set( 0, 0, - 1 ).applyMatrix4( tempMatrix );\n\t\tconst intersects = raycaster.intersectObjects( [ floor ] );\n\t\tif ( intersects.length > 0 ) {\n\t\t\tINTERSECTION = intersects[ 0 ].point;\n\t\t}\n\t}\n\n\tif ( INTERSECTION ) marker.position.copy( INTERSECTION );\n\tmarker.visible = INTERSECTION !== undefined;\n\trenderer.render( scene, camera );\n\n}\n\n\u003C/script>\n","tags":"","title":"THREE template #online","modified":"20230523125650516","type":"text/html"}, {"created":"20251023085406692","text":"when a loaded file contains a timeline (animations/subtitles e.g.), then:\n\n> All timelines must play (looped) by default (to enable [[XR Movies]])\n\nUnless an object has multiple animations (actions e.g.), then just play the first or with name `default`.\n\n","title":"timelines","modified":"20251023085452784","tags":"[[๐Ÿ“œ level0: File]] level0"},