MCPcopy Create free account
hub / github.com/adobe/react-spectrum / ExampleSwitcher

Function ExampleSwitcher

packages/dev/s2-docs/src/ExampleSwitcher.tsx:66–144  ·  view source on GitHub ↗
({type = 'style', examples = DEFAULT_EXAMPLES, children})

Source from the content-addressed store, hash-verified

64const DEFAULT_EXAMPLES = ['Vanilla CSS', 'Tailwind'];
65
66export 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>

Callers

nothing calls this directly

Calls 1

useLocalStorageFunction · 0.90

Tested by

no test coverage detected