({type = 'style', examples = DEFAULT_EXAMPLES, children})
| 64 | const DEFAULT_EXAMPLES = ['Vanilla CSS', 'Tailwind']; |
| 65 | |
| 66 | export function ExampleSwitcher({type = 'style', examples = DEFAULT_EXAMPLES, children}) { |
| 67 | let [selected, setSelected] = useLocalStorage(type, examples[0]); |
| 68 | let [theme, setTheme] = useLocalStorage('theme', 'indigo'); |
| 69 | let [value, setValue] = useState(examples[0]); |
| 70 | |
| 71 | if (!examples.includes(selected)) { |
| 72 | selected = examples[0]; |
| 73 | } |
| 74 | |
| 75 | if (!type) { |
| 76 | selected = value; |
| 77 | } |
| 78 | |
| 79 | useLayoutEffect(() => { |
| 80 | document.documentElement.style.setProperty('--tint', `var(--${theme})`); |
| 81 | }, [theme]); |
| 82 | |
| 83 | let onSelectionChange = (key: Key) => { |
| 84 | if (type) { |
| 85 | setSelected(String(key)); |
| 86 | } else { |
| 87 | setValue(String(key)); |
| 88 | } |
| 89 | }; |
| 90 | |
| 91 | let onThemeChange = (key: Key | null) => { |
| 92 | setTheme(String(key)); |
| 93 | }; |
| 94 | |
| 95 | return ( |
| 96 | <div className={exampleStyle} data-example-switcher> |
| 97 | <div className={switcher}> |
| 98 | <SegmentedControl |
| 99 | aria-label={type || 'example'} |
| 100 | selectedKey={selected} |
| 101 | onSelectionChange={onSelectionChange}> |
| 102 | {examples.map(example => ( |
| 103 | <SegmentedControlItem key={example} id={example}> |
| 104 | {example} |
| 105 | </SegmentedControlItem> |
| 106 | ))} |
| 107 | </SegmentedControl> |
| 108 | </div> |
| 109 | {selected === 'Vanilla CSS' && ( |
| 110 | <Picker |
| 111 | label="Theme" |
| 112 | labelPosition="side" |
| 113 | value={theme} |
| 114 | onChange={onThemeChange} |
| 115 | styles={themePicker} |
| 116 | contextualHelp={ |
| 117 | <ContextualHelp> |
| 118 | <Heading>Vanilla CSS theme</Heading> |
| 119 | <Content> |
| 120 | This sets the <code className={style({font: 'code-sm'})}>--tint</code> CSS variable |
| 121 | used by the Vanilla CSS examples. |
| 122 | </Content> |
| 123 | </ContextualHelp> |
nothing calls this directly
no test coverage detected