@ngrok/mantle 0.66.17 → 0.68.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 (165) hide show
  1. package/README.md +32 -0
  2. package/dist/accordion.d.ts +9 -9
  3. package/dist/alert-dialog.d.ts +30 -30
  4. package/dist/alert-dialog.js +1 -1
  5. package/dist/alert.d.ts +12 -12
  6. package/dist/alert.js +1 -1
  7. package/dist/alert.js.map +1 -1
  8. package/dist/anchor.d.ts +3 -3
  9. package/dist/{as-child-XMVTepJu.d.ts → as-child-CRRsxi3Y.d.ts} +1 -1
  10. package/dist/badge.d.ts +4 -4
  11. package/dist/badge.js +1 -1
  12. package/dist/badge.js.map +1 -1
  13. package/dist/booleanish-CBGdPL3Q.js.map +1 -1
  14. package/dist/button-BKykcpgJ.js +2 -0
  15. package/dist/button-BKykcpgJ.js.map +1 -0
  16. package/dist/{button-ByK1wG1b.d.ts → button-BaNwe1ud.d.ts} +12 -12
  17. package/dist/button.d.ts +3 -3
  18. package/dist/button.js +1 -1
  19. package/dist/calendar.d.ts +2 -2
  20. package/dist/calendar.js +1 -1
  21. package/dist/card.d.ts +7 -7
  22. package/dist/checkbox.d.ts +4 -4
  23. package/dist/checkbox.js +1 -1
  24. package/dist/checkbox.js.map +1 -1
  25. package/dist/code-block.d.ts +187 -260
  26. package/dist/code-block.js +2 -8
  27. package/dist/code-block.js.map +1 -1
  28. package/dist/code-block_highlight-utils.d.ts +2 -0
  29. package/dist/code-block_highlight-utils.js +1 -0
  30. package/dist/code.d.ts +2 -2
  31. package/dist/code.js +1 -1
  32. package/dist/code.js.map +1 -1
  33. package/dist/color.d.ts +1 -1
  34. package/dist/color.js +1 -1
  35. package/dist/color.js.map +1 -1
  36. package/dist/combobox.d.ts +13 -13
  37. package/dist/combobox.js +1 -1
  38. package/dist/combobox.js.map +1 -1
  39. package/dist/command.d.ts +33 -33
  40. package/dist/command.js +1 -1
  41. package/dist/command.js.map +1 -1
  42. package/dist/data-table.d.ts +14 -14
  43. package/dist/data-table.js +1 -1
  44. package/dist/data-table.js.map +1 -1
  45. package/dist/{deep-non-nullable-BLM3Gz0I.d.ts → deep-non-nullable-BBByg3-i.d.ts} +1 -1
  46. package/dist/description-list.d.ts +6 -6
  47. package/dist/description-list.js +1 -1
  48. package/dist/description-list.js.map +1 -1
  49. package/dist/{dialog-DUOIIhuN.js → dialog-DxkpMIzB.js} +2 -2
  50. package/dist/{dialog-DUOIIhuN.js.map → dialog-DxkpMIzB.js.map} +1 -1
  51. package/dist/dialog.d.ts +17 -17
  52. package/dist/dialog.js +1 -1
  53. package/dist/{direction-DfrtFTny.js → direction-Ca88oQhP.js} +1 -1
  54. package/dist/{direction-DfrtFTny.js.map → direction-Ca88oQhP.js.map} +1 -1
  55. package/dist/{direction-DYYpi-JC.d.ts → direction-MVSxfKWx.d.ts} +2 -2
  56. package/dist/{dropdown-menu-CUwyTKyu.js → dropdown-menu-9nO7ch0t.js} +2 -2
  57. package/dist/{dropdown-menu-CUwyTKyu.js.map → dropdown-menu-9nO7ch0t.js.map} +1 -1
  58. package/dist/{dropdown-menu-BEjpuGrT.d.ts → dropdown-menu-D6MiVSR-.d.ts} +24 -24
  59. package/dist/dropdown-menu.d.ts +1 -1
  60. package/dist/dropdown-menu.js +1 -1
  61. package/dist/flag.d.ts +2 -2
  62. package/dist/hooks.d.ts +8 -4
  63. package/dist/hooks.js +1 -1
  64. package/dist/hover-card.d.ts +6 -6
  65. package/dist/{icon-B1XLv02t.d.ts → icon-Dh1ONyO_.d.ts} +4 -4
  66. package/dist/icon-button-CxxVPiKp.js +2 -0
  67. package/dist/icon-button-CxxVPiKp.js.map +1 -0
  68. package/dist/{icon-button-2r6S3HVA.d.ts → icon-button-gO-7F_MZ.d.ts} +8 -8
  69. package/dist/icon.d.ts +3 -3
  70. package/dist/icons.d.ts +10 -10
  71. package/dist/icons.js +1 -1
  72. package/dist/{in-view-ca-moloX.d.ts → in-view-DS0PgFGa.d.ts} +1 -1
  73. package/dist/{in-view-bPnaWEL4.js → in-view-DiFJ28EF.js} +1 -1
  74. package/dist/{in-view-bPnaWEL4.js.map → in-view-DiFJ28EF.js.map} +1 -1
  75. package/dist/{index-s8rMcilU.d.ts → index-BerTFFEC.d.ts} +1 -1
  76. package/dist/{index-DWqhfw9n.d.ts → index-Bw97R9Kw.d.ts} +9 -9
  77. package/dist/{index-BLCvtjLi.d.ts → index-C3IiAC5H.d.ts} +3 -3
  78. package/dist/{index-ViSCOUrU.d.ts → index-Cj2NX2Dg.d.ts} +6 -6
  79. package/dist/input.d.ts +2 -2
  80. package/dist/input.js +1 -1
  81. package/dist/{is-input-BFR8yMM7.js → is-input-CC_n6EGM.js} +1 -1
  82. package/dist/{is-input-BFR8yMM7.js.map → is-input-CC_n6EGM.js.map} +1 -1
  83. package/dist/{kbd-CtTyMWXB.js → kbd-wgm9K9D5.js} +1 -1
  84. package/dist/{kbd-CtTyMWXB.js.map → kbd-wgm9K9D5.js.map} +1 -1
  85. package/dist/kbd.d.ts +2 -2
  86. package/dist/kbd.js +1 -1
  87. package/dist/label.d.ts +3 -3
  88. package/dist/mantle-dark-high-contrast.css +18 -9
  89. package/dist/mantle-dark.css +37 -43
  90. package/dist/mantle-light-high-contrast.css +15 -9
  91. package/dist/mantle.css +154 -143
  92. package/dist/media-object.d.ts +5 -5
  93. package/dist/multi-select.d.ts +18 -18
  94. package/dist/multi-select.js +1 -1
  95. package/dist/multi-select.js.map +1 -1
  96. package/dist/pagination.d.ts +9 -9
  97. package/dist/pagination.js +1 -1
  98. package/dist/popover.d.ts +7 -7
  99. package/dist/{primitive-tuHqhoRE.d.ts → primitive-BqLYh79k.d.ts} +3 -3
  100. package/dist/progress.d.ts +5 -5
  101. package/dist/radio-group.d.ts +20 -20
  102. package/dist/radio-group.js +1 -1
  103. package/dist/radio-group.js.map +1 -1
  104. package/dist/resolve-pre-rendered-props-51i50IL2.d.ts +165 -0
  105. package/dist/resolve-pre-rendered-props-Bu2cvS9A.js +11 -0
  106. package/dist/resolve-pre-rendered-props-Bu2cvS9A.js.map +1 -0
  107. package/dist/sandboxed-on-click.d.ts +4 -4
  108. package/dist/{select-BkvbNKQ7.d.ts → select-DJmjfGjt.d.ts} +16 -16
  109. package/dist/{select-BXBu1jP_.js → select-Z13w6WBS.js} +2 -2
  110. package/dist/{select-BXBu1jP_.js.map → select-Z13w6WBS.js.map} +1 -1
  111. package/dist/select.d.ts +1 -1
  112. package/dist/select.js +1 -1
  113. package/dist/{separator-fSV4z0Pq.js → separator-BuP5aENE.js} +1 -1
  114. package/dist/{separator-fSV4z0Pq.js.map → separator-BuP5aENE.js.map} +1 -1
  115. package/dist/separator.d.ts +5 -5
  116. package/dist/separator.js +1 -1
  117. package/dist/sheet.d.ts +19 -19
  118. package/dist/sheet.js +1 -1
  119. package/dist/skeleton.d.ts +5 -5
  120. package/dist/slider.d.ts +2 -2
  121. package/dist/slider.js +1 -1
  122. package/dist/slider.js.map +1 -1
  123. package/dist/slot.d.ts +3 -3
  124. package/dist/{sort-CfPsu1Gs.js → sort-mo52clyh.js} +2 -2
  125. package/dist/{sort-CfPsu1Gs.js.map → sort-mo52clyh.js.map} +1 -1
  126. package/dist/split-button.d.ts +20 -20
  127. package/dist/split-button.js +1 -1
  128. package/dist/split-button.js.map +1 -1
  129. package/dist/{svg-only-Ct2mB46K.d.ts → svg-only-Db3eUPWM.d.ts} +4 -4
  130. package/dist/switch.d.ts +4 -4
  131. package/dist/switch.js +1 -1
  132. package/dist/switch.js.map +1 -1
  133. package/dist/{table-Bs1D5Aj7.d.ts → table-C7BejaFW.d.ts} +11 -11
  134. package/dist/table-CnYWz6IT.js +2 -0
  135. package/dist/table-CnYWz6IT.js.map +1 -0
  136. package/dist/table.d.ts +1 -1
  137. package/dist/table.js +1 -1
  138. package/dist/tabs.d.ts +9 -9
  139. package/dist/tabs.js +1 -1
  140. package/dist/tabs.js.map +1 -1
  141. package/dist/text-area.d.ts +3 -3
  142. package/dist/theme.d.ts +7 -7
  143. package/dist/{themes-Dk0VkyqX.d.ts → themes-D_v8H0nY.d.ts} +1 -1
  144. package/dist/toast.d.ts +10 -10
  145. package/dist/tooltip.d.ts +6 -6
  146. package/dist/{types-DgXUgkpc.d.ts → types-Cq6RWU7Q.d.ts} +1 -1
  147. package/dist/{types-Dh4BVhXC.d.ts → types-yU-Byhue.d.ts} +1 -1
  148. package/dist/types.d.ts +5 -5
  149. package/dist/use-copy-to-clipboard-B6wH6hDd.js +2 -0
  150. package/dist/use-copy-to-clipboard-B6wH6hDd.js.map +1 -0
  151. package/dist/{use-prefers-reduced-motion-BiG6QGkf.js → use-prefers-reduced-motion-BcwST13S.js} +1 -1
  152. package/dist/{use-prefers-reduced-motion-BiG6QGkf.js.map → use-prefers-reduced-motion-BcwST13S.js.map} +1 -1
  153. package/dist/utils.d.ts +2 -2
  154. package/dist/utils.js +1 -1
  155. package/dist/{variant-props-UE-phTwh.d.ts → variant-props-Bm6Y-jfm.d.ts} +2 -2
  156. package/dist/{with-style-props-D1QFTzj6.d.ts → with-style-props-9-k1s4ov.d.ts} +1 -1
  157. package/package.json +19 -16
  158. package/dist/button-CdPMhyKg.js +0 -2
  159. package/dist/button-CdPMhyKg.js.map +0 -1
  160. package/dist/icon-button-CeeHZOhh.js +0 -2
  161. package/dist/icon-button-CeeHZOhh.js.map +0 -1
  162. package/dist/table-bSFWy29w.js +0 -2
  163. package/dist/table-bSFWy29w.js.map +0 -1
  164. package/dist/use-copy-to-clipboard-BCpEp-sO.js +0 -2
  165. package/dist/use-copy-to-clipboard-BCpEp-sO.js.map +0 -1
