File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ # ── DarkModeToggle ──
2+ # Module-level signal — shared across ALL DarkModeToggle instances on the page.
3+ # The nav bar toggle and the examples page toggle stay in sync automatically.
4+ # This follows the standard pattern: create_signal at file scope, capture in @island.
5+
6+ const dark_mode = create_signal (0 )
7+
8+ @island function DarkModeToggle ()
9+ # Capture the module-level signal (auto-detected as shared by the compiler)
10+ is_dark, set_dark = dark_mode
11+
12+ # Sync signal with actual DOM state on hydration
13+ # (head script already set 'dark' class from localStorage/OS preference)
14+ js (" if(document.documentElement.classList.contains('dark'))\$ 1(1)" , set_dark)
15+
16+ return Button (
17+ :on_click => () -> begin
18+ set_dark (1 - is_dark ())
19+ js (" document.documentElement.classList.toggle('dark')" )
20+ js (" var bp = document.documentElement.getAttribute('data-base-path') || ''" )
21+ js (" var sk = bp ? 'therapy-theme:' + bp : 'therapy-theme'" )
22+ js (" localStorage.setItem(sk, document.documentElement.classList.contains('dark') ? 'dark' : 'light')" )
23+ end ,
24+ :class => " text-warm-500 dark:text-warm-400 hover:text-warm-700 dark:hover:text-warm-300 transition-colors cursor-pointer" ,
25+ RawHtml (""" <svg class="w-5 h-5 dark:hidden" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg><svg class="w-5 h-5 hidden dark:block" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg>""" )
26+ )
27+ end
Original file line number Diff line number Diff line change @@ -26,7 +26,8 @@ function Layout(content)
2626 A (:href => " https://github.com/GroupTherapyOrg/JavaScriptTarget.jl" , :target => " _blank" ,
2727 :class => " text-warm-600 dark:text-warm-400 hover:text-warm-700 dark:hover:text-warm-300 transition-colors" ,
2828 RawHtml (""" <svg class="w-5 h-5" viewBox="0 0 24 24" fill="currentColor"><path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/></svg>""" )
29- )
29+ ),
30+ DarkModeToggle ()
3031 )
3132 )
3233 ),
You can’t perform that action at this time.
0 commit comments