File tree Expand file tree Collapse file tree 2 files changed +63
-0
lines changed
Expand file tree Collapse file tree 2 files changed +63
-0
lines changed Original file line number Diff line number Diff line change 5151use Developermithu \Tallcraftui \View \Components \Table \Th ;
5252use Developermithu \Tallcraftui \View \Components \Table \Tr ;
5353use Developermithu \Tallcraftui \View \Components \Textarea ;
54+ use Developermithu \Tallcraftui \View \Components \ThemeToggle ;
5455use Developermithu \Tallcraftui \View \Components \Toast ;
5556use Developermithu \Tallcraftui \View \Components \Toggle ;
5657use Developermithu \Tallcraftui \View \Components \Tooltip ;
@@ -144,6 +145,7 @@ private function registerComponents(): void
144145 'markdown ' => Markdown::class,
145146 'progress ' => Progress::class,
146147 'progress-radial ' => ProgressRadial::class,
148+ 'theme-toggle ' => ThemeToggle::class,
147149 ];
148150
149151 foreach ($ components as $ name => $ class ) {
Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Developermithu \Tallcraftui \View \Components ;
4+
5+ use Closure ;
6+ use Illuminate \Contracts \View \View ;
7+ use Illuminate \View \Component ;
8+
9+ class ThemeToggle extends Component
10+ {
11+ public function render (): View |Closure |string
12+ {
13+ return <<<'HTML'
14+ <div x-data="{
15+ isDarkMode: false,
16+ init() {
17+ this.isDarkMode = localStorage.getItem('dark-mode') === 'true' ||
18+ (!('dark-mode' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches);
19+ this.applyTheme();
20+ },
21+ toggleDarkMode() {
22+ this.isDarkMode = !this.isDarkMode;
23+ localStorage.setItem('dark-mode', this.isDarkMode);
24+ this.applyTheme();
25+ },
26+ applyTheme() {
27+ if (this.isDarkMode) {
28+ document.documentElement.classList.add('dark');
29+ } else {
30+ document.documentElement.classList.remove('dark');
31+ }
32+ }
33+ }">
34+ <label class="sr-only">Theme</label>
35+ <button
36+ @click="toggleDarkMode()"
37+ aria-label="Theme"
38+ {{ $attributes
39+ ->withoutTwMergeClasses()
40+ ->twMerge([
41+ 'flex items-center justify-center w-6 h-6 p-1 xxs:w-10 xxs:h-10 xxs:p-1.5 bg-transparent rounded-full hover:bg-gray-100 dark:hover:bg-slate-700 dark:ring-inset dark:ring-white/5',
42+ ])
43+ }}
44+ >
45+ <x-tc-icon
46+ x-cloak
47+ name="sun"
48+ x-show="!isDarkMode"
49+ {{ $attributes->twMergeFor('icon-light', 'text-teal-500 dark:text-teal-500') }}
50+ />
51+ <x-tc-icon
52+ x-cloak
53+ name="moon"
54+ x-show="isDarkMode"
55+ {{ $attributes->twMergeFor('icon-dark', 'text-teal-500 dark:text-teal-500') }}
56+ />
57+ </button>
58+ </div>
59+ HTML;
60+ }
61+ }
You can’t perform that action at this time.
0 commit comments