@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.
Files changed (161) hide show
  1. package/dist/accordion.d.ts +1 -1
  2. package/dist/alert-dialog.d.ts +341 -94
  3. package/dist/alert-dialog.js.map +1 -1
  4. package/dist/alert.d.ts +3 -3
  5. package/dist/alert.js.map +1 -1
  6. package/dist/anchor-2stEauOz.js.map +1 -1
  7. package/dist/anchor.d.ts +46 -5
  8. package/dist/{as-child-CJ2vTesV.d.ts → as-child-DQHfEmYB.d.ts} +1 -1
  9. package/dist/badge.d.ts +34 -5
  10. package/dist/badge.js.map +1 -1
  11. package/dist/{button-DDK6nEac.d.ts → button-Bq0x5Pv4.d.ts} +6 -6
  12. package/dist/button.d.ts +3 -3
  13. package/dist/card.d.ts +1 -1
  14. package/dist/checkbox.d.ts +1 -1
  15. package/dist/checkbox.js +1 -1
  16. package/dist/code-block.d.ts +3 -3
  17. package/dist/code-block.js +1 -1
  18. package/dist/code-block.js.map +1 -1
  19. package/dist/code-block_highlight-utils.d.ts +1 -1
  20. package/dist/code-block_highlight-utils.js +1 -1
  21. package/dist/code.d.ts +23 -2
  22. package/dist/code.js.map +1 -1
  23. package/dist/color.d.ts +1 -1
  24. package/dist/combobox.d.ts +12 -2
  25. package/dist/combobox.js +1 -1
  26. package/dist/combobox.js.map +1 -1
  27. package/dist/command.d.ts +3 -3
  28. package/dist/command.js +1 -1
  29. package/dist/command.js.map +1 -1
  30. package/dist/compose-refs-DZ3cPi47.js +2 -0
  31. package/dist/compose-refs-DZ3cPi47.js.map +1 -0
  32. package/dist/copy-to-clipboard-DjOD_Mwb.js +2 -0
  33. package/dist/copy-to-clipboard-DjOD_Mwb.js.map +1 -0
  34. package/dist/data-table.d.ts +530 -75
  35. package/dist/data-table.js +1 -1
  36. package/dist/data-table.js.map +1 -1
  37. package/dist/{deep-non-nullable-DwBZzk4x.d.ts → deep-non-nullable-VFm1T3JZ.d.ts} +1 -1
  38. package/dist/description-list.d.ts +1 -1
  39. package/dist/{dialog-MiS_Q-ge.js → dialog-BHzl9eye.js} +1 -1
  40. package/dist/dialog-BHzl9eye.js.map +1 -0
  41. package/dist/dialog.d.ts +8 -3
  42. package/dist/dialog.js +1 -1
  43. package/dist/{direction-ClCocWIf.js → direction-DsB-pD9V.js} +1 -1
  44. package/dist/{direction-ClCocWIf.js.map → direction-DsB-pD9V.js.map} +1 -1
  45. package/dist/{direction-Jk7BkzGo.d.ts → direction-DtBAQn7p.d.ts} +1 -1
  46. package/dist/{dropdown-menu-C9f9Y8Ov.d.ts → dropdown-menu-CzUNYIfA.d.ts} +2 -2
  47. package/dist/{dropdown-menu-Ff97BIJe.js → dropdown-menu-Ducs2SEn.js} +2 -2
  48. package/dist/{dropdown-menu-Ff97BIJe.js.map → dropdown-menu-Ducs2SEn.js.map} +1 -1
  49. package/dist/dropdown-menu.d.ts +1 -1
  50. package/dist/dropdown-menu.js +1 -1
  51. package/dist/empty.d.ts +2 -2
  52. package/dist/flag.d.ts +33 -4
  53. package/dist/flag.js.map +1 -1
  54. package/dist/hooks.d.ts +301 -77
  55. package/dist/hooks.js +1 -1
  56. package/dist/hooks.js.map +1 -1
  57. package/dist/hover-card.d.ts +15 -10
  58. package/dist/hover-card.js.map +1 -1
  59. package/dist/{icon-C0YAAaLZ.d.ts → icon-DKMJm20j.d.ts} +2 -2
  60. package/dist/{icon-button-Cl30yTfu.d.ts → icon-button-BnK4K7YK.d.ts} +3 -3
  61. package/dist/icon.d.ts +3 -3
  62. package/dist/icons.d.ts +3 -3
  63. package/dist/icons.js +1 -1
  64. package/dist/icons.js.map +1 -1
  65. package/dist/{in-view-DsiWfQpY.d.ts → in-view-Da08Bx6l.d.ts} +15 -4
  66. package/dist/{in-view-BXzPPdcl.js → in-view-pia_SVdE.js} +1 -1
  67. package/dist/{in-view-BXzPPdcl.js.map → in-view-pia_SVdE.js.map} +1 -1
  68. package/dist/{index-ddHz7L9f.d.ts → index-C91lxoX9.d.ts} +56 -13
  69. package/dist/{index-DU3SQJ46.d.ts → index-DOJUH34Z.d.ts} +4 -4
  70. package/dist/{index-B6SPk_xb.d.ts → index-DkMUaYsw.d.ts} +1 -1
  71. package/dist/{index-vOSpS5jv.d.ts → index-rtz7SwEq.d.ts} +1 -1
  72. package/dist/input.d.ts +2 -2
  73. package/dist/input.js +1 -1
  74. package/dist/input.js.map +1 -1
  75. package/dist/{is-input-Bh1rQhX3.js → is-input-CUEWaxtA.js} +1 -1
  76. package/dist/{is-input-Bh1rQhX3.js.map → is-input-CUEWaxtA.js.map} +1 -1
  77. package/dist/{kbd-B0wWeV_0.js → kbd-CAVUiqBT.js} +1 -1
  78. package/dist/kbd-CAVUiqBT.js.map +1 -0
  79. package/dist/kbd.d.ts +37 -8
  80. package/dist/kbd.js +1 -1
  81. package/dist/label.d.ts +40 -9
  82. package/dist/label.js.map +1 -1
  83. package/dist/media-object.d.ts +27 -11
  84. package/dist/media-object.js.map +1 -1
  85. package/dist/multi-select.d.ts +187 -36
  86. package/dist/multi-select.js +1 -1
  87. package/dist/multi-select.js.map +1 -1
  88. package/dist/otp-input.d.ts +167 -0
  89. package/dist/otp-input.js +2 -0
  90. package/dist/otp-input.js.map +1 -0
  91. package/dist/pagination.d.ts +3 -3
  92. package/dist/pagination.js +1 -1
  93. package/dist/pagination.js.map +1 -1
  94. package/dist/popover.d.ts +7 -5
  95. package/dist/popover.js.map +1 -1
  96. package/dist/primitive-tXm_8n_t.js.map +1 -1
  97. package/dist/{primitive-DXo0gUqw.d.ts → primitive-tyw4V7Vf.d.ts} +1 -1
  98. package/dist/progress.js.map +1 -1
  99. package/dist/radio-group.d.ts +1 -1
  100. package/dist/radio-group.js +1 -1
  101. package/dist/{resolve-pre-rendered-props-BXv6e6fc.js → resolve-pre-rendered-props-C-kiaLHj.js} +1 -1
  102. package/dist/{resolve-pre-rendered-props-BXv6e6fc.js.map → resolve-pre-rendered-props-C-kiaLHj.js.map} +1 -1
  103. package/dist/{resolve-pre-rendered-props-kcQrtWPt.d.ts → resolve-pre-rendered-props-CNUnH1fU.d.ts} +1 -1
  104. package/dist/sandboxed-on-click.d.ts +1 -1
  105. package/dist/{select-LJmfG--I.js → select-DOgdZO0Q.js} +2 -2
  106. package/dist/select-DOgdZO0Q.js.map +1 -0
  107. package/dist/{select-DNJli9JO.d.ts → select-DZutJxyr.d.ts} +11 -3
  108. package/dist/select.d.ts +1 -1
  109. package/dist/select.js +1 -1
  110. package/dist/{separator-DyOGgFCs.js → separator-DSOIrnhj.js} +1 -1
  111. package/dist/{separator-DyOGgFCs.js.map → separator-DSOIrnhj.js.map} +1 -1
  112. package/dist/separator.d.ts +1 -1
  113. package/dist/separator.js +1 -1
  114. package/dist/sheet.d.ts +7 -3
  115. package/dist/sheet.js.map +1 -1
  116. package/dist/skeleton.d.ts +32 -5
  117. package/dist/skeleton.js.map +1 -1
  118. package/dist/{sort-C_Jbs1dH.js → sort-DzCsa6Qj.js} +2 -2
  119. package/dist/{sort-C_Jbs1dH.js.map → sort-DzCsa6Qj.js.map} +1 -1
  120. package/dist/split-button.d.ts +3 -3
  121. package/dist/split-button.js +1 -1
  122. package/dist/{svg-only-BnnbLx6R.d.ts → svg-only-BtBvFy-N.d.ts} +2 -2
  123. package/dist/{table-4q1UxE7L.d.ts → table-BsNJBKiq.d.ts} +7 -3
  124. package/dist/{table-12T25gGa.js → table-Cl4nlRMR.js} +2 -2
  125. package/dist/{table-12T25gGa.js.map → table-Cl4nlRMR.js.map} +1 -1
  126. package/dist/table.d.ts +1 -1
  127. package/dist/table.js +1 -1
  128. package/dist/tabs.js +1 -1
  129. package/dist/text-area.d.ts +1 -1
  130. package/dist/text-area.js +1 -1
  131. package/dist/theme-provider-BFcnjeME.js.map +1 -1
  132. package/dist/theme.d.ts +2 -2
  133. package/dist/theme.js.map +1 -1
  134. package/dist/{themes-DXb8Tk74.d.ts → themes-DIEYkvNl.d.ts} +1 -1
  135. package/dist/toast.d.ts +3 -3
  136. package/dist/tooltip.d.ts +31 -14
  137. package/dist/tooltip.js.map +1 -1
  138. package/dist/{traffic-policy-file-ChsoQtXQ.js → traffic-policy-file-C6LHYrIU.js} +1 -1
  139. package/dist/{traffic-policy-file-ChsoQtXQ.js.map → traffic-policy-file-C6LHYrIU.js.map} +1 -1
  140. package/dist/{types-BeTbgoJd.d.ts → types-DG0WQLTL.d.ts} +1 -1
  141. package/dist/{types-DEYyl5LX.d.ts → types-DoV0R5Ja.d.ts} +1 -1
  142. package/dist/types.d.ts +5 -5
  143. package/dist/use-copy-to-clipboard-C7vsjJe-.js +2 -0
  144. package/dist/use-copy-to-clipboard-C7vsjJe-.js.map +1 -0
  145. package/dist/use-matches-media-query-CojcYxlA.js.map +1 -1
  146. package/dist/{use-prefers-reduced-motion-BcwST13S.js → use-prefers-reduced-motion-aXfsyo-k.js} +1 -1
  147. package/dist/use-prefers-reduced-motion-aXfsyo-k.js.map +1 -0
  148. package/dist/utils.d.ts +3 -3
  149. package/dist/utils.js +1 -1
  150. package/dist/utils.js.map +1 -1
  151. package/dist/{variant-props-DszdagRm.d.ts → variant-props-DUmSIQK8.d.ts} +2 -2
  152. package/dist/{with-style-props-Dlz3G1tS.d.ts → with-style-props-3iFrBR08.d.ts} +1 -1
  153. package/package.json +12 -7
  154. package/dist/compose-refs-DFIaEnQH.js +0 -2
  155. package/dist/compose-refs-DFIaEnQH.js.map +0 -1
  156. package/dist/dialog-MiS_Q-ge.js.map +0 -1
  157. package/dist/kbd-B0wWeV_0.js.map +0 -1
  158. package/dist/select-LJmfG--I.js.map +0 -1
  159. package/dist/use-copy-to-clipboard-Ds9MsSNU.js +0 -2
  160. package/dist/use-copy-to-clipboard-Ds9MsSNU.js.map +0 -1
  161. package/dist/use-prefers-reduced-motion-BcwST13S.js.map +0 -1