package/dist/mantle.css CHANGED
@@ -68,17 +68,17 @@ MARK: THEME
68
68
  --color-ff00ff: color(display-p3 0.94164 0 0.99869);
69
69
 
70
70
  /* Semantic color aliases - reference base colors defined in theme-specific :root blocks */
71
- --color-accent-50: var(--color-blue-50);
72
- --color-accent-100: var(--color-blue-100);
73
- --color-accent-200: var(--color-blue-200);
74
- --color-accent-300: var(--color-blue-300);
75
- --color-accent-400: var(--color-blue-400);
76
- --color-accent-500: var(--color-blue-500);
77
- --color-accent-600: var(--color-blue-600);
78
- --color-accent-700: var(--color-blue-700);
79
- --color-accent-800: var(--color-blue-800);
80
- --color-accent-900: var(--color-blue-900);
81
- --color-accent-950: var(--color-blue-950);
71
+ --color-accent-50: var(--color-sky-50);
72
+ --color-accent-100: var(--color-sky-100);
73
+ --color-accent-200: var(--color-sky-200);
74
+ --color-accent-300: var(--color-sky-300);
75
+ --color-accent-400: var(--color-sky-400);
76
+ --color-accent-500: var(--color-sky-500);
77
+ --color-accent-600: var(--color-sky-600);
78
+ --color-accent-700: var(--color-sky-700);
79
+ --color-accent-800: var(--color-sky-800);
80
+ --color-accent-900: var(--color-sky-900);
81
+ --color-accent-950: var(--color-sky-950);
82
82
 
