@rinzai/zen 0.11.0 → 0.13.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 (289) hide show
  1. package/README.md +37 -7
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.d.ts.map +1 -0
  4. package/dist/accordion/index.js +81 -0
  5. package/dist/animated-number/index.d.ts +3 -2
  6. package/dist/animated-number/index.d.ts.map +1 -1
  7. package/dist/animated-number/index.js +40 -38
  8. package/dist/avatar/index.d.ts +7 -2
  9. package/dist/avatar/index.d.ts.map +1 -1
  10. package/dist/avatar/index.js +17 -11
  11. package/dist/backdrop/index.d.ts +4 -4
  12. package/dist/backdrop/index.d.ts.map +1 -1
  13. package/dist/backdrop/index.js +41 -39
  14. package/dist/badge/index.d.ts +4 -2
  15. package/dist/badge/index.d.ts.map +1 -1
  16. package/dist/badge/index.js +20 -11
  17. package/dist/base.css +4 -0
  18. package/dist/breadcrumbs/index.d.ts +1 -1
  19. package/dist/breadcrumbs/index.d.ts.map +1 -1
  20. package/dist/breadcrumbs/index.js +25 -24
  21. package/dist/button/index.d.ts +3 -3
  22. package/dist/button/index.d.ts.map +1 -1
  23. package/dist/button/index.js +16 -11
  24. package/dist/button-group/index.d.ts +13 -0
  25. package/dist/button-group/index.d.ts.map +1 -0
  26. package/dist/button-group/index.js +14 -0
  27. package/dist/calendar/index.d.ts +15 -8
  28. package/dist/calendar/index.d.ts.map +1 -1
  29. package/dist/calendar/index.js +97 -91
  30. package/dist/calendar-heatmap/index.d.ts +7 -5
  31. package/dist/calendar-heatmap/index.d.ts.map +1 -1
  32. package/dist/calendar-heatmap/index.js +32 -30
  33. package/dist/canvas/geometry.js +0 -1
  34. package/dist/canvas/index.d.ts +6 -6
  35. package/dist/canvas/index.d.ts.map +1 -1
  36. package/dist/canvas/index.js +135 -133
  37. package/dist/carousel/index.d.ts +27 -0
  38. package/dist/carousel/index.d.ts.map +1 -0
  39. package/dist/carousel/index.js +162 -0
  40. package/dist/chart/index.d.ts +5 -4
  41. package/dist/chart/index.d.ts.map +1 -1
  42. package/dist/chart/index.js +137 -135
  43. package/dist/chart/palette.js +0 -1
  44. package/dist/checkbox/index.d.ts +3 -3
  45. package/dist/checkbox/index.d.ts.map +1 -1
  46. package/dist/checkbox/index.js +33 -30
  47. package/dist/chip/index.js +1 -1
  48. package/dist/code-block/index.d.ts.map +1 -1
  49. package/dist/code-block/index.js +27 -25
  50. package/dist/code-input/index.d.ts.map +1 -1
  51. package/dist/code-input/index.js +30 -24
  52. package/dist/collapse/index.d.ts +4 -3
  53. package/dist/collapse/index.d.ts.map +1 -1
  54. package/dist/collapse/index.js +42 -39
  55. package/dist/color-picker/index.d.ts +14 -7
  56. package/dist/color-picker/index.d.ts.map +1 -1
  57. package/dist/color-picker/index.js +139 -128
  58. package/dist/combobox/index.d.ts +14 -6
  59. package/dist/combobox/index.d.ts.map +1 -1
  60. package/dist/combobox/index.js +158 -146
  61. package/dist/command-palette/index.d.ts +4 -3
  62. package/dist/command-palette/index.d.ts.map +1 -1
  63. package/dist/command-palette/index.js +60 -57
  64. package/dist/confirm-dialog/index.d.ts +6 -7
  65. package/dist/confirm-dialog/index.d.ts.map +1 -1
  66. package/dist/confirm-dialog/index.js +20 -16
  67. package/dist/date-picker/index.d.ts +23 -14
  68. package/dist/date-picker/index.d.ts.map +1 -1
  69. package/dist/date-picker/index.js +109 -93
  70. package/dist/dialog/index.d.ts +3 -4
  71. package/dist/dialog/index.d.ts.map +1 -1
  72. package/dist/dialog/index.js +58 -55
  73. package/dist/disclosure/index.d.ts +8 -0
  74. package/dist/disclosure/index.d.ts.map +1 -1
  75. package/dist/disclosure/index.js +31 -32
  76. package/dist/editable-cell/index.d.ts +4 -5
  77. package/dist/editable-cell/index.d.ts.map +1 -1
  78. package/dist/editable-cell/index.js +23 -22
  79. package/dist/field/index.d.ts +8 -8
  80. package/dist/field/index.d.ts.map +1 -1
  81. package/dist/field/index.js +20 -18
  82. package/dist/filter-bar/index.d.ts +2 -2
  83. package/dist/filter-bar/index.d.ts.map +1 -1
  84. package/dist/filter-bar/index.js +38 -36
  85. package/dist/header/index.d.ts +1 -1
  86. package/dist/header/index.d.ts.map +1 -1
  87. package/dist/header/index.js +13 -11
  88. package/dist/hover-card/index.d.ts +32 -0
  89. package/dist/hover-card/index.d.ts.map +1 -0
  90. package/dist/hover-card/index.js +84 -0
  91. package/dist/icon-picker/index.d.ts +16 -5
  92. package/dist/icon-picker/index.d.ts.map +1 -1
  93. package/dist/icon-picker/index.js +42 -47
  94. package/dist/icons/micro/plus.d.ts +3 -0
  95. package/dist/icons/micro/plus.d.ts.map +1 -0
  96. package/dist/icons/micro/plus.js +17 -0
  97. package/dist/index.d.ts +37 -24
  98. package/dist/index.d.ts.map +1 -1
  99. package/dist/input/index.d.ts +5 -1
  100. package/dist/input/index.d.ts.map +1 -1
  101. package/dist/input/index.js +9 -9
  102. package/dist/input-group/index.d.ts +4 -1
  103. package/dist/input-group/index.d.ts.map +1 -1
  104. package/dist/input-group/index.js +14 -14
  105. package/dist/keypad/index.d.ts +9 -7
  106. package/dist/keypad/index.d.ts.map +1 -1
  107. package/dist/keypad/index.js +22 -19
  108. package/dist/lib.js +112 -97
  109. package/dist/load-more/index.d.ts +4 -2
  110. package/dist/load-more/index.d.ts.map +1 -1
  111. package/dist/load-more/index.js +26 -23
  112. package/dist/locale-provider/index.d.ts +23 -0
  113. package/dist/locale-provider/index.d.ts.map +1 -0
  114. package/dist/locale-provider/index.js +35 -0
  115. package/dist/menu/index.d.ts +62 -9
  116. package/dist/menu/index.d.ts.map +1 -1
  117. package/dist/menu/index.js +371 -128
  118. package/dist/meter/index.d.ts +2 -2
  119. package/dist/meter/index.d.ts.map +1 -1
  120. package/dist/meter/index.js +4 -4
  121. package/dist/money-input/index.d.ts +20 -10
  122. package/dist/money-input/index.d.ts.map +1 -1
  123. package/dist/money-input/index.js +199 -190
  124. package/dist/month-picker/index.d.ts +17 -10
  125. package/dist/month-picker/index.d.ts.map +1 -1
  126. package/dist/month-picker/index.js +97 -86
  127. package/dist/navigation-menu/index.d.ts +42 -0
  128. package/dist/navigation-menu/index.d.ts.map +1 -0
  129. package/dist/navigation-menu/index.js +144 -0
  130. package/dist/number-field/index.d.ts +34 -0
  131. package/dist/number-field/index.d.ts.map +1 -0
  132. package/dist/number-field/index.js +119 -0
  133. package/dist/page-header/index.d.ts +4 -3
  134. package/dist/page-header/index.d.ts.map +1 -1
  135. package/dist/page-header/index.js +2 -1
  136. package/dist/pagination/index.d.ts +1 -1
  137. package/dist/pagination/index.d.ts.map +1 -1
  138. package/dist/pagination/index.js +35 -33
  139. package/dist/progress-ring/index.d.ts +4 -3
  140. package/dist/progress-ring/index.d.ts.map +1 -1
  141. package/dist/progress-ring/index.js +11 -10
  142. package/dist/radio-cards/index.d.ts +9 -5
  143. package/dist/radio-cards/index.d.ts.map +1 -1
  144. package/dist/radio-cards/index.js +26 -24
  145. package/dist/radio-group/index.d.ts +9 -8
  146. package/dist/radio-group/index.d.ts.map +1 -1
  147. package/dist/radio-group/index.js +35 -34
  148. package/dist/range-slider/index.d.ts +10 -4
  149. package/dist/range-slider/index.d.ts.map +1 -1
  150. package/dist/range-slider/index.js +43 -31
  151. package/dist/repeat-picker/index.d.ts +13 -6
  152. package/dist/repeat-picker/index.d.ts.map +1 -1
  153. package/dist/repeat-picker/index.js +73 -61
  154. package/dist/resizable/index.d.ts +29 -0
  155. package/dist/resizable/index.d.ts.map +1 -0
  156. package/dist/resizable/index.js +135 -0
  157. package/dist/segmented/index.d.ts +8 -5
  158. package/dist/segmented/index.d.ts.map +1 -1
  159. package/dist/segmented/index.js +36 -34
  160. package/dist/select/index.d.ts +9 -3
  161. package/dist/select/index.d.ts.map +1 -1
  162. package/dist/select/index.js +99 -96
  163. package/dist/separator/index.d.ts +14 -0
  164. package/dist/separator/index.d.ts.map +1 -0
  165. package/dist/separator/index.js +15 -0
  166. package/dist/side-nav/index.js +1 -1
  167. package/dist/skeleton/index.d.ts +4 -4
  168. package/dist/skeleton/index.d.ts.map +1 -1
  169. package/dist/skeleton/index.js +4 -3
  170. package/dist/slider/index.d.ts +6 -3
  171. package/dist/slider/index.d.ts.map +1 -1
  172. package/dist/slider/index.js +29 -23
  173. package/dist/sortable/index.d.ts +10 -20
  174. package/dist/sortable/index.d.ts.map +1 -1
  175. package/dist/sortable/index.js +72 -134
  176. package/dist/sortable/shared.d.ts +56 -0
  177. package/dist/sortable/shared.d.ts.map +1 -0
  178. package/dist/sortable/shared.js +104 -0
  179. package/dist/sortable/tree-model.d.ts +46 -0
  180. package/dist/sortable/tree-model.d.ts.map +1 -0
  181. package/dist/sortable/tree-model.js +87 -0
  182. package/dist/sortable/tree.d.ts +31 -0
  183. package/dist/sortable/tree.d.ts.map +1 -0
  184. package/dist/sortable/tree.js +150 -0
  185. package/dist/sparkline/index.d.ts +1 -1
  186. package/dist/sparkline/index.d.ts.map +1 -1
  187. package/dist/sparkline/index.js +26 -25
  188. package/dist/spinner/index.d.ts +4 -3
  189. package/dist/spinner/index.d.ts.map +1 -1
  190. package/dist/spinner/index.js +2 -1
  191. package/dist/status-pill/index.d.ts.map +1 -1
  192. package/dist/status-pill/index.js +1 -1
  193. package/dist/stepper/index.d.ts +1 -1
  194. package/dist/stepper/index.d.ts.map +1 -1
  195. package/dist/stepper/index.js +31 -30
  196. package/dist/tab-bar/index.js +1 -1
  197. package/dist/table/index.d.ts +5 -5
  198. package/dist/table/index.d.ts.map +1 -1
  199. package/dist/table/index.js +66 -64
  200. package/dist/table/selection.d.ts +2 -2
  201. package/dist/table/selection.d.ts.map +1 -1
  202. package/dist/table/selection.js +41 -38
  203. package/dist/table/swipe.d.ts +1 -1
  204. package/dist/table/swipe.d.ts.map +1 -1
  205. package/dist/table/swipe.js +1 -1
  206. package/dist/table-of-contents/index.d.ts +4 -2
  207. package/dist/table-of-contents/index.d.ts.map +1 -1
  208. package/dist/table-of-contents/index.js +27 -25
  209. package/dist/tabs/index.d.ts.map +1 -1
  210. package/dist/tabs/index.js +90 -88
  211. package/dist/tag-input/index.d.ts +3 -1
  212. package/dist/tag-input/index.d.ts.map +1 -1
  213. package/dist/tag-input/index.js +61 -52
  214. package/dist/theme-toggle/index.d.ts +9 -8
  215. package/dist/theme-toggle/index.d.ts.map +1 -1
  216. package/dist/theme-toggle/index.js +30 -28
  217. package/dist/theme.css +90 -12
  218. package/dist/time-field/index.d.ts +31 -0
  219. package/dist/time-field/index.d.ts.map +1 -0
  220. package/dist/time-field/index.js +175 -0
  221. package/dist/timeline/index.js +1 -1
  222. package/dist/toast/index.d.ts +1 -1
  223. package/dist/toast/index.d.ts.map +1 -1
  224. package/dist/toast/index.js +127 -125
  225. package/dist/toggle/index.d.ts +2 -2
  226. package/dist/toggle/index.d.ts.map +1 -1
  227. package/dist/toggle/index.js +8 -6
  228. package/dist/toggle-group/index.d.ts +35 -0
  229. package/dist/toggle-group/index.d.ts.map +1 -0
  230. package/dist/toggle-group/index.js +53 -0
  231. package/dist/toolbar/index.d.ts +19 -0
  232. package/dist/toolbar/index.d.ts.map +1 -0
  233. package/dist/toolbar/index.js +36 -0
  234. package/dist/tooltip/index.d.ts.map +1 -1
  235. package/dist/tooltip/index.js +40 -74
  236. package/dist/tree/index.d.ts.map +1 -1
  237. package/dist/tree/index.js +105 -102
  238. package/dist/trend/index.d.ts +2 -2
  239. package/dist/trend/index.d.ts.map +1 -1
  240. package/dist/trend/index.js +20 -19
  241. package/dist/utils/color.js +0 -1
  242. package/dist/utils/cva.js +0 -1
  243. package/dist/utils/cx.js +0 -1
  244. package/dist/utils/date.d.ts +6 -0
  245. package/dist/utils/date.d.ts.map +1 -1
  246. package/dist/utils/date.js +1 -2
  247. package/dist/utils/direction.d.ts +7 -0
  248. package/dist/utils/direction.d.ts.map +1 -0
  249. package/dist/utils/direction.js +6 -0
  250. package/dist/utils/form-value.d.ts +15 -0
  251. package/dist/utils/form-value.d.ts.map +1 -0
  252. package/dist/utils/form-value.js +29 -0
  253. package/dist/utils/fx.js +0 -1
  254. package/dist/utils/merge.js +0 -1
  255. package/dist/utils/messages.d.ts +137 -0
  256. package/dist/utils/messages.d.ts.map +1 -0
  257. package/dist/utils/messages.js +133 -0
  258. package/dist/utils/money.js +0 -1
  259. package/dist/utils/month.js +0 -1
  260. package/dist/utils/motion.js +0 -1
  261. package/dist/utils/refs.d.ts +6 -0
  262. package/dist/utils/refs.d.ts.map +1 -0
  263. package/dist/utils/refs.js +13 -0
  264. package/dist/utils/repeat.d.ts +3 -1
  265. package/dist/utils/repeat.d.ts.map +1 -1
  266. package/dist/utils/repeat.js +28 -25
  267. package/dist/utils/roving.d.ts +17 -0
  268. package/dist/utils/roving.d.ts.map +1 -0
  269. package/dist/utils/roving.js +35 -0
  270. package/dist/utils/section-link.js +0 -1
  271. package/dist/utils/slot.d.ts.map +1 -1
  272. package/dist/utils/slot.js +7 -11
  273. package/dist/utils/status-icons.js +7 -7
  274. package/dist/utils/styles.d.ts +9 -2
  275. package/dist/utils/styles.d.ts.map +1 -1
  276. package/dist/utils/styles.js +6 -3
  277. package/dist/utils/theme-wave.js +0 -1
  278. package/dist/utils/theme.js +0 -1
  279. package/dist/utils/useAnchoredPopup.d.ts +7 -4
  280. package/dist/utils/useAnchoredPopup.d.ts.map +1 -1
  281. package/dist/utils/useAnchoredPopup.js +18 -11
  282. package/dist/utils/useControllable.d.ts +9 -0
  283. package/dist/utils/useControllable.d.ts.map +1 -0
  284. package/dist/utils/useControllable.js +15 -0
  285. package/dist/utils/useHoverPopup.d.ts +39 -0
  286. package/dist/utils/useHoverPopup.d.ts.map +1 -0
  287. package/dist/utils/useHoverPopup.js +64 -0
  288. package/dist/zen.css +1 -1
  289. package/package.json +1 -1