@@ -1,5 +1,5 @@
1
- import { t as WithAsChild } from "./as-child-CJ2vTesV.js";
2
- import { o as WithValidation } from "./types-BeTbgoJd.js";
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.Trigger>
151
- * <MultiSelect.TagValues />
152
- * <MultiSelect.Input placeholder="Select items..." />
153
- * </MultiSelect.Trigger>
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
- * // Default tags with locking
167
- * <MultiSelect.TagValues lockedValues={["global"]} />
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
- * // Custom tags via children render function — locked is forwarded via props
170
- * <MultiSelect.TagValues lockedValues={["global"]}>
171
- * {(props) => (
172
- * <MultiSelect.Tag key={props.value} {...props} />
173
- * )}
174
- * </MultiSelect.TagValues>
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.Input placeholder="Select items..." />
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.Tag
201
- * value="apple"
202
- * onRemove={() => removeValue("apple")}
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.Content>
213
- * <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
214
- * </MultiSelect.Content>
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.ContentFooter>
225
- * <p>Upgrade to unlock more options.</p>
226
- * </MultiSelect.ContentFooter>
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.Item value="apple">Apple</MultiSelect.Item>
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.Group>
245
- * <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
246
- * <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
247
- * </MultiSelect.Group>
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.GroupLabel>Fruits</MultiSelect.GroupLabel>
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.GroupDescription>
266
- * Include all points of presence within the region.
267
- * </MultiSelect.GroupDescription>
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.Separator />
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.Empty>No results found</MultiSelect.Empty>
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>>;
@@ -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