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

Function ExampleApp2

packages/dev/s2-docs/pages/s2/home/ExampleApp2.tsx:71–379  ·  view source on GitHub ↗
({onBack, children, showPanel, panel, onPanelChange}: any)

Source from the content-addressed store, hash-verified

69const SM = `@container (width >= ${SM_BREAK}rem)`;
70
71export function ExampleApp2({onBack, children, showPanel, panel, onPanelChange}: any) {
72 let [selectedPanel, setSelectedPanel] = useState<Key | null>('properties');
73 let [transitioning, setTransitioning] = useState<Key | null>(null);
74 let displayPanel = panel || selectedPanel || transitioning;
75 let [isLarge, setLarge] = useState(true);
76
77 let setPanel = (panel: Key | null) => {
78 onPanelChange?.(panel);
79 setSelectedPanel(panel);
80 };
81
82 let ref = useRef<HTMLDivElement | null>(null);
83 useResizeObserver({
84 ref,
85 onResize() {
86 let width = ref.current!.getBoundingClientRect().width;
87 let rem = parseFloat(window.getComputedStyle(document.documentElement).fontSize);
88 let breakpoint = width / rem;
89 flushSync(() => {
90 let matches = breakpoint >= SM_BREAK;
91 setLarge(matches);
92 if (!showPanel && selectedPanel && isLarge && !matches) {
93 setPanel(null);
94 }
95 });
96 }
97 });
98
99 return (
100 <ColorSchemeProvider>
101 <div
102 ref={ref}
103 className={style({
104 display: 'grid',
105 gridTemplateAreas: {
106 default: ['toolbar toolbar', 'content content', 'assets assets', 'panels panels'],
107 [SM]: ['toolbar toolbar toolbar toolbar', 'sidebar content assets panels']
108 },
109 gridTemplateRows: {
110 default: ['max-content', '1fr', 'auto', 'auto'],
111 [SM]: ['max-content', '1fr']
112 },
113 gridTemplateColumns: {
114 default: ['minmax(0, 1fr)', 'minmax(0, 1fr)'],
115 [SM]: ['auto', '1fr', 'auto', 'auto']
116 },
117 height: 'full',
118 '--radius': {
119 type: 'borderTopStartRadius',
120 value: 'lg'
121 },
122 borderRadius: '--radius',
123 borderTopRadius: 'var(--app-frame-radius-top, var(--radius))',
124 overflow: 'clip',
125 boxSizing: 'border-box',
126 boxShadow: 'elevated',
127 position: 'relative',
128 isolation: 'isolate'

Callers

nothing calls this directly

Calls 2

useResizeObserverFunction · 0.90
setPanelFunction · 0.85

Tested by

no test coverage detected