83
83
  /* info === accent */
84
84
  --color-info-50: var(--color-accent-50);
@@ -93,17 +93,17 @@ MARK: THEME
93
93
  --color-info-900: var(--color-accent-900);
94
94
  --color-info-950: var(--color-accent-950);
95
95
 
96
- --color-danger-50: var(--color-red-50);
97
- --color-danger-100: var(--color-red-100);
98
- --color-danger-200: var(--color-red-200);
99
- --color-danger-300: var(--color-red-300);
100
- --color-danger-400: var(--color-red-400);
101
- --color-danger-500: var(--color-red-500);
102
- --color-danger-600: var(--color-red-600);
103
- --color-danger-700: var(--color-red-700);
104
- --color-danger-800: var(--color-red-800);
105
- --color-danger-900: var(--color-red-900);
106
- --color-danger-950: var(--color-red-950);
96
+ --color-danger-50: var(--color-rose-50);
97
+ --color-danger-100: var(--color-rose-100);
98
+ --color-danger-200: var(--color-rose-200);
99
+ --color-danger-300: var(--color-rose-300);
100
+ --color-danger-400: var(--color-rose-400);
101
+ --color-danger-500: var(--color-rose-500);
102
+ --color-danger-600: var(--color-rose-600);
103
+ --color-danger-700: var(--color-rose-700);
104
+ --color-danger-800: var(--color-rose-800);
105
+ --color-danger-900: var(--color-rose-900);
106
+ --color-danger-950: var(--color-rose-950);
107
107
 
108
108
  --color-warning-50: var(--color-amber-50);
109
109
  --color-warning-100: var(--color-amber-100);
@@ -117,17 +117,29 @@ MARK: THEME
117
117
  --color-warning-900: var(--color-amber-900);
118
118
  --color-warning-950: var(--color-amber-950);
119
119
 
