@ngrok/mantle 0.70.1 → 0.71.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/accordion.d.ts +1 -1
- package/dist/alert-dialog.d.ts +341 -94
- package/dist/alert-dialog.js.map +1 -1
- package/dist/alert.d.ts +3 -3
- package/dist/alert.js.map +1 -1
- package/dist/anchor-2stEauOz.js.map +1 -1
- package/dist/anchor.d.ts +46 -5
- package/dist/{as-child-CJ2vTesV.d.ts → as-child-DQHfEmYB.d.ts} +1 -1
- package/dist/badge.d.ts +34 -5
- package/dist/badge.js.map +1 -1
- package/dist/{button-DDK6nEac.d.ts → button-Bq0x5Pv4.d.ts} +6 -6
- package/dist/button.d.ts +3 -3
- package/dist/card.d.ts +1 -1
- package/dist/checkbox.d.ts +1 -1
- package/dist/checkbox.js +1 -1
- package/dist/code-block.d.ts +3 -3
- package/dist/code-block.js +1 -1
- package/dist/code-block.js.map +1 -1
- package/dist/code-block_highlight-utils.d.ts +1 -1
- package/dist/code-block_highlight-utils.js +1 -1
- package/dist/code.d.ts +23 -2
- package/dist/code.js.map +1 -1
- package/dist/color.d.ts +1 -1
- package/dist/combobox.d.ts +12 -2
- package/dist/combobox.js +1 -1
- package/dist/combobox.js.map +1 -1
- package/dist/command.d.ts +3 -3
- package/dist/command.js +1 -1
- package/dist/command.js.map +1 -1
- package/dist/compose-refs-DZ3cPi47.js +2 -0
- package/dist/compose-refs-DZ3cPi47.js.map +1 -0
- package/dist/copy-to-clipboard-DjOD_Mwb.js +2 -0
- package/dist/copy-to-clipboard-DjOD_Mwb.js.map +1 -0
- package/dist/data-table.d.ts +530 -75
- package/dist/data-table.js +1 -1
- package/dist/data-table.js.map +1 -1
- package/dist/{deep-non-nullable-DwBZzk4x.d.ts → deep-non-nullable-VFm1T3JZ.d.ts} +1 -1
- package/dist/description-list.d.ts +1 -1
- package/dist/{dialog-MiS_Q-ge.js → dialog-BHzl9eye.js} +1 -1
- package/dist/dialog-BHzl9eye.js.map +1 -0
- package/dist/dialog.d.ts +8 -3
- package/dist/dialog.js +1 -1
- package/dist/{direction-ClCocWIf.js → direction-DsB-pD9V.js} +1 -1
- package/dist/{direction-ClCocWIf.js.map → direction-DsB-pD9V.js.map} +1 -1
- package/dist/{direction-Jk7BkzGo.d.ts → direction-DtBAQn7p.d.ts} +1 -1
- package/dist/{dropdown-menu-C9f9Y8Ov.d.ts → dropdown-menu-CzUNYIfA.d.ts} +2 -2
- package/dist/{dropdown-menu-Ff97BIJe.js → dropdown-menu-Ducs2SEn.js} +2 -2
- package/dist/{dropdown-menu-Ff97BIJe.js.map → dropdown-menu-Ducs2SEn.js.map} +1 -1
- package/dist/dropdown-menu.d.ts +1 -1
- package/dist/dropdown-menu.js +1 -1
- package/dist/empty.d.ts +2 -2
- package/dist/flag.d.ts +33 -4
- package/dist/flag.js.map +1 -1
- package/dist/hooks.d.ts +301 -77
- package/dist/hooks.js +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/hover-card.d.ts +15 -10
- package/dist/hover-card.js.map +1 -1
- package/dist/{icon-C0YAAaLZ.d.ts → icon-DKMJm20j.d.ts} +2 -2
- package/dist/{icon-button-Cl30yTfu.d.ts → icon-button-BnK4K7YK.d.ts} +3 -3
- package/dist/icon.d.ts +3 -3
- package/dist/icons.d.ts +3 -3
- package/dist/icons.js +1 -1
- package/dist/icons.js.map +1 -1
- package/dist/{in-view-DsiWfQpY.d.ts → in-view-Da08Bx6l.d.ts} +15 -4
- package/dist/{in-view-BXzPPdcl.js → in-view-pia_SVdE.js} +1 -1
- package/dist/{in-view-BXzPPdcl.js.map → in-view-pia_SVdE.js.map} +1 -1
- package/dist/{index-ddHz7L9f.d.ts → index-C91lxoX9.d.ts} +56 -13
- package/dist/{index-DU3SQJ46.d.ts → index-DOJUH34Z.d.ts} +4 -4
- package/dist/{index-B6SPk_xb.d.ts → index-DkMUaYsw.d.ts} +1 -1
- package/dist/{index-vOSpS5jv.d.ts → index-rtz7SwEq.d.ts} +1 -1
- package/dist/input.d.ts +2 -2
- package/dist/input.js +1 -1
- package/dist/input.js.map +1 -1
- package/dist/{is-input-Bh1rQhX3.js → is-input-CUEWaxtA.js} +1 -1
- package/dist/{is-input-Bh1rQhX3.js.map → is-input-CUEWaxtA.js.map} +1 -1
- package/dist/{kbd-B0wWeV_0.js → kbd-CAVUiqBT.js} +1 -1
- package/dist/kbd-CAVUiqBT.js.map +1 -0
- package/dist/kbd.d.ts +37 -8
- package/dist/kbd.js +1 -1
- package/dist/label.d.ts +40 -9
- package/dist/label.js.map +1 -1
- package/dist/media-object.d.ts +27 -11
- package/dist/media-object.js.map +1 -1
- package/dist/multi-select.d.ts +187 -36
- package/dist/multi-select.js +1 -1
- package/dist/multi-select.js.map +1 -1
- package/dist/otp-input.d.ts +167 -0
- package/dist/otp-input.js +2 -0
- package/dist/otp-input.js.map +1 -0
- package/dist/pagination.d.ts +3 -3
- package/dist/pagination.js +1 -1
- package/dist/pagination.js.map +1 -1
- package/dist/popover.d.ts +7 -5
- package/dist/popover.js.map +1 -1
- package/dist/primitive-tXm_8n_t.js.map +1 -1
- package/dist/{primitive-DXo0gUqw.d.ts → primitive-tyw4V7Vf.d.ts} +1 -1
- package/dist/progress.js.map +1 -1
- package/dist/radio-group.d.ts +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/{resolve-pre-rendered-props-BXv6e6fc.js → resolve-pre-rendered-props-C-kiaLHj.js} +1 -1
- package/dist/{resolve-pre-rendered-props-BXv6e6fc.js.map → resolve-pre-rendered-props-C-kiaLHj.js.map} +1 -1
- package/dist/{resolve-pre-rendered-props-kcQrtWPt.d.ts → resolve-pre-rendered-props-CNUnH1fU.d.ts} +1 -1
- package/dist/sandboxed-on-click.d.ts +1 -1
- package/dist/{select-LJmfG--I.js → select-DOgdZO0Q.js} +2 -2
- package/dist/select-DOgdZO0Q.js.map +1 -0
- package/dist/{select-DNJli9JO.d.ts → select-DZutJxyr.d.ts} +11 -3
- package/dist/select.d.ts +1 -1
- package/dist/select.js +1 -1
- package/dist/{separator-DyOGgFCs.js → separator-DSOIrnhj.js} +1 -1
- package/dist/{separator-DyOGgFCs.js.map → separator-DSOIrnhj.js.map} +1 -1
- package/dist/separator.d.ts +1 -1
- package/dist/separator.js +1 -1
- package/dist/sheet.d.ts +7 -3
- package/dist/sheet.js.map +1 -1
- package/dist/skeleton.d.ts +32 -5
- package/dist/skeleton.js.map +1 -1
- package/dist/{sort-C_Jbs1dH.js → sort-DzCsa6Qj.js} +2 -2
- package/dist/{sort-C_Jbs1dH.js.map → sort-DzCsa6Qj.js.map} +1 -1
- package/dist/split-button.d.ts +3 -3
- package/dist/split-button.js +1 -1
- package/dist/{svg-only-BnnbLx6R.d.ts → svg-only-BtBvFy-N.d.ts} +2 -2
- package/dist/{table-4q1UxE7L.d.ts → table-BsNJBKiq.d.ts} +7 -3
- package/dist/{table-12T25gGa.js → table-Cl4nlRMR.js} +2 -2
- package/dist/{table-12T25gGa.js.map → table-Cl4nlRMR.js.map} +1 -1
- package/dist/table.d.ts +1 -1
- package/dist/table.js +1 -1
- package/dist/tabs.js +1 -1
- package/dist/text-area.d.ts +1 -1
- package/dist/text-area.js +1 -1
- package/dist/theme-provider-BFcnjeME.js.map +1 -1
- package/dist/theme.d.ts +2 -2
- package/dist/theme.js.map +1 -1
- package/dist/{themes-DXb8Tk74.d.ts → themes-DIEYkvNl.d.ts} +1 -1
- package/dist/toast.d.ts +3 -3
- package/dist/tooltip.d.ts +31 -14
- package/dist/tooltip.js.map +1 -1
- package/dist/{traffic-policy-file-ChsoQtXQ.js → traffic-policy-file-C6LHYrIU.js} +1 -1
- package/dist/{traffic-policy-file-ChsoQtXQ.js.map → traffic-policy-file-C6LHYrIU.js.map} +1 -1
- package/dist/{types-BeTbgoJd.d.ts → types-DG0WQLTL.d.ts} +1 -1
- package/dist/{types-DEYyl5LX.d.ts → types-DoV0R5Ja.d.ts} +1 -1
- package/dist/types.d.ts +5 -5
- package/dist/use-copy-to-clipboard-C7vsjJe-.js +2 -0
- package/dist/use-copy-to-clipboard-C7vsjJe-.js.map +1 -0
- package/dist/use-matches-media-query-CojcYxlA.js.map +1 -1
- package/dist/{use-prefers-reduced-motion-BcwST13S.js → use-prefers-reduced-motion-aXfsyo-k.js} +1 -1
- package/dist/use-prefers-reduced-motion-aXfsyo-k.js.map +1 -0
- package/dist/utils.d.ts +3 -3
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/{variant-props-DszdagRm.d.ts → variant-props-DUmSIQK8.d.ts} +2 -2
- package/dist/{with-style-props-Dlz3G1tS.d.ts → with-style-props-3iFrBR08.d.ts} +1 -1
- package/package.json +12 -7
- package/dist/compose-refs-DFIaEnQH.js +0 -2
- package/dist/compose-refs-DFIaEnQH.js.map +0 -1
- package/dist/dialog-MiS_Q-ge.js.map +0 -1
- package/dist/kbd-B0wWeV_0.js.map +0 -1
- package/dist/select-LJmfG--I.js.map +0 -1
- package/dist/use-copy-to-clipboard-Ds9MsSNU.js +0 -2
- package/dist/use-copy-to-clipboard-Ds9MsSNU.js.map +0 -1
- package/dist/use-prefers-reduced-motion-BcwST13S.js.map +0 -1
package/dist/multi-select.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as WithAsChild } from "./as-child-
|
|
2
|
-
import { o as WithValidation } from "./types-
|
|
1
|
+
import { t as WithAsChild } from "./as-child-DQHfEmYB.js";
|
|
2
|
+
import { o as WithValidation } from "./types-DG0WQLTL.js";
|
|
3
3
|
import * as _$react from "react";
|
|
4
4
|
import { ComponentProps, ReactNode } from "react";
|
|
5
5
|
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
@@ -80,6 +80,11 @@ type MultiSelectGroupLabelProps = Omit<Primitive.ComboboxGroupLabelProps, "rende
|
|
|
80
80
|
* Built on top of Ariakit's Combobox primitives with full keyboard support
|
|
81
81
|
* and WAI-ARIA compliance.
|
|
82
82
|
*
|
|
83
|
+
* Use MultiSelect when the user can choose multiple values from a list, with selected
|
|
84
|
+
* items rendered as removable tags/chips. For single selection, use Combobox (with search)
|
|
85
|
+
* or Select (without).
|
|
86
|
+
*
|
|
87
|
+
* @see https://mantle.ngrok.com/components/multi-select
|
|
83
88
|
* @see https://www.w3.org/WAI/ARIA/apg/patterns/combobox/
|
|
84
89
|
* @see https://ariakit.org/components/combobox
|
|
85
90
|
*
|
|
@@ -120,6 +125,12 @@ declare const MultiSelect: {
|
|
|
120
125
|
* Root component for a multi-select combobox. Provides state management for
|
|
121
126
|
* selecting multiple values with typeahead filtering.
|
|
122
127
|
*
|
|
128
|
+
* Use MultiSelect when the user can choose multiple values from a list, with selected
|
|
129
|
+
* items rendered as removable tags/chips. For single selection, use Combobox (with search)
|
|
130
|
+
* or Select (without).
|
|
131
|
+
*
|
|
132
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectroot
|
|
133
|
+
*
|
|
123
134
|
* @example
|
|
124
135
|
* ```tsx
|
|
125
136
|
* <MultiSelect.Root>
|
|
@@ -145,12 +156,19 @@ declare const MultiSelect: {
|
|
|
145
156
|
* The trigger container for the multi-select. Wraps the tags and input
|
|
146
157
|
* in a styled container.
|
|
147
158
|
*
|
|
159
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselecttrigger
|
|
160
|
+
*
|
|
148
161
|
* @example
|
|
149
162
|
* ```tsx
|
|
150
|
-
* <MultiSelect.
|
|
151
|
-
* <MultiSelect.
|
|
152
|
-
*
|
|
153
|
-
*
|
|
163
|
+
* <MultiSelect.Root>
|
|
164
|
+
* <MultiSelect.Trigger>
|
|
165
|
+
* <MultiSelect.TagValues />
|
|
166
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
167
|
+
* </MultiSelect.Trigger>
|
|
168
|
+
* <MultiSelect.Content>
|
|
169
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
170
|
+
* </MultiSelect.Content>
|
|
171
|
+
* </MultiSelect.Root>
|
|
154
172
|
* ```
|
|
155
173
|
*/
|
|
156
174
|
readonly Trigger: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & WithValidation & _$react.RefAttributes<HTMLDivElement>>;
|
|
@@ -161,17 +179,35 @@ declare const MultiSelect: {
|
|
|
161
179
|
* Use `lockedValues` to prevent specific tags from being removed. Locked tags
|
|
162
180
|
* have their remove button disabled and shake when Backspace is pressed.
|
|
163
181
|
*
|
|
182
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselecttagvalues
|
|
183
|
+
*
|
|
164
184
|
* @example
|
|
165
185
|
* ```tsx
|
|
166
|
-
*
|
|
167
|
-
*
|
|
186
|
+
* <MultiSelect.Root>
|
|
187
|
+
* <MultiSelect.Trigger>
|
|
188
|
+
* <MultiSelect.TagValues lockedValues={["global"]} />
|
|
189
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
190
|
+
* </MultiSelect.Trigger>
|
|
191
|
+
* <MultiSelect.Content>
|
|
192
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
193
|
+
* </MultiSelect.Content>
|
|
194
|
+
* </MultiSelect.Root>
|
|
195
|
+
* ```
|
|
168
196
|
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
173
|
-
*
|
|
174
|
-
*
|
|
197
|
+
* @example
|
|
198
|
+
* Custom tags via children render function — `locked` is forwarded via props.
|
|
199
|
+
* ```tsx
|
|
200
|
+
* <MultiSelect.Root>
|
|
201
|
+
* <MultiSelect.Trigger>
|
|
202
|
+
* <MultiSelect.TagValues lockedValues={["global"]}>
|
|
203
|
+
* {(props) => <MultiSelect.Tag key={props.value} {...props} />}
|
|
204
|
+
* </MultiSelect.TagValues>
|
|
205
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
206
|
+
* </MultiSelect.Trigger>
|
|
207
|
+
* <MultiSelect.Content>
|
|
208
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
209
|
+
* </MultiSelect.Content>
|
|
210
|
+
* </MultiSelect.Root>
|
|
175
211
|
* ```
|
|
176
212
|
*/
|
|
177
213
|
readonly TagValues: {
|
|
@@ -185,9 +221,19 @@ declare const MultiSelect: {
|
|
|
185
221
|
* The combobox input for filtering items. Place this inside
|
|
186
222
|
* `MultiSelect.Trigger`, after `MultiSelect.TagValues`.
|
|
187
223
|
*
|
|
224
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectinput
|
|
225
|
+
*
|
|
188
226
|
* @example
|
|
189
227
|
* ```tsx
|
|
190
|
-
* <MultiSelect.
|
|
228
|
+
* <MultiSelect.Root>
|
|
229
|
+
* <MultiSelect.Trigger>
|
|
230
|
+
* <MultiSelect.TagValues />
|
|
231
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
232
|
+
* </MultiSelect.Trigger>
|
|
233
|
+
* <MultiSelect.Content>
|
|
234
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
235
|
+
* </MultiSelect.Content>
|
|
236
|
+
* </MultiSelect.Root>
|
|
191
237
|
* ```
|
|
192
238
|
*/
|
|
193
239
|
readonly Input: _$react.ForwardRefExoticComponent<Omit<MultiSelectInputProps, "ref"> & _$react.RefAttributes<HTMLInputElement>>;
|
|
@@ -195,23 +241,41 @@ declare const MultiSelect: {
|
|
|
195
241
|
* The default tag rendered inside `MultiSelect.TagValues` for each selected value.
|
|
196
242
|
* Displays the value label with a remove button and keyboard navigation support.
|
|
197
243
|
*
|
|
244
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselecttag
|
|
245
|
+
*
|
|
198
246
|
* @example
|
|
199
247
|
* ```tsx
|
|
200
|
-
* <MultiSelect.
|
|
201
|
-
*
|
|
202
|
-
*
|
|
203
|
-
* />
|
|
248
|
+
* <MultiSelect.Root>
|
|
249
|
+
* <MultiSelect.Trigger>
|
|
250
|
+
* <MultiSelect.TagValues>
|
|
251
|
+
* {(props) => <MultiSelect.Tag key={props.value} {...props} />}
|
|
252
|
+
* </MultiSelect.TagValues>
|
|
253
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
254
|
+
* </MultiSelect.Trigger>
|
|
255
|
+
* <MultiSelect.Content>
|
|
256
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
257
|
+
* </MultiSelect.Content>
|
|
258
|
+
* </MultiSelect.Root>
|
|
204
259
|
* ```
|
|
205
260
|
*/
|
|
206
261
|
readonly Tag: _$react.ForwardRefExoticComponent<Omit<TagProps, "ref"> & _$react.RefAttributes<HTMLSpanElement>>;
|
|
207
262
|
/**
|
|
208
263
|
* Renders a popover that contains multi-select content.
|
|
209
264
|
*
|
|
265
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectcontent
|
|
266
|
+
*
|
|
210
267
|
* @example
|
|
211
268
|
* ```tsx
|
|
212
|
-
* <MultiSelect.
|
|
213
|
-
* <MultiSelect.
|
|
214
|
-
*
|
|
269
|
+
* <MultiSelect.Root>
|
|
270
|
+
* <MultiSelect.Trigger>
|
|
271
|
+
* <MultiSelect.TagValues />
|
|
272
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
273
|
+
* </MultiSelect.Trigger>
|
|
274
|
+
* <MultiSelect.Content>
|
|
275
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
276
|
+
* <MultiSelect.Item value="banana">Banana</MultiSelect.Item>
|
|
277
|
+
* </MultiSelect.Content>
|
|
278
|
+
* </MultiSelect.Root>
|
|
215
279
|
* ```
|
|
216
280
|
*/
|
|
217
281
|
readonly Content: _$react.ForwardRefExoticComponent<Omit<MultiSelectContentProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
@@ -219,61 +283,136 @@ declare const MultiSelect: {
|
|
|
219
283
|
* Renders a sticky footer pinned to the bottom inside `MultiSelect.Content`,
|
|
220
284
|
* with a separator border at the top.
|
|
221
285
|
*
|
|
286
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectcontentfooter
|
|
287
|
+
*
|
|
222
288
|
* @example
|
|
223
289
|
* ```tsx
|
|
224
|
-
* <MultiSelect.
|
|
225
|
-
* <
|
|
226
|
-
*
|
|
290
|
+
* <MultiSelect.Root>
|
|
291
|
+
* <MultiSelect.Trigger>
|
|
292
|
+
* <MultiSelect.TagValues />
|
|
293
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
294
|
+
* </MultiSelect.Trigger>
|
|
295
|
+
* <MultiSelect.Content>
|
|
296
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
297
|
+
* <MultiSelect.ContentFooter>
|
|
298
|
+
* <p>Upgrade to unlock more options.</p>
|
|
299
|
+
* </MultiSelect.ContentFooter>
|
|
300
|
+
* </MultiSelect.Content>
|
|
301
|
+
* </MultiSelect.Root>
|
|
227
302
|
* ```
|
|
228
303
|
*/
|
|
229
304
|
readonly ContentFooter: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
230
305
|
/**
|
|
231
306
|
* Renders a selectable item with a checkbox indicator inside a `MultiSelect.Content`.
|
|
232
307
|
*
|
|
308
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectitem
|
|
309
|
+
*
|
|
233
310
|
* @example
|
|
234
311
|
* ```tsx
|
|
235
|
-
* <MultiSelect.
|
|
312
|
+
* <MultiSelect.Root>
|
|
313
|
+
* <MultiSelect.Trigger>
|
|
314
|
+
* <MultiSelect.TagValues />
|
|
315
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
316
|
+
* </MultiSelect.Trigger>
|
|
317
|
+
* <MultiSelect.Content>
|
|
318
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
319
|
+
* <MultiSelect.Item value="banana">Banana</MultiSelect.Item>
|
|
320
|
+
* </MultiSelect.Content>
|
|
321
|
+
* </MultiSelect.Root>
|
|
236
322
|
* ```
|
|
237
323
|
*/
|
|
238
324
|
readonly Item: _$react.ForwardRefExoticComponent<Omit<MultiSelectItemProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
239
325
|
/**
|
|
240
326
|
* Renders a group for MultiSelect.Item elements.
|
|
241
327
|
*
|
|
328
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectgroup
|
|
329
|
+
*
|
|
242
330
|
* @example
|
|
243
331
|
* ```tsx
|
|
244
|
-
* <MultiSelect.
|
|
245
|
-
* <MultiSelect.
|
|
246
|
-
*
|
|
247
|
-
*
|
|
332
|
+
* <MultiSelect.Root>
|
|
333
|
+
* <MultiSelect.Trigger>
|
|
334
|
+
* <MultiSelect.TagValues />
|
|
335
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
336
|
+
* </MultiSelect.Trigger>
|
|
337
|
+
* <MultiSelect.Content>
|
|
338
|
+
* <MultiSelect.Group>
|
|
339
|
+
* <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
|
|
340
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
341
|
+
* </MultiSelect.Group>
|
|
342
|
+
* </MultiSelect.Content>
|
|
343
|
+
* </MultiSelect.Root>
|
|
248
344
|
* ```
|
|
249
345
|
*/
|
|
250
346
|
readonly Group: _$react.ForwardRefExoticComponent<Omit<MultiSelectGroupProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
251
347
|
/**
|
|
252
348
|
* Renders a label in a multi-select group.
|
|
253
349
|
*
|
|
350
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectgrouplabel
|
|
351
|
+
*
|
|
254
352
|
* @example
|
|
255
353
|
* ```tsx
|
|
256
|
-
* <MultiSelect.
|
|
354
|
+
* <MultiSelect.Root>
|
|
355
|
+
* <MultiSelect.Trigger>
|
|
356
|
+
* <MultiSelect.TagValues />
|
|
357
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
358
|
+
* </MultiSelect.Trigger>
|
|
359
|
+
* <MultiSelect.Content>
|
|
360
|
+
* <MultiSelect.Group>
|
|
361
|
+
* <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
|
|
362
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
363
|
+
* </MultiSelect.Group>
|
|
364
|
+
* </MultiSelect.Content>
|
|
365
|
+
* </MultiSelect.Root>
|
|
257
366
|
* ```
|
|
258
367
|
*/
|
|
259
368
|
readonly GroupLabel: _$react.ForwardRefExoticComponent<Omit<MultiSelectGroupLabelProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
|
260
369
|
/**
|
|
261
370
|
* Renders a description below a `MultiSelect.GroupLabel` inside a `MultiSelect.Group`.
|
|
262
371
|
*
|
|
372
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectgroupdescription
|
|
373
|
+
*
|
|
263
374
|
* @example
|
|
264
375
|
* ```tsx
|
|
265
|
-
* <MultiSelect.
|
|
266
|
-
*
|
|
267
|
-
*
|
|
376
|
+
* <MultiSelect.Root>
|
|
377
|
+
* <MultiSelect.Trigger>
|
|
378
|
+
* <MultiSelect.TagValues />
|
|
379
|
+
* <MultiSelect.Input placeholder="Select regions..." />
|
|
380
|
+
* </MultiSelect.Trigger>
|
|
381
|
+
* <MultiSelect.Content>
|
|
382
|
+
* <MultiSelect.Group>
|
|
383
|
+
* <MultiSelect.GroupLabel>Regional Aliases</MultiSelect.GroupLabel>
|
|
384
|
+
* <MultiSelect.GroupDescription>
|
|
385
|
+
* Include all points of presence within the region.
|
|
386
|
+
* </MultiSelect.GroupDescription>
|
|
387
|
+
* <MultiSelect.Item value="global">global</MultiSelect.Item>
|
|
388
|
+
* </MultiSelect.Group>
|
|
389
|
+
* </MultiSelect.Content>
|
|
390
|
+
* </MultiSelect.Root>
|
|
268
391
|
* ```
|
|
269
392
|
*/
|
|
270
393
|
readonly GroupDescription: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & _$react.RefAttributes<HTMLParagraphElement>>;
|
|
271
394
|
/**
|
|
272
395
|
* Renders a separator between items or groups.
|
|
273
396
|
*
|
|
397
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectseparator
|
|
398
|
+
*
|
|
274
399
|
* @example
|
|
275
400
|
* ```tsx
|
|
276
|
-
* <MultiSelect.
|
|
401
|
+
* <MultiSelect.Root>
|
|
402
|
+
* <MultiSelect.Trigger>
|
|
403
|
+
* <MultiSelect.TagValues />
|
|
404
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
405
|
+
* </MultiSelect.Trigger>
|
|
406
|
+
* <MultiSelect.Content>
|
|
407
|
+
* <MultiSelect.Group>
|
|
408
|
+
* <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
|
|
409
|
+
* </MultiSelect.Group>
|
|
410
|
+
* <MultiSelect.Separator />
|
|
411
|
+
* <MultiSelect.Group>
|
|
412
|
+
* <MultiSelect.Item value="carrot">Carrot</MultiSelect.Item>
|
|
413
|
+
* </MultiSelect.Group>
|
|
414
|
+
* </MultiSelect.Content>
|
|
415
|
+
* </MultiSelect.Root>
|
|
277
416
|
* ```
|
|
278
417
|
*/
|
|
279
418
|
readonly Separator: _$react.ForwardRefExoticComponent<Omit<Omit<_$react.ClassAttributes<HTMLDivElement> & _$react.HTMLAttributes<HTMLDivElement> & WithAsChild & {
|
|
@@ -283,9 +422,21 @@ declare const MultiSelect: {
|
|
|
283
422
|
/**
|
|
284
423
|
* Renders a message when no items match the current filter.
|
|
285
424
|
*
|
|
425
|
+
* @see https://mantle.ngrok.com/components/multi-select#multiselectempty
|
|
426
|
+
*
|
|
286
427
|
* @example
|
|
287
428
|
* ```tsx
|
|
288
|
-
* <MultiSelect.
|
|
429
|
+
* <MultiSelect.Root>
|
|
430
|
+
* <MultiSelect.Trigger>
|
|
431
|
+
* <MultiSelect.TagValues />
|
|
432
|
+
* <MultiSelect.Input placeholder="Select items..." />
|
|
433
|
+
* </MultiSelect.Trigger>
|
|
434
|
+
* <MultiSelect.Content>
|
|
435
|
+
* {matches.length === 0 && (
|
|
436
|
+
* <MultiSelect.Empty>No results found</MultiSelect.Empty>
|
|
437
|
+
* )}
|
|
438
|
+
* </MultiSelect.Content>
|
|
439
|
+
* </MultiSelect.Root>
|
|
289
440
|
* ```
|
|
290
441
|
*/
|
|
291
442
|
readonly Empty: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
|
package/dist/multi-select.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./cx-D1HYnpvA.js";import{t}from"./icon-bWc5yC3-.js";import{t as n}from"./slot-D_ZUrdEW.js";import{t as r}from"./compose-refs-DFIaEnQH.js";import{n as i}from"./separator-DyOGgFCs.js";import{t as a}from"./use-prefers-reduced-motion-BcwST13S.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,onKeyDown:a,onMouseDown:o,validation:s,...c},u)=>{let d=l(S),{inputRef:f}=l(w),p=v.useComboboxContext(),h=t!=null&&t!==`false`?`error`:typeof s==`function`?s():s;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 min-h-9 w-full flex-wrap items-center gap-1 rounded-md border px-3 py-1 has-[[data-slot=multi-select-tag]]:px-1`,`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`,`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":h||void 0,onKeyDown:e=>{e.key===`Escape`&&p?.getState().open&&(e.preventDefault(),p.hide()),a?.(e)},onMouseDown:e=>{e.target instanceof HTMLElement&&!e.target.closest(`button, input, [role='option']`)&&(e.preventDefault(),f.current?.focus()),o?.(e)},ref:r(d,u),...c,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-500/10 border border-neutral-500/20 rounded-xs text-strong inline-flex items-center gap-1 pl-2 pr-0.5 py-0.5 text-sm font-normal`,`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 text-strong/40 hover:bg-neutral-500/15 hover:text-strong rounded-xs p-0.5`,`aria-disabled:cursor-default aria-disabled:hover:bg-transparent aria-disabled:hover:text-strong/40`),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-4`})})]})});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(`relative mx-1 cursor-pointer rounded-md pl-2 pr-8 py-1.5 text-strong text-sm font-normal flex min-w-0 items-center 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,{className:`absolute right-2 flex h-3.5 w-3.5 items-center justify-center`,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};
|
|
1
|
+
import{t as e}from"./cx-D1HYnpvA.js";import{t}from"./icon-bWc5yC3-.js";import{t as n}from"./slot-D_ZUrdEW.js";import{t as r}from"./compose-refs-DZ3cPi47.js";import{n as i}from"./separator-DSOIrnhj.js";import{t as a}from"./use-prefers-reduced-motion-aXfsyo-k.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,onKeyDown:a,onMouseDown:o,validation:s,...c},u)=>{let d=l(S),{inputRef:f}=l(w),p=v.useComboboxContext(),h=t!=null&&t!==`false`?`error`:typeof s==`function`?s():s;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 min-h-9 w-full flex-wrap items-center gap-1 rounded-md border px-3 py-1 has-[[data-slot=multi-select-tag]]:px-1`,`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`,`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":h||void 0,onKeyDown:e=>{e.key===`Escape`&&p?.getState().open&&(e.preventDefault(),p.hide()),a?.(e)},onMouseDown:e=>{e.target instanceof HTMLElement&&!e.target.closest(`button, input, [role='option']`)&&(e.preventDefault(),f.current?.focus()),o?.(e)},ref:r(d,u),...c,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-500/10 border border-neutral-500/20 rounded-xs text-strong inline-flex items-center gap-1 pl-2 pr-0.5 py-0.5 text-sm font-normal`,`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 text-strong/40 hover:bg-neutral-500/15 hover:text-strong rounded-xs p-0.5`,`aria-disabled:cursor-default aria-disabled:hover:bg-transparent aria-disabled:hover:text-strong/40`),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-4`})})]})});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(`relative mx-1 cursor-pointer rounded-md pl-2 pr-8 py-1.5 text-strong text-sm font-normal flex min-w-0 items-center 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,{className:`absolute right-2 flex h-3.5 w-3.5 items-center justify-center`,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
|