@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
|
@@ -99,12 +99,24 @@ export function PanelSearchInput({
|
|
|
99
99
|
setIsKeyboardFocus(false);
|
|
100
100
|
onBlur?.(e);
|
|
101
101
|
}, [onBlur]);
|
|
102
|
-
const handleClear = useCallback(
|
|
102
|
+
const handleClear = useCallback(e => {
|
|
103
103
|
onValueChange('');
|
|
104
104
|
// Clearing puts the caret back where the user was typing, matching
|
|
105
|
-
// TextInput's built-in clear.
|
|
106
|
-
|
|
107
|
-
|
|
105
|
+
// TextInput's built-in clear. Defer focus restoration past the button's
|
|
106
|
+
// unmount task so touch browsers don't jump page scroll on tap, while
|
|
107
|
+
// preserving synchronous focus for keyboard users.
|
|
108
|
+
if (!e || e.detail === 0) {
|
|
109
|
+
if (typeof ref === 'object' && ref?.current) {
|
|
110
|
+
ref.current.focus();
|
|
111
|
+
}
|
|
112
|
+
} else {
|
|
113
|
+
requestAnimationFrame(() => {
|
|
114
|
+
if (typeof ref === 'object' && ref?.current) {
|
|
115
|
+
ref.current.focus({
|
|
116
|
+
preventScroll: true
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
});
|
|
108
120
|
}
|
|
109
121
|
}, [onValueChange, ref]);
|
|
110
122
|
return /*#__PURE__*/_jsx("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FileInput.d.ts","sourceRoot":"","sources":["../../src/FileInput/FileInput.tsx"],"names":[],"mappings":"AAsCA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AASlB,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,mBAAmB,GACvC,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAgO9C,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,EACT,UAAU,GAAG,cAAc,GAAG,OAAO,CACtC;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAC5B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAqB,EACrB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,UAAkB,EAClB,eAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,MAAM,EAAE,UAAU,EAClB,aAA0B,EAC1B,WAAW,EACX,WAAW,EACX,IAAc,EACd,UAAkB,EAClB,YAAY,EACZ,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+
|
|
1
|
+
{"version":3,"file":"FileInput.d.ts","sourceRoot":"","sources":["../../src/FileInput/FileInput.tsx"],"names":[],"mappings":"AAsCA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AASlB,YAAY,EACV,WAAW,IAAI,eAAe,EAC9B,eAAe,IAAI,mBAAmB,GACvC,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAgO9C,MAAM,WAAW,cAAe,SAAQ,IAAI,CAC1C,SAAS,EACT,UAAU,GAAG,cAAc,GAAG,OAAO,CACtC;IACC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAC5B;;OAEG;IACH,QAAQ,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,aAAqB,EACrB,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,MAAM,EACN,UAAkB,EAClB,OAAO,EACP,QAAQ,EACR,UAAkB,EAClB,eAAe,EACf,UAAkB,EAClB,SAAiB,EACjB,MAAM,EAAE,UAAU,EAClB,aAA0B,EAC1B,WAAW,EACX,WAAW,EACX,IAAc,EACd,UAAkB,EAClB,YAAY,EACZ,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,cAAc,+BAwahB;yBAnce,SAAS"}
|
|
@@ -308,7 +308,18 @@ export function FileInput({
|
|
|
308
308
|
onChange(null);
|
|
309
309
|
if (inputRef.current) {
|
|
310
310
|
inputRef.current.value = '';
|
|
311
|
-
inputRef.current
|
|
311
|
+
const targetInput = inputRef.current;
|
|
312
|
+
if (e.detail === 0) {
|
|
313
|
+
targetInput.focus();
|
|
314
|
+
} else {
|
|
315
|
+
// Defer focus restoration past the button's unmount task so iOS Safari
|
|
316
|
+
// and touch browsers don't jump the page scroll to 0 on tap.
|
|
317
|
+
requestAnimationFrame(() => {
|
|
318
|
+
targetInput.focus({
|
|
319
|
+
preventScroll: true
|
|
320
|
+
});
|
|
321
|
+
});
|
|
322
|
+
}
|
|
312
323
|
}
|
|
313
324
|
}, [onChange]);
|
|
314
325
|
const handleClick = useCallback(() => {
|
|
@@ -359,8 +359,8 @@ export function useHoverCard(options = {}) {
|
|
|
359
359
|
const renderHoverCard = useCallback((children, props) => {
|
|
360
360
|
const renderPlacement = props?.placement ?? placement;
|
|
361
361
|
const themeClassName = themeProps('hover-card', undefined, {
|
|
362
|
-
// `hovercard` ran the compound name together;
|
|
363
|
-
//
|
|
362
|
+
// `hovercard` ran the compound name together; keep it emitted so
|
|
363
|
+
// existing themes continue to work.
|
|
364
364
|
legacyNames: ['hovercard']
|
|
365
365
|
}).className;
|
|
366
366
|
const renderProps = {
|
|
@@ -147,8 +147,8 @@ export function CheckboxIndicator({
|
|
|
147
147
|
checked: isChecked ? 'checked' : isIndeterminate ? 'indeterminate' : null,
|
|
148
148
|
disabled: isDisabled ? 'disabled' : null
|
|
149
149
|
},
|
|
150
|
-
// `checkbox` was the target before indicators existed;
|
|
151
|
-
//
|
|
150
|
+
// `checkbox` was the target before indicators existed; keep it
|
|
151
|
+
// emitted so existing themes continue to work.
|
|
152
152
|
{
|
|
153
153
|
legacyNames: ['checkbox']
|
|
154
154
|
}), stylex.props(styles.box, boxSizeStyles[size], isCheckedOrIndeterminate ? styles.checked : styles.unchecked, isDisabled && styles.disabled, isDisabled && !isCheckedOrIndeterminate && styles.disabledUnchecked, xstyle), className, style),
|
|
@@ -120,8 +120,8 @@ export function RadioIndicator({
|
|
|
120
120
|
checked: isChecked ? 'checked' : null,
|
|
121
121
|
disabled: isDisabled ? 'disabled' : null
|
|
122
122
|
},
|
|
123
|
-
// `radio` was the target before indicators existed;
|
|
124
|
-
//
|
|
123
|
+
// `radio` was the target before indicators existed; keep it emitted
|
|
124
|
+
// so existing themes continue to work.
|
|
125
125
|
{
|
|
126
126
|
legacyNames: ['radio']
|
|
127
127
|
}), stylex.props(styles.circle, circleSizeStyles[size], isChecked ? styles.checked : styles.unchecked, isDisabled && styles.disabled, isDisabled && !isChecked && styles.disabledUnchecked, xstyle), className, style),
|
|
@@ -88,6 +88,16 @@ export declare function isTextComposing(): boolean;
|
|
|
88
88
|
* gate on this so every channel agrees on who is on top.
|
|
89
89
|
*/
|
|
90
90
|
export declare function isTopmostLayer(token: object): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Resolve a keydown through the shared stack immediately.
|
|
93
|
+
*
|
|
94
|
+
* The document listener is the normal path. A host may call this at its own
|
|
95
|
+
* element boundary after a consumer handler when that handler can stop
|
|
96
|
+
* propagation before the event reaches `document`. The same stack still picks
|
|
97
|
+
* the owner, and `preventDefault()` records the decision so a bubbling event is
|
|
98
|
+
* not handled twice.
|
|
99
|
+
*/
|
|
100
|
+
export declare function dispatchLayerEscapeKeyDown(event: KeyboardEvent): void;
|
|
91
101
|
/**
|
|
92
102
|
* Add a layer to the stack for as long as it is active. Returns the unregister
|
|
93
103
|
* function; callers own calling it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layerStack.d.ts","sourceRoot":"","sources":["../../src/Layer/layerStack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layerStack.d.ts","sourceRoot":"","sources":["../../src/Layer/layerStack.ts"],"names":[],"mappings":"AAsEA;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,mBAAmB,CAAC;IAC9B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACxC;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA2ED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AA2BD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAErD;AAeD;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CA4BrE;AA6BD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,MAAM,IAAI,CAc7E;AAED,2DAA2D;AAC3D,wBAAgB,uBAAuB,IAAI,IAAI,CAM9C"}
|
package/dist/Layer/layerStack.js
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* @file layerStack.ts
|
|
7
7
|
* @input Uses the isImeKeyEvent predicate from utils/ime
|
|
8
8
|
* @output Exports the shared layer dismissal stack: registration, top-most
|
|
9
|
-
* ordering,
|
|
9
|
+
* ordering, the document-level Escape listener, and its internal local-event
|
|
10
|
+
* dispatcher
|
|
10
11
|
* @position Internal to the Layer system; consumed by useLayerDismissal, which
|
|
11
12
|
* is what overlays actually call. Not exported from the package root.
|
|
12
13
|
*
|
|
@@ -34,11 +35,12 @@
|
|
|
34
35
|
* ## Bubble phase, not capture
|
|
35
36
|
*
|
|
36
37
|
* The listener is on the BUBBLE phase so content inside a layer can claim the
|
|
37
|
-
* press first, either by `stopPropagation()` (the press never reaches
|
|
38
|
-
* `preventDefault()` (we see it and stand down).
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
38
|
+
* press first, either by `stopPropagation()` (the press never reaches the
|
|
39
|
+
* document listener) or by `preventDefault()` (we see it and stand down).
|
|
40
|
+
* A host whose public event prop can stop propagation may route the still-
|
|
41
|
+
* unprevented event through `dispatchLayerEscapeKeyDown` at its own boundary;
|
|
42
|
+
* the same stack still chooses the owner. Editors are why `preventDefault()`
|
|
43
|
+
* remains the explicit cancellation signal: their own Escape action must win.
|
|
42
44
|
*
|
|
43
45
|
* ## The stack, not the browser, decides
|
|
44
46
|
*
|
|
@@ -223,7 +225,17 @@ function dispatchEscape() {
|
|
|
223
225
|
top.dismiss();
|
|
224
226
|
return true;
|
|
225
227
|
}
|
|
226
|
-
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Resolve a keydown through the shared stack immediately.
|
|
231
|
+
*
|
|
232
|
+
* The document listener is the normal path. A host may call this at its own
|
|
233
|
+
* element boundary after a consumer handler when that handler can stop
|
|
234
|
+
* propagation before the event reaches `document`. The same stack still picks
|
|
235
|
+
* the owner, and `preventDefault()` records the decision so a bubbling event is
|
|
236
|
+
* not handled twice.
|
|
237
|
+
*/
|
|
238
|
+
export function dispatchLayerEscapeKeyDown(event) {
|
|
227
239
|
if (event.key !== 'Escape') {
|
|
228
240
|
return;
|
|
229
241
|
}
|
|
@@ -256,7 +268,7 @@ function startListening() {
|
|
|
256
268
|
if (isListening || typeof document === 'undefined') {
|
|
257
269
|
return;
|
|
258
270
|
}
|
|
259
|
-
document.addEventListener('keydown',
|
|
271
|
+
document.addEventListener('keydown', dispatchLayerEscapeKeyDown);
|
|
260
272
|
document.addEventListener('compositionstart', handleCompositionStart, true);
|
|
261
273
|
document.addEventListener('compositionend', handleCompositionEnd, true);
|
|
262
274
|
document.addEventListener('blur', handleCompositionEnd, true);
|
|
@@ -266,7 +278,7 @@ function stopListening() {
|
|
|
266
278
|
if (!isListening || typeof document === 'undefined') {
|
|
267
279
|
return;
|
|
268
280
|
}
|
|
269
|
-
document.removeEventListener('keydown',
|
|
281
|
+
document.removeEventListener('keydown', dispatchLayerEscapeKeyDown);
|
|
270
282
|
document.removeEventListener('compositionstart', handleCompositionStart, true);
|
|
271
283
|
document.removeEventListener('compositionend', handleCompositionEnd, true);
|
|
272
284
|
document.removeEventListener('blur', handleCompositionEnd, true);
|
|
@@ -67,9 +67,8 @@ export interface UseLayerDismissalReturn {
|
|
|
67
67
|
* The layer does NOT attach a key listener — the stack owns one listener and
|
|
68
68
|
* routes each Escape press to the top-most REGISTERED layer, so one press
|
|
69
69
|
* dismisses exactly one of them. Dialog (and what is built on it), Popover and
|
|
70
|
-
* the menus built on it, Tooltip, HoverCard, Lightbox
|
|
71
|
-
*
|
|
72
|
-
* still handles its own press when not.
|
|
70
|
+
* the menus built on it, Tooltip, HoverCard, Lightbox, MobileNav and
|
|
71
|
+
* BottomSheetSwitcher register today.
|
|
73
72
|
*
|
|
74
73
|
* `BottomSheet`, `CommandPalette`, `ContextMenu`, `DropdownMenuSubMenu`,
|
|
75
74
|
* `PowerSearchEditPopover` and lab's `Drawer` still run their own Escape
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLayerDismissal.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayerDismissal.ts"],"names":[],"mappings":"AAqBA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAC,mBAAmB,EAAC,CAAC;AAElC,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;OAOG;IACH,2BAA2B,EAAE,MAAM,OAAO,CAAC;CAC5C;AAED
|
|
1
|
+
{"version":3,"file":"useLayerDismissal.d.ts","sourceRoot":"","sources":["../../src/Layer/useLayerDismissal.ts"],"names":[],"mappings":"AAqBA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAC,mBAAmB,EAAC,CAAC;AAElC,MAAM,WAAW,wBAAwB;IACvC;;;;OAIG;IACH,QAAQ,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,mBAAmB,CAAC;IACrC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,WAAW,GAAG,IAAI,CAAC;IACxC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,OAAO,CAAC;IAC1B;;;;;;;;;;;;;;;;;;OAkBG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;OAOG;IACH,2BAA2B,EAAE,MAAM,OAAO,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,wBAAwB,GAChC,uBAAuB,CAiDzB"}
|
|
@@ -24,9 +24,8 @@ import { isTextComposing, isTopmostLayer, registerLayer } from "./layerStack.js"
|
|
|
24
24
|
* The layer does NOT attach a key listener — the stack owns one listener and
|
|
25
25
|
* routes each Escape press to the top-most REGISTERED layer, so one press
|
|
26
26
|
* dismisses exactly one of them. Dialog (and what is built on it), Popover and
|
|
27
|
-
* the menus built on it, Tooltip, HoverCard, Lightbox
|
|
28
|
-
*
|
|
29
|
-
* still handles its own press when not.
|
|
27
|
+
* the menus built on it, Tooltip, HoverCard, Lightbox, MobileNav and
|
|
28
|
+
* BottomSheetSwitcher register today.
|
|
30
29
|
*
|
|
31
30
|
* `BottomSheet`, `CommandPalette`, `ContextMenu`, `DropdownMenuSubMenu`,
|
|
32
31
|
* `PowerSearchEditPopover` and lab's `Drawer` still run their own Escape
|
package/dist/NavIcon/NavIcon.js
CHANGED
|
@@ -68,8 +68,8 @@ export function NavIcon({
|
|
|
68
68
|
return /*#__PURE__*/_jsx("span", {
|
|
69
69
|
ref: ref,
|
|
70
70
|
...mergeProps(themeProps('nav-icon', undefined, {
|
|
71
|
-
// `navicon` ran the compound name together;
|
|
72
|
-
//
|
|
71
|
+
// `navicon` ran the compound name together; keep it emitted so
|
|
72
|
+
// existing themes continue to work.
|
|
73
73
|
legacyNames: ['navicon']
|
|
74
74
|
}), stylex.props(styles.base, xstyle), className, style),
|
|
75
75
|
...props,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAML,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,MAAM,MAAM,kBAAkB,CAAC;AAS3C,OAAO,EAGL,KAAK,WAAW,EAKhB,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAuB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAwI5D,QAAA,MAAM,UAAU;;;;;;;;;;EAUd,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,UAAU,CAAC;AAMtD,YAAY,EACV,WAAW,IAAI,iBAAiB,EAChC,eAAe,IAAI,qBAAqB,GACzC,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAM9C,UAAU,oBAAqB,SAAQ,IAAI,CACzC,SAAS,EACT,UAAU,GAAG,cAAc,CAC5B;IACC,wCAAwC;IACxC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IACjC;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,eAAe,CAAC;IAEvB;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACpD;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;IACnD;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC;CAC1D;AAED;;;GAGG;AACH,KAAK,4BAA4B,GAAG,oBAAoB,GAAG;IACzD,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,yBAAyB,GAAG,oBAAoB,GAAG;IACtD;;;;;;OAMG;IACH,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAC1B,4BAA4B,GAAG,yBAAyB,CAAC;AAsF3D;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,aAAqB,EACrB,WAAW,EACX,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,UAAkB,EAClB,eAAe,EACf,SAAS,EACT,SAAS,EACT,MAAM,EACN,aAA0B,EAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EACR,KAAK,EACL,WAAW,EACX,YAAY,EACZ,YAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,GAAG,EACH,GAAG,EACH,IAAI,EACJ,WAAW,EACX,cAAqB,EACrB,iBAAyB,EACzB,KAAK,EACL,aAAqB,EACrB,OAAO,EACP,MAAM,EACN,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,EACL,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,GAAG,IAAI,EACR,EAAE,gBAAgB,+
|
|
1
|
+
{"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../../src/NumberInput/NumberInput.tsx"],"names":[],"mappings":"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"}
|
|
@@ -454,12 +454,22 @@ export function NumberInput({
|
|
|
454
454
|
const canDecrement = getNextValue(-1) !== valueForStepping;
|
|
455
455
|
|
|
456
456
|
// Handle clear button click
|
|
457
|
-
const handleClear = useCallback(
|
|
457
|
+
const handleClear = useCallback(e => {
|
|
458
458
|
if (hasClear) {
|
|
459
459
|
onChange(null);
|
|
460
460
|
}
|
|
461
461
|
setPendingInput(null);
|
|
462
|
-
|
|
462
|
+
if (!e || e.detail === 0) {
|
|
463
|
+
inputRef.current?.focus();
|
|
464
|
+
} else {
|
|
465
|
+
// Defer focus restoration past the button's unmount task so iOS Safari
|
|
466
|
+
// and touch browsers don't jump the page scroll to 0 on tap.
|
|
467
|
+
requestAnimationFrame(() => {
|
|
468
|
+
inputRef.current?.focus({
|
|
469
|
+
preventScroll: true
|
|
470
|
+
});
|
|
471
|
+
});
|
|
472
|
+
}
|
|
463
473
|
}, [hasClear, onChange]);
|
|
464
474
|
|
|
465
475
|
// Focus input when clicking anywhere on the wrapper (icons, padding, etc.)
|
|
@@ -128,8 +128,9 @@ export interface UsePopoverOptions {
|
|
|
128
128
|
* or radius rule paints the wrong box. Name the surface through this option
|
|
129
129
|
* and document the class in the component's `theming.targets`.
|
|
130
130
|
*
|
|
131
|
-
* The
|
|
132
|
-
*
|
|
131
|
+
* The canonical `astryx-popover` target and deprecated
|
|
132
|
+
* `astryx-popover-surface` compatibility alias are always present alongside
|
|
133
|
+
* any component-owned refinement target.
|
|
133
134
|
*/
|
|
134
135
|
surfaceTarget?: string;
|
|
135
136
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePopover.d.ts","sourceRoot":"","sources":["../../src/Popover/usePopover.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAW,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AA2FnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB
|
|
1
|
+
{"version":3,"file":"usePopover.d.ts","sourceRoot":"","sources":["../../src/Popover/usePopover.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAiC,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAE5E,OAAO,EAAW,KAAK,kBAAkB,EAAC,MAAM,mBAAmB,CAAC;AAGpE,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,kBAAkB,CAAC;AA2FnD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAEpB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IAEtB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAE5B;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;;;;;;OAYG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAEzB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;;;;;;OASG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAE7C;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAEnD;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;;OAIG;IACH,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,KAAK,IAAI,CAAC;IAEpD;;OAEG;IACH,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB;;OAEG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;IAEnB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IAEX;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,kBAAkB,KAAK,SAAS,CAAC;IAEvE;;OAEG;IACH,YAAY,EAAE;QACZ,eAAe,EAAE,QAAQ,GAAG,MAAM,CAAC;QACnC,eAAe,EAAE,OAAO,CAAC;QACzB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAmPD,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,gBAAgB,CAE5E"}
|
|
@@ -232,8 +232,10 @@ function usePopoverImplementation(options = {}) {
|
|
|
232
232
|
// `mergeProps` is positional — a third OBJECT argument is read as
|
|
233
233
|
// `style`, not as more props — so the surface's classes are composed
|
|
234
234
|
// into one props object before merging with the StyleX result.
|
|
235
|
-
const surfaceProps = themeProps('popover
|
|
236
|
-
|
|
235
|
+
const surfaceProps = themeProps('popover', undefined, {
|
|
236
|
+
legacyNames: ['popover-surface']
|
|
237
|
+
});
|
|
238
|
+
const surfaceClassName = surfaceTarget != null && surfaceTarget !== 'popover' ? `${surfaceProps.className} ${stableClassName(surfaceTarget)}` : surfaceProps.className;
|
|
237
239
|
return layer.render(/*#__PURE__*/_jsx(LayerDepthProvider, {
|
|
238
240
|
children: /*#__PURE__*/_jsxs("div", {
|
|
239
241
|
ref: contentRef,
|
|
@@ -287,8 +287,8 @@ export function ProgressBar({
|
|
|
287
287
|
...mergeProps(themeProps('progress-bar', {
|
|
288
288
|
variant
|
|
289
289
|
},
|
|
290
|
-
// `progressbar` ran the compound name together;
|
|
291
|
-
//
|
|
290
|
+
// `progressbar` ran the compound name together; keep it emitted so
|
|
291
|
+
// existing themes continue to work.
|
|
292
292
|
{
|
|
293
293
|
legacyNames: ['progressbar']
|
|
294
294
|
}), stylex.props(styles.container, xstyle), className, style),
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ScrollableArea.tsx
|
|
3
|
+
* @input Logical scroll intent, accessible name, overscroll policy, viewport sizing, content padding, and content
|
|
4
|
+
* @output Native scroll viewport with an observed real content box
|
|
5
|
+
* @position Reference composition over useScrollableArea
|
|
6
|
+
*
|
|
7
|
+
* SYNC: When modified, update:
|
|
8
|
+
* - /packages/core/src/ScrollableArea/ScrollableArea.test.tsx
|
|
9
|
+
* - /packages/core/src/ScrollableArea/ScrollableArea.doc.mjs
|
|
10
|
+
* - /apps/storybook/stories/ScrollableArea.stories.tsx
|
|
11
|
+
*/
|
|
12
|
+
import type { ReactNode } from 'react';
|
|
13
|
+
import type { BaseProps } from '../BaseProps';
|
|
14
|
+
import type { SizeValue, SpacingStep } from '../utils/types';
|
|
15
|
+
import { type ScrollAxis, type ScrollOverscroll, type ScrollStickyContainment } from '../hooks/useScrollableArea';
|
|
16
|
+
export type ScrollableAreaStickyContainment = ScrollStickyContainment;
|
|
17
|
+
export interface ScrollableAreaProps extends Omit<BaseProps<HTMLDivElement>, 'aria-label' | 'children' | 'role' | 'tabIndex'> {
|
|
18
|
+
/** Content rendered inside the observed content box. */
|
|
19
|
+
children?: ReactNode;
|
|
20
|
+
/** Logical axis or axes where scrolling is allowed. @default 'block' */
|
|
21
|
+
axis?: ScrollAxis;
|
|
22
|
+
/** Accessible name used when an effective viewport enters the tab order. */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Semantics for the named scroll viewport. @default 'group' */
|
|
25
|
+
role?: 'group' | 'region';
|
|
26
|
+
/** Whether effective axes pass scroll gestures to ancestors at an edge. @default 'allow' */
|
|
27
|
+
overscroll?: ScrollOverscroll;
|
|
28
|
+
/** Width of the viewport; numbers are interpreted as pixels. */
|
|
29
|
+
width?: SizeValue;
|
|
30
|
+
/** Height of the viewport; numbers are interpreted as pixels. */
|
|
31
|
+
height?: SizeValue;
|
|
32
|
+
/** Maximum width of the viewport. */
|
|
33
|
+
maxWidth?: SizeValue;
|
|
34
|
+
/** Minimum height of the viewport. */
|
|
35
|
+
minHeight?: SizeValue;
|
|
36
|
+
/** Whether a fitting viewport deliberately remains a Sticky containing boundary. @default 'whenScrollable' */
|
|
37
|
+
stickyContainment?: ScrollableAreaStickyContainment;
|
|
38
|
+
/** Content padding using the shared spacing scale. @default 0 */
|
|
39
|
+
padding?: SpacingStep;
|
|
40
|
+
/** Logical inline-axis content padding; overrides `padding` on that axis. */
|
|
41
|
+
paddingInline?: SpacingStep;
|
|
42
|
+
/** Logical inline-start content padding; overrides broader padding values. */
|
|
43
|
+
paddingInlineStart?: SpacingStep;
|
|
44
|
+
/** Logical inline-end content padding; overrides broader padding values. */
|
|
45
|
+
paddingInlineEnd?: SpacingStep;
|
|
46
|
+
/** Logical block-axis content padding; overrides `padding` on that axis. */
|
|
47
|
+
paddingBlock?: SpacingStep;
|
|
48
|
+
/** Logical block-start content padding; overrides broader padding values. */
|
|
49
|
+
paddingBlockStart?: SpacingStep;
|
|
50
|
+
/** Logical block-end content padding; overrides broader padding values. */
|
|
51
|
+
paddingBlockEnd?: SpacingStep;
|
|
52
|
+
/** Let the viewport escape inherited container padding. @default false */
|
|
53
|
+
isFullBleed?: boolean;
|
|
54
|
+
/** Ref connected to the native scroll viewport. */
|
|
55
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* A native scroll viewport with axis-aware accessibility and chaining.
|
|
59
|
+
*
|
|
60
|
+
* The root is the viewport. Its single child is a normal block content box with
|
|
61
|
+
* a 100% minimum size; children participate in that box rather than directly in
|
|
62
|
+
* viewport flex/grid layout. Inline scrolling gives the box max-content inline
|
|
63
|
+
* sizing, and its minimum block size deliberately does not create a definite
|
|
64
|
+
* percentage-height basis. Use the hook on owned structure when those formatting
|
|
65
|
+
* semantics must stay unchanged. Native scrolling and platform scrollbars remain
|
|
66
|
+
* authoritative.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```
|
|
70
|
+
* <ScrollableArea axis="block" label="Activity history">
|
|
71
|
+
* <ActivityList />
|
|
72
|
+
* </ScrollableArea>
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export declare function ScrollableArea({ children, axis, label, role, overscroll, width, height, maxWidth, minHeight, stickyContainment, padding, paddingInline, paddingInlineStart, paddingInlineEnd, paddingBlock, paddingBlockStart, paddingBlockEnd, isFullBleed, ref, xstyle, className, style, ...props }: ScrollableAreaProps): import("react").JSX.Element;
|
|
76
|
+
export declare namespace ScrollableArea {
|
|
77
|
+
var displayName: string;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=ScrollableArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollableArea.d.ts","sourceRoot":"","sources":["../../src/ScrollableArea/ScrollableArea.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAe5C,OAAO,KAAK,EAAC,SAAS,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAC7B,MAAM,4BAA4B,CAAC;AA0DpC,MAAM,MAAM,+BAA+B,GAAG,uBAAuB,CAAC;AAEtE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAC/C,SAAS,CAAC,cAAc,CAAC,EACzB,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,UAAU,CAChD;IACC,wDAAwD;IACxD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,wEAAwE;IACxE,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,IAAI,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;IAC1B,4FAA4F;IAC5F,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,gEAAgE;IAChE,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,iEAAiE;IACjE,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,sCAAsC;IACtC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8GAA8G;IAC9G,iBAAiB,CAAC,EAAE,+BAA+B,CAAC;IACpD,iEAAiE;IACjE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,6EAA6E;IAC7E,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,WAAW,CAAC;IACjC,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,4EAA4E;IAC5E,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,6EAA6E;IAC7E,iBAAiB,CAAC,EAAE,WAAW,CAAC;IAChC,2EAA2E;IAC3E,eAAe,CAAC,EAAE,WAAW,CAAC;IAC9B,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mDAAmD;IACnD,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,cAAc,CAAC,EAC7B,QAAQ,EACR,IAAc,EACd,KAAK,EACL,IAAc,EACd,UAAoB,EACpB,KAAK,EACL,MAAM,EACN,QAAQ,EACR,SAAS,EACT,iBAAoC,EACpC,OAAW,EACX,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAmB,EACnB,GAAG,EACH,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,mBAAmB,+BAuErB;yBA/Fe,cAAc"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file ScrollableArea.tsx
|
|
7
|
+
* @input Logical scroll intent, accessible name, overscroll policy, viewport sizing, content padding, and content
|
|
8
|
+
* @output Native scroll viewport with an observed real content box
|
|
9
|
+
* @position Reference composition over useScrollableArea
|
|
10
|
+
*
|
|
11
|
+
* SYNC: When modified, update:
|
|
12
|
+
* - /packages/core/src/ScrollableArea/ScrollableArea.test.tsx
|
|
13
|
+
* - /packages/core/src/ScrollableArea/ScrollableArea.doc.mjs
|
|
14
|
+
* - /apps/storybook/stories/ScrollableArea.stories.tsx
|
|
15
|
+
*/
|
|
16
|
+
import * as stylex from '@stylexjs/stylex';
|
|
17
|
+
import { paddingStyles, paddingInlineStyles, paddingInlineStartStyles, paddingInlineEndStyles, paddingBlockStyles, paddingBlockStartStyles, paddingBlockEndStyles, containerPaddingInlineVarStyles, containerPaddingInlineStartVarStyles, containerPaddingInlineEndVarStyles, containerPaddingBlockStartVarStyles, containerPaddingBlockEndVarStyles } from "../Layout/padding.stylex.js";
|
|
18
|
+
import { useScrollableArea } from "../hooks/useScrollableArea.js";
|
|
19
|
+
import "../theme/tokens.stylex.js";
|
|
20
|
+
import { colorVars } from "../theme/tokens.stylex.js";
|
|
21
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
22
|
+
import { mergeProps } from "../utils/mergeProps.js";
|
|
23
|
+
import { themeProps } from "../utils/themeProps.js";
|
|
24
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
|
+
const styles = {
|
|
26
|
+
viewport: {
|
|
27
|
+
kB7OPa: "x9f619",
|
|
28
|
+
ks0D6T: "x193iq5w",
|
|
29
|
+
kskxy: "xmz0i5r",
|
|
30
|
+
kuHK5b: "x5lxg6s",
|
|
31
|
+
k6w4Gs: "x19jbwzc xrih18v",
|
|
32
|
+
k5wCbM: "xosa0jh",
|
|
33
|
+
kZ7BSC: "x24f09q",
|
|
34
|
+
k9g6sI: "xafyuhj",
|
|
35
|
+
$$css: true
|
|
36
|
+
},
|
|
37
|
+
fullBleed: {
|
|
38
|
+
keTefX: "xojxgvx",
|
|
39
|
+
k71WvV: "x1fcf3bl",
|
|
40
|
+
ks0D6T: "x1rfgw7b",
|
|
41
|
+
keoZOQ: "xkibk3",
|
|
42
|
+
k1K539: "xlayyun",
|
|
43
|
+
$$css: true
|
|
44
|
+
},
|
|
45
|
+
content: {
|
|
46
|
+
kB7OPa: "x9f619",
|
|
47
|
+
k7Eaqz: "xgqtt45",
|
|
48
|
+
kAzted: "x1us19tq",
|
|
49
|
+
$$css: true
|
|
50
|
+
},
|
|
51
|
+
contentWithInlineOverflow: {
|
|
52
|
+
kzqmXN: "xezivpi",
|
|
53
|
+
$$css: true
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const dynamicStyles = {
|
|
57
|
+
sizing: (width, height, maxWidth, minHeight) => [{
|
|
58
|
+
kzqmXN: width != null ? "x5lhr3w" : width,
|
|
59
|
+
kZKoxP: height != null ? "x16ye13r" : height,
|
|
60
|
+
ks0D6T: maxWidth != null ? "xf68679" : maxWidth,
|
|
61
|
+
kAzted: minHeight != null ? "x82snj4" : minHeight,
|
|
62
|
+
$$css: true
|
|
63
|
+
}, {
|
|
64
|
+
"--x-width": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(width),
|
|
65
|
+
"--x-height": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(height),
|
|
66
|
+
"--x-maxWidth": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(maxWidth),
|
|
67
|
+
"--x-minHeight": (val => typeof val === "number" ? val + "px" : val != null ? val : undefined)(minHeight)
|
|
68
|
+
}]
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* A native scroll viewport with axis-aware accessibility and chaining.
|
|
72
|
+
*
|
|
73
|
+
* The root is the viewport. Its single child is a normal block content box with
|
|
74
|
+
* a 100% minimum size; children participate in that box rather than directly in
|
|
75
|
+
* viewport flex/grid layout. Inline scrolling gives the box max-content inline
|
|
76
|
+
* sizing, and its minimum block size deliberately does not create a definite
|
|
77
|
+
* percentage-height basis. Use the hook on owned structure when those formatting
|
|
78
|
+
* semantics must stay unchanged. Native scrolling and platform scrollbars remain
|
|
79
|
+
* authoritative.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```
|
|
83
|
+
* <ScrollableArea axis="block" label="Activity history">
|
|
84
|
+
* <ActivityList />
|
|
85
|
+
* </ScrollableArea>
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
export function ScrollableArea({
|
|
89
|
+
children,
|
|
90
|
+
axis = 'block',
|
|
91
|
+
label,
|
|
92
|
+
role = 'group',
|
|
93
|
+
overscroll = 'allow',
|
|
94
|
+
width,
|
|
95
|
+
height,
|
|
96
|
+
maxWidth,
|
|
97
|
+
minHeight,
|
|
98
|
+
stickyContainment = 'whenScrollable',
|
|
99
|
+
padding = 0,
|
|
100
|
+
paddingInline,
|
|
101
|
+
paddingInlineStart,
|
|
102
|
+
paddingInlineEnd,
|
|
103
|
+
paddingBlock,
|
|
104
|
+
paddingBlockStart,
|
|
105
|
+
paddingBlockEnd,
|
|
106
|
+
isFullBleed = false,
|
|
107
|
+
ref,
|
|
108
|
+
xstyle,
|
|
109
|
+
className,
|
|
110
|
+
style,
|
|
111
|
+
...props
|
|
112
|
+
}) {
|
|
113
|
+
const {
|
|
114
|
+
getViewportProps,
|
|
115
|
+
getContentProps
|
|
116
|
+
} = useScrollableArea({
|
|
117
|
+
axis,
|
|
118
|
+
keyboardAccess: {
|
|
119
|
+
owner: 'viewport',
|
|
120
|
+
label,
|
|
121
|
+
role
|
|
122
|
+
},
|
|
123
|
+
overscroll,
|
|
124
|
+
stickyContainment
|
|
125
|
+
});
|
|
126
|
+
const mergedViewportProps = mergeProps(themeProps('scrollable-area', {
|
|
127
|
+
axis
|
|
128
|
+
}), stylex.props(styles.viewport, isFullBleed && styles.fullBleed, focusOutlineStyles.focusVisible, dynamicStyles.sizing(width ?? null, height ?? null, maxWidth ?? null, minHeight ?? null), xstyle), className, style);
|
|
129
|
+
const viewportProps = getViewportProps({
|
|
130
|
+
...props,
|
|
131
|
+
ref,
|
|
132
|
+
...mergedViewportProps
|
|
133
|
+
});
|
|
134
|
+
return /*#__PURE__*/_jsx("div", {
|
|
135
|
+
...viewportProps,
|
|
136
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
137
|
+
...getContentProps({
|
|
138
|
+
...stylex.props(styles.content, axis !== 'block' && styles.contentWithInlineOverflow, paddingStyles[padding], containerPaddingInlineVarStyles[padding], containerPaddingBlockStartVarStyles[padding], containerPaddingBlockEndVarStyles[padding], paddingInline != null && paddingInlineStyles[paddingInline], paddingInline != null && containerPaddingInlineVarStyles[paddingInline], paddingBlock != null && paddingBlockStyles[paddingBlock], paddingBlock != null && containerPaddingBlockStartVarStyles[paddingBlock], paddingBlock != null && containerPaddingBlockEndVarStyles[paddingBlock], paddingInlineStart != null && paddingInlineStartStyles[paddingInlineStart], paddingInlineStart != null && containerPaddingInlineStartVarStyles[paddingInlineStart], paddingInlineEnd != null && paddingInlineEndStyles[paddingInlineEnd], paddingInlineEnd != null && containerPaddingInlineEndVarStyles[paddingInlineEnd], paddingBlockStart != null && paddingBlockStartStyles[paddingBlockStart], paddingBlockStart != null && containerPaddingBlockStartVarStyles[paddingBlockStart], paddingBlockEnd != null && paddingBlockEndStyles[paddingBlockEnd], paddingBlockEnd != null && containerPaddingBlockEndVarStyles[paddingBlockEnd])
|
|
139
|
+
}),
|
|
140
|
+
children: children
|
|
141
|
+
})
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
ScrollableArea.displayName = 'ScrollableArea';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file index.ts
|
|
3
|
+
* @input ScrollableArea implementation and shared hook types
|
|
4
|
+
* @output Public ScrollableArea package surface
|
|
5
|
+
* @position Package entry point for ScrollableArea
|
|
6
|
+
*/
|
|
7
|
+
export { ScrollableArea } from './ScrollableArea';
|
|
8
|
+
export type { ScrollableAreaProps, ScrollableAreaStickyContainment, } from './ScrollableArea';
|
|
9
|
+
export { useScrollableArea } from '../hooks/useScrollableArea';
|
|
10
|
+
export type { ScrollAxis, ScrollAxisState, ScrollOverscroll, ScrollStickyContainment, ScrollKeyboardAccess, ScrollableAreaState, ScrollableElementProps, UseScrollableAreaOptions, UseScrollableAreaResult, } from '../hooks/useScrollableArea';
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ScrollableArea/index.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAC,MAAM,4BAA4B,CAAC;AAC7D,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @file index.ts
|
|
5
|
+
* @input ScrollableArea implementation and shared hook types
|
|
6
|
+
* @output Public ScrollableArea package surface
|
|
7
|
+
* @position Package entry point for ScrollableArea
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
export { ScrollableArea } from "./ScrollableArea.js";
|
|
11
|
+
export { useScrollableArea } from "../hooks/useScrollableArea.js";
|
|
@@ -146,8 +146,8 @@ export function StatusDot({
|
|
|
146
146
|
...mergeProps(themeProps('status-dot', {
|
|
147
147
|
variant
|
|
148
148
|
},
|
|
149
|
-
// `statusdot` ran the compound name together;
|
|
150
|
-
//
|
|
149
|
+
// `statusdot` ran the compound name together; keep it emitted so
|
|
150
|
+
// existing themes continue to work.
|
|
151
151
|
{
|
|
152
152
|
legacyNames: ['statusdot']
|
|
153
153
|
}), stylex.props(styles.base, variants[variant], isPulsing && styles.pulsing, isPulsing && styles.reducedMotion, xstyle), className, style),
|
|
@@ -278,8 +278,8 @@ export function TextArea({
|
|
|
278
278
|
disabled: isDisabled ? 'disabled' : null,
|
|
279
279
|
readonly: isReadOnly ? 'readonly' : null
|
|
280
280
|
},
|
|
281
|
-
// `textarea` ran the compound name together;
|
|
282
|
-
//
|
|
281
|
+
// `textarea` ran the compound name together; keep it emitted so
|
|
282
|
+
// existing themes continue to work.
|
|
283
283
|
{
|
|
284
284
|
legacyNames: ['textarea']
|
|
285
285
|
}), stylex.props(inputWrapperStyles.base, styles.wrapper, isDisabled && inputWrapperStyles.disabled, status && inputStatusBorderStyles[status.type], status && !isDisabled && inputStatusHoverShadowStyles[status.type], status && inputStatusFocusWithinStyles[status.type], xstyle), className, style),
|