120
- --color-success-50: var(--color-green-50);
121
- --color-success-100: var(--color-green-100);
122
- --color-success-200: var(--color-green-200);
123
- --color-success-300: var(--color-green-300);
124
- --color-success-400: var(--color-green-400);
125
- --color-success-500: var(--color-green-500);
126
- --color-success-600: var(--color-green-600);
127
- --color-success-700: var(--color-green-700);
128
- --color-success-800: var(--color-green-800);
129
- --color-success-900: var(--color-green-900);
130
- --color-success-950: var(--color-green-950);
120
+ --color-success-50: var(--color-emerald-50);
121
+ --color-success-100: var(--color-emerald-100);
122
+ --color-success-200: var(--color-emerald-200);
123
+ --color-success-300: var(--color-emerald-300);
124
+ --color-success-400: var(--color-emerald-400);
125
+ --color-success-500: var(--color-emerald-500);
126
+ --color-success-600: var(--color-emerald-600);
127
+ --color-success-700: var(--color-emerald-700);
128
+ --color-success-800: var(--color-emerald-800);
129
+ --color-success-900: var(--color-emerald-900);
130
+ --color-success-950: var(--color-emerald-950);
131
+
132
+ --color-important-50: var(--color-purple-50);
133
+ --color-important-100: var(--color-purple-100);
134
+ --color-important-200: var(--color-purple-200);
135
+ --color-important-300: var(--color-purple-300);
136
+ --color-important-400: var(--color-purple-400);
137
+ --color-important-500: var(--color-purple-500);
138
+ --color-important-600: var(--color-purple-600);
139
+ --color-important-700: var(--color-purple-700);
140
+ --color-important-800: var(--color-purple-800);
141
+ --color-important-900: var(--color-purple-900);
142
+ --color-important-950: var(--color-purple-950);
131
143
 
132
144
  /* Shadow tokens - reference theme-specific shadow color and opacity values */
133
145
  --shadow-sm: 0px 1px 2px 0 --alpha(var(--shadow-color) / var(--shadow-first-opacity));
@@ -240,12 +252,6 @@ MARK: THEME
240
252
  --background-color-filled-warning-hover: var(--background-color-filled-warning-hover);
241
253
  --background-color-filled-success-hover: var(--background-color-filled-success-hover);
242
254
 
243
- --background-color-filled-neutral-active: var(--background-color-filled-neutral-active);
244
- --background-color-filled-accent-active: var(--background-color-filled-accent-active);
245
- --background-color-filled-danger-active: var(--background-color-filled-danger-active);
246
- --background-color-filled-warning-active: var(--background-color-filled-warning-active);
247
- --background-color-filled-success-active: var(--background-color-filled-success-active);
248
-
249
255
  --ring-color-focus-neutral: var(--ring-color-focus-neutral);
250
256
  --ring-color-focus-accent: var(--ring-color-focus-accent);
251
257
  --ring-color-focus-danger: var(--ring-color-focus-danger);
@@ -264,6 +270,7 @@ MARK: LIGHT DEFS
264
270
 
265
271
  /* neutral-50 through neutral-900 match Tailwind v4 defaults exactly — only -950 is custom */
266
272
  --color-neutral-950: oklch(18.2% 0 0); /* TW4 default is 14.5% — intentionally lighter */
273
+ --color-sky-600: oklch(55% 0.158 241.966);
267
274
 
268
275
  /* gray is identical to neutral in light mode */
269
276
  --color-gray-50: var(--color-neutral-50);
@@ -297,10 +304,22 @@ MARK: LIGHT DEFS
297
304
  --background-color-popover: var(--color-white);
298
305
  --background-color-dialog: var(--color-white);
299
306
  --background-color-base-hover: var(--color-neutral-100);
300
- --background-color-card-hover: var(--color-neutral-100);
301
- --background-color-popover-hover: var(--color-neutral-100);
302
- --background-color-dialog-hover: var(--color-neutral-100);
303
- --background-color-form: var(--color-white);
307
+ --background-color-card-hover: color-mix(
308
+ in oklab,
309
+ var(--color-white) 50%,
310
+ var(--color-neutral-100)
311
+ );
312
+ --background-color-popover-hover: color-mix(
313
+ in oklab,
314
+ var(--color-white) 50%,
315
+ var(--color-neutral-100)
316
+ );
317
+ --background-color-dialog-hover: color-mix(
318
+ in oklab,
319
+ var(--color-white) 50%,
320
+ var(--color-neutral-100)
321
+ );
322
+ --background-color-form: var(--background-color-card);
304
323
  --background-color-form-hover: --alpha(var(--color-neutral-500) / 0.05);
305
324
  --background-color-form-active: --alpha(var(--color-neutral-500) / 0.1);
