gridsmith-ui 0.31.0 → 0.31.1
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/CHANGELOG.md +19 -1
- package/dist/charts.js +8 -8
- package/dist/chat.js +6 -6
- package/dist/{chunk-YFHTREH5.js → chunk-2TCCSKL3.js} +5 -5
- package/dist/{chunk-YFHTREH5.js.map → chunk-2TCCSKL3.js.map} +1 -1
- package/dist/{chunk-U7WBI4AV.js → chunk-BHTAVJIG.js} +5 -5
- package/dist/{chunk-U7WBI4AV.js.map → chunk-BHTAVJIG.js.map} +1 -1
- package/dist/{chunk-XSQD3UGY.js → chunk-DR6WEI3A.js} +17 -4
- package/dist/chunk-DR6WEI3A.js.map +1 -0
- package/dist/{chunk-OWQ7M6R7.js → chunk-EZ3ZGFGA.js} +132 -23
- package/dist/chunk-EZ3ZGFGA.js.map +1 -0
- package/dist/{chunk-2Q4HOGEI.js → chunk-HQFTP7Y5.js} +15 -5
- package/dist/chunk-HQFTP7Y5.js.map +1 -0
- package/dist/{chunk-3J67NISC.js → chunk-I6JJ7KKP.js} +8 -8
- package/dist/{chunk-3J67NISC.js.map → chunk-I6JJ7KKP.js.map} +1 -1
- package/dist/{chunk-V2ARGHJN.js → chunk-IOHGE4EW.js} +7 -7
- package/dist/{chunk-V2ARGHJN.js.map → chunk-IOHGE4EW.js.map} +1 -1
- package/dist/{chunk-BKYWKMUN.js → chunk-IZW5XHKA.js} +7 -7
- package/dist/{chunk-BKYWKMUN.js.map → chunk-IZW5XHKA.js.map} +1 -1
- package/dist/{chunk-LE72KHIE.js → chunk-K3NAFQ4S.js} +3 -3
- package/dist/{chunk-LE72KHIE.js.map → chunk-K3NAFQ4S.js.map} +1 -1
- package/dist/{chunk-GP2COVJC.js → chunk-KSJTMSYA.js} +4 -4
- package/dist/{chunk-GP2COVJC.js.map → chunk-KSJTMSYA.js.map} +1 -1
- package/dist/{chunk-OFACAHRV.js → chunk-NDL2JGQ7.js} +5 -5
- package/dist/{chunk-OFACAHRV.js.map → chunk-NDL2JGQ7.js.map} +1 -1
- package/dist/{chunk-GT6M74IZ.js → chunk-SLGGZ3MU.js} +5 -5
- package/dist/{chunk-GT6M74IZ.js.map → chunk-SLGGZ3MU.js.map} +1 -1
- package/dist/{chunk-EKWXPSTI.js → chunk-TH272DIC.js} +7 -7
- package/dist/{chunk-EKWXPSTI.js.map → chunk-TH272DIC.js.map} +1 -1
- package/dist/{chunk-HUNEJIKV.js → chunk-W3GY5ROH.js} +3 -3
- package/dist/{chunk-HUNEJIKV.js.map → chunk-W3GY5ROH.js.map} +1 -1
- package/dist/data-grid.js +8 -8
- package/dist/editor-mentions.js +2 -2
- package/dist/editor.js +3 -3
- package/dist/index.d.ts +9 -0
- package/dist/index.js +149 -47
- package/dist/index.js.map +1 -1
- package/dist/kanban.js +8 -7
- package/dist/kanban.js.map +1 -1
- package/dist/resizable.js +7 -6
- package/dist/resizable.js.map +1 -1
- package/dist/virtualized.js +8 -8
- package/package.json +1 -1
- package/dist/chunk-2Q4HOGEI.js.map +0 -1
- package/dist/chunk-OWQ7M6R7.js.map +0 -1
- package/dist/chunk-XSQD3UGY.js.map +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useLatest } from './chunk-
|
|
2
|
+
import { useLatest } from './chunk-EZ3ZGFGA.js';
|
|
3
3
|
import { useState, useRef, useCallback, useEffect } from 'react';
|
|
4
4
|
|
|
5
5
|
var registry = /* @__PURE__ */ new WeakMap();
|
|
@@ -106,5 +106,5 @@ function useTextOverflow(options = {}) {
|
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
export { useTextOverflow };
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-W3GY5ROH.js.map
|
|
110
|
+
//# sourceMappingURL=chunk-W3GY5ROH.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../showcase/src/lib/use-text-overflow.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../../../showcase/src/lib/use-text-overflow.ts"],"names":[],"mappings":"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","file":"chunk-W3GY5ROH.js","sourcesContent":["import { useState, useCallback, useRef, useEffect } from \"react\";\nimport { useLatest } from \"./use-latest\";\n\n// ─── Shared ResizeObserver (singleton per document) ────────────────────────────\n// All useTextOverflow instances share a single ResizeObserver. This avoids the\n// performance cost of 80+ independent observers on pages with many truncated elements.\n\ntype OverflowCallback = () => void;\n\nconst registry = new WeakMap<Element, Set<OverflowCallback>>();\nlet sharedObserver: ResizeObserver | null = null;\nlet rafId: number | null = null;\nconst pendingElements = new Set<Element>();\n\nfunction getSharedObserver(): ResizeObserver {\n if (sharedObserver) return sharedObserver;\n sharedObserver = new ResizeObserver((entries) => {\n for (const entry of entries) {\n pendingElements.add(entry.target);\n }\n if (rafId === null) {\n rafId = requestAnimationFrame(flush);\n }\n });\n return sharedObserver;\n}\n\nfunction flush() {\n rafId = null;\n for (const el of pendingElements) {\n const callbacks = registry.get(el);\n if (callbacks) {\n for (const cb of callbacks) cb();\n }\n }\n pendingElements.clear();\n}\n\nfunction observe(el: Element, callback: OverflowCallback) {\n let set = registry.get(el);\n if (!set) {\n set = new Set();\n registry.set(el, set);\n }\n set.add(callback);\n if (set.size === 1) {\n getSharedObserver().observe(el);\n }\n}\n\nfunction unobserve(el: Element, callback: OverflowCallback) {\n const set = registry.get(el);\n if (!set) return;\n set.delete(callback);\n if (set.size === 0) {\n registry.delete(el);\n getSharedObserver().unobserve(el);\n }\n}\n\n// ─── Overflow detection ────────────────────────────────────────────────────────\n\nconst TOLERANCE = 1; // px — accounts for integer rounding in scrollWidth/clientWidth\n\nfunction checkOverflow(el: HTMLElement, lines: number): boolean {\n if (lines <= 1) {\n return el.scrollWidth - el.clientWidth > TOLERANCE;\n }\n return el.scrollHeight - el.clientHeight > TOLERANCE;\n}\n\n// ─── Hook ──────────────────────────────────────────────────────────────────────\n\nexport interface UseTextOverflowOptions {\n /** Number of visible lines before truncation. 1 = single-line ellipsis, >1 = line-clamp. */\n lines?: number;\n /** Disable overflow detection (e.g. when component is hidden) */\n disabled?: boolean;\n /** Content key — triggers re-check when this value changes (use for dynamic text content) */\n content?: unknown;\n}\n\nexport interface UseTextOverflowResult {\n /** Callback ref — attach to the element that has truncation CSS applied */\n ref: (node: HTMLElement | null) => void;\n /** True when the element's text is currently overflowing/truncated */\n isTruncated: boolean;\n}\n\n/**\n * Detects whether an element's text content is overflowing (truncated).\n * Uses a single shared ResizeObserver for all instances on the page.\n *\n * @example\n * const { ref, isTruncated } = useTextOverflow({ lines: 1 });\n * return (\n * <Tooltip content={fullText} disabled={!isTruncated}>\n * <span ref={ref} className=\"truncate\">{fullText}</span>\n * </Tooltip>\n * );\n */\nexport function useTextOverflow(options: UseTextOverflowOptions = {}): UseTextOverflowResult {\n const { lines = 1, disabled = false, content } = options;\n const [isTruncated, setIsTruncated] = useState(false);\n const elementRef = useRef<HTMLElement | null>(null);\n // The observer-registered wrapper delegates to the latest check logic via checkRef.\n const registeredRef = useRef<OverflowCallback | null>(null);\n\n const doCheck = useCallback(() => {\n if (!elementRef.current || disabled) {\n setIsTruncated(false);\n return;\n }\n const next = checkOverflow(elementRef.current, lines);\n setIsTruncated((prev) => (prev !== next ? next : prev));\n }, [lines, disabled]);\n\n // Latest check logic, updated in a layout effect so the stable wrapper never runs a stale closure.\n const checkRef = useLatest<OverflowCallback>(doCheck);\n\n // Re-check when content changes (handles dynamic text like Dropdown selection)\n // or when disabled state changes\n // Measures the committed DOM, so it must stay a post-layout effect.\n /* eslint-disable react-hooks/set-state-in-effect -- overflow is a layout measurement */\n useEffect(() => {\n if (disabled) {\n setIsTruncated(false);\n } else if (elementRef.current) {\n const next = checkOverflow(elementRef.current, lines);\n setIsTruncated((prev) => (prev !== next ? next : prev));\n }\n }, [content, lines, disabled]);\n /* eslint-enable react-hooks/set-state-in-effect */\n\n const ref = useCallback(\n (node: HTMLElement | null) => {\n const prev = elementRef.current;\n\n // Unregister previous element using the SAME function we registered with\n if (prev && registeredRef.current) {\n unobserve(prev, registeredRef.current);\n registeredRef.current = null;\n }\n\n elementRef.current = node;\n\n if (node && !disabled) {\n // Stable wrapper that delegates to the latest check logic\n const wrapper: OverflowCallback = () => checkRef.current?.();\n registeredRef.current = wrapper;\n observe(node, wrapper);\n // Initial check on mount\n const initial = checkOverflow(node, lines);\n setIsTruncated(initial);\n }\n },\n [lines, disabled, checkRef],\n );\n\n // Cleanup on unmount — uses the registered wrapper, not the check function\n useEffect(() => {\n return () => {\n if (elementRef.current && registeredRef.current) {\n unobserve(elementRef.current, registeredRef.current);\n }\n };\n }, []);\n\n return { ref, isTruncated };\n}\n"]}
|
package/dist/data-grid.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useCardsSwitch, CARDS_BELOW, inferColumnKinds, CardValue, SortIndicator, CutCell, CutEmail, dayKey, DatePicker, Checkbox } from './chunk-
|
|
3
|
-
import { usePagination, useWholeListCheck, pagerPart, Pagination, NumberInput } from './chunk-
|
|
2
|
+
import { useCardsSwitch, CARDS_BELOW, inferColumnKinds, CardValue, SortIndicator, CutCell, CutEmail, dayKey, DatePicker, Checkbox } from './chunk-I6JJ7KKP.js';
|
|
3
|
+
import { usePagination, useWholeListCheck, pagerPart, Pagination, NumberInput } from './chunk-IOHGE4EW.js';
|
|
4
4
|
import { useShellPreferences } from './chunk-QOMP4D6V.js';
|
|
5
5
|
import './chunk-LJYSVZMI.js';
|
|
6
|
-
import { Dropdown, Field, Input } from './chunk-
|
|
6
|
+
import { Dropdown, Field, Input } from './chunk-IZW5XHKA.js';
|
|
7
7
|
import './chunk-7QLXYRPD.js';
|
|
8
|
-
import './chunk-7RKC5C7G.js';
|
|
9
8
|
import { FormChangeCtx } from './chunk-72SDAX54.js';
|
|
10
9
|
import { useFramesItself, TableCardCtx, RowsCtx } from './chunk-V73LHNRL.js';
|
|
11
|
-
import './chunk-
|
|
10
|
+
import './chunk-HQFTP7Y5.js';
|
|
12
11
|
import { useBreakpoint } from './chunk-ZHUVLBCC.js';
|
|
13
|
-
import './chunk-
|
|
14
|
-
import
|
|
12
|
+
import './chunk-7RKC5C7G.js';
|
|
13
|
+
import './chunk-W3GY5ROH.js';
|
|
14
|
+
import { useRevealFocus } from './chunk-DR6WEI3A.js';
|
|
15
15
|
import { Icon, warnOnce } from './chunk-53F7GVBQ.js';
|
|
16
|
-
import { cn, useGridKeyboard, FOCUS_INSET, FOCUS_RING, useFocusLeave, focusInitial } from './chunk-
|
|
16
|
+
import { cn, useGridKeyboard, FOCUS_INSET, FOCUS_RING, useFocusLeave, focusInitial } from './chunk-EZ3ZGFGA.js';
|
|
17
17
|
import { useState, useMemo, useCallback, useRef, useEffect, useLayoutEffect } from 'react';
|
|
18
18
|
import { useReactTable, getSortedRowModel, getCoreRowModel, flexRender } from '@tanstack/react-table';
|
|
19
19
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
package/dist/editor-mentions.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { matchMentions, shownMentions, mentionOptionId, MentionList } from './chunk-
|
|
3
|
-
import { useLatest, useOverlayLayer } from './chunk-
|
|
2
|
+
import { matchMentions, shownMentions, mentionOptionId, MentionList } from './chunk-K3NAFQ4S.js';
|
|
3
|
+
import { useLatest, useOverlayLayer } from './chunk-EZ3ZGFGA.js';
|
|
4
4
|
import { useState, useSyncExternalStore, useId, useRef, useEffect } from 'react';
|
|
5
5
|
import Mention from '@tiptap/extension-mention';
|
|
6
6
|
import { exitSuggestion } from '@tiptap/suggestion';
|
package/dist/editor.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useScrollEdges } from './chunk-3BRQRKDO.js';
|
|
3
|
-
import { useInputModality } from './chunk-7RKC5C7G.js';
|
|
4
3
|
import { FormChangeCtx } from './chunk-72SDAX54.js';
|
|
5
4
|
import { useBreakpoint } from './chunk-ZHUVLBCC.js';
|
|
6
|
-
import {
|
|
5
|
+
import { useInputModality } from './chunk-7RKC5C7G.js';
|
|
6
|
+
import { useRevealFocus, AutoTooltip } from './chunk-DR6WEI3A.js';
|
|
7
7
|
import { warnOnce, Icon } from './chunk-53F7GVBQ.js';
|
|
8
|
-
import { useLatest, cn, FIELD_FOCUS_WITHIN_RING, useOverlayLayer, useCloseOnFocusOut, FOCUS_RING, FIELD_FOCUS_RING } from './chunk-
|
|
8
|
+
import { useLatest, cn, FIELD_FOCUS_WITHIN_RING, useOverlayLayer, useCloseOnFocusOut, FOCUS_RING, FIELD_FOCUS_RING } from './chunk-EZ3ZGFGA.js';
|
|
9
9
|
import { useState, useCallback, useContext, useRef, useEffect, useImperativeHandle } from 'react';
|
|
10
10
|
import { Extension, Node, mergeAttributes, useEditor, EditorContent, createDocument } from '@tiptap/react';
|
|
11
11
|
import { Plugin } from '@tiptap/pm/state';
|
package/dist/index.d.ts
CHANGED
|
@@ -1813,6 +1813,15 @@ interface CollapsibleContentProps {
|
|
|
1813
1813
|
}
|
|
1814
1814
|
declare function CollapsibleRoot({ open: controlledOpen, defaultOpen, onOpenChange, children, className, }: CollapsibleProps): react_jsx_runtime.JSX.Element;
|
|
1815
1815
|
declare function CollapsibleTrigger({ children, className }: CollapsibleTriggerProps): react_jsx_runtime.JSX.Element;
|
|
1816
|
+
/**
|
|
1817
|
+
* The content (Sprint 25.32, R29-1: round 29's event form Tabbed into a closed section's fields). Closed, it's `inert`:
|
|
1818
|
+
* out of the Tab order and the accessibility tree as well as out of sight, so a keyboard never lands on a field no one
|
|
1819
|
+
* can see. It clips only while it moves. Open and settled, its height follows its content and nothing is clipped: a
|
|
1820
|
+
* field's outline at its edge, or an error message that appears once it's open. Focus inside it when it closes goes
|
|
1821
|
+
* back to its trigger, as a disclosure's does; with no trigger that takes focus (a page's own button drives `open`, or the
|
|
1822
|
+
* trigger is plain text), to the Tab stop before it, else the last resort (the review of 18 October). Under reduced
|
|
1823
|
+
* motion (a zero transition) it settles at once.
|
|
1824
|
+
*/
|
|
1816
1825
|
declare function CollapsibleContent({ children, className }: CollapsibleContentProps): react_jsx_runtime.JSX.Element;
|
|
1817
1826
|
declare const Collapsible: typeof CollapsibleRoot & {
|
|
1818
1827
|
Trigger: typeof CollapsibleTrigger;
|
package/dist/index.js
CHANGED
|
@@ -1,46 +1,46 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useAppShell, REACT_VERSION_PROBLEM, Breadcrumbs, useCrumbFollow, crumbGoes, useCornerInset, NAVBAR_INSET_PRIORITY, useOverlayMark, useDirtyGuard, useScrollbarInset, DrawerFooterCtx, OverlayMarkScope, OverlayCloseCtx, insetLessScrollbar, DiscardConfirm, OVERLAY_ROOT_ATTR, OverlayMarkCtx, useCompact, useElementWidth, DrawerPanel, useCloseSettle, besideRoom, PANEL_INSET_PRIORITY, Drawer, useRememberedWidth, pxOf, ResizeEdge, LAUNCHER_INSET_PRIORITY, defaultMaxWidth } from './chunk-
|
|
3
|
-
export { AppShell, Breadcrumbs, Drawer, SkipLink, useAppShell, useUnsavedChanges } from './chunk-
|
|
4
|
-
import { Skeleton, TITLE_TEXT, SegmentedControl } from './chunk-
|
|
5
|
-
export { SegmentedControl, Skeleton } from './chunk-
|
|
2
|
+
import { useAppShell, REACT_VERSION_PROBLEM, Breadcrumbs, useCrumbFollow, crumbGoes, useCornerInset, NAVBAR_INSET_PRIORITY, useOverlayMark, useDirtyGuard, useScrollbarInset, DrawerFooterCtx, OverlayMarkScope, OverlayCloseCtx, insetLessScrollbar, DiscardConfirm, OVERLAY_ROOT_ATTR, OverlayMarkCtx, useCompact, useElementWidth, DrawerPanel, useCloseSettle, besideRoom, PANEL_INSET_PRIORITY, Drawer, useRememberedWidth, pxOf, ResizeEdge, LAUNCHER_INSET_PRIORITY, defaultMaxWidth } from './chunk-TH272DIC.js';
|
|
3
|
+
export { AppShell, Breadcrumbs, Drawer, SkipLink, useAppShell, useUnsavedChanges } from './chunk-TH272DIC.js';
|
|
4
|
+
import { Skeleton, TITLE_TEXT, SegmentedControl } from './chunk-BHTAVJIG.js';
|
|
5
|
+
export { SegmentedControl, Skeleton } from './chunk-BHTAVJIG.js';
|
|
6
6
|
import { useScrollEdges, EDGE_FADE } from './chunk-3BRQRKDO.js';
|
|
7
|
-
import { Avatar, foldForSearch, useActiveOptionInView, shownMentions, matchMentions, mentionOptionId, MentionList, initialsOf } from './chunk-
|
|
8
|
-
export { Avatar } from './chunk-
|
|
9
|
-
import { Link } from './chunk-
|
|
10
|
-
export { CodeBlock, Divider, Link } from './chunk-
|
|
11
|
-
import { DropdownMenu } from './chunk-
|
|
12
|
-
export { DropdownMenu } from './chunk-
|
|
7
|
+
import { Avatar, foldForSearch, useActiveOptionInView, shownMentions, matchMentions, mentionOptionId, MentionList, initialsOf } from './chunk-K3NAFQ4S.js';
|
|
8
|
+
export { Avatar } from './chunk-K3NAFQ4S.js';
|
|
9
|
+
import { Link } from './chunk-NDL2JGQ7.js';
|
|
10
|
+
export { CodeBlock, Divider, Link } from './chunk-NDL2JGQ7.js';
|
|
11
|
+
import { DropdownMenu } from './chunk-2TCCSKL3.js';
|
|
12
|
+
export { DropdownMenu } from './chunk-2TCCSKL3.js';
|
|
13
13
|
import { useFillHeight, FillContext } from './chunk-DBHVJ7Z3.js';
|
|
14
|
-
import { Badge } from './chunk-
|
|
15
|
-
export { Badge } from './chunk-
|
|
16
|
-
import { useKeyboardScroll } from './chunk-
|
|
17
|
-
import { localeCache, startOfDay, addDays, useWeekStart, useDateWords, localeDayFirst, dayKey, moveDay, addMonths, DateSegmentFields, getMonthGrid, isSameMonth, isSameDay, DatePicker, timeSegments, pad2, inferColumnKinds, useCardsSwitch, CARDS_BELOW, kindOfRenderedText, Checkbox, CardValue, SortIndicator, startOfWeek, endOfWeek, addMonthsClamped, isExcludedDay, CutCell, CutEmail, stepValue, separatorMovesOn, TIME_SEPARATORS, typeDigit, getEventsForDay, layoutWeek, isWeekend, getWeekDays, isBarEvent, layoutPieces, dayPieces, groupEventsByDay, timeToFraction } from './chunk-
|
|
18
|
-
export { Checkbox, CheckboxGroup, CheckboxGroupItem, DatePicker, HoverCard, TextOverflow } from './chunk-
|
|
19
|
-
import { useWholeListCheck, pagerPart, Pagination, NumberInput } from './chunk-
|
|
20
|
-
export { NumberInput, Pagination, Popover, usePagination } from './chunk-
|
|
14
|
+
import { Badge } from './chunk-SLGGZ3MU.js';
|
|
15
|
+
export { Badge } from './chunk-SLGGZ3MU.js';
|
|
16
|
+
import { useKeyboardScroll } from './chunk-KSJTMSYA.js';
|
|
17
|
+
import { localeCache, startOfDay, addDays, useWeekStart, useDateWords, localeDayFirst, dayKey, moveDay, addMonths, DateSegmentFields, getMonthGrid, isSameMonth, isSameDay, DatePicker, timeSegments, pad2, inferColumnKinds, useCardsSwitch, CARDS_BELOW, kindOfRenderedText, Checkbox, CardValue, SortIndicator, startOfWeek, endOfWeek, addMonthsClamped, isExcludedDay, CutCell, CutEmail, stepValue, separatorMovesOn, TIME_SEPARATORS, typeDigit, getEventsForDay, layoutWeek, isWeekend, getWeekDays, isBarEvent, layoutPieces, dayPieces, groupEventsByDay, timeToFraction } from './chunk-I6JJ7KKP.js';
|
|
18
|
+
export { Checkbox, CheckboxGroup, CheckboxGroupItem, DatePicker, HoverCard, TextOverflow } from './chunk-I6JJ7KKP.js';
|
|
19
|
+
import { useWholeListCheck, pagerPart, Pagination, NumberInput } from './chunk-IOHGE4EW.js';
|
|
20
|
+
export { NumberInput, Pagination, Popover, usePagination } from './chunk-IOHGE4EW.js';
|
|
21
21
|
import { useShellPreferences, PREFERENCE_HOUSE_DEFAULTS, formatRelativeTime, thresholdOf, toMillis, formatFullTime, datedMillis, preferenceActionKey, DAY, HOUR, MINUTE } from './chunk-QOMP4D6V.js';
|
|
22
22
|
export { PreferencesContext, formatFullTime, formatRelativeTime, preferenceActionKey, usePreferences } from './chunk-QOMP4D6V.js';
|
|
23
23
|
import { useFormatLocale, useHydrated, useToday, LocaleContext } from './chunk-LJYSVZMI.js';
|
|
24
24
|
export { useFormatLocale, useHydrated } from './chunk-LJYSVZMI.js';
|
|
25
|
-
import { Input, CHECK_FILL, Dropdown, FilterRowContext, SWITCH_KNOB_ON, SWITCH_KNOB_OFF, SWITCH_KNOB_MOTION, SWITCH_TRACK_ON, SWITCH_TRACK_OFF, useFieldControl, useField, OutsideField, InlineFieldError, Label, AddAnotherRowCtx, Field } from './chunk-
|
|
26
|
-
export { Dropdown, Field, InlineFieldError, Input, Label, Textarea, Toggle } from './chunk-
|
|
25
|
+
import { Input, CHECK_FILL, Dropdown, FilterRowContext, SWITCH_KNOB_ON, SWITCH_KNOB_OFF, SWITCH_KNOB_MOTION, SWITCH_TRACK_ON, SWITCH_TRACK_OFF, useFieldControl, useField, OutsideField, InlineFieldError, Label, AddAnotherRowCtx, Field } from './chunk-IZW5XHKA.js';
|
|
26
|
+
export { Dropdown, Field, InlineFieldError, Input, Label, Textarea, Toggle } from './chunk-IZW5XHKA.js';
|
|
27
27
|
import { formatLocale, localeChoice } from './chunk-7QLXYRPD.js';
|
|
28
|
-
import { useInputModality, inputModality } from './chunk-7RKC5C7G.js';
|
|
29
|
-
export { INPUT_MODALITY_ATTR, inputModality, installInputModality, useInputModality } from './chunk-7RKC5C7G.js';
|
|
30
28
|
import { FormChangeCtx, useReportedChange, useOptionalFormContext, FormCtx } from './chunk-72SDAX54.js';
|
|
31
29
|
export { useFormContext } from './chunk-72SDAX54.js';
|
|
32
30
|
import { CardSurfaceCtx, useScrollsInside, SplitPaneCtx, RowsCtx, PageActionsCtx, SurfaceBoundary, useFramesItself, TableCardCtx } from './chunk-V73LHNRL.js';
|
|
33
|
-
import { Button, elementType, ControlSizeContext, triggerType, Spinner } from './chunk-
|
|
34
|
-
export { Button, ButtonSizeContext, ControlSizeContext, Spinner } from './chunk-
|
|
31
|
+
import { Button, elementType, ControlSizeContext, triggerType, Spinner } from './chunk-HQFTP7Y5.js';
|
|
32
|
+
export { Button, ButtonSizeContext, ControlSizeContext, Spinner } from './chunk-HQFTP7Y5.js';
|
|
35
33
|
import { useBreakpoint, readBreakpointPx } from './chunk-ZHUVLBCC.js';
|
|
36
34
|
export { BreakpointWidthProvider, useBreakpoint } from './chunk-ZHUVLBCC.js';
|
|
37
|
-
import {
|
|
38
|
-
export {
|
|
39
|
-
import {
|
|
40
|
-
export {
|
|
35
|
+
import { useInputModality, inputModality } from './chunk-7RKC5C7G.js';
|
|
36
|
+
export { INPUT_MODALITY_ATTR, inputModality, installInputModality, useInputModality } from './chunk-7RKC5C7G.js';
|
|
37
|
+
import { useTextOverflow } from './chunk-W3GY5ROH.js';
|
|
38
|
+
export { useTextOverflow } from './chunk-W3GY5ROH.js';
|
|
39
|
+
import { AutoTooltip, mergeRefs, useRevealFocus } from './chunk-DR6WEI3A.js';
|
|
40
|
+
export { Tooltip, useRevealFocus } from './chunk-DR6WEI3A.js';
|
|
41
41
|
import { Icon, slotIcon, warnOnce } from './chunk-53F7GVBQ.js';
|
|
42
|
-
import { cn, FOCUS_RING, focusAfterSelfRemoval, FOCUSABLE, GLASS_SURFACE, useFocusKeptInList, FOCUS_INSET, useLatest, PEER_FOCUS_RING, GLASS_BACKDROP, FIELD, ZOOM_KEYS, rovingTabStop, FOCUS_ROOM, useOverlayLayer, useFocusTrap, useFocusBeforeOpen, rememberOpener, focusInitial, lockBodyScroll, unlockBodyScroll, OVERLAY_CLOSE_ATTR, OVERLAY_SURFACE, GLASS_OVERLAY, usePopupFocus, usePosition, ERROR_HAS_FOCUS_RING, FIELD_HAS_FOCUS_RING, CONTROL_ANCESTOR, GROUP_FOCUS_RING, useGridKeyboard, ERROR_ACTIVE_RING, ACTIVE_RING, ERROR_FOCUS_WITHIN_RING, FIELD_FOCUS_WITHIN_RING, focusAfterRemoval, GLASS_DROPDOWN, ERROR_FOCUS_RING, FIELD_FOCUS_RING, atLeastFocusRoom, useNonModalDialog, useReturnFocus } from './chunk-
|
|
43
|
-
export { useGridKeyboard } from './chunk-
|
|
42
|
+
import { cn, FOCUS_RING, focusAfterSelfRemoval, FOCUSABLE, GLASS_SURFACE, useFocusKeptInList, FOCUS_INSET, useLatest, PEER_FOCUS_RING, GLASS_BACKDROP, OPEN_TO_FOCUS, focusOutOf, FIELD, ZOOM_KEYS, rovingTabStop, FOCUS_ROOM, useOverlayLayer, useFocusTrap, useFocusBeforeOpen, rememberOpener, focusInitial, lockBodyScroll, unlockBodyScroll, OVERLAY_CLOSE_ATTR, OVERLAY_SURFACE, GLASS_OVERLAY, usePopupFocus, usePosition, ERROR_HAS_FOCUS_RING, FIELD_HAS_FOCUS_RING, CONTROL_ANCESTOR, GROUP_FOCUS_RING, useGridKeyboard, ERROR_ACTIVE_RING, ACTIVE_RING, ERROR_FOCUS_WITHIN_RING, FIELD_FOCUS_WITHIN_RING, focusAfterRemoval, GLASS_DROPDOWN, ERROR_FOCUS_RING, FIELD_FOCUS_RING, openToFocus, atLeastFocusRoom, useNonModalDialog, useReturnFocus } from './chunk-EZ3ZGFGA.js';
|
|
43
|
+
export { useGridKeyboard } from './chunk-EZ3ZGFGA.js';
|
|
44
44
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
45
45
|
import { forwardRef, useRef, useId, useEffect, useState, createContext, useCallback, useLayoutEffect, useMemo, useContext, isValidElement, memo, useImperativeHandle, useSyncExternalStore, Children, Fragment as Fragment$1, cloneElement, useReducer } from 'react';
|
|
46
46
|
import { createPortal, flushSync } from 'react-dom';
|
|
@@ -4151,10 +4151,10 @@ function FormWrapper({ onSubmit, validationMode: validationModeProp, children, a
|
|
|
4151
4151
|
return;
|
|
4152
4152
|
}
|
|
4153
4153
|
const first = form.querySelector("[aria-invalid='true']");
|
|
4154
|
-
if (first) {
|
|
4154
|
+
if (first) openToFocus(first, () => {
|
|
4155
4155
|
if (typeof first.scrollIntoView === "function") first.scrollIntoView({ block: "center", behavior: "smooth" });
|
|
4156
4156
|
focusTarget(first).focus({ preventScroll: true });
|
|
4157
|
-
}
|
|
4157
|
+
});
|
|
4158
4158
|
}
|
|
4159
4159
|
}, [submittedRef, errorSummaryRef, focusSummary]);
|
|
4160
4160
|
useLayoutEffect(() => {
|
|
@@ -4236,10 +4236,10 @@ function FormWrapper({ onSubmit, validationMode: validationModeProp, children, a
|
|
|
4236
4236
|
const focusField = (id) => (e) => {
|
|
4237
4237
|
e.preventDefault();
|
|
4238
4238
|
const el = id ? document.getElementById(id) : null;
|
|
4239
|
-
if (el) {
|
|
4239
|
+
if (el) openToFocus(el, () => {
|
|
4240
4240
|
el.scrollIntoView?.({ block: "center" });
|
|
4241
4241
|
focusTarget(el).focus();
|
|
4242
|
-
}
|
|
4242
|
+
});
|
|
4243
4243
|
};
|
|
4244
4244
|
const summaryNode = errorSummary && summary.length >= 2 ? typeof errorSummary === "function" ? errorSummary(summary) : /* @__PURE__ */ jsx(Alert, { variant: "error", title: `${summary.length} fields need attention`, className: "mb-ds-4", children: /* @__PURE__ */ jsx("ul", { className: "list-disc pl-ds-5 flex flex-col gap-ds-1", children: summary.map((f) => /* @__PURE__ */ jsxs("li", { children: [
|
|
4245
4245
|
/* @__PURE__ */ jsx("a", { href: f.id ? `#${f.id}` : void 0, onClick: focusField(f.id), className: cn("underline underline-offset-2 text-[var(--ds-text-primary)]", FOCUS_RING), children: f.label }),
|
|
@@ -8718,7 +8718,11 @@ function Calendar({
|
|
|
8718
8718
|
}
|
|
8719
8719
|
check = setTimeout(settle, SETTLE_MS);
|
|
8720
8720
|
};
|
|
8721
|
-
const onOut = () => {
|
|
8721
|
+
const onOut = (e) => {
|
|
8722
|
+
if (!e.target?.closest?.('[role="dialog"], [role="alertdialog"]')) {
|
|
8723
|
+
stop();
|
|
8724
|
+
return;
|
|
8725
|
+
}
|
|
8722
8726
|
clearTimeout(check);
|
|
8723
8727
|
check = setTimeout(settle, SETTLE_MS);
|
|
8724
8728
|
};
|
|
@@ -9378,20 +9382,54 @@ function CollapsibleRoot({
|
|
|
9378
9382
|
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
9379
9383
|
const isControlled = controlledOpen !== void 0;
|
|
9380
9384
|
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
9385
|
+
const triggerRef = useRef(null);
|
|
9386
|
+
const setTrigger = useCallback((el) => {
|
|
9387
|
+
triggerRef.current = el;
|
|
9388
|
+
}, []);
|
|
9389
|
+
const trigger = useCallback(() => triggerRef.current, []);
|
|
9390
|
+
const open = () => {
|
|
9391
|
+
if (isOpen) return;
|
|
9392
|
+
if (!isControlled) setInternalOpen(true);
|
|
9393
|
+
onOpenChange?.(true);
|
|
9394
|
+
};
|
|
9381
9395
|
const toggle = () => {
|
|
9382
9396
|
const next = !isOpen;
|
|
9383
9397
|
if (!isControlled) setInternalOpen(next);
|
|
9384
9398
|
onOpenChange?.(next);
|
|
9385
9399
|
};
|
|
9386
|
-
return /* @__PURE__ */ jsx(CollapsibleContext, { value: { isOpen, toggle }, children: /* @__PURE__ */ jsx("div", { className, "data-state": isOpen ? "open" : "closed", children: typeof children === "function" ? children({ isOpen, toggle }) : children }) });
|
|
9400
|
+
return /* @__PURE__ */ jsx(CollapsibleContext, { value: { isOpen, toggle, setTrigger, trigger, open }, children: /* @__PURE__ */ jsx("div", { className, "data-state": isOpen ? "open" : "closed", children: typeof children === "function" ? children({ isOpen, toggle }) : children }) });
|
|
9401
|
+
}
|
|
9402
|
+
var merged = /* @__PURE__ */ new WeakMap();
|
|
9403
|
+
function withTrigger(own, setTrigger) {
|
|
9404
|
+
if (!own) return setTrigger;
|
|
9405
|
+
let bySetter = merged.get(own);
|
|
9406
|
+
if (!bySetter) merged.set(own, bySetter = /* @__PURE__ */ new WeakMap());
|
|
9407
|
+
let attach = bySetter.get(setTrigger);
|
|
9408
|
+
if (!attach) {
|
|
9409
|
+
attach = (el) => {
|
|
9410
|
+
setTrigger(el);
|
|
9411
|
+
let cleanup;
|
|
9412
|
+
if (typeof own === "function") cleanup = own(el);
|
|
9413
|
+
else own.current = el;
|
|
9414
|
+
return () => {
|
|
9415
|
+
setTrigger(null);
|
|
9416
|
+
if (typeof cleanup === "function") cleanup();
|
|
9417
|
+
else if (typeof own === "function") own(null);
|
|
9418
|
+
else own.current = null;
|
|
9419
|
+
};
|
|
9420
|
+
};
|
|
9421
|
+
bySetter.set(setTrigger, attach);
|
|
9422
|
+
}
|
|
9423
|
+
return attach;
|
|
9387
9424
|
}
|
|
9388
9425
|
function CollapsibleTrigger({ children, className }) {
|
|
9389
|
-
const { isOpen, toggle } = useCollapsible();
|
|
9426
|
+
const { isOpen, toggle, setTrigger } = useCollapsible();
|
|
9390
9427
|
if (isValidElement(children)) {
|
|
9391
9428
|
const child = children;
|
|
9392
9429
|
return cloneElement(child, {
|
|
9393
9430
|
// a Button trigger in a form toggles; it never submits the form (0.21.0)
|
|
9394
9431
|
...triggerType(child),
|
|
9432
|
+
ref: withTrigger(child.props.ref, setTrigger),
|
|
9395
9433
|
"aria-expanded": isOpen,
|
|
9396
9434
|
className: cn(child.props.className, className),
|
|
9397
9435
|
onClick: (e) => {
|
|
@@ -9400,29 +9438,92 @@ function CollapsibleTrigger({ children, className }) {
|
|
|
9400
9438
|
}
|
|
9401
9439
|
});
|
|
9402
9440
|
}
|
|
9403
|
-
return /* @__PURE__ */ jsx("button", { type: "button", className: cn("text-left cursor-pointer", FOCUS_RING, className), onClick: toggle, "aria-expanded": isOpen, children });
|
|
9441
|
+
return /* @__PURE__ */ jsx("button", { ref: withTrigger(void 0, setTrigger), type: "button", className: cn("text-left cursor-pointer", FOCUS_RING, className), onClick: toggle, "aria-expanded": isOpen, children });
|
|
9404
9442
|
}
|
|
9405
9443
|
function CollapsibleContent({ children, className }) {
|
|
9406
|
-
const { isOpen } = useCollapsible();
|
|
9444
|
+
const { isOpen, trigger, open } = useCollapsible();
|
|
9407
9445
|
const ref = useRef(null);
|
|
9408
|
-
const
|
|
9409
|
-
const
|
|
9410
|
-
|
|
9411
|
-
|
|
9412
|
-
|
|
9446
|
+
const asked = useRef(null);
|
|
9447
|
+
const isOpenNow = useLatest(isOpen);
|
|
9448
|
+
const openNow = useLatest(open);
|
|
9449
|
+
useLayoutEffect(() => {
|
|
9450
|
+
const el = ref.current;
|
|
9451
|
+
if (!el) return;
|
|
9452
|
+
const onAsk = (e) => {
|
|
9453
|
+
if (isOpenNow.current) return;
|
|
9454
|
+
asked.current = e.detail;
|
|
9455
|
+
openNow.current();
|
|
9456
|
+
};
|
|
9457
|
+
el.addEventListener(OPEN_TO_FOCUS, onAsk);
|
|
9458
|
+
return () => el.removeEventListener(OPEN_TO_FOCUS, onAsk);
|
|
9459
|
+
}, [isOpenNow, openNow]);
|
|
9460
|
+
useLayoutEffect(() => {
|
|
9461
|
+
if (asked.current && !isOpen) asked.current = null;
|
|
9462
|
+
});
|
|
9463
|
+
const [height, setHeight] = useState(isOpen ? "auto" : 0);
|
|
9464
|
+
const [inertNow, setInertNow] = useState(!isOpen);
|
|
9465
|
+
const was = useRef(isOpen);
|
|
9466
|
+
useLayoutEffect(() => {
|
|
9467
|
+
const el = ref.current;
|
|
9468
|
+
if (was.current === isOpen) return;
|
|
9469
|
+
was.current = isOpen;
|
|
9470
|
+
if (!el) return;
|
|
9471
|
+
if (!isOpen && el.contains(document.activeElement)) {
|
|
9472
|
+
trigger()?.focus();
|
|
9473
|
+
if (el.contains(document.activeElement)) focusOutOf(el);
|
|
9474
|
+
}
|
|
9475
|
+
const ask = asked.current;
|
|
9476
|
+
asked.current = null;
|
|
9477
|
+
if (isOpen && ask && !ask.done && performance.now() - ask.at < 1e3 && !ask.target.closest("[inert]")) {
|
|
9478
|
+
ask.done = true;
|
|
9479
|
+
ask.step();
|
|
9413
9480
|
}
|
|
9414
|
-
|
|
9481
|
+
setInertNow(!isOpen);
|
|
9482
|
+
const seconds = parseFloat(getComputedStyle(el).transitionDuration) || 0;
|
|
9483
|
+
if (seconds <= 0) {
|
|
9484
|
+
setHeight(isOpen ? "auto" : 0);
|
|
9485
|
+
return;
|
|
9486
|
+
}
|
|
9487
|
+
let frame = 0;
|
|
9488
|
+
if (isOpen) setHeight(el.scrollHeight);
|
|
9489
|
+
else {
|
|
9490
|
+
setHeight(el.scrollHeight);
|
|
9491
|
+
frame = requestAnimationFrame(() => {
|
|
9492
|
+
void el.offsetHeight;
|
|
9493
|
+
setHeight(0);
|
|
9494
|
+
});
|
|
9495
|
+
}
|
|
9496
|
+
let done = false;
|
|
9497
|
+
const settle = () => {
|
|
9498
|
+
if (done) return;
|
|
9499
|
+
done = true;
|
|
9500
|
+
if (isOpen) setHeight("auto");
|
|
9501
|
+
};
|
|
9502
|
+
const onEnd = (e) => {
|
|
9503
|
+
if (e.target === el && e.propertyName === "height") settle();
|
|
9504
|
+
};
|
|
9505
|
+
el.addEventListener("transitionend", onEnd);
|
|
9506
|
+
const timer = setTimeout(settle, seconds * 1e3 + 100);
|
|
9507
|
+
return () => {
|
|
9508
|
+
cancelAnimationFrame(frame);
|
|
9509
|
+
el.removeEventListener("transitionend", onEnd);
|
|
9510
|
+
clearTimeout(timer);
|
|
9511
|
+
};
|
|
9512
|
+
}, [isOpen, trigger]);
|
|
9513
|
+
const moving = typeof height === "number" && height > 0;
|
|
9415
9514
|
return /* @__PURE__ */ jsx(
|
|
9416
9515
|
"div",
|
|
9417
9516
|
{
|
|
9418
9517
|
ref,
|
|
9419
|
-
|
|
9518
|
+
"data-state": isOpen ? "open" : "closed",
|
|
9519
|
+
inert: inertNow && !isOpen,
|
|
9520
|
+
className: cn((!isOpen || moving) && "overflow-hidden", "transition-[height]", className),
|
|
9420
9521
|
style: {
|
|
9421
|
-
height: height
|
|
9522
|
+
height: height === "auto" ? void 0 : height,
|
|
9422
9523
|
transitionDuration: "var(--ds-transition-speed)",
|
|
9423
9524
|
transitionTimingFunction: "var(--ds-transition-ease)"
|
|
9424
9525
|
},
|
|
9425
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
9526
|
+
children: /* @__PURE__ */ jsx("div", { children })
|
|
9426
9527
|
}
|
|
9427
9528
|
);
|
|
9428
9529
|
}
|
|
@@ -15836,6 +15937,7 @@ function SnappingHeader({
|
|
|
15836
15937
|
([entry]) => {
|
|
15837
15938
|
if (!entry.isIntersecting && !collapsedRef.current) {
|
|
15838
15939
|
collapsedRef.current = true;
|
|
15940
|
+
setSpacer(expandedHeightRef.current);
|
|
15839
15941
|
setCollapsed(true);
|
|
15840
15942
|
}
|
|
15841
15943
|
},
|