@astryxdesign/core 0.4.0 → 0.4.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 +39 -0
- package/dist/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/AspectRatio/AspectRatio.js +1 -2
- package/dist/AspectRatio/index.d.ts.map +1 -1
- package/dist/AspectRatio/index.js +1 -2
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +1 -2
- package/dist/Badge/index.d.ts.map +1 -1
- package/dist/Badge/index.js +1 -2
- package/dist/Banner/Banner.d.ts +3 -0
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +17 -3
- package/dist/Blockquote/Blockquote.d.ts.map +1 -1
- package/dist/Blockquote/Blockquote.js +1 -2
- package/dist/Blockquote/index.d.ts.map +1 -1
- package/dist/Blockquote/index.js +1 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +2 -2
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +1 -2
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +1 -2
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +1 -2
- package/dist/Center/index.d.ts.map +1 -1
- package/dist/Center/index.js +1 -2
- package/dist/Code/Code.d.ts.map +1 -1
- package/dist/Code/Code.js +1 -2
- package/dist/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPalette.js +5 -0
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +7 -8
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +23 -10
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +44 -16
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +32 -13
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioGroup.js +10 -3
- package/dist/Field/PanelSearchInput.d.ts +81 -0
- package/dist/Field/PanelSearchInput.d.ts.map +1 -0
- package/dist/Field/PanelSearchInput.js +151 -0
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +21 -10
- package/dist/Grid/Grid.d.ts.map +1 -1
- package/dist/Grid/Grid.js +1 -2
- package/dist/Grid/index.d.ts.map +1 -1
- package/dist/Grid/index.js +1 -2
- package/dist/Icon/globalIconRegistry.d.ts +5 -4
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +5 -4
- package/dist/Indicator/index.d.ts +1 -1
- package/dist/Indicator/index.d.ts.map +1 -1
- package/dist/Indicator/types.d.ts +10 -0
- package/dist/Indicator/types.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +24 -50
- package/dist/MultiSelector/MultiSelector.d.ts +8 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +134 -102
- package/dist/Popover/usePopover.d.ts +15 -0
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +14 -2
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +2 -3
- package/dist/Section/Section.d.ts.map +1 -1
- package/dist/Section/Section.js +1 -2
- package/dist/Section/index.d.ts.map +1 -1
- package/dist/Section/index.js +1 -2
- package/dist/Selector/Selector.d.ts +10 -0
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +135 -95
- package/dist/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/Skeleton/Skeleton.js +1 -2
- package/dist/Skeleton/index.d.ts.map +1 -1
- package/dist/Skeleton/index.js +1 -2
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +2 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +3 -3
- package/dist/Table/TableRow.d.ts +1 -1
- package/dist/Table/TableRow.d.ts.map +1 -1
- package/dist/Table/TableRow.js +4 -2
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +7 -2
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +14 -3
- package/dist/Timestamp/formatInstant.d.ts +11 -1
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +3 -1
- package/dist/VisuallyHidden/VisuallyHidden.d.ts.map +1 -1
- package/dist/VisuallyHidden/VisuallyHidden.js +1 -2
- package/dist/VisuallyHidden/index.d.ts.map +1 -1
- package/dist/VisuallyHidden/index.js +1 -2
- package/dist/astryx.css +18 -17
- package/dist/astryx.umd.js +45 -45
- package/dist/astryx.umd.js.map +4 -4
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +17 -4
- package/dist/theme/defineTheme.d.ts +2 -2
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +2 -1
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/index.js +1 -1
- package/dist/theme/tokens.stylex.d.ts +12 -0
- package/dist/theme/tokens.stylex.d.ts.map +1 -1
- package/dist/theme/tokens.stylex.js +23 -0
- package/dist/utils/focusOutline.stylex.d.ts +34 -19
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +46 -33
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +5 -1
- package/dist/utils/interactionModality.d.ts +34 -0
- package/dist/utils/interactionModality.d.ts.map +1 -0
- package/dist/utils/interactionModality.js +70 -0
- package/locales/en.json +40 -0
- package/locales/pseudo.json +30 -0
- package/package.json +2 -2
- package/src/AppShell/AppShell.doc.mjs +3 -0
- package/src/AspectRatio/AspectRatio.tsx +0 -2
- package/src/AspectRatio/index.ts +0 -2
- package/src/Badge/Badge.tsx +0 -2
- package/src/Badge/index.ts +0 -2
- package/src/Banner/Banner.test.tsx +58 -1
- package/src/Banner/Banner.tsx +24 -5
- package/src/Blockquote/Blockquote.tsx +0 -2
- package/src/Blockquote/index.ts +0 -2
- package/src/Button/Button.doc.mjs +2 -2
- package/src/Button/Button.tsx +5 -4
- package/src/Card/Card.tsx +0 -2
- package/src/Card/index.ts +0 -2
- package/src/Center/Center.tsx +0 -2
- package/src/Center/index.ts +0 -2
- package/src/CheckboxInput/CheckboxInput.test.tsx +8 -3
- package/src/Code/Code.tsx +0 -2
- package/src/CommandPalette/CommandPalette.test.tsx +54 -0
- package/src/CommandPalette/CommandPalette.tsx +5 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +15 -6
- package/src/ComplexSelector/ComplexSelector.tsx +6 -10
- package/src/DateInput/DateInput.test.tsx +19 -0
- package/src/DateInput/DateInput.tsx +3 -6
- package/src/DateRangeInput/DateRangeInput.tsx +3 -9
- package/src/DateTimeInput/DateTimeInput.test.tsx +79 -1
- package/src/DateTimeInput/DateTimeInput.tsx +23 -9
- package/src/DropdownMenu/DropdownMenuRadioGroup.tsx +2 -1
- package/src/Field/PanelSearchInput.tsx +271 -0
- package/src/FileInput/FileInput.tsx +21 -8
- package/src/Grid/Grid.tsx +0 -2
- package/src/Grid/index.ts +0 -2
- package/src/Icon/globalIconRegistry.tsx +5 -4
- package/src/Indicator/Indicator.doc.mjs +1 -1
- package/src/Indicator/index.ts +1 -0
- package/src/Indicator/types.ts +11 -0
- package/src/Lightbox/Lightbox.tsx +2 -11
- package/src/MultiSelector/MultiSelector.doc.mjs +9 -0
- package/src/MultiSelector/MultiSelector.test.tsx +135 -5
- package/src/MultiSelector/MultiSelector.tsx +170 -127
- package/src/Popover/Popover.doc.mjs +2 -0
- package/src/Popover/usePopover.tsx +37 -4
- package/src/ProgressBar/ProgressBar.tsx +2 -8
- package/src/Section/Section.tsx +0 -2
- package/src/Section/index.ts +0 -2
- package/src/Selector/Selector.doc.mjs +10 -0
- package/src/Selector/Selector.test.tsx +386 -2
- package/src/Selector/Selector.tsx +182 -122
- package/src/Skeleton/Skeleton.tsx +0 -2
- package/src/Skeleton/index.ts +0 -2
- package/src/Slider/Slider.tsx +2 -11
- package/src/Switch/Switch.tsx +10 -2
- package/src/Table/Table.test.tsx +31 -0
- package/src/Table/TableRow.tsx +6 -0
- package/src/TimeInput/TimeInput.test.tsx +54 -0
- package/src/TimeInput/TimeInput.tsx +17 -2
- package/src/Timestamp/Timestamp.test.tsx +91 -14
- package/src/Timestamp/Timestamp.tsx +14 -2
- package/src/Timestamp/formatInstant.ts +16 -1
- package/src/TopNav/TopNavMegaMenu.doc.mjs +5 -0
- package/src/TreeList/TreeList.test.tsx +3 -2
- package/src/VisuallyHidden/VisuallyHidden.tsx +0 -2
- package/src/VisuallyHidden/index.ts +0 -2
- package/src/hooks/useInputStatusIcon.tsx +8 -8
- package/src/serverSafeComponents.test.ts +665 -0
- package/src/theme/defineTheme.ts +3 -0
- package/src/theme/generateThemeRules.test.ts +17 -0
- package/src/theme/index.ts +2 -0
- package/src/theme/tokens.stylex.ts +18 -0
- package/src/theme/tokens.test.ts +37 -0
- package/src/utils/focusOutline.stylex.ts +37 -23
- package/src/utils/index.ts +4 -0
- package/src/utils/interactionModality.ts +74 -0
|
@@ -46,12 +46,12 @@ export type IconRegistrySource = DefinedTheme | string | null | undefined;
|
|
|
46
46
|
* ```
|
|
47
47
|
*
|
|
48
48
|
* Libraries may also register their own extension keys (any string), so a
|
|
49
|
-
* theme can override them the same way it overrides built-in icons
|
|
49
|
+
* theme can override them the same way it overrides built-in icons. A library
|
|
50
|
+
* that ships its own icons registers them by key, then resolves with
|
|
51
|
+
* `getIcon('richtext:bold')`.
|
|
50
52
|
* @example
|
|
51
53
|
* ```
|
|
52
|
-
* // In a library that ships its own icons:
|
|
53
54
|
* registerIcons({ 'richtext:bold': <MyBoldIcon /> });
|
|
54
|
-
* // resolve with getIcon('richtext:bold')
|
|
55
55
|
* ```
|
|
56
56
|
*/
|
|
57
57
|
export declare function registerIcons(icons: Partial<Record<ExtendedIconName, ReactNode>>): void;
|
|
@@ -85,9 +85,10 @@ export declare function getIcon(name: ExtendedIconName, source?: IconRegistrySou
|
|
|
85
85
|
* override the key via {@link registerIcons} without the library having to
|
|
86
86
|
* widen the core {@link IconName} union.
|
|
87
87
|
*
|
|
88
|
+
* The `fallback` is the library default, overridable by a theme registering the
|
|
89
|
+
* same key (for example `'richtext:bold'`).
|
|
88
90
|
* @example
|
|
89
91
|
* ```
|
|
90
|
-
* // Library default, overridable by a theme registering 'richtext:bold':
|
|
91
92
|
* getExtendedIcon('richtext:bold', <BoldGlyph />)
|
|
92
93
|
* ```
|
|
93
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalIconRegistry.d.ts","sourceRoot":"","sources":["../../src/Icon/globalIconRegistry.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAQvD;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,GACf,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,aAAa,GACb,MAAM,GACN,aAAa,GACb,QAAQ,GACR,MAAM,GACN,YAAY,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAsB1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GAClD,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,QAAQ,CAAC,YAAY,CAAC,CAkBxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAOX;AAED
|
|
1
|
+
{"version":3,"file":"globalIconRegistry.d.ts","sourceRoot":"","sources":["../../src/Icon/globalIconRegistry.tsx"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,OAAO,CAAC;AAErC,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAC;AAQvD;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,aAAa,GACb,aAAa,GACb,cAAc,GACd,cAAc,GACd,eAAe,GACf,OAAO,GACP,SAAS,GACT,OAAO,GACP,SAAS,GACT,MAAM,GACN,UAAU,GACV,OAAO,GACP,cAAc,GACd,MAAM,GACN,gBAAgB,GAChB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,cAAc,GACd,QAAQ,GACR,UAAU,GACV,aAAa,GACb,MAAM,GACN,aAAa,GACb,QAAQ,GACR,MAAM,GACN,YAAY,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAExD;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;AAEvD,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAsB1E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,GAClD,IAAI,CAON;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,CAAC,EAAE,kBAAkB,GAC1B,QAAQ,CAAC,YAAY,CAAC,CAkBxB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,gBAAgB,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAOX;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,gBAAgB,EACtB,QAAQ,CAAC,EAAE,SAAS,EACpB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,SAAS,CAQX;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC"}
|
|
@@ -70,12 +70,12 @@ function getThemeIconOverrides(source) {
|
|
|
70
70
|
* ```
|
|
71
71
|
*
|
|
72
72
|
* Libraries may also register their own extension keys (any string), so a
|
|
73
|
-
* theme can override them the same way it overrides built-in icons
|
|
73
|
+
* theme can override them the same way it overrides built-in icons. A library
|
|
74
|
+
* that ships its own icons registers them by key, then resolves with
|
|
75
|
+
* `getIcon('richtext:bold')`.
|
|
74
76
|
* @example
|
|
75
77
|
* ```
|
|
76
|
-
* // In a library that ships its own icons:
|
|
77
78
|
* registerIcons({ 'richtext:bold': <MyBoldIcon /> });
|
|
78
|
-
* // resolve with getIcon('richtext:bold')
|
|
79
79
|
* ```
|
|
80
80
|
*/
|
|
81
81
|
export function registerIcons(icons) {
|
|
@@ -139,9 +139,10 @@ export function getIcon(name, source) {
|
|
|
139
139
|
* override the key via {@link registerIcons} without the library having to
|
|
140
140
|
* widen the core {@link IconName} union.
|
|
141
141
|
*
|
|
142
|
+
* The `fallback` is the library default, overridable by a theme registering the
|
|
143
|
+
* same key (for example `'richtext:bold'`).
|
|
142
144
|
* @example
|
|
143
145
|
* ```
|
|
144
|
-
* // Library default, overridable by a theme registering 'richtext:bold':
|
|
145
146
|
* getExtendedIcon('richtext:bold', <BoldGlyph />)
|
|
146
147
|
* ```
|
|
147
148
|
*/
|
|
@@ -20,5 +20,5 @@ export { defaultIndicators, getIndicator } from './indicatorRegistry';
|
|
|
20
20
|
export type { CoreIndicatorName, IndicatorRegistrySource, } from './indicatorRegistry';
|
|
21
21
|
export { useIndicator } from './useIndicator';
|
|
22
22
|
export { indicatorScope } from './indicator.markers.stylex';
|
|
23
|
-
export type { IndicatorComponent, IndicatorFamily, IndicatorFamilyMap, IndicatorMap, IndicatorName, IndicatorNameOfFamily, IndicatorProps, IndicatorRegistry, IndicatorSize, IndicatorState, } from './types';
|
|
23
|
+
export type { IndicatorComponent, IndicatorFamily, IndicatorFamilyMap, IndicatorMap, IndicatorName, IndicatorNameOfFamily, IndicatorPosition, IndicatorProps, IndicatorRegistry, IndicatorSize, IndicatorState, } from './types';
|
|
24
24
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Indicator/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE1D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Indicator/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,qBAAqB,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAC;AAE1D,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC"}
|
|
@@ -58,6 +58,16 @@ export type IndicatorFamily = keyof IndicatorFamilyMap & string;
|
|
|
58
58
|
export type IndicatorState<F extends IndicatorFamily = IndicatorFamily> = IndicatorFamilyMap[F];
|
|
59
59
|
/** Indicator size scale — matches the control sizes of the owning inputs. */
|
|
60
60
|
export type IndicatorSize = 'sm' | 'md';
|
|
61
|
+
/**
|
|
62
|
+
* Which edge of its row an indicator sits on.
|
|
63
|
+
*
|
|
64
|
+
* Logical, not physical: `start` is the left edge in LTR and the right edge in
|
|
65
|
+
* RTL. Owned by the host component, not by the indicator — an indicator draws a
|
|
66
|
+
* picture and has no say in where the row puts it — which is why this is a prop
|
|
67
|
+
* on the components that lay out rows rather than part of
|
|
68
|
+
* {@link IndicatorProps}.
|
|
69
|
+
*/
|
|
70
|
+
export type IndicatorPosition = 'start' | 'end';
|
|
61
71
|
/**
|
|
62
72
|
* Props every indicator accepts.
|
|
63
73
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Indicator/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,eAAe,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,0EAA0E;IAC1E,cAAc,EAAE,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;CAC3D;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEhE,kEAAkE;AAClE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IACpE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAExB,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,cAAc,CAC7B,CAAC,SAAS,eAAe,GAAG,eAAe,CAC3C,SAAQ,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,EAC1B,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,CACvE;IACC,qDAAqD;IACrD,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3B,mEAAmE;IACnE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IACxE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,KAAK,EAAE,iBAAiB,CAAC;IACzB,4CAA4C;IAC5C,KAAK,EAAE,iBAAiB,CAAC;IACzB,kEAAkE;IAClE,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,YAAY,GAAG,MAAM,CAAC;AAExD,mDAAmD;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,eAAe,IAAI;KAC5D,CAAC,IAAI,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC5D,CAAC,aAAa,CAAC,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;KAC7B,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Indicator/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAE,GAAG,EAAC,MAAM,OAAO,CAAC;AACzD,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,kBAAkB;IACjC,2EAA2E;IAC3E,eAAe,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,0EAA0E;IAC1E,cAAc,EAAE,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;CAC3D;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEhE,kEAAkE;AAClE,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IACpE,kBAAkB,CAAC,CAAC,CAAC,CAAC;AAExB,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,KAAK,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,WAAW,cAAc,CAC7B,CAAC,SAAS,eAAe,GAAG,eAAe,CAC3C,SAAQ,IAAI,CACZ,SAAS,CAAC,eAAe,CAAC,EAC1B,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,iBAAiB,GAAG,UAAU,CACvE;IACC,qDAAqD;IACrD,GAAG,CAAC,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IAC3B,mEAAmE;IACnE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACzB;;;OAGG;IACH,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IACxE,aAAa,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,KAAK,EAAE,iBAAiB,CAAC;IACzB,4CAA4C;IAC5C,KAAK,EAAE,iBAAiB,CAAC;IACzB,kEAAkE;IAClE,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,YAAY,GAAG,MAAM,CAAC;AAExD,mDAAmD;AACnD,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,eAAe,IAAI;KAC5D,CAAC,IAAI,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK;CAC5D,CAAC,aAAa,CAAC,CAAC;AAEjB;;;;;;;;GAQG;AACH,MAAM,MAAM,iBAAiB,GAAG;KAC7B,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"Lightbox.d.ts","sourceRoot":"","sources":["../../src/Lightbox/Lightbox.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,cAAc,CAAC;AAK5C;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,OAAO,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,gEAAgE;IAChE,GAAG,EAAE,MAAM,CAAC;IACZ,iDAAiD;IACjD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,iBAAiB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAc,SAAQ,SAAS,CAAC,iBAAiB,CAAC;IACjE,+CAA+C;IAC/C,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnC;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAChB;;;OAGG;IACH,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,KAAK,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACvC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAwJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,QAAQ,CAAC,EACvB,MAAM,EACN,YAAY,EACZ,KAAK,EACL,KAAK,EAAE,eAAe,EACtB,YAAgB,EAChB,aAAa,EACb,OAAe,EACf,WAAmB,EACnB,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACH,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE,aAAa,EACxB,GAAG,KAAK,EACT,EAAE,aAAa,sCAyYf;yBAzZe,QAAQ"}
|
|
@@ -26,6 +26,7 @@ import { useScrollLock } from "../hooks/useScrollLock.js";
|
|
|
26
26
|
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
27
27
|
import { mergeProps, mergeRefs, rtlStyles } from "../utils/index.js";
|
|
28
28
|
import { themeProps } from "../utils/themeProps.js";
|
|
29
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
29
30
|
import { useTranslator } from "../i18n/index.js";
|
|
30
31
|
|
|
31
32
|
/**
|
|
@@ -57,6 +58,28 @@ const styles = {
|
|
|
57
58
|
kba3nw: "x1abwkk1",
|
|
58
59
|
$$css: true
|
|
59
60
|
},
|
|
61
|
+
imageWrapper: {
|
|
62
|
+
k1xSpc: "x78zum5",
|
|
63
|
+
kGNEyG: "x6s0dn4",
|
|
64
|
+
kjj79g: "xl56j7k",
|
|
65
|
+
kVQacm: "xb3r6kr",
|
|
66
|
+
kkrTdU: "xt0e3qv",
|
|
67
|
+
kfSwDN: "x87ps6o",
|
|
68
|
+
kAzted: "x2lwn1j",
|
|
69
|
+
$$css: true
|
|
70
|
+
},
|
|
71
|
+
imageWrapperZoomable: {
|
|
72
|
+
kkrTdU: "x1huxd7x x2dt3px",
|
|
73
|
+
$$css: true
|
|
74
|
+
},
|
|
75
|
+
imageWrapperZoomed: {
|
|
76
|
+
kkrTdU: "x1jm3nie",
|
|
77
|
+
$$css: true
|
|
78
|
+
},
|
|
79
|
+
imageWrapperDragging: {
|
|
80
|
+
kkrTdU: "xi9pz9s",
|
|
81
|
+
$$css: true
|
|
82
|
+
},
|
|
60
83
|
image: {
|
|
61
84
|
ks0D6T: "x193iq5w",
|
|
62
85
|
kskxy: "xmz0i5r",
|
|
@@ -461,56 +484,7 @@ export function Lightbox({
|
|
|
461
484
|
tabIndex: isZoomTarget ? 0 : undefined,
|
|
462
485
|
"aria-pressed": isZoomTarget ? isZoomed : undefined,
|
|
463
486
|
"aria-label": isZoomTarget ? t('@astryx.lightbox.zoom') : undefined,
|
|
464
|
-
...
|
|
465
|
-
0: {
|
|
466
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr xt0e3qv x87ps6o x2lwn1j"
|
|
467
|
-
},
|
|
468
|
-
8: {
|
|
469
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr xt0e3qv x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk"
|
|
470
|
-
},
|
|
471
|
-
4: {
|
|
472
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1huxd7x x2dt3px"
|
|
473
|
-
},
|
|
474
|
-
12: {
|
|
475
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1huxd7x x2dt3px"
|
|
476
|
-
},
|
|
477
|
-
2: {
|
|
478
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1jm3nie"
|
|
479
|
-
},
|
|
480
|
-
10: {
|
|
481
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1jm3nie"
|
|
482
|
-
},
|
|
483
|
-
6: {
|
|
484
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1jm3nie"
|
|
485
|
-
},
|
|
486
|
-
14: {
|
|
487
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk x1jm3nie"
|
|
488
|
-
},
|
|
489
|
-
1: {
|
|
490
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
|
|
491
|
-
},
|
|
492
|
-
9: {
|
|
493
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
|
|
494
|
-
},
|
|
495
|
-
5: {
|
|
496
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
|
|
497
|
-
},
|
|
498
|
-
13: {
|
|
499
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
|
|
500
|
-
},
|
|
501
|
-
3: {
|
|
502
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
|
|
503
|
-
},
|
|
504
|
-
11: {
|
|
505
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
|
|
506
|
-
},
|
|
507
|
-
7: {
|
|
508
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j xi9pz9s"
|
|
509
|
-
},
|
|
510
|
-
15: {
|
|
511
|
-
className: "x78zum5 x6s0dn4 xl56j7k xb3r6kr x87ps6o x2lwn1j x1a2a7pz x17nn4n9 x1wfwxd8 x7s97pk xi9pz9s"
|
|
512
|
-
}
|
|
513
|
-
}[!!isZoomTarget << 3 | !!(!isVideo && hasZoom && !isZoomed) << 2 | !!(!isVideo && isZoomed) << 1 | !!(!isVideo && isDragging) << 0],
|
|
487
|
+
...stylex.props(styles.imageWrapper, isZoomTarget && focusOutlineStyles.focusVisible, !isVideo && hasZoom && !isZoomed && styles.imageWrapperZoomable, !isVideo && isZoomed && styles.imageWrapperZoomed, !isVideo && isDragging && styles.imageWrapperDragging),
|
|
514
488
|
onDoubleClick: isVideo ? undefined : handleDoubleClick,
|
|
515
489
|
onKeyDown: isZoomTarget ? handleImageKeyDown : undefined,
|
|
516
490
|
onPointerDown: isVideo ? undefined : handlePointerDown,
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
import React, { type ReactNode } from 'react';
|
|
15
15
|
import { type IconType } from '../Icon';
|
|
16
16
|
import { type FieldStatusVariant } from '../Field';
|
|
17
|
+
import type { IndicatorPosition } from '../Indicator';
|
|
17
18
|
import type { MultiSelectorOptionType, MultiSelectorOptionData, MultiSelectorStatus } from './types';
|
|
18
19
|
import type { BaseProps } from '../BaseProps';
|
|
19
20
|
import type { SizeValue } from '../utils/types';
|
|
@@ -189,6 +190,12 @@ export interface MultiSelectorProps<T extends MultiSelectorOptionType = MultiSel
|
|
|
189
190
|
* Only called for selectable options (not dividers/sections or the select-all row).
|
|
190
191
|
*/
|
|
191
192
|
renderOption?: (option: MultiSelectorOptionData) => ReactNode;
|
|
193
|
+
/**
|
|
194
|
+
* Which edge of the option row carries the checkbox.
|
|
195
|
+
*
|
|
196
|
+
* @default 'start'
|
|
197
|
+
*/
|
|
198
|
+
indicatorPosition?: IndicatorPosition;
|
|
192
199
|
/**
|
|
193
200
|
* Whether the dropdown starts open on mount.
|
|
194
201
|
* Useful for showcases and previews.
|
|
@@ -215,7 +222,7 @@ export interface MultiSelectorProps<T extends MultiSelectorOptionType = MultiSel
|
|
|
215
222
|
* />
|
|
216
223
|
* ```
|
|
217
224
|
*/
|
|
218
|
-
export declare function MultiSelector<T extends MultiSelectorOptionType>({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, options, value, onChange, changeAction, isLoading, placeholder: placeholderFromProps, size: sizeProp, variant, status, statusVariant, labelTooltip, startIcon, hasClear, hasSelectAll, selectAllLabel: selectAllLabelFromProps, hasSearch, searchPlaceholder: searchPlaceholderFromProps, triggerDisplay, maxBadges, renderOption, isDefaultOpen, 'data-testid': testId, htmlName, width, xstyle, className, style, }: MultiSelectorProps<T>): React.JSX.Element;
|
|
225
|
+
export declare function MultiSelector<T extends MultiSelectorOptionType>({ label, isLabelHidden, description, isOptional, isRequired, isDisabled, disabledMessage, options, value, onChange, changeAction, isLoading, placeholder: placeholderFromProps, size: sizeProp, variant, status, statusVariant, labelTooltip, startIcon, hasClear, hasSelectAll, selectAllLabel: selectAllLabelFromProps, hasSearch, searchPlaceholder: searchPlaceholderFromProps, triggerDisplay, maxBadges, renderOption, indicatorPosition, isDefaultOpen, 'data-testid': testId, htmlName, width, xstyle, className, style, }: MultiSelectorProps<T>): React.JSX.Element;
|
|
219
226
|
export declare namespace MultiSelector {
|
|
220
227
|
var displayName: string;
|
|
221
228
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MultiSelector.d.ts","sourceRoot":"","sources":["../../src/MultiSelector/MultiSelector.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,EASZ,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAIf,OAAO,EAAuB,KAAK,QAAQ,EAAC,MAAM,SAAS,CAAC;AAE5D,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"MultiSelector.d.ts","sourceRoot":"","sources":["../../src/MultiSelector/MultiSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -23,17 +23,18 @@ import { Icon, renderIconSlot } from "../Icon/index.js";
|
|
|
23
23
|
import { Field, InputClearButton, inputStatusBorderStyles, inputStatusHoverShadowStyles, inputWrapperStyles } from "../Field/index.js";
|
|
24
24
|
import { Divider } from "../Divider/index.js";
|
|
25
25
|
import { Spinner } from "../Spinner/index.js";
|
|
26
|
-
import {
|
|
26
|
+
import { PanelSearchInput } from "../Field/PanelSearchInput.js";
|
|
27
27
|
import { CheckboxInput } from "../CheckboxInput/index.js";
|
|
28
28
|
import { Badge } from "../Badge/index.js";
|
|
29
29
|
import "../theme/tokens.stylex.js";
|
|
30
|
-
import { colorVars, sizeVars, spacingVars, radiusVars, durationVars, easeVars, typographyVars, fontWeightVars, typeScaleVars
|
|
30
|
+
import { colorVars, sizeVars, spacingVars, radiusVars, durationVars, easeVars, typographyVars, fontWeightVars, typeScaleVars } from "../theme/tokens.stylex.js";
|
|
31
31
|
import { isOptionData, isDivider, isSection, normalizeOption, getSelectableOptions } from "../Selector/utils.js";
|
|
32
32
|
import { useMultiCombobox } from "./hooks.js";
|
|
33
33
|
import { getInputARIA, mergeProps } from "../utils/index.js";
|
|
34
34
|
import { useAnnounce } from "../hooks/useAnnounce.js";
|
|
35
35
|
import { useSize } from "../SizeContext/SizeContext.js";
|
|
36
36
|
import { themeProps } from "../utils/themeProps.js";
|
|
37
|
+
import { focusOutlineStyles } from "../utils/focusOutline.stylex.js";
|
|
37
38
|
import { stableClassName } from "../naming.js";
|
|
38
39
|
import { groupStyles } from "../InputGroup/groupStyles.js";
|
|
39
40
|
import { useInputGroup } from "../InputGroup/InputGroupContext.js";
|
|
@@ -86,8 +87,6 @@ const styles = {
|
|
|
86
87
|
kKwaWg: "x1ilzqfv xq8i9tn",
|
|
87
88
|
kGVxlE: "x1gnnqk1 x1irk71m x15ysqaf",
|
|
88
89
|
k63SB2: "x1e4wzip",
|
|
89
|
-
kI3sdo: "x1a2a7pz x1irc7jg",
|
|
90
|
-
kInvED: "x1wfwxd8 xscfbxq",
|
|
91
90
|
k1ekBW: "xrafxwg",
|
|
92
91
|
k3aq6I: "x3oybdh xk4oym4",
|
|
93
92
|
$$css: true
|
|
@@ -97,6 +96,20 @@ const styles = {
|
|
|
97
96
|
k3aq6I: "x1c071of x1pdlv7q",
|
|
98
97
|
$$css: true
|
|
99
98
|
},
|
|
99
|
+
statusButton: {
|
|
100
|
+
k1xSpc: "x78zum5",
|
|
101
|
+
kGNEyG: "x6s0dn4",
|
|
102
|
+
kjj79g: "xl56j7k",
|
|
103
|
+
kmVPX3: "x1717udv",
|
|
104
|
+
kogj98: "x1ghz6dp",
|
|
105
|
+
kMzoRj: "xc342km",
|
|
106
|
+
ksu8eU: "xng3xce",
|
|
107
|
+
kWkggS: "xjbqb8w",
|
|
108
|
+
kMwMTN: "x1heor9g",
|
|
109
|
+
kkrTdU: "x1ypdohk",
|
|
110
|
+
kaIpWk: "xh6dtrn",
|
|
111
|
+
$$css: true
|
|
112
|
+
},
|
|
100
113
|
popover: {
|
|
101
114
|
k7Eaqz: "xrzjruh",
|
|
102
115
|
$$css: true
|
|
@@ -108,10 +121,6 @@ const styles = {
|
|
|
108
121
|
kkrTdU: "x1ypdohk",
|
|
109
122
|
$$css: true
|
|
110
123
|
},
|
|
111
|
-
sectionDivider: {
|
|
112
|
-
kqGvvJ: "xsq74q5",
|
|
113
|
-
$$css: true
|
|
114
|
-
},
|
|
115
124
|
divider: {
|
|
116
125
|
kqGvvJ: "xsq74q5",
|
|
117
126
|
$$css: true
|
|
@@ -268,6 +277,7 @@ export function MultiSelector({
|
|
|
268
277
|
triggerDisplay = 'count',
|
|
269
278
|
maxBadges = 3,
|
|
270
279
|
renderOption,
|
|
280
|
+
indicatorPosition = 'start',
|
|
271
281
|
isDefaultOpen = false,
|
|
272
282
|
'data-testid': testId,
|
|
273
283
|
htmlName,
|
|
@@ -292,7 +302,7 @@ export function MultiSelector({
|
|
|
292
302
|
const searchRef = useRef(null);
|
|
293
303
|
const inputGroup = useInputGroup();
|
|
294
304
|
const [searchQuery, setSearchQuery] = useState('');
|
|
295
|
-
// A typed query shows
|
|
305
|
+
// A typed query shows the search row's clear (✕) button, which becomes
|
|
296
306
|
// the next tab stop after the search input.
|
|
297
307
|
const hasQuery = searchQuery.length > 0;
|
|
298
308
|
|
|
@@ -409,7 +419,10 @@ export function MultiSelector({
|
|
|
409
419
|
hasAutoFocus: false,
|
|
410
420
|
// The popup's own role="listbox" is the exposed semantics; the trigger
|
|
411
421
|
// keeps DOM focus, so wrapping it in a modal dialog would misrepresent it.
|
|
412
|
-
role: 'none'
|
|
422
|
+
role: 'none',
|
|
423
|
+
// The theme target belongs on the SURFACE that paints the popup, which
|
|
424
|
+
// `usePopover` owns — not on the scrolling list inside it.
|
|
425
|
+
surfaceTarget: 'multi-selector-popup'
|
|
413
426
|
});
|
|
414
427
|
|
|
415
428
|
// Open dropdown on mount when isDefaultOpen is true
|
|
@@ -615,13 +628,36 @@ export function MultiSelector({
|
|
|
615
628
|
if (!hasSearch) {
|
|
616
629
|
return null;
|
|
617
630
|
}
|
|
618
|
-
return /*#__PURE__*/_jsx(
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
631
|
+
return /*#__PURE__*/_jsx(PanelSearchInput, {
|
|
632
|
+
ref: searchRef,
|
|
633
|
+
id: searchId
|
|
634
|
+
// The search row is the panel's header: a magnifier, a borderless
|
|
635
|
+
// input, and the shared clear (✕) button. It deliberately does NOT
|
|
636
|
+
// render a bordered TextInput — the popup is already a bordered
|
|
637
|
+
// surface, and a field inside it drew a second box within that box.
|
|
638
|
+
,
|
|
639
|
+
label: t('@astryx.multiSelector.searchOptions')
|
|
640
|
+
// Same accessible name the TextInput's built-in clear produced
|
|
641
|
+
// ("Clear Search options"), so the affordance keeps its name while its
|
|
642
|
+
// chrome changes.
|
|
643
|
+
,
|
|
644
|
+
clearLabel: t('@astryx.textInput.clearLabel', {
|
|
645
|
+
label: t('@astryx.multiSelector.searchOptions')
|
|
646
|
+
}),
|
|
647
|
+
...themeProps('multi-selector-search'),
|
|
648
|
+
// When hasSearch is set, focus moves into this input on open, so it —
|
|
649
|
+
// not the trigger — must be the combobox reporting the highlighted
|
|
650
|
+
// option via aria-activedescendant (comboboxes-4).
|
|
651
|
+
role: "combobox",
|
|
652
|
+
"aria-expanded": popover.isOpen,
|
|
653
|
+
"aria-controls": listboxId,
|
|
654
|
+
"aria-autocomplete": "list",
|
|
655
|
+
"aria-activedescendant": popover.isOpen && highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,
|
|
656
|
+
value: searchQuery,
|
|
657
|
+
onValueChange: handleSearchChange,
|
|
658
|
+
onContainerKeyDown: e => {
|
|
659
|
+
// The clear (✕) button lives inside the row, after the input in DOM
|
|
660
|
+
// order. When it is focused and the user tabs forward there is
|
|
625
661
|
// nothing else in the popup, so dismiss it (Shift+Tab returns to the
|
|
626
662
|
// input natively). Key events originating on the input are handled on
|
|
627
663
|
// the input below; ignore them here so we don't double-dismiss.
|
|
@@ -632,54 +668,23 @@ export function MultiSelector({
|
|
|
632
668
|
onKeyDown(e);
|
|
633
669
|
}
|
|
634
670
|
},
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
//
|
|
639
|
-
//
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
width: "100%"
|
|
653
|
-
// When hasSearch is set, focus moves into this input on open, so it —
|
|
654
|
-
// not the trigger — must be the combobox reporting the highlighted
|
|
655
|
-
// option via aria-activedescendant (comboboxes-4). role + aria-* pass
|
|
656
|
-
// through to the underlying <input> via BaseProps.
|
|
657
|
-
,
|
|
658
|
-
role: "combobox",
|
|
659
|
-
"aria-expanded": popover.isOpen,
|
|
660
|
-
"aria-controls": listboxId,
|
|
661
|
-
"aria-autocomplete": "list",
|
|
662
|
-
"aria-activedescendant": popover.isOpen && highlightedIndex >= 0 ? getItemId(highlightedIndex) : undefined,
|
|
663
|
-
value: searchQuery,
|
|
664
|
-
onChange: handleSearchChange,
|
|
665
|
-
onKeyDown: e => {
|
|
666
|
-
// Arrow keys navigate options; Enter toggles; Escape closes.
|
|
667
|
-
// Space and Home/End are left to the input (type a space / move
|
|
668
|
-
// the caret) per the APG editable combobox; PageUp/PageDown are
|
|
669
|
-
// the sanctioned substitute for jumping to the first/last option.
|
|
670
|
-
if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'PageUp' || e.key === 'PageDown' || e.key === 'Enter' || e.key === 'Escape') {
|
|
671
|
-
onKeyDown(e);
|
|
672
|
-
return;
|
|
673
|
-
}
|
|
674
|
-
// Tab: when a query is showing the clear (✕) button, forward-tab
|
|
675
|
-
// moves focus to it (keeping the popup open) so the affordance is
|
|
676
|
-
// keyboard-reachable. Every other Tab dismisses the popup as usual.
|
|
677
|
-
if (e.key === 'Tab' && (e.shiftKey || !hasQuery)) {
|
|
678
|
-
onKeyDown(e);
|
|
679
|
-
}
|
|
680
|
-
},
|
|
681
|
-
placeholder: searchPlaceholder
|
|
682
|
-
})
|
|
671
|
+
onKeyDown: e => {
|
|
672
|
+
// Arrow keys navigate options; Enter toggles; Escape closes.
|
|
673
|
+
// Space and Home/End are left to the input (type a space / move
|
|
674
|
+
// the caret) per the APG editable combobox; PageUp/PageDown are
|
|
675
|
+
// the sanctioned substitute for jumping to the first/last option.
|
|
676
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp' || e.key === 'PageUp' || e.key === 'PageDown' || e.key === 'Enter' || e.key === 'Escape') {
|
|
677
|
+
onKeyDown(e);
|
|
678
|
+
return;
|
|
679
|
+
}
|
|
680
|
+
// Tab: when a query is showing the clear (✕) button, forward-tab
|
|
681
|
+
// moves focus to it (keeping the popup open) so the affordance is
|
|
682
|
+
// keyboard-reachable. Every other Tab dismisses the popup as usual.
|
|
683
|
+
if (e.key === 'Tab' && (e.shiftKey || !hasQuery)) {
|
|
684
|
+
onKeyDown(e);
|
|
685
|
+
}
|
|
686
|
+
},
|
|
687
|
+
placeholder: searchPlaceholder
|
|
683
688
|
});
|
|
684
689
|
}, [hasSearch, searchId, listboxId, searchQuery, hasQuery, searchPlaceholder, handleSearchChange, onKeyDown, popover.isOpen, highlightedIndex, getItemId, t]);
|
|
685
690
|
|
|
@@ -693,6 +698,25 @@ export function MultiSelector({
|
|
|
693
698
|
// checkbox is inert/decorative, so the indeterminate state must be
|
|
694
699
|
// conveyed through the option's accessible name (WCAG 4.1.2).
|
|
695
700
|
const isPartiallySelected = isSelectAll && selectAllState === 'indeterminate';
|
|
701
|
+
const checkbox = /*#__PURE__*/_jsx("div", {
|
|
702
|
+
inert: true,
|
|
703
|
+
...{
|
|
704
|
+
0: {
|
|
705
|
+
className: "x47corl x78zum5 x2lah0s"
|
|
706
|
+
},
|
|
707
|
+
1: {
|
|
708
|
+
className: "x47corl x78zum5 x2lah0s xvc5jky"
|
|
709
|
+
}
|
|
710
|
+
}[!!(indicatorPosition === 'end') << 0],
|
|
711
|
+
children: /*#__PURE__*/_jsx(CheckboxInput, {
|
|
712
|
+
label: "",
|
|
713
|
+
isLabelHidden: true,
|
|
714
|
+
value: checkboxValue,
|
|
715
|
+
onChange: () => {},
|
|
716
|
+
isDisabled: item.disabled,
|
|
717
|
+
size: size === 'lg' ? 'md' : size
|
|
718
|
+
})
|
|
719
|
+
});
|
|
696
720
|
return /*#__PURE__*/_jsxs("div", {
|
|
697
721
|
id: getItemId(flatIndex),
|
|
698
722
|
role: "option",
|
|
@@ -718,27 +742,14 @@ export function MultiSelector({
|
|
|
718
742
|
selected: isSelected ? 'selected' : null,
|
|
719
743
|
disabled: item.disabled ? 'disabled' : null
|
|
720
744
|
}), stylex.props(styles.item, isSelectAll ? selectAllSizeStyles[size] : itemSizeStyles[size], isSelectAll && styles.selectAllWrapper, isHighlighted && styles.itemHighlighted, item.disabled && styles.itemDisabled)),
|
|
721
|
-
children: [/*#__PURE__*/_jsx("
|
|
722
|
-
inert: true,
|
|
723
|
-
...{
|
|
724
|
-
className: "x47corl x78zum5 x2lah0s"
|
|
725
|
-
},
|
|
726
|
-
children: /*#__PURE__*/_jsx(CheckboxInput, {
|
|
727
|
-
label: "",
|
|
728
|
-
isLabelHidden: true,
|
|
729
|
-
value: checkboxValue,
|
|
730
|
-
onChange: () => {},
|
|
731
|
-
isDisabled: item.disabled,
|
|
732
|
-
size: size === 'lg' ? 'md' : size
|
|
733
|
-
})
|
|
734
|
-
}), renderOption && !isSelectAll ? renderOption(item) : /*#__PURE__*/_jsx("span", {
|
|
745
|
+
children: [indicatorPosition === 'start' && checkbox, renderOption && !isSelectAll ? renderOption(item) : /*#__PURE__*/_jsx("span", {
|
|
735
746
|
...{
|
|
736
747
|
className: "xeuugli xb3r6kr xlyipyv xuxw1ft"
|
|
737
748
|
},
|
|
738
749
|
children: item.label ?? item.value
|
|
739
|
-
})]
|
|
750
|
+
}), indicatorPosition === 'end' && checkbox]
|
|
740
751
|
}, item.value);
|
|
741
|
-
}, [renderOption, highlightedIndex, optimisticValue, allEnabledSelected, selectAllState, selectAllLabel, getItemId, handleNavigableToggle, onItemMouseEnter, size, t]);
|
|
752
|
+
}, [renderOption, indicatorPosition, highlightedIndex, optimisticValue, allEnabledSelected, selectAllState, selectAllLabel, getItemId, handleNavigableToggle, onItemMouseEnter, size, t]);
|
|
742
753
|
|
|
743
754
|
// Render all options. Uses sortedItems as the single source of truth for
|
|
744
755
|
// item order — no independent sorting here. Structural elements (dividers,
|
|
@@ -750,12 +761,11 @@ export function MultiSelector({
|
|
|
750
761
|
// Number of real items (excluding the select-all sentinel)
|
|
751
762
|
const realItemCount = hasSelectAll ? sortedItems.length - 1 : sortedItems.length;
|
|
752
763
|
|
|
753
|
-
// Show select-all only when there are real items to select
|
|
764
|
+
// Show select-all only when there are real items to select. It reads as
|
|
765
|
+
// the first row of the list, not a section of its own — no divider under
|
|
766
|
+
// it (the checkbox column already lines it up with the options below).
|
|
754
767
|
if (hasSelectAll && realItemCount > 0) {
|
|
755
768
|
elements.push(renderItem(sortedItems[0], 0));
|
|
756
|
-
elements.push(/*#__PURE__*/_jsx(Divider, {
|
|
757
|
-
xstyle: styles.divider
|
|
758
|
-
}, "select-all-divider"));
|
|
759
769
|
cursor = 1;
|
|
760
770
|
} else if (hasSelectAll) {
|
|
761
771
|
// Skip the select-all sentinel when there are no real items
|
|
@@ -813,16 +823,21 @@ export function MultiSelector({
|
|
|
813
823
|
sectionItems.push(renderItem(sortedItems[cursor], cursor));
|
|
814
824
|
cursor++;
|
|
815
825
|
}
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
elements.push(/*#__PURE__*/_jsx("div", {
|
|
826
|
+
// The heading lives INSIDE the group and is aria-hidden: the group
|
|
827
|
+
// already carries the title as its accessible name, so exposing the
|
|
828
|
+
// text again would announce it twice. This also keeps role="listbox"'s
|
|
829
|
+
// children to option/group only — the old labeled Divider sat in the
|
|
830
|
+
// listbox as a stray role="separator".
|
|
831
|
+
elements.push(/*#__PURE__*/_jsxs("div", {
|
|
823
832
|
role: "group",
|
|
824
833
|
"aria-label": option.title,
|
|
825
|
-
children:
|
|
834
|
+
children: [option.title && /*#__PURE__*/_jsx("div", {
|
|
835
|
+
"aria-hidden": "true",
|
|
836
|
+
...mergeProps(themeProps('multi-selector-section-heading'), {
|
|
837
|
+
className: "xu0wf1k xf314gf x9ynric x141an7d x1ltkj2j xv1l7n4 x87ps6o"
|
|
838
|
+
}),
|
|
839
|
+
children: option.title
|
|
840
|
+
}), sectionItems]
|
|
826
841
|
}, `section-${i}`));
|
|
827
842
|
} else if (isOptionData(option)) {
|
|
828
843
|
if (!isSearching || optionMatchesQuery(normalizeOption(option), searchQuery)) {
|
|
@@ -854,7 +869,7 @@ export function MultiSelector({
|
|
|
854
869
|
size,
|
|
855
870
|
status: status?.type ?? null,
|
|
856
871
|
disabled: isDisabled ? 'disabled' : null
|
|
857
|
-
}), stylex.props(inputWrapperStyles.base, styles.triggerContainer, sizeStyles[size], variant === 'ghost' && styles.triggerGhost, isDisabled && inputWrapperStyles.disabled, variant === 'ghost' && isDisabled && styles.triggerGhostDisabled, optimisticValue.length === 0 && styles.triggerPlaceholder, variant !== 'ghost' && status && inputStatusBorderStyles[status.type], variant !== 'ghost' && status && !isDisabled && inputStatusHoverShadowStyles[status.type], variant !== 'ghost' && inputGroup && groupStyles.inGroup, xstyle), className, style),
|
|
872
|
+
}), stylex.props(inputWrapperStyles.base, styles.triggerContainer, sizeStyles[size], variant === 'ghost' && styles.triggerGhost, variant === 'ghost' && focusOutlineStyles.focusWithin, isDisabled && inputWrapperStyles.disabled, variant === 'ghost' && isDisabled && styles.triggerGhostDisabled, optimisticValue.length === 0 && styles.triggerPlaceholder, variant !== 'ghost' && status && inputStatusBorderStyles[status.type], variant !== 'ghost' && status && !isDisabled && inputStatusHoverShadowStyles[status.type], variant !== 'ghost' && inputGroup && groupStyles.inGroup, xstyle), className, style),
|
|
858
873
|
children: [startIcon && renderIconSlot(startIcon, {
|
|
859
874
|
size: 'sm',
|
|
860
875
|
color: 'secondary'
|
|
@@ -918,9 +933,7 @@ export function MultiSelector({
|
|
|
918
933
|
"aria-label": t(STATUS_BUTTON_LABEL_KEY[status.type]),
|
|
919
934
|
"aria-describedby": statusTooltip.describedBy,
|
|
920
935
|
onClick: e => e.stopPropagation(),
|
|
921
|
-
...
|
|
922
|
-
className: "x78zum5 x6s0dn4 xl56j7k x1717udv x1ghz6dp xc342km xng3xce xjbqb8w x1heor9g x1ypdohk xh6dtrn x1a2a7pz x1p25gnr x1y3gkto"
|
|
923
|
-
},
|
|
936
|
+
...stylex.props(focusOutlineStyles.focusVisible, styles.statusButton),
|
|
924
937
|
children: /*#__PURE__*/_jsx(Icon, {
|
|
925
938
|
icon: STATUS_ICON_MAP[status.type],
|
|
926
939
|
size: "sm",
|
|
@@ -951,17 +964,36 @@ export function MultiSelector({
|
|
|
951
964
|
state: popover.isOpen ? 'expanded' : 'collapsed'
|
|
952
965
|
})
|
|
953
966
|
})]
|
|
954
|
-
}), popover.render(
|
|
955
|
-
|
|
967
|
+
}), popover.render(hasSearch ?
|
|
968
|
+
/*#__PURE__*/
|
|
969
|
+
// With a search row the panel splits: the header stays put while the
|
|
970
|
+
// options scroll under it, so the field does not slide out of reach
|
|
971
|
+
// in a long list. Without one the panel is a single scroll container,
|
|
972
|
+
// exactly as before.
|
|
973
|
+
_jsxs("div", {
|
|
974
|
+
children: [renderSearch(), /*#__PURE__*/_jsx(Divider, {}), /*#__PURE__*/_jsx("div", {
|
|
975
|
+
...{
|
|
976
|
+
className: "x9f619 xuyqlj2 x1odjw0f x9epnlk"
|
|
977
|
+
},
|
|
978
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
979
|
+
id: listboxId,
|
|
980
|
+
role: "listbox",
|
|
981
|
+
"aria-multiselectable": "true",
|
|
982
|
+
"aria-labelledby": triggerId,
|
|
983
|
+
children: renderOptions()
|
|
984
|
+
})
|
|
985
|
+
})]
|
|
986
|
+
}) : /*#__PURE__*/_jsx("div", {
|
|
987
|
+
...{
|
|
956
988
|
className: "x9f619 xuyqlj2 x1odjw0f x9epnlk"
|
|
957
|
-
}
|
|
958
|
-
children:
|
|
989
|
+
},
|
|
990
|
+
children: /*#__PURE__*/_jsx("div", {
|
|
959
991
|
id: listboxId,
|
|
960
992
|
role: "listbox",
|
|
961
993
|
"aria-multiselectable": "true",
|
|
962
994
|
"aria-labelledby": triggerId,
|
|
963
995
|
children: renderOptions()
|
|
964
|
-
})
|
|
996
|
+
})
|
|
965
997
|
}), {
|
|
966
998
|
placement: 'below',
|
|
967
999
|
alignment: 'start',
|