306
325
  --background-color-overlay: --alpha(#000 / 0.12);
@@ -321,9 +340,9 @@ MARK: LIGHT DEFS
321
340
  --color-card-border: var(--color-neutral-300);
322
341
  --color-card-border-muted: var(--color-neutral-200);
323
342
 
324
- --color-active-menu-item: var(--color-neutral-100);
325
- --color-selected-menu-item: var(--color-accent-50);
326
- --color-active-selected-menu-item: var(--color-accent-100);
343
+ --color-active-menu-item: --alpha(var(--color-neutral-500) / 0.05);
344
+ --color-selected-menu-item: --alpha(var(--color-accent-500) / 0.1);
345
+ --color-active-selected-menu-item: --alpha(var(--color-accent-500) / 0.15);
327
346
 
328
347
  --text-color-strong: var(--color-neutral-950);
329
348
  --text-color-body: --alpha(var(--color-neutral-950) / 0.75);
@@ -332,23 +351,17 @@ MARK: LIGHT DEFS
332
351
  --text-color-on-filled: #fff;
333
352
 
334
353
  /* Theme tokens */
335
- --background-color-filled-neutral: var(--color-neutral-500);
336
- --background-color-filled-accent: var(--color-accent-500);
337
- --background-color-filled-danger: var(--color-danger-500);
338
- --background-color-filled-warning: var(--color-warning-500);
339
- --background-color-filled-success: var(--color-success-500);
340
-
341
- --background-color-filled-neutral-hover: var(--color-neutral-600);
342
- --background-color-filled-accent-hover: var(--color-accent-600);
343
- --background-color-filled-danger-hover: var(--color-danger-600);
344
- --background-color-filled-warning-hover: var(--color-warning-600);
345
- --background-color-filled-success-hover: var(--color-success-600);
346
-
347
- --background-color-filled-neutral-active: var(--color-neutral-700);
348
- --background-color-filled-accent-active: var(--color-accent-700);
349
- --background-color-filled-danger-active: var(--color-danger-700);
350
- --background-color-filled-warning-active: var(--color-warning-700);
351
- --background-color-filled-success-active: var(--color-success-700);
354
+ --background-color-filled-neutral: var(--color-neutral-950);
355
+ --background-color-filled-accent: var(--color-accent-600);
356
+ --background-color-filled-danger: var(--color-danger-600);
357
+ --background-color-filled-warning: var(--color-warning-600);
358
+ --background-color-filled-success: var(--color-success-600);
359
+
360
+ --background-color-filled-neutral-hover: var(--color-neutral-800);
361
+ --background-color-filled-accent-hover: var(--color-accent-700);
362
+ --background-color-filled-danger-hover: var(--color-danger-700);
363
+ --background-color-filled-warning-hover: var(--color-warning-700);
364
+ --background-color-filled-success-hover: var(--color-success-700);
352
365
 
353
366
  /* Focus tokens */
354
367
  --ring-color-focus-neutral: --alpha(var(--color-neutral-500) / 0.3);
@@ -361,6 +374,9 @@ MARK: LIGHT DEFS
361
374
  --shadow-first-opacity: 5%;
362
375
  --shadow-second-opacity: 10%;
363
376
  --navigation-shadow: --alpha(var(--shadow-color) / 10%);
377
+
378
+ --bg-checked-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='white' d='M12.7071 4.29289c.3905.39053.3905 1.02369 0 1.41422L6.70711 11.7071c-.39053.3905-1.02369.3905-1.41422 0l-2-1.99999c-.39052-.39053-.39052-1.02369 0-1.41422.39053-.39052 1.02369-.39052 1.41422 0L6 9.58579l5.2929-5.2929c.3905-.39052 1.0237-.39052 1.4142 0Z'/%3e%3c/svg%3e");
379
+ --bg-indeterminate-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='white' d='M4 8c0-.55228.44772-1 1-1h6c.5523 0 1 .44772 1 1s-.4477 1-1 1H5c-.55228 0-1-.44772-1-1Z'/%3e%3c/svg%3e");
364
380
  }
365
381
 
366
382
  /**
@@ -419,6 +435,10 @@ MARK: CUSTOM VARIANTS
419
435
  }
420
436
 
421
437
  @layer base {
438
+ body {
439
+ -webkit-font-smoothing: antialiased;
440
+ -moz-osx-font-smoothing: grayscale;
441
+ }
422
442
  button:not(:disabled),
423
443
  [role="button"]:not(:disabled) {
424
444
  cursor: pointer;
@@ -433,6 +453,13 @@ MARK: CUSTOM VARIANTS
433
453
  /**
434
454
  MARK: UTILITIES
435
455
  */
456
+ @layer utilities {
457
+ .font-family {
458
+ -webkit-font-smoothing: auto;
459
+ -moz-osx-font-smoothing: auto;
460
+ }
461
+ }
462
+
436
463
  @utility cursor-inherit {
437
464
  cursor: inherit;
438
465
  }
@@ -486,38 +513,26 @@ MARK: UTILITIES
486
513
  background-attachment: local, local, scroll, scroll;
487
514
  }
488
515
 
489
- @utility scroll-shadow-x {
490
- /* CSS variables default to transparent — data attributes flip them on */
491
- --_cover-left: transparent;
492
- --_cover-right: transparent;
493
- --_shadow-left: transparent;
494
- --_shadow-right: transparent;
516
+ @utility scroll-fade-x {
517
+ /* CSS variables default to black (fully opaque in mask) — data attributes flip them to transparent */
518
+ --_fade-left: black;
519
+ --_fade-right: black;
495
520
 
496
- background:
497
- /* Shadow Cover LEFT */
498
- linear-gradient(to right, var(--_cover-left) 30%, transparent) left center,
499
- /* Shadow Cover RIGHT */ linear-gradient(to left, var(--_cover-right) 30%, transparent) right
500
- center,
501
- /* Shadow LEFT */ radial-gradient(farthest-side at 0% 50%, var(--_shadow-left), rgb(0 0 0 / 0%))
502
- left center,
503
- /* Shadow RIGHT */
504
- radial-gradient(farthest-side at 100% 50%, var(--_shadow-right), rgb(0 0 0 / 0%)) right center;
505
- background-repeat: no-repeat;
506
- background-size:
507
- 40px 100%,
508
- 40px 100%,
509
- 14px 100%,
510
- 14px 100%;
511
- background-attachment: scroll;
521
+ /* Mask fades the element's edges to transparent instead of painting over them with a background color */
522
+ mask-image: linear-gradient(
523
+ to right,
524
+ var(--_fade-left),
525
+ black 40px,
526
+ black calc(100% - 40px),
527
+ var(--_fade-right)
528
+ );
512
529
 
513
530
  &[data-scroll-left] {
514
- --_cover-left: var(--background-color-base);
515
- --_shadow-left: var(--navigation-shadow);
531
+ --_fade-left: transparent;
516
532
  }
517
533
 
518
534
  &[data-scroll-right] {
519
- --_cover-right: var(--background-color-base);
520
- --_shadow-right: var(--navigation-shadow);
535
+ --_fade-right: transparent;
521
536
  }
522
537
  }
523
538
 
@@ -550,11 +565,11 @@ MARK: UTILITIES
550
565
  }
