@e-infra/design-system 0.0.2

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 (311) hide show
  1. package/LICENSE.md +21 -0
  2. package/README.md +200 -0
  3. package/dist/index.cjs.js +298 -0
  4. package/dist/index.cjs.js.map +1 -0
  5. package/dist/index.cjs10.js +105 -0
  6. package/dist/index.cjs10.js.map +1 -0
  7. package/dist/index.cjs11.js +56 -0
  8. package/dist/index.cjs11.js.map +1 -0
  9. package/dist/index.cjs12.js +206 -0
  10. package/dist/index.cjs12.js.map +1 -0
  11. package/dist/index.cjs13.js +92 -0
  12. package/dist/index.cjs13.js.map +1 -0
  13. package/dist/index.cjs14.js +216 -0
  14. package/dist/index.cjs14.js.map +1 -0
  15. package/dist/index.cjs15.js +261 -0
  16. package/dist/index.cjs15.js.map +1 -0
  17. package/dist/index.cjs16.js +50 -0
  18. package/dist/index.cjs16.js.map +1 -0
  19. package/dist/index.cjs17.js +53 -0
  20. package/dist/index.cjs17.js.map +1 -0
  21. package/dist/index.cjs18.js +173 -0
  22. package/dist/index.cjs18.js.map +1 -0
  23. package/dist/index.cjs19.js +242 -0
  24. package/dist/index.cjs19.js.map +1 -0
  25. package/dist/index.cjs2.js +298 -0
  26. package/dist/index.cjs2.js.map +1 -0
  27. package/dist/index.cjs20.js +156 -0
  28. package/dist/index.cjs20.js.map +1 -0
  29. package/dist/index.cjs21.js +130 -0
  30. package/dist/index.cjs21.js.map +1 -0
  31. package/dist/index.cjs22.js +251 -0
  32. package/dist/index.cjs22.js.map +1 -0
  33. package/dist/index.cjs23.js +134 -0
  34. package/dist/index.cjs23.js.map +1 -0
  35. package/dist/index.cjs24.js +57 -0
  36. package/dist/index.cjs24.js.map +1 -0
  37. package/dist/index.cjs25.js +23 -0
  38. package/dist/index.cjs25.js.map +1 -0
  39. package/dist/index.cjs26.js +85 -0
  40. package/dist/index.cjs26.js.map +1 -0
  41. package/dist/index.cjs27.js +41 -0
  42. package/dist/index.cjs27.js.map +1 -0
  43. package/dist/index.cjs28.js +271 -0
  44. package/dist/index.cjs28.js.map +1 -0
  45. package/dist/index.cjs29.js +189 -0
  46. package/dist/index.cjs29.js.map +1 -0
  47. package/dist/index.cjs3.js +298 -0
  48. package/dist/index.cjs3.js.map +1 -0
  49. package/dist/index.cjs30.js +120 -0
  50. package/dist/index.cjs30.js.map +1 -0
  51. package/dist/index.cjs31.js +63 -0
  52. package/dist/index.cjs31.js.map +1 -0
  53. package/dist/index.cjs32.js +51 -0
  54. package/dist/index.cjs32.js.map +1 -0
  55. package/dist/index.cjs33.js +64 -0
  56. package/dist/index.cjs33.js.map +1 -0
  57. package/dist/index.cjs34.js +49 -0
  58. package/dist/index.cjs34.js.map +1 -0
  59. package/dist/index.cjs35.js +79 -0
  60. package/dist/index.cjs35.js.map +1 -0
  61. package/dist/index.cjs36.js +198 -0
  62. package/dist/index.cjs36.js.map +1 -0
  63. package/dist/index.cjs37.js +45 -0
  64. package/dist/index.cjs37.js.map +1 -0
  65. package/dist/index.cjs38.js +146 -0
  66. package/dist/index.cjs38.js.map +1 -0
  67. package/dist/index.cjs39.js +657 -0
  68. package/dist/index.cjs39.js.map +1 -0
  69. package/dist/index.cjs4.js +83 -0
  70. package/dist/index.cjs4.js.map +1 -0
  71. package/dist/index.cjs40.js +16 -0
  72. package/dist/index.cjs40.js.map +1 -0
  73. package/dist/index.cjs41.js +82 -0
  74. package/dist/index.cjs41.js.map +1 -0
  75. package/dist/index.cjs42.js +33 -0
  76. package/dist/index.cjs42.js.map +1 -0
  77. package/dist/index.cjs43.js +50 -0
  78. package/dist/index.cjs43.js.map +1 -0
  79. package/dist/index.cjs44.js +117 -0
  80. package/dist/index.cjs44.js.map +1 -0
  81. package/dist/index.cjs45.js +86 -0
  82. package/dist/index.cjs45.js.map +1 -0
  83. package/dist/index.cjs46.js +20 -0
  84. package/dist/index.cjs46.js.map +1 -0
  85. package/dist/index.cjs47.js +63 -0
  86. package/dist/index.cjs47.js.map +1 -0
  87. package/dist/index.cjs48.js +88 -0
  88. package/dist/index.cjs48.js.map +1 -0
  89. package/dist/index.cjs49.js +74 -0
  90. package/dist/index.cjs49.js.map +1 -0
  91. package/dist/index.cjs5.js +68 -0
  92. package/dist/index.cjs5.js.map +1 -0
  93. package/dist/index.cjs50.js +9 -0
  94. package/dist/index.cjs50.js.map +1 -0
  95. package/dist/index.cjs51.js +38 -0
  96. package/dist/index.cjs51.js.map +1 -0
  97. package/dist/index.cjs6.js +166 -0
  98. package/dist/index.cjs6.js.map +1 -0
  99. package/dist/index.cjs7.js +29 -0
  100. package/dist/index.cjs7.js.map +1 -0
  101. package/dist/index.cjs8.js +72 -0
  102. package/dist/index.cjs8.js.map +1 -0
  103. package/dist/index.cjs9.js +42 -0
  104. package/dist/index.cjs9.js.map +1 -0
  105. package/dist/index.es.js +298 -0
  106. package/dist/index.es.js.map +1 -0
  107. package/dist/index.es10.js +105 -0
  108. package/dist/index.es10.js.map +1 -0
  109. package/dist/index.es11.js +56 -0
  110. package/dist/index.es11.js.map +1 -0
  111. package/dist/index.es12.js +189 -0
  112. package/dist/index.es12.js.map +1 -0
  113. package/dist/index.es13.js +92 -0
  114. package/dist/index.es13.js.map +1 -0
  115. package/dist/index.es14.js +199 -0
  116. package/dist/index.es14.js.map +1 -0
  117. package/dist/index.es15.js +243 -0
  118. package/dist/index.es15.js.map +1 -0
  119. package/dist/index.es16.js +33 -0
  120. package/dist/index.es16.js.map +1 -0
  121. package/dist/index.es17.js +36 -0
  122. package/dist/index.es17.js.map +1 -0
  123. package/dist/index.es18.js +173 -0
  124. package/dist/index.es18.js.map +1 -0
  125. package/dist/index.es19.js +225 -0
  126. package/dist/index.es19.js.map +1 -0
  127. package/dist/index.es2.js +298 -0
  128. package/dist/index.es2.js.map +1 -0
  129. package/dist/index.es20.js +139 -0
  130. package/dist/index.es20.js.map +1 -0
  131. package/dist/index.es21.js +130 -0
  132. package/dist/index.es21.js.map +1 -0
  133. package/dist/index.es22.js +234 -0
  134. package/dist/index.es22.js.map +1 -0
  135. package/dist/index.es23.js +117 -0
  136. package/dist/index.es23.js.map +1 -0
  137. package/dist/index.es24.js +40 -0
  138. package/dist/index.es24.js.map +1 -0
  139. package/dist/index.es25.js +23 -0
  140. package/dist/index.es25.js.map +1 -0
  141. package/dist/index.es26.js +68 -0
  142. package/dist/index.es26.js.map +1 -0
  143. package/dist/index.es27.js +24 -0
  144. package/dist/index.es27.js.map +1 -0
  145. package/dist/index.es28.js +254 -0
  146. package/dist/index.es28.js.map +1 -0
  147. package/dist/index.es29.js +172 -0
  148. package/dist/index.es29.js.map +1 -0
  149. package/dist/index.es3.js +298 -0
  150. package/dist/index.es3.js.map +1 -0
  151. package/dist/index.es30.js +120 -0
  152. package/dist/index.es30.js.map +1 -0
  153. package/dist/index.es31.js +46 -0
  154. package/dist/index.es31.js.map +1 -0
  155. package/dist/index.es32.js +34 -0
  156. package/dist/index.es32.js.map +1 -0
  157. package/dist/index.es33.js +47 -0
  158. package/dist/index.es33.js.map +1 -0
  159. package/dist/index.es34.js +49 -0
  160. package/dist/index.es34.js.map +1 -0
  161. package/dist/index.es35.js +62 -0
  162. package/dist/index.es35.js.map +1 -0
  163. package/dist/index.es36.js +181 -0
  164. package/dist/index.es36.js.map +1 -0
  165. package/dist/index.es37.js +28 -0
  166. package/dist/index.es37.js.map +1 -0
  167. package/dist/index.es38.js +129 -0
  168. package/dist/index.es38.js.map +1 -0
  169. package/dist/index.es39.js +640 -0
  170. package/dist/index.es39.js.map +1 -0
  171. package/dist/index.es4.js +66 -0
  172. package/dist/index.es4.js.map +1 -0
  173. package/dist/index.es40.js +16 -0
  174. package/dist/index.es40.js.map +1 -0
  175. package/dist/index.es41.js +64 -0
  176. package/dist/index.es41.js.map +1 -0
  177. package/dist/index.es42.js +33 -0
  178. package/dist/index.es42.js.map +1 -0
  179. package/dist/index.es43.js +33 -0
  180. package/dist/index.es43.js.map +1 -0
  181. package/dist/index.es44.js +117 -0
  182. package/dist/index.es44.js.map +1 -0
  183. package/dist/index.es45.js +69 -0
  184. package/dist/index.es45.js.map +1 -0
  185. package/dist/index.es46.js +20 -0
  186. package/dist/index.es46.js.map +1 -0
  187. package/dist/index.es47.js +46 -0
  188. package/dist/index.es47.js.map +1 -0
  189. package/dist/index.es48.js +70 -0
  190. package/dist/index.es48.js.map +1 -0
  191. package/dist/index.es49.js +57 -0
  192. package/dist/index.es49.js.map +1 -0
  193. package/dist/index.es5.js +68 -0
  194. package/dist/index.es5.js.map +1 -0
  195. package/dist/index.es50.js +9 -0
  196. package/dist/index.es50.js.map +1 -0
  197. package/dist/index.es51.js +21 -0
  198. package/dist/index.es51.js.map +1 -0
  199. package/dist/index.es6.js +149 -0
  200. package/dist/index.es6.js.map +1 -0
  201. package/dist/index.es7.js +12 -0
  202. package/dist/index.es7.js.map +1 -0
  203. package/dist/index.es8.js +55 -0
  204. package/dist/index.es8.js.map +1 -0
  205. package/dist/index.es9.js +42 -0
  206. package/dist/index.es9.js.map +1 -0
  207. package/dist/types/components/index.d.ts +47 -0
  208. package/dist/types/components/index.d.ts.map +1 -0
  209. package/dist/types/components/ui/accordion.d.ts +8 -0
  210. package/dist/types/components/ui/accordion.d.ts.map +1 -0
  211. package/dist/types/components/ui/alert-dialog.d.ts +15 -0
  212. package/dist/types/components/ui/alert-dialog.d.ts.map +1 -0
  213. package/dist/types/components/ui/alert.d.ts +10 -0
  214. package/dist/types/components/ui/alert.d.ts.map +1 -0
  215. package/dist/types/components/ui/aspect-ratio.d.ts +4 -0
  216. package/dist/types/components/ui/aspect-ratio.d.ts.map +1 -0
  217. package/dist/types/components/ui/avatar.d.ts +7 -0
  218. package/dist/types/components/ui/avatar.d.ts.map +1 -0
  219. package/dist/types/components/ui/badge.d.ts +10 -0
  220. package/dist/types/components/ui/badge.d.ts.map +1 -0
  221. package/dist/types/components/ui/breadcrumb.d.ts +12 -0
  222. package/dist/types/components/ui/breadcrumb.d.ts.map +1 -0
  223. package/dist/types/components/ui/button.d.ts +11 -0
  224. package/dist/types/components/ui/button.d.ts.map +1 -0
  225. package/dist/types/components/ui/calendar.d.ts +9 -0
  226. package/dist/types/components/ui/calendar.d.ts.map +1 -0
  227. package/dist/types/components/ui/card.d.ts +10 -0
  228. package/dist/types/components/ui/card.d.ts.map +1 -0
  229. package/dist/types/components/ui/carousel.d.ts +20 -0
  230. package/dist/types/components/ui/carousel.d.ts.map +1 -0
  231. package/dist/types/components/ui/chart.d.ts +41 -0
  232. package/dist/types/components/ui/chart.d.ts.map +1 -0
  233. package/dist/types/components/ui/checkbox.d.ts +5 -0
  234. package/dist/types/components/ui/checkbox.d.ts.map +1 -0
  235. package/dist/types/components/ui/collapsible.d.ts +6 -0
  236. package/dist/types/components/ui/collapsible.d.ts.map +1 -0
  237. package/dist/types/components/ui/command.d.ts +19 -0
  238. package/dist/types/components/ui/command.d.ts.map +1 -0
  239. package/dist/types/components/ui/context-menu.d.ts +26 -0
  240. package/dist/types/components/ui/context-menu.d.ts.map +1 -0
  241. package/dist/types/components/ui/dialog.d.ts +16 -0
  242. package/dist/types/components/ui/dialog.d.ts.map +1 -0
  243. package/dist/types/components/ui/drawer.d.ts +14 -0
  244. package/dist/types/components/ui/drawer.d.ts.map +1 -0
  245. package/dist/types/components/ui/dropdown-menu.d.ts +26 -0
  246. package/dist/types/components/ui/dropdown-menu.d.ts.map +1 -0
  247. package/dist/types/components/ui/form.d.ts +25 -0
  248. package/dist/types/components/ui/form.d.ts.map +1 -0
  249. package/dist/types/components/ui/hover-card.d.ts +7 -0
  250. package/dist/types/components/ui/hover-card.d.ts.map +1 -0
  251. package/dist/types/components/ui/input-otp.d.ts +12 -0
  252. package/dist/types/components/ui/input-otp.d.ts.map +1 -0
  253. package/dist/types/components/ui/input.d.ts +4 -0
  254. package/dist/types/components/ui/input.d.ts.map +1 -0
  255. package/dist/types/components/ui/label.d.ts +5 -0
  256. package/dist/types/components/ui/label.d.ts.map +1 -0
  257. package/dist/types/components/ui/menubar.d.ts +27 -0
  258. package/dist/types/components/ui/menubar.d.ts.map +1 -0
  259. package/dist/types/components/ui/navigation-menu.d.ts +15 -0
  260. package/dist/types/components/ui/navigation-menu.d.ts.map +1 -0
  261. package/dist/types/components/ui/pagination.d.ts +14 -0
  262. package/dist/types/components/ui/pagination.d.ts.map +1 -0
  263. package/dist/types/components/ui/popover.d.ts +8 -0
  264. package/dist/types/components/ui/popover.d.ts.map +1 -0
  265. package/dist/types/components/ui/progress.d.ts +5 -0
  266. package/dist/types/components/ui/progress.d.ts.map +1 -0
  267. package/dist/types/components/ui/radio-group.d.ts +6 -0
  268. package/dist/types/components/ui/radio-group.d.ts.map +1 -0
  269. package/dist/types/components/ui/resizable.d.ts +9 -0
  270. package/dist/types/components/ui/resizable.d.ts.map +1 -0
  271. package/dist/types/components/ui/scroll-area.d.ts +6 -0
  272. package/dist/types/components/ui/scroll-area.d.ts.map +1 -0
  273. package/dist/types/components/ui/select.d.ts +16 -0
  274. package/dist/types/components/ui/select.d.ts.map +1 -0
  275. package/dist/types/components/ui/separator.d.ts +5 -0
  276. package/dist/types/components/ui/separator.d.ts.map +1 -0
  277. package/dist/types/components/ui/sheet.d.ts +14 -0
  278. package/dist/types/components/ui/sheet.d.ts.map +1 -0
  279. package/dist/types/components/ui/sidebar.d.ts +70 -0
  280. package/dist/types/components/ui/sidebar.d.ts.map +1 -0
  281. package/dist/types/components/ui/skeleton.d.ts +3 -0
  282. package/dist/types/components/ui/skeleton.d.ts.map +1 -0
  283. package/dist/types/components/ui/slider.d.ts +5 -0
  284. package/dist/types/components/ui/slider.d.ts.map +1 -0
  285. package/dist/types/components/ui/sonner.d.ts +4 -0
  286. package/dist/types/components/ui/sonner.d.ts.map +1 -0
  287. package/dist/types/components/ui/switch.d.ts +5 -0
  288. package/dist/types/components/ui/switch.d.ts.map +1 -0
  289. package/dist/types/components/ui/table.d.ts +11 -0
  290. package/dist/types/components/ui/table.d.ts.map +1 -0
  291. package/dist/types/components/ui/tabs.d.ts +8 -0
  292. package/dist/types/components/ui/tabs.d.ts.map +1 -0
  293. package/dist/types/components/ui/textarea.d.ts +4 -0
  294. package/dist/types/components/ui/textarea.d.ts.map +1 -0
  295. package/dist/types/components/ui/toggle-group.d.ts +10 -0
  296. package/dist/types/components/ui/toggle-group.d.ts.map +1 -0
  297. package/dist/types/components/ui/toggle.d.ts +10 -0
  298. package/dist/types/components/ui/toggle.d.ts.map +1 -0
  299. package/dist/types/components/ui/tooltip.d.ts +8 -0
  300. package/dist/types/components/ui/tooltip.d.ts.map +1 -0
  301. package/dist/types/components.d.ts +2 -0
  302. package/dist/types/hooks/index.d.ts +2 -0
  303. package/dist/types/hooks/index.d.ts.map +1 -0
  304. package/dist/types/hooks/use-mobile.d.ts +2 -0
  305. package/dist/types/hooks/use-mobile.d.ts.map +1 -0
  306. package/dist/types/hooks.d.ts +2 -0
  307. package/dist/types/index.d.ts +4 -0
  308. package/dist/types/index.d.ts.map +1 -0
  309. package/dist/types/lib/utils.d.ts +3 -0
  310. package/dist/types/lib/utils.d.ts.map +1 -0
  311. package/package.json +138 -0