@@ -1,163 +1,174 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { anchoredStyle as t, useAnchoredPopup as n } from "../utils/useAnchoredPopup.js";
4
- import r from "../badge/index.js";
5
- import i from "../button/index.js";
6
- import { CheckIcon as a } from "../utils/status-icons.js";
7
- import { useField as o } from "../field/index.js";
8
- import { PLACEHOLDER as s, POPUP as c, TRIGGER as l } from "../utils/styles.js";
9
- import { FieldChevron as u } from "../utils/field-chevron.js";
10
- import d from "../collapse/index.js";
11
- import f from "../icons/search.js";
12
- import p from "../icons/x-mark.js";
13
- import { InputGroupAddon as m, InputGroupInput as h } from "../input-group/index.js";
14
- import { useVirtualList as g } from "../utils/useVirtualList.js";
15
- import { createContext as _, useContext as v, useEffect as y, useMemo as b, useRef as x, useState as S } from "react";
16
- import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
3
+ import { useControllable as t } from "../utils/useControllable.js";
4
+ import { anchoredStyle as n, useAnchoredPopup as r } from "../utils/useAnchoredPopup.js";
5
+ import { useMessages as i } from "../locale-provider/index.js";
6
+ import a from "../badge/index.js";
7
+ import o from "../button/index.js";
8
+ import { CheckIcon as s } from "../utils/status-icons.js";
9
+ import { useField as c } from "../field/index.js";
10
+ import { FIELD_SIZE as l, PLACEHOLDER as u, POPUP as d, TRIGGER as f } from "../utils/styles.js";
11
+ import { FormValue as p } from "../utils/form-value.js";
12
+ import { FieldChevron as m } from "../utils/field-chevron.js";
13
+ import h from "../collapse/index.js";
14
+ import g from "../icons/search.js";
15
+ import _ from "../icons/x-mark.js";
16
+ import { InputGroupAddon as v, InputGroupInput as y } from "../input-group/index.js";
17
+ import { useVirtualList as b } from "../utils/useVirtualList.js";
18
+ import { createContext as x, useContext as S, useEffect as C, useMemo as w, useRef as T, useState as E } from "react";
19
+ import { Fragment as D, jsx as O, jsxs as k } from "react/jsx-runtime";
17
20
  //#region packages/combobox/index.tsx
