|
1 | 1 | <script context="module"> |
2 | 2 | let globalTheme = 'light'; |
3 | | - let globalThemeColor = document.documentElement.style |
4 | | - .getPropertyValue('--f7-color-primary') |
5 | | - .trim(); |
| 3 | + let globalThemeColor = dom7('html').css('--f7-color-primary').trim(); |
| 4 | + let globalMonochrome = false; |
| 5 | + let globalVibrant = false; |
6 | 6 | </script> |
7 | 7 |
|
8 | 8 | <script> |
| 9 | + import dom7 from 'dom7'; |
9 | 10 | import { |
10 | 11 | f7, |
11 | 12 | Navbar, |
|
15 | 16 | Block, |
16 | 17 | List, |
17 | 18 | ListInput, |
| 19 | + ListItem, |
| 20 | + Toggle, |
18 | 21 | Checkbox, |
19 | 22 | Link, |
20 | 23 | Toolbar, |
21 | 24 | } from 'framework7-svelte'; |
22 | 25 |
|
23 | | - let theme = globalTheme; |
24 | | - let themeColor = globalThemeColor; |
| 26 | + let theme = $state(globalTheme); |
| 27 | + let themeColor = $state(globalThemeColor || dom7('html').css('--f7-color-primary').trim()); |
| 28 | + let monochrome = $state(globalMonochrome); |
| 29 | + let vibrant = $state(globalVibrant); |
25 | 30 |
|
26 | 31 | const colors = Object.keys(f7.colors).filter( |
27 | 32 | (c) => c !== 'primary' && c !== 'white' && c !== 'black', |
28 | 33 | ); |
29 | 34 |
|
30 | 35 | function setScheme(newTheme) { |
31 | | - console.log(newTheme); |
32 | 36 | f7.setDarkMode(newTheme === 'dark'); |
33 | 37 | globalTheme = newTheme; |
34 | 38 | theme = newTheme; |
|
45 | 49 | globalThemeColor = newColor; |
46 | 50 | f7.setColorTheme(newColor); |
47 | 51 | } |
| 52 | +
|
| 53 | + const setMdColorScheme = () => { |
| 54 | + if (!globalVibrant && !globalMonochrome) { |
| 55 | + f7.setMdColorScheme('default'); |
| 56 | + } else if (globalVibrant && !globalMonochrome) { |
| 57 | + f7.setMdColorScheme('vibrant'); |
| 58 | + } else if (!globalVibrant && globalMonochrome) { |
| 59 | + f7.setMdColorScheme('monochrome'); |
| 60 | + } else if (globalVibrant && globalMonochrome) { |
| 61 | + f7.setMdColorScheme('monochrome-vibrant'); |
| 62 | + } |
| 63 | + }; |
| 64 | + const setMdColorSchemeMonochrome = (value) => { |
| 65 | + globalMonochrome = value; |
| 66 | + monochrome = globalMonochrome; |
| 67 | + setMdColorScheme(); |
| 68 | + }; |
| 69 | + const setMdColorSchemeVibrant = (value) => { |
| 70 | + globalVibrant = value; |
| 71 | + vibrant = globalVibrant; |
| 72 | + setMdColorScheme(); |
| 73 | + }; |
48 | 74 | </script> |
49 | 75 |
|
50 | 76 | <Page> |
|
73 | 99 | <Block strong> |
74 | 100 | <p>Framework7 comes with 2 main layout themes: Light (default) and Dark:</p> |
75 | 101 | <div class="grid grid-cols-2 grid-gap"> |
76 | | - <div class="bg-color-white demo-theme-picker" on:click={() => setScheme('light')}> |
| 102 | + <div class="bg-color-white demo-theme-picker" onclick={() => setScheme('light')}> |
77 | 103 | {#if theme === 'light'} |
78 | 104 | <Checkbox checked disabled /> |
79 | 105 | {/if} |
80 | 106 | </div> |
81 | | - <div class="bg-color-black demo-theme-picker" on:click={() => setScheme('dark')}> |
| 107 | + <div class="bg-color-black demo-theme-picker" onclick={() => setScheme('dark')}> |
82 | 108 | {#if theme === 'dark'} |
83 | 109 | <Checkbox checked disabled /> |
84 | 110 | {/if} |
|
106 | 132 | {/each} |
107 | 133 | </div> |
108 | 134 | </Block> |
| 135 | + <BlockTitle medium>Material Color Scheme</BlockTitle> |
| 136 | + <List strong inset dividersIos> |
| 137 | + <ListItem title="Monochrome"> |
| 138 | + {#snippet after()} |
| 139 | + <Toggle |
| 140 | + checked={monochrome} |
| 141 | + onToggleChange={() => setMdColorSchemeMonochrome(!monochrome)} |
| 142 | + /> |
| 143 | + {/snippet} |
| 144 | + </ListItem> |
| 145 | + <ListItem title="Vibrant"> |
| 146 | + {#snippet after()} |
| 147 | + <Toggle checked={vibrant} onToggleChange={() => setMdColorSchemeVibrant(!vibrant)} /> |
| 148 | + {/snippet} |
| 149 | + </ListItem> |
| 150 | + </List> |
| 151 | + |
109 | 152 | <BlockTitle medium>Custom Color Theme</BlockTitle> |
110 | 153 | <List strongIos outlineIos> |
111 | 154 | <ListInput |
|
117 | 160 | onColorPickerChange={(value) => setCustomColor(value.hex)} |
118 | 161 | colorPickerParams={{ targetEl: '#color-theme-picker-color' }} |
119 | 162 | > |
120 | | - <div |
121 | | - slot="media" |
122 | | - id="color-theme-picker-color" |
123 | | - style="width: 28px; height: 28px; borderRadius: 4px; background: var(--f7-theme-color)" |
124 | | - /> |
| 163 | + {#snippet media()} |
| 164 | + <div |
| 165 | + id="color-theme-picker-color" |
| 166 | + style="width: 28px; height: 28px; borderRadius: 4px; background: var(--f7-theme-color)" |
| 167 | + ></div> |
| 168 | + {/snippet} |
125 | 169 | </ListInput> |
126 | 170 | </List> |
127 | 171 | </Page> |
0 commit comments