@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.
Files changed (129) hide show
  1. package/dist/GDSContext.d.ts +13 -0
  2. package/dist/GDSContext.d.ts.map +1 -0
  3. package/dist/GDSContext.js +4 -0
  4. package/dist/GDSContext.js.map +1 -0
  5. package/dist/GDSProvider.d.ts +1 -9
  6. package/dist/GDSProvider.d.ts.map +1 -1
  7. package/dist/GDSProvider.js +4 -3
  8. package/dist/GDSProvider.js.map +1 -1
  9. package/dist/components/Avatar.d.ts.map +1 -1
  10. package/dist/components/Avatar.js +2 -2
  11. package/dist/components/Avatar.js.map +1 -1
  12. package/dist/components/Breadcrumbs.parts.js +1 -1
  13. package/dist/components/Breadcrumbs.parts.js.map +1 -1
  14. package/dist/components/Button.d.ts.map +1 -1
  15. package/dist/components/Button.js +69 -69
  16. package/dist/components/Button.js.map +1 -1
  17. package/dist/components/Card.js +2 -2
  18. package/dist/components/Card.js.map +1 -1
  19. package/dist/components/CodeBlock.d.ts +1 -1
  20. package/dist/components/CodeBlock.parts.d.ts +1 -1
  21. package/dist/components/CopyButton.d.ts +1 -1
  22. package/dist/components/CopyButton.d.ts.map +1 -1
  23. package/dist/components/CopyButton.js +46 -19
  24. package/dist/components/CopyButton.js.map +1 -1
  25. package/dist/components/Input.js +2 -2
  26. package/dist/components/Input.js.map +1 -1
  27. package/dist/components/Link.js +2 -2
  28. package/dist/components/Link.js.map +1 -1
  29. package/dist/components/Menu.parts.d.ts +4 -5
  30. package/dist/components/Menu.parts.d.ts.map +1 -1
  31. package/dist/components/Menu.parts.js +52 -45
  32. package/dist/components/Menu.parts.js.map +1 -1
  33. package/dist/components/Modal.parts.d.ts.map +1 -1
  34. package/dist/components/Modal.parts.js +17 -21
  35. package/dist/components/Modal.parts.js.map +1 -1
  36. package/dist/components/Pane.d.ts +9 -0
  37. package/dist/components/Pane.d.ts.map +1 -0
  38. package/dist/components/Pane.js +8 -0
  39. package/dist/components/Pane.js.map +1 -0
  40. package/dist/components/Pane.meta.d.ts +20 -0
  41. package/dist/components/Pane.meta.d.ts.map +1 -0
  42. package/dist/components/Pane.meta.js +30 -0
  43. package/dist/components/Pane.meta.js.map +1 -0
  44. package/dist/components/Pane.parts.d.ts +77 -0
  45. package/dist/components/Pane.parts.d.ts.map +1 -0
  46. package/dist/components/Pane.parts.js +412 -0
  47. package/dist/components/Pane.parts.js.map +1 -0
  48. package/dist/components/Search.js +1 -1
  49. package/dist/components/Tooltip.parts.d.ts +13 -4
  50. package/dist/components/Tooltip.parts.d.ts.map +1 -1
  51. package/dist/components/Tooltip.parts.js +51 -63
  52. package/dist/components/Tooltip.parts.js.map +1 -1
  53. package/dist/components/base/ButtonOrLink.d.ts +1 -1
  54. package/dist/components/base/ButtonOrLink.d.ts.map +1 -1
  55. package/dist/components/base/ButtonOrLink.parts.d.ts +10 -3
  56. package/dist/components/base/ButtonOrLink.parts.d.ts.map +1 -1
  57. package/dist/components/base/ButtonOrLink.parts.js +27 -35
  58. package/dist/components/base/ButtonOrLink.parts.js.map +1 -1
  59. package/dist/components/base/MaybeButtonOrLink.d.ts +19 -2
  60. package/dist/components/base/MaybeButtonOrLink.d.ts.map +1 -1
  61. package/dist/components/base/MaybeButtonOrLink.js +5 -3
  62. package/dist/components/base/MaybeButtonOrLink.js.map +1 -1
  63. package/dist/components/base/Presence.d.ts +157 -0
  64. package/dist/components/base/Presence.d.ts.map +1 -0
  65. package/dist/components/base/Presence.js +808 -0
  66. package/dist/components/base/Presence.js.map +1 -0
  67. package/dist/components/base/index.d.ts +1 -0
  68. package/dist/components/base/index.d.ts.map +1 -1
  69. package/dist/components/base/index.js +1 -0
  70. package/dist/components/base/index.js.map +1 -1
  71. package/dist/components/index.d.ts +2 -0
  72. package/dist/components/index.d.ts.map +1 -1
  73. package/dist/components/index.js +2 -0
  74. package/dist/components/index.js.map +1 -1
  75. package/dist/hooks/useCSSProp.js +1 -1
  76. package/dist/hooks/useCSSProp.js.map +1 -1
  77. package/dist/hooks/useControlled.d.ts.map +1 -1
  78. package/dist/hooks/useControlled.js +6 -4
  79. package/dist/hooks/useControlled.js.map +1 -1
  80. package/dist/hooks/useGDS.js +1 -1
  81. package/dist/hooks/useGDS.js.map +1 -1
  82. package/dist/hooks/useStyleObserver.js +1 -1
  83. package/dist/hooks/useStyleObserver.js.map +1 -1
  84. package/dist/tailwind-plugin.d.ts.map +1 -1
  85. package/dist/tailwind-plugin.js +3 -0
  86. package/dist/tailwind-plugin.js.map +1 -1
  87. package/dist/utils/InlineCounter.d.ts +3 -0
  88. package/dist/utils/InlineCounter.d.ts.map +1 -0
  89. package/dist/utils/InlineCounter.js +7 -0
  90. package/dist/utils/InlineCounter.js.map +1 -0
  91. package/dist/utils/RenderCount.d.ts +3 -0
  92. package/dist/utils/RenderCount.d.ts.map +1 -0
  93. package/dist/utils/RenderCount.js +7 -0
  94. package/dist/utils/RenderCount.js.map +1 -0
  95. package/dist/utils/index.d.ts +2 -0
  96. package/dist/utils/index.d.ts.map +1 -1
  97. package/dist/utils/index.js +2 -0
  98. package/dist/utils/index.js.map +1 -1
  99. package/package.json +14 -14
  100. package/src/GDSContext.ts +16 -0
  101. package/src/GDSProvider.tsx +20 -31
  102. package/src/components/Avatar.tsx +3 -2
  103. package/src/components/Breadcrumbs.parts.tsx +1 -1
  104. package/src/components/Button.tsx +113 -107
  105. package/src/components/Card.tsx +2 -2
  106. package/src/components/CopyButton.tsx +49 -25
  107. package/src/components/Input.tsx +1 -1
  108. package/src/components/Link.tsx +2 -2
  109. package/src/components/Menu.parts.tsx +78 -73
  110. package/src/components/Modal.parts.tsx +26 -31
  111. package/src/components/Pane.meta.ts +31 -0
  112. package/src/components/Pane.parts.tsx +713 -0
  113. package/src/components/Pane.tsx +17 -0
  114. package/src/components/Search.tsx +1 -1
  115. package/src/components/Tooltip.parts.tsx +95 -80
  116. package/src/components/base/ButtonOrLink.parts.tsx +71 -51
  117. package/src/components/base/ButtonOrLink.tsx +1 -0
  118. package/src/components/base/MaybeButtonOrLink.tsx +26 -5
  119. package/src/components/base/Presence.tsx +1375 -0
  120. package/src/components/base/index.ts +1 -0
  121. package/src/components/index.ts +10 -0
  122. package/src/hooks/useCSSProp.ts +1 -1
  123. package/src/hooks/useControlled.ts +16 -8
  124. package/src/hooks/useGDS.ts +1 -1
  125. package/src/hooks/useStyleObserver.ts +1 -1
  126. package/src/tailwind-plugin.ts +3 -0
  127. package/src/utils/InlineCounter.tsx +17 -0
  128. package/src/utils/RenderCount.tsx +7 -0
  129. 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, ...props }: TooltipProps): import("react/jsx-runtime").JSX.Element;
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({ render, children }: 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;
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,EAML,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,SAAS,EACf,MAAM,OAAO,CAAA;AAId,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;AAW/E,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,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IACpD,6CAA6C;IAC7C,QAAQ,EAAE,YAAY,CAAA;CACvB;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,GAAG,KAAK,EACT,EAAE,YAAY,2CA2Ld;AAqCD,MAAM,WAAW,mBAAmB;IAClC,MAAM,CAAC,EAAE,UAAU,GAAG,SAAS,CAAA;IAC/B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,mBAAmB,2TAMvE;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"}
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"}