18
- var E = _(null), D = () => {
19
- let e = v(E);
21
+ var A = x(null), j = () => {
22
+ let e = S(A);
20
23
  if (!e) throw Error("Combobox parts must be inside a Combobox");
21
24
  return e;
22
25
  };
23
- function O(e) {
24
- let { items: t, itemKey: r = (e) => e.key, itemText: i = (e) => e.text, filter: a = (e, t) => i(e).toLowerCase().includes(t.toLowerCase()), selectedItems: o = [], children: s } = e, c = e.multiple === !0, l = c ? e.value : e.value === null ? [] : [e.value], [u, d] = S(""), [f, p] = S(null), m = x(null), h = x(null), g = x(null), _ = x(35), v = b(() => u ? t.filter((e) => a(e, u)) : t, [
25
- t,
26
- u,
27
- a
28
- ]), y = n({ onOpenChange: (e) => {
29
- e || (p(null), d(""), y.popupRef.current?.contains(document.activeElement) && h.current?.focus());
30
- } }), C = {
31
- multiple: c,
32
- keyOf: r,
33
- textOf: i,
34
- items: t,
35
- selectedItems: o,
36
- matches: v,
37
- chosen: l,
38
- toggle: (t) => {
39
- if (e.multiple === !0) {
40
- let n = e.value.includes(t);
41
- e.onValueChange(n ? e.value.filter((e) => e !== t) : [...e.value, t]);
42
- } else e.onValueChange(t), y.setOpen(!1);
26
+ function M(e) {
27
+ let { items: n, itemKey: i = (e) => e.key, itemText: a = (e) => e.text, filter: o = (e, t) => a(e).toLowerCase().includes(t.toLowerCase()), selectedItems: s = [], name: c, children: l } = e, u = e.multiple === !0, [d, f, m] = t(e.value, e.defaultValue ?? (u ? [] : null), e.onValueChange), h = typeof d == "string" ? [d] : d ?? [], [g, _] = E(""), [v, y] = E(null), [b, x] = E(), S = T(null), C = T(null), D = T(null), j = T(35), M = w(() => g ? n.filter((e) => o(e, g)) : n, [
28
+ n,
29
+ g,
30
+ o
31
+ ]), N = r({ onOpenChange: (e) => {
32
+ e || (y(null), _(""), N.popupRef.current?.contains(document.activeElement) && C.current?.focus());
33
+ } }), P = {
34
+ multiple: u,
35
+ keyOf: i,
36
+ textOf: a,
37
+ items: n,
38
+ selectedItems: s,
39
+ matches: M,
40
+ chosen: h,
41
+ toggle: (e) => {
42
+ if (u) {
43
+ let t = h.includes(e);
44
+ f(t ? h.filter((t) => t !== e) : [...h, e]);
45
+ } else f(e), N.setOpen(!1);
43
46
  },
44
- query: u,
45
- setQuery: d,
46
- active: f,
47
- setActive: p,
48
- create: m,
49
- popup: y,
50
- triggerRef: h,
51
- listRef: g,
52
- optionId: (e) => `${y.id}-option-${e}`,
53
- itemHeight: _
47
+ query: g,
48
+ setQuery: _,
49
+ active: v,
50
+ setActive: y,
51
+ create: S,
52
+ popup: N,
53
+ triggerRef: C,
54
+ listRef: D,
55
+ optionId: (e) => `${N.id}-option-${e}`,
56
+ itemHeight: j,
57
+ listLabelledBy: b,
58
+ setListLabelledBy: x
54
59
  };
55
- return /* @__PURE__ */ w(E.Provider, {
56
- value: C,
57
- children: s
60
+ return /* @__PURE__ */ k(A.Provider, {
61
+ value: P,
62
+ children: [l, /* @__PURE__ */ O(p, {
63
+ name: c,
64
+ value: u ? h : h[0] ?? "",
65
+ onReset: m
66
+ })]
58
67
  });
59
68
  }
60
- function k({ placeholder: t = "Select an Item", disabled: n, className: r, style: i, children: a, ...s }) {
61
- let c = D(), { popup: d } = c, f = o(), p = x(!1), m = () => !n && d.setOpen(!0);
62
- return /* @__PURE__ */ T("div", {
63
- id: f?.id,
64
- "aria-labelledby": s["aria-label"] ? void 0 : f?.labelId,
65
- "aria-invalid": f?.["aria-invalid"],
66
- ...s,
67
- "aria-describedby": e(f?.["aria-describedby"], s["aria-describedby"]).trim() || void 0,
68
- ref: c.triggerRef,
69
+ function N({ placeholder: t, disabled: n, size: r = "default", className: a, style: o, children: s, ...u }) {
70
+ let d = i(), p = t ?? d.selectPlaceholder, h = j(), { popup: g } = h, _ = c(), v = u.id ?? _?.id ?? `${g.id}-field`, y = u["aria-labelledby"] ?? (u["aria-label"] ? v : _?.labelId), { setListLabelledBy: b } = h;
71
+ C(() => b(y), [y, b]);
72
+ let x = T(!1), S = () => !n && g.setOpen(!0);
73
+ return /* @__PURE__ */ k("div", {
74
+ id: v,
75
+ "aria-labelledby": u["aria-label"] ? void 0 : _?.labelId,
76
+ "aria-invalid": _?.["aria-invalid"],
77
+ ...u,
78
+ "aria-describedby": e(_?.["aria-describedby"], u["aria-describedby"]).trim() || void 0,
79
+ ref: h.triggerRef,
69
80
  role: "combobox",
70
81
  tabIndex: n ? -1 : 0,
71
82
  "aria-haspopup": "listbox",
72
- "aria-expanded": d.open,
73
- "aria-controls": d.id,
83
+ "aria-expanded": g.open,
84
+ "aria-controls": g.id,
74
85
  "aria-disabled": n || void 0,
75
- "data-popup-open": d.triggerProps["data-popup-open"],
76
- "data-zen-anchor": d.triggerProps["data-zen-anchor"],
86
+ "data-popup-open": g.triggerProps["data-popup-open"],
87
+ "data-zen-anchor": g.triggerProps["data-zen-anchor"],
77
88
  style: {
78
- ...d.triggerProps.style,
79
- ...i
89
+ ...g.triggerProps.style,
90
+ ...o
80
91
  },
81
92
  onPointerDown: (e) => {
82
- s.onPointerDown?.(e), p.current = d.open;
93
+ u.onPointerDown?.(e), x.current = g.open;
83
94
  },
84
95
  onClick: (e) => {
85
- s.onClick?.(e), e.preventDefault(), p.current ? d.setOpen(!1) : m(), p.current = !1;
96
+ u.onClick?.(e), e.preventDefault(), x.current ? g.setOpen(!1) : S(), x.current = !1;
86
97
  },
87
98
  onKeyDown: (e) => {
88
- s.onKeyDown?.(e), [
99
+ u.onKeyDown?.(e), [
89
100
  "Enter",
90
101
  " ",
91
102
  "ArrowDown"
92
- ].includes(e.key) && (e.preventDefault(), m());
103
+ ].includes(e.key) && (e.preventDefault(), S());
93
104
  },
94
- className: e(l, "w-56 shrink-0", n ? "cursor-not-allowed opacity-50" : "cursor-pointer", d.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", r),
95
- children: [/* @__PURE__ */ w("div", {
105
+ className: e(f, l[r], "w-56 shrink-0", n ? "cursor-not-allowed opacity-50" : "cursor-pointer", g.open && "border-glow/60 [--glow-border-color:transparent] shadow-glow-focus", a),
106
+ children: [/* @__PURE__ */ O("div", {
96
107
  className: e("flex min-w-0 flex-1 items-center gap-1 overflow-hidden text-sm", n ? "text-muted-foreground" : "text-foreground"),
97
- children: a ?? /* @__PURE__ */ w(A, { placeholder: t })
98
- }), /* @__PURE__ */ w(u, { open: d.open })]
108
+ children: s ?? /* @__PURE__ */ O(P, { placeholder: p })
109
+ }), /* @__PURE__ */ O(m, { open: g.open })]
99
110
  });
100
111
  }
101
- function A({ placeholder: e }) {
102
- let t = D(), n = new Map([...t.selectedItems, ...t.items].map((e) => [t.keyOf(e), e])), a = t.chosen.flatMap((e) => {
103
- let r = n.has(e) ? t.textOf(n.get(e)) : void 0;
104
- return r ? [{
112
+ function P({ placeholder: e }) {
113
+ let t = j(), n = i(), r = new Map([...t.selectedItems, ...t.items].map((e) => [t.keyOf(e), e])), s = t.chosen.flatMap((e) => {
114
+ let n = r.has(e) ? t.textOf(r.get(e)) : void 0;
115
+ return n ? [{
105
116
  key: e,
106
- text: r
117
+ text: n
107
118
  }] : [];
108
119
  });
109
- return a.length ? t.multiple ? /* @__PURE__ */ w(d, {
110
- items: a.map((e) => e.text),
111
- data: a,
120
+ return s.length ? t.multiple ? /* @__PURE__ */ O(h, {
121
+ items: s.map((e) => e.text),
122
+ data: s,
112
123
  badgeVariant: "secondary",
113
124
  badgeClassName: "h-6 min-w-min gap-2",
114
125
  className: "w-full gap-1",
115
- children: (e, n, a) => /* @__PURE__ */ T(r, {
116
- className: "flex h-6 min-w-min gap-2 pr-1",
126
+ children: (e, r, i) => /* @__PURE__ */ k(a, {
127
+ className: "flex h-6 min-w-min gap-2 pe-1",
117
128
  variant: "secondary",
118
- children: [e, /* @__PURE__ */ w(i, {
119
- "aria-label": `Remove ${e}`,
129
+ children: [e, /* @__PURE__ */ O(o, {
130
+ "aria-label": n.remove(e),
120
131
  onClick: (e) => {
121
- e.stopPropagation(), a && t.toggle(a.key);
132
+ e.stopPropagation(), i && t.toggle(i.key);
122
133
  },
123
- variant: "icon",
134
+ variant: "ghost",
124
135
  size: "icon",
125
136
  className: "group relative -top-px size-4 rounded-sm p-0.5",
126
- children: /* @__PURE__ */ w(p, { className: "zen__combobox-remove-icon size-3 transition duration-300 group-hover:rotate-90" })
137
+ children: /* @__PURE__ */ O(_, { className: "zen__combobox-remove-icon size-3 transition duration-300 group-hover:rotate-90" })
127
138
  })]
128
- }, a?.key ?? n)
129
- }) : /* @__PURE__ */ w(C, { children: a[0].text }) : /* @__PURE__ */ w("span", {
130
- className: s,
139
+ }, i?.key ?? r)
140
+ }) : /* @__PURE__ */ O(D, { children: s[0].text }) : /* @__PURE__ */ O("span", {
141
+ className: u,
131
142
  children: e
132
143
  });
133
144
  }
134
- function j({ className: n, children: r }) {
135
- let { popup: i } = D();
136
- return /* @__PURE__ */ w("div", {
145
+ function F({ className: t, children: r }) {
146
+ let { popup: i } = j();
147
+ return /* @__PURE__ */ O("div", {
137
148
  ...i.popupProps,
138
- style: t(i.id, {
149
+ style: n(i.id, {
139
150
  offset: 5,
140
151
  width: "match"
141
152
  }),
142
- className: e("zen__popover", c, "overflow-visible p-0", n),
143
- children: /* @__PURE__ */ w("div", {
153
+ className: e("zen__popover", d, "overflow-visible p-0", t),
154
+ children: /* @__PURE__ */ O("div", {
144
155
  className: "divide-tint/10 flex w-full flex-col divide-y overflow-hidden rounded-xl",
145
156
  children: r
146
157
  })
147
158
  });
148
159
  }
149
- function M({ placeholder: e = "Search", "aria-label": t = "Search options" }) {
150
- let n = D(), r = x(null);
151
- y(() => {
152
- n.popup.open && r.current?.focus();
160
+ function I({ placeholder: e, "aria-label": t }) {
161
+ let n = j(), r = i(), a = T(null);
162
+ C(() => {
163
+ n.popup.open && a.current?.focus();
153
164
  }, [n.popup.open]);
154
- let i = n.matches.map(n.keyOf);
155
- return /* @__PURE__ */ T("div", {
165
+ let o = n.matches.map(n.keyOf);
166
+ return /* @__PURE__ */ k("div", {
156
167
  className: "flex h-10 grow items-center gap-2 px-3",
157
- children: [/* @__PURE__ */ w(m, { children: /* @__PURE__ */ w(f, {}) }), /* @__PURE__ */ w(h, {
158
- ref: r,
159
- placeholder: e,
160
- "aria-label": t,
168
+ children: [/* @__PURE__ */ O(v, { children: /* @__PURE__ */ O(g, {}) }), /* @__PURE__ */ O(y, {
169
+ ref: a,
170
+ placeholder: e ?? r.search,
171
+ "aria-label": t ?? r.searchOptions,
161
172
  "aria-controls": `${n.popup.id}-list`,
162
173
  "aria-activedescendant": n.active === null ? void 0 : n.optionId(n.active),
163
174
  value: n.query,
@@ -165,38 +176,39 @@ function M({ placeholder: e = "Search", "aria-label": t = "Search options" }) {
165
176
  n.setQuery(e.target.value), n.setActive(null);
166
177
  },
167
178
  onKeyDown: (e) => {
168
- let t = n.active === null ? -1 : i.indexOf(n.active), r = (t) => {
169
- if (e.preventDefault(), !i.length) return;
170
- let r = i[(t + i.length) % i.length];
171
- n.setActive(r), N(n.listRef.current, i.indexOf(r), n.itemHeight.current);
179
+ let t = n.active === null ? -1 : o.indexOf(n.active), r = (t) => {
180
+ if (e.preventDefault(), !o.length) return;
181
+ let r = o[(t + o.length) % o.length];
182
+ n.setActive(r), L(n.listRef.current, o.indexOf(r), n.itemHeight.current);
172
183
  };
173
- e.key === "ArrowDown" ? r(t + 1) : e.key === "ArrowUp" ? r(t === -1 ? i.length - 1 : t - 1) : e.key === "Enter" && (e.preventDefault(), n.active === null ? !i.length && n.query && n.create.current && (n.create.current(n.query), n.setQuery("")) : n.toggle(n.active));
184
+ e.key === "ArrowDown" ? r(t + 1) : e.key === "ArrowUp" ? r(t === -1 ? o.length - 1 : t - 1) : e.key === "Enter" && (e.preventDefault(), n.active === null ? !o.length && n.query && n.create.current && (n.create.current(n.query), n.setQuery("")) : n.toggle(n.active));
174
185
  }
175
186
  })]
176
187
  });
177
188
  }
178
- var N = (e, t, n) => {
189
+ var L = (e, t, n) => {
179
190
  if (!e || t < 0) return;
180
191
  let r = t * n;
181
192
  r < e.scrollTop ? e.scrollTop = r : r + n > e.scrollTop + e.clientHeight && (e.scrollTop = r + n - e.clientHeight);
182
- }, P = _(null);
183
- function F({ renderItem: e, itemHeight: t = 35, children: n }) {
184
- let r = D();
193
+ }, R = x(null);
194
+ function z({ renderItem: e, itemHeight: t = 35, children: n }) {
195
+ let r = j();
185
196
  r.itemHeight.current = t;
186
- let i = g({
197
+ let i = b({
187
198
  count: r.matches.length,
188
199
  itemHeight: t,
189
200
  scrollRef: r.listRef
190
201
  });
191
- return y(() => {
202
+ return C(() => {
192
203
  r.listRef.current && (r.listRef.current.scrollTop = 0);
193
- }, [r.query, r.listRef]), /* @__PURE__ */ T("ul", {
204
+ }, [r.query, r.listRef]), /* @__PURE__ */ k("ul", {
194
205
  id: `${r.popup.id}-list`,
195
206
  role: "listbox",
207
+ "aria-labelledby": r.listLabelledBy,
196
208
  "aria-multiselectable": r.multiple || void 0,
197
209
  className: "max-h-72 grow overflow-y-auto py-1 focus:ring-0 focus:outline-hidden",
198
210
  ref: r.listRef,
199
- children: [/* @__PURE__ */ w("div", {
211
+ children: [/* @__PURE__ */ O("div", {
200
212
  style: {
201
213
  height: `${i.totalSize}px`,
202
214
  width: "100%",
@@ -204,61 +216,61 @@ function F({ renderItem: e, itemHeight: t = 35, children: n }) {
204
216
  },
205
217
  children: i.items.map((t) => {
206
218
  let n = r.matches[t.index];
207
- return /* @__PURE__ */ w(P.Provider, {
219
+ return /* @__PURE__ */ O(R.Provider, {
208
220
  value: {
209
221
  start: t.start,
210
222
  size: t.size
211
223
  },
212
- children: e ? e(n) : /* @__PURE__ */ w(I, { item: n })
224
+ children: e ? e(n) : /* @__PURE__ */ O(B, { item: n })
213
225
  }, r.keyOf(n));
214
226
  })
215
227
  }), n]
216
228
  });
217
229
  }
218
- function I({ item: t, className: n, children: r }) {
219
- let i = D(), o = v(P), s = i.keyOf(t), c = i.chosen.includes(s);
220
- return /* @__PURE__ */ T("li", {
221
- id: i.optionId(s),
230
+ function B({ item: t, className: n, children: r }) {
231
+ let i = j(), a = S(R), o = i.keyOf(t), c = i.chosen.includes(o);
232
+ return /* @__PURE__ */ k("li", {
233
+ id: i.optionId(o),
222
234
  role: "option",
223
235
  "aria-selected": c,
224
- "data-highlighted": i.active === s || void 0,
225
- style: o ? {
226
- height: `${o.size}px`,
227
- transform: `translateY(${o.start}px)`
236
+ "data-highlighted": i.active === o || void 0,
237
+ style: a ? {
238
+ height: `${a.size}px`,
239
+ transform: `translateY(${a.start}px)`
228
240
  } : void 0,
229
- onMouseMove: () => i.active !== s && i.setActive(s),
230
- onClick: () => i.toggle(s),
231
- className: e("hover:bg-muted data-highlighted:bg-muted grid w-full cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 px-3 py-2 text-sm outline-hidden select-none", o && "absolute top-0 left-0", n),
232
- children: [/* @__PURE__ */ w("span", {
241
+ onMouseMove: () => i.active !== o && i.setActive(o),
242
+ onClick: () => i.toggle(o),
243
+ className: e("hover:bg-muted data-highlighted:bg-muted grid w-full cursor-pointer grid-cols-[1rem_1fr] items-center gap-2 px-3 py-2 text-sm outline-hidden select-none", a && "absolute top-0 left-0", n),
244
+ children: [/* @__PURE__ */ O("span", {
233
245
  className: "text-primary col-start-1",
234
246
  "aria-hidden": !0,
235
- children: c && /* @__PURE__ */ w(a, {})
236
- }), /* @__PURE__ */ w("span", {
247
+ children: c && /* @__PURE__ */ O(s, {})
248
+ }), /* @__PURE__ */ O("span", {
237
249
  className: "col-start-2 truncate",
238
250
  children: r ?? i.textOf(t)
239
251
  })]
240
252
  });
241
253
  }
242
- function L({ children: e = "No results found" }) {
243
- let t = D();
244
- return !t.query || t.matches.length ? null : /* @__PURE__ */ w("li", {
254
+ function V({ children: e }) {
255
+ let t = j(), n = i();
256
+ return !t.query || t.matches.length ? null : /* @__PURE__ */ O("li", {
245
257
  className: "text-muted-foreground cursor-not-allowed px-3 py-2 text-sm",
246
- children: e
258
+ children: e ?? n.noResults
247
259
  });
248
260
  }
249
- function R({ onCreate: e, children: t = (e) => `Add ${e}` }) {
250
- let n = D(), { create: r } = n;
251
- return y(() => (r.current = e, () => {
252
- r.current = null;
253
- }), [r, e]), !n.query || n.matches.length ? null : /* @__PURE__ */ w("li", {
261
+ function H({ onCreate: e, children: t }) {
262
+ let n = j(), r = i(), { create: a } = n;
263
+ return C(() => (a.current = e, () => {
264
+ a.current = null;
265
+ }), [a, e]), !n.query || n.matches.length ? null : /* @__PURE__ */ O("li", {
254
266
  role: "option",
255
267
  "aria-selected": !1,
256
268
  className: "hover:bg-muted cursor-pointer px-3 py-2 text-sm select-none",
257
269
  onClick: () => {
258
270
  e(n.query), n.setQuery("");
259
271
  },
260
- children: t(n.query)
272
+ children: (t ?? r.add)(n.query)
261
273
  });
262
274
  }
263
275
  //#endregion
264
- export { R as ComboboxCreate, L as ComboboxEmpty, I as ComboboxItem, F as ComboboxList, j as ComboboxPopup, M as ComboboxSearch, k as ComboboxTrigger, O as default };
276
+ export { H as ComboboxCreate, V as ComboboxEmpty, B as ComboboxItem, z as ComboboxList, F as ComboboxPopup, I as ComboboxSearch, N as ComboboxTrigger, M as default };
@@ -1,11 +1,11 @@
1
- import { ReactNode } from 'react';
1
+ import { ComponentProps, ReactNode } from 'react';
2
2
  /**
3
3
  * Search everything and act on it (pages, commands, records): a field over a
4
4
  * list that narrows as you type. Arrow keys move, Enter runs the item and
5
5
  * closes. Open it from a button, or anywhere with ⌘K / Ctrl+K
6
6
  * (useCommandPaletteShortcut).
7
7
  */
8
- export default function CommandPalette({ open, onOpenChange, items, placeholder, empty, label, className, }: CommandPaletteProps): import('react').JSX.Element;
8
+ export default function CommandPalette({ open, onOpenChange, items, placeholder: placeholderProp, empty: emptyProp, label: labelProp, className, ref: refProp, ...rest }: CommandPaletteProps): import('react').JSX.Element;
9
9
  /** The items matching `query`: each of its words is in the label or keywords. Labels starting with it come first. */
10
10
  export declare function search(items: CommandItem[], query: string): CommandItem[];
11
11
  /** Calls `open` on ⌘K (Mac) or Ctrl+K, anywhere on the page. */
@@ -23,7 +23,8 @@ export interface CommandItem {
23
23
  hint?: ReactNode;
24
24
  onSelect: () => void;
25
25
  }
26
- export interface CommandPaletteProps {
26
+ /** Other props (data-*, an id) go on the <dialog>. */
27
+ export interface CommandPaletteProps extends Omit<ComponentProps<'dialog'>, 'open' | 'children'> {
27
28
  open: boolean;
28
29
  onOpenChange: (open: boolean) => void;
29
30
  items: CommandItem[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/command-palette/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAiB,SAAS,EAA+C,MAAM,OAAO,CAAC;AAE9F;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAuB,EACvB,KAAoB,EACpB,KAAkB,EAClB,SAAS,GACZ,EAAE,mBAAmB,+BAoIrB;AAED,qHAAqH;AACrH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAUzE;AAED,gEAAgE;AAChE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,GAAG,SAAM,GAAG,IAAI,CAc3E;AAED,MAAM,WAAW,WAAW;IACxB,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAChC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/command-palette/index.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAiB,SAAS,EAA+C,MAAM,OAAO,CAAC;AAE9G;;;;;GAKG;AACH,MAAM,CAAC,OAAO,UAAU,cAAc,CAAC,EACnC,IAAI,EACJ,YAAY,EACZ,KAAK,EACL,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,SAAS,EACT,GAAG,EAAE,OAAO,EACZ,GAAG,IAAI,EACV,EAAE,mBAAmB,+BA0IrB;AAED,qHAAqH;AACrH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAUzE;AAED,gEAAgE;AAChE,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,GAAG,SAAM,GAAG,IAAI,CAc3E;AAED,MAAM,WAAW,WAAW;IACxB,oDAAoD;IACpD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5F,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB"}
@@ -1,88 +1,91 @@
1
1
  "use client";
2
2
  import { cx as e } from "../utils/cx.js";
3
- import { useModal as t } from "../dialog/index.js";
4
- import { useEffect as n, useId as r, useMemo as i, useRef as a, useState as o } from "react";
5
- import { jsx as s, jsxs as c } from "react/jsx-runtime";
3
+ import { useMergedRefs as t } from "../utils/refs.js";
4
+ import { useMessages as n } from "../locale-provider/index.js";
5
+ import { useModal as r } from "../dialog/index.js";
6
+ import { useEffect as i, useId as a, useMemo as o, useRef as s, useState as c } from "react";
7
+ import { jsx as l, jsxs as u } from "react/jsx-runtime";
6
8
  //#region packages/command-palette/index.tsx
7
- function l({ open: l, onOpenChange: d, items: f, placeholder: p = "Search…", empty: m = "No results", label: h = "Commands", className: g }) {
8
- let _ = a(null), v = a(null), y = a(null), b = r(), [x, S] = o(""), [C, w] = o(0);
9
- t(_, l, v);
10
- let [T, E] = o(l);
11
- l !== T && (E(l), l && (S(""), w(0)));
12
- let D = i(() => u(f, x), [f, x]), O = i(() => {
9
+ function d({ open: d, onOpenChange: p, items: m, placeholder: h, empty: g, label: _, className: v, ref: y, ...b }) {
10
+ let x = n(), S = h ?? x.search, C = g ?? x.noResults, w = _ ?? x.commands, T = s(null), E = t(T, y), D = s(null), O = s(null), k = a(), [A, j] = c(""), [M, N] = c(0);
11
+ r(T, d, D);
12
+ let [P, F] = c(d);
13
+ d !== P && (F(d), d && (j(""), N(0)));
14
+ let I = o(() => f(m, A), [m, A]), L = o(() => {
13
15
  let e = /* @__PURE__ */ new Map();
14
- return D.forEach((t, n) => {
16
+ return I.forEach((t, n) => {
15
17
  let r = t.group ?? "";
16
18
  e.set(r, [...e.get(r) ?? [], {
17
19
  item: t,
18
20
  index: n
19
21
  }]);
20
22
  }), e;
21
- }, [D]), k = Math.min(C, D.length - 1);
22
- n(() => {
23
- y.current?.querySelector(`[data-index="${k}"]`)?.scrollIntoView({ block: "nearest" });
24
- }, [k]);
25
- let A = (e) => {
26
- e && (d(!1), e.onSelect());
23
+ }, [I]), R = Math.min(M, I.length - 1);
24
+ i(() => {
25
+ O.current?.querySelector(`[data-index="${R}"]`)?.scrollIntoView({ block: "nearest" });
26
+ }, [R]);
27
+ let z = (e) => {
28
+ e && (p(!1), e.onSelect());
29
+ }, B = (e) => {
30
+ let t = I.length - 1, n = e.key === "ArrowDown" ? (R + 1) % (t + 1) : e.key === "ArrowUp" ? (R - 1 + t + 1) % (t + 1) : e.key === "Home" && e.ctrlKey ? 0 : e.key === "End" && e.ctrlKey ? t : null;
31
+ n !== null && I.length ? (e.preventDefault(), N(n)) : e.key === "Enter" && (e.preventDefault(), z(I[R]));
27
32
  };
28
- return /* @__PURE__ */ c("dialog", {
29
- ref: _,
30
- "aria-label": h,
31
- className: e("zen__dialog zen__command-palette glass glass-blur glow-edge text-card-foreground bg-card/90! overflow-hidden p-0", "mx-auto mt-[12dvh] mb-auto w-[36rem] max-w-[calc(100vw-2rem)] rounded-xl", "backdrop:bg-[color:var(--backdrop-scrim,oklch(0_0_0/0.5))] backdrop:backdrop-blur-sm pointer-coarse:backdrop:backdrop-blur-none", g),
33
+ return /* @__PURE__ */ u("dialog", {
34
+ ...b,
35
+ ref: E,
36
+ "aria-label": w,
37
+ className: e("zen__dialog zen__command-palette glass glass-blur glow-edge text-card-foreground bg-card/90! overflow-hidden p-0", "mx-auto mt-[12dvh] mb-auto w-[36rem] max-w-[calc(100vw-2rem)] rounded-xl", "backdrop:bg-[color:var(--backdrop-scrim,oklch(0_0_0/0.5))] backdrop:backdrop-blur-sm pointer-coarse:backdrop:backdrop-blur-none", v),
32
38
  onCancel: (e) => {
33
- e.preventDefault(), d(!1);
39
+ e.preventDefault(), p(!1);
34
40
  },
35
- onClick: (e) => e.target === e.currentTarget && d(!1),
36
- children: [/* @__PURE__ */ s("input", {
37
- ref: v,
41
+ onClick: (e) => e.target === e.currentTarget && p(!1),
42
+ children: [/* @__PURE__ */ l("input", {
43
+ ref: D,
38
44
  role: "combobox",
39
45
  "aria-expanded": !0,
40
- "aria-controls": `${b}-list`,
41
- "aria-activedescendant": D.length ? `${b}-${k}` : void 0,
46
+ "aria-controls": `${k}-list`,
47
+ "aria-activedescendant": I.length ? `${k}-${R}` : void 0,
42
48
  "aria-autocomplete": "list",
43
- "aria-label": h,
44
- placeholder: p,
45
- value: x,
49
+ "aria-label": w,
50
+ placeholder: S,
51
+ value: A,
46
52
  onChange: (e) => {
47
- S(e.target.value), w(0);
48
- },
49
- onKeyDown: (e) => {
50
- let t = D.length - 1, n = e.key === "ArrowDown" ? (k + 1) % (t + 1) : e.key === "ArrowUp" ? (k - 1 + t + 1) % (t + 1) : e.key === "Home" && e.ctrlKey ? 0 : e.key === "End" && e.ctrlKey ? t : null;
51
- n !== null && D.length ? (e.preventDefault(), w(n)) : e.key === "Enter" && (e.preventDefault(), A(D[k]));
53
+ j(e.target.value), N(0);
52
54
  },
55
+ onKeyDown: B,
53
56
  className: "border-tint/[0.07] h-14 w-full border-b bg-transparent px-5 text-base outline-hidden placeholder:text-[color:oklch(var(--muted-foreground)/var(--zen-placeholder))]"
54
- }), /* @__PURE__ */ c("div", {
55
- ref: y,
56
- id: `${b}-list`,
57
+ }), /* @__PURE__ */ u("div", {
58
+ ref: O,
59
+ id: `${k}-list`,
57
60
  role: "listbox",
58
- "aria-label": h,
61
+ "aria-label": w,
59
62
  className: "max-h-[min(24rem,60dvh)] overflow-y-auto p-2",
60
- children: [!D.length && /* @__PURE__ */ s("p", {
63
+ children: [!I.length && /* @__PURE__ */ l("p", {
61
64
  className: "text-muted-foreground my-0! px-3 py-8 text-center text-sm",
62
- children: m
63
- }), [...O].map(([e, t]) => /* @__PURE__ */ c("div", {
65
+ children: C
66
+ }), [...L].map(([e, t]) => /* @__PURE__ */ u("div", {
64
67
  role: "group",
65
68
  "aria-label": e || void 0,
66
69
  className: "not-first:mt-2",
67
- children: [e && /* @__PURE__ */ s("div", {
70
+ children: [e && /* @__PURE__ */ l("div", {
68
71
  "aria-hidden": !0,
69
72
  className: "text-muted-foreground text-2xs px-3 pt-2 pb-1 tracking-widest uppercase",
70
73
  children: e
71
- }), t.map(({ item: e, index: t }) => /* @__PURE__ */ c("div", {
72
- id: `${b}-${t}`,
74
+ }), t.map(({ item: e, index: t }) => /* @__PURE__ */ u("div", {
75
+ id: `${k}-${t}`,
73
76
  "data-index": t,
74
77
  role: "option",
75
- "aria-selected": t === k,
76
- onPointerMove: () => t !== k && w(t),
77
- onClick: () => A(e),
78
+ "aria-selected": t === R,
79
+ onPointerMove: () => t !== R && N(t),
80
+ onClick: () => z(e),
78
81
  className: "text-muted-foreground aria-selected:bg-primary/15 aria-selected:text-foreground flex cursor-pointer items-center gap-3 rounded-lg px-3 py-2.5 text-sm aria-selected:shadow-[inset_0_0_0_1px_oklch(var(--primary)/0.25)] [&_svg]:size-4 [&_svg]:shrink-0",
79
82
  children: [
80
83
  e.icon,
81
- /* @__PURE__ */ s("span", {
84
+ /* @__PURE__ */ l("span", {
82
85
  className: "min-w-0 flex-1 truncate",
83
86
  children: e.label
84
87
  }),
85
- e.hint && /* @__PURE__ */ s("span", {
88
+ e.hint && /* @__PURE__ */ l("span", {
86
89
  className: "text-muted-foreground text-xs",
87
90
  children: e.hint
88
91
  })
@@ -92,7 +95,7 @@ function l({ open: l, onOpenChange: d, items: f, placeholder: p = "Search…", e
92
95
  })]
93
96
  });
94
97
  }
95
- function u(e, t) {
98
+ function f(e, t) {
96
99
  let n = t.toLowerCase().split(/\s+/).filter(Boolean);
97
100
  if (!n.length) return e;
98
101
  let r = t.trim().toLowerCase(), i = e.filter((e) => {
@@ -105,16 +108,16 @@ function u(e, t) {
105
108
  }), a = (e) => +!e.label.toLowerCase().startsWith(r);
106
109
  return i.sort((e, t) => a(e) - a(t));
107
110
  }
108
- function d(e, t = "k") {
109
- let r = a(e);
110
- n(() => {
111
- r.current = e;
112
- }), n(() => {
111
+ function p(e, t = "k") {
112
+ let n = s(e);
113
+ i(() => {
114
+ n.current = e;
115
+ }), i(() => {
113
116
  let e = (e) => {
114
- e.key.toLowerCase() !== t || !(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey || (e.preventDefault(), r.current());
117
+ e.key.toLowerCase() !== t || !(e.metaKey || e.ctrlKey) || e.altKey || e.shiftKey || (e.preventDefault(), n.current());
115
118
  };
116
119
  return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
117
120
  }, [t]);
118
121
  }
119
122
  //#endregion
120
- export { l as default, u as search, d as useCommandPaletteShortcut };
123
+ export { d as default, f as search, p as useCommandPaletteShortcut };