@cimpress-ui/react 1.25.2 → 1.27.0
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/dist/commonjs/components/app-header/app-header.d.ts +1 -1
- package/dist/commonjs/components/app-header/app-header.d.ts.map +1 -1
- package/dist/commonjs/components/app-header/app-header.js +5 -1
- package/dist/commonjs/components/app-header/app-header.js.map +1 -1
- package/dist/commonjs/components/app-header/nav-button.d.ts +2 -2
- package/dist/commonjs/components/app-header/nav-button.d.ts.map +1 -1
- package/dist/commonjs/components/app-header/nav-button.js +8 -1
- package/dist/commonjs/components/app-header/nav-button.js.map +1 -1
- package/dist/commonjs/components/app-shell/app-shell-context.d.ts +2 -0
- package/dist/commonjs/components/app-shell/app-shell-context.d.ts.map +1 -0
- package/dist/commonjs/components/app-shell/app-shell-context.js +7 -0
- package/dist/commonjs/components/app-shell/app-shell-context.js.map +1 -0
- package/dist/commonjs/components/app-shell/app-shell.d.ts +1 -1
- package/dist/commonjs/components/app-shell/app-shell.d.ts.map +1 -1
- package/dist/commonjs/components/app-shell/app-shell.js +12 -2
- package/dist/commonjs/components/app-shell/app-shell.js.map +1 -1
- package/dist/commonjs/components/combo-box/combo-box.d.ts +28 -7
- package/dist/commonjs/components/combo-box/combo-box.d.ts.map +1 -1
- package/dist/commonjs/components/combo-box/combo-box.js +9 -7
- package/dist/commonjs/components/combo-box/combo-box.js.map +1 -1
- package/dist/commonjs/components/internal/input/input.d.ts +0 -6
- package/dist/commonjs/components/internal/input/input.d.ts.map +1 -1
- package/dist/commonjs/components/internal/input/input.js +6 -22
- package/dist/commonjs/components/internal/input/input.js.map +1 -1
- package/dist/commonjs/components/select/select.d.ts +42 -31
- package/dist/commonjs/components/select/select.d.ts.map +1 -1
- package/dist/commonjs/components/select/select.js +38 -41
- package/dist/commonjs/components/select/select.js.map +1 -1
- package/dist/commonjs/components/{app-header → side-nav}/side-nav.d.ts +12 -1
- package/dist/commonjs/components/side-nav/side-nav.d.ts.map +1 -0
- package/dist/commonjs/components/side-nav/side-nav.js +56 -0
- package/dist/commonjs/components/side-nav/side-nav.js.map +1 -0
- package/dist/commonjs/components/slider/slider.d.ts.map +1 -1
- package/dist/commonjs/components/slider/slider.js +6 -2
- package/dist/commonjs/components/slider/slider.js.map +1 -1
- package/dist/commonjs/components/tag-field/tag-field.d.ts +11 -2
- package/dist/commonjs/components/tag-field/tag-field.d.ts.map +1 -1
- package/dist/commonjs/components/tag-field/tag-field.js +11 -2
- package/dist/commonjs/components/tag-field/tag-field.js.map +1 -1
- package/dist/commonjs/i18n/messages/en-US.d.ts.map +1 -1
- package/dist/commonjs/i18n/messages/en-US.js +7 -0
- package/dist/commonjs/i18n/messages/en-US.js.map +1 -1
- package/dist/commonjs/i18n/messages/types.d.ts +12 -0
- package/dist/commonjs/i18n/messages/types.d.ts.map +1 -1
- package/dist/commonjs/i18n/messages/types.js.map +1 -1
- package/dist/commonjs/icons/case-lower.d.ts +8 -0
- package/dist/commonjs/icons/case-lower.d.ts.map +1 -0
- package/dist/commonjs/icons/case-lower.js +24 -0
- package/dist/commonjs/icons/case-lower.js.map +1 -0
- package/dist/commonjs/icons/case-normal.d.ts +8 -0
- package/dist/commonjs/icons/case-normal.d.ts.map +1 -0
- package/dist/commonjs/icons/case-normal.js +24 -0
- package/dist/commonjs/icons/case-normal.js.map +1 -0
- package/dist/commonjs/icons/case-upper.d.ts +8 -0
- package/dist/commonjs/icons/case-upper.d.ts.map +1 -0
- package/dist/commonjs/icons/case-upper.js +24 -0
- package/dist/commonjs/icons/case-upper.js.map +1 -0
- package/dist/commonjs/icons/chevron-double-down.d.ts +8 -0
- package/dist/commonjs/icons/chevron-double-down.d.ts.map +1 -0
- package/dist/commonjs/icons/chevron-double-down.js +24 -0
- package/dist/commonjs/icons/chevron-double-down.js.map +1 -0
- package/dist/commonjs/icons/chevron-double-left.d.ts +8 -0
- package/dist/commonjs/icons/chevron-double-left.d.ts.map +1 -0
- package/dist/commonjs/icons/chevron-double-left.js +24 -0
- package/dist/commonjs/icons/chevron-double-left.js.map +1 -0
- package/dist/commonjs/icons/chevron-double-right.d.ts +8 -0
- package/dist/commonjs/icons/chevron-double-right.d.ts.map +1 -0
- package/dist/commonjs/icons/chevron-double-right.js +24 -0
- package/dist/commonjs/icons/chevron-double-right.js.map +1 -0
- package/dist/commonjs/icons/chevron-double-up.d.ts +8 -0
- package/dist/commonjs/icons/chevron-double-up.d.ts.map +1 -0
- package/dist/commonjs/icons/chevron-double-up.js +24 -0
- package/dist/commonjs/icons/chevron-double-up.js.map +1 -0
- package/dist/commonjs/icons/cut.d.ts +8 -0
- package/dist/commonjs/icons/cut.d.ts.map +1 -0
- package/dist/commonjs/icons/cut.js +24 -0
- package/dist/commonjs/icons/cut.js.map +1 -0
- package/dist/commonjs/icons/drag-handle.d.ts +8 -0
- package/dist/commonjs/icons/drag-handle.d.ts.map +1 -0
- package/dist/commonjs/icons/drag-handle.js +24 -0
- package/dist/commonjs/icons/drag-handle.js.map +1 -0
- package/dist/commonjs/icons/file-text.d.ts +8 -0
- package/dist/commonjs/icons/file-text.d.ts.map +1 -0
- package/dist/commonjs/icons/file-text.js +24 -0
- package/dist/commonjs/icons/file-text.js.map +1 -0
- package/dist/commonjs/icons/file.d.ts +8 -0
- package/dist/commonjs/icons/file.d.ts.map +1 -0
- package/dist/commonjs/icons/file.js +24 -0
- package/dist/commonjs/icons/file.js.map +1 -0
- package/dist/commonjs/icons/index.d.ts +11 -0
- package/dist/commonjs/icons/index.d.ts.map +1 -1
- package/dist/commonjs/icons/index.js +27 -5
- package/dist/commonjs/icons/index.js.map +1 -1
- package/dist/commonjs/index.d.ts +2 -2
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +2 -2
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/utils/breakpoints.d.ts +9 -0
- package/dist/commonjs/utils/breakpoints.d.ts.map +1 -0
- package/dist/commonjs/utils/breakpoints.js +39 -0
- package/dist/commonjs/utils/breakpoints.js.map +1 -0
- package/dist/commonjs/utils/use-is-mobile.js +2 -2
- package/dist/commonjs/utils/use-is-mobile.js.map +1 -1
- package/dist/commonjs/utils/use-media-query.d.ts +4 -1
- package/dist/commonjs/utils/use-media-query.d.ts.map +1 -1
- package/dist/commonjs/utils/use-media-query.js.map +1 -1
- package/dist/esm/components/app-header/app-header.d.ts +1 -1
- package/dist/esm/components/app-header/app-header.d.ts.map +1 -1
- package/dist/esm/components/app-header/app-header.js +5 -1
- package/dist/esm/components/app-header/app-header.js.map +1 -1
- package/dist/esm/components/app-header/nav-button.d.ts +2 -2
- package/dist/esm/components/app-header/nav-button.d.ts.map +1 -1
- package/dist/esm/components/app-header/nav-button.js +8 -1
- package/dist/esm/components/app-header/nav-button.js.map +1 -1
- package/dist/esm/components/app-shell/app-shell-context.d.ts +2 -0
- package/dist/esm/components/app-shell/app-shell-context.d.ts.map +1 -0
- package/dist/esm/components/app-shell/app-shell-context.js +4 -0
- package/dist/esm/components/app-shell/app-shell-context.js.map +1 -0
- package/dist/esm/components/app-shell/app-shell.d.ts +1 -1
- package/dist/esm/components/app-shell/app-shell.d.ts.map +1 -1
- package/dist/esm/components/app-shell/app-shell.js +12 -2
- package/dist/esm/components/app-shell/app-shell.js.map +1 -1
- package/dist/esm/components/combo-box/combo-box.d.ts +28 -7
- package/dist/esm/components/combo-box/combo-box.d.ts.map +1 -1
- package/dist/esm/components/combo-box/combo-box.js +9 -7
- package/dist/esm/components/combo-box/combo-box.js.map +1 -1
- package/dist/esm/components/internal/input/input.d.ts +0 -6
- package/dist/esm/components/internal/input/input.d.ts.map +1 -1
- package/dist/esm/components/internal/input/input.js +6 -22
- package/dist/esm/components/internal/input/input.js.map +1 -1
- package/dist/esm/components/select/select.d.ts +42 -31
- package/dist/esm/components/select/select.d.ts.map +1 -1
- package/dist/esm/components/select/select.js +40 -43
- package/dist/esm/components/select/select.js.map +1 -1
- package/dist/esm/components/{app-header → side-nav}/side-nav.d.ts +12 -1
- package/dist/esm/components/side-nav/side-nav.d.ts.map +1 -0
- package/dist/esm/components/side-nav/side-nav.js +50 -0
- package/dist/esm/components/side-nav/side-nav.js.map +1 -0
- package/dist/esm/components/slider/slider.d.ts.map +1 -1
- package/dist/esm/components/slider/slider.js +6 -2
- package/dist/esm/components/slider/slider.js.map +1 -1
- package/dist/esm/components/tag-field/tag-field.d.ts +11 -2
- package/dist/esm/components/tag-field/tag-field.d.ts.map +1 -1
- package/dist/esm/components/tag-field/tag-field.js +11 -2
- package/dist/esm/components/tag-field/tag-field.js.map +1 -1
- package/dist/esm/i18n/messages/en-US.d.ts.map +1 -1
- package/dist/esm/i18n/messages/en-US.js +7 -0
- package/dist/esm/i18n/messages/en-US.js.map +1 -1
- package/dist/esm/i18n/messages/types.d.ts +12 -0
- package/dist/esm/i18n/messages/types.d.ts.map +1 -1
- package/dist/esm/i18n/messages/types.js.map +1 -1
- package/dist/esm/icons/case-lower.d.ts +8 -0
- package/dist/esm/icons/case-lower.d.ts.map +1 -0
- package/dist/esm/icons/case-lower.js +19 -0
- package/dist/esm/icons/case-lower.js.map +1 -0
- package/dist/esm/icons/case-normal.d.ts +8 -0
- package/dist/esm/icons/case-normal.d.ts.map +1 -0
- package/dist/esm/icons/case-normal.js +19 -0
- package/dist/esm/icons/case-normal.js.map +1 -0
- package/dist/esm/icons/case-upper.d.ts +8 -0
- package/dist/esm/icons/case-upper.d.ts.map +1 -0
- package/dist/esm/icons/case-upper.js +19 -0
- package/dist/esm/icons/case-upper.js.map +1 -0
- package/dist/esm/icons/chevron-double-down.d.ts +8 -0
- package/dist/esm/icons/chevron-double-down.d.ts.map +1 -0
- package/dist/esm/icons/chevron-double-down.js +19 -0
- package/dist/esm/icons/chevron-double-down.js.map +1 -0
- package/dist/esm/icons/chevron-double-left.d.ts +8 -0
- package/dist/esm/icons/chevron-double-left.d.ts.map +1 -0
- package/dist/esm/icons/chevron-double-left.js +19 -0
- package/dist/esm/icons/chevron-double-left.js.map +1 -0
- package/dist/esm/icons/chevron-double-right.d.ts +8 -0
- package/dist/esm/icons/chevron-double-right.d.ts.map +1 -0
- package/dist/esm/icons/chevron-double-right.js +19 -0
- package/dist/esm/icons/chevron-double-right.js.map +1 -0
- package/dist/esm/icons/chevron-double-up.d.ts +8 -0
- package/dist/esm/icons/chevron-double-up.d.ts.map +1 -0
- package/dist/esm/icons/chevron-double-up.js +19 -0
- package/dist/esm/icons/chevron-double-up.js.map +1 -0
- package/dist/esm/icons/cut.d.ts +8 -0
- package/dist/esm/icons/cut.d.ts.map +1 -0
- package/dist/esm/icons/cut.js +19 -0
- package/dist/esm/icons/cut.js.map +1 -0
- package/dist/esm/icons/drag-handle.d.ts +8 -0
- package/dist/esm/icons/drag-handle.d.ts.map +1 -0
- package/dist/esm/icons/drag-handle.js +19 -0
- package/dist/esm/icons/drag-handle.js.map +1 -0
- package/dist/esm/icons/file-text.d.ts +8 -0
- package/dist/esm/icons/file-text.d.ts.map +1 -0
- package/dist/esm/icons/file-text.js +19 -0
- package/dist/esm/icons/file-text.js.map +1 -0
- package/dist/esm/icons/file.d.ts +8 -0
- package/dist/esm/icons/file.d.ts.map +1 -0
- package/dist/esm/icons/file.js +19 -0
- package/dist/esm/icons/file.js.map +1 -0
- package/dist/esm/icons/index.d.ts +11 -0
- package/dist/esm/icons/index.d.ts.map +1 -1
- package/dist/esm/icons/index.js +11 -0
- package/dist/esm/icons/index.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/breakpoints.d.ts +9 -0
- package/dist/esm/utils/breakpoints.d.ts.map +1 -0
- package/dist/esm/utils/breakpoints.js +35 -0
- package/dist/esm/utils/breakpoints.js.map +1 -0
- package/dist/esm/utils/use-is-mobile.js +2 -2
- package/dist/esm/utils/use-is-mobile.js.map +1 -1
- package/dist/esm/utils/use-media-query.d.ts +4 -1
- package/dist/esm/utils/use-media-query.d.ts.map +1 -1
- package/dist/esm/utils/use-media-query.js.map +1 -1
- package/dist-styles/core.css +1 -1
- package/dist-styles/styles.css +1 -1
- package/package.json +1 -1
- package/dist/commonjs/components/app-header/side-nav.d.ts.map +0 -1
- package/dist/commonjs/components/app-header/side-nav.js +0 -36
- package/dist/commonjs/components/app-header/side-nav.js.map +0 -1
- package/dist/esm/components/app-header/side-nav.d.ts.map +0 -1
- package/dist/esm/components/app-header/side-nav.js +0 -30
- package/dist/esm/components/app-header/side-nav.js.map +0 -1
|
@@ -1,14 +1,36 @@
|
|
|
1
|
-
import { type UIEventHandler } from 'react';
|
|
1
|
+
import { type ReactNode, type UIEventHandler } from 'react';
|
|
2
2
|
import { type ListBoxItemProps as RACListBoxItemProps, type SelectProps as RACSelectProps } from 'react-aria-components';
|
|
3
3
|
import type { ApiProps, AsyncItemLoadingProps, CollectionItem, CollectionProps, CommonProps, FieldProps, Key, StringLikeChildren } from '../types.js';
|
|
4
|
-
export type
|
|
5
|
-
export interface SelectProps<T extends CollectionItem = CollectionItem, M extends
|
|
6
|
-
/**
|
|
4
|
+
export type SelectSelectionMode = 'single' | 'multiple';
|
|
5
|
+
export interface SelectProps<T extends CollectionItem = CollectionItem, M extends SelectSelectionMode = 'single'> extends CommonProps, FieldProps<M extends 'single' ? Key : Key[]>, CollectionProps<T>, AsyncItemLoadingProps, ApiProps<SelectApi>, Pick<RACSelectProps<T, M>, 'isDisabled' | 'isRequired' | 'isInvalid' | 'autoComplete' | 'autoFocus' | 'placeholder' | 'onFocus' | 'onBlur' | 'onOpenChange'> {
|
|
6
|
+
/**
|
|
7
|
+
* The selection mode of the select.
|
|
8
|
+
* @default 'single'
|
|
9
|
+
*/
|
|
10
|
+
selectionMode?: M;
|
|
11
|
+
/** The current value (controlled). */
|
|
12
|
+
value?: M extends 'single' ? Key | null : Key[];
|
|
13
|
+
/** The initial value (uncontrolled). */
|
|
14
|
+
defaultValue?: M extends 'single' ? Key : Key[];
|
|
15
|
+
/** Handler that is called when the value changes. */
|
|
16
|
+
onChange?: (key: M extends 'single' ? Key | null : Key[]) => void;
|
|
17
|
+
/**
|
|
18
|
+
* The currently selected key in the collection (controlled).
|
|
19
|
+
* @deprecated Use `value` instead. Not compatible with `selectionMode="multiple"`.
|
|
20
|
+
*/
|
|
7
21
|
selectedKey?: Key | null;
|
|
8
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* The initial selected key in the collection (uncontrolled).
|
|
24
|
+
* @deprecated Use `defaultValue` instead. Not compatible with `selectionMode="multiple"`.
|
|
25
|
+
*/
|
|
9
26
|
defaultSelectedKey?: Key;
|
|
10
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Handler that is called when the selection changes.
|
|
29
|
+
* @deprecated Use `onChange` instead. Not compatible with `selectionMode="multiple"`.
|
|
30
|
+
*/
|
|
11
31
|
onSelectionChange?: (key: Key | null) => void;
|
|
32
|
+
/** Whether to display a clear button to clear the selection. */
|
|
33
|
+
isClearable?: boolean;
|
|
12
34
|
/**
|
|
13
35
|
* Whether the list of options should be virtualized. Use this as a performance optimization for large lists.
|
|
14
36
|
* @default false
|
|
@@ -16,39 +38,22 @@ export interface SelectProps<T extends CollectionItem = CollectionItem, M extend
|
|
|
16
38
|
isVirtualized?: boolean;
|
|
17
39
|
/** Handler that is called when the list of items is scrolled. */
|
|
18
40
|
onScroll?: UIEventHandler<HTMLDivElement>;
|
|
19
|
-
/**
|
|
20
|
-
* The selection mode of the select.
|
|
21
|
-
* @default 'single'
|
|
22
|
-
*/
|
|
23
|
-
UNSTABLE_selectionMode?: M;
|
|
24
|
-
/** The value of the select (controlled). */
|
|
25
|
-
UNSTABLE_value?: M extends 'single' ? Key | null : Key[];
|
|
26
|
-
/** The initial value of the select (uncontrolled). */
|
|
27
|
-
UNSTABLE_defaultValue?: M extends 'single' ? Key : Key[];
|
|
28
|
-
/** Handler that is called when the value changes. */
|
|
29
|
-
UNSTABLE_onChange?: (key: M extends 'single' ? Key | null : Key[]) => void;
|
|
30
|
-
/**
|
|
31
|
-
* How the selected value is displayed.
|
|
32
|
-
* @default 'text'
|
|
33
|
-
*/
|
|
34
|
-
UNSTABLE_valueDisplay?: 'text' | 'tags' | 'count';
|
|
35
41
|
/**
|
|
36
42
|
* Whether the list of options should be filterable.
|
|
37
43
|
* @default false
|
|
38
44
|
*/
|
|
39
|
-
|
|
45
|
+
isFilterable?: boolean;
|
|
40
46
|
/** The value of the filter input (controlled). */
|
|
41
|
-
|
|
47
|
+
filterValue?: string;
|
|
42
48
|
/** The initial value of the filter input (uncontrolled). */
|
|
43
|
-
|
|
49
|
+
defaultFilterValue?: string;
|
|
44
50
|
/** Handler that is called when the filter value changes. */
|
|
45
|
-
|
|
51
|
+
onFilterChange?: (value: string) => void;
|
|
46
52
|
/** A custom filter function to use instead of the default filter. */
|
|
47
|
-
UNSTABLE_filter?: ((textValue: string, inputValue: string,
|
|
53
|
+
UNSTABLE_filter?: ((textValue: string, inputValue: string, item: {
|
|
48
54
|
key: Key;
|
|
49
55
|
value: T | null;
|
|
50
56
|
}) => boolean) | null;
|
|
51
|
-
UNSTABLE_isClearable?: boolean;
|
|
52
57
|
}
|
|
53
58
|
/** The imperative API exposed by the `Select` component. */
|
|
54
59
|
export interface SelectApi {
|
|
@@ -56,20 +61,26 @@ export interface SelectApi {
|
|
|
56
61
|
focus: () => void;
|
|
57
62
|
}
|
|
58
63
|
/**
|
|
59
|
-
* Allows users to select one
|
|
64
|
+
* Allows users to select one or more items from a collapsible list.
|
|
60
65
|
*
|
|
61
66
|
* See [select usage guidelines](https://ui.cimpress.io/components/select/).
|
|
62
67
|
*/
|
|
63
|
-
declare const _Select: <T extends CollectionItem, M extends
|
|
68
|
+
declare const _Select: <T extends CollectionItem, M extends SelectSelectionMode = "single">(props: SelectProps<T, M> & import("react").RefAttributes<HTMLDivElement> & import("../../with-style-props.js").StyleProps) => import("react").JSX.Element | null;
|
|
64
69
|
export { _Select as Select };
|
|
65
70
|
export interface SelectItemProps extends Pick<RACListBoxItemProps, 'isDisabled' | 'onHoverStart' | 'onHoverEnd'> {
|
|
66
71
|
/** The ID of the item. Has to be unique across all sections and items. */
|
|
67
72
|
id?: Key;
|
|
68
73
|
/** The content to display as the label. */
|
|
69
74
|
children: StringLikeChildren;
|
|
75
|
+
/** Additional description for the item. */
|
|
76
|
+
description?: string;
|
|
77
|
+
/** A non-interactive piece of content displayed at the start of the item. */
|
|
78
|
+
icon?: ReactNode;
|
|
79
|
+
/** A non-interactive piece of content displayed at the end of the item. */
|
|
80
|
+
UNSTABLE_meta?: ReactNode;
|
|
70
81
|
}
|
|
71
82
|
/** Renders a single list item within `Select`. */
|
|
72
|
-
export declare function SelectItem({ children, ...props }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
|
|
83
|
+
export declare function SelectItem({ children, description, icon, UNSTABLE_meta: meta, ...props }: SelectItemProps): import("react/jsx-runtime").JSX.Element;
|
|
73
84
|
export declare namespace SelectItem {
|
|
74
85
|
var displayName: string;
|
|
75
86
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/components/select/select.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../../src/components/select/select.tsx"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,6 @@ exports.Select = void 0;
|
|
|
8
8
|
exports.SelectItem = SelectItem;
|
|
9
9
|
exports.SelectSection = SelectSection;
|
|
10
10
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
11
|
-
const utils_1 = require("@react-aria/utils");
|
|
12
11
|
const clsx_1 = __importDefault(require("clsx"));
|
|
13
12
|
const react_1 = require("react");
|
|
14
13
|
const react_aria_1 = require("react-aria");
|
|
@@ -30,7 +29,6 @@ const tag_js_1 = require("../tag/tag.js");
|
|
|
30
29
|
const search_field_js_1 = require("../text-inputs/search-field.js");
|
|
31
30
|
const text_js_1 = require("../typography/text.js");
|
|
32
31
|
const utils_js_1 = require("../typography/utils.js");
|
|
33
|
-
const visually_hidden_js_1 = require("../visually-hidden/visually-hidden.js");
|
|
34
32
|
const VIRTUAL_LAYOUT_OPTIONS = {
|
|
35
33
|
estimatedRowHeight: 40,
|
|
36
34
|
estimatedHeadingHeight: 32,
|
|
@@ -38,8 +36,9 @@ const VIRTUAL_LAYOUT_OPTIONS = {
|
|
|
38
36
|
padding: 0,
|
|
39
37
|
gap: 0,
|
|
40
38
|
};
|
|
41
|
-
function Select({ children, items, label, description, error, UNSAFE_className, UNSAFE_style, onScroll, isVirtualized = false, apiRef, UNSTABLE_isLoading: isLoading, UNSTABLE_onLoadMore: onLoadMore, selectedKey, defaultSelectedKey, onSelectionChange,
|
|
39
|
+
function Select({ children, items, label, description, error, UNSAFE_className, UNSAFE_style, onScroll, isVirtualized = false, apiRef, UNSTABLE_isLoading: isLoading, UNSTABLE_onLoadMore: onLoadMore, selectedKey, defaultSelectedKey, onSelectionChange, selectionMode = 'single', value, defaultValue, onChange, isClearable = false, isFilterable = false, filterValue, defaultFilterValue, onFilterChange, UNSTABLE_filter: filter, id, isDisabled, ...props }, ref) {
|
|
42
40
|
const triggerRef = (0, react_1.useRef)(null);
|
|
41
|
+
const selectId = (0, react_aria_1.useId)(id);
|
|
43
42
|
const { 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy } = props;
|
|
44
43
|
(0, use_production_warning_js_1.useProductionWarning)(() => {
|
|
45
44
|
if (!label && !ariaLabel && !ariaLabelledBy) {
|
|
@@ -55,16 +54,25 @@ function Select({ children, items, label, description, error, UNSAFE_className,
|
|
|
55
54
|
const listBox = ((0, jsx_runtime_1.jsx)(SelectListBox, { items: items, isLoading: isLoading, onLoadMore: onLoadMore, onScroll: onScroll, children: children }));
|
|
56
55
|
const listBoxWithVirtualizer = isVirtualized ? ((0, jsx_runtime_1.jsx)(react_aria_components_1.Virtualizer, { layout: react_aria_components_1.ListLayout, layoutOptions: VIRTUAL_LAYOUT_OPTIONS, children: listBox })) : (listBox);
|
|
57
56
|
const listBoxWithFilter = isFilterable ? ((0, jsx_runtime_1.jsx)(SelectFilter, { filterValue: filterValue, defaultFilterValue: defaultFilterValue, onFilterChange: onFilterChange, filter: filter, children: listBoxWithVirtualizer })) : (listBoxWithVirtualizer);
|
|
58
|
-
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.Select, { ...props, ref: ref, className: (0, clsx_1.default)('cim-select', UNSAFE_className), style: UNSAFE_style, selectedKey: selectedKey, defaultSelectedKey: defaultSelectedKey, onSelectionChange: onSelectionChange, value:
|
|
57
|
+
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.Select, { ...props, ref: ref, id: selectId, className: (0, clsx_1.default)('cim-select', UNSAFE_className), style: UNSAFE_style, selectedKey: selectedKey, defaultSelectedKey: defaultSelectedKey, onSelectionChange: onSelectionChange, value: value, defaultValue: defaultValue, onChange: onChange, selectionMode: selectionMode, allowsEmptyCollection: isLoading, isDisabled: isDisabled, children: [(0, jsx_runtime_1.jsx)(form_field_js_1.FormFieldLabel, { isRequired: props.isRequired, isDisabled: isDisabled, children: label }), (0, jsx_runtime_1.jsx)(SelectButton, { ref: triggerRef, selectId: selectId, isDisabled: isDisabled, isClearable: isClearable, selectionMode: selectionMode }), (0, jsx_runtime_1.jsx)(form_field_js_1.FormFieldError, { children: error }), (0, jsx_runtime_1.jsx)(form_field_js_1.FormFieldDescription, { children: description }), (0, jsx_runtime_1.jsx)(SelectPopover, { children: listBoxWithFilter })] }));
|
|
59
58
|
}
|
|
60
59
|
function SelectPopover({ children }) {
|
|
61
60
|
const popoverRef = (0, react_1.useRef)(null);
|
|
61
|
+
const interactOutsideTarget = (0, react_1.useRef)(null);
|
|
62
62
|
const selectState = (0, react_1.useContext)(react_aria_components_1.SelectStateContext);
|
|
63
63
|
// Popover is non-modal, but we still want to close it when the user interacts outside
|
|
64
64
|
(0, react_aria_1.useInteractOutside)({
|
|
65
65
|
ref: popoverRef,
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
onInteractOutsideStart: (e) => {
|
|
67
|
+
interactOutsideTarget.current = e.target;
|
|
68
|
+
},
|
|
69
|
+
onInteractOutside: (e) => {
|
|
70
|
+
if (interactOutsideTarget.current === e.target) {
|
|
71
|
+
requestAnimationFrame(() => {
|
|
72
|
+
selectState?.close();
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
interactOutsideTarget.current = null;
|
|
68
76
|
},
|
|
69
77
|
isDisabled: !selectState?.isOpen,
|
|
70
78
|
});
|
|
@@ -74,14 +82,22 @@ function SelectPopover({ children }) {
|
|
|
74
82
|
// Set to non-modal so that interactions like clicking the clear button can be performed without first having to close the popover
|
|
75
83
|
isNonModal: true, children: children }));
|
|
76
84
|
}
|
|
77
|
-
const SelectButton = (0, forward_ref_js_1.forwardRef)(({
|
|
78
|
-
const triggerRef = (0,
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
return ((0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "span", variant: "body", tone: "subtle", children: collectionMessages.format('itemsSelected', { selectedItemCount: state.selectedItems.length }) }));
|
|
85
|
+
const SelectButton = (0, forward_ref_js_1.forwardRef)(({ selectId, isDisabled, isClearable, selectionMode }, ref) => {
|
|
86
|
+
const triggerRef = (0, react_aria_1.useObjectRef)(ref);
|
|
87
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "cim-select-button", children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Button, { ref: triggerRef, className: "cim-select-button-trigger" }), (0, jsx_runtime_1.jsx)(react_aria_components_1.SelectValue, { className: (0, clsx_1.default)('cim-select-button-value', (0, utils_js_1.textStyle)({ variant: 'body', alignment: 'start' })), "data-testid": "select-button-value", children: ({ defaultChildren, isPlaceholder, state }) => {
|
|
88
|
+
if (isPlaceholder) {
|
|
89
|
+
return (0, jsx_runtime_1.jsx)("span", { className: "cim-select-button-value-text", children: defaultChildren });
|
|
83
90
|
}
|
|
84
|
-
|
|
91
|
+
if (selectionMode === 'multiple') {
|
|
92
|
+
return ((0, jsx_runtime_1.jsx)(tag_group_js_1.TagGroup, { "aria-labelledby": selectId, disabledKeys: isDisabled ? state.selectedItems.map((item) => item.key) : undefined, items: state.selectedItems.filter((item) => item != null).map((item) => ({ id: item.key, item })), onRemove: isDisabled
|
|
93
|
+
? undefined
|
|
94
|
+
: (keys) => {
|
|
95
|
+
if (Array.isArray(state.value)) {
|
|
96
|
+
state.setValue(state.value.filter((k) => !keys.has(k)));
|
|
97
|
+
}
|
|
98
|
+
}, UNSAFE_className: "cim-select-tags", children: ({ item }) => (0, jsx_runtime_1.jsx)(tag_js_1.Tag, { isDisabled: item.props.isDisabled, children: item.textValue }) }));
|
|
99
|
+
}
|
|
100
|
+
return defaultChildren;
|
|
85
101
|
} }), isClearable && ((0, jsx_runtime_1.jsx)(SelectClearButton
|
|
86
102
|
// Move focus to trigger button, because button will disappear after clearing
|
|
87
103
|
, {
|
|
@@ -90,25 +106,24 @@ const SelectButton = (0, forward_ref_js_1.forwardRef)(({ valueDisplay, isClearab
|
|
|
90
106
|
});
|
|
91
107
|
function SelectClearButton({ onClear }) {
|
|
92
108
|
const selectState = (0, react_1.useContext)(react_aria_components_1.SelectStateContext);
|
|
109
|
+
const selectMessages = (0, index_js_1.useLocalizedMessages)('select');
|
|
93
110
|
if (!selectState || selectState.selectedItems.length === 0) {
|
|
94
111
|
return null;
|
|
95
112
|
}
|
|
96
|
-
return ((0, jsx_runtime_1.jsx)(x_button_js_1.XButton
|
|
97
|
-
// TODO: i18n once stabilized
|
|
98
|
-
, { "aria-label": "Clear selection", iconType: "circled", onPress: () => {
|
|
113
|
+
return ((0, jsx_runtime_1.jsx)(x_button_js_1.XButton, { "aria-label": selectMessages.format('clearSelection'), iconType: "circled", onPress: () => {
|
|
99
114
|
selectState.setValue(null);
|
|
100
115
|
onClear?.();
|
|
101
116
|
}, slot: null, UNSAFE_className: "cim-select-button-clear" }));
|
|
102
117
|
}
|
|
103
118
|
function SelectListBox({ children, items, isLoading, onLoadMore, ...props }) {
|
|
104
119
|
const collectionMessages = (0, index_js_1.useLocalizedMessages)('UNSTABLE_collection');
|
|
120
|
+
const selectMessages = (0, index_js_1.useLocalizedMessages)('select');
|
|
105
121
|
const selectState = (0, react_1.useContext)(react_aria_components_1.SelectStateContext);
|
|
106
122
|
const isEmpty = selectState?.collection.size === 0;
|
|
107
|
-
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.ListBox, { className: "cim-select-listbox", renderEmptyState: () => !isLoading && (
|
|
108
|
-
// TODO: i18n once stabilized
|
|
109
|
-
(0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "p", variant: "body", tone: "subtle", marginX: 8, marginY: 8, UNSAFE_className: "cim-select-listbox-empty-state", children: "No results found." })), ...props, children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Collection, { items: items, children: children }), (0, jsx_runtime_1.jsx)(react_aria_components_1.ListBoxLoadMoreItem, { onLoadMore: onLoadMore, isLoading: isLoading, children: (0, jsx_runtime_1.jsx)(spinner_js_1.Spinner, { "aria-label": collectionMessages.format(isEmpty ? 'loading' : 'loadingMore'), size: "small", marginY: 8 }) })] }));
|
|
123
|
+
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.ListBox, { className: "cim-select-listbox", renderEmptyState: () => !isLoading && ((0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "p", variant: "body", tone: "subtle", marginX: 8, marginY: 8, UNSAFE_className: "cim-select-listbox-empty-state", children: selectMessages.format('noResultsFound') })), ...props, children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Collection, { items: items, children: children }), (0, jsx_runtime_1.jsx)(react_aria_components_1.ListBoxLoadMoreItem, { onLoadMore: onLoadMore, isLoading: isLoading, children: (0, jsx_runtime_1.jsx)(spinner_js_1.Spinner, { "aria-label": collectionMessages.format(isEmpty ? 'loading' : 'loadingMore'), size: "small", marginY: 8 }) })] }));
|
|
110
124
|
}
|
|
111
125
|
function SelectFilter({ children, filterValue, defaultFilterValue, onFilterChange, filter, }) {
|
|
126
|
+
const selectMessages = (0, index_js_1.useLocalizedMessages)('select');
|
|
112
127
|
const { contains } = (0, react_aria_1.useFilter)({ sensitivity: 'base' });
|
|
113
128
|
const filterFn = (0, react_1.useMemo)(() => {
|
|
114
129
|
if (filter === null)
|
|
@@ -119,37 +134,19 @@ function SelectFilter({ children, filterValue, defaultFilterValue, onFilterChang
|
|
|
119
134
|
return filter(textValue, inputValue, { key: node.key, value: node.value });
|
|
120
135
|
};
|
|
121
136
|
}, [filter, contains]);
|
|
122
|
-
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.Autocomplete, { filter: filterFn, inputValue: filterValue, defaultInputValue: defaultFilterValue, onInputChange: onFilterChange, children: [(0, jsx_runtime_1.jsx)(search_field_js_1.SearchField
|
|
123
|
-
// TODO: i18n once stabilized
|
|
124
|
-
, { "aria-label": "Search", placeholder: "Search", autoFocus: true, marginX: 8, marginTop: 8 }), children] }));
|
|
125
|
-
}
|
|
126
|
-
function SelectTags() {
|
|
127
|
-
const labelContext = (0, react_aria_components_1.useSlottedContext)(react_aria_components_1.LabelContext);
|
|
128
|
-
const selectedItemsLabelId = (0, react_aria_1.useId)();
|
|
129
|
-
return ((0, jsx_runtime_1.jsx)(react_aria_components_1.SelectValue, { children: ({ state }) => {
|
|
130
|
-
if (state.selectedItems.length === 0) {
|
|
131
|
-
return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, {});
|
|
132
|
-
}
|
|
133
|
-
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(tag_group_js_1.TagGroup, { "aria-labelledby": [labelContext?.id, selectedItemsLabelId].filter(Boolean).join(' '), items: state.selectedItems
|
|
134
|
-
.filter((item) => item != null)
|
|
135
|
-
.map((item) => ({ id: item.key, label: item.textValue })), onRemove: (keys) => {
|
|
136
|
-
if (Array.isArray(state.value)) {
|
|
137
|
-
state.setValue(state.value.filter((k) => !keys.has(k)));
|
|
138
|
-
}
|
|
139
|
-
}, marginTop: 8, children: (item) => (0, jsx_runtime_1.jsx)(tag_js_1.Tag, { children: item.label }) }), (0, jsx_runtime_1.jsx)(visually_hidden_js_1.UNSTABLE_VisuallyHidden, { id: selectedItemsLabelId, children: "selected items" })] }));
|
|
140
|
-
} }));
|
|
137
|
+
return ((0, jsx_runtime_1.jsxs)(react_aria_components_1.Autocomplete, { filter: filterFn, inputValue: filterValue, defaultInputValue: defaultFilterValue, onInputChange: onFilterChange, children: [(0, jsx_runtime_1.jsx)(search_field_js_1.SearchField, { "aria-label": selectMessages.format('searchLabel'), placeholder: selectMessages.format('searchPlaceholder'), autoFocus: true, UNSAFE_className: "cim-select-search-field" }), children] }));
|
|
141
138
|
}
|
|
142
139
|
/**
|
|
143
|
-
* Allows users to select one
|
|
140
|
+
* Allows users to select one or more items from a collapsible list.
|
|
144
141
|
*
|
|
145
142
|
* See [select usage guidelines](https://ui.cimpress.io/components/select/).
|
|
146
143
|
*/
|
|
147
144
|
const _Select = (0, with_style_props_js_1.withStyleProps)((0, forward_ref_js_1.forwardRef)(Select), 'Select');
|
|
148
145
|
exports.Select = _Select;
|
|
149
146
|
/** Renders a single list item within `Select`. */
|
|
150
|
-
function SelectItem({ children, ...props }) {
|
|
147
|
+
function SelectItem({ children, description, icon, UNSTABLE_meta: meta, ...props }) {
|
|
151
148
|
const textValue = (0, string_like_children_to_string_js_1.stringLikeChildrenToString)(children);
|
|
152
|
-
return ((0, jsx_runtime_1.jsx)(react_aria_components_1.ListBoxItem, { ...props, className: "cim-select-item", textValue: textValue, children: ({ isDisabled, isSelected, selectionMode }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [selectionMode === 'single' && (0, jsx_runtime_1.jsx)(index_js_2.IconCheckBold, {}), selectionMode === 'multiple' && (0, jsx_runtime_1.jsx)(checkbox_indicator_js_1.CheckboxIndicator, { isSelected: isSelected, isDisabled: isDisabled }), (0, jsx_runtime_1.jsx)(react_aria_components_1.Text, { slot: "label", className: (0, utils_js_1.textStyle)({ variant: 'body', tone: isDisabled ? 'muted' : 'base' }), children: children })] })) }));
|
|
149
|
+
return ((0, jsx_runtime_1.jsx)(react_aria_components_1.ListBoxItem, { ...props, className: "cim-select-item", textValue: textValue, children: ({ isDisabled, isSelected, selectionMode }) => ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [selectionMode === 'single' && (0, jsx_runtime_1.jsx)(index_js_2.IconCheckBold, { "data-selection-indicator": true }), selectionMode === 'multiple' && (0, jsx_runtime_1.jsx)(checkbox_indicator_js_1.CheckboxIndicator, { isSelected: isSelected, isDisabled: isDisabled }), icon && (0, jsx_runtime_1.jsx)("div", { className: "cim-select-item-slot", children: icon }), (0, jsx_runtime_1.jsxs)("div", { className: "cim-select-item-text", children: [(0, jsx_runtime_1.jsx)(react_aria_components_1.Text, { slot: "label", className: (0, utils_js_1.textStyle)({ variant: 'body', tone: isDisabled ? 'muted' : 'base' }), children: children }), description && ((0, jsx_runtime_1.jsx)(react_aria_components_1.Text, { slot: "description", className: (0, utils_js_1.textStyle)({ variant: 'small', tone: isDisabled ? 'muted' : 'subtle' }), children: description }))] }), meta && (0, jsx_runtime_1.jsx)("div", { className: "cim-select-item-slot", children: meta })] })) }));
|
|
153
150
|
}
|
|
154
151
|
SelectItem.displayName = 'SelectItem';
|
|
155
152
|
/** Groups list items within `Select` into a section. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/components/select/select.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { mergeRefs } from '@react-aria/utils';\nimport clsx from 'clsx';\nimport {\n type ForwardedRef,\n type ReactNode,\n type UIEventHandler,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport { useFilter, useId, useInteractOutside, usePreventScroll } from 'react-aria';\nimport {\n Autocomplete as RACAutocomplete,\n Button as RACButton,\n Collection as RACCollection,\n Header as RACHeader,\n LabelContext as RACLabelContext,\n ListBox as RACListBox,\n ListBoxItem as RACListBoxItem,\n type ListBoxItemProps as RACListBoxItemProps,\n ListBoxLoadMoreItem as RACListBoxLoadMoreItem,\n type ListBoxProps as RACListBoxProps,\n ListBoxSection as RACListBoxSection,\n ListLayout as RACListLayout,\n type ListLayoutOptions as RACListLayoutOptions,\n Select as RACSelect,\n type SelectProps as RACSelectProps,\n SelectStateContext as RACSelectStateContext,\n SelectValue as RACSelectValue,\n Text as RACText,\n Virtualizer as RACVirtualizer,\n useSlottedContext,\n} from 'react-aria-components';\nimport { forwardRef } from '../../forward-ref.js';\nimport { useLocalizedMessages } from '../../i18n/index.js';\nimport { IconCheckBold, IconChevronDown } from '../../icons/index.js';\nimport { isProduction } from '../../utils/is-production.js';\nimport { stringLikeChildrenToString } from '../../utils/string-like-children-to-string.js';\nimport { useProductionWarning } from '../../utils/use-production-warning.js';\nimport { withStyleProps } from '../../with-style-props.js';\nimport { CheckboxIndicator } from '../internal/checkbox-indicator/checkbox-indicator.js';\nimport { CollapsibleList } from '../internal/collapsible-list/collapsible-list.js';\nimport { FormFieldDescription, FormFieldError, FormFieldLabel } from '../internal/form-field/form-field.js';\nimport { XButton } from '../internal/x-button/x-button.js';\nimport { Spinner } from '../spinner/spinner.js';\nimport { TagGroup } from '../tag/tag-group.js';\nimport { Tag } from '../tag/tag.js';\nimport { SearchField } from '../text-inputs/search-field.js';\nimport type {\n ApiProps,\n AsyncItemLoadingProps,\n CollectionItem,\n CollectionProps,\n CommonProps,\n FieldProps,\n Key,\n StringLikeChildren,\n} from '../types.js';\nimport { Text } from '../typography/text.js';\nimport { textStyle } from '../typography/utils.js';\nimport { UNSTABLE_VisuallyHidden } from '../visually-hidden/visually-hidden.js';\n\nexport type UNSTABLE_SelectSelectionMode = 'single' | 'multiple';\n\nconst VIRTUAL_LAYOUT_OPTIONS: RACListLayoutOptions = {\n estimatedRowHeight: 40,\n estimatedHeadingHeight: 32,\n loaderHeight: 40,\n padding: 0,\n gap: 0,\n};\n\nexport interface SelectProps<\n T extends CollectionItem = CollectionItem,\n M extends UNSTABLE_SelectSelectionMode = 'single',\n>\n extends\n CommonProps,\n FieldProps<M extends 'single' ? Key : Key[]>,\n CollectionProps<T>,\n AsyncItemLoadingProps,\n ApiProps<SelectApi>,\n Pick<\n RACSelectProps<T, M>,\n | 'isDisabled'\n | 'isRequired'\n | 'isInvalid'\n | 'autoComplete'\n | 'autoFocus'\n | 'placeholder'\n | 'onFocus'\n | 'onBlur'\n | 'onOpenChange'\n > {\n /** The currently selected key in the collection (controlled). */\n selectedKey?: Key | null;\n /** The initial selected key in the collection (uncontrolled). */\n defaultSelectedKey?: Key;\n /** Handler that is called when the selection changes. */\n onSelectionChange?: (key: Key | null) => void;\n /**\n * Whether the list of options should be virtualized. Use this as a performance optimization for large lists.\n * @default false\n */\n isVirtualized?: boolean;\n /** Handler that is called when the list of items is scrolled. */\n onScroll?: UIEventHandler<HTMLDivElement>;\n /**\n * The selection mode of the select.\n * @default 'single'\n */\n UNSTABLE_selectionMode?: M;\n /** The value of the select (controlled). */\n UNSTABLE_value?: M extends 'single' ? Key | null : Key[];\n /** The initial value of the select (uncontrolled). */\n UNSTABLE_defaultValue?: M extends 'single' ? Key : Key[];\n /** Handler that is called when the value changes. */\n UNSTABLE_onChange?: (key: M extends 'single' ? Key | null : Key[]) => void;\n /**\n * How the selected value is displayed.\n * @default 'text'\n */\n UNSTABLE_valueDisplay?: 'text' | 'tags' | 'count';\n /**\n * Whether the list of options should be filterable.\n * @default false\n */\n UNSTABLE_isFilterable?: boolean;\n /** The value of the filter input (controlled). */\n UNSTABLE_filterValue?: string;\n /** The initial value of the filter input (uncontrolled). */\n UNSTABLE_defaultFilterValue?: string;\n /** Handler that is called when the filter value changes. */\n UNSTABLE_onFilterChange?: (value: string) => void;\n /** A custom filter function to use instead of the default filter. */\n UNSTABLE_filter?: ((textValue: string, inputValue: string, node: { key: Key; value: T | null }) => boolean) | null;\n UNSTABLE_isClearable?: boolean;\n}\n\n/** The imperative API exposed by the `Select` component. */\nexport interface SelectApi {\n /** Focuses the trigger button and opens the list of items. */\n focus: () => void;\n}\n\nfunction Select<T extends CollectionItem, M extends UNSTABLE_SelectSelectionMode = 'single'>(\n {\n children,\n items,\n label,\n description,\n error,\n UNSAFE_className,\n UNSAFE_style,\n onScroll,\n isVirtualized = false,\n apiRef,\n UNSTABLE_isLoading: isLoading,\n UNSTABLE_onLoadMore: onLoadMore,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n UNSTABLE_selectionMode,\n UNSTABLE_value,\n UNSTABLE_defaultValue,\n UNSTABLE_onChange,\n UNSTABLE_valueDisplay: valueDisplay = 'text',\n UNSTABLE_isFilterable: isFilterable = false,\n UNSTABLE_filterValue: filterValue,\n UNSTABLE_defaultFilterValue: defaultFilterValue,\n UNSTABLE_onFilterChange: onFilterChange,\n UNSTABLE_filter: filter,\n UNSTABLE_isClearable: isClearable = false,\n ...props\n }: SelectProps<T, M>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n\n const { 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy } = props;\n\n useProductionWarning(() => {\n if (!label && !ariaLabel && !ariaLabelledBy) {\n console.warn('Select requires one of label / aria-label / aria-labelledby for accessibility');\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n if (!isProduction() && items != null && typeof children !== 'function') {\n console.warn('`Select` requires `children` to be a function when using `items` prop');\n }\n\n useImperativeHandle(\n apiRef,\n () => ({\n focus: () => triggerRef.current?.focus(),\n }),\n [],\n );\n\n const listBox = (\n <SelectListBox items={items} isLoading={isLoading} onLoadMore={onLoadMore} onScroll={onScroll}>\n {children}\n </SelectListBox>\n );\n\n const listBoxWithVirtualizer = isVirtualized ? (\n <RACVirtualizer layout={RACListLayout} layoutOptions={VIRTUAL_LAYOUT_OPTIONS}>\n {listBox}\n </RACVirtualizer>\n ) : (\n listBox\n );\n\n const listBoxWithFilter = isFilterable ? (\n <SelectFilter\n filterValue={filterValue}\n defaultFilterValue={defaultFilterValue}\n onFilterChange={onFilterChange}\n filter={filter}\n >\n {listBoxWithVirtualizer}\n </SelectFilter>\n ) : (\n listBoxWithVirtualizer\n );\n\n return (\n <RACSelect\n {...props}\n ref={ref}\n className={clsx('cim-select', UNSAFE_className)}\n style={UNSAFE_style}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange}\n value={UNSTABLE_value}\n defaultValue={UNSTABLE_defaultValue}\n onChange={UNSTABLE_onChange}\n selectionMode={UNSTABLE_selectionMode}\n allowsEmptyCollection={isLoading}\n >\n <FormFieldLabel isRequired={props.isRequired} isDisabled={props.isDisabled}>\n {label}\n </FormFieldLabel>\n <SelectButton ref={triggerRef} valueDisplay={valueDisplay} isClearable={isClearable} />\n <FormFieldError>{error}</FormFieldError>\n <FormFieldDescription>{description}</FormFieldDescription>\n <SelectPopover>{listBoxWithFilter}</SelectPopover>\n {UNSTABLE_selectionMode === 'multiple' && valueDisplay === 'tags' && <SelectTags />}\n </RACSelect>\n );\n}\n\ninterface SelectPopoverProps {\n children: ReactNode;\n}\n\nfunction SelectPopover({ children }: SelectPopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const selectState = useContext(RACSelectStateContext);\n\n // Popover is non-modal, but we still want to close it when the user interacts outside\n useInteractOutside({\n ref: popoverRef,\n onInteractOutside: () => {\n selectState?.close();\n },\n isDisabled: !selectState?.isOpen,\n });\n\n // Popover is non-modal, but we still want to prevent scrolling when it is open\n usePreventScroll({ isDisabled: !selectState?.isOpen });\n\n return (\n <CollapsibleList\n ref={popoverRef}\n offset={5} // 1px border + 4px actual offset\n maxHeight={315}\n // Set to non-modal so that interactions like clicking the clear button can be performed without first having to close the popover\n isNonModal\n >\n {children}\n </CollapsibleList>\n );\n}\n\ninterface SelectButtonProps {\n valueDisplay: SelectProps['UNSTABLE_valueDisplay'];\n isClearable?: SelectProps['UNSTABLE_isClearable'];\n}\n\nconst SelectButton = forwardRef<SelectButtonProps, HTMLButtonElement>(({ valueDisplay, isClearable }, ref) => {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const collectionMessages = useLocalizedMessages('UNSTABLE_collection');\n\n return (\n <div className=\"cim-select-button\">\n <RACButton ref={mergeRefs(ref, triggerRef)} className=\"cim-select-button-trigger\" />\n <RACSelectValue className={clsx('cim-select-button-value', textStyle({ variant: 'body', alignment: 'start' }))}>\n {({ selectedText, defaultChildren, isPlaceholder, state }) => {\n if ((valueDisplay === 'tags' && state.selectedItems.length > 0) || valueDisplay === 'count') {\n return (\n <Text as=\"span\" variant=\"body\" tone=\"subtle\">\n {collectionMessages.format('itemsSelected', { selectedItemCount: state.selectedItems.length })}\n </Text>\n );\n }\n\n return isPlaceholder ? defaultChildren : selectedText;\n }}\n </RACSelectValue>\n {isClearable && (\n <SelectClearButton\n // Move focus to trigger button, because button will disappear after clearing\n onClear={() => triggerRef.current?.focus()}\n />\n )}\n <IconChevronDown UNSAFE_className=\"cim-select-button-chevron\" />\n </div>\n );\n});\n\nfunction SelectClearButton({ onClear }: { onClear?: () => void }) {\n const selectState = useContext(RACSelectStateContext);\n\n if (!selectState || selectState.selectedItems.length === 0) {\n return null;\n }\n\n return (\n <XButton\n // TODO: i18n once stabilized\n aria-label=\"Clear selection\"\n iconType=\"circled\"\n onPress={() => {\n selectState.setValue(null);\n onClear?.();\n }}\n slot={null}\n UNSAFE_className=\"cim-select-button-clear\"\n />\n );\n}\n\nfunction SelectListBox<T extends CollectionItem>({\n children,\n items,\n isLoading,\n onLoadMore,\n ...props\n}: RACListBoxProps<T> & {\n isLoading?: boolean;\n onLoadMore?: () => void;\n}) {\n const collectionMessages = useLocalizedMessages('UNSTABLE_collection');\n const selectState = useContext(RACSelectStateContext);\n const isEmpty = selectState?.collection.size === 0;\n\n return (\n <RACListBox\n className=\"cim-select-listbox\"\n renderEmptyState={() =>\n !isLoading && (\n // TODO: i18n once stabilized\n <Text\n as=\"p\"\n variant=\"body\"\n tone=\"subtle\"\n marginX={8}\n marginY={8}\n UNSAFE_className=\"cim-select-listbox-empty-state\"\n >\n No results found.\n </Text>\n )\n }\n {...props}\n >\n <RACCollection items={items}>{children}</RACCollection>\n <RACListBoxLoadMoreItem onLoadMore={onLoadMore} isLoading={isLoading}>\n <Spinner aria-label={collectionMessages.format(isEmpty ? 'loading' : 'loadingMore')} size=\"small\" marginY={8} />\n </RACListBoxLoadMoreItem>\n </RACListBox>\n );\n}\n\nfunction SelectFilter<T extends CollectionItem>({\n children,\n filterValue,\n defaultFilterValue,\n onFilterChange,\n filter,\n}: RACListBoxProps<T> & {\n children: ReactNode;\n filterValue?: string;\n defaultFilterValue?: string;\n onFilterChange?: (value: string) => void;\n filter?: ((textValue: string, inputValue: string, node: { key: Key; value: T | null }) => boolean) | null;\n}) {\n const { contains } = useFilter({ sensitivity: 'base' });\n const filterFn = useMemo(() => {\n if (filter === null) return undefined;\n if (filter == null) return contains;\n\n return (textValue: string, inputValue: string, node: { key: Key; value: T | null }) => {\n return filter(textValue, inputValue, { key: node.key, value: node.value });\n };\n }, [filter, contains]);\n\n return (\n <RACAutocomplete<T>\n filter={filterFn}\n inputValue={filterValue}\n defaultInputValue={defaultFilterValue}\n onInputChange={onFilterChange}\n >\n <SearchField\n // TODO: i18n once stabilized\n aria-label=\"Search\"\n placeholder=\"Search\"\n autoFocus\n marginX={8}\n marginTop={8}\n />\n {children}\n </RACAutocomplete>\n );\n}\n\nfunction SelectTags() {\n const labelContext = useSlottedContext(RACLabelContext);\n const selectedItemsLabelId = useId();\n\n return (\n <RACSelectValue>\n {({ state }) => {\n if (state.selectedItems.length === 0) {\n return <></>;\n }\n\n return (\n <>\n <TagGroup\n aria-labelledby={[labelContext?.id, selectedItemsLabelId].filter(Boolean).join(' ')}\n items={state.selectedItems\n .filter((item) => item != null)\n .map((item) => ({ id: item.key, label: item.textValue }))}\n onRemove={(keys) => {\n if (Array.isArray(state.value)) {\n state.setValue(state.value.filter((k) => !keys.has(k)));\n }\n }}\n marginTop={8}\n >\n {(item) => <Tag>{item.label}</Tag>}\n </TagGroup>\n {/* TODO: i18n once stabilized */}\n <UNSTABLE_VisuallyHidden id={selectedItemsLabelId}>selected items</UNSTABLE_VisuallyHidden>\n </>\n );\n }}\n </RACSelectValue>\n );\n}\n\n/**\n * Allows users to select one item from a collapsible list.\n *\n * See [select usage guidelines](https://ui.cimpress.io/components/select/).\n */\nconst _Select = withStyleProps(forwardRef(Select), 'Select');\n\nexport { _Select as Select };\n\nexport interface SelectItemProps extends Pick<RACListBoxItemProps, 'isDisabled' | 'onHoverStart' | 'onHoverEnd'> {\n /** The ID of the item. Has to be unique across all sections and items. */\n id?: Key;\n /** The content to display as the label. */\n children: StringLikeChildren;\n}\n\n/** Renders a single list item within `Select`. */\nexport function SelectItem({ children, ...props }: SelectItemProps) {\n const textValue = stringLikeChildrenToString(children);\n\n return (\n <RACListBoxItem {...props} className=\"cim-select-item\" textValue={textValue}>\n {({ isDisabled, isSelected, selectionMode }) => (\n <>\n {selectionMode === 'single' && <IconCheckBold />}\n {selectionMode === 'multiple' && <CheckboxIndicator isSelected={isSelected} isDisabled={isDisabled} />}\n\n <RACText slot=\"label\" className={textStyle({ variant: 'body', tone: isDisabled ? 'muted' : 'base' })}>\n {children}\n </RACText>\n </>\n )}\n </RACListBoxItem>\n );\n}\n\nSelectItem.displayName = 'SelectItem';\n\nexport interface SelectSectionProps<T extends CollectionItem> extends CollectionProps<T> {\n /** The ID of the section. Has to be unique across all sections and items. */\n id?: Key;\n /** The content to display as the section title. */\n title: string;\n}\n\n/** Groups list items within `Select` into a section. */\nexport function SelectSection<T extends CollectionItem>({ title, children, items, ...props }: SelectSectionProps<T>) {\n if (!isProduction() && items != null && typeof children !== 'function') {\n console.warn('`SelectSection` requires `children` to be a function when using `items` prop');\n }\n\n return (\n <RACListBoxSection {...props} className=\"cim-select-section\">\n <RACHeader\n className={clsx('cim-select-section-header', textStyle({ variant: 'small-semibold', tone: 'subtle' }))}\n >\n {title}\n </RACHeader>\n <RACCollection items={items}>{children}</RACCollection>\n </RACListBoxSection>\n );\n}\n\nSelectSection.displayName = 'SelectSection';\n"]}
|
|
1
|
+
{"version":3,"file":"select.js","sourceRoot":"","sources":["../../../../src/components/select/select.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport clsx from 'clsx';\nimport {\n type ForwardedRef,\n type ReactNode,\n type UIEventHandler,\n useContext,\n useImperativeHandle,\n useMemo,\n useRef,\n} from 'react';\nimport { useFilter, useId, useInteractOutside, useObjectRef, usePreventScroll } from 'react-aria';\nimport {\n Autocomplete as RACAutocomplete,\n Button as RACButton,\n Collection as RACCollection,\n Header as RACHeader,\n ListBox as RACListBox,\n ListBoxItem as RACListBoxItem,\n type ListBoxItemProps as RACListBoxItemProps,\n ListBoxLoadMoreItem as RACListBoxLoadMoreItem,\n type ListBoxProps as RACListBoxProps,\n ListBoxSection as RACListBoxSection,\n ListLayout as RACListLayout,\n type ListLayoutOptions as RACListLayoutOptions,\n Select as RACSelect,\n type SelectProps as RACSelectProps,\n SelectStateContext as RACSelectStateContext,\n SelectValue as RACSelectValue,\n Text as RACText,\n Virtualizer as RACVirtualizer,\n} from 'react-aria-components';\nimport { forwardRef } from '../../forward-ref.js';\nimport { useLocalizedMessages } from '../../i18n/index.js';\nimport { IconCheckBold, IconChevronDown } from '../../icons/index.js';\nimport { isProduction } from '../../utils/is-production.js';\nimport { stringLikeChildrenToString } from '../../utils/string-like-children-to-string.js';\nimport { useProductionWarning } from '../../utils/use-production-warning.js';\nimport { withStyleProps } from '../../with-style-props.js';\nimport { CheckboxIndicator } from '../internal/checkbox-indicator/checkbox-indicator.js';\nimport { CollapsibleList } from '../internal/collapsible-list/collapsible-list.js';\nimport { FormFieldDescription, FormFieldError, FormFieldLabel } from '../internal/form-field/form-field.js';\nimport { XButton } from '../internal/x-button/x-button.js';\nimport { Spinner } from '../spinner/spinner.js';\nimport { TagGroup } from '../tag/tag-group.js';\nimport { Tag, type TagProps } from '../tag/tag.js';\nimport { SearchField } from '../text-inputs/search-field.js';\nimport type {\n ApiProps,\n AsyncItemLoadingProps,\n CollectionItem,\n CollectionProps,\n CommonProps,\n FieldProps,\n Key,\n StringLikeChildren,\n} from '../types.js';\nimport { Text } from '../typography/text.js';\nimport { textStyle } from '../typography/utils.js';\n\nexport type SelectSelectionMode = 'single' | 'multiple';\n\nconst VIRTUAL_LAYOUT_OPTIONS: RACListLayoutOptions = {\n estimatedRowHeight: 40,\n estimatedHeadingHeight: 32,\n loaderHeight: 40,\n padding: 0,\n gap: 0,\n};\n\nexport interface SelectProps<T extends CollectionItem = CollectionItem, M extends SelectSelectionMode = 'single'>\n extends\n CommonProps,\n FieldProps<M extends 'single' ? Key : Key[]>,\n CollectionProps<T>,\n AsyncItemLoadingProps,\n ApiProps<SelectApi>,\n Pick<\n RACSelectProps<T, M>,\n | 'isDisabled'\n | 'isRequired'\n | 'isInvalid'\n | 'autoComplete'\n | 'autoFocus'\n | 'placeholder'\n | 'onFocus'\n | 'onBlur'\n | 'onOpenChange'\n > {\n /**\n * The selection mode of the select.\n * @default 'single'\n */\n selectionMode?: M;\n /** The current value (controlled). */\n value?: M extends 'single' ? Key | null : Key[];\n /** The initial value (uncontrolled). */\n defaultValue?: M extends 'single' ? Key : Key[];\n /** Handler that is called when the value changes. */\n onChange?: (key: M extends 'single' ? Key | null : Key[]) => void;\n /**\n * The currently selected key in the collection (controlled).\n * @deprecated Use `value` instead. Not compatible with `selectionMode=\"multiple\"`.\n */\n selectedKey?: Key | null;\n /**\n * The initial selected key in the collection (uncontrolled).\n * @deprecated Use `defaultValue` instead. Not compatible with `selectionMode=\"multiple\"`.\n */\n defaultSelectedKey?: Key;\n /**\n * Handler that is called when the selection changes.\n * @deprecated Use `onChange` instead. Not compatible with `selectionMode=\"multiple\"`.\n */\n onSelectionChange?: (key: Key | null) => void;\n /** Whether to display a clear button to clear the selection. */\n isClearable?: boolean;\n /**\n * Whether the list of options should be virtualized. Use this as a performance optimization for large lists.\n * @default false\n */\n isVirtualized?: boolean;\n /** Handler that is called when the list of items is scrolled. */\n onScroll?: UIEventHandler<HTMLDivElement>;\n /**\n * Whether the list of options should be filterable.\n * @default false\n */\n isFilterable?: boolean;\n /** The value of the filter input (controlled). */\n filterValue?: string;\n /** The initial value of the filter input (uncontrolled). */\n defaultFilterValue?: string;\n /** Handler that is called when the filter value changes. */\n onFilterChange?: (value: string) => void;\n /** A custom filter function to use instead of the default filter. */\n UNSTABLE_filter?: ((textValue: string, inputValue: string, item: { key: Key; value: T | null }) => boolean) | null;\n}\n\n/** The imperative API exposed by the `Select` component. */\nexport interface SelectApi {\n /** Focuses the trigger button and opens the list of items. */\n focus: () => void;\n}\n\nfunction Select<T extends CollectionItem, M extends SelectSelectionMode = 'single'>(\n {\n children,\n items,\n label,\n description,\n error,\n UNSAFE_className,\n UNSAFE_style,\n onScroll,\n isVirtualized = false,\n apiRef,\n UNSTABLE_isLoading: isLoading,\n UNSTABLE_onLoadMore: onLoadMore,\n selectedKey,\n defaultSelectedKey,\n onSelectionChange,\n selectionMode = 'single' as M,\n value,\n defaultValue,\n onChange,\n isClearable = false,\n isFilterable = false,\n filterValue,\n defaultFilterValue,\n onFilterChange,\n UNSTABLE_filter: filter,\n id,\n isDisabled,\n ...props\n }: SelectProps<T, M>,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const triggerRef = useRef<HTMLButtonElement>(null);\n const selectId = useId(id);\n\n const { 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy } = props;\n\n useProductionWarning(() => {\n if (!label && !ariaLabel && !ariaLabelledBy) {\n console.warn('Select requires one of label / aria-label / aria-labelledby for accessibility');\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n if (!isProduction() && items != null && typeof children !== 'function') {\n console.warn('`Select` requires `children` to be a function when using `items` prop');\n }\n\n useImperativeHandle(\n apiRef,\n () => ({\n focus: () => triggerRef.current?.focus(),\n }),\n [],\n );\n\n const listBox = (\n <SelectListBox items={items} isLoading={isLoading} onLoadMore={onLoadMore} onScroll={onScroll}>\n {children}\n </SelectListBox>\n );\n\n const listBoxWithVirtualizer = isVirtualized ? (\n <RACVirtualizer layout={RACListLayout} layoutOptions={VIRTUAL_LAYOUT_OPTIONS}>\n {listBox}\n </RACVirtualizer>\n ) : (\n listBox\n );\n\n const listBoxWithFilter = isFilterable ? (\n <SelectFilter\n filterValue={filterValue}\n defaultFilterValue={defaultFilterValue}\n onFilterChange={onFilterChange}\n filter={filter}\n >\n {listBoxWithVirtualizer}\n </SelectFilter>\n ) : (\n listBoxWithVirtualizer\n );\n\n return (\n <RACSelect\n {...props}\n ref={ref}\n id={selectId}\n className={clsx('cim-select', UNSAFE_className)}\n style={UNSAFE_style}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n onSelectionChange={onSelectionChange}\n value={value}\n defaultValue={defaultValue}\n onChange={onChange}\n selectionMode={selectionMode}\n allowsEmptyCollection={isLoading}\n isDisabled={isDisabled}\n >\n <FormFieldLabel isRequired={props.isRequired} isDisabled={isDisabled}>\n {label}\n </FormFieldLabel>\n <SelectButton\n ref={triggerRef}\n selectId={selectId}\n isDisabled={isDisabled}\n isClearable={isClearable}\n selectionMode={selectionMode}\n />\n <FormFieldError>{error}</FormFieldError>\n <FormFieldDescription>{description}</FormFieldDescription>\n <SelectPopover>{listBoxWithFilter}</SelectPopover>\n </RACSelect>\n );\n}\n\ninterface SelectPopoverProps {\n children: ReactNode;\n}\n\nfunction SelectPopover({ children }: SelectPopoverProps) {\n const popoverRef = useRef<HTMLDivElement>(null);\n const interactOutsideTarget = useRef<EventTarget | null>(null);\n const selectState = useContext(RACSelectStateContext);\n\n // Popover is non-modal, but we still want to close it when the user interacts outside\n useInteractOutside({\n ref: popoverRef,\n onInteractOutsideStart: (e) => {\n interactOutsideTarget.current = e.target;\n },\n onInteractOutside: (e) => {\n if (interactOutsideTarget.current === e.target) {\n requestAnimationFrame(() => {\n selectState?.close();\n });\n }\n\n interactOutsideTarget.current = null;\n },\n isDisabled: !selectState?.isOpen,\n });\n\n // Popover is non-modal, but we still want to prevent scrolling when it is open\n usePreventScroll({ isDisabled: !selectState?.isOpen });\n\n return (\n <CollapsibleList\n ref={popoverRef}\n offset={5} // 1px border + 4px actual offset\n maxHeight={315}\n // Set to non-modal so that interactions like clicking the clear button can be performed without first having to close the popover\n isNonModal\n >\n {children}\n </CollapsibleList>\n );\n}\n\ninterface SelectButtonProps {\n selectId: string;\n isDisabled?: boolean;\n isClearable?: SelectProps['isClearable'];\n selectionMode: SelectSelectionMode;\n}\n\nconst SelectButton = forwardRef(\n ({ selectId, isDisabled, isClearable, selectionMode }: SelectButtonProps, ref: ForwardedRef<HTMLButtonElement>) => {\n const triggerRef = useObjectRef(ref);\n\n return (\n <div className=\"cim-select-button\">\n <RACButton ref={triggerRef} className=\"cim-select-button-trigger\" />\n <RACSelectValue\n className={clsx('cim-select-button-value', textStyle({ variant: 'body', alignment: 'start' }))}\n data-testid=\"select-button-value\"\n >\n {({ defaultChildren, isPlaceholder, state }) => {\n if (isPlaceholder) {\n return <span className=\"cim-select-button-value-text\">{defaultChildren}</span>;\n }\n\n if (selectionMode === 'multiple') {\n return (\n <TagGroup\n aria-labelledby={selectId}\n disabledKeys={isDisabled ? state.selectedItems.map((item) => item.key) : undefined}\n items={state.selectedItems.filter((item) => item != null).map((item) => ({ id: item.key, item }))}\n onRemove={\n isDisabled\n ? undefined\n : (keys) => {\n if (Array.isArray(state.value)) {\n state.setValue(state.value.filter((k) => !keys.has(k)));\n }\n }\n }\n UNSAFE_className=\"cim-select-tags\"\n >\n {({ item }) => <Tag isDisabled={(item.props as TagProps).isDisabled}>{item.textValue}</Tag>}\n </TagGroup>\n );\n }\n\n return defaultChildren;\n }}\n </RACSelectValue>\n {isClearable && (\n <SelectClearButton\n // Move focus to trigger button, because button will disappear after clearing\n onClear={() => triggerRef.current?.focus()}\n />\n )}\n <IconChevronDown UNSAFE_className=\"cim-select-button-chevron\" />\n </div>\n );\n },\n);\n\nfunction SelectClearButton({ onClear }: { onClear?: () => void }) {\n const selectState = useContext(RACSelectStateContext);\n const selectMessages = useLocalizedMessages('select');\n\n if (!selectState || selectState.selectedItems.length === 0) {\n return null;\n }\n\n return (\n <XButton\n aria-label={selectMessages.format('clearSelection')}\n iconType=\"circled\"\n onPress={() => {\n selectState.setValue(null);\n onClear?.();\n }}\n slot={null}\n UNSAFE_className=\"cim-select-button-clear\"\n />\n );\n}\n\nfunction SelectListBox<T extends CollectionItem>({\n children,\n items,\n isLoading,\n onLoadMore,\n ...props\n}: RACListBoxProps<T> & {\n isLoading?: boolean;\n onLoadMore?: () => void;\n}) {\n const collectionMessages = useLocalizedMessages('UNSTABLE_collection');\n const selectMessages = useLocalizedMessages('select');\n const selectState = useContext(RACSelectStateContext);\n const isEmpty = selectState?.collection.size === 0;\n\n return (\n <RACListBox\n className=\"cim-select-listbox\"\n renderEmptyState={() =>\n !isLoading && (\n <Text\n as=\"p\"\n variant=\"body\"\n tone=\"subtle\"\n marginX={8}\n marginY={8}\n UNSAFE_className=\"cim-select-listbox-empty-state\"\n >\n {selectMessages.format('noResultsFound')}\n </Text>\n )\n }\n {...props}\n >\n <RACCollection items={items}>{children}</RACCollection>\n <RACListBoxLoadMoreItem onLoadMore={onLoadMore} isLoading={isLoading}>\n <Spinner aria-label={collectionMessages.format(isEmpty ? 'loading' : 'loadingMore')} size=\"small\" marginY={8} />\n </RACListBoxLoadMoreItem>\n </RACListBox>\n );\n}\n\nfunction SelectFilter<T extends CollectionItem>({\n children,\n filterValue,\n defaultFilterValue,\n onFilterChange,\n filter,\n}: RACListBoxProps<T> & {\n children: ReactNode;\n filterValue?: string;\n defaultFilterValue?: string;\n onFilterChange?: (value: string) => void;\n filter?: ((textValue: string, inputValue: string, node: { key: Key; value: T | null }) => boolean) | null;\n}) {\n const selectMessages = useLocalizedMessages('select');\n const { contains } = useFilter({ sensitivity: 'base' });\n const filterFn = useMemo(() => {\n if (filter === null) return undefined;\n if (filter == null) return contains;\n\n return (textValue: string, inputValue: string, node: { key: Key; value: T | null }) => {\n return filter(textValue, inputValue, { key: node.key, value: node.value });\n };\n }, [filter, contains]);\n\n return (\n <RACAutocomplete<T>\n filter={filterFn}\n inputValue={filterValue}\n defaultInputValue={defaultFilterValue}\n onInputChange={onFilterChange}\n >\n <SearchField\n aria-label={selectMessages.format('searchLabel')}\n placeholder={selectMessages.format('searchPlaceholder')}\n autoFocus\n UNSAFE_className=\"cim-select-search-field\"\n />\n {children}\n </RACAutocomplete>\n );\n}\n\n/**\n * Allows users to select one or more items from a collapsible list.\n *\n * See [select usage guidelines](https://ui.cimpress.io/components/select/).\n */\nconst _Select = withStyleProps(forwardRef(Select), 'Select');\n\nexport { _Select as Select };\n\nexport interface SelectItemProps extends Pick<RACListBoxItemProps, 'isDisabled' | 'onHoverStart' | 'onHoverEnd'> {\n /** The ID of the item. Has to be unique across all sections and items. */\n id?: Key;\n /** The content to display as the label. */\n children: StringLikeChildren;\n /** Additional description for the item. */\n description?: string;\n /** A non-interactive piece of content displayed at the start of the item. */\n icon?: ReactNode;\n /** A non-interactive piece of content displayed at the end of the item. */\n UNSTABLE_meta?: ReactNode;\n}\n\n/** Renders a single list item within `Select`. */\nexport function SelectItem({ children, description, icon, UNSTABLE_meta: meta, ...props }: SelectItemProps) {\n const textValue = stringLikeChildrenToString(children);\n\n return (\n <RACListBoxItem {...props} className=\"cim-select-item\" textValue={textValue}>\n {({ isDisabled, isSelected, selectionMode }) => (\n <>\n {selectionMode === 'single' && <IconCheckBold data-selection-indicator />}\n {selectionMode === 'multiple' && <CheckboxIndicator isSelected={isSelected} isDisabled={isDisabled} />}\n\n {icon && <div className=\"cim-select-item-slot\">{icon}</div>}\n\n <div className=\"cim-select-item-text\">\n <RACText slot=\"label\" className={textStyle({ variant: 'body', tone: isDisabled ? 'muted' : 'base' })}>\n {children}\n </RACText>\n\n {description && (\n <RACText\n slot=\"description\"\n className={textStyle({ variant: 'small', tone: isDisabled ? 'muted' : 'subtle' })}\n >\n {description}\n </RACText>\n )}\n </div>\n\n {meta && <div className=\"cim-select-item-slot\">{meta}</div>}\n </>\n )}\n </RACListBoxItem>\n );\n}\n\nSelectItem.displayName = 'SelectItem';\n\nexport interface SelectSectionProps<T extends CollectionItem> extends CollectionProps<T> {\n /** The ID of the section. Has to be unique across all sections and items. */\n id?: Key;\n /** The content to display as the section title. */\n title: string;\n}\n\n/** Groups list items within `Select` into a section. */\nexport function SelectSection<T extends CollectionItem>({ title, children, items, ...props }: SelectSectionProps<T>) {\n if (!isProduction() && items != null && typeof children !== 'function') {\n console.warn('`SelectSection` requires `children` to be a function when using `items` prop');\n }\n\n return (\n <RACListBoxSection {...props} className=\"cim-select-section\">\n <RACHeader\n className={clsx('cim-select-section-header', textStyle({ variant: 'small-semibold', tone: 'subtle' }))}\n >\n {title}\n </RACHeader>\n <RACCollection items={items}>{children}</RACCollection>\n </RACListBoxSection>\n );\n}\n\nSelectSection.displayName = 'SelectSection';\n"]}
|
|
@@ -2,10 +2,21 @@ import { type ReactNode } from 'react';
|
|
|
2
2
|
import type { Href, StringLikeChildren } from '../types.js';
|
|
3
3
|
export interface UNSTABLE_SideNavProps {
|
|
4
4
|
children: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Whether the side nav is open. Only needed when the side nav is not controlled by the app shell.
|
|
7
|
+
*/
|
|
5
8
|
isOpen?: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Callback function that is called when the side nav is opened or closed.
|
|
11
|
+
*/
|
|
6
12
|
onOpenChange?: (isOpen: boolean) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Whether the side nav should be expanded by default. Only affects large viewports.
|
|
15
|
+
* @default true
|
|
16
|
+
*/
|
|
17
|
+
defaultIsOpen?: boolean;
|
|
7
18
|
}
|
|
8
|
-
export declare function UNSTABLE_SideNav({ children, isOpen, onOpenChange }: UNSTABLE_SideNavProps): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
export declare function UNSTABLE_SideNav({ children, isOpen, defaultIsOpen, onOpenChange }: UNSTABLE_SideNavProps): import("react/jsx-runtime").JSX.Element;
|
|
9
20
|
export interface UNSTABLE_SideNavListProps {
|
|
10
21
|
children: ReactNode;
|
|
11
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"side-nav.d.ts","sourceRoot":"","sources":["../../../../src/components/side-nav/side-nav.tsx"],"names":[],"mappings":"AAGA,OAAO,EAA+C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQpF,OAAO,KAAK,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAK5D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAoB,EAAE,YAAY,EAAE,EAAE,qBAAqB,2CA6D/G;AAED,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EAAE,QAAQ,EAAE,EAAE,yBAAyB,2CAE3E;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,wBAAgB,wBAAwB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,6BAA6B,2CAazG;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,gCAAgC,2CAahG"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.UNSTABLE_SideNav = UNSTABLE_SideNav;
|
|
5
|
+
exports.UNSTABLE_SideNavList = UNSTABLE_SideNavList;
|
|
6
|
+
exports.UNSTABLE_SideNavListItem = UNSTABLE_SideNavListItem;
|
|
7
|
+
exports.UNSTABLE_SideNavListSection = UNSTABLE_SideNavListSection;
|
|
8
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
|
+
const utils_1 = require("@react-aria/utils");
|
|
10
|
+
const react_1 = require("react");
|
|
11
|
+
const react_aria_1 = require("react-aria");
|
|
12
|
+
const react_aria_components_1 = require("react-aria-components");
|
|
13
|
+
const breakpoints_js_1 = require("../../utils/breakpoints.js");
|
|
14
|
+
const string_like_children_to_string_js_1 = require("../../utils/string-like-children-to-string.js");
|
|
15
|
+
const use_is_mobile_js_1 = require("../../utils/use-is-mobile.js");
|
|
16
|
+
const app_shell_context_js_1 = require("../app-shell/app-shell-context.js");
|
|
17
|
+
const tooltip_js_1 = require("../tooltip/tooltip.js");
|
|
18
|
+
const text_js_1 = require("../typography/text.js");
|
|
19
|
+
const SideNavContext = (0, react_1.createContext)({ isOpen: false });
|
|
20
|
+
function UNSTABLE_SideNav({ children, isOpen, defaultIsOpen = true, onOpenChange }) {
|
|
21
|
+
const appShellContext = (0, react_1.useContext)(app_shell_context_js_1.AppShellContext);
|
|
22
|
+
const [isHydrated, setIsHydrated] = (0, react_1.useState)(false);
|
|
23
|
+
const resolvedIsOpen = isOpen ?? (isHydrated ? appShellContext?.sideNavIsOpen : defaultIsOpen);
|
|
24
|
+
const sideNavRef = (0, react_1.useRef)(null);
|
|
25
|
+
const isMobile = (0, use_is_mobile_js_1.useIsMobile)();
|
|
26
|
+
const isOverlaySideNav = (0, breakpoints_js_1.useBreakpoint)({ max: 'md' });
|
|
27
|
+
function handleClose() {
|
|
28
|
+
appShellContext?.toggleSideNav(false);
|
|
29
|
+
onOpenChange?.(false);
|
|
30
|
+
}
|
|
31
|
+
const { overlayProps, underlayProps } = (0, react_aria_1.useOverlay)({
|
|
32
|
+
isDismissable: isOverlaySideNav,
|
|
33
|
+
isOpen: resolvedIsOpen,
|
|
34
|
+
onClose: () => handleClose(),
|
|
35
|
+
}, sideNavRef);
|
|
36
|
+
const resetState = (0, utils_1.useEffectEvent)(() => {
|
|
37
|
+
setIsHydrated(true);
|
|
38
|
+
appShellContext?.toggleSideNav(defaultIsOpen && (0, breakpoints_js_1.matchesBreakpoint)({ min: 'lg' }));
|
|
39
|
+
});
|
|
40
|
+
// Hydrate state and reset when screen size changes to or from overlay mode
|
|
41
|
+
(0, utils_1.useLayoutEffect)(() => {
|
|
42
|
+
resetState();
|
|
43
|
+
}, [isOverlaySideNav]);
|
|
44
|
+
return ((0, jsx_runtime_1.jsxs)(SideNavContext.Provider, { value: { isOpen: resolvedIsOpen ?? false }, children: [isMobile && ((0, jsx_runtime_1.jsx)("div", { ...underlayProps, className: "cim-side-nav-backdrop", "aria-hidden": !resolvedIsOpen, "data-expanded": resolvedIsOpen, "data-hydrated": isHydrated || undefined })), isMobile && resolvedIsOpen && (0, jsx_runtime_1.jsx)(react_aria_1.DismissButton, { onDismiss: () => handleClose() }), (0, jsx_runtime_1.jsx)("div", { ...(isOverlaySideNav ? overlayProps : {}), className: "cim-side-nav", "data-expanded": resolvedIsOpen, "data-hydrated": isHydrated || undefined, "aria-label": "Side navigation", ref: sideNavRef, inert: isMobile && !resolvedIsOpen ? '' : undefined, children: children })] }));
|
|
45
|
+
}
|
|
46
|
+
function UNSTABLE_SideNavList({ children }) {
|
|
47
|
+
return (0, jsx_runtime_1.jsx)("nav", { className: "cim-side-nav-list", children: children });
|
|
48
|
+
}
|
|
49
|
+
function UNSTABLE_SideNavListItem({ children, href, isActive, icon }) {
|
|
50
|
+
const { isOpen } = (0, react_1.useContext)(SideNavContext);
|
|
51
|
+
return ((0, jsx_runtime_1.jsx)(tooltip_js_1.Tooltip, { label: (0, string_like_children_to_string_js_1.stringLikeChildrenToString)(children), placement: "right", isDisabled: isOpen, children: (0, jsx_runtime_1.jsxs)(react_aria_components_1.Link, { href: href, className: "cim-side-nav-list-item", "data-active": isActive, children: [icon, (0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "span", variant: "medium", UNSAFE_className: "cim-side-nav-list-item-label", children: children })] }) }));
|
|
52
|
+
}
|
|
53
|
+
function UNSTABLE_SideNavListSection({ children, label }) {
|
|
54
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "cim-side-nav-list-section", children: [label && ((0, jsx_runtime_1.jsx)("div", { className: "cim-side-nav-list-section-header", children: (0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "p", variant: "small-semibold", tone: "subtle", UNSAFE_className: "cim-side-nav-list-section-header-label", children: label }) })), children] }));
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=side-nav.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"side-nav.js","sourceRoot":"","sources":["../../../../src/components/side-nav/side-nav.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport { useEffectEvent, useLayoutEffect } from '@react-aria/utils';\nimport { createContext, useContext, useRef, useState, type ReactNode } from 'react';\nimport { DismissButton, useOverlay } from 'react-aria';\nimport { Link as RACLink } from 'react-aria-components';\nimport { matchesBreakpoint, useBreakpoint } from '../../utils/breakpoints.js';\nimport { stringLikeChildrenToString } from '../../utils/string-like-children-to-string.js';\nimport { useIsMobile } from '../../utils/use-is-mobile.js';\nimport { AppShellContext } from '../app-shell/app-shell-context.js';\nimport { Tooltip } from '../tooltip/tooltip.js';\nimport type { Href, StringLikeChildren } from '../types.js';\nimport { Text } from '../typography/text.js';\n\nconst SideNavContext = createContext<{ isOpen: boolean }>({ isOpen: false });\n\nexport interface UNSTABLE_SideNavProps {\n children: ReactNode;\n /**\n * Whether the side nav is open. Only needed when the side nav is not controlled by the app shell.\n */\n isOpen?: boolean;\n /**\n * Callback function that is called when the side nav is opened or closed.\n */\n onOpenChange?: (isOpen: boolean) => void;\n /**\n * Whether the side nav should be expanded by default. Only affects large viewports.\n * @default true\n */\n defaultIsOpen?: boolean;\n}\n\nexport function UNSTABLE_SideNav({ children, isOpen, defaultIsOpen = true, onOpenChange }: UNSTABLE_SideNavProps) {\n const appShellContext = useContext(AppShellContext);\n const [isHydrated, setIsHydrated] = useState(false);\n const resolvedIsOpen = isOpen ?? (isHydrated ? appShellContext?.sideNavIsOpen : defaultIsOpen);\n const sideNavRef = useRef<HTMLDivElement>(null);\n const isMobile = useIsMobile();\n const isOverlaySideNav = useBreakpoint({ max: 'md' });\n\n function handleClose() {\n appShellContext?.toggleSideNav(false);\n onOpenChange?.(false);\n }\n\n const { overlayProps, underlayProps } = useOverlay(\n {\n isDismissable: isOverlaySideNav,\n isOpen: resolvedIsOpen,\n onClose: () => handleClose(),\n },\n sideNavRef,\n );\n\n const resetState = useEffectEvent(() => {\n setIsHydrated(true);\n\n appShellContext?.toggleSideNav(defaultIsOpen && matchesBreakpoint({ min: 'lg' }));\n });\n\n // Hydrate state and reset when screen size changes to or from overlay mode\n useLayoutEffect(() => {\n resetState();\n }, [isOverlaySideNav]);\n\n return (\n <SideNavContext.Provider value={{ isOpen: resolvedIsOpen ?? false }}>\n {isMobile && (\n <div\n {...underlayProps}\n className=\"cim-side-nav-backdrop\"\n aria-hidden={!resolvedIsOpen}\n data-expanded={resolvedIsOpen}\n data-hydrated={isHydrated || undefined}\n />\n )}\n {isMobile && resolvedIsOpen && <DismissButton onDismiss={() => handleClose()} />}\n <div\n {...(isOverlaySideNav ? overlayProps : {})}\n className=\"cim-side-nav\"\n data-expanded={resolvedIsOpen}\n data-hydrated={isHydrated || undefined}\n aria-label=\"Side navigation\"\n ref={sideNavRef}\n // Make the side nav rail inert when hidden on mobile devices to prevent user interaction and assistive technology focus\n // Workaround for React not having type definitions for the `inert` attribute\n // eslint-disable-next-line internal/no-extra-props-in-spread\n {...{ inert: isMobile && !resolvedIsOpen ? '' : undefined }}\n >\n {children}\n </div>\n </SideNavContext.Provider>\n );\n}\n\nexport interface UNSTABLE_SideNavListProps {\n children: ReactNode;\n}\n\nexport function UNSTABLE_SideNavList({ children }: UNSTABLE_SideNavListProps) {\n return <nav className=\"cim-side-nav-list\">{children}</nav>;\n}\n\nexport interface UNSTABLE_SideNavListItemProps {\n children: StringLikeChildren;\n href: Href;\n isActive?: boolean;\n icon?: ReactNode;\n}\n\nexport function UNSTABLE_SideNavListItem({ children, href, isActive, icon }: UNSTABLE_SideNavListItemProps) {\n const { isOpen } = useContext(SideNavContext);\n\n return (\n <Tooltip label={stringLikeChildrenToString(children)} placement=\"right\" isDisabled={isOpen}>\n <RACLink href={href} className=\"cim-side-nav-list-item\" data-active={isActive}>\n {icon}\n <Text as=\"span\" variant=\"medium\" UNSAFE_className=\"cim-side-nav-list-item-label\">\n {children}\n </Text>\n </RACLink>\n </Tooltip>\n );\n}\n\nexport interface UNSTABLE_SideNavListSectionProps {\n children: ReactNode;\n label?: string;\n}\n\nexport function UNSTABLE_SideNavListSection({ children, label }: UNSTABLE_SideNavListSectionProps) {\n return (\n <div className=\"cim-side-nav-list-section\">\n {label && (\n <div className=\"cim-side-nav-list-section-header\">\n <Text as=\"p\" variant=\"small-semibold\" tone=\"subtle\" UNSAFE_className=\"cim-side-nav-list-section-header-label\">\n {label}\n </Text>\n </div>\n )}\n {children}\n </div>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../../src/components/slider/slider.tsx"],"names":[],"mappings":"AAKA,OAAO,EAYL,KAAK,WAAW,IAAI,cAAc,EACnC,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGhE,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CACvE,SACE,WAAW,EACX,eAAe,EACf,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC;IAC5F,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9D;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;SAGK;IACL,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../../src/components/slider/slider.tsx"],"names":[],"mappings":"AAKA,OAAO,EAYL,KAAK,WAAW,IAAI,cAAc,EACnC,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGhE,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CACvE,SACE,WAAW,EACX,eAAe,EACf,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,eAAe,CAAC;IAC5F,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,CAAC;IACjB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAC9B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IACjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;IAC9D;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;SAGK;IACL,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AA2JD;;;;GAIG;AACH,QAAA,MAAM,OAAO,GA9JG,CAAC,SAAS,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,wKA8JS,CAAC;AAE7D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,CAAC"}
|
|
@@ -38,7 +38,7 @@ function Slider({ label, description, UNSAFE_className, UNSAFE_style, form, name
|
|
|
38
38
|
'--cim-slider-fill-start': trackState.getThumbPercent(0) * 100 + '%',
|
|
39
39
|
'--cim-slider-fill-size': (trackState.getThumbPercent(1) - trackState.getThumbPercent(0)) * 100 + '%',
|
|
40
40
|
}
|
|
41
|
-
: {}) }), trackState.values.map((_, i) => ((0, jsx_runtime_1.jsx)(react_aria_components_1.SliderThumb, { index: i, className: "cim-slider-thumb", name: typeof name === 'string' ? name : name?.[i], form: form, "aria-labelledby": isRangeSlider ? (i === 0 ? rangeStartLabelId : rangeEndLabelId) : undefined }, i)))] })) }), showLabels && ((0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "span", variant: "medium", UNSAFE_className: "cim-slider-label-max", children: state.getThumbMaxValue(state.values.length - 1) })), withInput && ((0, jsx_runtime_1.jsx)("div", { className: "cim-slider-inputs-container-wide", children: state.values.map((_, i) => ((0, jsx_runtime_1.jsx)(SliderNumberField, { index: i, "aria-labelledby": isRangeSlider ? (i === 0 ? rangeStartLabelId : rangeEndLabelId) : undefined, style: { order: isRangeSlider ? (i === 0 ? -1 : 1) : undefined }, formatOptions: props.formatOptions
|
|
41
|
+
: {}) }), trackState.values.map((_, i) => ((0, jsx_runtime_1.jsx)(react_aria_components_1.SliderThumb, { index: i, className: "cim-slider-thumb", name: typeof name === 'string' ? name : name?.[i], form: form, "aria-labelledby": isRangeSlider ? (i === 0 ? rangeStartLabelId : rangeEndLabelId) : undefined }, i)))] })) }), showLabels && ((0, jsx_runtime_1.jsx)(text_js_1.Text, { as: "span", variant: "medium", UNSAFE_className: "cim-slider-label-max", children: state.getThumbMaxValue(state.values.length - 1) })), withInput && ((0, jsx_runtime_1.jsx)("div", { className: "cim-slider-inputs-container-wide", children: state.values.map((_, i) => ((0, jsx_runtime_1.jsx)(SliderNumberField, { index: i, "aria-labelledby": isRangeSlider ? (i === 0 ? rangeStartLabelId : rangeEndLabelId) : undefined, style: { order: isRangeSlider ? (i === 0 ? -1 : 1) : undefined }, formatOptions: props.formatOptions }, i))) }))] }), withInput && ((0, jsx_runtime_1.jsx)("div", { className: "cim-slider-inputs-container-narrow", children: state.values.map((_, i) => ((0, jsx_runtime_1.jsx)(SliderNumberField, { index: i, "aria-labelledby": isRangeSlider ? (i === 0 ? rangeStartLabelId : rangeEndLabelId) : undefined, formatOptions: props.formatOptions }, i))) })), (0, jsx_runtime_1.jsx)(form_field_js_1.FormFieldDescription, { children: description }), isRangeSlider && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("span", { style: { display: 'none' }, id: rangeStartLabelId, children: messages.format('rangeStart') }), (0, jsx_runtime_1.jsx)("span", { style: { display: 'none' }, id: rangeEndLabelId, children: messages.format('rangeEnd') })] }))] }));
|
|
42
42
|
} }) }));
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
@@ -51,6 +51,10 @@ exports.Slider = _Slider;
|
|
|
51
51
|
function SliderNumberField({ index, 'aria-labelledby': ariaLabelledBy, ...props }) {
|
|
52
52
|
const state = (0, react_1.useContext)(react_aria_components_1.SliderStateContext);
|
|
53
53
|
const labelProps = (0, react_aria_components_1.useSlottedContext)(react_aria_components_1.LabelContext);
|
|
54
|
-
return ((0, jsx_runtime_1.jsx)(react_aria_components_1.NumberField, { ...props, className: "cim-slider-input", value: state.values[index], onChange: (value) =>
|
|
54
|
+
return ((0, jsx_runtime_1.jsx)(react_aria_components_1.NumberField, { ...props, className: "cim-slider-input", value: state.values[index], onChange: (value) => {
|
|
55
|
+
if (!Number.isNaN(value)) {
|
|
56
|
+
state.setThumbValue(index, value ?? 0);
|
|
57
|
+
}
|
|
58
|
+
}, "aria-labelledby": [labelProps.id, ariaLabelledBy].filter(Boolean).join(' '), children: (0, jsx_runtime_1.jsx)(input_js_1.Input, { contentWidth: "5ch" }) }));
|
|
55
59
|
}
|
|
56
60
|
//# sourceMappingURL=slider.js.map
|