551
566
 
552
567
  @utility bg-checked-icon {
553
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='white' d='M12.7071 4.29289c.3905.39053.3905 1.02369 0 1.41422L6.70711 11.7071c-.39053.3905-1.02369.3905-1.41422 0l-2-1.99999c-.39052-.39053-.39052-1.02369 0-1.41422.39053-.39052 1.02369-.39052 1.41422 0L6 9.58579l5.2929-5.2929c.3905-.39052 1.0237-.39052 1.4142 0Z'/%3e%3c/svg%3e");
568
+ background-image: var(--bg-checked-icon);
554
569
  }
555
570
 
556
571
  @utility bg-indeterminate-icon {
557
- background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath fill='white' d='M4 8c0-.55228.44772-1 1-1h6c.5523 0 1 .44772 1 1s-.4477 1-1 1H5c-.55228 0-1-.44772-1-1Z'/%3e%3c/svg%3e");
572
+ background-image: var(--bg-indeterminate-icon);
558
573
  }
559
574
 
560
575
  @utility stop-color-current {
@@ -571,65 +586,61 @@ MARK: UTILITIES
571
586
  animation-duration: --value([length]);
572
587
  }
573
588
 
574
- /**
575
- MARK: SYNTAX HIGHLIGHT TOKEN STYLES
589
+ /*
590
+ MARK: SHIKI SYNTAX HIGHLIGHT
576
591
  */
