@ngrok/mantle 0.66.0 → 0.66.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/dist/accordion.d.ts +158 -154
- package/dist/accordion.js +1 -1
- package/dist/accordion.js.map +1 -1
- package/dist/alert-dialog.d.ts +282 -277
- package/dist/alert-dialog.js +1 -1
- package/dist/alert-dialog.js.map +1 -1
- package/dist/alert.d.ts +145 -138
- package/dist/alert.js +1 -1
- package/dist/alert.js.map +1 -1
- package/dist/anchor.d.ts +25 -22
- package/dist/anchor.js +1 -1
- package/dist/anchor.js.map +1 -1
- package/dist/as-child-XMVTepJu.d.ts +31 -0
- package/dist/badge.d.ts +29 -19
- package/dist/badge.js +1 -1
- package/dist/badge.js.map +1 -1
- package/dist/booleanish-CBGdPL3Q.js +2 -0
- package/dist/booleanish-CBGdPL3Q.js.map +1 -0
- package/dist/browser-only-jrBUqioz.js +2 -0
- package/dist/browser-only-jrBUqioz.js.map +1 -0
- package/dist/browser-only.d.ts +20 -15
- package/dist/browser-only.js +1 -2
- package/dist/button-CKL-3sIr.d.ts +175 -0
- package/dist/button-CRRPesae.js +2 -0
- package/dist/button-CRRPesae.js.map +1 -0
- package/dist/button-DA2p0_5F.js +2 -0
- package/dist/button-DA2p0_5F.js.map +1 -0
- package/dist/button.d.ts +4 -9
- package/dist/button.js +1 -2
- package/dist/calendar.d.ts +14 -8
- package/dist/calendar.js +1 -1
- package/dist/calendar.js.map +1 -1
- package/dist/card.d.ts +99 -97
- package/dist/card.js +1 -1
- package/dist/card.js.map +1 -1
- package/dist/checkbox.d.ts +14 -12
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.js.map +1 -1
- package/dist/code-block.d.ts +254 -237
- package/dist/code-block.js +3 -3
- package/dist/code-block.js.map +1 -1
- package/dist/code.d.ts +5 -3
- package/dist/code.js +1 -1
- package/dist/code.js.map +1 -1
- package/dist/color.d.ts +2 -38
- package/dist/color.js +1 -1
- package/dist/color.js.map +1 -1
- package/dist/combobox.d.ts +172 -167
- package/dist/combobox.js +1 -1
- package/dist/combobox.js.map +1 -1
- package/dist/command.d.ts +234 -227
- package/dist/command.js +1 -1
- package/dist/command.js.map +1 -1
- package/dist/compose-refs-DeIsFv68.js +2 -0
- package/dist/compose-refs-DeIsFv68.js.map +1 -0
- package/dist/cx-bKromGBh.js +2 -0
- package/dist/cx-bKromGBh.js.map +1 -0
- package/dist/cx.d.ts +4 -2
- package/dist/cx.js +1 -2
- package/dist/data-table.d.ts +211 -184
- package/dist/data-table.js +1 -1
- package/dist/data-table.js.map +1 -1
- package/dist/deep-non-nullable-BLM3Gz0I.d.ts +8 -0
- package/dist/description-list.d.ts +61 -59
- package/dist/description-list.js +1 -1
- package/dist/description-list.js.map +1 -1
- package/dist/dialog-BuD_JQf_.d.ts +422 -0
- package/dist/dialog-CGBjHvo_.js +2 -0
- package/dist/dialog-CGBjHvo_.js.map +1 -0
- package/dist/dialog.d.ts +3 -410
- package/dist/dialog.js +1 -2
- package/dist/direction-DfrtFTny.js +2 -0
- package/dist/direction-DfrtFTny.js.map +1 -0
- package/dist/{direction-DHheuUag.d.ts → direction-deXpJFDZ.d.ts} +9 -7
- package/dist/dropdown-menu-CjOaj-Ap.js +2 -0
- package/dist/dropdown-menu-CjOaj-Ap.js.map +1 -0
- package/dist/dropdown-menu-D_ZoY1AH.d.ts +330 -0
- package/dist/dropdown-menu.d.ts +2 -325
- package/dist/dropdown-menu.js +1 -2
- package/dist/flag.d.ts +31 -22
- package/dist/flag.js +1 -1
- package/dist/flag.js.map +1 -1
- package/dist/hooks.d.ts +72 -59
- package/dist/hooks.js +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/hover-card.d.ts +97 -91
- package/dist/hover-card.js +1 -1
- package/dist/hover-card.js.map +1 -1
- package/dist/{icon-DXTMiV1L.d.ts → icon-B1XLv02t.d.ts} +11 -9
- package/dist/icon-B5oNYYrJ.js +2 -0
- package/dist/icon-B5oNYYrJ.js.map +1 -0
- package/dist/icon-button-2r6S3HVA.d.ts +98 -0
- package/dist/icon-button-D4e9-dq-.js +2 -0
- package/dist/icon-button-D4e9-dq-.js.map +1 -0
- package/dist/icon.d.ts +4 -4
- package/dist/icon.js +1 -2
- package/dist/icons.d.ts +54 -41
- package/dist/icons.js +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/{in-view-aHeQHaUj.d.ts → in-view-CTQRT44m.d.ts} +29 -22
- package/dist/in-view-bPnaWEL4.js +2 -0
- package/dist/in-view-bPnaWEL4.js.map +1 -0
- package/dist/index-BLCvtjLi.d.ts +40 -0
- package/dist/index-DWqhfw9n.d.ts +103 -0
- package/dist/{button-group-BFnqgdtl.d.ts → index-ViSCOUrU.d.ts} +10 -8
- package/dist/index-s8rMcilU.d.ts +47 -0
- package/dist/input.d.ts +3 -100
- package/dist/input.js +1 -1
- package/dist/input.js.map +1 -1
- package/dist/is-input-BFR8yMM7.js +2 -0
- package/dist/is-input-BFR8yMM7.js.map +1 -0
- package/dist/kbd-pyj32aN4.js +2 -0
- package/dist/kbd-pyj32aN4.js.map +1 -0
- package/dist/kbd.d.ts +10 -4
- package/dist/kbd.js +1 -2
- package/dist/label.d.ts +8 -6
- package/dist/label.js +1 -1
- package/dist/label.js.map +1 -1
- package/dist/media-object.d.ts +70 -68
- package/dist/media-object.js +1 -1
- package/dist/media-object.js.map +1 -1
- package/dist/multi-select.d.ts +226 -218
- package/dist/multi-select.js +1 -1
- package/dist/multi-select.js.map +1 -1
- package/dist/pagination.d.ts +168 -164
- package/dist/pagination.js +1 -1
- package/dist/pagination.js.map +1 -1
- package/dist/popover.d.ts +119 -117
- package/dist/popover.js +1 -1
- package/dist/popover.js.map +1 -1
- package/dist/primitive-W5Izf14l.js +2 -0
- package/dist/primitive-W5Izf14l.js.map +1 -0
- package/dist/primitive-tuHqhoRE.d.ts +16 -0
- package/dist/progress.d.ts +175 -150
- package/dist/progress.js +1 -1
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.d.ts +246 -230
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.js.map +1 -1
- package/dist/sandboxed-on-click.d.ts +36 -31
- package/dist/sandboxed-on-click.js +1 -1
- package/dist/sandboxed-on-click.js.map +1 -1
- package/dist/select-39Jfc1Cb.d.ts +265 -0
- package/dist/select-DZ2ztBkI.js +2 -0
- package/dist/select-DZ2ztBkI.js.map +1 -0
- package/dist/select.d.ts +2 -263
- package/dist/select.js +1 -2
- package/dist/separator-BcCNbHBg.js +2 -0
- package/dist/separator-BcCNbHBg.js.map +1 -0
- package/dist/separator.d.ts +28 -21
- package/dist/separator.js +1 -2
- package/dist/sheet.d.ts +319 -305
- package/dist/sheet.js +1 -1
- package/dist/sheet.js.map +1 -1
- package/dist/skeleton.d.ts +8 -6
- package/dist/skeleton.js +1 -1
- package/dist/skeleton.js.map +1 -1
- package/dist/slider.d.ts +48 -35
- package/dist/slider.js +1 -1
- package/dist/slider.js.map +1 -1
- package/dist/slot-DdnjeV2n.js +2 -0
- package/dist/slot-DdnjeV2n.js.map +1 -0
- package/dist/slot.d.ts +6 -4
- package/dist/slot.js +1 -2
- package/dist/sort-CfPsu1Gs.js +2 -0
- package/dist/sort-CfPsu1Gs.js.map +1 -0
- package/dist/split-button.d.ts +158 -162
- package/dist/split-button.js +1 -1
- package/dist/split-button.js.map +1 -1
- package/dist/svg-only-BVLlbQ4e.js +2 -0
- package/dist/svg-only-BVLlbQ4e.js.map +1 -0
- package/dist/{svg-only-Cp8Mu_sh.d.ts → svg-only-Dti1FvNV.d.ts} +11 -9
- package/dist/switch.d.ts +10 -8
- package/dist/switch.js +1 -1
- package/dist/switch.js.map +1 -1
- package/dist/table-BWMp12sl.js +2 -0
- package/dist/table-BWMp12sl.js.map +1 -0
- package/dist/table-Dpt192qt.d.ts +398 -0
- package/dist/table.d.ts +2 -396
- package/dist/table.js +1 -2
- package/dist/tabs.d.ts +110 -104
- package/dist/tabs.js +1 -1
- package/dist/tabs.js.map +1 -1
- package/dist/text-area.d.ts +10 -8
- package/dist/text-area.js +1 -1
- package/dist/text-area.js.map +1 -1
- package/dist/theme-provider-CbzLgte1.js +2 -0
- package/dist/theme-provider-CbzLgte1.js.map +1 -0
- package/dist/theme.d.ts +65 -38
- package/dist/theme.js +1 -2
- package/dist/{themes-Bi46K9ZW.d.ts → themes-ClppRAGt.d.ts} +4 -2
- package/dist/toast-B4gxB8U0.js +2 -0
- package/dist/toast-B4gxB8U0.js.map +1 -0
- package/dist/toast.d.ts +95 -87
- package/dist/toast.js +1 -2
- package/dist/tooltip.d.ts +78 -73
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.js.map +1 -1
- package/dist/{chunk-W2YQRWR5.js → traffic-policy-file-QnF-2YkY.js} +2 -2
- package/dist/traffic-policy-file-QnF-2YkY.js.map +1 -0
- package/dist/types-884RJJqm.js +2 -0
- package/dist/types-884RJJqm.js.map +1 -0
- package/dist/{types-DehRoXC5.d.ts → types-DgXUgkpc.d.ts} +38 -36
- package/dist/types-Dh4BVhXC.d.ts +9 -0
- package/dist/types.d.ts +6 -49
- package/dist/types.js +1 -2
- package/dist/use-copy-to-clipboard-BEbQOKHc.js +2 -0
- package/dist/use-copy-to-clipboard-BEbQOKHc.js.map +1 -0
- package/dist/use-matches-media-query-BxTQ5f4i.js +2 -0
- package/dist/use-matches-media-query-BxTQ5f4i.js.map +1 -0
- package/dist/use-prefers-reduced-motion-BPlsKyCJ.js +2 -0
- package/dist/use-prefers-reduced-motion-BPlsKyCJ.js.map +1 -0
- package/dist/utils.d.ts +6 -5
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/variant-props-UE-phTwh.d.ts +13 -0
- package/dist/with-style-props-D1QFTzj6.d.ts +29 -0
- package/package.json +6 -6
- package/dist/as-child-DJ7x3JFV.d.ts +0 -21
- package/dist/browser-only.js.map +0 -1
- package/dist/button-DLUUf_c-.d.ts +0 -173
- package/dist/button.js.map +0 -1
- package/dist/chunk-2FYR6IJV.js +0 -2
- package/dist/chunk-2FYR6IJV.js.map +0 -1
- package/dist/chunk-5VDCC3YW.js +0 -2
- package/dist/chunk-5VDCC3YW.js.map +0 -1
- package/dist/chunk-63ZAW25Z.js +0 -2
- package/dist/chunk-63ZAW25Z.js.map +0 -1
- package/dist/chunk-6J7D73WA.js +0 -2
- package/dist/chunk-6J7D73WA.js.map +0 -1
- package/dist/chunk-72TJUKMV.js +0 -1
- package/dist/chunk-72TJUKMV.js.map +0 -1
- package/dist/chunk-7MJQGBE4.js +0 -2
- package/dist/chunk-7MJQGBE4.js.map +0 -1
- package/dist/chunk-7YLII2US.js +0 -2
- package/dist/chunk-7YLII2US.js.map +0 -1
- package/dist/chunk-ADF5DAYG.js +0 -2
- package/dist/chunk-ADF5DAYG.js.map +0 -1
- package/dist/chunk-CBRSMQ26.js +0 -2
- package/dist/chunk-CBRSMQ26.js.map +0 -1
- package/dist/chunk-COQIVAQH.js +0 -2
- package/dist/chunk-COQIVAQH.js.map +0 -1
- package/dist/chunk-ELZLLG6G.js +0 -2
- package/dist/chunk-ELZLLG6G.js.map +0 -1
- package/dist/chunk-EVU5XGB4.js +0 -2
- package/dist/chunk-EVU5XGB4.js.map +0 -1
- package/dist/chunk-EYZYDUS2.js +0 -2
- package/dist/chunk-EYZYDUS2.js.map +0 -1
- package/dist/chunk-HKSO72E5.js +0 -2
- package/dist/chunk-HKSO72E5.js.map +0 -1
- package/dist/chunk-HL2HWYKP.js +0 -2
- package/dist/chunk-HL2HWYKP.js.map +0 -1
- package/dist/chunk-IVQ626TU.js +0 -2
- package/dist/chunk-IVQ626TU.js.map +0 -1
- package/dist/chunk-JQ5D5YZR.js +0 -2
- package/dist/chunk-JQ5D5YZR.js.map +0 -1
- package/dist/chunk-LBO5LEYM.js +0 -2
- package/dist/chunk-LBO5LEYM.js.map +0 -1
- package/dist/chunk-MLXONRJD.js +0 -2
- package/dist/chunk-MLXONRJD.js.map +0 -1
- package/dist/chunk-OHPGAB7U.js +0 -2
- package/dist/chunk-OHPGAB7U.js.map +0 -1
- package/dist/chunk-OP6JMBKJ.js +0 -2
- package/dist/chunk-OP6JMBKJ.js.map +0 -1
- package/dist/chunk-PFXFESEN.js +0 -2
- package/dist/chunk-PFXFESEN.js.map +0 -1
- package/dist/chunk-PNL7JOXI.js +0 -2
- package/dist/chunk-PNL7JOXI.js.map +0 -1
- package/dist/chunk-RED6SFAV.js +0 -2
- package/dist/chunk-RED6SFAV.js.map +0 -1
- package/dist/chunk-SBQHQ2SJ.js +0 -2
- package/dist/chunk-SBQHQ2SJ.js.map +0 -1
- package/dist/chunk-SGGOH2WW.js +0 -2
- package/dist/chunk-SGGOH2WW.js.map +0 -1
- package/dist/chunk-W2YQRWR5.js.map +0 -1
- package/dist/chunk-W5A5HSFE.js +0 -2
- package/dist/chunk-W5A5HSFE.js.map +0 -1
- package/dist/chunk-YPAUKPCE.js +0 -2
- package/dist/chunk-YPAUKPCE.js.map +0 -1
- package/dist/cx.js.map +0 -1
- package/dist/deep-non-nullable-SmpSvoSd.d.ts +0 -8
- package/dist/dialog.js.map +0 -1
- package/dist/dropdown-menu.js.map +0 -1
- package/dist/icon-button-CT71Ti9V.d.ts +0 -96
- package/dist/icon.js.map +0 -1
- package/dist/kbd.js.map +0 -1
- package/dist/primitive-CBR_XmVa.d.ts +0 -14
- package/dist/select.js.map +0 -1
- package/dist/separator.js.map +0 -1
- package/dist/slot.js.map +0 -1
- package/dist/table.js.map +0 -1
- package/dist/theme.js.map +0 -1
- package/dist/toast.js.map +0 -1
- package/dist/types-BuKAGhC-.d.ts +0 -7
- package/dist/types.js.map +0 -1
- package/dist/variant-props-oDo2u-We.d.ts +0 -11
- package/dist/with-style-props-VnLWm0Yd.d.ts +0 -27
package/dist/multi-select.d.ts
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
import * as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
1
|
+
import { t as WithAsChild } from "./as-child-XMVTepJu.js";
|
|
2
|
+
import { o as WithValidation } from "./types-DgXUgkpc.js";
|
|
3
|
+
import * as react from "react";
|
|
4
|
+
import { ComponentProps, ReactNode } from "react";
|
|
5
|
+
import * as react_jsx_runtime0 from "react/jsx-runtime";
|
|
6
|
+
import * as Primitive from "@ariakit/react";
|
|
7
7
|
|
|
8
|
+
//#region src/components/multi-select/multi-select.d.ts
|
|
8
9
|
type MultiSelectProps = Primitive.ComboboxProviderProps<string[]>;
|
|
9
10
|
type TagProps = Omit<ComponentProps<"span">, "children"> & {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
11
|
+
/**
|
|
12
|
+
* The value to display in the tag label.
|
|
13
|
+
*/
|
|
14
|
+
value: string;
|
|
15
|
+
/**
|
|
16
|
+
* Called when the remove button is clicked.
|
|
17
|
+
*/
|
|
18
|
+
onRemove?: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* When true, the tag cannot be removed. The remove button is disabled and
|
|
21
|
+
* Delete/Backspace key presses are ignored while the tag is focused.
|
|
22
|
+
*/
|
|
23
|
+
locked?: boolean;
|
|
23
24
|
};
|
|
24
25
|
/**
|
|
25
26
|
* Props passed to the children render function of `MultiSelect.TagValues`.
|
|
@@ -32,42 +33,41 @@ type TagProps = Omit<ComponentProps<"span">, "children"> & {
|
|
|
32
33
|
* - `onClick` — focuses the tag and ensures the popover opens/stays open
|
|
33
34
|
*/
|
|
34
35
|
type TagRenderProps = TagProps & {
|
|
35
|
-
|
|
36
|
-
ref: (node: HTMLSpanElement | null) => void;
|
|
36
|
+
/** Ref callback — forward this to the tag element to enable keyboard navigation between tags. */ref: (node: HTMLSpanElement | null) => void;
|
|
37
37
|
};
|
|
38
38
|
type MultiSelectTagValuesProps = {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Values that cannot be removed. Locked tags have their remove button disabled,
|
|
41
|
+
* respond to Backspace/Delete key presses with a shake animation, and shake when
|
|
42
|
+
* Backspace is pressed on an empty input.
|
|
43
|
+
*
|
|
44
|
+
* The `locked` state is also forwarded to the render function via `props.locked`
|
|
45
|
+
* so custom tag components receive it automatically.
|
|
46
|
+
*/
|
|
47
|
+
lockedValues?: string[];
|
|
48
|
+
/**
|
|
49
|
+
* Optional render function for each tag. Receives `{ value, onRemove, locked, ref }` —
|
|
50
|
+
* spread these onto `MultiSelect.Tag` (or your own element) for full keyboard-nav support.
|
|
51
|
+
* When omitted, the default `MultiSelect.Tag` is rendered for each selected value.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* <MultiSelect.TagValues lockedValues={["global"]}>
|
|
56
|
+
* {(props) => (
|
|
57
|
+
* <MultiSelect.Tag key={props.value} {...props} />
|
|
58
|
+
* )}
|
|
59
|
+
* </MultiSelect.TagValues>
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
children?: (props: TagRenderProps) => ReactNode;
|
|
63
63
|
};
|
|
64
64
|
type MultiSelectInputProps = Omit<Primitive.ComboboxProps, "render"> & {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Called with the raw string value whenever the input text changes.
|
|
67
|
+
* Use this to drive external filtering (e.g. with matchSorter) without
|
|
68
|
+
* having to unwrap the DOM event. A convenience alternative to `onChange`.
|
|
69
|
+
*/
|
|
70
|
+
onValueChange?: (value: string) => void;
|
|
71
71
|
};
|
|
72
72
|
type MultiSelectContentProps = Omit<Primitive.ComboboxPopoverProps, "render"> & WithAsChild;
|
|
73
73
|
type MultiSelectItemProps = Omit<Primitive.ComboboxItemProps, "render"> & WithAsChild;
|
|
@@ -99,172 +99,180 @@ type MultiSelectGroupLabelProps = Omit<Primitive.ComboboxGroupLabelProps, "rende
|
|
|
99
99
|
* ```
|
|
100
100
|
*/
|
|
101
101
|
declare const MultiSelect: {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
102
|
+
/**
|
|
103
|
+
* Root component for a multi-select combobox. Provides state management for
|
|
104
|
+
* selecting multiple values with typeahead filtering.
|
|
105
|
+
*
|
|
106
|
+
* @example
|
|
107
|
+
* ```tsx
|
|
108
|
+
* <MultiSelect.Root>
|
|
109
|
+
* <MultiSelect.Trigger>
|
|
110
|
+
* <MultiSelect.TagValues />
|
|
111
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
112
|
+
* </MultiSelect.Trigger>
|
|
113
|
+
* <MultiSelect.Content>
|
|
114
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
115
|
+
* </MultiSelect.Content>
|
|
116
|
+
* </MultiSelect.Root>
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
readonly Root: {
|
|
120
|
+
({
|
|
121
|
+
children,
|
|
122
|
+
defaultSelectedValue,
|
|
123
|
+
...props
|
|
124
|
+
}: MultiSelectProps): react_jsx_runtime0.JSX.Element;
|
|
125
|
+
displayName: string;
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* The trigger container for the multi-select. Wraps the tags and input
|
|
129
|
+
* in a styled container.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```tsx
|
|
133
|
+
* <MultiSelect.Trigger>
|
|
134
|
+
* <MultiSelect.TagValues />
|
|
135
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
136
|
+
* </MultiSelect.Trigger>
|
|
137
|
+
* ```
|
|
138
|
+
*/
|
|
139
|
+
readonly Trigger: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & WithValidation & react.RefAttributes<HTMLDivElement>>;
|
|
140
|
+
/**
|
|
141
|
+
* Renders the selected values as removable tags. Place this inside
|
|
142
|
+
* `MultiSelect.Trigger`, followed by `MultiSelect.Input`.
|
|
143
|
+
*
|
|
144
|
+
* Use `lockedValues` to prevent specific tags from being removed. Locked tags
|
|
145
|
+
* have their remove button disabled and shake when Backspace is pressed.
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```tsx
|
|
149
|
+
* // Default tags with locking
|
|
150
|
+
* <MultiSelect.TagValues lockedValues={["global"]} />
|
|
151
|
+
*
|
|
152
|
+
* // Custom tags via children render function — locked is forwarded via props
|
|
153
|
+
* <MultiSelect.TagValues lockedValues={["global"]}>
|
|
154
|
+
* {(props) => (
|
|
155
|
+
* <MultiSelect.Tag key={props.value} {...props} />
|
|
156
|
+
* )}
|
|
157
|
+
* </MultiSelect.TagValues>
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
readonly TagValues: {
|
|
161
|
+
({
|
|
162
|
+
children,
|
|
163
|
+
lockedValues
|
|
164
|
+
}: MultiSelectTagValuesProps): react_jsx_runtime0.JSX.Element;
|
|
165
|
+
displayName: string;
|
|
166
|
+
};
|
|
167
|
+
/**
|
|
168
|
+
* The combobox input for filtering items. Place this inside
|
|
169
|
+
* `MultiSelect.Trigger`, after `MultiSelect.TagValues`.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```tsx
|
|
173
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
readonly Input: react.ForwardRefExoticComponent<Omit<MultiSelectInputProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
|
|
177
|
+
/**
|
|
178
|
+
* The default tag rendered inside `MultiSelect.TagValues` for each selected value.
|
|
179
|
+
* Displays the value label with a remove button and keyboard navigation support.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```tsx
|
|
183
|
+
* <MultiSelect.Tag
|
|
184
|
+
* value="apple"
|
|
185
|
+
* onRemove={() => removeValue("apple")}
|
|
186
|
+
* />
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
readonly Tag: react.ForwardRefExoticComponent<Omit<TagProps, "ref"> & react.RefAttributes<HTMLSpanElement>>;
|
|
190
|
+
/**
|
|
191
|
+
* Renders a popover that contains multi-select content.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```tsx
|
|
195
|
+
* <MultiSelect.Content>
|
|
196
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
197
|
+
* </MultiSelect.Content>
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
readonly Content: react.ForwardRefExoticComponent<Omit<MultiSelectContentProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
201
|
+
/**
|
|
202
|
+
* Renders a sticky footer pinned to the bottom inside `MultiSelect.Content`,
|
|
203
|
+
* with a separator border at the top.
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```tsx
|
|
207
|
+
* <MultiSelect.ContentFooter>
|
|
208
|
+
* <p>Upgrade to unlock more options.</p>
|
|
209
|
+
* </MultiSelect.ContentFooter>
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
readonly ContentFooter: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
213
|
+
/**
|
|
214
|
+
* Renders a selectable item with a checkbox indicator inside a `MultiSelect.Content`.
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```tsx
|
|
218
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
219
|
+
* ```
|
|
220
|
+
*/
|
|
221
|
+
readonly Item: react.ForwardRefExoticComponent<Omit<MultiSelectItemProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
222
|
+
/**
|
|
223
|
+
* Renders a group for MultiSelect.Item elements.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* ```tsx
|
|
227
|
+
* <MultiSelect.Group>
|
|
228
|
+
* <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
|
|
229
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
230
|
+
* </MultiSelect.Group>
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
readonly Group: react.ForwardRefExoticComponent<Omit<MultiSelectGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
234
|
+
/**
|
|
235
|
+
* Renders a label in a multi-select group.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```tsx
|
|
239
|
+
* <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
readonly GroupLabel: react.ForwardRefExoticComponent<Omit<MultiSelectGroupLabelProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
243
|
+
/**
|
|
244
|
+
* Renders a description below a `MultiSelect.GroupLabel` inside a `MultiSelect.Group`.
|
|
245
|
+
*
|
|
246
|
+
* @example
|
|
247
|
+
* ```tsx
|
|
248
|
+
* <MultiSelect.GroupDescription>
|
|
249
|
+
* Include all points of presence within the region.
|
|
250
|
+
* </MultiSelect.GroupDescription>
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
readonly GroupDescription: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
|
|
254
|
+
/**
|
|
255
|
+
* Renders a separator between items or groups.
|
|
256
|
+
*
|
|
257
|
+
* @example
|
|
258
|
+
* ```tsx
|
|
259
|
+
* <MultiSelect.Separator />
|
|
260
|
+
* ```
|
|
261
|
+
*/
|
|
262
|
+
readonly Separator: react.ForwardRefExoticComponent<Omit<Omit<react.ClassAttributes<HTMLDivElement> & react.HTMLAttributes<HTMLDivElement> & WithAsChild & {
|
|
263
|
+
orientation?: "horizontal" | "vertical";
|
|
264
|
+
semantic?: boolean;
|
|
265
|
+
}, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
266
|
+
/**
|
|
267
|
+
* Renders a message when no items match the current filter.
|
|
268
|
+
*
|
|
269
|
+
* @example
|
|
270
|
+
* ```tsx
|
|
271
|
+
* <MultiSelect.Empty>No results found</MultiSelect.Empty>
|
|
272
|
+
* ```
|
|
273
|
+
*/
|
|
274
|
+
readonly Empty: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
|
|
268
275
|
};
|
|
269
|
-
|
|
276
|
+
//#endregion
|
|
270
277
|
export { MultiSelect };
|
|
278
|
+
//# sourceMappingURL=multi-select.d.ts.map
|
package/dist/multi-select.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as G}from"./chunk-EVU5XGB4.js";import{b as A}from"./chunk-MLXONRJD.js";import{a as k}from"./chunk-HKSO72E5.js";import"./chunk-5VDCC3YW.js";import{a as D}from"./chunk-IVQ626TU.js";import{a as T}from"./chunk-ADF5DAYG.js";import"./chunk-SBQHQ2SJ.js";import{a as y}from"./chunk-PFXFESEN.js";import*as d from"@ariakit/react";import{CheckIcon as re}from"@phosphor-icons/react/Check";import{LockIcon as oe}from"@phosphor-icons/react/Lock";import{XIcon as ne}from"@phosphor-icons/react/X";import{createContext as N,forwardRef as P,useCallback as O,useContext as S,useEffect as ae,useMemo as W,useRef as C}from"react";import{Fragment as le,jsx as s,jsxs as _}from"react/jsx-runtime";var L=t=>Array.isArray(t)&&t.every(r=>typeof r=="string"),ie=[],V=N({current:null}),K=N({current:[]}),I=N({onInputKeyDownRef:{current:void 0},inputRef:{current:null}}),B=({children:t,defaultSelectedValue:r=[],...o})=>{let n=C(null),u=C(void 0),i=C(null),m=C([]),f=W(()=>({onInputKeyDownRef:u,inputRef:i}),[]);return s(V.Provider,{value:n,children:s(I.Provider,{value:f,children:s(K.Provider,{value:m,children:s(d.ComboboxProvider,{defaultSelectedValue:r,...o,children:t})})})})};B.displayName="MultiSelect";var F=P(({"aria-invalid":t,className:r,children:o,onMouseDown:n,validation:u,...i},m)=>{let f=S(V),{inputRef:l}=S(I),h=t!=null&&t!=="false"?"error":typeof u=="function"?u():u;return s("div",{role:"group","data-slot":"multi-select-trigger",className:y("cursor-text select-none font-sans text-sm","border-form bg-form text-strong flex w-full flex-wrap items-center gap-1 rounded-md border px-2 py-1.5","has-focus:outline-hidden has-focus-within:ring-4 has-aria-expanded:ring-4","has-focus-within:border-accent-600 has-focus-within:ring-focus-accent has-aria-expanded:border-accent-600 has-aria-expanded:ring-focus-accent","hover:border-neutral-400","data-validation-success:border-success-600 data-validation-success:has-focus-within:border-success-600 data-validation-success:has-focus-within:ring-focus-success data-validation-success:has-aria-expanded:border-success-600 data-validation-success:has-aria-expanded:ring-focus-success","data-validation-warning:border-warning-600 data-validation-warning:has-focus-within:border-warning-600 data-validation-warning:has-focus-within:ring-focus-warning data-validation-warning:has-aria-expanded:border-warning-600 data-validation-warning:has-aria-expanded:ring-focus-warning","data-validation-error:border-danger-600 data-validation-error:has-focus-within:border-danger-600 data-validation-error:has-focus-within:ring-focus-danger data-validation-error:has-aria-expanded:border-danger-600 data-validation-error:has-aria-expanded:ring-focus-danger",r),"data-validation":h||void 0,onMouseDown:b=>{b.target instanceof HTMLElement&&!b.target.closest("button, input, [role='option']")&&(b.preventDefault(),l.current?.focus()),n?.(b)},ref:k(f,m),...i,children:o})});F.displayName="MultiSelectTrigger";var H=P(({className:t,value:r,onRemove:o,locked:n=!1,onKeyDown:u,...i},m)=>{let f=C(null);return _("span",{ref:k(f,m),role:"option","aria-selected":!0,tabIndex:-1,"data-slot":"multi-select-tag","data-locked":n||void 0,className:y("cursor-default bg-neutral-100 border border-neutral-300 rounded-xs text-strong inline-flex items-center gap-1 pl-1.5 pr-1 py-0.5 text-xs font-semibold font-mono","focus-visible:outline-hidden focus-visible:border-accent-600/50 focus-visible:ring-3 focus-visible:ring-focus-accent",t),onKeyDown:l=>{if(n&&(l.key==="Backspace"||l.key==="Delete")){l.preventDefault(),E(l.currentTarget);return}u?.(l)},...i,children:[r,s("button",{type:"button","aria-label":`Remove ${r}`,tabIndex:-1,"aria-disabled":n||void 0,className:y("cursor-pointer hover:bg-neutral-200 hover:text-strong text-strong/25 rounded-sm p-px size-4","aria-disabled:cursor-default aria-disabled:hover:bg-transparent aria-disabled:hover:text-strong/25"),onClick:l=>{if(l.stopPropagation(),n){let c=f.current;c&&E(c);return}o?.()},onMouseDown:l=>{l.preventDefault()},children:s(D,{svg:n?s(oe,{}):s(ne,{weight:"bold"}),className:"size-3"})})]})});H.displayName="MultiSelectTag";var X=({children:t,lockedValues:r=[]})=>{let o=d.useComboboxContext(),n=d.useStoreState(o,"selectedValue"),i=(L(n)?n:void 0)??ie,m=C(i);m.current=i;let f=S(K);f.current=r;let l=W(()=>new Set(r),[r]),c=C(new Map),{onInputKeyDownRef:h,inputRef:b}=S(I),x=C(new Set);ae(()=>()=>{x.current.forEach(cancelAnimationFrame)},[]);let M=e=>{let a;a=requestAnimationFrame(()=>{x.current.delete(a),e()}),x.current.add(a)},w=e=>{if(o){let a=o.getState().selectedValue;if(!L(a))return;o.setSelectedValue(a.filter(g=>g!==e))}},p=e=>{let a=m.current[e];if(a==null)return;let g=c.current.get(a);g&&(g.focus(),o?.show())},R=()=>{b.current?.focus()},ee=(e,a)=>{let g=i[a];switch(e.key){case"ArrowLeft":{e.preventDefault(),a>0&&p(a-1);break}case"ArrowRight":{e.preventDefault(),a<i.length-1?p(a+1):R();break}case"Backspace":case"Delete":{if(e.preventDefault(),g!=null){if(l.has(g)){let v=c.current.get(g);v&&E(v);break}if(w(g),e.key==="Backspace")if(a>0){let v=a-1;M(()=>p(v))}else M(()=>{m.current.length>0?p(0):R()});else M(()=>{a<m.current.length?p(a):R()})}break}case"ArrowUp":case"ArrowDown":{e.preventDefault(),R(),b.current?.dispatchEvent(new KeyboardEvent("keydown",{key:e.key,bubbles:!0,cancelable:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,altKey:e.altKey}));break}default:{e.key.length===1&&!e.ctrlKey&&!e.metaKey&&R();break}}},te=e=>{if(e.key==="ArrowLeft"&&e.currentTarget.selectionStart===0&&e.currentTarget.selectionEnd===0&&i.length>0){e.preventDefault(),p(i.length-1);return}if(e.key==="Backspace"&&e.currentTarget.value===""&&i.length>0){let a=i[i.length-1];if(a!=null)if(f.current.includes(a)){let g=c.current.get(a);g&&E(g)}else w(a)}};return h.current=te,s(le,{children:i.map((e,a)=>{let g={value:e,locked:l.has(e),onRemove:()=>{if(l.has(e)){let v=c.current.get(e);v&&E(v);return}w(e)},ref:v=>{v?c.current.set(e,v):c.current.delete(e)},onKeyDown:v=>ee(v,a),onClick:()=>p(a)};return t?t(g):s(H,{...g},e)})})};X.displayName="MultiSelectTagValues";var j=P(({className:t,onBlur:r,onChange:o,onFocus:n,onKeyDown:u,onValueChange:i,placeholder:m,...f},l)=>{let c=d.useComboboxContext(),{onInputKeyDownRef:h,inputRef:b}=S(I),x=d.useStoreState(c,"selectedValue"),w=((L(x)?x:void 0)?.length??0)>0;return s(d.Combobox,{autoSelect:!0,"data-slot":"multi-select-input",className:y("pointer-coarse:text-base min-w-20 flex-1 select-text border-0 bg-transparent text-sm outline-hidden","placeholder:select-none placeholder:text-placeholder",t),onChange:p=>{i?.(p.target.value),o?.(p)},onKeyDown:p=>{h.current?.(p),u?.(p)},onBlur:p=>{p.relatedTarget instanceof HTMLElement&&p.relatedTarget.closest('[data-slot="multi-select-tag"]')&&c?.show(),r?.(p)},onFocus:p=>{c?.show(),n?.(p)},placeholder:w?void 0:m,ref:k(b,l),...f})});j.displayName="MultiSelectInput";var z=P(({asChild:t=!1,backdrop:r=!1,children:o,className:n,modal:u=!0,sameWidth:i=!0,unmountOnHide:m=!0,...f},l)=>{let c=S(V),h=O(()=>c.current?.getBoundingClientRect()??null,[c]),b=O(x=>!(x.target instanceof Node&&c.current?.contains(x.target)),[c]);return s(d.ComboboxPopover,{"data-slot":"multi-select-content",className:y("border-popover bg-popover relative z-50 max-h-96 min-w-32 scrollbar overflow-y-scroll overflow-x-hidden overscroll-y-none rounded-md border shadow-md pt-1 pb-1 has-data-content-footer:pb-0 font-sans flex flex-col gap-px focus:outline-hidden",n),backdrop:r,getAnchorRect:h,gutter:4,hideOnInteractOutside:b,modal:u,ref:l,render:t?({ref:x,...M})=>s(T,{ref:x,...M}):void 0,sameWidth:i,unmountOnHide:m,...f,children:o})});z.displayName="MultiSelectContent";var Y=P(({asChild:t=!1,children:r,className:o,focusOnHover:n=!0,value:u,onClick:i,...m},f)=>{let l=S(K),c=u!=null&&l.current.includes(u);return _(d.ComboboxItem,{"data-slot":"multi-select-item",className:y("mx-1 cursor-pointer rounded-md px-2 py-1.5 text-strong text-sm font-normal flex min-w-0 items-center justify-between gap-2","[[role=option]+&]:mt-px","data-active-item:bg-active-menu-item","aria-disabled:opacity-50","aria-selected:bg-selected-menu-item aria-selected:data-active-item:bg-active-selected-menu-item",o),focusOnHover:n,onClick:h=>{if(c){h.preventDefault();return}i?.(h)},ref:f,render:t?({ref:h,...b})=>s(T,{ref:h,...b}):void 0,resetValueOnSelect:!0,value:u,...m,children:[r,s(d.ComboboxItemCheck,{children:s(D,{svg:s(re,{weight:"bold"}),className:"size-4 text-accent-600"})})]})});Y.displayName="MultiSelectItem";var q=P(({asChild:t=!1,children:r,...o},n)=>s(d.ComboboxGroup,{"data-slot":"multi-select-group",className:"mx-1",ref:n,render:t?({ref:u,...i})=>s(T,{ref:u,...i}):void 0,...o,children:r}));q.displayName="MultiSelectGroup";var U=P(({asChild:t=!1,children:r,className:o,...n},u)=>s(d.ComboboxGroupLabel,{"data-slot":"multi-select-group-label",className:y("text-muted px-2 py-1 text-xs font-medium",o),ref:u,render:t?({ref:i,...m})=>s(T,{ref:i,...m}):void 0,...n,children:r}));U.displayName="MultiSelectGroupLabel";var $=P(({className:t,children:r,...o},n)=>s("p",{"data-slot":"multi-select-group-description",className:y("text-muted px-2 pb-1 text-xs",t),ref:n,...o,children:r}));$.displayName="MultiSelectGroupDescription";var J=P(({className:t,...r},o)=>s(A,{"data-slot":"multi-select-separator",ref:o,className:y("my-1 w-auto",t),...r}));J.displayName="MultiSelectSeparator";var Q=P(({className:t,children:r,...o},n)=>s("div",{"data-slot":"multi-select-empty",className:y("mx-1 text-muted px-2 py-6 text-center text-sm",t),ref:n,role:"presentation",...o,children:r}));Q.displayName="MultiSelectEmpty";var Z=P(({className:t,children:r,...o},n)=>s("div",{ref:n,"data-slot":"multi-select-content-footer","data-content-footer":!0,className:y("bg-popover sticky bottom-0 border-t border-popover",t),...o,children:r}));Z.displayName="MultiSelectContentFooter";var se={Root:B,Trigger:F,TagValues:X,Input:j,Tag:H,Content:z,ContentFooter:Z,Item:Y,Group:q,GroupLabel:U,GroupDescription:$,Separator:J,Empty:Q};function E(t){G()||t.animate([{transform:"translateX(0)"},{transform:"translateX(-4px)"},{transform:"translateX(4px)"},{transform:"translateX(-4px)"},{transform:"translateX(4px)"},{transform:"translateX(0)"}],{duration:300,easing:"ease-in-out"})}export{se as MultiSelect};
|
|
1
|
+
import{t as e}from"./cx-bKromGBh.js";import{t}from"./icon-B5oNYYrJ.js";import{t as n}from"./slot-DdnjeV2n.js";import{t as r}from"./compose-refs-DeIsFv68.js";import{n as i}from"./separator-BcCNbHBg.js";import{t as a}from"./use-prefers-reduced-motion-BPlsKyCJ.js";import{createContext as o,forwardRef as s,useCallback as c,useContext as l,useEffect as u,useMemo as d,useRef as f}from"react";import{Fragment as p,jsx as m,jsxs as h}from"react/jsx-runtime";import{XIcon as g}from"@phosphor-icons/react/X";import{CheckIcon as _}from"@phosphor-icons/react/Check";import*as v from"@ariakit/react";import{LockIcon as y}from"@phosphor-icons/react/Lock";const b=e=>Array.isArray(e)&&e.every(e=>typeof e==`string`),x=[],S=o({current:null}),C=o({current:[]}),w=o({onInputKeyDownRef:{current:void 0},inputRef:{current:null}}),T=({children:e,defaultSelectedValue:t=[],...n})=>{let r=f(null),i=f(void 0),a=f(null),o=f([]),s=d(()=>({onInputKeyDownRef:i,inputRef:a}),[]);return m(S.Provider,{value:r,children:m(w.Provider,{value:s,children:m(C.Provider,{value:o,children:m(v.ComboboxProvider,{defaultSelectedValue:t,...n,children:e})})})})};T.displayName=`MultiSelect`;const E=s(({"aria-invalid":t,className:n,children:i,onMouseDown:a,validation:o,...s},c)=>{let u=l(S),{inputRef:d}=l(w),f=t!=null&&t!==`false`?`error`:typeof o==`function`?o():o;return m(`div`,{role:`group`,"data-slot":`multi-select-trigger`,className:e(`cursor-text select-none font-sans text-sm`,`border-form bg-form text-strong flex w-full flex-wrap items-center gap-1 rounded-md border px-2 py-1.5`,`has-focus:outline-hidden has-focus-within:ring-4 has-aria-expanded:ring-4`,`has-focus-within:border-accent-600 has-focus-within:ring-focus-accent has-aria-expanded:border-accent-600 has-aria-expanded:ring-focus-accent`,`hover:border-neutral-400`,`data-validation-success:border-success-600 data-validation-success:has-focus-within:border-success-600 data-validation-success:has-focus-within:ring-focus-success data-validation-success:has-aria-expanded:border-success-600 data-validation-success:has-aria-expanded:ring-focus-success`,`data-validation-warning:border-warning-600 data-validation-warning:has-focus-within:border-warning-600 data-validation-warning:has-focus-within:ring-focus-warning data-validation-warning:has-aria-expanded:border-warning-600 data-validation-warning:has-aria-expanded:ring-focus-warning`,`data-validation-error:border-danger-600 data-validation-error:has-focus-within:border-danger-600 data-validation-error:has-focus-within:ring-focus-danger data-validation-error:has-aria-expanded:border-danger-600 data-validation-error:has-aria-expanded:ring-focus-danger`,n),"data-validation":f||void 0,onMouseDown:e=>{e.target instanceof HTMLElement&&!e.target.closest(`button, input, [role='option']`)&&(e.preventDefault(),d.current?.focus()),a?.(e)},ref:r(u,c),...s,children:i})});E.displayName=`MultiSelectTrigger`;const D=s(({className:n,value:i,onRemove:a,locked:o=!1,onKeyDown:s,...c},l)=>{let u=f(null);return h(`span`,{ref:r(u,l),role:`option`,"aria-selected":!0,tabIndex:-1,"data-slot":`multi-select-tag`,"data-locked":o||void 0,className:e(`cursor-default bg-neutral-100 border border-neutral-300 rounded-xs text-strong inline-flex items-center gap-1 pl-1.5 pr-1 py-0.5 text-xs font-semibold font-mono`,`focus-visible:outline-hidden focus-visible:border-accent-600/50 focus-visible:ring-3 focus-visible:ring-focus-accent`,n),onKeyDown:e=>{if(o&&(e.key===`Backspace`||e.key===`Delete`)){e.preventDefault(),z(e.currentTarget);return}s?.(e)},...c,children:[i,m(`button`,{type:`button`,"aria-label":`Remove ${i}`,tabIndex:-1,"aria-disabled":o||void 0,className:e(`cursor-pointer hover:bg-neutral-200 hover:text-strong text-strong/25 rounded-sm p-px size-4`,`aria-disabled:cursor-default aria-disabled:hover:bg-transparent aria-disabled:hover:text-strong/25`),onClick:e=>{if(e.stopPropagation(),o){let e=u.current;e&&z(e);return}a?.()},onMouseDown:e=>{e.preventDefault()},children:m(t,{svg:o?m(y,{}):m(g,{weight:`bold`}),className:`size-3`})})]})});D.displayName=`MultiSelectTag`;const O=({children:e,lockedValues:t=[]})=>{let n=v.useComboboxContext(),r=v.useStoreState(n,`selectedValue`),i=(b(r)?r:void 0)??x,a=f(i);a.current=i;let o=l(C);o.current=t;let s=d(()=>new Set(t),[t]),c=f(new Map),{onInputKeyDownRef:h,inputRef:g}=l(w),_=f(new Set);u(()=>()=>{_.current.forEach(cancelAnimationFrame)},[]);let y=e=>{let t;t=requestAnimationFrame(()=>{_.current.delete(t),e()}),_.current.add(t)},S=e=>{if(n){let t=n.getState().selectedValue;if(!b(t))return;n.setSelectedValue(t.filter(t=>t!==e))}},T=e=>{let t=a.current[e];if(t==null)return;let r=c.current.get(t);r&&(r.focus(),n?.show())},E=()=>{g.current?.focus()},O=(e,t)=>{let n=i[t];switch(e.key){case`ArrowLeft`:e.preventDefault(),t>0&&T(t-1);break;case`ArrowRight`:e.preventDefault(),t<i.length-1?T(t+1):E();break;case`Backspace`:case`Delete`:if(e.preventDefault(),n!=null){if(s.has(n)){let e=c.current.get(n);e&&z(e);break}if(S(n),e.key===`Backspace`)if(t>0){let e=t-1;y(()=>T(e))}else y(()=>{a.current.length>0?T(0):E()});else y(()=>{t<a.current.length?T(t):E()})}break;case`ArrowUp`:case`ArrowDown`:e.preventDefault(),E(),g.current?.dispatchEvent(new KeyboardEvent(`keydown`,{key:e.key,bubbles:!0,cancelable:!0,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,altKey:e.altKey}));break;default:e.key.length===1&&!e.ctrlKey&&!e.metaKey&&E();break}};return h.current=e=>{if(e.key===`ArrowLeft`&&e.currentTarget.selectionStart===0&&e.currentTarget.selectionEnd===0&&i.length>0){e.preventDefault(),T(i.length-1);return}if(e.key===`Backspace`&&e.currentTarget.value===``&&i.length>0){let e=i[i.length-1];if(e!=null)if(o.current.includes(e)){let t=c.current.get(e);t&&z(t)}else S(e)}},m(p,{children:i.map((t,n)=>{let r={value:t,locked:s.has(t),onRemove:()=>{if(s.has(t)){let e=c.current.get(t);e&&z(e);return}S(t)},ref:e=>{e?c.current.set(t,e):c.current.delete(t)},onKeyDown:e=>O(e,n),onClick:()=>T(n)};return e?e(r):m(D,{...r},t)})})};O.displayName=`MultiSelectTagValues`;const k=s(({className:t,onBlur:n,onChange:i,onFocus:a,onKeyDown:o,onValueChange:s,placeholder:c,...u},d)=>{let f=v.useComboboxContext(),{onInputKeyDownRef:p,inputRef:h}=l(w),g=v.useStoreState(f,`selectedValue`),_=((b(g)?g:void 0)?.length??0)>0;return m(v.Combobox,{autoSelect:!0,"data-slot":`multi-select-input`,className:e(`pointer-coarse:text-base min-w-20 flex-1 select-text border-0 bg-transparent text-sm outline-hidden`,`placeholder:select-none placeholder:text-placeholder`,t),onChange:e=>{s?.(e.target.value),i?.(e)},onKeyDown:e=>{p.current?.(e),o?.(e)},onBlur:e=>{e.relatedTarget instanceof HTMLElement&&e.relatedTarget.closest(`[data-slot="multi-select-tag"]`)&&f?.show(),n?.(e)},onFocus:e=>{f?.show(),a?.(e)},placeholder:_?void 0:c,ref:r(h,d),...u})});k.displayName=`MultiSelectInput`;const A=s(({asChild:t=!1,backdrop:r=!1,children:i,className:a,modal:o=!0,portalElement:s,sameWidth:u=!0,unmountOnHide:d=!0,...f},p)=>{let h=l(S),g=c(()=>h.current?.getBoundingClientRect()??null,[h]),_=c(e=>typeof s==`function`?s(e):s??h.current?.closest(`[data-mantle-modal-content]`)??e.ownerDocument.body,[s,h]),y=c(e=>!(e.target instanceof Node&&h.current?.contains(e.target)),[h]);return m(v.ComboboxPopover,{"data-slot":`multi-select-content`,className:e(`border-popover bg-popover relative z-50 max-h-96 min-w-32 scrollbar overflow-y-scroll overflow-x-hidden overscroll-y-none rounded-md border shadow-md pt-1 pb-1 has-data-content-footer:pb-0 font-sans flex flex-col gap-px focus:outline-hidden`,a),backdrop:r,getAnchorRect:g,gutter:4,hideOnInteractOutside:y,modal:o,portalElement:_,ref:p,render:t?({ref:e,...t})=>m(n,{ref:e,...t}):void 0,sameWidth:u,unmountOnHide:d,...f,children:i})});A.displayName=`MultiSelectContent`;const j=s(({asChild:r=!1,children:i,className:a,focusOnHover:o=!0,value:s,onClick:c,...u},d)=>{let f=l(C),p=s!=null&&f.current.includes(s);return h(v.ComboboxItem,{"data-slot":`multi-select-item`,className:e(`mx-1 cursor-pointer rounded-md px-2 py-1.5 text-strong text-sm font-normal flex min-w-0 items-center justify-between gap-2`,`[[role=option]+&]:mt-px`,`data-active-item:bg-active-menu-item`,`aria-disabled:opacity-50`,`aria-selected:bg-selected-menu-item aria-selected:data-active-item:bg-active-selected-menu-item`,a),focusOnHover:o,onClick:e=>{if(p){e.preventDefault();return}c?.(e)},ref:d,render:r?({ref:e,...t})=>m(n,{ref:e,...t}):void 0,resetValueOnSelect:!0,value:s,...u,children:[i,m(v.ComboboxItemCheck,{children:m(t,{svg:m(_,{weight:`bold`}),className:`size-4 text-accent-600`})})]})});j.displayName=`MultiSelectItem`;const M=s(({asChild:e=!1,children:t,...r},i)=>m(v.ComboboxGroup,{"data-slot":`multi-select-group`,className:`mx-1`,ref:i,render:e?({ref:e,...t})=>m(n,{ref:e,...t}):void 0,...r,children:t}));M.displayName=`MultiSelectGroup`;const N=s(({asChild:t=!1,children:r,className:i,...a},o)=>m(v.ComboboxGroupLabel,{"data-slot":`multi-select-group-label`,className:e(`text-muted px-2 py-1 text-xs font-medium`,i),ref:o,render:t?({ref:e,...t})=>m(n,{ref:e,...t}):void 0,...a,children:r}));N.displayName=`MultiSelectGroupLabel`;const P=s(({className:t,children:n,...r},i)=>m(`p`,{"data-slot":`multi-select-group-description`,className:e(`text-muted px-2 pb-1 text-xs`,t),ref:i,...r,children:n}));P.displayName=`MultiSelectGroupDescription`;const F=s(({className:t,...n},r)=>m(i,{"data-slot":`multi-select-separator`,ref:r,className:e(`my-1 w-auto`,t),...n}));F.displayName=`MultiSelectSeparator`;const I=s(({className:t,children:n,...r},i)=>m(`div`,{"data-slot":`multi-select-empty`,className:e(`mx-1 text-muted px-2 py-6 text-center text-sm`,t),ref:i,role:`presentation`,...r,children:n}));I.displayName=`MultiSelectEmpty`;const L=s(({className:t,children:n,...r},i)=>m(`div`,{ref:i,"data-slot":`multi-select-content-footer`,"data-content-footer":!0,className:e(`bg-popover sticky bottom-0 border-t border-popover`,t),...r,children:n}));L.displayName=`MultiSelectContentFooter`;const R={Root:T,Trigger:E,TagValues:O,Input:k,Tag:D,Content:A,ContentFooter:L,Item:j,Group:M,GroupLabel:N,GroupDescription:P,Separator:F,Empty:I};function z(e){a()||e.animate([{transform:`translateX(0)`},{transform:`translateX(-4px)`},{transform:`translateX(4px)`},{transform:`translateX(-4px)`},{transform:`translateX(4px)`},{transform:`translateX(0)`}],{duration:300,easing:`ease-in-out`})}export{R as MultiSelect};
|
|
2
2
|
//# sourceMappingURL=multi-select.js.map
|