@craftzbay/ui 0.10.0 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/README.md +18 -12
  2. package/dist-lib/__tests__/helpers/color.d.ts +9 -0
  3. package/dist-lib/__tests__/helpers/theme.d.ts +18 -0
  4. package/dist-lib/components/ui/Accordion.js +18 -7
  5. package/dist-lib/components/ui/Accordion.js.map +1 -1
  6. package/dist-lib/components/ui/Alert.d.ts +16 -0
  7. package/dist-lib/components/ui/Alert.js +47 -34
  8. package/dist-lib/components/ui/Alert.js.map +1 -1
  9. package/dist-lib/components/ui/Avatar.d.ts +1 -1
  10. package/dist-lib/components/ui/Avatar.js +45 -47
  11. package/dist-lib/components/ui/Avatar.js.map +1 -1
  12. package/dist-lib/components/ui/Badge.d.ts +3 -1
  13. package/dist-lib/components/ui/Badge.js +24 -15
  14. package/dist-lib/components/ui/Badge.js.map +1 -1
  15. package/dist-lib/components/ui/Breadcrumbs.d.ts +2 -0
  16. package/dist-lib/components/ui/Breadcrumbs.js +46 -28
  17. package/dist-lib/components/ui/Breadcrumbs.js.map +1 -1
  18. package/dist-lib/components/ui/Button.d.ts +5 -3
  19. package/dist-lib/components/ui/Button.js +59 -45
  20. package/dist-lib/components/ui/Button.js.map +1 -1
  21. package/dist-lib/components/ui/Calendar.d.ts +1 -1
  22. package/dist-lib/components/ui/Calendar.js +87 -59
  23. package/dist-lib/components/ui/Calendar.js.map +1 -1
  24. package/dist-lib/components/ui/Card.d.ts +2 -0
  25. package/dist-lib/components/ui/Card.js +48 -67
  26. package/dist-lib/components/ui/Card.js.map +1 -1
  27. package/dist-lib/components/ui/Carousel.d.ts +6 -6
  28. package/dist-lib/components/ui/Carousel.js +133 -102
  29. package/dist-lib/components/ui/Carousel.js.map +1 -1
  30. package/dist-lib/components/ui/Chart.d.ts +49 -10
  31. package/dist-lib/components/ui/Chart.js +415 -181
  32. package/dist-lib/components/ui/Chart.js.map +1 -1
  33. package/dist-lib/components/ui/Checkbox.js +42 -28
  34. package/dist-lib/components/ui/Checkbox.js.map +1 -1
  35. package/dist-lib/components/ui/Combobox.d.ts +2 -0
  36. package/dist-lib/components/ui/Combobox.js +142 -111
  37. package/dist-lib/components/ui/Combobox.js.map +1 -1
  38. package/dist-lib/components/ui/CommandPalette.d.ts +6 -3
  39. package/dist-lib/components/ui/CommandPalette.js +92 -87
  40. package/dist-lib/components/ui/CommandPalette.js.map +1 -1
  41. package/dist-lib/components/ui/ContextMenu.d.ts +7 -2
  42. package/dist-lib/components/ui/ContextMenu.js +77 -62
  43. package/dist-lib/components/ui/ContextMenu.js.map +1 -1
  44. package/dist-lib/components/ui/DataGrid.d.ts +17 -4
  45. package/dist-lib/components/ui/DataGrid.js +65 -50
  46. package/dist-lib/components/ui/DataGrid.js.map +1 -1
  47. package/dist-lib/components/ui/DatePicker.js +118 -99
  48. package/dist-lib/components/ui/DatePicker.js.map +1 -1
  49. package/dist-lib/components/ui/DesignSystemProvider.d.ts +94 -40
  50. package/dist-lib/components/ui/DesignSystemProvider.js +111 -55
  51. package/dist-lib/components/ui/DesignSystemProvider.js.map +1 -1
  52. package/dist-lib/components/ui/Dialog.d.ts +18 -3
  53. package/dist-lib/components/ui/Dialog.js +105 -80
  54. package/dist-lib/components/ui/Dialog.js.map +1 -1
  55. package/dist-lib/components/ui/Drawer.d.ts +17 -2
  56. package/dist-lib/components/ui/Drawer.js +89 -55
  57. package/dist-lib/components/ui/Drawer.js.map +1 -1
  58. package/dist-lib/components/ui/DropdownMenu.js +14 -9
  59. package/dist-lib/components/ui/DropdownMenu.js.map +1 -1
  60. package/dist-lib/components/ui/EmptyState.d.ts +2 -0
  61. package/dist-lib/components/ui/EmptyState.js +30 -16
  62. package/dist-lib/components/ui/EmptyState.js.map +1 -1
  63. package/dist-lib/components/ui/ErrorState.d.ts +13 -2
  64. package/dist-lib/components/ui/ErrorState.js +44 -23
  65. package/dist-lib/components/ui/ErrorState.js.map +1 -1
  66. package/dist-lib/components/ui/FileUpload.js +59 -56
  67. package/dist-lib/components/ui/FileUpload.js.map +1 -1
  68. package/dist-lib/components/ui/Form.d.ts +15 -2
  69. package/dist-lib/components/ui/Form.js +97 -71
  70. package/dist-lib/components/ui/Form.js.map +1 -1
  71. package/dist-lib/components/ui/Icon.d.ts +1 -1
  72. package/dist-lib/components/ui/Icon.js +20 -14
  73. package/dist-lib/components/ui/Icon.js.map +1 -1
  74. package/dist-lib/components/ui/IconButton.d.ts +2 -2
  75. package/dist-lib/components/ui/IconButton.js +28 -20
  76. package/dist-lib/components/ui/IconButton.js.map +1 -1
  77. package/dist-lib/components/ui/Input.d.ts +3 -1
  78. package/dist-lib/components/ui/Input.js +102 -79
  79. package/dist-lib/components/ui/Input.js.map +1 -1
  80. package/dist-lib/components/ui/Kbd.js +1 -1
  81. package/dist-lib/components/ui/Kbd.js.map +1 -1
  82. package/dist-lib/components/ui/MultiSelect.js +121 -107
  83. package/dist-lib/components/ui/MultiSelect.js.map +1 -1
  84. package/dist-lib/components/ui/Pagination.js +67 -62
  85. package/dist-lib/components/ui/Pagination.js.map +1 -1
  86. package/dist-lib/components/ui/Popover.js +14 -14
  87. package/dist-lib/components/ui/Popover.js.map +1 -1
  88. package/dist-lib/components/ui/Progress.d.ts +3 -3
  89. package/dist-lib/components/ui/Progress.js +77 -72
  90. package/dist-lib/components/ui/Progress.js.map +1 -1
  91. package/dist-lib/components/ui/RadioGroup.d.ts +1 -1
  92. package/dist-lib/components/ui/RadioGroup.js +69 -52
  93. package/dist-lib/components/ui/RadioGroup.js.map +1 -1
  94. package/dist-lib/components/ui/RelativeTime.d.ts +19 -0
  95. package/dist-lib/components/ui/RelativeTime.js +31 -0
  96. package/dist-lib/components/ui/RelativeTime.js.map +1 -0
  97. package/dist-lib/components/ui/ScrollArea.d.ts +9 -1
  98. package/dist-lib/components/ui/ScrollArea.js +43 -27
  99. package/dist-lib/components/ui/ScrollArea.js.map +1 -1
  100. package/dist-lib/components/ui/Select.d.ts +6 -1
  101. package/dist-lib/components/ui/Select.js +79 -71
  102. package/dist-lib/components/ui/Select.js.map +1 -1
  103. package/dist-lib/components/ui/Separator.js +1 -1
  104. package/dist-lib/components/ui/Separator.js.map +1 -1
  105. package/dist-lib/components/ui/Sheet.d.ts +9 -0
  106. package/dist-lib/components/ui/Sheet.js +69 -46
  107. package/dist-lib/components/ui/Sheet.js.map +1 -1
  108. package/dist-lib/components/ui/Sidebar.d.ts +12 -9
  109. package/dist-lib/components/ui/Sidebar.js +152 -109
  110. package/dist-lib/components/ui/Sidebar.js.map +1 -1
  111. package/dist-lib/components/ui/Skeleton.d.ts +13 -2
  112. package/dist-lib/components/ui/Skeleton.js +15 -14
  113. package/dist-lib/components/ui/Skeleton.js.map +1 -1
  114. package/dist-lib/components/ui/Slider.js +41 -29
  115. package/dist-lib/components/ui/Slider.js.map +1 -1
  116. package/dist-lib/components/ui/Snackbar.js +23 -22
  117. package/dist-lib/components/ui/Snackbar.js.map +1 -1
  118. package/dist-lib/components/ui/Spinner.js +18 -6
  119. package/dist-lib/components/ui/Spinner.js.map +1 -1
  120. package/dist-lib/components/ui/Stepper.d.ts +6 -0
  121. package/dist-lib/components/ui/Stepper.js +71 -48
  122. package/dist-lib/components/ui/Stepper.js.map +1 -1
  123. package/dist-lib/components/ui/Switch.js +46 -43
  124. package/dist-lib/components/ui/Switch.js.map +1 -1
  125. package/dist-lib/components/ui/Table.d.ts +33 -5
  126. package/dist-lib/components/ui/Table.js +141 -119
  127. package/dist-lib/components/ui/Table.js.map +1 -1
  128. package/dist-lib/components/ui/Tabs.js +50 -48
  129. package/dist-lib/components/ui/Tabs.js.map +1 -1
  130. package/dist-lib/components/ui/TagInput.js +45 -45
  131. package/dist-lib/components/ui/TagInput.js.map +1 -1
  132. package/dist-lib/components/ui/Textarea.js +65 -54
  133. package/dist-lib/components/ui/Textarea.js.map +1 -1
  134. package/dist-lib/components/ui/Timeline.js +39 -35
  135. package/dist-lib/components/ui/Timeline.js.map +1 -1
  136. package/dist-lib/components/ui/Toast.js +44 -57
  137. package/dist-lib/components/ui/Toast.js.map +1 -1
  138. package/dist-lib/components/ui/Tooltip.d.ts +4 -1
  139. package/dist-lib/components/ui/Tooltip.js +24 -22
  140. package/dist-lib/components/ui/Tooltip.js.map +1 -1
  141. package/dist-lib/components/ui/TopNav.d.ts +7 -3
  142. package/dist-lib/components/ui/TopNav.js +39 -22
  143. package/dist-lib/components/ui/TopNav.js.map +1 -1
  144. package/dist-lib/components/ui/Tree.d.ts +15 -10
  145. package/dist-lib/components/ui/Tree.js +82 -79
  146. package/dist-lib/components/ui/Tree.js.map +1 -1
  147. package/dist-lib/hooks/use-debounce.d.ts +19 -0
  148. package/dist-lib/hooks/use-debounce.js +36 -0
  149. package/dist-lib/hooks/use-debounce.js.map +1 -0
  150. package/dist-lib/hooks/use-delayed-loading.d.ts +21 -0
  151. package/dist-lib/hooks/use-delayed-loading.js +20 -0
  152. package/dist-lib/hooks/use-delayed-loading.js.map +1 -0
  153. package/dist-lib/hooks/use-field-ids.d.ts +2 -1
  154. package/dist-lib/hooks/use-field-ids.js +9 -9
  155. package/dist-lib/hooks/use-field-ids.js.map +1 -1
  156. package/dist-lib/hooks/use-media-query.d.ts +3 -1
  157. package/dist-lib/hooks/use-media-query.js +16 -12
  158. package/dist-lib/hooks/use-media-query.js.map +1 -1
  159. package/dist-lib/hooks/use-modifier-key.d.ts +13 -0
  160. package/dist-lib/hooks/use-modifier-key.js +19 -0
  161. package/dist-lib/hooks/use-modifier-key.js.map +1 -0
  162. package/dist-lib/hooks/use-toast.d.ts +7 -2
  163. package/dist-lib/hooks/use-toast.js +61 -30
  164. package/dist-lib/hooks/use-toast.js.map +1 -1
  165. package/dist-lib/icons/index.d.ts +9 -0
  166. package/dist-lib/icons/index.js +148 -130
  167. package/dist-lib/icons/index.js.map +1 -1
  168. package/dist-lib/illustrations/index.d.ts +1 -0
  169. package/dist-lib/illustrations/index.js +15 -6
  170. package/dist-lib/illustrations/index.js.map +1 -1
  171. package/dist-lib/index.d.ts +6 -0
  172. package/dist-lib/index.js +280 -260
  173. package/dist-lib/index.js.map +1 -1
  174. package/dist-lib/lib/format.d.ts +65 -0
  175. package/dist-lib/lib/format.js +95 -0
  176. package/dist-lib/lib/format.js.map +1 -0
  177. package/dist-lib/lib/return-focus.d.ts +11 -0
  178. package/dist-lib/lib/return-focus.js +12 -0
  179. package/dist-lib/lib/return-focus.js.map +1 -0
  180. package/dist-lib/lib/strings.d.ts +62 -1
  181. package/dist-lib/lib/strings.js +75 -19
  182. package/dist-lib/lib/strings.js.map +1 -1
  183. package/dist-lib/lib/strings.mn.js +50 -5
  184. package/dist-lib/lib/strings.mn.js.map +1 -1
  185. package/dist-lib/styles.css +1 -1
  186. package/dist-lib/theme.css +141 -78
  187. package/package.json +11 -4