@@ -0,0 +1,243 @@
1
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import * as RechartsPrimitive from "recharts";
4
+ import { cn } from "./index.es50.js";
5
+ const THEMES = { light: "", dark: ".dark" };
6
+ const ChartContext = React.createContext(null);
7
+ function useChart() {
8
+ const context = React.useContext(ChartContext);
9
+ if (!context) {
10
+ throw new Error("useChart must be used within a <ChartContainer />");
11
+ }
12
+ return context;
13
+ }
14
+ function ChartContainer({
15
+ id,
16
+ className,
17
+ children,
18
+ config,
19
+ ...props
20
+ }) {
21
+ const uniqueId = React.useId();
22
+ const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
23
+ return /* @__PURE__ */ jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxs(
24
+ "div",
25
+ {
26
+ "data-slot": "chart",
27
+ "data-chart": chartId,
28
+ className: cn(
29
+ "[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden",
30
+ className
31
+ ),
32
+ ...props,
33
+ children: [
34
+ /* @__PURE__ */ jsx(ChartStyle, { id: chartId, config }),
35
+ /* @__PURE__ */ jsx(RechartsPrimitive.ResponsiveContainer, { children })
36
+ ]
37
+ }
38
+ ) });
39
+ }
40
+ const ChartStyle = ({ id, config }) => {
41
+ const colorConfig = Object.entries(config).filter(
42
+ ([, config2]) => config2.theme || config2.color
43
+ );
44
+ if (!colorConfig.length) {
45
+ return null;
46
+ }
47
+ return /* @__PURE__ */ jsx(
48
+ "style",
49
+ {
50
+ dangerouslySetInnerHTML: {
51
+ __html: Object.entries(THEMES).map(
52
+ ([theme, prefix]) => `
53
+ ${prefix} [data-chart=${id}] {
54
+ ${colorConfig.map(([key, itemConfig]) => {
55
+ const color = itemConfig.theme?.[theme] || itemConfig.color;
56
+ return color ? ` --color-${key}: ${color};` : null;
57
+ }).join("\n")}
58
+ }
59
+ `
60
+ ).join("\n")
61
+ }
62
+ }
63
+ );
64
+ };
65
+ const ChartTooltip = RechartsPrimitive.Tooltip;
66
+ function ChartTooltipContent({
67
+ active,
68
+ payload,
69
+ className,
70
+ indicator = "dot",
71
+ hideLabel = false,
72
+ hideIndicator = false,
73
+ label,
74
+ labelFormatter,
75
+ labelClassName,
76
+ formatter,
77
+ color,
78
+ nameKey,
79
+ labelKey
80
+ }) {
81
+ const { config } = useChart();
82
+ const tooltipLabel = React.useMemo(() => {
83
+ if (hideLabel || !payload?.length) {
84
+ return null;
85
+ }
86
+ const [item] = payload;
87
+ const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
88
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
89
+ const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
90
+ if (labelFormatter) {
91
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
92
+ }
93
+ if (!value) {
94
+ return null;
95
+ }
96
+ return /* @__PURE__ */ jsx("div", { className: cn("font-medium", labelClassName), children: value });
97
+ }, [
98
+ label,
99
+ labelFormatter,
100
+ payload,
101
+ hideLabel,
102
+ labelClassName,
103
+ config,
104
+ labelKey
105
+ ]);
106
+ if (!active || !payload?.length) {
107
+ return null;
108
+ }
109
+ const nestLabel = payload.length === 1 && indicator !== "dot";
110
+ return /* @__PURE__ */ jsxs(
111
+ "div",
112
+ {
113
+ className: cn(
114
+ "border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl",
115
+ className
116
+ ),
117
+ children: [
118
+ !nestLabel ? tooltipLabel : null,
119
+ /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
120
+ const key = `${nameKey || item.name || item.dataKey || "value"}`;
121
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
122
+ const indicatorColor = color || item.payload.fill || item.color;
123
+ return /* @__PURE__ */ jsx(
124
+ "div",
125
+ {
126
+ className: cn(
127
+ "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
128
+ indicator === "dot" && "items-center"
129
+ ),
130
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxs(Fragment, { children: [
131
+ itemConfig?.icon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsx(
132
+ "div",
133
+ {
134
+ className: cn(
135
+ "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
136
+ {
137
+ "h-2.5 w-2.5": indicator === "dot",
138
+ "w-1": indicator === "line",
139
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
140
+ "my-0.5": nestLabel && indicator === "dashed"
141
+ }
142
+ ),
143
+ style: {
144
+ "--color-bg": indicatorColor,
145
+ "--color-border": indicatorColor
146
+ }
147
+ }
148
+ ),
149
+ /* @__PURE__ */ jsxs(
150
+ "div",
151
+ {
152
+ className: cn(
153
+ "flex flex-1 justify-between leading-none",
154
+ nestLabel ? "items-end" : "items-center"
155
+ ),
156
+ children: [
157
+ /* @__PURE__ */ jsxs("div", { className: "grid gap-1.5", children: [
158
+ nestLabel ? tooltipLabel : null,
159
+ /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
160
+ ] }),
161
+ item.value && /* @__PURE__ */ jsx("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value.toLocaleString() })
162
+ ]
163
+ }
164
+ )
165
+ ] })
166
+ },
167
+ item.dataKey
168
+ );
169
+ }) })
170
+ ]
171
+ }
172
+ );
173
+ }
174
+ const ChartLegend = RechartsPrimitive.Legend;
175
+ function ChartLegendContent({
176
+ className,
177
+ hideIcon = false,
178
+ payload,
179
+ verticalAlign = "bottom",
180
+ nameKey
181
+ }) {
182
+ const { config } = useChart();
183
+ if (!payload?.length) {
184
+ return null;
185
+ }
186
+ return /* @__PURE__ */ jsx(
187
+ "div",
188
+ {
189
+ className: cn(
190
+ "flex items-center justify-center gap-4",
191
+ verticalAlign === "top" ? "pb-3" : "pt-3",
192
+ className
193
+ ),
194
+ children: payload.filter((item) => item.type !== "none").map((item) => {
195
+ const key = `${nameKey || item.dataKey || "value"}`;
196
+ const itemConfig = getPayloadConfigFromPayload(config, item, key);
197
+ return /* @__PURE__ */ jsxs(
198
+ "div",
199
+ {
200
+ className: cn(
201
+ "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
202
+ ),
203
+ children: [
204
+ itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsx(
205
+ "div",
206
+ {
207
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
208
+ style: {
209
+ backgroundColor: item.color
210
+ }
211
+ }
212
+ ),
213
+ itemConfig?.label
214
+ ]
215
+ },
216
+ item.value
217
+ );
218
+ })
219
+ }
220
+ );
221
+ }
222
+ function getPayloadConfigFromPayload(config, payload, key) {
223
+ if (typeof payload !== "object" || payload === null) {
224
+ return void 0;
225
+ }
226
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
227
+ let configLabelKey = key;
228
+ if (key in payload && typeof payload[key] === "string") {
229
+ configLabelKey = payload[key];
230
+ } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
231
+ configLabelKey = payloadPayload[key];
232
+ }
233
+ return configLabelKey in config ? config[configLabelKey] : config[key];
234
+ }
235
+ export {
236
+ ChartContainer,
237
+ ChartLegend,
238
+ ChartLegendContent,
239
+ ChartStyle,
240
+ ChartTooltip,
241
+ ChartTooltipContent
242
+ };
243
+ //# sourceMappingURL=index.es15.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es15.js","sources":["../lib/components/ui/chart.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as RechartsPrimitive from \"recharts\";\n\nimport { cn } from \"@/lib/utils\";\n\n// Format: { THEME_NAME: CSS_SELECTOR }\nconst THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n [k in string]: {\n label?: React.ReactNode;\n icon?: React.ComponentType;\n } & (\n | { color?: string; theme?: never }\n | { color?: never; theme: Record<keyof typeof THEMES, string> }\n );\n};\n\ntype ChartContextProps = {\n config: ChartConfig;\n};\n\nconst ChartContext = React.createContext<ChartContextProps | null>(null);\n\nfunction useChart() {\n const context = React.useContext(ChartContext);\n\n if (!context) {\n throw new Error(\"useChart must be used within a <ChartContainer />\");\n }\n\n return context;\n}\n\nfunction ChartContainer({\n id,\n className,\n children,\n config,\n ...props\n}: React.ComponentProps<\"div\"> & {\n config: ChartConfig;\n children: React.ComponentProps<\n typeof RechartsPrimitive.ResponsiveContainer\n >[\"children\"];\n}) {\n const uniqueId = React.useId();\n const chartId = `chart-${id || uniqueId.replace(/:/g, \"\")}`;\n\n return (\n <ChartContext.Provider value={{ config }}>\n <div\n data-slot=\"chart\"\n data-chart={chartId}\n className={cn(\n \"[&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border flex aspect-video justify-center text-xs [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden\",\n className\n )}\n {...props}\n >\n <ChartStyle id={chartId} config={config} />\n <RechartsPrimitive.ResponsiveContainer>\n {children}\n </RechartsPrimitive.ResponsiveContainer>\n </div>\n </ChartContext.Provider>\n );\n}\n\nconst ChartStyle = ({ id, config }: { id: string; config: ChartConfig }) => {\n const colorConfig = Object.entries(config).filter(\n ([, config]) => config.theme || config.color\n );\n\n if (!colorConfig.length) {\n return null;\n }\n\n return (\n <style\n dangerouslySetInnerHTML={{\n __html: Object.entries(THEMES)\n .map(\n ([theme, prefix]) => `\n${prefix} [data-chart=${id}] {\n${colorConfig\n .map(([key, itemConfig]) => {\n const color =\n itemConfig.theme?.[theme as keyof typeof itemConfig.theme] ||\n itemConfig.color;\n return color ? ` --color-${key}: ${color};` : null;\n })\n .join(\"\\n\")}\n}\n`\n )\n .join(\"\\n\"),\n }}\n />\n );\n};\n\nconst ChartTooltip = RechartsPrimitive.Tooltip;\n\nfunction ChartTooltipContent({\n active,\n payload,\n className,\n indicator = \"dot\",\n hideLabel = false,\n hideIndicator = false,\n label,\n labelFormatter,\n labelClassName,\n formatter,\n color,\n nameKey,\n labelKey,\n}: React.ComponentProps<typeof RechartsPrimitive.Tooltip> &\n React.ComponentProps<\"div\"> & {\n hideLabel?: boolean;\n hideIndicator?: boolean;\n indicator?: \"line\" | \"dot\" | \"dashed\";\n nameKey?: string;\n labelKey?: string;\n }) {\n const { config } = useChart();\n\n const tooltipLabel = React.useMemo(() => {\n if (hideLabel || !payload?.length) {\n return null;\n }\n\n const [item] = payload;\n const key = `${labelKey || item?.dataKey || item?.name || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const value =\n !labelKey && typeof label === \"string\"\n ? config[label as keyof typeof config]?.label || label\n : itemConfig?.label;\n\n if (labelFormatter) {\n return (\n <div className={cn(\"font-medium\", labelClassName)}>\n {labelFormatter(value, payload)}\n </div>\n );\n }\n\n if (!value) {\n return null;\n }\n\n return <div className={cn(\"font-medium\", labelClassName)}>{value}</div>;\n }, [\n label,\n labelFormatter,\n payload,\n hideLabel,\n labelClassName,\n config,\n labelKey,\n ]);\n\n if (!active || !payload?.length) {\n return null;\n }\n\n const nestLabel = payload.length === 1 && indicator !== \"dot\";\n\n return (\n <div\n className={cn(\n \"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n className\n )}\n >\n {!nestLabel ? tooltipLabel : null}\n <div className=\"grid gap-1.5\">\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item, index) => {\n const key = `${nameKey || item.name || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n const indicatorColor = color || item.payload.fill || item.color;\n\n return (\n <div\n key={item.dataKey}\n className={cn(\n \"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n indicator === \"dot\" && \"items-center\"\n )}\n >\n {formatter && item?.value !== undefined && item.name ? (\n formatter(item.value, item.name, item, index, item.payload)\n ) : (\n <>\n {itemConfig?.icon ? (\n <itemConfig.icon />\n ) : (\n !hideIndicator && (\n <div\n className={cn(\n \"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n {\n \"h-2.5 w-2.5\": indicator === \"dot\",\n \"w-1\": indicator === \"line\",\n \"w-0 border-[1.5px] border-dashed bg-transparent\":\n indicator === \"dashed\",\n \"my-0.5\": nestLabel && indicator === \"dashed\",\n }\n )}\n style={\n {\n \"--color-bg\": indicatorColor,\n \"--color-border\": indicatorColor,\n } as React.CSSProperties\n }\n />\n )\n )}\n <div\n className={cn(\n \"flex flex-1 justify-between leading-none\",\n nestLabel ? \"items-end\" : \"items-center\"\n )}\n >\n <div className=\"grid gap-1.5\">\n {nestLabel ? tooltipLabel : null}\n <span className=\"text-muted-foreground\">\n {itemConfig?.label || item.name}\n </span>\n </div>\n {item.value && (\n <span className=\"text-foreground font-mono font-medium tabular-nums\">\n {item.value.toLocaleString()}\n </span>\n )}\n </div>\n </>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n\nconst ChartLegend = RechartsPrimitive.Legend;\n\nfunction ChartLegendContent({\n className,\n hideIcon = false,\n payload,\n verticalAlign = \"bottom\",\n nameKey,\n}: React.ComponentProps<\"div\"> &\n Pick<RechartsPrimitive.LegendProps, \"payload\" | \"verticalAlign\"> & {\n hideIcon?: boolean;\n nameKey?: string;\n }) {\n const { config } = useChart();\n\n if (!payload?.length) {\n return null;\n }\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center gap-4\",\n verticalAlign === \"top\" ? \"pb-3\" : \"pt-3\",\n className\n )}\n >\n {payload\n .filter((item) => item.type !== \"none\")\n .map((item) => {\n const key = `${nameKey || item.dataKey || \"value\"}`;\n const itemConfig = getPayloadConfigFromPayload(config, item, key);\n\n return (\n <div\n key={item.value}\n className={cn(\n \"[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3\"\n )}\n >\n {itemConfig?.icon && !hideIcon ? (\n <itemConfig.icon />\n ) : (\n <div\n className=\"h-2 w-2 shrink-0 rounded-[2px]\"\n style={{\n backgroundColor: item.color,\n }}\n />\n )}\n {itemConfig?.label}\n </div>\n );\n })}\n </div>\n );\n}\n\n// Helper to extract item config from a payload.\nfunction getPayloadConfigFromPayload(\n config: ChartConfig,\n payload: unknown,\n key: string\n) {\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const payloadPayload =\n \"payload\" in payload &&\n typeof payload.payload === \"object\" &&\n payload.payload !== null\n ? payload.payload\n : undefined;\n\n let configLabelKey: string = key;\n\n if (\n key in payload &&\n typeof payload[key as keyof typeof payload] === \"string\"\n ) {\n configLabelKey = payload[key as keyof typeof payload] as string;\n } else if (\n payloadPayload &&\n key in payloadPayload &&\n typeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n ) {\n configLabelKey = payloadPayload[\n key as keyof typeof payloadPayload\n ] as string;\n }\n\n return configLabelKey in config\n ? config[configLabelKey]\n : config[key as keyof typeof config];\n}\n\nexport {\n ChartContainer,\n ChartTooltip,\n ChartTooltipContent,\n ChartLegend,\n ChartLegendContent,\n ChartStyle,\n};\n"],"names":["config"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import "react";
3
+ import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
4
+ import { CheckIcon } from "lucide-react";
5
+ import { cn } from "./index.es50.js";
6
+ function Checkbox({
7
+ className,
8
+ ...props
9
+ }) {
10
+ return /* @__PURE__ */ jsx(
11
+ CheckboxPrimitive.Root,
12
+ {
13
+ "data-slot": "checkbox",
14
+ className: cn(
15
+ "peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",
16
+ className
17
+ ),
18
+ ...props,
19
+ children: /* @__PURE__ */ jsx(
20
+ CheckboxPrimitive.Indicator,
21
+ {
22
+ "data-slot": "checkbox-indicator",
23
+ className: "grid place-content-center text-current transition-none",
24
+ children: /* @__PURE__ */ jsx(CheckIcon, { className: "size-3.5" })
25
+ }
26
+ )
27
+ }
28
+ );
29
+ }
30
+ export {
31
+ Checkbox
32
+ };
33
+ //# sourceMappingURL=index.es16.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es16.js","sources":["../lib/components/ui/checkbox.tsx"],"sourcesContent":["import * as React from \"react\";\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport { CheckIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Checkbox({\n className,\n ...props\n}: React.ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n \"peer border-input dark:bg-input/30 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground dark:data-[state=checked]:bg-primary data-[state=checked]:border-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive size-4 shrink-0 rounded-[4px] border shadow-xs transition-shadow outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator\n data-slot=\"checkbox-indicator\"\n className=\"grid place-content-center text-current transition-none\"\n >\n <CheckIcon className=\"size-3.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n\nexport { Checkbox };\n"],"names":[],"mappings":";;;;;AAMA,SAAS,SAAS;AAAA,EAChB;AAAA,EACA,GAAG;AACL,GAAwD;AACtD,SACE;AAAA,IAAC,kBAAkB;AAAA,IAAlB;AAAA,MACC,aAAU;AAAA,MACV,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,MAEJ,UAAA;AAAA,QAAC,kBAAkB;AAAA,QAAlB;AAAA,UACC,aAAU;AAAA,UACV,WAAU;AAAA,UAEV,UAAA,oBAAC,WAAA,EAAU,WAAU,WAAA,CAAW;AAAA,QAAA;AAAA,MAAA;AAAA,IAClC;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
4
+ function Collapsible({
5
+ ...props
6
+ }) {
7
+ return /* @__PURE__ */ jsx(CollapsiblePrimitive.Root, { "data-slot": "collapsible", ...props });
8
+ }
9
+ function CollapsibleTrigger({
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ CollapsiblePrimitive.CollapsibleTrigger,
14
+ {
15
+ "data-slot": "collapsible-trigger",
16
+ ...props
17
+ }
18
+ );
19
+ }
20
+ function CollapsibleContent({
21
+ ...props
22
+ }) {
23
+ return /* @__PURE__ */ jsx(
24
+ CollapsiblePrimitive.CollapsibleContent,
25
+ {
26
+ "data-slot": "collapsible-content",
27
+ ...props
28
+ }
29
+ );
30
+ }
31
+ export {
32
+ Collapsible,
33
+ CollapsibleContent,
34
+ CollapsibleTrigger
35
+ };
36
+ //# sourceMappingURL=index.es17.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es17.js","sources":["../lib/components/ui/collapsible.tsx"],"sourcesContent":["\"use client\";\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\n\nfunction Collapsible({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.Root>) {\n return <CollapsiblePrimitive.Root data-slot=\"collapsible\" {...props} />;\n}\n\nfunction CollapsibleTrigger({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleTrigger>) {\n return (\n <CollapsiblePrimitive.CollapsibleTrigger\n data-slot=\"collapsible-trigger\"\n {...props}\n />\n );\n}\n\nfunction CollapsibleContent({\n ...props\n}: React.ComponentProps<typeof CollapsiblePrimitive.CollapsibleContent>) {\n return (\n <CollapsiblePrimitive.CollapsibleContent\n data-slot=\"collapsible-content\"\n {...props}\n />\n );\n}\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent };\n"],"names":[],"mappings":";;;AAIA,SAAS,YAAY;AAAA,EACnB,GAAG;AACL,GAA2D;AACzD,6BAAQ,qBAAqB,MAArB,EAA0B,aAAU,eAAe,GAAG,OAAO;AACvE;AAEA,SAAS,mBAAmB;AAAA,EAC1B,GAAG;AACL,GAAyE;AACvE,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACT,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,mBAAmB;AAAA,EAC1B,GAAG;AACL,GAAyE;AACvE,SACE;AAAA,IAAC,qBAAqB;AAAA,IAArB;AAAA,MACC,aAAU;AAAA,MACT,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;"}
@@ -0,0 +1,173 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "react";
4
+ import { Command as Command$1 } from "cmdk";
5
+ import { SearchIcon } from "lucide-react";
6
+ import { cn } from "./index.es50.js";
7
+ import { Dialog, DialogHeader, DialogTitle, DialogDescription, DialogContent } from "./index.es20.js";
8
+ function Command({
9
+ className,
10
+ ...props
11
+ }) {
12
+ return /* @__PURE__ */ jsx(
13
+ Command$1,
14
+ {
15
+ "data-slot": "command",
16
+ className: cn(
17
+ "bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md",
18
+ className
19
+ ),
20
+ ...props
21
+ }
22
+ );
23
+ }
24
+ function CommandDialog({
25
+ title = "Command Palette",
26
+ description = "Search for a command to run...",
27
+ children,
28
+ className,
29
+ showCloseButton = true,
30
+ ...props
31
+ }) {
32
+ return /* @__PURE__ */ jsxs(Dialog, { ...props, children: [
33
+ /* @__PURE__ */ jsxs(DialogHeader, { className: "sr-only", children: [
34
+ /* @__PURE__ */ jsx(DialogTitle, { children: title }),
35
+ /* @__PURE__ */ jsx(DialogDescription, { children: description })
36
+ ] }),
37
+ /* @__PURE__ */ jsx(
38
+ DialogContent,
39
+ {
40
+ className: cn("overflow-hidden p-0", className),
41
+ showCloseButton,
42
+ children: /* @__PURE__ */ jsx(Command, { className: "[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5", children })
43
+ }
44
+ )
45
+ ] });
46
+ }
47
+ function CommandInput({
48
+ className,
49
+ ...props
50
+ }) {
51
+ return /* @__PURE__ */ jsxs(
52
+ "div",
53
+ {
54
+ "data-slot": "command-input-wrapper",
55
+ className: "flex h-9 items-center gap-2 border-b px-3",
56
+ children: [
57
+ /* @__PURE__ */ jsx(SearchIcon, { className: "size-4 shrink-0 opacity-50" }),
58
+ /* @__PURE__ */ jsx(
59
+ Command$1.Input,
60
+ {
61
+ "data-slot": "command-input",
62
+ className: cn(
63
+ "placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50",
64
+ className
65
+ ),
66
+ ...props
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ );
72
+ }
73
+ function CommandList({
74
+ className,
75
+ ...props
76
+ }) {
77
+ return /* @__PURE__ */ jsx(
78
+ Command$1.List,
79
+ {
80
+ "data-slot": "command-list",
81
+ className: cn(
82
+ "max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto",
83
+ className
84
+ ),
85
+ ...props
86
+ }
87
+ );
88
+ }
89
+ function CommandEmpty({
90
+ ...props
91
+ }) {
92
+ return /* @__PURE__ */ jsx(
93
+ Command$1.Empty,
94
+ {
95
+ "data-slot": "command-empty",
96
+ className: "py-6 text-center text-sm",
97
+ ...props
98
+ }
99
+ );
100
+ }
101
+ function CommandGroup({
102
+ className,
103
+ ...props
104
+ }) {
105
+ return /* @__PURE__ */ jsx(
106
+ Command$1.Group,
107
+ {
108
+ "data-slot": "command-group",
109
+ className: cn(
110
+ "text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium",
111
+ className
112
+ ),
113
+ ...props
114
+ }
115
+ );
116
+ }
117
+ function CommandSeparator({
118
+ className,
119
+ ...props
120
+ }) {
121
+ return /* @__PURE__ */ jsx(
122
+ Command$1.Separator,
123
+ {
124
+ "data-slot": "command-separator",
125
+ className: cn("bg-border -mx-1 h-px", className),
126
+ ...props
127
+ }
128
+ );
129
+ }
130
+ function CommandItem({
131
+ className,
132
+ ...props
133
+ }) {
134
+ return /* @__PURE__ */ jsx(
135
+ Command$1.Item,
136
+ {
137
+ "data-slot": "command-item",
138
+ className: cn(
139
+ "data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
140
+ className
141
+ ),
142
+ ...props
143
+ }
144
+ );
145
+ }
146
+ function CommandShortcut({
147
+ className,
148
+ ...props
149
+ }) {
150
+ return /* @__PURE__ */ jsx(
151
+ "span",
152
+ {
153
+ "data-slot": "command-shortcut",
154
+ className: cn(
155
+ "text-muted-foreground ml-auto text-xs tracking-widest",
156
+ className
157
+ ),
158
+ ...props
159
+ }
160
+ );
161
+ }
162
+ export {
163
+ Command,
164
+ CommandDialog,
165
+ CommandEmpty,
166
+ CommandGroup,
167
+ CommandInput,
168
+ CommandItem,
169
+ CommandList,
170
+ CommandSeparator,
171
+ CommandShortcut
172
+ };
173
+ //# sourceMappingURL=index.es18.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.es18.js","sources":["../lib/components/ui/command.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Command as CommandPrimitive } from \"cmdk\";\nimport { SearchIcon } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport {\n Dialog,\n DialogContent,\n DialogDescription,\n DialogHeader,\n DialogTitle,\n} from \"./dialog\";\n\nfunction Command({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive>) {\n return (\n <CommandPrimitive\n data-slot=\"command\"\n className={cn(\n \"bg-popover text-popover-foreground flex h-full w-full flex-col overflow-hidden rounded-md\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandDialog({\n title = \"Command Palette\",\n description = \"Search for a command to run...\",\n children,\n className,\n showCloseButton = true,\n ...props\n}: React.ComponentProps<typeof Dialog> & {\n title?: string;\n description?: string;\n className?: string;\n showCloseButton?: boolean;\n}) {\n return (\n <Dialog {...props}>\n <DialogHeader className=\"sr-only\">\n <DialogTitle>{title}</DialogTitle>\n <DialogDescription>{description}</DialogDescription>\n </DialogHeader>\n <DialogContent\n className={cn(\"overflow-hidden p-0\", className)}\n showCloseButton={showCloseButton}\n >\n <Command className=\"[&_[cmdk-group-heading]]:text-muted-foreground **:data-[slot=command-input-wrapper]:h-12 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group]]:px-2 [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n );\n}\n\nfunction CommandInput({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Input>) {\n return (\n <div\n data-slot=\"command-input-wrapper\"\n className=\"flex h-9 items-center gap-2 border-b px-3\"\n >\n <SearchIcon className=\"size-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n data-slot=\"command-input\"\n className={cn(\n \"placeholder:text-muted-foreground flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CommandList({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.List>) {\n return (\n <CommandPrimitive.List\n data-slot=\"command-list\"\n className={cn(\n \"max-h-[300px] scroll-py-1 overflow-x-hidden overflow-y-auto\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandEmpty({\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Empty>) {\n return (\n <CommandPrimitive.Empty\n data-slot=\"command-empty\"\n className=\"py-6 text-center text-sm\"\n {...props}\n />\n );\n}\n\nfunction CommandGroup({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Group>) {\n return (\n <CommandPrimitive.Group\n data-slot=\"command-group\"\n className={cn(\n \"text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Separator>) {\n return (\n <CommandPrimitive.Separator\n data-slot=\"command-separator\"\n className={cn(\"bg-border -mx-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction CommandItem({\n className,\n ...props\n}: React.ComponentProps<typeof CommandPrimitive.Item>) {\n return (\n <CommandPrimitive.Item\n data-slot=\"command-item\"\n className={cn(\n \"data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CommandShortcut({\n className,\n ...props\n}: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"command-shortcut\"\n className={cn(\n \"text-muted-foreground ml-auto text-xs tracking-widest\",\n className\n )}\n {...props}\n />\n );\n}\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n};\n"],"names":["CommandPrimitive"],"mappings":"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"}