@graphprotocol/gds-react 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/GDSContext.d.ts +13 -0
- package/dist/GDSContext.d.ts.map +1 -0
- package/dist/GDSContext.js +4 -0
- package/dist/GDSContext.js.map +1 -0
- package/dist/GDSProvider.d.ts +1 -9
- package/dist/GDSProvider.d.ts.map +1 -1
- package/dist/GDSProvider.js +4 -3
- package/dist/GDSProvider.js.map +1 -1
- package/dist/components/Avatar.d.ts.map +1 -1
- package/dist/components/Avatar.js +2 -2
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Breadcrumbs.parts.js +1 -1
- package/dist/components/Breadcrumbs.parts.js.map +1 -1
- package/dist/components/Button.d.ts.map +1 -1
- package/dist/components/Button.js +69 -69
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.js +2 -2
- package/dist/components/Card.js.map +1 -1
- package/dist/components/CodeBlock.d.ts +1 -1
- package/dist/components/CodeBlock.parts.d.ts +1 -1
- package/dist/components/CopyButton.d.ts +1 -1
- package/dist/components/CopyButton.d.ts.map +1 -1
- package/dist/components/CopyButton.js +46 -19
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Input.js +2 -2
- package/dist/components/Input.js.map +1 -1
- package/dist/components/Link.js +2 -2
- package/dist/components/Link.js.map +1 -1
- package/dist/components/Menu.parts.d.ts +4 -5
- package/dist/components/Menu.parts.d.ts.map +1 -1
- package/dist/components/Menu.parts.js +52 -45
- package/dist/components/Menu.parts.js.map +1 -1
- package/dist/components/Modal.parts.d.ts.map +1 -1
- package/dist/components/Modal.parts.js +17 -21
- package/dist/components/Modal.parts.js.map +1 -1
- package/dist/components/Pane.d.ts +9 -0
- package/dist/components/Pane.d.ts.map +1 -0
- package/dist/components/Pane.js +8 -0
- package/dist/components/Pane.js.map +1 -0
- package/dist/components/Pane.meta.d.ts +20 -0
- package/dist/components/Pane.meta.d.ts.map +1 -0
- package/dist/components/Pane.meta.js +30 -0
- package/dist/components/Pane.meta.js.map +1 -0
- package/dist/components/Pane.parts.d.ts +77 -0
- package/dist/components/Pane.parts.d.ts.map +1 -0
- package/dist/components/Pane.parts.js +412 -0
- package/dist/components/Pane.parts.js.map +1 -0
- package/dist/components/Search.js +1 -1
- package/dist/components/Tooltip.parts.d.ts +13 -4
- package/dist/components/Tooltip.parts.d.ts.map +1 -1
- package/dist/components/Tooltip.parts.js +51 -63
- package/dist/components/Tooltip.parts.js.map +1 -1
- package/dist/components/base/ButtonOrLink.d.ts +1 -1
- package/dist/components/base/ButtonOrLink.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.d.ts +10 -3
- package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
- package/dist/components/base/ButtonOrLink.parts.js +27 -35
- package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
- package/dist/components/base/MaybeButtonOrLink.d.ts +19 -2
- package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
- package/dist/components/base/MaybeButtonOrLink.js +5 -3
- package/dist/components/base/MaybeButtonOrLink.js.map +1 -1
- package/dist/components/base/Presence.d.ts +157 -0
- package/dist/components/base/Presence.d.ts.map +1 -0
- package/dist/components/base/Presence.js +808 -0
- package/dist/components/base/Presence.js.map +1 -0
- package/dist/components/base/index.d.ts +1 -0
- package/dist/components/base/index.d.ts.map +1 -1
- package/dist/components/base/index.js +1 -0
- package/dist/components/base/index.js.map +1 -1
- package/dist/components/index.d.ts +2 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/useCSSProp.js +1 -1
- package/dist/hooks/useCSSProp.js.map +1 -1
- package/dist/hooks/useControlled.d.ts.map +1 -1
- package/dist/hooks/useControlled.js +6 -4
- package/dist/hooks/useControlled.js.map +1 -1
- package/dist/hooks/useGDS.js +1 -1
- package/dist/hooks/useGDS.js.map +1 -1
- package/dist/hooks/useStyleObserver.js +1 -1
- package/dist/hooks/useStyleObserver.js.map +1 -1
- package/dist/tailwind-plugin.d.ts.map +1 -1
- package/dist/tailwind-plugin.js +3 -0
- package/dist/tailwind-plugin.js.map +1 -1
- package/dist/utils/InlineCounter.d.ts +3 -0
- package/dist/utils/InlineCounter.d.ts.map +1 -0
- package/dist/utils/InlineCounter.js +7 -0
- package/dist/utils/InlineCounter.js.map +1 -0
- package/dist/utils/RenderCount.d.ts +3 -0
- package/dist/utils/RenderCount.d.ts.map +1 -0
- package/dist/utils/RenderCount.js +7 -0
- package/dist/utils/RenderCount.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +14 -14
- package/src/GDSContext.ts +16 -0
- package/src/GDSProvider.tsx +20 -31
- package/src/components/Avatar.tsx +3 -2
- package/src/components/Breadcrumbs.parts.tsx +1 -1
- package/src/components/Button.tsx +113 -107
- package/src/components/Card.tsx +2 -2
- package/src/components/CopyButton.tsx +49 -25
- package/src/components/Input.tsx +1 -1
- package/src/components/Link.tsx +2 -2
- package/src/components/Menu.parts.tsx +78 -73
- package/src/components/Modal.parts.tsx +26 -31
- package/src/components/Pane.meta.ts +31 -0
- package/src/components/Pane.parts.tsx +713 -0
- package/src/components/Pane.tsx +17 -0
- package/src/components/Search.tsx +1 -1
- package/src/components/Tooltip.parts.tsx +95 -80
- package/src/components/base/ButtonOrLink.parts.tsx +71 -51
- package/src/components/base/ButtonOrLink.tsx +1 -0
- package/src/components/base/MaybeButtonOrLink.tsx +26 -5
- package/src/components/base/Presence.tsx +1375 -0
- package/src/components/base/index.ts +1 -0
- package/src/components/index.ts +10 -0
- package/src/hooks/useCSSProp.ts +1 -1
- package/src/hooks/useControlled.ts +16 -8
- package/src/hooks/useGDS.ts +1 -1
- package/src/hooks/useStyleObserver.ts +1 -1
- package/src/tailwind-plugin.ts +3 -0
- package/src/utils/InlineCounter.tsx +17 -0
- package/src/utils/RenderCount.tsx +7 -0
- package/src/utils/index.ts +2 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type ComponentProps, type ElementType, type ReactNode } from 'react';
|
|
2
|
+
import type { GDSComponentProps } from '@graphprotocol/gds-css';
|
|
3
|
+
import { type RenderProp } from './base/Render.tsx';
|
|
4
|
+
import { PaneContainerMeta, PaneMeta } from './Pane.meta.ts';
|
|
5
|
+
import { type ToggleButtonProps } from './ToggleButton.tsx';
|
|
6
|
+
export interface PaneProviderProps {
|
|
7
|
+
children: ReactNode;
|
|
8
|
+
}
|
|
9
|
+
export declare function PaneProvider({ children }: PaneProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export declare namespace PaneProvider {
|
|
11
|
+
var displayName: string;
|
|
12
|
+
}
|
|
13
|
+
export interface UsePaneOptions {
|
|
14
|
+
defaultCollapsed?: boolean | undefined;
|
|
15
|
+
defaultOverlayOpen?: boolean | undefined;
|
|
16
|
+
onCollapsedChange?: ((collapsed: boolean) => void) | undefined;
|
|
17
|
+
onOverlayOpenChange?: ((overlayOpen: boolean) => void) | undefined;
|
|
18
|
+
}
|
|
19
|
+
export declare function usePane(name: string, options?: UsePaneOptions): {
|
|
20
|
+
layout: "overlay" | "docked";
|
|
21
|
+
collapsed: boolean;
|
|
22
|
+
overlayOpen: boolean;
|
|
23
|
+
setCollapsed: (collapsed: boolean) => void;
|
|
24
|
+
setOverlayOpen: (overlayOpen: boolean) => void;
|
|
25
|
+
toggle: () => void;
|
|
26
|
+
};
|
|
27
|
+
export interface PaneContainerProps extends ComponentProps<'div'>, GDSComponentProps<typeof PaneContainerMeta> {
|
|
28
|
+
}
|
|
29
|
+
export declare function PaneContainer({ ref: passedRef, orientation, className, style, children, ...props }: PaneContainerProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export declare namespace PaneContainer {
|
|
31
|
+
var displayName: string;
|
|
32
|
+
}
|
|
33
|
+
export interface PaneProps extends ComponentProps<'div'>, GDSComponentProps<typeof PaneMeta> {
|
|
34
|
+
/** @default 'div' */
|
|
35
|
+
as?: ElementType | undefined;
|
|
36
|
+
/** Unique name for this pane. */
|
|
37
|
+
name: string;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the pane is pseudo-modal in overlay mode. When `true`, the overlay shows a backdrop,
|
|
40
|
+
* receives focus when opened, and can be closed by pressing Escape or interacting with elements
|
|
41
|
+
* covered by the backdrop.
|
|
42
|
+
*
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
overlayModal?: boolean | undefined;
|
|
46
|
+
}
|
|
47
|
+
export declare function PaneRoot({ ref: passedRef, as: Element, name, layout, side, overlayModal, className, style, children, ...props }: PaneProps): import("react/jsx-runtime").JSX.Element;
|
|
48
|
+
export declare namespace PaneRoot {
|
|
49
|
+
var displayName: string;
|
|
50
|
+
}
|
|
51
|
+
type PaneToggleButtonState = {
|
|
52
|
+
open: boolean;
|
|
53
|
+
};
|
|
54
|
+
interface PaneToggleButtonBaseProps extends ComponentProps<'button'> {
|
|
55
|
+
/** Name of the pane to toggle. */
|
|
56
|
+
name: string;
|
|
57
|
+
}
|
|
58
|
+
interface PaneToggleButtonWithRenderProps extends PaneToggleButtonBaseProps {
|
|
59
|
+
/** Element or render function for the toggle button. */
|
|
60
|
+
render: RenderProp<PaneToggleButtonState>;
|
|
61
|
+
variant?: never;
|
|
62
|
+
size?: never;
|
|
63
|
+
hideLabel?: never;
|
|
64
|
+
tooltip?: never;
|
|
65
|
+
addonBefore?: never;
|
|
66
|
+
addonAfter?: never;
|
|
67
|
+
}
|
|
68
|
+
interface PaneToggleButtonWithoutRenderProps extends PaneToggleButtonBaseProps, Pick<ToggleButtonProps, 'variant' | 'size' | 'hideLabel' | 'tooltip' | 'addonBefore' | 'addonAfter'> {
|
|
69
|
+
render?: undefined;
|
|
70
|
+
}
|
|
71
|
+
export type PaneToggleButtonProps = PaneToggleButtonWithRenderProps | PaneToggleButtonWithoutRenderProps;
|
|
72
|
+
export declare function PaneToggleButton({ name, render, variant, size, hideLabel, tooltip, addonBefore, addonAfter, onClick, className, children, ...props }: PaneToggleButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
73
|
+
export declare namespace PaneToggleButton {
|
|
74
|
+
var displayName: string;
|
|
75
|
+
}
|
|
76
|
+
export {};
|
|
77
|
+
//# sourceMappingURL=Pane.parts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pane.parts.d.ts","sourceRoot":"","sources":["../../src/components/Pane.parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,412 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { createContext, Fragment, useCallback, useContext, useEffect, useId, useRef, useSyncExternalStore, } from 'react';
|
|
4
|
+
import { useMergedRefs } from '@base-ui/utils/useMergedRefs';
|
|
5
|
+
import { objectKeys } from 'ts-extras';
|
|
6
|
+
import { useCSSPropsPolyfill, useFirstRender, usePrevious, useStyle } from "../hooks/index.js";
|
|
7
|
+
import { cn, getCSSPropsAttributes } from "../utils/index.js";
|
|
8
|
+
import { Presence } from "./base/Presence.js";
|
|
9
|
+
import { Render } from "./base/Render.js";
|
|
10
|
+
import { PaneContainerMeta, PaneMeta } from "./Pane.meta.js";
|
|
11
|
+
import { ToggleButton } from "./ToggleButton.js";
|
|
12
|
+
const DEFAULT_DURATION = 200;
|
|
13
|
+
/** Parse a CSS duration string (e.g., "200ms", "0.2s") to milliseconds. */
|
|
14
|
+
function parseDuration(value) {
|
|
15
|
+
if (!value)
|
|
16
|
+
return null;
|
|
17
|
+
const match = value.trim().match(/^([\d.]+)(ms|s)?$/i);
|
|
18
|
+
if (!match)
|
|
19
|
+
return null;
|
|
20
|
+
const num = parseFloat(match[1]);
|
|
21
|
+
if (Number.isNaN(num))
|
|
22
|
+
return null;
|
|
23
|
+
const unit = match[2]?.toLowerCase();
|
|
24
|
+
return Math.round(unit === 's' ? num * 1000 : num);
|
|
25
|
+
}
|
|
26
|
+
function createPaneStore(storeId) {
|
|
27
|
+
const panes = new Map();
|
|
28
|
+
// Map of pane name -> registrant ID -> callbacks
|
|
29
|
+
const callbacksByRegistrant = new Map();
|
|
30
|
+
const listeners = new Set();
|
|
31
|
+
const notify = () => listeners.forEach((l) => l());
|
|
32
|
+
return {
|
|
33
|
+
subscribe: (listener) => {
|
|
34
|
+
listeners.add(listener);
|
|
35
|
+
return () => listeners.delete(listener);
|
|
36
|
+
},
|
|
37
|
+
get: (name) => panes.get(name),
|
|
38
|
+
register: (name, registrantId, initial, cached) => {
|
|
39
|
+
const existing = panes.get(name);
|
|
40
|
+
if (existing) {
|
|
41
|
+
existing.registrants.add(registrantId);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const registrants = new Set([registrantId]);
|
|
45
|
+
const id = `gds-pane-${storeId}-${name}`;
|
|
46
|
+
panes.set(name, cached
|
|
47
|
+
? { ...cached, registrants }
|
|
48
|
+
: { ...initial, id, layout: PaneMeta.cssProps.layout.defaultValue, registrants });
|
|
49
|
+
// Defer notification to avoid updating components during render
|
|
50
|
+
window.queueMicrotask(notify);
|
|
51
|
+
},
|
|
52
|
+
unregister: (name, registrantId) => {
|
|
53
|
+
const pane = panes.get(name);
|
|
54
|
+
if (!pane)
|
|
55
|
+
return;
|
|
56
|
+
pane.registrants.delete(registrantId);
|
|
57
|
+
// Remove this registrant's callbacks
|
|
58
|
+
callbacksByRegistrant.get(name)?.delete(registrantId);
|
|
59
|
+
if (pane.registrants.size === 0) {
|
|
60
|
+
panes.delete(name);
|
|
61
|
+
callbacksByRegistrant.delete(name);
|
|
62
|
+
}
|
|
63
|
+
// No notify - subscribers will re-register on remount if needed
|
|
64
|
+
},
|
|
65
|
+
setCallbacks: (name, registrantId, cbs) => {
|
|
66
|
+
let paneCallbacks = callbacksByRegistrant.get(name);
|
|
67
|
+
if (!paneCallbacks) {
|
|
68
|
+
paneCallbacks = new Map();
|
|
69
|
+
callbacksByRegistrant.set(name, paneCallbacks);
|
|
70
|
+
}
|
|
71
|
+
paneCallbacks.set(registrantId, cbs);
|
|
72
|
+
},
|
|
73
|
+
update: (name, updates) => {
|
|
74
|
+
const pane = panes.get(name);
|
|
75
|
+
if (!pane)
|
|
76
|
+
return;
|
|
77
|
+
const hasChanges = objectKeys(updates).some((key) => pane[key] !== updates[key]);
|
|
78
|
+
if (!hasChanges)
|
|
79
|
+
return;
|
|
80
|
+
const collapsedChanged = 'collapsed' in updates && updates.collapsed !== pane.collapsed;
|
|
81
|
+
const overlayOpenChanged = 'overlayOpen' in updates && updates.overlayOpen !== pane.overlayOpen;
|
|
82
|
+
panes.set(name, { ...pane, ...updates });
|
|
83
|
+
notify();
|
|
84
|
+
// Fire all registered callbacks for this pane
|
|
85
|
+
const paneCallbacks = callbacksByRegistrant.get(name);
|
|
86
|
+
if (paneCallbacks) {
|
|
87
|
+
paneCallbacks.forEach((cbs) => {
|
|
88
|
+
if (collapsedChanged)
|
|
89
|
+
cbs.onCollapsedChange?.(updates.collapsed);
|
|
90
|
+
if (overlayOpenChanged)
|
|
91
|
+
cbs.onOverlayOpenChange?.(updates.overlayOpen);
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const PaneProviderContext = createContext(null);
|
|
98
|
+
export function PaneProvider({ children }) {
|
|
99
|
+
const storeId = useId();
|
|
100
|
+
const storeRef = useRef(null);
|
|
101
|
+
if (!storeRef.current) {
|
|
102
|
+
storeRef.current = createPaneStore(storeId);
|
|
103
|
+
}
|
|
104
|
+
return (_jsx(PaneProviderContext.Provider, { value: storeRef.current, children: children }));
|
|
105
|
+
}
|
|
106
|
+
PaneProvider.displayName = 'Pane.Provider';
|
|
107
|
+
function usePaneInternal(name, options = {}) {
|
|
108
|
+
const { defaultCollapsed = false, defaultOverlayOpen = false, onCollapsedChange, onOverlayOpenChange, } = options;
|
|
109
|
+
const store = useContext(PaneProviderContext);
|
|
110
|
+
if (!store) {
|
|
111
|
+
throw new Error('[Pane] Must be used within GDSProvider or Pane.Provider');
|
|
112
|
+
}
|
|
113
|
+
const registrantId = useId();
|
|
114
|
+
// Cache pane data locally so we can restore it after React strict mode's simulated unmount
|
|
115
|
+
const cachedPaneRef = useRef(null);
|
|
116
|
+
// Register synchronously during render so sibling components have access on first render
|
|
117
|
+
store.register(name, registrantId, {
|
|
118
|
+
collapsed: defaultCollapsed,
|
|
119
|
+
overlayOpen: defaultOverlayOpen,
|
|
120
|
+
defaultCollapsed,
|
|
121
|
+
defaultOverlayOpen,
|
|
122
|
+
}, cachedPaneRef.current);
|
|
123
|
+
// Register callbacks with the store so they fire for any state change
|
|
124
|
+
store.setCallbacks(name, registrantId, { onCollapsedChange, onOverlayOpenChange });
|
|
125
|
+
// Unregister on unmount
|
|
126
|
+
useEffect(() => {
|
|
127
|
+
return () => {
|
|
128
|
+
// Save current state to cache before unregistering
|
|
129
|
+
cachedPaneRef.current = store.get(name) ?? null;
|
|
130
|
+
store.unregister(name, registrantId);
|
|
131
|
+
};
|
|
132
|
+
}, [store, name, registrantId]);
|
|
133
|
+
// Subscribe to pane state changes
|
|
134
|
+
const getSnapshot = useCallback(() => store.get(name), [store, name]);
|
|
135
|
+
const pane = useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot);
|
|
136
|
+
const setCollapsed = useCallback((collapsed) => store.update(name, { collapsed }), [store, name]);
|
|
137
|
+
const setOverlayOpen = useCallback((overlayOpen) => store.update(name, { overlayOpen }), [store, name]);
|
|
138
|
+
const toggle = useCallback(() => {
|
|
139
|
+
if (pane.layout === 'overlay') {
|
|
140
|
+
store.update(name, { overlayOpen: !pane.overlayOpen });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
store.update(name, { collapsed: !pane.collapsed });
|
|
144
|
+
}
|
|
145
|
+
}, [store, name, pane.layout, pane.overlayOpen, pane.collapsed]);
|
|
146
|
+
return { store, pane, setCollapsed, setOverlayOpen, toggle };
|
|
147
|
+
}
|
|
148
|
+
export function usePane(name, options = {}) {
|
|
149
|
+
const { pane, setCollapsed, setOverlayOpen, toggle } = usePaneInternal(name, options);
|
|
150
|
+
return {
|
|
151
|
+
layout: pane.layout,
|
|
152
|
+
collapsed: pane.collapsed,
|
|
153
|
+
overlayOpen: pane.overlayOpen,
|
|
154
|
+
setCollapsed,
|
|
155
|
+
setOverlayOpen,
|
|
156
|
+
toggle,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
export function PaneContainer({ ref: passedRef, orientation, className, style, children, ...props }) {
|
|
160
|
+
const [cssPropsPolyfillPassedRef, cssPropsPolyfillAttributes] = useCSSPropsPolyfill(PaneContainerMeta, { orientation }, { ref: passedRef });
|
|
161
|
+
return (_jsx("div", { ref: cssPropsPolyfillPassedRef, className: cn('gds-pane-container flex u:overflow-clip', className), ...getCSSPropsAttributes(PaneContainerMeta, { orientation }, style), ...cssPropsPolyfillAttributes, ...props, children: _jsx("div", { className: `
|
|
162
|
+
flex grow
|
|
163
|
+
@prop-orientation-horizontal/pane-container:flex-row
|
|
164
|
+
@prop-orientation-vertical/pane-container:flex-col
|
|
165
|
+
u:*:isolate
|
|
166
|
+
u:@prop-orientation-horizontal/pane-container:*:not-pane:w-0
|
|
167
|
+
u:@prop-orientation-horizontal/pane-container:*:not-pane:grow
|
|
168
|
+
u:@prop-orientation-horizontal/pane-container:*:pane:w-[clamp(--spacing(48),25%,--spacing(80))]
|
|
169
|
+
`, children: children }) }));
|
|
170
|
+
}
|
|
171
|
+
PaneContainer.displayName = 'Pane.Container';
|
|
172
|
+
export function PaneRoot({ ref: passedRef, as: Element = 'div', name, layout, side, overlayModal = true, className, style, children, ...props }) {
|
|
173
|
+
const { store, pane } = usePaneInternal(name);
|
|
174
|
+
const rootRef = useRef(null);
|
|
175
|
+
// Observe `--tw-duration` to allow customizing the transition duration via CSS
|
|
176
|
+
const [styleCallbackRef, styleValues] = useStyle(['--tw-duration']);
|
|
177
|
+
const duration = parseDuration(styleValues['--tw-duration']) ?? DEFAULT_DURATION;
|
|
178
|
+
const rootPassedRef = useMergedRefs(rootRef, passedRef, styleCallbackRef);
|
|
179
|
+
const [cssPropsPolyfillRootPassedRef, cssPropsPolyfillAttributes, cssProps] = useCSSPropsPolyfill(PaneMeta, { layout, side }, { ref: rootPassedRef, returnPropValues: { layout, side } });
|
|
180
|
+
// Sync layout to store, resetting `overlayOpen` when switching from overlay to docked
|
|
181
|
+
const previousLayoutRef = useRef(cssProps.layout);
|
|
182
|
+
useEffect(() => {
|
|
183
|
+
const previousLayout = previousLayoutRef.current;
|
|
184
|
+
previousLayoutRef.current = cssProps.layout;
|
|
185
|
+
if (previousLayout === 'overlay' && cssProps.layout === 'docked') {
|
|
186
|
+
store.update(name, { layout: cssProps.layout, overlayOpen: pane.defaultOverlayOpen });
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
store.update(name, { layout: cssProps.layout });
|
|
190
|
+
}
|
|
191
|
+
}, [store, name, cssProps.layout, pane.defaultOverlayOpen]);
|
|
192
|
+
// Pseudo-modal overlay: focus pane on open, Escape to close, restore focus on close
|
|
193
|
+
const focusLeftPaneRef = useRef(false);
|
|
194
|
+
const previouslyFocusedRef = useRef(null);
|
|
195
|
+
useEffect(() => {
|
|
196
|
+
if (!overlayModal || cssProps.layout !== 'overlay' || !pane.overlayOpen)
|
|
197
|
+
return;
|
|
198
|
+
focusLeftPaneRef.current = false;
|
|
199
|
+
// Save the currently focused element and focus the pane content
|
|
200
|
+
setTimeout(() => {
|
|
201
|
+
previouslyFocusedRef.current = document.activeElement;
|
|
202
|
+
rootRef.current
|
|
203
|
+
?.querySelector('[data-key="content"]')
|
|
204
|
+
?.focus({ preventScroll: true });
|
|
205
|
+
}, 0);
|
|
206
|
+
// Close overlay when focus moves to an element covered by the backdrop (i.e. inside the container, but outside the pane)
|
|
207
|
+
const handlePaneFocusOut = (event) => {
|
|
208
|
+
const newTarget = event.relatedTarget;
|
|
209
|
+
// Focus intentionally left if it went somewhere other than body (which is where `inert` sends it)
|
|
210
|
+
if (newTarget && newTarget !== document.body && !rootRef.current?.contains(newTarget)) {
|
|
211
|
+
focusLeftPaneRef.current = true;
|
|
212
|
+
if (parent?.contains(newTarget)) {
|
|
213
|
+
store.update(name, { overlayOpen: false });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
};
|
|
217
|
+
const handlePaneFocusIn = () => {
|
|
218
|
+
focusLeftPaneRef.current = false;
|
|
219
|
+
};
|
|
220
|
+
// Also listen on parent to catch focus entering the backdrop area from outside
|
|
221
|
+
const handleParentFocusIn = (event) => {
|
|
222
|
+
if (!rootRef.current?.contains(event.target)) {
|
|
223
|
+
focusLeftPaneRef.current = true;
|
|
224
|
+
store.update(name, { overlayOpen: false });
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
const root = rootRef.current;
|
|
228
|
+
const parent = root?.parentElement;
|
|
229
|
+
root?.addEventListener('focusout', handlePaneFocusOut);
|
|
230
|
+
root?.addEventListener('focusin', handlePaneFocusIn);
|
|
231
|
+
parent?.addEventListener('focusin', handleParentFocusIn);
|
|
232
|
+
// Close on Escape when focus is inside the pane
|
|
233
|
+
const handleKeyDown = (event) => {
|
|
234
|
+
if (event.key === 'Escape' && rootRef.current?.contains(document.activeElement)) {
|
|
235
|
+
store.update(name, { overlayOpen: false });
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
239
|
+
// Cleanup: remove handlers and restore focus unless it intentionally left the pane
|
|
240
|
+
return () => {
|
|
241
|
+
root?.removeEventListener('focusout', handlePaneFocusOut);
|
|
242
|
+
root?.removeEventListener('focusin', handlePaneFocusIn);
|
|
243
|
+
parent?.removeEventListener('focusin', handleParentFocusIn);
|
|
244
|
+
document.removeEventListener('keydown', handleKeyDown);
|
|
245
|
+
if (!focusLeftPaneRef.current && previouslyFocusedRef.current instanceof HTMLElement) {
|
|
246
|
+
previouslyFocusedRef.current.focus();
|
|
247
|
+
}
|
|
248
|
+
previouslyFocusedRef.current = null;
|
|
249
|
+
};
|
|
250
|
+
}, [store, name, overlayModal, cssProps.layout, pane.overlayOpen]);
|
|
251
|
+
const open = cssProps.layout === 'overlay' ? pane.overlayOpen : !pane.collapsed;
|
|
252
|
+
const presenceKeys = ['content', 'placeholder'];
|
|
253
|
+
let visibleKey = open ? 'content' : 'placeholder';
|
|
254
|
+
const beforeFirstTransition = useRef(true);
|
|
255
|
+
const skipTransition = useRef(false);
|
|
256
|
+
// Always show the content on the first render, and skip the transition if it's hidden on the next render
|
|
257
|
+
const firstRender = useFirstRender();
|
|
258
|
+
if (firstRender && visibleKey === 'placeholder') {
|
|
259
|
+
visibleKey = 'content';
|
|
260
|
+
skipTransition.current = true;
|
|
261
|
+
}
|
|
262
|
+
// Do not transition if the open state changed due to a layout change
|
|
263
|
+
const previousVisibleKey = usePrevious(visibleKey);
|
|
264
|
+
const previousLayout = usePrevious(cssProps.layout);
|
|
265
|
+
if (previousVisibleKey.hasChanged && previousLayout.hasChanged) {
|
|
266
|
+
skipTransition.current = true;
|
|
267
|
+
}
|
|
268
|
+
const setSize = (size) => {
|
|
269
|
+
if (!rootRef.current)
|
|
270
|
+
return;
|
|
271
|
+
if (size === null) {
|
|
272
|
+
rootRef.current.style.removeProperty('--pane-size');
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
rootRef.current.style.setProperty('--pane-size', `${size}px`);
|
|
276
|
+
}
|
|
277
|
+
};
|
|
278
|
+
return (_jsxs(Element, { ref: cssPropsPolyfillRootPassedRef, id: pane.id, "data-gds-exposed-open": open, className: cn(`gds-pane root-contents u:z-10 u:max-w-full u:[--tw-duration:200ms]
|
|
279
|
+
u:default-side-start
|
|
280
|
+
u:last:default-side-end
|
|
281
|
+
u:@prop-orientation-vertical/pane-container:default-side-top
|
|
282
|
+
u:@prop-orientation-vertical/pane-container:last:default-side-bottom`, className), ...getCSSPropsAttributes(PaneMeta, { layout, side }, style), ...cssPropsPolyfillAttributes, ...props, children: [overlayModal ? (_jsx("div", { "aria-hidden": true, "data-open": pane.overlayOpen || undefined, onClick: () => store.update(name, { overlayOpen: false }), className: `
|
|
283
|
+
absolute inset-0 z-[inherit] bg-backdrop transition [--tw-duration:inherit]
|
|
284
|
+
not-data-open:pointer-events-none
|
|
285
|
+
not-data-open:opacity-0
|
|
286
|
+
@prop-layout-docked/pane:hidden
|
|
287
|
+
` })) : null, _jsx(Presence, { visibleKey: visibleKey, enterMs: skipTransition.current ? 0 : duration, exitMs: skipTransition.current ? 0 : duration, onBeforeTransitionStart: ({ exiting, previouslyTransitioning }) => {
|
|
288
|
+
beforeFirstTransition.current = false;
|
|
289
|
+
if (skipTransition.current ||
|
|
290
|
+
cssProps.layout === 'overlay' ||
|
|
291
|
+
previouslyTransitioning.size > 0) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
const exitingContent = exiting.get('content');
|
|
295
|
+
if (!exitingContent)
|
|
296
|
+
return;
|
|
297
|
+
setSize(cssProps.side === 'start' || cssProps.side === 'end'
|
|
298
|
+
? exitingContent.offsetWidth
|
|
299
|
+
: exitingContent.offsetHeight);
|
|
300
|
+
}, onTransitionStart: ({ entering, previouslyTransitioning }) => {
|
|
301
|
+
if (skipTransition.current ||
|
|
302
|
+
cssProps.layout === 'overlay' ||
|
|
303
|
+
previouslyTransitioning.size > 0) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
const enteringContent = entering.get('content');
|
|
307
|
+
if (!enteringContent)
|
|
308
|
+
return;
|
|
309
|
+
enteringContent.style.setProperty('width', 'inherit');
|
|
310
|
+
enteringContent.style.setProperty('height', 'inherit');
|
|
311
|
+
enteringContent.style.setProperty('position', 'relative');
|
|
312
|
+
setSize(cssProps.side === 'start' || cssProps.side === 'end'
|
|
313
|
+
? enteringContent.offsetWidth
|
|
314
|
+
: enteringContent.offsetHeight);
|
|
315
|
+
enteringContent.style.removeProperty('width');
|
|
316
|
+
enteringContent.style.removeProperty('height');
|
|
317
|
+
enteringContent.style.removeProperty('position');
|
|
318
|
+
}, onTransitionEnd: () => {
|
|
319
|
+
skipTransition.current = false;
|
|
320
|
+
}, renderChild: (renderProps, state) => {
|
|
321
|
+
const hiddenStyle = state.status === 'exiting' ||
|
|
322
|
+
state.status === 'hidden' ||
|
|
323
|
+
(state.status === 'entering' && state.previousStatus !== null);
|
|
324
|
+
switch (state.key) {
|
|
325
|
+
case 'content': {
|
|
326
|
+
return (_jsx("div", { ...renderProps, tabIndex: overlayModal && cssProps.layout === 'overlay' ? -1 : undefined, "data-entering-or-exiting": state.status === 'entering' || state.status === 'exiting' || undefined, "data-hidden-style": hiddenStyle || undefined, "data-hidden-if-overlay": (beforeFirstTransition.current && !pane.overlayOpen) || undefined, "data-layout": cssProps.layout, "data-side": cssProps.side, className: cn(renderProps.className, `inherit-position inherit-layout inherit-paint transition-transform [--tw-duration:inherit]
|
|
327
|
+
@prop-side-top/pane:inset-x-0
|
|
328
|
+
@prop-side-top/pane:top-0
|
|
329
|
+
@prop-side-top/pane:data-hidden-style:-translate-y-full
|
|
330
|
+
@prop-side-bottom/pane:inset-x-0
|
|
331
|
+
@prop-side-bottom/pane:bottom-0
|
|
332
|
+
@prop-side-bottom/pane:data-hidden-style:translate-y-full
|
|
333
|
+
@prop-side-start/pane:inset-y-0
|
|
334
|
+
@prop-side-start/pane:start-0
|
|
335
|
+
@prop-side-start/pane:data-hidden-style:translate-x-[calc(-100%*var(--gds-rtl-factor))]
|
|
336
|
+
@prop-side-end/pane:inset-y-0
|
|
337
|
+
@prop-side-end/pane:end-0
|
|
338
|
+
@prop-side-end/pane:data-hidden-style:translate-x-[calc(100%*var(--gds-rtl-factor))]
|
|
339
|
+
@prop-layout-docked/pane:data-entering-or-exiting:absolute
|
|
340
|
+
@prop-layout-docked/pane:data-entering-or-exiting:@prop-side-top/pane:h-(--pane-size)
|
|
341
|
+
@prop-layout-docked/pane:data-entering-or-exiting:@prop-side-bottom/pane:h-(--pane-size)
|
|
342
|
+
@prop-layout-docked/pane:data-entering-or-exiting:@prop-side-start/pane:w-(--pane-size)
|
|
343
|
+
@prop-layout-docked/pane:data-entering-or-exiting:@prop-side-end/pane:w-(--pane-size)
|
|
344
|
+
@prop-layout-overlay/pane:absolute
|
|
345
|
+
@prop-layout-overlay/pane:data-hidden-if-overlay:invisible`,
|
|
346
|
+
/**
|
|
347
|
+
* Same as the above but with the `@prop` variants replaced with `data-*` (which
|
|
348
|
+
* isn't as good because the first render might be incorrect) to work around a
|
|
349
|
+
* Safari issue where style queries are buggy inside `display: contents` (see
|
|
350
|
+
* https://bugs.webkit.org/show_bug.cgi?id=301871).
|
|
351
|
+
*/
|
|
352
|
+
`safari:data-[layout=docked]:data-entering-or-exiting:absolute
|
|
353
|
+
safari:data-[layout=overlay]:absolute
|
|
354
|
+
safari:data-[layout=overlay]:data-hidden-if-overlay:invisible
|
|
355
|
+
safari:data-[side=bottom]:inset-x-0
|
|
356
|
+
safari:data-[side=bottom]:bottom-0
|
|
357
|
+
safari:data-[side=bottom]:data-hidden-style:translate-y-full
|
|
358
|
+
safari:data-[layout=docked]:data-entering-or-exiting:data-[side=bottom]:h-(--pane-size)
|
|
359
|
+
safari:data-[side=end]:inset-y-0
|
|
360
|
+
safari:data-[side=end]:end-0
|
|
361
|
+
safari:data-[side=end]:data-hidden-style:translate-x-[calc(100%*var(--gds-rtl-factor))]
|
|
362
|
+
safari:data-[layout=docked]:data-entering-or-exiting:data-[side=end]:w-(--pane-size)
|
|
363
|
+
safari:data-[side=start]:inset-y-0
|
|
364
|
+
safari:data-[side=start]:start-0
|
|
365
|
+
safari:data-[side=start]:data-hidden-style:translate-x-[calc(-100%*var(--gds-rtl-factor))]
|
|
366
|
+
safari:data-[layout=docked]:data-entering-or-exiting:data-[side=start]:w-(--pane-size)
|
|
367
|
+
safari:data-[side=top]:inset-x-0
|
|
368
|
+
safari:data-[side=top]:top-0
|
|
369
|
+
safari:data-[side=top]:data-hidden-style:-translate-y-full
|
|
370
|
+
safari:data-[layout=docked]:data-entering-or-exiting:data-[side=top]:h-(--pane-size)`), children: children }));
|
|
371
|
+
}
|
|
372
|
+
case 'placeholder': {
|
|
373
|
+
return (_jsx("div", { ...renderProps, hidden: undefined, "data-hidden": renderProps.hidden || undefined, "data-layout": cssProps.layout, "data-side": cssProps.side, className: cn(renderProps.className, `inherit-position shrink-0 transition-[width,height] [--size:0px] [--tw-duration:inherit]
|
|
374
|
+
data-hidden:hidden
|
|
375
|
+
data-[status=entering]:data-starting-style:[--size:var(--pane-size)]
|
|
376
|
+
data-[status=exiting]:[--size:var(--pane-size)]
|
|
377
|
+
data-[status=exiting]:data-starting-style:[--size:0px]
|
|
378
|
+
@prop-side-top/pane:h-(--size)
|
|
379
|
+
@prop-side-bottom/pane:h-(--size)
|
|
380
|
+
@prop-side-start/pane:w-(--size)
|
|
381
|
+
@prop-side-end/pane:w-(--size)`,
|
|
382
|
+
/**
|
|
383
|
+
* Since the content is always absolutely-positioned in overlay mode, we render
|
|
384
|
+
* the placeholder in flow (even when it's supposed to be hidden) for the amount
|
|
385
|
+
* of in-flow elements to remain stable across `layout` or `overlayOpen` changes
|
|
386
|
+
* (e.g. so that sibling elements don't suddenly get auto-placed in a different
|
|
387
|
+
* grid cell if the pane is in a grid).
|
|
388
|
+
*/
|
|
389
|
+
`i:@prop-layout-overlay/pane:block
|
|
390
|
+
i:@prop-layout-overlay/pane:size-0`,
|
|
391
|
+
// Workaround for the Safari bug mentioned above
|
|
392
|
+
`safari:data-[side=bottom]:h-(--size)
|
|
393
|
+
safari:data-[side=end]:w-(--size)
|
|
394
|
+
safari:data-[side=start]:w-(--size)
|
|
395
|
+
safari:data-[side=top]:h-(--size)
|
|
396
|
+
i:safari:data-[layout=overlay]:block
|
|
397
|
+
i:safari:data-[layout=overlay]:size-0`) }));
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
}, children: presenceKeys.map((key) => (_jsx(Fragment, {}, key))) })] }));
|
|
401
|
+
}
|
|
402
|
+
PaneRoot.displayName = 'Pane';
|
|
403
|
+
export function PaneToggleButton({ name, render, variant, size, hideLabel, tooltip, addonBefore, addonAfter, onClick, className, children, ...props }) {
|
|
404
|
+
const { pane, toggle } = usePaneInternal(name);
|
|
405
|
+
const open = pane.layout === 'overlay' ? pane.overlayOpen : !pane.collapsed;
|
|
406
|
+
return (_jsx(Render, { render: render ?? (_jsx(ToggleButton, { "aria-pressed": undefined, variant: variant, size: size, hideLabel: hideLabel, addonBefore: addonBefore, addonAfter: addonAfter, tooltip: tooltip, className: cn('u:open:state-checked', className) })), state: { open }, type: "button", "aria-expanded": open, "aria-controls": pane.id, onClick: (event) => {
|
|
407
|
+
toggle();
|
|
408
|
+
onClick?.(event);
|
|
409
|
+
}, className: render ? className : undefined, ...props, children: children }));
|
|
410
|
+
}
|
|
411
|
+
PaneToggleButton.displayName = 'Pane.ToggleButton';
|
|
412
|
+
//# sourceMappingURL=Pane.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Pane.parts.js","sourceRoot":"","sources":["../../src/components/Pane.parts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -51,7 +51,7 @@ export function Search({ ref: passedRef, size, layout, placeholder = 'Search...'
|
|
|
51
51
|
document.addEventListener('keydown', handleKeyDown);
|
|
52
52
|
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
53
53
|
}, [focusKey]);
|
|
54
|
-
return (_jsx("div", { ref: cssPropsPolyfillStateRef, "data-size": cssProps.size, "data-layout": cssProps.layout, className: cn(`gds-search root-flex flex-col u:max-w-full
|
|
54
|
+
return (_jsx("div", { ref: cssPropsPolyfillStateRef, "data-size": cssProps.size, "data-layout": cssProps.layout, className: cn(`gds-search root-flex flex-col u:h-max u:max-w-full
|
|
55
55
|
u:hover:state-hover
|
|
56
56
|
u:active:state-active
|
|
57
57
|
u:data-[layout=compact]:data-[size=medium]:min-w-10
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type ComponentProps, type ReactElement, type ReactNode } from 'react';
|
|
2
|
+
import { type TooltipRoot as BaseUITooltipRoot } from '@base-ui/react/tooltip';
|
|
2
3
|
import { type GDSComponentProps } from '@graphprotocol/gds-css';
|
|
3
4
|
import { type RenderProp } from './base/Render.tsx';
|
|
4
5
|
import { TooltipMeta } from './Tooltip.meta.ts';
|
|
5
6
|
type Content = Exclude<ReactNode, undefined>;
|
|
6
7
|
type SetDeferredContentFunction = (content: Content, priority?: number) => void;
|
|
8
|
+
type OpenChangeReason = BaseUITooltipRoot.ChangeEventDetails['reason'];
|
|
7
9
|
export interface TooltipProps extends Omit<ComponentProps<'div'>, 'content'>, GDSComponentProps<typeof TooltipMeta> {
|
|
8
10
|
/**
|
|
9
11
|
* The content to display in the tooltip. If not provided, defaults to any content collected from
|
|
@@ -13,14 +15,21 @@ export interface TooltipProps extends Omit<ComponentProps<'div'>, 'content'>, GD
|
|
|
13
15
|
/** Force the tooltip to be open or closed. */
|
|
14
16
|
open?: boolean | undefined;
|
|
15
17
|
/** Called when the tooltip is opened or closed. */
|
|
16
|
-
onOpenChange?: ((open: boolean) => void) | undefined;
|
|
18
|
+
onOpenChange?: ((open: boolean, reason: OpenChangeReason) => void) | undefined;
|
|
17
19
|
/** The element that triggers the tooltip. */
|
|
18
20
|
children: ReactElement;
|
|
21
|
+
/**
|
|
22
|
+
* Props to merge with the trigger element. Set to `'forward'` to have the trigger automatically
|
|
23
|
+
* receive applicable props passed to the `Tooltip` itself (excluding tooltip-specific props like
|
|
24
|
+
* `content`, `side` and other positioning props, `open`, `disabled`, etc.).
|
|
25
|
+
*/
|
|
26
|
+
triggerProps?: ComponentProps<'button'> | 'forward' | undefined;
|
|
19
27
|
}
|
|
20
|
-
export declare function TooltipRoot({ ref: passedRef, content: passedContent, side, gap, align, alignOffset, open: controlledOpen, onOpenChange, disabled, overrideDescendants, className, style, children, ...
|
|
28
|
+
export declare function TooltipRoot({ ref: passedRef, content: passedContent, side, gap, align, alignOffset, open: controlledOpen, onOpenChange, disabled, overrideDescendants, className, style, children, triggerProps: passedTriggerProps, ...passedProps }: TooltipProps): import("react/jsx-runtime").JSX.Element;
|
|
21
29
|
export interface TooltipContentProps {
|
|
22
|
-
render?: RenderProp | undefined;
|
|
23
30
|
children: ReactNode;
|
|
31
|
+
priority?: number | undefined;
|
|
32
|
+
render?: RenderProp | undefined;
|
|
24
33
|
}
|
|
25
34
|
/**
|
|
26
35
|
* Wrap any text or `ReactNode` with this component to use it as the default `content` of the
|
|
@@ -31,7 +40,7 @@ export interface TooltipContentProps {
|
|
|
31
40
|
* where the information it provides is not otherwise available to screen readers (i.e. different
|
|
32
41
|
* from the trigger's accessible name).
|
|
33
42
|
*/
|
|
34
|
-
export declare function TooltipContent({
|
|
43
|
+
export declare function TooltipContent({ children, priority, render }: TooltipContentProps): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
35
44
|
export declare namespace TooltipContent {
|
|
36
45
|
var displayName: string;
|
|
37
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.parts.d.ts","sourceRoot":"","sources":["../../src/components/Tooltip.parts.tsx"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"Tooltip.parts.d.ts","sourceRoot":"","sources":["../../src/components/Tooltip.parts.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,OAAO,CAAA;AACd,OAAO,EAAW,KAAK,WAAW,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAIvF,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAKvE,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C,KAAK,OAAO,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;AAC5C,KAAK,0BAA0B,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAC/E,KAAK,gBAAgB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAA;AAStE,MAAM,WAAW,YACf,SAAQ,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,EAAE,iBAAiB,CAAC,OAAO,WAAW,CAAC;IACrF;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,8CAA8C;IAC9C,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,mDAAmD;IACnD,YAAY,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9E,6CAA6C;IAC7C,QAAQ,EAAE,YAAY,CAAA;IACtB;;;;OAIG;IACH,YAAY,CAAC,EAAE,cAAc,CAAC,QAAQ,CAAC,GAAG,SAAS,GAAG,SAAS,CAAA;CAChE;AAED,wBAAgB,WAAW,CAAC,EAC1B,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,aAAa,EACtB,IAAI,EACJ,GAAG,EACH,KAAK,EACL,WAAW,EACX,IAAI,EAAE,cAAc,EACpB,YAAY,EACZ,QAAQ,EACR,mBAAmB,EACnB,SAAS,EACT,KAAK,EACL,QAAQ,EACR,YAAY,EAAE,kBAAkB,EAChC,GAAG,WAAW,EACf,EAAE,YAAY,2CAgMd;AAqCD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,SAAS,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;CAChC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,mBAAmB,2TAMjF;yBANe,cAAc;;;AAW9B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE,qBAAqB,2CAQnE;yBARe,gBAAgB;;;AAWhC,qEAAqE;AACrE,wBAAgB,mBAAmB,sCAElC"}
|