@@ -1,174 +1,179 @@
1
1
  "use client";
2
- import { jsx as n, jsxs as l } from "react/jsx-runtime";
3
- import { forwardRef as d, useState as p, useEffect as f } from "react";
2
+ import { jsx as a, jsxs as u } from "react/jsx-runtime";
3
+ import { forwardRef as d, useRef as x, useEffect as y } from "react";
4
4
  import { Command as m } from "cmdk";
5
- import * as i from "@radix-ui/react-dialog";
6
- import { Search as g } from "../../icons/index.js";
5
+ import * as l from "@radix-ui/react-dialog";
6
+ import { Search as C } from "../../icons/index.js";
7
7
  import { cn as r } from "../../lib/utils.js";
8
- import { useStrings as x } from "../../hooks/use-strings.js";
9
- const u = d(function({ className: e, ...t }, o) {
10
- return /* @__PURE__ */ n(
8
+ import { useStrings as p } from "../../hooks/use-strings.js";
9
+ const f = d(function({ className: t, ...e }, o) {
10
+ return /* @__PURE__ */ a(
11
11
  m,
12
12
  {
13
13
  ref: o,
14
14
  className: r(
15
- "flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground",
16
- e
15
+ "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-lg",
16
+ t
17
17
  ),
18
- ...t
18
+ ...e
19
19
  }
20
20
  );
21
21
  });
22
- u.displayName = "Command";
23
- const y = d(function({ className: e, ...t }, o) {
24
- return /* @__PURE__ */ l("div", { className: "flex items-center gap-2 border-b border-border px-3", "cmdk-input-wrapper": "", children: [
25
- /* @__PURE__ */ n(g, { className: "size-4 shrink-0 text-foreground-subtle", "aria-hidden": !0 }),
26
- /* @__PURE__ */ n(
22
+ f.displayName = "Command";
23
+ const b = d(function({ className: t, ...e }, o) {
24
+ return /* @__PURE__ */ u("div", { className: "border-border flex items-center gap-2 border-b px-3", "cmdk-input-wrapper": "", children: [
25
+ /* @__PURE__ */ a(C, { className: "text-foreground-subtle size-4 shrink-0", "aria-hidden": !0 }),
26
+ /* @__PURE__ */ a(
27
27
  m.Input,
28
28
  {
29
29
  ref: o,
30
30
  className: r(
31
- "flex h-11 w-full bg-transparent py-3 text-sm outline-none",
31
+ "flex h-11 w-full bg-transparent py-3 text-lg outline-none md:text-sm",
32
32
  "placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50",
33
- e
33
+ t
34
34
  ),
35
- ...t
35
+ ...e
36
36
  }
37
37
  )
38
38
  ] });
39
39
  });
40
- y.displayName = "CommandInput";
41
- const b = d(function({ className: e, ...t }, o) {
42
- return /* @__PURE__ */ n(
40
+ b.displayName = "CommandInput";
41
+ const h = d(function({ className: t, label: e, ...o }, i) {
42
+ const s = p();
43
+ return /* @__PURE__ */ a(
43
44
  m.List,
44
45
  {
45
- ref: o,
46
- className: r("max-h-[320px] overflow-y-auto p-1", e),
47
- ...t
46
+ ref: i,
47
+ label: e ?? s.command.suggestions,
48
+ className: r("max-h-[320px] overflow-y-auto p-1", t),
49
+ ...o
48
50
  }
49
51
  );
50
52
  });
51
- b.displayName = "CommandList";
52
- const C = d(function(e, t) {
53
- return /* @__PURE__ */ n(
53
+ h.displayName = "CommandList";
54
+ const v = d(function({ className: t, ...e }, o) {
55
+ return /* @__PURE__ */ a(
54
56
  m.Empty,
55
57
  {
56
- ref: t,
57
- className: "py-8 text-center text-sm text-foreground-subtle",
58
+ ref: o,
59
+ className: r("text-foreground-subtle py-8 text-center text-sm", t),
58
60
  ...e
59
61
  }
60
62
  );
61
63
  });
62
- C.displayName = "CommandEmpty";
63
- const h = d(function({ className: e, ...t }, o) {
64
- return /* @__PURE__ */ n(
64
+ v.displayName = "CommandEmpty";
65
+ const N = d(function({ className: t, ...e }, o) {
66
+ return /* @__PURE__ */ a(
65
67
  m.Group,
66
68
  {
67
69
  ref: o,
68
70
  className: r(
69
- "overflow-hidden text-foreground p-1",
71
+ "text-foreground overflow-hidden p-1",
70
72
  "[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5",
71
73
  "[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
72
74
  "[&_[cmdk-group-heading]]:text-foreground-subtle",
73
- e
75
+ t
74
76
  ),
75
- ...t
77
+ ...e
76
78
  }
77
79
  );
78
80
  });
79
- h.displayName = "CommandGroup";
80
- const v = d(function({ className: e, ...t }, o) {
81
- return /* @__PURE__ */ n(
82
- m.Separator,
83
- {
84
- ref: o,
85
- className: r("-mx-1 my-1 h-px bg-border", e),
86
- ...t
87
- }
88
- );
81
+ N.displayName = "CommandGroup";
82
+ const w = d(function({ className: t, ...e }, o) {
83
+ return /* @__PURE__ */ a(m.Separator, { ref: o, asChild: !0, ...e, children: /* @__PURE__ */ a("div", { role: "none", className: r("bg-border -mx-1 my-1 h-px", t) }) });
89
84
  });
90
- v.displayName = "CommandSeparator";
91
- const N = d(function({ className: e, ...t }, o) {
92
- return /* @__PURE__ */ n(
85
+ w.displayName = "CommandSeparator";
86
+ const k = d(function({ className: t, ...e }, o) {
87
+ return /* @__PURE__ */ a(
93
88
  m.Item,
94
89
  {
95
90
  ref: o,
96
91
  className: r(
97
- "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none",
92
+ "text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none",
98
93
  "data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground",
99
94
  "data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50",
100
- "[&_svg]:size-4 [&_svg]:text-foreground-subtle",
101
- e
95
+ "[&_svg]:text-foreground-subtle [&_svg]:size-4",
96
+ t
102
97
  ),
103
- ...t
98
+ ...e
104
99
  }
105
100
  );
106
101
  });
107
- N.displayName = "CommandItem";
108
- function E({ children: a, className: e }) {
109
- return /* @__PURE__ */ n(
102
+ k.displayName = "CommandItem";
103
+ function S({
104
+ children: n,
105
+ className: t
106
+ }) {
107
+ return /* @__PURE__ */ a(
110
108
  "span",
111
109
  {
112
110
  className: r(
113
- "ml-auto inline-flex items-center gap-0.5 text-xs tracking-widest text-foreground-subtle font-mono",
114
- e
111
+ "text-foreground-subtle ml-auto inline-flex items-center gap-0.5 font-mono text-xs tracking-widest",
112
+ t
115
113
  ),
116
- children: a
114
+ children: n
117
115
  }
118
116
  );
119
117
  }
120
- function L({ open: a, onOpenChange: e, children: t, title: o }) {
121
- const s = x();
122
- return /* @__PURE__ */ n(i.Root, { open: a, onOpenChange: e, children: /* @__PURE__ */ l(i.Portal, { children: [
123
- /* @__PURE__ */ n(
124
- i.Overlay,
118
+ S.displayName = "CommandShortcut";
119
+ function K({ open: n, onOpenChange: t, children: e, title: o }) {
120
+ const i = p(), s = x(null);
121
+ return /* @__PURE__ */ a(l.Root, { open: n, onOpenChange: t, children: /* @__PURE__ */ u(l.Portal, { children: [
122
+ /* @__PURE__ */ a(
123
+ l.Overlay,
125
124
  {
126
125
  className: r(
127
- "fixed inset-0 z-[var(--z-overlay)] bg-overlay",
126
+ "bg-overlay fixed inset-0 z-[var(--z-overlay)]",
128
127
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
129
128
  "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0"
130
129
  )
131
130
  }
132
131
  ),
133
- /* @__PURE__ */ l(
134
- i.Content,
132
+ /* @__PURE__ */ u(
133
+ l.Content,
135
134
  {
136
135
  "aria-describedby": void 0,
136
+ onOpenAutoFocus: () => {
137
+ s.current = document.activeElement;
138
+ },
139
+ onCloseAutoFocus: (g) => {
140
+ var c;
141
+ g.preventDefault(), (c = s.current) == null || c.focus(), s.current = null;
142
+ },
137
143
  className: r(
138
- "fixed left-1/2 top-[20%] z-[var(--z-modal)] -translate-x-1/2",
144
+ "fixed top-[20%] left-1/2 z-[var(--z-modal)] -translate-x-1/2",
139
145
  "w-[calc(100%-2rem)] max-w-[640px] overflow-hidden",
140
- "rounded-lg border border-border bg-popover text-popover-foreground shadow-lg",
146
+ "border-border bg-popover text-popover-foreground rounded-lg border shadow-lg",
141
147
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
142
148
  "data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0",
143
149
  "data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95"
144
150
  ),
145
151
  children: [
146
- /* @__PURE__ */ n(i.Title, { className: "sr-only", children: o ?? s.commandDialog.title }),
147
- /* @__PURE__ */ n(u, { children: t })
152
+ /* @__PURE__ */ a(l.Title, { className: "sr-only", children: o ?? i.commandDialog.title }),
153
+ /* @__PURE__ */ a(f, { children: e })
148
154
  ]
149
155
  }
150
156
  )
151
157
  ] }) });
152
158
  }
153
- function D(a) {
154
- const [e, t] = p(0);
155
- f(() => {
156
- const o = (s) => {
157
- s.key === "k" && (s.metaKey || s.ctrlKey) && (s.preventDefault(), a(!0), t((c) => c + 1));
159
+ function G(n) {
160
+ y(() => {
161
+ const t = (e) => {
162
+ (e.key === "k" || e.key === "K") && (e.metaKey || e.ctrlKey) && !e.altKey && (e.preventDefault(), n((o) => !o));
158
163
  };
159
- return window.addEventListener("keydown", o), () => window.removeEventListener("keydown", o);
160
- }, [a]);
164
+ return window.addEventListener("keydown", t), () => window.removeEventListener("keydown", t);
165
+ }, [n]);
161
166
  }
162
167
  export {
163
- u as Command,
164
- L as CommandDialog,
165
- C as CommandEmpty,
166
- h as CommandGroup,
167
- y as CommandInput,
168
- N as CommandItem,
169
- b as CommandList,
170
- v as CommandSeparator,
171
- E as CommandShortcut,
172
- D as useCommandPaletteShortcut
168
+ f as Command,
169
+ K as CommandDialog,
170
+ v as CommandEmpty,
171
+ N as CommandGroup,
172
+ b as CommandInput,
173
+ k as CommandItem,
174
+ h as CommandList,
175
+ w as CommandSeparator,
176
+ S as CommandShortcut,
177
+ G as useCommandPaletteShortcut
173
178
  };
174
179
  //# sourceMappingURL=CommandPalette.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CommandPalette.js","sources":["../../../src/components/ui/CommandPalette.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n useEffect,\n useState,\n type ComponentPropsWithoutRef,\n type ElementRef,\n type ReactNode,\n} from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { Search } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { useStrings } from '@/hooks/use-strings';\n\n/* -----------------------------------------------------------------------------\n * CommandPalette is a Dialog hosting a `cmdk` Command. It supports grouped\n * items, keyboard navigation (handled by cmdk), an empty state, and a\n * pluggable list of \"recent\" items shown when the search input is empty.\n * --------------------------------------------------------------------------- */\n\nexport const Command = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(function Command({ className, ...props }, ref) {\n return (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-lg bg-popover text-popover-foreground',\n className,\n )}\n {...props}\n />\n );\n});\nCommand.displayName = 'Command';\n\nexport const CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(function CommandInput({ className, ...props }, ref) {\n return (\n <div className=\"flex items-center gap-2 border-b border-border px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"size-4 shrink-0 text-foreground-subtle\" aria-hidden />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-11 w-full bg-transparent py-3 text-sm outline-none',\n 'placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\nexport const CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(function CommandList({ className, ...props }, ref) {\n return (\n <CommandPrimitive.List\n ref={ref}\n className={cn('max-h-[320px] overflow-y-auto p-1', className)}\n {...props}\n />\n );\n});\nCommandList.displayName = 'CommandList';\n\nexport const CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(function CommandEmpty(props, ref) {\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className=\"py-8 text-center text-sm text-foreground-subtle\"\n {...props}\n />\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(function CommandGroup({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden text-foreground p-1',\n '[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5',\n '[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n '[&_[cmdk-group-heading]]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandGroup.displayName = 'CommandGroup';\n\nexport const CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(function CommandSeparator({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-border', className)}\n {...props}\n />\n );\n});\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport const CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(function CommandItem({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none',\n 'data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n '[&_svg]:size-4 [&_svg]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandItem.displayName = 'CommandItem';\n\nexport function CommandShortcut({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <span\n className={cn(\n 'ml-auto inline-flex items-center gap-0.5 text-xs tracking-widest text-foreground-subtle font-mono',\n className,\n )}\n >\n {children}\n </span>\n );\n}\n\n/* -----------------------------------------------------------------------------\n * Dialog wrapper — a ready-to-use ⌘K palette.\n * --------------------------------------------------------------------------- */\n\nexport interface CommandDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n /** Visible label for screen readers. */\n title?: string;\n}\n\nexport function CommandDialog({ open, onOpenChange, children, title }: CommandDialogProps) {\n const strings = useStrings();\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-[var(--z-overlay)] bg-overlay',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n )}\n />\n <DialogPrimitive.Content\n aria-describedby={undefined}\n className={cn(\n 'fixed left-1/2 top-[20%] z-[var(--z-modal)] -translate-x-1/2',\n 'w-[calc(100%-2rem)] max-w-[640px] overflow-hidden',\n 'rounded-lg border border-border bg-popover text-popover-foreground shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n 'data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95',\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">\n {title ?? strings.commandDialog.title}\n </DialogPrimitive.Title>\n <Command>{children}</Command>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/**\n * Hook that wires ⌘K / Ctrl+K to a setter — the canonical way to mount the\n * palette in an app shell.\n *\n * @example\n * const [open, setOpen] = useState(false);\n * useCommandPaletteShortcut(setOpen);\n * …\n * <CommandDialog open={open} onOpenChange={setOpen}>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Create project</CommandItem>\n * <CommandItem>Invite teammate</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </CommandDialog>\n *\n * @do Group items by category. Show \"Recent\" first when the query is empty.\n * @dont Hide essential actions behind the palette only — keep at least one\n * button entry in the UI.\n */\nexport function useCommandPaletteShortcut(setOpen: (open: boolean) => void): void {\n const [_, force] = useState(0);\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if (e.key === 'k' && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n setOpen(true);\n force((n) => n + 1);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [setOpen]);\n}\n"],"names":["Command","forwardRef","className","props","ref","jsx","CommandPrimitive","cn","CommandInput","jsxs","Search","CommandList","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","children","CommandDialog","open","onOpenChange","title","strings","useStrings","DialogPrimitive","useCommandPaletteShortcut","setOpen","_","force","useState","useEffect","onKey","e","n"],"mappings":"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"}
1
+ {"version":3,"file":"CommandPalette.js","sources":["../../../src/components/ui/CommandPalette.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n useEffect,\n useRef,\n type ComponentPropsWithoutRef,\n type Dispatch,\n type ElementRef,\n type ReactNode,\n type SetStateAction,\n} from 'react';\nimport { Command as CommandPrimitive } from 'cmdk';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { Search } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { useStrings } from '@/hooks/use-strings';\n\n/* -----------------------------------------------------------------------------\n * CommandPalette is a Dialog hosting a `cmdk` Command. It supports grouped\n * items, keyboard navigation (handled by cmdk), an empty state, and a\n * pluggable list of \"recent\" items shown when the search input is empty.\n * --------------------------------------------------------------------------- */\n\nexport const Command = forwardRef<\n ElementRef<typeof CommandPrimitive>,\n ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(function Command({ className, ...props }, ref) {\n return (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-lg',\n className,\n )}\n {...props}\n />\n );\n});\nCommand.displayName = 'Command';\n\nexport const CommandInput = forwardRef<\n ElementRef<typeof CommandPrimitive.Input>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(function CommandInput({ className, ...props }, ref) {\n return (\n <div className=\"border-border flex items-center gap-2 border-b px-3\" cmdk-input-wrapper=\"\">\n <Search className=\"text-foreground-subtle size-4 shrink-0\" aria-hidden />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-11 w-full bg-transparent py-3 text-lg outline-none md:text-sm',\n 'placeholder:text-foreground-subtle disabled:cursor-not-allowed disabled:opacity-50',\n className,\n )}\n {...props}\n />\n </div>\n );\n});\nCommandInput.displayName = 'CommandInput';\n\nexport const CommandList = forwardRef<\n ElementRef<typeof CommandPrimitive.List>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(function CommandList({ className, label, ...props }, ref) {\n const strings = useStrings();\n return (\n <CommandPrimitive.List\n ref={ref}\n label={label ?? strings.command.suggestions}\n className={cn('max-h-[320px] overflow-y-auto p-1', className)}\n {...props}\n />\n );\n});\nCommandList.displayName = 'CommandList';\n\nexport const CommandEmpty = forwardRef<\n ElementRef<typeof CommandPrimitive.Empty>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>(function CommandEmpty({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Empty\n ref={ref}\n className={cn('text-foreground-subtle py-8 text-center text-sm', className)}\n {...props}\n />\n );\n});\nCommandEmpty.displayName = 'CommandEmpty';\n\nexport const CommandGroup = forwardRef<\n ElementRef<typeof CommandPrimitive.Group>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(function CommandGroup({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'text-foreground overflow-hidden p-1',\n '[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5',\n '[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium',\n '[&_[cmdk-group-heading]]:text-foreground-subtle',\n className,\n )}\n {...props}\n />\n );\n});\nCommandGroup.displayName = 'CommandGroup';\n\nexport const CommandSeparator = forwardRef<\n ElementRef<typeof CommandPrimitive.Separator>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(function CommandSeparator({ className, ...props }, ref) {\n // cmdk hard-codes role=\"separator\", which is not a permitted child of the\n // listbox. asChild lets the child's role win: the divider is purely visual.\n return (\n <CommandPrimitive.Separator ref={ref} asChild {...props}>\n <div role=\"none\" className={cn('bg-border -mx-1 my-1 h-px', className)} />\n </CommandPrimitive.Separator>\n );\n});\nCommandSeparator.displayName = 'CommandSeparator';\n\nexport const CommandItem = forwardRef<\n ElementRef<typeof CommandPrimitive.Item>,\n ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(function CommandItem({ className, ...props }, ref) {\n return (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n 'text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none select-none',\n 'data-[selected=true]:bg-background-muted data-[selected=true]:text-foreground',\n 'data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n '[&_svg]:text-foreground-subtle [&_svg]:size-4',\n className,\n )}\n {...props}\n />\n );\n});\nCommandItem.displayName = 'CommandItem';\n\nexport function CommandShortcut({\n children,\n className,\n}: {\n children: ReactNode;\n className?: string;\n}) {\n return (\n <span\n className={cn(\n 'text-foreground-subtle ml-auto inline-flex items-center gap-0.5 font-mono text-xs tracking-widest',\n className,\n )}\n >\n {children}\n </span>\n );\n}\nCommandShortcut.displayName = 'CommandShortcut';\n\n/* -----------------------------------------------------------------------------\n * Dialog wrapper — a ready-to-use ⌘K palette.\n * --------------------------------------------------------------------------- */\n\nexport interface CommandDialogProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n children: ReactNode;\n /** Visible label for screen readers. */\n title?: string;\n}\n\nexport function CommandDialog({ open, onOpenChange, children, title }: CommandDialogProps) {\n const strings = useStrings();\n // The palette has no DialogTrigger (⌘K / any button opens it), so Radix has\n // no trigger to return focus to and would drop it on <body>. Remember what\n // was focused when the dialog opened and restore it on close.\n const returnFocusRef = useRef<HTMLElement | null>(null);\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <DialogPrimitive.Portal>\n <DialogPrimitive.Overlay\n className={cn(\n 'bg-overlay fixed inset-0 z-[var(--z-overlay)]',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n )}\n />\n <DialogPrimitive.Content\n aria-describedby={undefined}\n onOpenAutoFocus={() => {\n returnFocusRef.current = document.activeElement as HTMLElement | null;\n }}\n onCloseAutoFocus={(event) => {\n event.preventDefault();\n returnFocusRef.current?.focus();\n returnFocusRef.current = null;\n }}\n className={cn(\n 'fixed top-[20%] left-1/2 z-[var(--z-modal)] -translate-x-1/2',\n 'w-[calc(100%-2rem)] max-w-[640px] overflow-hidden',\n 'border-border bg-popover text-popover-foreground rounded-lg border shadow-lg',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out',\n 'data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0',\n 'data-[state=open]:zoom-in-95 data-[state=closed]:zoom-out-95',\n )}\n >\n <DialogPrimitive.Title className=\"sr-only\">\n {title ?? strings.commandDialog.title}\n </DialogPrimitive.Title>\n <Command>{children}</Command>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n </DialogPrimitive.Root>\n );\n}\n\n/**\n * Hook that wires ⌘K / Ctrl+K to a setter — the canonical way to mount the\n * palette in an app shell.\n *\n * @example\n * const [open, setOpen] = useState(false);\n * useCommandPaletteShortcut(setOpen);\n * …\n * <CommandDialog open={open} onOpenChange={setOpen}>\n * <CommandInput placeholder=\"Type a command…\" />\n * <CommandList>\n * <CommandEmpty>No results.</CommandEmpty>\n * <CommandGroup heading=\"Suggestions\">\n * <CommandItem>Create project</CommandItem>\n * <CommandItem>Invite teammate</CommandItem>\n * </CommandGroup>\n * </CommandList>\n * </CommandDialog>\n *\n * @do Group items by category. Show \"Recent\" first when the query is empty.\n * @dont Hide essential actions behind the palette only — keep at least one\n * button entry in the UI.\n */\nexport function useCommandPaletteShortcut(setOpen: Dispatch<SetStateAction<boolean>>): void {\n useEffect(() => {\n const onKey = (e: KeyboardEvent) => {\n if ((e.key === 'k' || e.key === 'K') && (e.metaKey || e.ctrlKey) && !e.altKey) {\n e.preventDefault();\n // Functional update: ⌘K toggles without the hook tracking open state.\n setOpen((prev) => !prev);\n }\n };\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [setOpen]);\n}\n"],"names":["Command","forwardRef","className","props","ref","jsx","CommandPrimitive","cn","CommandInput","jsxs","Search","CommandList","label","strings","useStrings","CommandEmpty","CommandGroup","CommandSeparator","CommandItem","CommandShortcut","children","CommandDialog","open","onOpenChange","title","returnFocusRef","useRef","DialogPrimitive","event","_a","useCommandPaletteShortcut","setOpen","useEffect","onKey","prev"],"mappings":"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"}
@@ -29,15 +29,20 @@ export declare const ContextMenuGroup: import('react').ForwardRefExoticComponent
29
29
  export declare const ContextMenuPortal: import('react').FC<ContextMenuPrimitive.ContextMenuPortalProps>;
30
30
  export declare const ContextMenuSub: import('react').FC<ContextMenuPrimitive.ContextMenuSubProps>;
31
31
  export declare const ContextMenuRadioGroup: import('react').ForwardRefExoticComponent<ContextMenuPrimitive.ContextMenuRadioGroupProps & import('react').RefAttributes<HTMLDivElement>>;
32
- export declare const ContextMenuSubTrigger: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
32
+ export declare const ContextMenuSubTrigger: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubTriggerProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & {
33
+ inset?: boolean;
34
+ } & import('react').RefAttributes<HTMLDivElement>>;
33
35
  export declare const ContextMenuSubContent: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSubContentProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
34
36
  export declare const ContextMenuContent: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuContentProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
35
37
  export declare const ContextMenuItem: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuItemProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & {
38
+ inset?: boolean;
36
39
  destructive?: boolean;
37
40
  } & import('react').RefAttributes<HTMLDivElement>>;
38
41
  export declare const ContextMenuCheckboxItem: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuCheckboxItemProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
39
42
  export declare const ContextMenuRadioItem: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuRadioItemProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
40
- export declare const ContextMenuLabel: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
43
+ export declare const ContextMenuLabel: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuLabelProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & {
44
+ inset?: boolean;
45
+ } & import('react').RefAttributes<HTMLDivElement>>;
41
46
  export declare const ContextMenuSeparator: import('react').ForwardRefExoticComponent<Omit<ContextMenuPrimitive.ContextMenuSeparatorProps & import('react').RefAttributes<HTMLDivElement>, "ref"> & import('react').RefAttributes<HTMLDivElement>>;
42
47
  export declare function ContextMenuShortcut({ className, ...props }: HTMLAttributes<HTMLSpanElement>): import("react/jsx-runtime").JSX.Element;
43
48
  export declare namespace ContextMenuShortcut {
@@ -1,51 +1,61 @@
1
1
  "use client";
2
- import { jsxs as c, jsx as a } from "react/jsx-runtime";
3
- import { forwardRef as s } from "react";
2
+ import { jsxs as l, jsx as a } from "react/jsx-runtime";
3
+ import { forwardRef as u } from "react";
4
4
  import * as t from "@radix-ui/react-context-menu";
5
- import { Check as l, Circle as m, ChevronRight as x } from "../../icons/index.js";
5
+ import { Check as m, Circle as x, ChevronRight as p } from "../../icons/index.js";
6
6
  import { cn as r } from "../../lib/utils.js";
7
- const k = t.Root, w = t.Trigger, T = t.Group, p = t.Portal, j = t.Sub, G = t.RadioGroup, d = r(
7
+ const w = t.Root, T = t.Trigger, j = t.Group, C = t.Portal, G = t.Sub, L = t.RadioGroup, i = r(
8
8
  "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground outline-none",
9
9
  "data-[highlighted]:bg-background-muted data-[highlighted]:text-foreground",
10
- "data-[disabled]:pointer-events-none data-[disabled]:opacity-50"
11
- ), C = s(function({ className: e, children: n, ...o }, i) {
12
- return /* @__PURE__ */ c(
10
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
11
+ "transition-colors duration-[var(--duration-fast)]"
12
+ ), g = u(function({ className: e, inset: n, children: o, ...d }, c) {
13
+ return /* @__PURE__ */ l(
13
14
  t.SubTrigger,
14
15
  {
15
- ref: i,
16
- className: r(d, "data-[state=open]:bg-background-muted", e),
17
- ...o,
16
+ ref: c,
17
+ className: r(
18
+ i,
19
+ "data-[state=open]:bg-background-muted",
20
+ n && "pl-8",
21
+ e
22
+ ),
23
+ ...d,
18
24
  children: [
19
- n,
20
- /* @__PURE__ */ a(x, { className: "ml-auto size-4 text-foreground-subtle", "aria-hidden": !0 })
25
+ o,
26
+ /* @__PURE__ */ a(p, { className: "text-foreground-subtle ml-auto size-4", "aria-hidden": !0 })
21
27
  ]
22
28
  }
23
29
  );
24
30
  });
25
- C.displayName = "ContextMenuSubTrigger";
26
- const g = s(function({ className: e, ...n }, o) {
31
+ g.displayName = "ContextMenuSubTrigger";
32
+ const f = u(function({ className: e, ...n }, o) {
27
33
  return /* @__PURE__ */ a(
28
34
  t.SubContent,
29
35
  {
30
36
  ref: o,
31
37
  className: r(
32
- "z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
38
+ "border-border bg-popover text-popover-foreground z-[var(--z-popover)] min-w-[8rem] overflow-hidden rounded-lg border p-1 shadow-md",
39
+ "data-[state=open]:animate-in data-[state=closed]:animate-out",
40
+ "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
41
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
33
42
  e
34
43
  ),
35
44
  ...n
36
45
  }
37
46
  );
38
47
  });
39
- g.displayName = "ContextMenuSubContent";
40
- const b = s(function({ className: e, ...n }, o) {
41
- return /* @__PURE__ */ a(p, { children: /* @__PURE__ */ a(
48
+ f.displayName = "ContextMenuSubContent";
49
+ const b = u(function({ className: e, ...n }, o) {
50
+ return /* @__PURE__ */ a(C, { children: /* @__PURE__ */ a(
42
51
  t.Content,
43
52
  {
44
53
  ref: o,
45
54
  className: r(
46
- "z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border border-border bg-popover p-1 text-popover-foreground shadow-md",
55
+ "border-border bg-popover text-popover-foreground z-[var(--z-popover)] min-w-[12rem] overflow-hidden rounded-lg border p-1 shadow-md",
47
56
  "data-[state=open]:animate-in data-[state=closed]:animate-out",
48
57
  "data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
58
+ "data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
49
59
  e
50
60
  ),
51
61
  ...n
@@ -53,98 +63,103 @@ const b = s(function({ className: e, ...n }, o) {
53
63
  ) });
54
64
  });
55
65
  b.displayName = "ContextMenuContent";
56
- const f = s(function({ className: e, destructive: n, ...o }, i) {
66
+ const h = u(function({ className: e, inset: n, destructive: o, ...d }, c) {
57
67
  return /* @__PURE__ */ a(
58
68
  t.Item,
59
69
  {
60
- ref: i,
70
+ ref: c,
61
71
  className: r(
62
- d,
63
- n && "text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text",
72
+ i,
73
+ n && "pl-8",
74
+ o && "text-danger-text data-[highlighted]:bg-danger-soft data-[highlighted]:text-danger-text",
64
75
  e
65
76
  ),
66
- ...o
77
+ ...d
67
78
  }
68
79
  );
69
80
  });
70
- f.displayName = "ContextMenuItem";
71
- const h = s(function({ className: e, children: n, ...o }, i) {
72
- return /* @__PURE__ */ c(
81
+ h.displayName = "ContextMenuItem";
82
+ const M = u(function({ className: e, children: n, ...o }, d) {
83
+ return /* @__PURE__ */ l(
73
84
  t.CheckboxItem,
74
85
  {
75
- ref: i,
76
- className: r(d, "pl-8", e),
86
+ ref: d,
87
+ className: r(i, "pl-8", e),
77
88
  ...o,
78
89
  children: [
79
- /* @__PURE__ */ a("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ a(t.ItemIndicator, { children: /* @__PURE__ */ a(l, { className: "size-4 text-accent", "aria-hidden": !0 }) }) }),
90
+ /* @__PURE__ */ a("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ a(t.ItemIndicator, { children: /* @__PURE__ */ a(m, { className: "text-accent size-4", "aria-hidden": !0 }) }) }),
80
91
  n
81
92
  ]
82
93
  }
83
94
  );
84
95
  });
85
- h.displayName = "ContextMenuCheckboxItem";
86
- const M = s(function({ className: e, children: n, ...o }, i) {
87
- return /* @__PURE__ */ c(
96
+ M.displayName = "ContextMenuCheckboxItem";
97
+ const N = u(function({ className: e, children: n, ...o }, d) {
98
+ return /* @__PURE__ */ l(
88
99
  t.RadioItem,
89
100
  {
90
- ref: i,
91
- className: r(d, "pl-8", e),
101
+ ref: d,
102
+ className: r(i, "pl-8", e),
92
103
  ...o,
93
104
  children: [
94
- /* @__PURE__ */ a("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ a(t.ItemIndicator, { children: /* @__PURE__ */ a(m, { className: "size-2 fill-accent text-accent", "aria-hidden": !0 }) }) }),
105
+ /* @__PURE__ */ a("span", { className: "absolute left-2 flex size-4 items-center justify-center", children: /* @__PURE__ */ a(t.ItemIndicator, { children: /* @__PURE__ */ a(x, { className: "fill-accent text-accent size-2", "aria-hidden": !0 }) }) }),
95
106
  n
96
107
  ]
97
108
  }
98
109
  );
99
110
  });
100
- M.displayName = "ContextMenuRadioItem";
101
- const N = s(function({ className: e, ...n }, o) {
111
+ N.displayName = "ContextMenuRadioItem";
112
+ const I = u(function({ className: e, inset: n, ...o }, d) {
102
113
  return /* @__PURE__ */ a(
103
114
  t.Label,
104
115
  {
105
- ref: o,
106
- className: r("px-2 py-1.5 text-xs font-medium text-foreground-subtle", e),
107
- ...n
116
+ ref: d,
117
+ className: r(
118
+ "text-foreground-subtle px-2 py-1.5 text-xs font-medium",
119
+ n && "pl-8",
120
+ e
121
+ ),
122
+ ...o
108
123
  }
109
124
  );
110
125
  });
111
- N.displayName = "ContextMenuLabel";
112
- const I = s(function({ className: e, ...n }, o) {
126
+ I.displayName = "ContextMenuLabel";
127
+ const S = u(function({ className: e, ...n }, o) {
113
128
  return /* @__PURE__ */ a(
114
129
  t.Separator,
115
130
  {
116
131
  ref: o,
117
- className: r("-mx-1 my-1 h-px bg-border", e),
132
+ className: r("bg-border -mx-1 my-1 h-px", e),
118
133
  ...n
119
134
  }
120
135
  );
121
136
  });
122
- I.displayName = "ContextMenuSeparator";
123
- function S({ className: u, ...e }) {
137
+ S.displayName = "ContextMenuSeparator";
138
+ function v({ className: s, ...e }) {
124
139
  return /* @__PURE__ */ a(
125
140
  "span",
126
141
  {
127
- className: r("ml-auto text-xs tracking-widest text-foreground-subtle font-mono", u),
142
+ className: r("text-foreground-subtle ml-auto font-mono text-xs tracking-widest", s),
128
143
  ...e
129
144
  }
130
145
  );
131
146
  }
132
- S.displayName = "ContextMenuShortcut";
147
+ v.displayName = "ContextMenuShortcut";
133
148
  export {
134
- k as ContextMenu,
135
- h as ContextMenuCheckboxItem,
149
+ w as ContextMenu,
150
+ M as ContextMenuCheckboxItem,
136
151
  b as ContextMenuContent,
137
- T as ContextMenuGroup,
138
- f as ContextMenuItem,
139
- N as ContextMenuLabel,
140
- p as ContextMenuPortal,
141
- G as ContextMenuRadioGroup,
142
- M as ContextMenuRadioItem,
143
- I as ContextMenuSeparator,
144
- S as ContextMenuShortcut,
145
- j as ContextMenuSub,
146
- g as ContextMenuSubContent,
147
- C as ContextMenuSubTrigger,
148
- w as ContextMenuTrigger
152
+ j as ContextMenuGroup,
153
+ h as ContextMenuItem,
154
+ I as ContextMenuLabel,
155
+ C as ContextMenuPortal,
156
+ L as ContextMenuRadioGroup,
157
+ N as ContextMenuRadioItem,
158
+ S as ContextMenuSeparator,
159
+ v as ContextMenuShortcut,
160
+ G as ContextMenuSub,
161
+ f as ContextMenuSubContent,
162
+ g as ContextMenuSubTrigger,
163
+ T as ContextMenuTrigger
149
164
  };
150
165
  //# sourceMappingURL=ContextMenu.js.map