@e-infra/design-system 0.0.2 → 0.0.3

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 (206) hide show
  1. package/README.md +1 -1
  2. package/dist/index.cjs.js +4545 -295
  3. package/dist/index.cjs.js.map +1 -1
  4. package/dist/index.cjs2.js +248 -295
  5. package/dist/index.cjs2.js.map +1 -1
  6. package/dist/index.cjs3.js +248 -295
  7. package/dist/index.cjs3.js.map +1 -1
  8. package/dist/index.es.js +4255 -48
  9. package/dist/index.es.js.map +1 -1
  10. package/dist/index.es2.js +1 -48
  11. package/dist/index.es2.js.map +1 -1
  12. package/dist/index.es3.js +1 -48
  13. package/dist/index.es3.js.map +1 -1
  14. package/package.json +2 -2
  15. package/dist/index.cjs10.js +0 -105
  16. package/dist/index.cjs10.js.map +0 -1
  17. package/dist/index.cjs11.js +0 -56
  18. package/dist/index.cjs11.js.map +0 -1
  19. package/dist/index.cjs12.js +0 -206
  20. package/dist/index.cjs12.js.map +0 -1
  21. package/dist/index.cjs13.js +0 -92
  22. package/dist/index.cjs13.js.map +0 -1
  23. package/dist/index.cjs14.js +0 -216
  24. package/dist/index.cjs14.js.map +0 -1
  25. package/dist/index.cjs15.js +0 -261
  26. package/dist/index.cjs15.js.map +0 -1
  27. package/dist/index.cjs16.js +0 -50
  28. package/dist/index.cjs16.js.map +0 -1
  29. package/dist/index.cjs17.js +0 -53
  30. package/dist/index.cjs17.js.map +0 -1
  31. package/dist/index.cjs18.js +0 -173
  32. package/dist/index.cjs18.js.map +0 -1
  33. package/dist/index.cjs19.js +0 -242
  34. package/dist/index.cjs19.js.map +0 -1
  35. package/dist/index.cjs20.js +0 -156
  36. package/dist/index.cjs20.js.map +0 -1
  37. package/dist/index.cjs21.js +0 -130
  38. package/dist/index.cjs21.js.map +0 -1
  39. package/dist/index.cjs22.js +0 -251
  40. package/dist/index.cjs22.js.map +0 -1
  41. package/dist/index.cjs23.js +0 -134
  42. package/dist/index.cjs23.js.map +0 -1
  43. package/dist/index.cjs24.js +0 -57
  44. package/dist/index.cjs24.js.map +0 -1
  45. package/dist/index.cjs25.js +0 -23
  46. package/dist/index.cjs25.js.map +0 -1
  47. package/dist/index.cjs26.js +0 -85
  48. package/dist/index.cjs26.js.map +0 -1
  49. package/dist/index.cjs27.js +0 -41
  50. package/dist/index.cjs27.js.map +0 -1
  51. package/dist/index.cjs28.js +0 -271
  52. package/dist/index.cjs28.js.map +0 -1
  53. package/dist/index.cjs29.js +0 -189
  54. package/dist/index.cjs29.js.map +0 -1
  55. package/dist/index.cjs30.js +0 -120
  56. package/dist/index.cjs30.js.map +0 -1
  57. package/dist/index.cjs31.js +0 -63
  58. package/dist/index.cjs31.js.map +0 -1
  59. package/dist/index.cjs32.js +0 -51
  60. package/dist/index.cjs32.js.map +0 -1
  61. package/dist/index.cjs33.js +0 -64
  62. package/dist/index.cjs33.js.map +0 -1
  63. package/dist/index.cjs34.js +0 -49
  64. package/dist/index.cjs34.js.map +0 -1
  65. package/dist/index.cjs35.js +0 -79
  66. package/dist/index.cjs35.js.map +0 -1
  67. package/dist/index.cjs36.js +0 -198
  68. package/dist/index.cjs36.js.map +0 -1
  69. package/dist/index.cjs37.js +0 -45
  70. package/dist/index.cjs37.js.map +0 -1
  71. package/dist/index.cjs38.js +0 -146
  72. package/dist/index.cjs38.js.map +0 -1
  73. package/dist/index.cjs39.js +0 -657
  74. package/dist/index.cjs39.js.map +0 -1
  75. package/dist/index.cjs4.js +0 -83
  76. package/dist/index.cjs4.js.map +0 -1
  77. package/dist/index.cjs40.js +0 -16
  78. package/dist/index.cjs40.js.map +0 -1
  79. package/dist/index.cjs41.js +0 -82
  80. package/dist/index.cjs41.js.map +0 -1
  81. package/dist/index.cjs42.js +0 -33
  82. package/dist/index.cjs42.js.map +0 -1
  83. package/dist/index.cjs43.js +0 -50
  84. package/dist/index.cjs43.js.map +0 -1
  85. package/dist/index.cjs44.js +0 -117
  86. package/dist/index.cjs44.js.map +0 -1
  87. package/dist/index.cjs45.js +0 -86
  88. package/dist/index.cjs45.js.map +0 -1
  89. package/dist/index.cjs46.js +0 -20
  90. package/dist/index.cjs46.js.map +0 -1
  91. package/dist/index.cjs47.js +0 -63
  92. package/dist/index.cjs47.js.map +0 -1
  93. package/dist/index.cjs48.js +0 -88
  94. package/dist/index.cjs48.js.map +0 -1
  95. package/dist/index.cjs49.js +0 -74
  96. package/dist/index.cjs49.js.map +0 -1
  97. package/dist/index.cjs5.js +0 -68
  98. package/dist/index.cjs5.js.map +0 -1
  99. package/dist/index.cjs50.js +0 -9
  100. package/dist/index.cjs50.js.map +0 -1
  101. package/dist/index.cjs51.js +0 -38
  102. package/dist/index.cjs51.js.map +0 -1
  103. package/dist/index.cjs6.js +0 -166
  104. package/dist/index.cjs6.js.map +0 -1
  105. package/dist/index.cjs7.js +0 -29
  106. package/dist/index.cjs7.js.map +0 -1
  107. package/dist/index.cjs8.js +0 -72
  108. package/dist/index.cjs8.js.map +0 -1
  109. package/dist/index.cjs9.js +0 -42
  110. package/dist/index.cjs9.js.map +0 -1
  111. package/dist/index.es10.js +0 -105
  112. package/dist/index.es10.js.map +0 -1
  113. package/dist/index.es11.js +0 -56
  114. package/dist/index.es11.js.map +0 -1
  115. package/dist/index.es12.js +0 -189
  116. package/dist/index.es12.js.map +0 -1
  117. package/dist/index.es13.js +0 -92
  118. package/dist/index.es13.js.map +0 -1
  119. package/dist/index.es14.js +0 -199
  120. package/dist/index.es14.js.map +0 -1
  121. package/dist/index.es15.js +0 -243
  122. package/dist/index.es15.js.map +0 -1
  123. package/dist/index.es16.js +0 -33
  124. package/dist/index.es16.js.map +0 -1
  125. package/dist/index.es17.js +0 -36
  126. package/dist/index.es17.js.map +0 -1
  127. package/dist/index.es18.js +0 -173
  128. package/dist/index.es18.js.map +0 -1
  129. package/dist/index.es19.js +0 -225
  130. package/dist/index.es19.js.map +0 -1
  131. package/dist/index.es20.js +0 -139
  132. package/dist/index.es20.js.map +0 -1
  133. package/dist/index.es21.js +0 -130
  134. package/dist/index.es21.js.map +0 -1
  135. package/dist/index.es22.js +0 -234
  136. package/dist/index.es22.js.map +0 -1
  137. package/dist/index.es23.js +0 -117
  138. package/dist/index.es23.js.map +0 -1
  139. package/dist/index.es24.js +0 -40
  140. package/dist/index.es24.js.map +0 -1
  141. package/dist/index.es25.js +0 -23
  142. package/dist/index.es25.js.map +0 -1
  143. package/dist/index.es26.js +0 -68
  144. package/dist/index.es26.js.map +0 -1
  145. package/dist/index.es27.js +0 -24
  146. package/dist/index.es27.js.map +0 -1
  147. package/dist/index.es28.js +0 -254
  148. package/dist/index.es28.js.map +0 -1
  149. package/dist/index.es29.js +0 -172
  150. package/dist/index.es29.js.map +0 -1
  151. package/dist/index.es30.js +0 -120
  152. package/dist/index.es30.js.map +0 -1
  153. package/dist/index.es31.js +0 -46
  154. package/dist/index.es31.js.map +0 -1
  155. package/dist/index.es32.js +0 -34
  156. package/dist/index.es32.js.map +0 -1
  157. package/dist/index.es33.js +0 -47
  158. package/dist/index.es33.js.map +0 -1
  159. package/dist/index.es34.js +0 -49
  160. package/dist/index.es34.js.map +0 -1
  161. package/dist/index.es35.js +0 -62
  162. package/dist/index.es35.js.map +0 -1
  163. package/dist/index.es36.js +0 -181
  164. package/dist/index.es36.js.map +0 -1
  165. package/dist/index.es37.js +0 -28
  166. package/dist/index.es37.js.map +0 -1
  167. package/dist/index.es38.js +0 -129
  168. package/dist/index.es38.js.map +0 -1
  169. package/dist/index.es39.js +0 -640
  170. package/dist/index.es39.js.map +0 -1
  171. package/dist/index.es4.js +0 -66
  172. package/dist/index.es4.js.map +0 -1
  173. package/dist/index.es40.js +0 -16
  174. package/dist/index.es40.js.map +0 -1
  175. package/dist/index.es41.js +0 -64
  176. package/dist/index.es41.js.map +0 -1
  177. package/dist/index.es42.js +0 -33
  178. package/dist/index.es42.js.map +0 -1
  179. package/dist/index.es43.js +0 -33
  180. package/dist/index.es43.js.map +0 -1
  181. package/dist/index.es44.js +0 -117
  182. package/dist/index.es44.js.map +0 -1
  183. package/dist/index.es45.js +0 -69
  184. package/dist/index.es45.js.map +0 -1
  185. package/dist/index.es46.js +0 -20
  186. package/dist/index.es46.js.map +0 -1
  187. package/dist/index.es47.js +0 -46
  188. package/dist/index.es47.js.map +0 -1
  189. package/dist/index.es48.js +0 -70
  190. package/dist/index.es48.js.map +0 -1
  191. package/dist/index.es49.js +0 -57
  192. package/dist/index.es49.js.map +0 -1
  193. package/dist/index.es5.js +0 -68
  194. package/dist/index.es5.js.map +0 -1
  195. package/dist/index.es50.js +0 -9
  196. package/dist/index.es50.js.map +0 -1
  197. package/dist/index.es51.js +0 -21
  198. package/dist/index.es51.js.map +0 -1
  199. package/dist/index.es6.js +0 -149
  200. package/dist/index.es6.js.map +0 -1
  201. package/dist/index.es7.js +0 -12
  202. package/dist/index.es7.js.map +0 -1
  203. package/dist/index.es8.js +0 -55
  204. package/dist/index.es8.js.map +0 -1
  205. package/dist/index.es9.js +0 -42
  206. package/dist/index.es9.js.map +0 -1
