@astryxdesign/core 0.6.0 → 0.6.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 +41 -3
- package/dist/AppShell/AppShell.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts +12 -1
- package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetSwitcher.js +44 -15
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts +3 -2
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +3 -7
- package/dist/Center/Center.d.ts +23 -16
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +7 -5
- package/dist/CodeBlock/CodeBlock.js +2 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +12 -2
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +12 -2
- package/dist/Field/Field.d.ts.map +1 -1
- package/dist/Field/Field.js +1 -0
- package/dist/Field/InputClearButton.d.ts +2 -2
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +5 -1
- package/dist/Field/PanelSearchInput.d.ts.map +1 -1
- package/dist/Field/PanelSearchInput.js +16 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +12 -1
- package/dist/HoverCard/useHoverCard.js +2 -2
- package/dist/Indicator/CheckboxIndicator.js +2 -2
- package/dist/Indicator/RadioIndicator.js +2 -2
- package/dist/Layer/layerStack.d.ts +10 -0
- package/dist/Layer/layerStack.d.ts.map +1 -1
- package/dist/Layer/layerStack.js +21 -9
- package/dist/Layer/useLayerDismissal.d.ts +2 -3
- package/dist/Layer/useLayerDismissal.d.ts.map +1 -1
- package/dist/Layer/useLayerDismissal.js +2 -3
- package/dist/NavIcon/NavIcon.js +2 -2
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +12 -2
- package/dist/Popover/usePopover.d.ts +3 -2
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +4 -2
- package/dist/ProgressBar/ProgressBar.js +2 -2
- package/dist/ScrollableArea/ScrollableArea.d.ts +79 -0
- package/dist/ScrollableArea/ScrollableArea.d.ts.map +1 -0
- package/dist/ScrollableArea/ScrollableArea.js +144 -0
- package/dist/ScrollableArea/index.d.ts +11 -0
- package/dist/ScrollableArea/index.d.ts.map +1 -0
- package/dist/ScrollableArea/index.js +11 -0
- package/dist/StatusDot/StatusDot.js +2 -2
- package/dist/TextArea/TextArea.js +2 -2
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +19 -4
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +12 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +21 -14
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +56 -20
- package/dist/astryx.css +15 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -0
- package/dist/hooks/scrollGeometry.d.ts +24 -0
- package/dist/hooks/scrollGeometry.d.ts.map +1 -0
- package/dist/hooks/scrollGeometry.js +86 -0
- package/dist/hooks/scrollOwnerRegistry.d.ts +15 -0
- package/dist/hooks/scrollOwnerRegistry.d.ts.map +1 -0
- package/dist/hooks/scrollOwnerRegistry.js +24 -0
- package/dist/hooks/useFocusTrap.d.ts +8 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -1
- package/dist/hooks/useFocusTrap.js +22 -11
- package/dist/hooks/useScrollableArea.d.ts +51 -0
- package/dist/hooks/useScrollableArea.d.ts.map +1 -0
- package/dist/hooks/useScrollableArea.js +287 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/theme/defineTheme.d.ts +2 -6
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +1 -1
- package/dist/theme/derivedVarRegistry.js +1 -1
- package/dist/theme/localTokens.d.ts +8 -11
- package/dist/theme/localTokens.d.ts.map +1 -1
- package/dist/theme/localTokens.js +17 -71
- package/dist/theme/themeAdaptations.d.ts.map +1 -1
- package/dist/theme/themeAdaptations.js +4 -4
- package/dist/utils/themeProps.d.ts +10 -10
- package/dist/utils/themeProps.d.ts.map +1 -1
- package/dist/utils/themeProps.js +27 -10
- package/locales/en.json +16 -0
- package/locales/pseudo.json +12 -0
- package/package.json +7 -2
- package/src/AppShell/AppShell.test.tsx +36 -0
- package/src/AppShell/AppShell.tsx +4 -1
- package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
- package/src/Banner/Banner.test.tsx +3 -1
- package/src/BottomSheet/BottomSheetSwitcher.doc.mjs +56 -1
- package/src/BottomSheet/BottomSheetSwitcher.spec.md +211 -0
- package/src/BottomSheet/BottomSheetSwitcher.test.tsx +134 -2
- package/src/BottomSheet/BottomSheetSwitcher.tsx +43 -20
- package/src/Breadcrumbs/BreadcrumbItem.doc.mjs +10 -5
- package/src/Breadcrumbs/BreadcrumbItem.spec.md +225 -0
- package/src/Breadcrumbs/BreadcrumbItem.tsx +8 -13
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +2 -2
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +49 -2
- package/src/Center/Center.doc.mjs +32 -28
- package/src/Center/Center.spec.md +225 -0
- package/src/Center/Center.test.tsx +42 -4
- package/src/Center/Center.tsx +24 -17
- package/src/Chat/ChatSystemMessage.test.tsx +2 -9
- package/src/CodeBlock/CodeBlock.doc.mjs +2 -2
- package/src/CodeBlock/CodeBlock.tsx +2 -2
- package/src/DateInput/DateInput.test.tsx +4 -4
- package/src/DateInput/DateInput.tsx +15 -4
- package/src/DateRangeInput/DateRangeInput.test.tsx +2 -2
- package/src/DateTimeInput/DateTimeInput.test.tsx +6 -4
- package/src/DateTimeInput/DateTimeInput.tsx +18 -7
- package/src/DropdownMenu/DropdownMenuSelectable.test.tsx +4 -77
- package/src/Field/Field.test.tsx +42 -0
- package/src/Field/Field.tsx +6 -0
- package/src/Field/InputClearButton.test.tsx +35 -1
- package/src/Field/InputClearButton.tsx +7 -3
- package/src/Field/PanelSearchInput.tsx +21 -8
- package/src/FieldStatus/FieldStatus.spec.md +27 -17
- package/src/FieldStatus/FieldStatus.test.tsx +7 -5
- package/src/FieldStatus/__tests__/StatusMessage.a11y.chromium.spec.ts +198 -0
- package/src/FieldStatus/__tests__/StatusMessage.a11y.known-failures.ts +13 -0
- package/src/FieldStatus/__tests__/StatusMessage.a11y.renders.tsx +305 -0
- package/src/FieldStatus/__tests__/StatusMessage.a11y.states.ts +317 -0
- package/src/FieldStatus/__tests__/StatusMessage.a11y.test.tsx +155 -0
- package/src/FileInput/FileInput.tsx +10 -1
- package/src/FormLayout/__snapshots__/FormLayout.test.tsx.snap +3 -3
- package/src/HoverCard/HoverCard.doc.mjs +4 -4
- package/src/HoverCard/useHoverCard.tsx +2 -2
- package/src/Indicator/CheckboxIndicator.tsx +2 -2
- package/src/Indicator/Indicator.doc.mjs +2 -2
- package/src/Indicator/Indicator.test.tsx +1 -1
- package/src/Indicator/RadioIndicator.tsx +2 -2
- package/src/Layer/layerStack.ts +20 -9
- package/src/Layer/useLayerDismissal.ts +2 -3
- package/src/MultiSelector/MultiSelector.test.tsx +4 -4
- package/src/NavIcon/NavIcon.doc.mjs +4 -4
- package/src/NavIcon/NavIcon.tsx +2 -2
- package/src/NumberInput/NumberInput.tsx +18 -7
- package/src/Popover/Popover.doc.mjs +10 -10
- package/src/Popover/Popover.spec.md +55 -65
- package/src/Popover/Popover.test.tsx +29 -0
- package/src/Popover/usePopover.doc.mjs +4 -4
- package/src/Popover/usePopover.tsx +7 -4
- package/src/ProgressBar/ProgressBar.doc.mjs +4 -4
- package/src/ProgressBar/ProgressBar.test.tsx +1 -31
- package/src/ProgressBar/ProgressBar.tsx +2 -2
- package/src/RadioList/RadioList.test.tsx +5 -144
- package/src/RadioList/__tests__/RadioGroup.a11y.chromium.spec.ts +255 -0
- package/src/RadioList/__tests__/RadioGroup.a11y.known-failures.ts +12 -0
- package/src/RadioList/__tests__/RadioGroup.a11y.renders.tsx +232 -0
- package/src/RadioList/__tests__/RadioGroup.a11y.states.ts +503 -0
- package/src/RadioList/__tests__/RadioGroup.a11y.test.tsx +217 -0
- package/src/ScrollableArea/ScrollableArea.doc.mjs +100 -0
- package/src/ScrollableArea/ScrollableArea.spec.md +189 -0
- package/src/ScrollableArea/ScrollableArea.test.tsx +299 -0
- package/src/ScrollableArea/ScrollableArea.tsx +259 -0
- package/src/ScrollableArea/index.ts +26 -0
- package/src/ScrollableArea/modules/useScrollableArea.spec.md +121 -0
- package/src/SegmentedControl/SegmentedControl.test.tsx +5 -172
- package/src/Selector/Selector.test.tsx +4 -4
- package/src/Spinner/Spinner.test.tsx +0 -18
- package/src/StatusDot/StatusDot.doc.mjs +4 -4
- package/src/StatusDot/StatusDot.tsx +2 -2
- package/src/TabList/TabList.test.tsx +5 -9
- package/src/TabList/__tests__/Tabs.a11y.chromium.spec.ts +191 -0
- package/src/TabList/__tests__/Tabs.a11y.known-failures.ts +45 -0
- package/src/TabList/__tests__/Tabs.a11y.renders.tsx +92 -0
- package/src/TabList/__tests__/Tabs.a11y.states.ts +247 -0
- package/src/TabList/__tests__/Tabs.a11y.test.tsx +153 -0
- package/src/Table/Table.doc.mjs +2 -2
- package/src/TextArea/TextArea.doc.mjs +4 -4
- package/src/TextArea/TextArea.tsx +2 -2
- package/src/TextInput/TextInput.doc.mjs +2 -1
- package/src/TextInput/TextInput.test.tsx +94 -0
- package/src/TextInput/TextInput.tsx +22 -6
- package/src/TimeInput/TimeInput.tsx +18 -7
- package/src/Toast/ToastViewport.test.tsx +1 -39
- package/src/Typeahead/BaseTypeahead.doc.mjs +229 -33
- package/src/Typeahead/BaseTypeahead.spec.md +269 -0
- package/src/Typeahead/BaseTypeahead.test.tsx +200 -0
- package/src/Typeahead/BaseTypeahead.tsx +99 -30
- package/src/hooks/index.ts +13 -0
- package/src/hooks/scrollGeometry.ts +155 -0
- package/src/hooks/scrollOwnerRegistry.ts +47 -0
- package/src/hooks/useFocusTrap.ts +22 -11
- package/src/hooks/useFocusTrapEscapeShim.test.tsx +4 -3
- package/src/hooks/useScrollableArea.doc.mjs +108 -0
- package/src/hooks/useScrollableArea.test.tsx +437 -0
- package/src/hooks/useScrollableArea.ts +469 -0
- package/src/index.ts +1 -0
- package/src/theme/defineTheme.test.ts +65 -105
- package/src/theme/defineTheme.ts +3 -9
- package/src/theme/derivedVarRegistry.ts +1 -1
- package/src/theme/localTokens.ts +25 -96
- package/src/theme/publicThemeHelperContract.test.ts +2 -2
- package/src/theme/themeAdaptations.test.ts +16 -42
- package/src/theme/themeAdaptations.ts +6 -9
- package/src/utils/themeProps.test.ts +29 -10
- package/src/utils/themeProps.ts +36 -17
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/TextInput/TextInput.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TextInput.d.ts","sourceRoot":"","sources":["../../src/TextInput/TextInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -24,7 +24,7 @@ import { renderIconSlot } from "../Icon/index.js";
|
|
|
24
24
|
import { Spinner } from "../Spinner/index.js";
|
|
25
25
|
import { useTooltip } from "../Tooltip/index.js";
|
|
26
26
|
import { VisuallyHidden } from "../VisuallyHidden/index.js";
|
|
27
|
-
import { getInputARIA } from "../utils/index.js";
|
|
27
|
+
import { getInputARIA, isImeKeyEvent } from "../utils/index.js";
|
|
28
28
|
const sizeStyles = {
|
|
29
29
|
sm: {
|
|
30
30
|
kZKoxP: "x6k0iem",
|
|
@@ -160,9 +160,19 @@ export function TextInput({
|
|
|
160
160
|
};
|
|
161
161
|
|
|
162
162
|
// Handle clear button click
|
|
163
|
-
const handleClear = useCallback(
|
|
163
|
+
const handleClear = useCallback(e => {
|
|
164
164
|
onChange?.('', null);
|
|
165
|
-
|
|
165
|
+
if (!e || e.detail === 0) {
|
|
166
|
+
inputRef.current?.focus();
|
|
167
|
+
} else {
|
|
168
|
+
// Defer focus restoration past the button's unmount task so iOS Safari
|
|
169
|
+
// and touch browsers don't jump the page scroll to 0 on tap.
|
|
170
|
+
requestAnimationFrame(() => {
|
|
171
|
+
inputRef.current?.focus({
|
|
172
|
+
preventScroll: true
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
}
|
|
166
176
|
}, [onChange]);
|
|
167
177
|
|
|
168
178
|
// Focus input when clicking anywhere on the wrapper (icons, padding, etc.)
|
|
@@ -205,7 +215,12 @@ export function TextInput({
|
|
|
205
215
|
value: optimisticValue,
|
|
206
216
|
onChange: handleChange,
|
|
207
217
|
onKeyDown: onEnter || onKeyDown ? e => {
|
|
208
|
-
|
|
218
|
+
// The composing keydown fires before compositionend, so without
|
|
219
|
+
// this guard pressing Enter to commit a Japanese/Chinese/Korean
|
|
220
|
+
// IME conversion would trigger onEnter (submit/save actions)
|
|
221
|
+
// before the user intends to submit. onKeyDown still receives
|
|
222
|
+
// the raw event. See utils/ime.ts (#6082).
|
|
223
|
+
if (e.key === 'Enter' && !isImeKeyEvent(e.nativeEvent)) {
|
|
209
224
|
onEnter?.();
|
|
210
225
|
}
|
|
211
226
|
onKeyDown?.(e);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../../src/TimeInput/TimeInput.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"TimeInput.d.ts","sourceRoot":"","sources":["../../src/TimeInput/TimeInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -317,11 +317,21 @@ export function TimeInput({
|
|
|
317
317
|
}, [value, hasSeconds, increment, min, max, fireChange, isDisabled, announce, formatDisplayTime]);
|
|
318
318
|
|
|
319
319
|
// Handle clear button click
|
|
320
|
-
const handleClear = useCallback(
|
|
320
|
+
const handleClear = useCallback(e => {
|
|
321
321
|
fireChange(undefined);
|
|
322
322
|
// Focusing a native time control reopens the OS picker on iOS.
|
|
323
323
|
if (!usesNativeTimePicker) {
|
|
324
|
-
|
|
324
|
+
if (!e || e.detail === 0) {
|
|
325
|
+
inputRef.current?.focus();
|
|
326
|
+
} else {
|
|
327
|
+
// Defer focus restoration past the button's unmount task so iOS Safari
|
|
328
|
+
// and touch browsers don't jump the page scroll to 0 on tap.
|
|
329
|
+
requestAnimationFrame(() => {
|
|
330
|
+
inputRef.current?.focus({
|
|
331
|
+
preventScroll: true
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
}
|
|
325
335
|
}
|
|
326
336
|
}, [fireChange, usesNativeTimePicker]);
|
|
327
337
|
|
|
@@ -48,7 +48,7 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
48
48
|
* @default 10
|
|
49
49
|
*/
|
|
50
50
|
maxMenuItems?: number;
|
|
51
|
-
/**
|
|
51
|
+
/** Requested dropdown width in pixels before viewport clamping. */
|
|
52
52
|
menuWidth?: number;
|
|
53
53
|
/**
|
|
54
54
|
* Minimum query length before the search source is queried. Below it no
|
|
@@ -56,8 +56,8 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
56
56
|
* for a result set that cannot be meaningful yet — and the user does not
|
|
57
57
|
* see "no results" for a query that was never searched.
|
|
58
58
|
*
|
|
59
|
-
* Measured
|
|
60
|
-
*
|
|
59
|
+
* Measured by grapheme cluster, so one visible character counts once even
|
|
60
|
+
* when JavaScript represents it with multiple UTF-16 code units.
|
|
61
61
|
*
|
|
62
62
|
* @default 1 — every non-empty query is searched.
|
|
63
63
|
*/
|
|
@@ -76,8 +76,10 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
76
76
|
* When disabled with a reason, keeps the input focusable via `aria-disabled`
|
|
77
77
|
* (instead of the native `disabled` attribute) and `readOnly` so an
|
|
78
78
|
* associated disabled-reason tooltip stays discoverable by keyboard and
|
|
79
|
-
* assistive technology.
|
|
80
|
-
*
|
|
79
|
+
* assistive technology. Query and text mutation are blocked, but an
|
|
80
|
+
* already-open highlighted option can still be selected with Enter after a
|
|
81
|
+
* transition into this state. Consumers (Typeahead) own the tooltip and
|
|
82
|
+
* wrapper.
|
|
81
83
|
* @default false
|
|
82
84
|
*/
|
|
83
85
|
isFocusableDisabled?: boolean;
|
|
@@ -122,15 +124,18 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
122
124
|
*/
|
|
123
125
|
debounceMs?: number;
|
|
124
126
|
/**
|
|
125
|
-
*
|
|
127
|
+
* Legacy input-specific alias for the native `id` prop. When provided, this
|
|
128
|
+
* alias takes precedence; otherwise the native prop is preserved.
|
|
126
129
|
*/
|
|
127
130
|
inputId?: string;
|
|
128
131
|
/**
|
|
129
|
-
*
|
|
132
|
+
* Legacy input-specific alias for native `aria-describedby`. When provided,
|
|
133
|
+
* this alias takes precedence; otherwise the native prop is preserved.
|
|
130
134
|
*/
|
|
131
135
|
ariaDescribedBy?: string;
|
|
132
136
|
/**
|
|
133
|
-
*
|
|
137
|
+
* Legacy input-specific alias for native `aria-labelledby`. When provided,
|
|
138
|
+
* this alias takes precedence; otherwise the native prop is preserved.
|
|
134
139
|
*/
|
|
135
140
|
ariaLabelledBy?: string;
|
|
136
141
|
/**
|
|
@@ -138,12 +143,13 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
138
143
|
*/
|
|
139
144
|
inputXStyle?: StyleXStyles;
|
|
140
145
|
/**
|
|
141
|
-
*
|
|
142
|
-
*
|
|
143
|
-
*
|
|
144
|
-
*
|
|
145
|
-
*
|
|
146
|
-
*
|
|
146
|
+
* Legacy input-specific alias for native `tabIndex`. When provided, this
|
|
147
|
+
* alias takes precedence; otherwise the native prop is preserved. Typeahead
|
|
148
|
+
* passes `-1` while its selected-value token is shown: the input is visually
|
|
149
|
+
* collapsed (width 0 / opacity 0) but must stay programmatically focusable
|
|
150
|
+
* for token edit/clear interactions, so removing it from the Tab order is
|
|
151
|
+
* what prevents an invisible tab stop (WCAG 2.4.3 / 2.4.7). The input remains
|
|
152
|
+
* focusable via `.focus()` regardless of this value.
|
|
147
153
|
*/
|
|
148
154
|
inputTabIndex?: number;
|
|
149
155
|
/**
|
|
@@ -178,6 +184,7 @@ export interface BaseTypeaheadProps<T extends SearchableItem> extends Omit<BaseP
|
|
|
178
184
|
* searchSource={source}
|
|
179
185
|
* value={selected}
|
|
180
186
|
* onChange={setSelected}
|
|
187
|
+
* aria-label="Search frameworks"
|
|
181
188
|
* anchorRef={wrapperRef}
|
|
182
189
|
* placeholder="Search..."
|
|
183
190
|
* />
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseTypeahead.d.ts","sourceRoot":"","sources":["../../src/Typeahead/BaseTypeahead.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BaseTypeahead.d.ts","sourceRoot":"","sources":["../../src/Typeahead/BaseTypeahead.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,EAMZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AAyBnD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;AAS1D,MAAM,WAAW,kBAAkB,CAAC,CAAC,SAAS,cAAc,CAAE,SAAQ,IAAI,CACxE,SAAS,CAAC,WAAW,CAAC,EACtB,UAAU,CACX;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAE9B;;OAEG;IACH,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAEhB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAEnC;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,SAAS,CAAC;IAEpC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAE5B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAEhC;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAEzC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;IAEtD;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC;IAE3B;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAE1C;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IAE/D;;;;OAIG;IACH,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC3B;AA+JD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,aAAa,EA2tBrB,CAAC,CAAC,SAAS,cAAc,EAC5B,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,KACzB,KAAK,CAAC,YAAY,CAAC"}
|
|
@@ -28,8 +28,8 @@ import { TypeaheadItem } from "./TypeaheadItem.js";
|
|
|
28
28
|
import { Icon } from "../Icon/index.js";
|
|
29
29
|
import { Spinner } from "../Spinner/index.js";
|
|
30
30
|
import "../theme/tokens.stylex.js";
|
|
31
|
-
import { colorVars, spacingVars, radiusVars, typographyVars, fontWeightVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
32
|
-
import { getKey, groupItems, mergeProps } from "../utils/index.js";
|
|
31
|
+
import { borderVars, colorVars, spacingVars, radiusVars, typographyVars, fontWeightVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
32
|
+
import { characterCount, composeEventHandlers, getKey, groupItems, mergeProps } from "../utils/index.js";
|
|
33
33
|
import { themeProps } from "../utils/themeProps.js";
|
|
34
34
|
import { useTranslator } from "../i18n/index.js";
|
|
35
35
|
import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
@@ -37,14 +37,17 @@ import { useMergedRefs } from "../hooks/useMergedRefs.js";
|
|
|
37
37
|
// Types
|
|
38
38
|
// =============================================================================
|
|
39
39
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
40
|
-
const _temp = {
|
|
41
|
-
kzqmXN: "x5lhr3w",
|
|
42
|
-
"$$css": true
|
|
43
|
-
};
|
|
44
40
|
// =============================================================================
|
|
45
41
|
// Styles
|
|
46
42
|
// =============================================================================
|
|
47
43
|
|
|
44
|
+
const TYPEAHEAD_VIEWPORT_GUTTER = spacingVars['--spacing-4'];
|
|
45
|
+
const TYPEAHEAD_POSITION_AREA_MAX_INLINE_SIZE = `calc(100% - max(${TYPEAHEAD_VIEWPORT_GUTTER}, env(safe-area-inset-left, 0px), env(safe-area-inset-right, 0px)))`;
|
|
46
|
+
const TYPEAHEAD_POSITION_AREA_MAX_INLINE_SIZE_FALLBACK = `calc(100% - ${TYPEAHEAD_VIEWPORT_GUTTER})`;
|
|
47
|
+
const _temp = {
|
|
48
|
+
kzqmXN: "x5lhr3w",
|
|
49
|
+
"$$css": true
|
|
50
|
+
};
|
|
48
51
|
const styles = {
|
|
49
52
|
input: {
|
|
50
53
|
k1xSpc: "x1lliihq",
|
|
@@ -67,7 +70,9 @@ const styles = {
|
|
|
67
70
|
$$css: true
|
|
68
71
|
},
|
|
69
72
|
popover: {
|
|
73
|
+
kB7OPa: "x9f619",
|
|
70
74
|
k7Eaqz: "xrzjruh",
|
|
75
|
+
ks0D6T: "xbd96yr",
|
|
71
76
|
$$css: true
|
|
72
77
|
},
|
|
73
78
|
popoverCustomWidth: width => [_temp, {
|
|
@@ -88,11 +93,19 @@ const styles = {
|
|
|
88
93
|
},
|
|
89
94
|
itemHighlighted: {
|
|
90
95
|
kWkggS: "x1lmrjuc",
|
|
96
|
+
kjBf7l: "x1x84bn5",
|
|
97
|
+
k3XXqK: "x815t2r",
|
|
98
|
+
kMeerF: "x1xvue0r",
|
|
91
99
|
$$css: true
|
|
92
100
|
},
|
|
93
101
|
itemSelected: {
|
|
94
102
|
k63SB2: "x1e4wzip",
|
|
95
103
|
$$css: true
|
|
104
|
+
},
|
|
105
|
+
defaultItem: {
|
|
106
|
+
k7Eaqz: "xeuugli",
|
|
107
|
+
kzqmXN: "xh8yej3",
|
|
108
|
+
$$css: true
|
|
96
109
|
}
|
|
97
110
|
};
|
|
98
111
|
|
|
@@ -127,7 +140,8 @@ const itemSizeStyles = {
|
|
|
127
140
|
* untouched state, and `hasEntriesOnFocus` owns what happens there.
|
|
128
141
|
*/
|
|
129
142
|
function isBelowMinQueryLength(query, minQueryLength) {
|
|
130
|
-
|
|
143
|
+
const length = characterCount(query);
|
|
144
|
+
return length > 0 && length < minQueryLength;
|
|
131
145
|
}
|
|
132
146
|
|
|
133
147
|
// =============================================================================
|
|
@@ -148,6 +162,7 @@ function isBelowMinQueryLength(query, minQueryLength) {
|
|
|
148
162
|
* searchSource={source}
|
|
149
163
|
* value={selected}
|
|
150
164
|
* onChange={setSelected}
|
|
165
|
+
* aria-label="Search frameworks"
|
|
151
166
|
* anchorRef={wrapperRef}
|
|
152
167
|
* placeholder="Search..."
|
|
153
168
|
* />
|
|
@@ -179,13 +194,29 @@ export const BaseTypeahead = function BaseTypeahead({
|
|
|
179
194
|
onKeyDown: externalOnKeyDown,
|
|
180
195
|
debounceMs = 150,
|
|
181
196
|
size = 'md',
|
|
182
|
-
|
|
197
|
+
xstyle,
|
|
198
|
+
className,
|
|
199
|
+
style,
|
|
200
|
+
onPointerDown: onPointerDownProp,
|
|
201
|
+
onFocus: onFocusProp,
|
|
202
|
+
onBlur: onBlurProp,
|
|
203
|
+
id: nativeInputId,
|
|
204
|
+
'aria-describedby': nativeAriaDescribedBy,
|
|
205
|
+
'aria-labelledby': nativeAriaLabelledBy,
|
|
206
|
+
tabIndex: nativeInputTabIndex,
|
|
207
|
+
ref,
|
|
208
|
+
...rest
|
|
183
209
|
}) {
|
|
184
210
|
const t = useTranslator();
|
|
185
211
|
const placeholder = placeholderFromProps ?? t('@astryx.typeahead.searchPlaceholder');
|
|
186
212
|
const emptySearchResultsText = emptySearchResultsTextFromProps ?? t('@astryx.typeahead.emptySearchResults');
|
|
187
213
|
const generatedId = useId();
|
|
188
|
-
|
|
214
|
+
// Keep the released input-specific aliases authoritative when a caller uses
|
|
215
|
+
// them, but do not let an omitted alias erase the equivalent native BaseProp.
|
|
216
|
+
const inputId = externalInputId ?? nativeInputId ?? generatedId;
|
|
217
|
+
const inputAriaDescribedBy = ariaDescribedBy ?? nativeAriaDescribedBy;
|
|
218
|
+
const inputAriaLabelledBy = ariaLabelledBy ?? nativeAriaLabelledBy;
|
|
219
|
+
const resolvedInputTabIndex = inputTabIndex ?? nativeInputTabIndex;
|
|
189
220
|
const listboxId = useId();
|
|
190
221
|
const inputRef = useRef(null);
|
|
191
222
|
const fallbackAnchorRef = useRef(null);
|
|
@@ -610,6 +641,7 @@ export const BaseTypeahead = function BaseTypeahead({
|
|
|
610
641
|
}, [searchSource]);
|
|
611
642
|
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
612
643
|
children: [/*#__PURE__*/_jsx("input", {
|
|
644
|
+
...rest,
|
|
613
645
|
ref: useMergedRefs(ref, inputRef, fallbackAnchorRef),
|
|
614
646
|
id: inputId,
|
|
615
647
|
type: "text",
|
|
@@ -619,34 +651,35 @@ export const BaseTypeahead = function BaseTypeahead({
|
|
|
619
651
|
"aria-activedescendant": popover.isOpen && highlightedIndex >= 0 && highlightedIndex < results.length ? getItemId(highlightedIndex) : undefined,
|
|
620
652
|
"aria-autocomplete": "list",
|
|
621
653
|
"aria-busy": isLoading || undefined,
|
|
622
|
-
"aria-describedby":
|
|
623
|
-
"aria-labelledby":
|
|
654
|
+
"aria-describedby": inputAriaDescribedBy,
|
|
655
|
+
"aria-labelledby": inputAriaLabelledBy,
|
|
624
656
|
"aria-disabled": isFocusableDisabled ? 'true' : undefined,
|
|
625
|
-
tabIndex:
|
|
657
|
+
tabIndex: resolvedInputTabIndex,
|
|
626
658
|
value: query,
|
|
627
659
|
onChange: handleInputChange,
|
|
628
|
-
onPointerDown: () => {
|
|
660
|
+
onPointerDown: composeEventHandlers(() => {
|
|
629
661
|
pointerActiveRef.current = true;
|
|
630
662
|
document.addEventListener('click', () => {
|
|
631
663
|
pointerActiveRef.current = false;
|
|
632
664
|
}, {
|
|
633
665
|
once: true
|
|
634
666
|
});
|
|
635
|
-
},
|
|
636
|
-
onFocus: handleFocus,
|
|
637
|
-
onBlur: handleBlur,
|
|
667
|
+
}, onPointerDownProp),
|
|
668
|
+
onFocus: composeEventHandlers(handleFocus, onFocusProp),
|
|
669
|
+
onBlur: composeEventHandlers(handleBlur, onBlurProp),
|
|
638
670
|
onKeyDown: handleKeyDown,
|
|
639
671
|
placeholder: placeholder
|
|
640
672
|
// When a disabled-reason tooltip is shown the input keeps focusability
|
|
641
673
|
// via aria-disabled + readOnly instead of the native disabled
|
|
642
|
-
// attribute
|
|
674
|
+
// attribute. Query and text mutation are blocked, but an already-open
|
|
675
|
+
// highlighted option can still be selected with Enter after transition.
|
|
643
676
|
,
|
|
644
677
|
disabled: isDisabled && !isFocusableDisabled,
|
|
645
678
|
readOnly: isFocusableDisabled || undefined,
|
|
646
679
|
autoFocus: hasAutoFocus,
|
|
647
680
|
"data-autofocus": hasAutoFocus || undefined,
|
|
648
681
|
autoComplete: "off",
|
|
649
|
-
...stylex.props(styles.input, isDisabled && styles.inputDisabled, inputXStyle)
|
|
682
|
+
...mergeProps(stylex.props(styles.input, isDisabled && styles.inputDisabled, inputXStyle, xstyle), className, style)
|
|
650
683
|
}), isLoading && busyLane == null && /*#__PURE__*/_jsx("span", {
|
|
651
684
|
...{
|
|
652
685
|
className: "x3nfvp2 x6s0dn4 xl56j7k x2lah0s x9epnlk"
|
|
@@ -663,6 +696,8 @@ export const BaseTypeahead = function BaseTypeahead({
|
|
|
663
696
|
className: "x9f619 xuyqlj2 x1odjw0f x9epnlk"
|
|
664
697
|
}),
|
|
665
698
|
children: results.length === 0 && hasSearched ? /*#__PURE__*/_jsx("div", {
|
|
699
|
+
role: "option",
|
|
700
|
+
"aria-disabled": "true",
|
|
666
701
|
...mergeProps(themeProps('typeahead-empty-state'), {
|
|
667
702
|
className: "x1b2ylru x2b8uid x141an7d xv1l7n4"
|
|
668
703
|
}),
|
|
@@ -683,10 +718,11 @@ export const BaseTypeahead = function BaseTypeahead({
|
|
|
683
718
|
...stylex.props(styles.item, itemSizeStyles[size], index === highlightedIndex && styles.itemHighlighted, isSelected && styles.itemSelected),
|
|
684
719
|
children: [/*#__PURE__*/_jsx("span", {
|
|
685
720
|
...{
|
|
686
|
-
className: "x78zum5 x98rzlu xeuugli"
|
|
721
|
+
className: "x78zum5 x98rzlu xeuugli xb3r6kr"
|
|
687
722
|
},
|
|
688
723
|
children: renderItem ? renderItem(item) : /*#__PURE__*/_jsx(TypeaheadItem, {
|
|
689
|
-
item: item
|
|
724
|
+
item: item,
|
|
725
|
+
xstyle: styles.defaultItem
|
|
690
726
|
})
|
|
691
727
|
}), isSelected && /*#__PURE__*/_jsx(Icon, {
|
|
692
728
|
icon: "check",
|
package/dist/astryx.css
CHANGED
|
@@ -36,6 +36,8 @@
|
|
|
36
36
|
@property --x-maxWidth { syntax: "*"; inherits: false;}
|
|
37
37
|
@property --x-minHeight { syntax: "*"; inherits: false;}
|
|
38
38
|
@property --x-minWidth { syntax: "*"; inherits: false;}
|
|
39
|
+
@property --x-overflowX { syntax: "*"; inherits: false;}
|
|
40
|
+
@property --x-overflowY { syntax: "*"; inherits: false;}
|
|
39
41
|
@property --x-paddingBlock { syntax: "*"; inherits: false;}
|
|
40
42
|
@property --x-paddingInline { syntax: "*"; inherits: false;}
|
|
41
43
|
@property --x-paddingInlineEnd { syntax: "*"; inherits: false;}
|
|
@@ -1167,6 +1169,9 @@
|
|
|
1167
1169
|
.xrw9175:not(#\#):not(#\#):not(#\#){scroll-padding-block-end:48px}
|
|
1168
1170
|
.x1hdbdi8:not(#\#):not(#\#):not(#\#){scroll-snap-align:center}
|
|
1169
1171
|
.x1bhewko:not(#\#):not(#\#):not(#\#){scroll-snap-align:start}
|
|
1172
|
+
.x19jbwzc:not(#\#):not(#\#):not(#\#){scrollbar-color:var(--color-neutral) transparent}
|
|
1173
|
+
.x24f09q:not(#\#):not(#\#):not(#\#){scrollbar-gutter:auto}
|
|
1174
|
+
.xosa0jh:not(#\#):not(#\#):not(#\#){scrollbar-width:auto}
|
|
1170
1175
|
.x1rohswg:not(#\#):not(#\#):not(#\#){scrollbar-width:none}
|
|
1171
1176
|
.x1vy8frr:not(#\#):not(#\#):not(#\#){stroke-dasharray:calc(var(--_spinner-ring-diameter) * 1.1780972450961724) calc(var(--_spinner-ring-diameter) * 1.9634954084936207)}
|
|
1172
1177
|
.x1owpc8m:not(#\#):not(#\#):not(#\#){stroke-linecap:round}
|
|
@@ -1326,6 +1331,7 @@
|
|
|
1326
1331
|
.x5um2zc.x5um2zc:where(.x1twag4g:first-child *):not(#\#):not(#\#):not(#\#){visibility:hidden}
|
|
1327
1332
|
.x1se5z8o.x1se5z8o:where(.x1twag4g:last-child *):not(#\#):not(#\#):not(#\#){visibility:hidden}
|
|
1328
1333
|
@supports (animation-timeline: view()){.x1iu2jvn.x1iu2jvn:not(#\#):not(#\#):not(#\#){animation-name:x1tut0r7-B}}
|
|
1334
|
+
@supports (container-type: scroll-state){.xafyuhj.xafyuhj:not(#\#):not(#\#):not(#\#){container-type:scroll-state}}
|
|
1329
1335
|
.xfd3fxj:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#){animation-name:x1c2q33o-B}
|
|
1330
1336
|
.x1vxsm5i:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#){animation-name:xu7jd1z-B}
|
|
1331
1337
|
.x18lne9g:is([dir="rtl"] *):not(#\#):not(#\#):not(#\#){animation-name:xwmkjkf-B}
|
|
@@ -1446,7 +1452,11 @@
|
|
|
1446
1452
|
@media (pointer: coarse){.x1jymrmb.x1jymrmb:not(#\#):not(#\#):not(#\#){margin-inline-start:auto}}
|
|
1447
1453
|
@media (forced-colors: active){.x1tbh5bv.x1tbh5bv:not(#\#):not(#\#):not(#\#){opacity:1}}
|
|
1448
1454
|
@media (pointer: coarse){.xozvky.xozvky:not(#\#):not(#\#):not(#\#){order:1}}
|
|
1455
|
+
@media (forced-colors: active){.x1x84bn5.x1x84bn5:not(#\#):not(#\#):not(#\#){outline-color:Highlight}}
|
|
1456
|
+
@media (forced-colors: active){.x815t2r.x815t2r:not(#\#):not(#\#):not(#\#){outline-style:solid}}
|
|
1457
|
+
@media (forced-colors: active){.x1xvue0r.x1xvue0r:not(#\#):not(#\#):not(#\#){outline-width:var(--border-width)}}
|
|
1449
1458
|
@media (prefers-reduced-motion: reduce){.xg83hb1.xg83hb1:not(#\#):not(#\#):not(#\#){scroll-behavior:auto}}
|
|
1459
|
+
@media (forced-colors: active){.xrih18v.xrih18v:not(#\#):not(#\#):not(#\#){scrollbar-color:auto}}
|
|
1450
1460
|
@media (prefers-reduced-motion: reduce){.xwgk2z2.xwgk2z2:not(#\#):not(#\#):not(#\#){transition-delay:var(--_reveal-delay-reduced,0s,0s)}}
|
|
1451
1461
|
@media (prefers-reduced-motion: reduce){.xsagj69.xsagj69:not(#\#):not(#\#):not(#\#){transition-duration:.01ms}}
|
|
1452
1462
|
@media (prefers-reduced-motion: reduce){.xzg1mie.xzg1mie:not(#\#):not(#\#):not(#\#){transition-duration:.01s}}
|
|
@@ -1649,6 +1659,7 @@
|
|
|
1649
1659
|
.x1ap80js:not(#\#):not(#\#):not(#\#):not(#\#){max-width:800px}
|
|
1650
1660
|
.xq8v1hd:not(#\#):not(#\#):not(#\#):not(#\#){max-width:90%}
|
|
1651
1661
|
.xbd96yr:not(#\#):not(#\#):not(#\#):not(#\#){max-width:calc(100% - var(--spacing-4));max-width:calc(100% - max(var(--spacing-4),env(safe-area-inset-left,0px),env(safe-area-inset-right,0px)))}
|
|
1662
|
+
.x1rfgw7b:not(#\#):not(#\#):not(#\#):not(#\#){max-width:calc(100% + var(--container-padding-inline-start,0px) + var(--container-padding-inline-end,0px))}
|
|
1652
1663
|
.xs2v1xk:not(#\#):not(#\#):not(#\#):not(#\#){max-width:calc(100vw - var(--spacing-4) - var(--spacing-4));max-width:calc(100vi - max(var(--spacing-4),env(safe-area-inset-left,0px)) - max(var(--spacing-4),env(safe-area-inset-right,0px)))}
|
|
1653
1664
|
.xl6temz:not(#\#):not(#\#):not(#\#):not(#\#){max-width:max(80%,280px)}
|
|
1654
1665
|
.x1m1aaou:not(#\#):not(#\#):not(#\#):not(#\#){max-width:min(960px,calc(100dvw - var(--spacing-4)))}
|
|
@@ -1673,6 +1684,7 @@
|
|
|
1673
1684
|
.x82snj4:not(#\#):not(#\#):not(#\#):not(#\#){min-height:var(--x-minHeight)}
|
|
1674
1685
|
.x1dg37ty:not(#\#):not(#\#):not(#\#):not(#\#){min-height:44px}
|
|
1675
1686
|
.xeuugli:not(#\#):not(#\#):not(#\#):not(#\#){min-width:0}
|
|
1687
|
+
.xgqtt45:not(#\#):not(#\#):not(#\#):not(#\#){min-width:100%}
|
|
1676
1688
|
.x1i9suas:not(#\#):not(#\#):not(#\#):not(#\#){min-width:120px}
|
|
1677
1689
|
.x1d77m7x:not(#\#):not(#\#):not(#\#):not(#\#){min-width:140px}
|
|
1678
1690
|
.x12knhqr:not(#\#):not(#\#):not(#\#):not(#\#){min-width:160px;min-width:min(160px,calc(100vw - var(--spacing-4) - var(--spacing-4)));min-width:min(160px,calc(100vi - max(var(--spacing-4),env(safe-area-inset-left,0px)) - max(var(--spacing-4),env(safe-area-inset-right,0px))))}
|
|
@@ -1703,8 +1715,10 @@
|
|
|
1703
1715
|
.x1tutbut:not(#\#):not(#\#):not(#\#):not(#\#){min-width:44px}
|
|
1704
1716
|
.xw2csxc:not(#\#):not(#\#):not(#\#):not(#\#){overflow-x:auto}
|
|
1705
1717
|
.x6ikm8r:not(#\#):not(#\#):not(#\#):not(#\#){overflow-x:hidden}
|
|
1718
|
+
.xyto64x:not(#\#):not(#\#):not(#\#):not(#\#){overflow-x:var(--x-overflowX)}
|
|
1706
1719
|
.x1odjw0f:not(#\#):not(#\#):not(#\#):not(#\#){overflow-y:auto}
|
|
1707
1720
|
.x10wlt62:not(#\#):not(#\#):not(#\#):not(#\#){overflow-y:hidden}
|
|
1721
|
+
.x4ncuvb:not(#\#):not(#\#):not(#\#):not(#\#){overflow-y:var(--x-overflowY)}
|
|
1708
1722
|
.x7p5m3t:not(#\#):not(#\#):not(#\#):not(#\#){overscroll-behavior-x:contain}
|
|
1709
1723
|
.x18d9i69:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:0}
|
|
1710
1724
|
.x1j85h84:not(#\#):not(#\#):not(#\#):not(#\#){padding-bottom:1px}
|
|
@@ -1806,6 +1820,7 @@
|
|
|
1806
1820
|
.xx6qvi6:not(#\#):not(#\#):not(#\#):not(#\#){width:calc(100% + var(--container-padding-inline-start,0px) + var(--container-padding-inline-end,0px))}
|
|
1807
1821
|
.x1y2t9nm:not(#\#):not(#\#):not(#\#):not(#\#){width:calc(44px - 8px)}
|
|
1808
1822
|
.xeq5yr9:not(#\#):not(#\#):not(#\#):not(#\#){width:fit-content}
|
|
1823
|
+
.xezivpi:not(#\#):not(#\#):not(#\#):not(#\#){width:max-content}
|
|
1809
1824
|
.x63cpjl:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--_progressbar-mark-width,2px)}
|
|
1810
1825
|
.x6v0vjy:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--_spinner-box-size)}
|
|
1811
1826
|
.xjk4fl7:not(#\#):not(#\#):not(#\#):not(#\#){width:var(--border-width)}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export { useOverflow } from './useOverflow';
|
|
|
30
30
|
export type { UseOverflowOptions, UseOverflowReturn } from './useOverflow';
|
|
31
31
|
export { useScrollOverflow } from './useScrollOverflow';
|
|
32
32
|
export type { ScrollOverflowState } from './useScrollOverflow';
|
|
33
|
+
export { useScrollableArea } from './useScrollableArea';
|
|
34
|
+
export type { ScrollAxis, ScrollAxisState, ScrollOverscroll, ScrollStickyContainment, ScrollKeyboardAccess, ScrollableAreaState, ScrollableElementProps, UseScrollableAreaOptions, UseScrollableAreaResult, } from './useScrollableArea';
|
|
33
35
|
export { useScrollLock } from './useScrollLock';
|
|
34
36
|
export { useEntryAnimation } from './useEntryAnimation';
|
|
35
37
|
export type { EntryAnimationPreset } from './useEntryAnimation';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -23,6 +23,7 @@ export { useMediaQuery } from "./useMediaQuery.js";
|
|
|
23
23
|
export { useMergedRefs } from "./useMergedRefs.js";
|
|
24
24
|
export { useOverflow } from "./useOverflow.js";
|
|
25
25
|
export { useScrollOverflow } from "./useScrollOverflow.js";
|
|
26
|
+
export { useScrollableArea } from "./useScrollableArea.js";
|
|
26
27
|
export { useScrollLock } from "./useScrollLock.js";
|
|
27
28
|
export { useEntryAnimation } from "./useEntryAnimation.js";
|
|
28
29
|
export { useStreamingText } from "./useStreamingText.js";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** Shared geometry primitives for logical-axis scroll ownership. */
|
|
2
|
+
export declare const SCROLL_OVERFLOW_TOLERANCE = 1;
|
|
3
|
+
export type LogicalScrollAxis = 'inline' | 'block';
|
|
4
|
+
export type PhysicalScrollAxis = 'x' | 'y';
|
|
5
|
+
export interface LogicalAxisMapping {
|
|
6
|
+
inline: PhysicalScrollAxis;
|
|
7
|
+
block: PhysicalScrollAxis;
|
|
8
|
+
inlineReversed: boolean;
|
|
9
|
+
blockReversed: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface MeasuredScrollAxisState {
|
|
12
|
+
isScrollable: boolean;
|
|
13
|
+
atStart: boolean;
|
|
14
|
+
atEnd: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface LogicalOverflowGeometry {
|
|
17
|
+
inline: boolean;
|
|
18
|
+
block: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function getLogicalAxisMapping(writingMode: string, direction: string): LogicalAxisMapping;
|
|
21
|
+
export declare function isScrollCapableOverflow(value: string): boolean;
|
|
22
|
+
export declare function measureLogicalOverflowGeometry(element: HTMLElement, logicalAxis: LogicalScrollAxis, mapping: LogicalAxisMapping): boolean | null;
|
|
23
|
+
export declare function measureLogicalScrollAxis(element: HTMLElement, logicalAxis: LogicalScrollAxis, mapping: LogicalAxisMapping): MeasuredScrollAxisState | null;
|
|
24
|
+
//# sourceMappingURL=scrollGeometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollGeometry.d.ts","sourceRoot":"","sources":["../../src/hooks/scrollGeometry.ts"],"names":[],"mappings":"AAEA,oEAAoE;AAEpE,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AACnD,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,GAAG,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAQD,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAyBpB;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D;AAwCD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,kBAAkB,GAC1B,OAAO,GAAG,IAAI,CAYhB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,kBAAkB,GAC1B,uBAAuB,GAAG,IAAI,CA2BhC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/** Shared geometry primitives for logical-axis scroll ownership. */
|
|
4
|
+
|
|
5
|
+
export const SCROLL_OVERFLOW_TOLERANCE = 1;
|
|
6
|
+
const INACTIVE_AXIS_STATE = {
|
|
7
|
+
isScrollable: false,
|
|
8
|
+
atStart: true,
|
|
9
|
+
atEnd: true
|
|
10
|
+
};
|
|
11
|
+
export function getLogicalAxisMapping(writingMode, direction) {
|
|
12
|
+
const mode = writingMode.toLowerCase();
|
|
13
|
+
const isVertical = mode.startsWith('vertical') || mode.startsWith('sideways');
|
|
14
|
+
const isRtl = direction === 'rtl';
|
|
15
|
+
if (!isVertical) {
|
|
16
|
+
return {
|
|
17
|
+
inline: 'x',
|
|
18
|
+
block: 'y',
|
|
19
|
+
inlineReversed: isRtl,
|
|
20
|
+
blockReversed: false
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// sideways-lr runs its natural inline direction from bottom to top. The
|
|
25
|
+
// other vertical/sideways modes run top to bottom; `direction` reverses each.
|
|
26
|
+
const inlineReversed = mode === 'sideways-lr' ? !isRtl : isRtl;
|
|
27
|
+
const blockReversed = mode.endsWith('-rl');
|
|
28
|
+
return {
|
|
29
|
+
inline: 'y',
|
|
30
|
+
block: 'x',
|
|
31
|
+
inlineReversed,
|
|
32
|
+
blockReversed
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export function isScrollCapableOverflow(value) {
|
|
36
|
+
return value === 'auto' || value === 'scroll' || value === 'overlay';
|
|
37
|
+
}
|
|
38
|
+
function physicalMetrics(element, physicalAxis) {
|
|
39
|
+
const computedStyle = getComputedStyle(element);
|
|
40
|
+
if (physicalAxis === 'x') {
|
|
41
|
+
return {
|
|
42
|
+
clientExtent: element.clientWidth,
|
|
43
|
+
contentExtent: element.scrollWidth,
|
|
44
|
+
offset: element.scrollLeft,
|
|
45
|
+
overflow: computedStyle.overflowX
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
clientExtent: element.clientHeight,
|
|
50
|
+
contentExtent: element.scrollHeight,
|
|
51
|
+
offset: element.scrollTop,
|
|
52
|
+
overflow: computedStyle.overflowY
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function isMeasurable(element, computedStyle) {
|
|
56
|
+
return element.isConnected && computedStyle.display !== 'none' && element.clientWidth > 0 && element.clientHeight > 0;
|
|
57
|
+
}
|
|
58
|
+
export function measureLogicalOverflowGeometry(element, logicalAxis, mapping) {
|
|
59
|
+
const computedStyle = getComputedStyle(element);
|
|
60
|
+
if (!isMeasurable(element, computedStyle)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const physicalAxis = mapping[logicalAxis];
|
|
64
|
+
const clientExtent = physicalAxis === 'x' ? element.clientWidth : element.clientHeight;
|
|
65
|
+
const contentExtent = physicalAxis === 'x' ? element.scrollWidth : element.scrollHeight;
|
|
66
|
+
return contentExtent - clientExtent > SCROLL_OVERFLOW_TOLERANCE;
|
|
67
|
+
}
|
|
68
|
+
export function measureLogicalScrollAxis(element, logicalAxis, mapping) {
|
|
69
|
+
const computedStyle = getComputedStyle(element);
|
|
70
|
+
if (!isMeasurable(element, computedStyle)) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const physicalAxis = mapping[logicalAxis];
|
|
74
|
+
const metrics = physicalMetrics(element, physicalAxis);
|
|
75
|
+
const maxOffset = metrics.contentExtent - metrics.clientExtent;
|
|
76
|
+
if (!isScrollCapableOverflow(metrics.overflow) || maxOffset <= SCROLL_OVERFLOW_TOLERANCE) {
|
|
77
|
+
return INACTIVE_AXIS_STATE;
|
|
78
|
+
}
|
|
79
|
+
const isReversed = mapping[`${logicalAxis}Reversed`];
|
|
80
|
+
const logicalOffset = Math.min(maxOffset, Math.max(0, isReversed ? Math.abs(metrics.offset) : metrics.offset));
|
|
81
|
+
return {
|
|
82
|
+
isScrollable: true,
|
|
83
|
+
atStart: logicalOffset <= SCROLL_OVERFLOW_TOLERANCE,
|
|
84
|
+
atEnd: logicalOffset >= maxOffset - SCROLL_OVERFLOW_TOLERANCE
|
|
85
|
+
};
|
|
86
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Private DOM registry used by future axis-aware Sticky consumers. */
|
|
2
|
+
export interface RegisteredScrollAxisState {
|
|
3
|
+
isScrollable: boolean;
|
|
4
|
+
atStart: boolean;
|
|
5
|
+
atEnd: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface RegisteredScrollOwnerState {
|
|
8
|
+
inline: RegisteredScrollAxisState;
|
|
9
|
+
block: RegisteredScrollAxisState;
|
|
10
|
+
}
|
|
11
|
+
export declare function registerScrollOwner(element: HTMLElement, state: RegisteredScrollOwnerState): void;
|
|
12
|
+
export declare function unregisterScrollOwner(element: HTMLElement): void;
|
|
13
|
+
export declare function getRegisteredScrollOwnerState(element: HTMLElement): RegisteredScrollOwnerState | undefined;
|
|
14
|
+
export declare function findNearestScrollOwner(element: Element, axis: 'inline' | 'block'): HTMLElement | null;
|
|
15
|
+
//# sourceMappingURL=scrollOwnerRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrollOwnerRegistry.d.ts","sourceRoot":"","sources":["../../src/hooks/scrollOwnerRegistry.ts"],"names":[],"mappings":"AAEA,uEAAuE;AAEvE,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,yBAAyB,CAAC;IAClC,KAAK,EAAE,yBAAyB,CAAC;CAClC;AAID,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,0BAA0B,GAChC,IAAI,CAEN;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAEhE;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,WAAW,GACnB,0BAA0B,GAAG,SAAS,CAExC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,QAAQ,GAAG,OAAO,GACvB,WAAW,GAAG,IAAI,CASpB"}
|