577
- .token.comment,
578
- .token.prolog,
579
- .token.doctype,
580
- .token.cdata {
581
- color: var(--color-gray-500);
592
+ :root {
593
+ --shiki-foreground: var(--text-color-body);
594
+ --shiki-background: transparent;
595
+ --shiki-color-text: var(--shiki-foreground);
596
+
597
+ --shiki-token-comment: var(--color-gray-600);
598
+ --shiki-token-constant: var(--color-amber-600);
599
+ --shiki-token-string: var(--color-emerald-600);
600
+ --shiki-token-string-expression: var(--color-emerald-600);
601
+ --shiki-token-keyword: var(--color-purple-600);
602
+ --shiki-token-function: var(--color-sky-600);
603
+ --shiki-token-parameter: var(--color-rose-600);
604
+ --shiki-token-punctuation: var(--color-sky-600);
605
+
606
+ --shiki-token-type: var(--color-amber-600);
607
+ --shiki-token-variable: var(--shiki-foreground);
608
+ --shiki-token-operator: var(--color-sky-600);
609
+ --shiki-token-attribute: var(--color-purple-600);
610
+ --shiki-token-property: var(--color-rose-600);
611
+ --shiki-token-escape: var(--color-sky-600);
612
+
613
+ /* Mantle code-line rendering hooks (used by CodeBlock + server highlighter). */
614
+ --mantle-code-line-highlight-bg: --alpha(var(--color-accent-500) / 12%);
615
+ --mantle-code-line-number-color: var(--text-color-muted);
616
+ --mantle-code-line-number-width: 2rem;
617
+ --mantle-code-line-number-gap: 1rem;
582
618
  }
583
619
 
584
- .token.property,
585
- .token.tag,
586
- .token.boolean,
587
- .token.number,
588
- .token.constant,
589
- .token.symbol,
590
- .token.deleted {
591
- color: var(--color-indigo-600);
620
+ .mantle-code-line {
621
+ display: flex;
622
+ align-items: flex-start;
623
+ min-width: 100%;
624
+ box-sizing: border-box;
625
+ padding-right: 3.5rem; /* space for the copy button overlay */
592
626
  }
593
627
 
594
- .token.attr-name,
595
- .token.string,
596
- .token.char,
597
- .token.builtin,
598
- .token.inserted {
599
- color: var(--color-green-600);
628
+ .mantle-code-line-highlighted {
629
+ background-color: var(--mantle-code-line-highlight-bg);
600
630
  }
601
631
 
602
- .token.operator,
603
- .token.entity,
604
- .token.url,
605
- .language-css .token.string,
606
- .style .token.string {
607
- color: var(--color-green-600);
632
+ .mantle-code-line-number {
633
+ display: block;
634
+ flex-shrink: 0;
635
+ width: var(--mantle-code-line-number-width);
636
+ margin-right: var(--mantle-code-line-number-gap);
637
+ user-select: none;
638
+ text-align: right;
639
+ color: var(--mantle-code-line-number-color);
608
640
  }
609
641
 
610
- .token.selector,
611
- .token.atrule,
612
- .token.attr-value,
613
- .token.keyword {
614
- color: var(--color-blue-600);
615
- }
616
-
617
- .token.function,
618
- .token.class-name {
619
- color: var(--color-blue-600);
620
- }
621
-
622
- .token.regex,
623
- .token.important,
624
- .token.variable {
625
- color: var(--color-yellow-600);
626
- }
627
-
628
- .token.important,
629
- .token.bold {
630
- font-weight: bold;
631
- }
632
-
633
- .token.italic {
634
- font-style: italic;
642
+ .mantle-code-line-content {
643
+ display: block;
644
+ min-width: 0;
645
+ flex: 1 1 auto;
635
646
  }
@@ -1,5 +1,5 @@
1
- import { t as WithAsChild } from "./as-child-XMVTepJu.js";
2
- import * as react from "react";
1
+ import { t as WithAsChild } from "./as-child-CRRsxi3Y.js";
2
+ import * as _$react from "react";
3
3
  import { ComponentProps } from "react";
4
4
 
5
5
  //#region src/components/media-object/media-object.d.ts
@@ -59,7 +59,7 @@ declare const MediaObject: {
59
59
  * </MediaObject.Root>
60
60
  * ```
61
61
  */
62
- readonly Root: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLDivElement>>;
62
+ readonly Root: _$react.ForwardRefExoticComponent<Omit<Props, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
63
63
  /**
64
64
  * The container for an image or icon to display in the media slot of the media object.
65
65
  *
@@ -77,7 +77,7 @@ declare const MediaObject: {
77
77
  * </MediaObject.Root>
78
78
  * ```
79
79
  */
80
- readonly Media: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLDivElement>>;
80
+ readonly Media: _$react.ForwardRefExoticComponent<Omit<Props, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
81
81
  /**
82
82
  * The container for the content slot of a media object.
83
83
  *
@@ -95,7 +95,7 @@ declare const MediaObject: {
95
95
  * </MediaObject.Root>
96
96
  * ```
97
97
  */
98
- readonly Content: react.ForwardRefExoticComponent<Omit<Props, "ref"> & react.RefAttributes<HTMLDivElement>>;
98
+ readonly Content: _$react.ForwardRefExoticComponent<Omit<Props, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
99
99
  };
100
100
  //#endregion
101
101
  export { MediaObject };
@@ -1,8 +1,8 @@
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";
1
+ import { t as WithAsChild } from "./as-child-CRRsxi3Y.js";
2
+ import { o as WithValidation } from "./types-Cq6RWU7Q.js";
3
+ import * as _$react from "react";
4
4
  import { ComponentProps, ReactNode } from "react";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+ import * as _$react_jsx_runtime0 from "react/jsx-runtime";
6
6
  import * as Primitive from "@ariakit/react";
7
7
 
8
8
  //#region src/components/multi-select/multi-select.d.ts
@@ -121,7 +121,7 @@ declare const MultiSelect: {
121
121
  children,
122
122
  defaultSelectedValue,
123
123
  ...props
124
- }: MultiSelectProps): react_jsx_runtime0.JSX.Element;
124
+ }: MultiSelectProps): _$react_jsx_runtime0.JSX.Element;
125
125
  displayName: string;
126
126
  };
127
127
  /**
@@ -136,7 +136,7 @@ declare const MultiSelect: {
136
136
  * </MultiSelect.Trigger>
137
137
  * ```
138
138
  */
139
- readonly Trigger: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & WithValidation & react.RefAttributes<HTMLDivElement>>;
139
+ readonly Trigger: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & WithValidation & _$react.RefAttributes<HTMLDivElement>>;
140
140
  /**
141
141
  * Renders the selected values as removable tags. Place this inside
142
142
  * `MultiSelect.Trigger`, followed by `MultiSelect.Input`.
@@ -161,7 +161,7 @@ declare const MultiSelect: {
161
161
  ({
162
162
  children,
163
163
  lockedValues
164
- }: MultiSelectTagValuesProps): react_jsx_runtime0.JSX.Element;
164
+ }: MultiSelectTagValuesProps): _$react_jsx_runtime0.JSX.Element;
165
165
  displayName: string;
166
166
  };
167
167
  /**
@@ -173,7 +173,7 @@ declare const MultiSelect: {
173
173
  * <MultiSelect.Input placeholder="Select items..." />
174
174
  * ```
175
175
  */
176
- readonly Input: react.ForwardRefExoticComponent<Omit<MultiSelectInputProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
176
+ readonly Input: _$react.ForwardRefExoticComponent<Omit<MultiSelectInputProps, "ref"> & _$react.RefAttributes<HTMLInputElement>>;
177
177
  /**
178
178
  * The default tag rendered inside `MultiSelect.TagValues` for each selected value.
179
179
  * Displays the value label with a remove button and keyboard navigation support.
@@ -186,7 +186,7 @@ declare const MultiSelect: {
186
186
  * />
187
187
  * ```
188
188
  */
189
- readonly Tag: react.ForwardRefExoticComponent<Omit<TagProps, "ref"> & react.RefAttributes<HTMLSpanElement>>;
189
+ readonly Tag: _$react.ForwardRefExoticComponent<Omit<TagProps, "ref"> & _$react.RefAttributes<HTMLSpanElement>>;
190
190
  /**
191
191
  * Renders a popover that contains multi-select content.
192
192
  *
@@ -197,7 +197,7 @@ declare const MultiSelect: {
197
197
  * </MultiSelect.Content>
198
198
  * ```
199
199
  */
200
- readonly Content: react.ForwardRefExoticComponent<Omit<MultiSelectContentProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
200
+ readonly Content: _$react.ForwardRefExoticComponent<Omit<MultiSelectContentProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
201
201
  /**
202
202
  * Renders a sticky footer pinned to the bottom inside `MultiSelect.Content`,
203
203
  * with a separator border at the top.
@@ -209,7 +209,7 @@ declare const MultiSelect: {
209
209
  * </MultiSelect.ContentFooter>
210
210
  * ```
211
211
  */
212
- readonly ContentFooter: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
212
+ readonly ContentFooter: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
213
213
  /**
214
214
  * Renders a selectable item with a checkbox indicator inside a `MultiSelect.Content`.
215
215
  *
@@ -218,7 +218,7 @@ declare const MultiSelect: {
218
218
  * <MultiSelect.Item value="apple">Apple</MultiSelect.Item>
219
219
  * ```
220
220
  */
221
- readonly Item: react.ForwardRefExoticComponent<Omit<MultiSelectItemProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
221
+ readonly Item: _$react.ForwardRefExoticComponent<Omit<MultiSelectItemProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
222
222
  /**
223
223
  * Renders a group for MultiSelect.Item elements.
224
224
  *
@@ -230,7 +230,7 @@ declare const MultiSelect: {
230
230
  * </MultiSelect.Group>
231
231
  * ```
232
232
  */
233
- readonly Group: react.ForwardRefExoticComponent<Omit<MultiSelectGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
233
+ readonly Group: _$react.ForwardRefExoticComponent<Omit<MultiSelectGroupProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
234
234
  /**
235
235
  * Renders a label in a multi-select group.
236
236
  *
@@ -239,7 +239,7 @@ declare const MultiSelect: {
239
239
  * <MultiSelect.GroupLabel>Fruits</MultiSelect.GroupLabel>
240
240
  * ```
241
241
  */
242
- readonly GroupLabel: react.ForwardRefExoticComponent<Omit<MultiSelectGroupLabelProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
242
+ readonly GroupLabel: _$react.ForwardRefExoticComponent<Omit<MultiSelectGroupLabelProps, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
243
243
  /**
244
244
  * Renders a description below a `MultiSelect.GroupLabel` inside a `MultiSelect.Group`.
245
245
  *
@@ -250,7 +250,7 @@ declare const MultiSelect: {
250
250
  * </MultiSelect.GroupDescription>
251
251
  * ```
252
252
  */
253
- readonly GroupDescription: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
253
+ readonly GroupDescription: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "ref"> & _$react.RefAttributes<HTMLParagraphElement>>;
254
254
  /**
255
255
  * Renders a separator between items or groups.
256
256
  *
@@ -259,10 +259,10 @@ declare const MultiSelect: {
259
259
  * <MultiSelect.Separator />
260
260
  * ```
261
261
  */
262
- readonly Separator: react.ForwardRefExoticComponent<Omit<Omit<react.ClassAttributes<HTMLDivElement> & react.HTMLAttributes<HTMLDivElement> & WithAsChild & {
262
+ readonly Separator: _$react.ForwardRefExoticComponent<Omit<Omit<_$react.ClassAttributes<HTMLDivElement> & _$react.HTMLAttributes<HTMLDivElement> & WithAsChild & {
263
263
  orientation?: "horizontal" | "vertical";
264
264
  semantic?: boolean;
265
- }, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
265
+ }, "ref"> & _$react.RefAttributes<HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
266
266
  /**
267
267
  * Renders a message when no items match the current filter.
268
268
  *
@@ -271,7 +271,7 @@ declare const MultiSelect: {
271
271
  * <MultiSelect.Empty>No results found</MultiSelect.Empty>
272
272
  * ```
273
273
  */
274
- readonly Empty: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
274
+ readonly Empty: _$react.ForwardRefExoticComponent<Omit<_$react.DetailedHTMLProps<_$react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & _$react.RefAttributes<HTMLDivElement>>;
275
275
  };
276
276
  //#endregion
277
277
  export { MultiSelect };
@@ -1,2 +1,2 @@
1
- import{t as e}from"./cx-D1HYnpvA.js";import{t}from"./icon-BMH0fD_b.js";import{t as n}from"./slot-D_ZUrdEW.js";import{t as r}from"./compose-refs-DeIsFv68.js";import{n as i}from"./separator-fSV4z0Pq.js";import{t as a}from"./use-prefers-reduced-motion-BiG6QGkf.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 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":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-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};
1
+ import{t as e}from"./cx-D1HYnpvA.js";import{t}from"./icon-BMH0fD_b.js";import{t as n}from"./slot-D_ZUrdEW.js";import{t as r}from"./compose-refs-DeIsFv68.js";import{n as i}from"./separator-BuP5aENE.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};
2
2
  //# sourceMappingURL=multi-select.js.map