@@ -1,92 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- require("react");
5
- const utils = require("./index.cjs50.js");
6
- function Card({ className, ...props }) {
7
- return /* @__PURE__ */ jsxRuntime.jsx(
8
- "div",
9
- {
10
- "data-slot": "card",
11
- className: utils.cn(
12
- "bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm",
13
- className
14
- ),
15
- ...props
16
- }
17
- );
18
- }
19
- function CardHeader({ className, ...props }) {
20
- return /* @__PURE__ */ jsxRuntime.jsx(
21
- "div",
22
- {
23
- "data-slot": "card-header",
24
- className: utils.cn(
25
- "@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",
26
- className
27
- ),
28
- ...props
29
- }
30
- );
31
- }
32
- function CardTitle({ className, ...props }) {
33
- return /* @__PURE__ */ jsxRuntime.jsx(
34
- "div",
35
- {
36
- "data-slot": "card-title",
37
- className: utils.cn("leading-none font-semibold", className),
38
- ...props
39
- }
40
- );
41
- }
42
- function CardDescription({ className, ...props }) {
43
- return /* @__PURE__ */ jsxRuntime.jsx(
44
- "div",
45
- {
46
- "data-slot": "card-description",
47
- className: utils.cn("text-muted-foreground text-sm", className),
48
- ...props
49
- }
50
- );
51
- }
52
- function CardAction({ className, ...props }) {
53
- return /* @__PURE__ */ jsxRuntime.jsx(
54
- "div",
55
- {
56
- "data-slot": "card-action",
57
- className: utils.cn(
58
- "col-start-2 row-span-2 row-start-1 self-start justify-self-end",
59
- className
60
- ),
61
- ...props
62
- }
63
- );
64
- }
65
- function CardContent({ className, ...props }) {
66
- return /* @__PURE__ */ jsxRuntime.jsx(
67
- "div",
68
- {
69
- "data-slot": "card-content",
70
- className: utils.cn("px-6", className),
71
- ...props
72
- }
73
- );
74
- }
75
- function CardFooter({ className, ...props }) {
76
- return /* @__PURE__ */ jsxRuntime.jsx(
77
- "div",
78
- {
79
- "data-slot": "card-footer",
80
- className: utils.cn("flex items-center px-6 [.border-t]:pt-6", className),
81
- ...props
82
- }
83
- );
84
- }
85
- exports.Card = Card;
86
- exports.CardAction = CardAction;
87
- exports.CardContent = CardContent;
88
- exports.CardDescription = CardDescription;
89
- exports.CardFooter = CardFooter;
90
- exports.CardHeader = CardHeader;
91
- exports.CardTitle = CardTitle;
92
- //# sourceMappingURL=index.cjs13.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs13.js","sources":["../lib/components/ui/card.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction Card({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n \"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-2 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn(\"leading-none font-semibold\", className)}\n {...props}\n />\n );\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn(\"text-muted-foreground text-sm\", className)}\n {...props}\n />\n );\n}\n\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n className={cn(\n \"col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6\", className)}\n {...props}\n />\n );\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n};\n"],"names":["jsx","cn"],"mappings":";;;;;AAIA,SAAS,KAAK,EAAE,WAAW,GAAG,SAAsC;AAClE,SACEA,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;AACvE,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA,GAAG,8BAA8B,SAAS;AAAA,MACpD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;AAC7E,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA;AAAAA,QACT;AAAA,QACA;AAAA,MAAA;AAAA,MAED,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;AACzE,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA,GAAG,QAAQ,SAAS;AAAA,MAC9B,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;AACxE,SACED,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAWC,MAAAA,GAAG,2CAA2C,SAAS;AAAA,MACjE,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;;;;;;;;"}
@@ -1,216 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const React = require("react");
5
- const useEmblaCarousel = require("embla-carousel-react");
6
- const lucideReact = require("lucide-react");
7
- const utils = require("./index.cjs50.js");
8
- const button = require("./index.cjs11.js");
9
- function _interopNamespaceDefault(e) {
10
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
11
- if (e) {
12
- for (const k in e) {
13
- if (k !== "default") {
14
- const d = Object.getOwnPropertyDescriptor(e, k);
15
- Object.defineProperty(n, k, d.get ? d : {
16
- enumerable: true,
17
- get: () => e[k]
18
- });
19
- }
20
- }
21
- }
22
- n.default = e;
23
- return Object.freeze(n);
24
- }
25
- const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
26
- const CarouselContext = React__namespace.createContext(null);
27
- function useCarousel() {
28
- const context = React__namespace.useContext(CarouselContext);
29
- if (!context) {
30
- throw new Error("useCarousel must be used within a <Carousel />");
31
- }
32
- return context;
33
- }
34
- function Carousel({
35
- orientation = "horizontal",
36
- opts,
37
- setApi,
38
- plugins,
39
- className,
40
- children,
41
- ...props
42
- }) {
43
- const [carouselRef, api] = useEmblaCarousel(
44
- {
45
- ...opts,
46
- axis: orientation === "horizontal" ? "x" : "y"
47
- },
48
- plugins
49
- );
50
- const [canScrollPrev, setCanScrollPrev] = React__namespace.useState(false);
51
- const [canScrollNext, setCanScrollNext] = React__namespace.useState(false);
52
- const onSelect = React__namespace.useCallback((api2) => {
53
- if (!api2) return;
54
- setCanScrollPrev(api2.canScrollPrev());
55
- setCanScrollNext(api2.canScrollNext());
56
- }, []);
57
- const scrollPrev = React__namespace.useCallback(() => {
58
- api?.scrollPrev();
59
- }, [api]);
60
- const scrollNext = React__namespace.useCallback(() => {
61
- api?.scrollNext();
62
- }, [api]);
63
- const handleKeyDown = React__namespace.useCallback(
64
- (event) => {
65
- if (event.key === "ArrowLeft") {
66
- event.preventDefault();
67
- scrollPrev();
68
- } else if (event.key === "ArrowRight") {
69
- event.preventDefault();
70
- scrollNext();
71
- }
72
- },
73
- [scrollPrev, scrollNext]
74
- );
75
- React__namespace.useEffect(() => {
76
- if (!api || !setApi) return;
77
- setApi(api);
78
- }, [api, setApi]);
79
- React__namespace.useEffect(() => {
80
- if (!api) return;
81
- onSelect(api);
82
- api.on("reInit", onSelect);
83
- api.on("select", onSelect);
84
- return () => {
85
- api?.off("select", onSelect);
86
- };
87
- }, [api, onSelect]);
88
- return /* @__PURE__ */ jsxRuntime.jsx(
89
- CarouselContext.Provider,
90
- {
91
- value: {
92
- carouselRef,
93
- api,
94
- opts,
95
- orientation: orientation || (opts?.axis === "y" ? "vertical" : "horizontal"),
96
- scrollPrev,
97
- scrollNext,
98
- canScrollPrev,
99
- canScrollNext
100
- },
101
- children: /* @__PURE__ */ jsxRuntime.jsx(
102
- "div",
103
- {
104
- onKeyDownCapture: handleKeyDown,
105
- className: utils.cn("relative", className),
106
- role: "region",
107
- "aria-roledescription": "carousel",
108
- "data-slot": "carousel",
109
- ...props,
110
- children
111
- }
112
- )
113
- }
114
- );
115
- }
116
- function CarouselContent({ className, ...props }) {
117
- const { carouselRef, orientation } = useCarousel();
118
- return /* @__PURE__ */ jsxRuntime.jsx(
119
- "div",
120
- {
121
- ref: carouselRef,
122
- className: "overflow-hidden",
123
- "data-slot": "carousel-content",
124
- children: /* @__PURE__ */ jsxRuntime.jsx(
125
- "div",
126
- {
127
- className: utils.cn(
128
- "flex",
129
- orientation === "horizontal" ? "-ml-4" : "-mt-4 flex-col",
130
- className
131
- ),
132
- ...props
133
- }
134
- )
135
- }
136
- );
137
- }
138
- function CarouselItem({ className, ...props }) {
139
- const { orientation } = useCarousel();
140
- return /* @__PURE__ */ jsxRuntime.jsx(
141
- "div",
142
- {
143
- role: "group",
144
- "aria-roledescription": "slide",
145
- "data-slot": "carousel-item",
146
- className: utils.cn(
147
- "min-w-0 shrink-0 grow-0 basis-full",
148
- orientation === "horizontal" ? "pl-4" : "pt-4",
149
- className
150
- ),
151
- ...props
152
- }
153
- );
154
- }
155
- function CarouselPrevious({
156
- className,
157
- variant = "outline",
158
- size = "icon",
159
- ...props
160
- }) {
161
- const { orientation, scrollPrev, canScrollPrev } = useCarousel();
162
- return /* @__PURE__ */ jsxRuntime.jsxs(
163
- button.Button,
164
- {
165
- "data-slot": "carousel-previous",
166
- variant,
167
- size,
168
- className: utils.cn(
169
- "absolute size-8 rounded-full",
170
- orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90",
171
- className
172
- ),
173
- disabled: !canScrollPrev,
174
- onClick: scrollPrev,
175
- ...props,
176
- children: [
177
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowLeft, {}),
178
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Previous slide" })
179
- ]
180
- }
181
- );
182
- }
183
- function CarouselNext({
184
- className,
185
- variant = "outline",
186
- size = "icon",
187
- ...props
188
- }) {
189
- const { orientation, scrollNext, canScrollNext } = useCarousel();
190
- return /* @__PURE__ */ jsxRuntime.jsxs(
191
- button.Button,
192
- {
193
- "data-slot": "carousel-next",
194
- variant,
195
- size,
196
- className: utils.cn(
197
- "absolute size-8 rounded-full",
198
- orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90",
199
- className
200
- ),
201
- disabled: !canScrollNext,
202
- onClick: scrollNext,
203
- ...props,
204
- children: [
205
- /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ArrowRight, {}),
206
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Next slide" })
207
- ]
208
- }
209
- );
210
- }
211
- exports.Carousel = Carousel;
212
- exports.CarouselContent = CarouselContent;
213
- exports.CarouselItem = CarouselItem;
214
- exports.CarouselNext = CarouselNext;
215
- exports.CarouselPrevious = CarouselPrevious;
216
- //# sourceMappingURL=index.cjs14.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs14.js","sources":["../lib/components/ui/carousel.tsx"],"sourcesContent":["import * as React from \"react\";\nimport useEmblaCarousel, {\n type UseEmblaCarouselType,\n} from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Button } from \"./button\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n opts?: CarouselOptions;\n plugins?: CarouselPlugin;\n orientation?: \"horizontal\" | \"vertical\";\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext]\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation:\n orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div\n ref={carouselRef}\n className=\"overflow-hidden\"\n data-slot=\"carousel-content\"\n >\n <div\n className={cn(\n \"flex\",\n orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\",\n className\n )}\n {...props}\n />\n </div>\n );\n}\n\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className\n )}\n {...props}\n />\n );\n}\n\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-full\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"names":["React","api","jsx","cn","jsxs","Button","ArrowLeft","ArrowRight"],"mappings":"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"}
@@ -1,261 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const jsxRuntime = require("react/jsx-runtime");
4
- const React = require("react");
5
- const RechartsPrimitive = require("recharts");
6
- const utils = require("./index.cjs50.js");
7
- function _interopNamespaceDefault(e) {
8
- const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
- if (e) {
10
- for (const k in e) {
11
- if (k !== "default") {
12
- const d = Object.getOwnPropertyDescriptor(e, k);
13
- Object.defineProperty(n, k, d.get ? d : {
14
- enumerable: true,
15
- get: () => e[k]
16
- });
17
- }
18
- }
19
- }
20
- n.default = e;
21
- return Object.freeze(n);
22
- }
23
- const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React);
24
- const RechartsPrimitive__namespace = /* @__PURE__ */ _interopNamespaceDefault(RechartsPrimitive);
25
- const THEMES = { light: "", dark: ".dark" };
26
- const ChartContext = React__namespace.createContext(null);
27
- function useChart() {
28
- const context = React__namespace.useContext(ChartContext);
29
- if (!context) {
30
- throw new Error("useChart must be used within a <ChartContainer />");
31
- }
32
- return context;
33
- }
34
- function ChartContainer({
35
- id,
36
- className,
37
- children,
38
- config,
39
- ...props
40
- }) {
41
- const uniqueId = React__namespace.useId();
42
- const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
43
- return /* @__PURE__ */ jsxRuntime.jsx(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ jsxRuntime.jsxs(
44
- "div",
45
- {
46
- "data-slot": "chart",
47
- "data-chart": chartId,
48
- className: utils.cn(
49
- "[&_.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",
50
- className
51
- ),
52
- ...props,
53
- children: [
54
- /* @__PURE__ */ jsxRuntime.jsx(ChartStyle, { id: chartId, config }),
55
- /* @__PURE__ */ jsxRuntime.jsx(RechartsPrimitive__namespace.ResponsiveContainer, { children })
56
- ]
57
- }
58
- ) });
59
- }
60
- const ChartStyle = ({ id, config }) => {
61
- const colorConfig = Object.entries(config).filter(
62
- ([, config2]) => config2.theme || config2.color
63
- );
64
- if (!colorConfig.length) {
65
- return null;
66
- }
67
- return /* @__PURE__ */ jsxRuntime.jsx(
68
- "style",
69
- {
70
- dangerouslySetInnerHTML: {
71
- __html: Object.entries(THEMES).map(
72
- ([theme, prefix]) => `
73
- ${prefix} [data-chart=${id}] {
74
- ${colorConfig.map(([key, itemConfig]) => {
75
- const color = itemConfig.theme?.[theme] || itemConfig.color;
76
- return color ? ` --color-${key}: ${color};` : null;
77
- }).join("\n")}
78
- }
79
- `
80
- ).join("\n")
81
- }
82
- }
83
- );
84
- };
85
- const ChartTooltip = RechartsPrimitive__namespace.Tooltip;
86
- function ChartTooltipContent({
87
- active,
88
- payload,
89
- className,
90
- indicator = "dot",
91
- hideLabel = false,
92
- hideIndicator = false,
93
- label,
94
- labelFormatter,
95
- labelClassName,
96
- formatter,
97
- color,
98
- nameKey,
99
- labelKey
100
- }) {
101
- const { config } = useChart();
102
- const tooltipLabel = React__namespace.useMemo(() => {
103
- if (hideLabel || !payload?.length) {
104
- return null;
105
- }
106
- const [item] = payload;
107
- const key = `${labelKey || item?.dataKey || item?.name || "value"}`;
108
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
109
- const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
110
- if (labelFormatter) {
111
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
112
- }
113
- if (!value) {
114
- return null;
115
- }
116
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("font-medium", labelClassName), children: value });
117
- }, [
118
- label,
119
- labelFormatter,
120
- payload,
121
- hideLabel,
122
- labelClassName,
123
- config,
124
- labelKey
125
- ]);
126
- if (!active || !payload?.length) {
127
- return null;
128
- }
129
- const nestLabel = payload.length === 1 && indicator !== "dot";
130
- return /* @__PURE__ */ jsxRuntime.jsxs(
131
- "div",
132
- {
133
- className: utils.cn(
134
- "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",
135
- className
136
- ),
137
- children: [
138
- !nestLabel ? tooltipLabel : null,
139
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
140
- const key = `${nameKey || item.name || item.dataKey || "value"}`;
141
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
142
- const indicatorColor = color || item.payload.fill || item.color;
143
- return /* @__PURE__ */ jsxRuntime.jsx(
144
- "div",
145
- {
146
- className: utils.cn(
147
- "[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5",
148
- indicator === "dot" && "items-center"
149
- ),
150
- children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
151
- itemConfig?.icon ? /* @__PURE__ */ jsxRuntime.jsx(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ jsxRuntime.jsx(
152
- "div",
153
- {
154
- className: utils.cn(
155
- "shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)",
156
- {
157
- "h-2.5 w-2.5": indicator === "dot",
158
- "w-1": indicator === "line",
159
- "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
160
- "my-0.5": nestLabel && indicator === "dashed"
161
- }
162
- ),
163
- style: {
164
- "--color-bg": indicatorColor,
165
- "--color-border": indicatorColor
166
- }
167
- }
168
- ),
169
- /* @__PURE__ */ jsxRuntime.jsxs(
170
- "div",
171
- {
172
- className: utils.cn(
173
- "flex flex-1 justify-between leading-none",
174
- nestLabel ? "items-end" : "items-center"
175
- ),
176
- children: [
177
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-1.5", children: [
178
- nestLabel ? tooltipLabel : null,
179
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-muted-foreground", children: itemConfig?.label || item.name })
180
- ] }),
181
- item.value && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-foreground font-mono font-medium tabular-nums", children: item.value.toLocaleString() })
182
- ]
183
- }
184
- )
185
- ] })
186
- },
187
- item.dataKey
188
- );
189
- }) })
190
- ]
191
- }
192
- );
193
- }
194
- const ChartLegend = RechartsPrimitive__namespace.Legend;
195
- function ChartLegendContent({
196
- className,
197
- hideIcon = false,
198
- payload,
199
- verticalAlign = "bottom",
200
- nameKey
201
- }) {
202
- const { config } = useChart();
203
- if (!payload?.length) {
204
- return null;
205
- }
206
- return /* @__PURE__ */ jsxRuntime.jsx(
207
- "div",
208
- {
209
- className: utils.cn(
210
- "flex items-center justify-center gap-4",
211
- verticalAlign === "top" ? "pb-3" : "pt-3",
212
- className
213
- ),
214
- children: payload.filter((item) => item.type !== "none").map((item) => {
215
- const key = `${nameKey || item.dataKey || "value"}`;
216
- const itemConfig = getPayloadConfigFromPayload(config, item, key);
217
- return /* @__PURE__ */ jsxRuntime.jsxs(
218
- "div",
219
- {
220
- className: utils.cn(
221
- "[&>svg]:text-muted-foreground flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3"
222
- ),
223
- children: [
224
- itemConfig?.icon && !hideIcon ? /* @__PURE__ */ jsxRuntime.jsx(itemConfig.icon, {}) : /* @__PURE__ */ jsxRuntime.jsx(
225
- "div",
226
- {
227
- className: "h-2 w-2 shrink-0 rounded-[2px]",
228
- style: {
229
- backgroundColor: item.color
230
- }
231
- }
232
- ),
233
- itemConfig?.label
234
- ]
235
- },
236
- item.value
237
- );
238
- })
239
- }
240
- );
241
- }
242
- function getPayloadConfigFromPayload(config, payload, key) {
243
- if (typeof payload !== "object" || payload === null) {
244
- return void 0;
245
- }
246
- const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
247
- let configLabelKey = key;
248
- if (key in payload && typeof payload[key] === "string") {
249
- configLabelKey = payload[key];
250
- } else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
251
- configLabelKey = payloadPayload[key];
252
- }
253
- return configLabelKey in config ? config[configLabelKey] : config[key];
254
- }
255
- exports.ChartContainer = ChartContainer;
256
- exports.ChartLegend = ChartLegend;
257
- exports.ChartLegendContent = ChartLegendContent;
258
- exports.ChartStyle = ChartStyle;
259
- exports.ChartTooltip = ChartTooltip;
260
- exports.ChartTooltipContent = ChartTooltipContent;
261
- //# sourceMappingURL=index.cjs15.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs15.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":["React","jsxs","cn","jsx","RechartsPrimitive","config","Fragment"],"mappings":"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"}