@etus/ui 0.4.0-beta.15 → 0.4.0-beta.16

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 (47) hide show
  1. package/dist/{chunk-QUENPT24.js → chunk-2NY6DDLO.js} +5 -5
  2. package/dist/{chunk-QUENPT24.js.map → chunk-2NY6DDLO.js.map} +1 -1
  3. package/dist/chunk-345S7BBL.js +3 -0
  4. package/dist/{chunk-KRHL3YH2.js.map → chunk-345S7BBL.js.map} +1 -1
  5. package/dist/{chunk-7GCTZEMK.js → chunk-5U5XAOES.js} +68 -47
  6. package/dist/chunk-5U5XAOES.js.map +1 -0
  7. package/dist/chunk-COZXTBIU.js +176 -0
  8. package/dist/chunk-COZXTBIU.js.map +1 -0
  9. package/dist/{chunk-37IIHQP4.js → chunk-IMUBWKZC.js} +52 -4
  10. package/dist/chunk-IMUBWKZC.js.map +1 -0
  11. package/dist/{chunk-MDIXY44D.js → chunk-P27ERD6W.js} +2 -2
  12. package/dist/{chunk-MDIXY44D.js.map → chunk-P27ERD6W.js.map} +1 -1
  13. package/dist/{chunk-FDES5YDF.js → chunk-WMG2MMJF.js} +3 -3
  14. package/dist/chunk-WMG2MMJF.js.map +1 -0
  15. package/dist/{chunk-2Z722V5K.js → chunk-ZPAWUKJI.js} +40 -5
  16. package/dist/chunk-ZPAWUKJI.js.map +1 -0
  17. package/dist/components/advanced/index.js +7 -7
  18. package/dist/components/data-display/BarChart/index.js +1 -1
  19. package/dist/components/data-display/BarList/index.js +1 -1
  20. package/dist/components/data-display/DataTable/index.js +1 -1
  21. package/dist/components/data-display/EmptyState/index.js +1 -1
  22. package/dist/components/data-display/LineChart/index.js +1 -1
  23. package/dist/components/data-display/index.js +16 -16
  24. package/dist/components/feedback/index.js +2 -2
  25. package/dist/components/forms/index.js +9 -10
  26. package/dist/components/index.js +65 -66
  27. package/dist/components/layout/index.js +2 -2
  28. package/dist/components/navigation/AccountSwitch/index.js +1 -1
  29. package/dist/components/navigation/Sidebar/index.js +1 -1
  30. package/dist/components/navigation/index.js +4 -4
  31. package/dist/components/primitives/index.js +10 -10
  32. package/dist/components/workflow/index.js +7 -7
  33. package/dist/index.d.ts +582 -603
  34. package/dist/index.js +65 -66
  35. package/dist/styles.css +63 -50
  36. package/package.json +12 -13
  37. package/dist/chunk-2Z722V5K.js.map +0 -1
  38. package/dist/chunk-37IIHQP4.js.map +0 -1
  39. package/dist/chunk-7GCTZEMK.js.map +0 -1
  40. package/dist/chunk-FDES5YDF.js.map +0 -1
  41. package/dist/chunk-KRHL3YH2.js +0 -3
  42. package/dist/chunk-QYWCXM7F.js +0 -96
  43. package/dist/chunk-QYWCXM7F.js.map +0 -1
  44. package/dist/chunk-SXJMERQL.js +0 -40
  45. package/dist/chunk-SXJMERQL.js.map +0 -1
  46. package/dist/components/forms/ToggleGroup/index.js +0 -6
  47. package/dist/components/forms/ToggleGroup/index.js.map +0 -1
@@ -0,0 +1,176 @@
1
+ import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuSeparator, DropdownMenuLabel, DropdownMenuGroup, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, DropdownMenuItem } from './chunk-OXDWUKGP.js';
2
+ import { Avatar, AvatarImage, AvatarFallback } from './chunk-3BBOSSDG.js';
3
+ import { Badge } from './chunk-4GVOOXYD.js';
4
+ import { cn } from './chunk-HRNDJU7D.js';
5
+ import { ChevronsUpDown, Check } from 'lucide-react';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+
8
+ var MAX_NAVIGATION_DEPTH = 3;
9
+ function getCurrentAccount(accounts) {
10
+ for (const account of accounts) {
11
+ if (account.isCurrent) {
12
+ return account;
13
+ }
14
+ const currentChild = getCurrentAccount(account.children ?? []);
15
+ if (currentChild) {
16
+ return currentChild;
17
+ }
18
+ }
19
+ return void 0;
20
+ }
21
+ function AccountSwitchItemContent({
22
+ account,
23
+ isCurrent
24
+ }) {
25
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
26
+ /* @__PURE__ */ jsxs(Avatar, { size: "xs", children: [
27
+ account.avatarSrc && /* @__PURE__ */ jsx(AvatarImage, { alt: account.name, src: account.avatarSrc }),
28
+ /* @__PURE__ */ jsx(AvatarFallback, { children: account.avatarFallback ?? account.name.charAt(0) })
29
+ ] }),
30
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: account.name }),
31
+ account.plan && /* @__PURE__ */ jsx(
32
+ Badge,
33
+ {
34
+ color: account.plan === "PRO" ? "primary" : "muted",
35
+ size: "sm",
36
+ type: "pill-color",
37
+ children: account.plan
38
+ }
39
+ ),
40
+ isCurrent && /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: "size-3.5 text-primary" })
41
+ ] });
42
+ }
43
+ function AccountSwitch({
44
+ className,
45
+ accounts,
46
+ triggerShape = "pill",
47
+ placement = "sidebar",
48
+ header,
49
+ footer,
50
+ onSelect,
51
+ ...props
52
+ }) {
53
+ const currentAccount = getCurrentAccount(accounts) ?? accounts[0];
54
+ const contentAlign = placement === "header" ? "end" : "start";
55
+ const handleSelect = (account) => {
56
+ if (!account.disabled && account.id !== currentAccount?.id) {
57
+ onSelect?.(account);
58
+ }
59
+ };
60
+ const renderAccountItem = (account, depth) => {
61
+ const children = depth < MAX_NAVIGATION_DEPTH ? account.children ?? [] : [];
62
+ const hasChildren = children.length > 0;
63
+ const isCurrent = account.id === currentAccount?.id;
64
+ const stateProps = {
65
+ "aria-current": isCurrent ? "true" : void 0,
66
+ "data-selected": isCurrent ? "true" : void 0
67
+ };
68
+ if (hasChildren) {
69
+ return /* @__PURE__ */ jsxs(DropdownMenuSub, { children: [
70
+ /* @__PURE__ */ jsx(
71
+ DropdownMenuSubTrigger,
72
+ {
73
+ className: cn(
74
+ "flex min-w-0 items-center gap-2",
75
+ isCurrent && "bg-accent text-accent-foreground"
76
+ ),
77
+ "data-account-switch-level": depth,
78
+ disabled: account.disabled,
79
+ ...stateProps,
80
+ children: /* @__PURE__ */ jsx(AccountSwitchItemContent, { account, isCurrent })
81
+ }
82
+ ),
83
+ /* @__PURE__ */ jsx(
84
+ DropdownMenuSubContent,
85
+ {
86
+ className: "min-w-[var(--account-switch-content-min-width)]",
87
+ "data-account-switch-level": depth + 1,
88
+ children: /* @__PURE__ */ jsx(DropdownMenuGroup, { children: children.map(
89
+ (childAccount) => renderAccountItem(childAccount, depth + 1)
90
+ ) })
91
+ }
92
+ )
93
+ ] }, account.id);
94
+ }
95
+ return /* @__PURE__ */ jsx(
96
+ DropdownMenuItem,
97
+ {
98
+ className: cn(
99
+ "flex min-w-0 items-center gap-2",
100
+ isCurrent && "bg-accent text-accent-foreground"
101
+ ),
102
+ "data-account-switch-level": depth,
103
+ disabled: account.disabled,
104
+ onClick: () => {
105
+ handleSelect(account);
106
+ },
107
+ ...stateProps,
108
+ children: /* @__PURE__ */ jsx(AccountSwitchItemContent, { account, isCurrent })
109
+ },
110
+ account.id
111
+ );
112
+ };
113
+ return /* @__PURE__ */ jsxs(DropdownMenu, { children: [
114
+ /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
115
+ "button",
116
+ {
117
+ className: cn(
118
+ "inline-flex min-w-0 items-center gap-2 h-[var(--input-size-md-h)] border bg-card text-card-foreground transition-colors hover:bg-accent/50 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none",
119
+ triggerShape === "pill" ? "rounded-full pl-1.5 pr-3" : "rounded-[var(--radius-md)] px-3",
120
+ className
121
+ ),
122
+ "data-placement": placement,
123
+ "data-slot": "account-switch-trigger",
124
+ type: "button",
125
+ ...props,
126
+ children: [
127
+ currentAccount && /* @__PURE__ */ jsxs(Fragment, { children: [
128
+ /* @__PURE__ */ jsxs(Avatar, { size: "xs", children: [
129
+ currentAccount.avatarSrc && /* @__PURE__ */ jsx(
130
+ AvatarImage,
131
+ {
132
+ alt: currentAccount.name,
133
+ src: currentAccount.avatarSrc
134
+ }
135
+ ),
136
+ /* @__PURE__ */ jsx(AvatarFallback, { children: currentAccount.avatarFallback ?? currentAccount.name.charAt(0) })
137
+ ] }),
138
+ /* @__PURE__ */ jsx("span", { className: "truncate text-sm font-medium max-w-[var(--account-switch-name-max-width)]", children: currentAccount.name })
139
+ ] }),
140
+ /* @__PURE__ */ jsx(
141
+ ChevronsUpDown,
142
+ {
143
+ "aria-hidden": "true",
144
+ className: "size-3.5 text-muted-foreground shrink-0 ml-auto"
145
+ }
146
+ )
147
+ ]
148
+ }
149
+ ) }),
150
+ /* @__PURE__ */ jsxs(
151
+ DropdownMenuContent,
152
+ {
153
+ align: contentAlign,
154
+ className: "min-w-[var(--account-switch-content-min-width)]",
155
+ "data-placement": placement,
156
+ "data-slot": "account-switch-content",
157
+ children: [
158
+ header && /* @__PURE__ */ jsxs(Fragment, { children: [
159
+ /* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: header }),
160
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {})
161
+ ] }),
162
+ /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "text-xs font-medium text-muted-foreground uppercase tracking-wider", children: "Contas" }),
163
+ /* @__PURE__ */ jsx(DropdownMenuGroup, { children: accounts.map((account) => renderAccountItem(account, 1)) }),
164
+ footer && /* @__PURE__ */ jsxs(Fragment, { children: [
165
+ /* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
166
+ footer
167
+ ] })
168
+ ]
169
+ }
170
+ )
171
+ ] });
172
+ }
173
+
174
+ export { AccountSwitch };
175
+ //# sourceMappingURL=chunk-COZXTBIU.js.map
176
+ //# sourceMappingURL=chunk-COZXTBIU.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/navigation/AccountSwitch/AccountSwitch.tsx"],"names":[],"mappings":"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","file":"chunk-COZXTBIU.js","sourcesContent":["\"use client\";\n\nimport type {\n AccountSwitchAccount,\n AccountSwitchProps,\n} from \"./AccountSwitch.types\";\n\nimport { Check, ChevronsUpDown } from \"lucide-react\";\n\nimport { cn } from \"../../../lib/utils\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../../primitives/Avatar\";\nimport { Badge } from \"../../primitives/Badge\";\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuTrigger,\n} from \"../DropdownMenu\";\n\nconst MAX_NAVIGATION_DEPTH = 3;\n\nfunction getCurrentAccount(\n accounts: AccountSwitchAccount[],\n): AccountSwitchAccount | undefined {\n for (const account of accounts) {\n if (account.isCurrent) {\n return account;\n }\n\n const currentChild = getCurrentAccount(account.children ?? []);\n if (currentChild) {\n return currentChild;\n }\n }\n\n return undefined;\n}\n\nfunction AccountSwitchItemContent({\n account,\n isCurrent,\n}: {\n account: AccountSwitchAccount;\n isCurrent: boolean;\n}) {\n return (\n <>\n <Avatar size=\"xs\">\n {account.avatarSrc && (\n <AvatarImage alt={account.name} src={account.avatarSrc} />\n )}\n <AvatarFallback>\n {account.avatarFallback ?? account.name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <span className=\"min-w-0 flex-1 truncate\">{account.name}</span>\n {account.plan && (\n <Badge\n color={account.plan === \"PRO\" ? \"primary\" : \"muted\"}\n size=\"sm\"\n type=\"pill-color\"\n >\n {account.plan}\n </Badge>\n )}\n {isCurrent && (\n <Check aria-hidden=\"true\" className=\"size-3.5 text-primary\" />\n )}\n </>\n );\n}\n\nfunction AccountSwitch({\n className,\n accounts,\n triggerShape = \"pill\",\n placement = \"sidebar\",\n header,\n footer,\n onSelect,\n ...props\n}: AccountSwitchProps) {\n const currentAccount = getCurrentAccount(accounts) ?? accounts[0];\n const contentAlign = placement === \"header\" ? \"end\" : \"start\";\n\n const handleSelect = (account: AccountSwitchAccount) => {\n if (!account.disabled && account.id !== currentAccount?.id) {\n onSelect?.(account);\n }\n };\n\n const renderAccountItem = (account: AccountSwitchAccount, depth: number) => {\n const children =\n depth < MAX_NAVIGATION_DEPTH ? (account.children ?? []) : [];\n const hasChildren = children.length > 0;\n const isCurrent = account.id === currentAccount?.id;\n const stateProps = {\n \"aria-current\": isCurrent ? (\"true\" as const) : undefined,\n \"data-selected\": isCurrent ? \"true\" : undefined,\n };\n\n if (hasChildren) {\n return (\n <DropdownMenuSub key={account.id}>\n <DropdownMenuSubTrigger\n className={cn(\n \"flex min-w-0 items-center gap-2\",\n isCurrent && \"bg-accent text-accent-foreground\",\n )}\n data-account-switch-level={depth}\n disabled={account.disabled}\n {...stateProps}\n >\n <AccountSwitchItemContent account={account} isCurrent={isCurrent} />\n </DropdownMenuSubTrigger>\n <DropdownMenuSubContent\n className=\"min-w-[var(--account-switch-content-min-width)]\"\n data-account-switch-level={depth + 1}\n >\n <DropdownMenuGroup>\n {children.map((childAccount) =>\n renderAccountItem(childAccount, depth + 1),\n )}\n </DropdownMenuGroup>\n </DropdownMenuSubContent>\n </DropdownMenuSub>\n );\n }\n\n return (\n <DropdownMenuItem\n key={account.id}\n className={cn(\n \"flex min-w-0 items-center gap-2\",\n isCurrent && \"bg-accent text-accent-foreground\",\n )}\n data-account-switch-level={depth}\n disabled={account.disabled}\n onClick={() => {\n handleSelect(account);\n }}\n {...stateProps}\n >\n <AccountSwitchItemContent account={account} isCurrent={isCurrent} />\n </DropdownMenuItem>\n );\n };\n\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <button\n className={cn(\n \"inline-flex min-w-0 items-center gap-2 h-[var(--input-size-md-h)] border bg-card text-card-foreground transition-colors hover:bg-accent/50 focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none\",\n triggerShape === \"pill\"\n ? \"rounded-full pl-1.5 pr-3\"\n : \"rounded-[var(--radius-md)] px-3\",\n className,\n )}\n data-placement={placement}\n data-slot=\"account-switch-trigger\"\n type=\"button\"\n {...props}\n >\n {currentAccount && (\n <>\n <Avatar size=\"xs\">\n {currentAccount.avatarSrc && (\n <AvatarImage\n alt={currentAccount.name}\n src={currentAccount.avatarSrc}\n />\n )}\n <AvatarFallback>\n {currentAccount.avatarFallback ??\n currentAccount.name.charAt(0)}\n </AvatarFallback>\n </Avatar>\n <span className=\"truncate text-sm font-medium max-w-[var(--account-switch-name-max-width)]\">\n {currentAccount.name}\n </span>\n </>\n )}\n <ChevronsUpDown\n aria-hidden=\"true\"\n className=\"size-3.5 text-muted-foreground shrink-0 ml-auto\"\n />\n </button>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={contentAlign}\n className=\"min-w-[var(--account-switch-content-min-width)]\"\n data-placement={placement}\n data-slot=\"account-switch-content\"\n >\n {header && (\n <>\n <div className=\"px-2 py-1.5\">{header}</div>\n <DropdownMenuSeparator />\n </>\n )}\n <DropdownMenuLabel className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n Contas\n </DropdownMenuLabel>\n <DropdownMenuGroup>\n {accounts.map((account) => renderAccountItem(account, 1))}\n </DropdownMenuGroup>\n {footer && (\n <>\n <DropdownMenuSeparator />\n {footer}\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n}\n\nexport { AccountSwitch };\n"]}
@@ -1,7 +1,7 @@
1
1
  import { ChartTooltipContent, ChartContainer, ChartTooltip, ChartLegend, ChartLegendContent } from './chunk-7I6KK6QE.js';
2
2
  import { cn } from './chunk-HRNDJU7D.js';
3
3
  import * as React from 'react';
4
- import { BarChart as BarChart$1, CartesianGrid, XAxis, Label, YAxis, Bar } from 'recharts';
4
+ import { BarChart as BarChart$1, CartesianGrid, XAxis, Label, YAxis, Bar, LabelList } from 'recharts';
5
5
  import { jsx, jsxs } from 'react/jsx-runtime';
6
6
 
7
7
  function normalizeSeriesConfig(series) {
@@ -9,6 +9,43 @@ function normalizeSeriesConfig(series) {
9
9
  (s) => typeof s === "string" ? { dataKey: s } : s
10
10
  );
11
11
  }
12
+ function renderBarValueLabel(isHorizontal, formatter) {
13
+ return function BarValueLabel(labelProps) {
14
+ const props = labelProps;
15
+ if (props.value == null) return null;
16
+ const value = Number(props.value);
17
+ const height = Number(props.height ?? 0);
18
+ const width = Number(props.width ?? 0);
19
+ const x = Number(props.x ?? 0);
20
+ const y = Number(props.y ?? 0);
21
+ const text = formatter ? formatter(value) : String(props.value);
22
+ const negative = value < 0;
23
+ if ((isHorizontal ? width : height) === 0) return null;
24
+ if (isHorizontal) {
25
+ return /* @__PURE__ */ jsx(
26
+ "text",
27
+ {
28
+ className: "fill-foreground text-xs",
29
+ dominantBaseline: "central",
30
+ textAnchor: negative ? "end" : "start",
31
+ x: negative ? x - 6 : x + width + 6,
32
+ y: y + height / 2,
33
+ children: text
34
+ }
35
+ );
36
+ }
37
+ return /* @__PURE__ */ jsx(
38
+ "text",
39
+ {
40
+ className: "fill-foreground text-xs",
41
+ textAnchor: "middle",
42
+ x: x + width / 2,
43
+ y: negative ? y + height + 14 : Math.max(y - 6, 12),
44
+ children: text
45
+ }
46
+ );
47
+ };
48
+ }
12
49
  function BarChart({
13
50
  allowDecimals = true,
14
51
  ariaLabel,
@@ -31,6 +68,7 @@ function BarChart({
31
68
  series,
32
69
  showGrid = true,
33
70
  showLegend = false,
71
+ showValueLabels = false,
34
72
  showTooltip = true,
35
73
  showXAxis = true,
36
74
  showYAxis = true,
@@ -213,7 +251,17 @@ function BarChart({
213
251
  radius: barRadius,
214
252
  stackId: isStacked ? "bar-stack" : stackId,
215
253
  style: onValueChange ? { cursor: "pointer" } : void 0,
216
- onClick: onValueChange ? handleBarClick(dataKey) : void 0
254
+ onClick: onValueChange ? handleBarClick(dataKey) : void 0,
255
+ children: showValueLabels ? /* @__PURE__ */ jsx(
256
+ LabelList,
257
+ {
258
+ content: renderBarValueLabel(
259
+ isHorizontal,
260
+ typeof showValueLabels === "object" ? showValueLabels.formatter : void 0
261
+ ),
262
+ dataKey
263
+ }
264
+ ) : null
217
265
  },
218
266
  dataKey
219
267
  );
@@ -229,5 +277,5 @@ function BarChart({
229
277
  BarChart.displayName = "BarChart";
230
278
 
231
279
  export { BarChart };
232
- //# sourceMappingURL=chunk-37IIHQP4.js.map
233
- //# sourceMappingURL=chunk-37IIHQP4.js.map
280
+ //# sourceMappingURL=chunk-IMUBWKZC.js.map
281
+ //# sourceMappingURL=chunk-IMUBWKZC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data-display/BarChart/BarChart.tsx"],"names":["data","props","RechartsBarChart"],"mappings":";;;;;;AA8BA,SAAS,sBACP,MAAA,EACwB;AACxB,EAAA,OAAO,MAAA,CAAO,GAAA;AAAA,IAAI,CAAC,MACjB,OAAO,CAAA,KAAM,WAAW,EAAE,OAAA,EAAS,GAAE,GAAI;AAAA,GAC3C;AACF;AAqCA,SAAS,mBAAA,CACP,cACA,SAAA,EACA;AACA,EAAA,OAAO,SAAS,cAAc,UAAA,EAAqB;AACjD,IAAA,MAAM,KAAA,GAAQ,UAAA;AACd,IAAA,IAAI,KAAA,CAAM,KAAA,IAAS,IAAA,EAAM,OAAO,IAAA;AAChC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAK,CAAA;AAChC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,KAAA,CAAM,MAAA,IAAU,CAAC,CAAA;AACvC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,KAAA,IAAS,CAAC,CAAA;AACrC,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,CAAC,CAAA;AAC7B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,KAAA,CAAM,CAAA,IAAK,CAAC,CAAA;AAC7B,IAAA,MAAM,OAAO,SAAA,GAAY,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,MAAM,KAAK,CAAA;AAC9D,IAAA,MAAM,WAAW,KAAA,GAAQ,CAAA;AAEzB,IAAA,IAAA,CAAK,YAAA,GAAe,KAAA,GAAQ,MAAA,MAAY,CAAA,EAAG,OAAO,IAAA;AAClD,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,uBACE,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,yBAAA;AAAA,UACV,gBAAA,EAAiB,SAAA;AAAA,UACjB,UAAA,EAAY,WAAW,KAAA,GAAQ,OAAA;AAAA,UAC/B,CAAA,EAAG,QAAA,GAAW,CAAA,GAAI,CAAA,GAAI,IAAI,KAAA,GAAQ,CAAA;AAAA,UAClC,CAAA,EAAG,IAAI,MAAA,GAAS,CAAA;AAAA,UAEf,QAAA,EAAA;AAAA;AAAA,OACH;AAAA,IAEJ;AACA,IAAA,uBACE,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,yBAAA;AAAA,QACV,UAAA,EAAW,QAAA;AAAA,QACX,CAAA,EAAG,IAAI,KAAA,GAAQ,CAAA;AAAA,QACf,CAAA,EAAG,WAAW,CAAA,GAAI,MAAA,GAAS,KAAK,IAAA,CAAK,GAAA,CAAI,CAAA,GAAI,CAAA,EAAG,EAAE,CAAA;AAAA,QAEjD,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ,CAAA;AACF;AAEO,SAAS,QAAA,CAAS;AAAA,EACvB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA;AAAA,EACA,YAAA,GAAe,KAAA;AAAA,EACf,cAAA;AAAA,EACA,MAAA,GAAS,CAAA;AAAA,EACT,SAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACrB,aAAA,GAAgB,KAAA;AAAA,EAChB,YAAA;AAAA,EACA,MAAA,GAAS,UAAA;AAAA,EACT,cAAA,GAAiB,QAAA;AAAA,EACjB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,MAAA,GAAS,CAAA;AAAA,EACT,MAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,UAAA,GAAa,KAAA;AAAA,EACb,eAAA,GAAkB,KAAA;AAAA,EAClB,WAAA,GAAc,IAAA;AAAA,EACd,SAAA,GAAY,IAAA;AAAA,EACZ,SAAA,GAAY,IAAA;AAAA,EACZ,YAAA,GAAe,KAAA;AAAA,EACf,OAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA,GAAmB,KAAA;AAAA,EACnB,OAAA,GAAU,SAAA;AAAA,EACV,QAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,gBAAA,GAAmB,sBAAsB,MAAM,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,OAAA,KAAY,SAAA,IAAa,OAAA,KAAY,YAAA;AACvD,EAAA,MAAM,eAAe,MAAA,KAAW,YAAA;AAChC,EAAA,MAAM,mBAAA,GAA4B,aAAgB,KAAK,CAAA;AAGvD,EAAA,MAAM,cAAA,GAAuB,KAAA,CAAA,WAAA;AAAA;AAAA,IAE3B,CAAC,OAAA,KAAoB,CAACA,KAAAA,KAAc;AAElC,MAAA,IAAI,CAAC,aAAA,IAAiB,CAACA,KAAAA,EAAM,OAAA,EAAS;AAEtC,MAAA,MAAM,UAAUA,KAAAA,CAAK,OAAA;AACrB,MAAA,MAAM,KAAA,GAAQ,QAAQ,OAAO,CAAA;AAC7B,MAAA,aAAA,CAAc;AAAA,QACZ,QAAA,EAAU,QAAQ,QAAQ,CAAA;AAAA,QAC1B,OAAA;AAAA,QACA,OAAA;AAAA,QACA,KAAA,EAAO,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ;AAAA,OAC5C,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,eAAe,QAAQ;AAAA,GAC1B;AAIA,EAAA,MAAM,0BAAA,GAAmC,KAAA,CAAA,WAAA;AAAA;AAAA,IAEvC,CAACC,MAAAA,KAAe;AACd,MAAA,MAAM,EAAE,MAAA,GAAS,KAAA,EAAO,KAAA,EAAO,SAAQ,GAAIA,MAAAA;AAG3C,MAAA,IAAI,eAAA,IAAmB,MAAA,KAAW,mBAAA,CAAoB,OAAA,EAAS;AAC7D,QAAA,mBAAA,CAAoB,OAAA,GAAU,MAAA;AAC9B,QAAA,eAAA,CAAgB;AAAA,UACd,MAAA;AAAA,UACA,KAAA;AAAA,UACA,OAAA,EAAS,OAAA,EAAS,GAAA,CAAI,CAAC,CAAA,MAAuF;AAAA,YAC5G,OAAA,EAAS,MAAA,CAAO,CAAA,CAAE,OAAO,CAAA;AAAA,YACzB,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,SAAS,CAAA,CAAE;AAAA,WACb,CAAE;AAAA,SACH,CAAA;AAAA,MACH;AAEA,MAAA,uBAAO,GAAA,CAAC,mBAAA,EAAA,EAAoB,SAAA,EAAW,gBAAA,EAAmB,GAAGA,MAAAA,EAAO,CAAA;AAAA,IACtE,CAAA;AAAA,IACA,CAAC,iBAAiB,gBAAgB;AAAA,GACpC;AAGA,EAAA,MAAM,WAAA,GAAoB,cAAQ,MAAM;AACtC,IAAA,MAAM,GAAA,GAAM,QAAA,KAAa,YAAA,GAAe,MAAA,GAAS,CAAA,CAAA;AACjD,IAAA,MAAM,MAAM,QAAA,IAAY,MAAA;AACxB,IAAA,OAAO,CAAC,KAAK,GAAG,CAAA;AAAA,EAClB,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,QAAQ,CAAC,CAAA;AAGrC,EAAA,MAAM,aAAA,GAAsB,cAAQ,MAAM;AACxC,IAAA,IAAI,CAAC,YAAA,IAAgB,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACtC,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AACjC,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM;AACrB,IAAA,OAAO,CAAC,KAAA,CAAM,QAAQ,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AAAA,EACzC,CAAA,EAAG,CAAC,IAAA,EAAM,YAAA,EAAc,QAAQ,CAAC,CAAA;AAEjC,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,YAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAM,YAAY,KAAA,GAAQ,MAAA;AAAA,MACzB,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,UACvB,MAAA;AAAA,UAEA,QAAA,kBAAA,IAAA;AAAA,YAACC,UAAA;AAAA,YAAA;AAAA,cACC,kBAAA,EAAkB,IAAA;AAAA,cAClB,MAAA,EAAQ;AAAA,gBACN,IAAA,EAAM,aAAa,EAAA,GAAK,EAAA;AAAA,gBACxB,KAAA,EAAO,EAAA;AAAA,gBACP,MAAA,EAAQ,aAAa,EAAA,GAAK;AAAA,eAC5B;AAAA,cACA,cAAA;AAAA,cACA,MAAA;AAAA,cACA,IAAA;AAAA,cACA,MAAA,EAAQ,eAAe,UAAA,GAAa,YAAA;AAAA,cAEnC,QAAA,EAAA;AAAA,gBAAA,QAAA,oBACC,GAAA;AAAA,kBAAC,aAAA;AAAA,kBAAA;AAAA,oBACC,YAAY,CAAC,YAAA;AAAA,oBACb,eAAA,EAAiB,aAAA;AAAA,oBACjB,QAAA,EAAU;AAAA;AAAA,iBACZ;AAAA,gBAGD,cACC,YAAA,mBACE,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,KAAA;AAAA,oBACV,MAAA,EAAQ,WAAA;AAAA,oBACR,QAAA,EAAU,YAAA;AAAA,oBACV,UAAA,EAAY,OAAA;AAAA,oBACZ,aAAA,EAAe,kBAAA;AAAA,oBACf,QAAA,EAAU,KAAA;AAAA,oBACV,UAAA,EAAY,CAAA;AAAA,oBACZ,IAAA,EAAK,QAAA;AAAA,oBAEJ,QAAA,EAAA,UAAA,wBACE,KAAA,EAAA,EAAM,MAAA,EAAQ,IAAI,QAAA,EAAS,cAAA,EAAe,OAAO,UAAA,EAAY;AAAA;AAAA,iBAElE,mBAEA,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,KAAA;AAAA,oBACV,OAAA,EAAS,QAAA;AAAA,oBACT,QAAA,EAAU,YAAA;AAAA,oBACV,UAAA,EAAY,OAAA;AAAA,oBACZ,aAAA,EAAe,kBAAA;AAAA,oBACf,QAAA,EAAU,KAAA;AAAA,oBACV,UAAA,EAAY,CAAA;AAAA,oBACZ,KAAA,EAAO,aAAA;AAAA,oBAEN,QAAA,EAAA,UAAA,wBACE,KAAA,EAAA,EAAM,MAAA,EAAQ,IAAI,QAAA,EAAS,cAAA,EAAe,OAAO,UAAA,EAAY;AAAA;AAAA,iBAElE,CAAA;AAAA,gBAIH,cACC,YAAA,mBACE,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,KAAA;AAAA,oBACV,OAAA,EAAS,QAAA;AAAA,oBACT,aAAA,EAAe,kBAAA;AAAA,oBACf,QAAA,EAAU,KAAA;AAAA,oBACV,UAAA,EAAY,CAAA;AAAA,oBACZ,KAAA,EAAO,aAAA;AAAA,oBACP,IAAA,EAAK,UAAA;AAAA,oBACL,KAAA,EAAO,UAAA;AAAA,oBAEN,QAAA,EAAA,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,GAAA,EAAK,QAAQ,EAAA,EAAI,QAAA,EAAS,YAAA,EAAa,KAAA,EAAO,UAAA,EAAY;AAAA;AAAA,iBAE5E,mBAEA,GAAA;AAAA,kBAAC,KAAA;AAAA,kBAAA;AAAA,oBACC,aAAA;AAAA,oBACA,QAAA,EAAU,KAAA;AAAA,oBACV,MAAA,EAAQ,WAAA;AAAA,oBACR,aAAA,EAAe,kBAAA;AAAA,oBACf,QAAA,EAAU,KAAA;AAAA,oBACV,UAAA,EAAY,CAAA;AAAA,oBACZ,KAAA,EAAO,UAAA;AAAA,oBAEN,QAAA,EAAA,UAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAM,KAAA,EAAO,GAAA,EAAK,QAAQ,EAAA,EAAI,QAAA,EAAS,YAAA,EAAa,KAAA,EAAO,UAAA,EAAY;AAAA;AAAA,iBAE5E,CAAA;AAAA,gBAIH,WAAA,oBACC,GAAA;AAAA,kBAAC,YAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EACE,kBACM,eAAA,mBACA,GAAA,CAAC,8BAA2B,CAAA,mBAC5B,GAAA,CAAC,mBAAA,EAAA,EAAoB,SAAA,EAAW,gBAAA,EAAkB,CAAA,CAAA;AAAA,oBAE1D,MAAA,EAAQ;AAAA;AAAA,iBACV;AAAA,gBAGD,UAAA,oBACC,GAAA;AAAA,kBAAC,WAAA;AAAA,kBAAA;AAAA,oBACC,OAAO,cAAA,KAAmB,MAAA,GAAS,MAAA,GAAS,cAAA,KAAmB,UAAU,OAAA,GAAU,QAAA;AAAA,oBACnF,OAAA,kBAAS,GAAA,CAAC,kBAAA,EAAA,EAAmB,YAAA,EAAc,kBAAA,EAAoB,CAAA;AAAA,oBAC/D,MAAA,EAAQ,cAAA,KAAmB,MAAA,IAAU,cAAA,KAAmB,UAAU,UAAA,GAAa,YAAA;AAAA,oBAC/E,eAAe,cAAA,KAAmB,KAAA,GAAQ,KAAA,GAAQ,cAAA,KAAmB,WAAW,QAAA,GAAW;AAAA;AAAA,iBAC7F;AAAA,gBAGD,gBAAA,CAAiB,GAAA,CAAI,CAAC,YAAA,KAAiB;AACtC,kBAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,YAAA,EAAc,SAAQ,GAAI,YAAA;AAEnD,kBAAA,MAAM,IAAA,GAAO,eAAe,OAAO,CAAA,CAAA,CAAA;AACnC,kBAAA,MAAM,YAAY,YAAA,IAAgB,MAAA;AAElC,kBAAA,uBACE,GAAA;AAAA,oBAAC,GAAA;AAAA,oBAAA;AAAA,sBAEC,OAAA;AAAA,sBACA,IAAA;AAAA,sBACA,MAAA,EAAQ,SAAA;AAAA,sBACR,OAAA,EAAS,YAAY,WAAA,GAAc,OAAA;AAAA,sBACnC,KAAA,EAAO,aAAA,GAAgB,EAAE,MAAA,EAAQ,WAAU,GAAI,MAAA;AAAA,sBAC/C,OAAA,EAAS,aAAA,GAAgB,cAAA,CAAe,OAAO,CAAA,GAAI,MAAA;AAAA,sBAElD,QAAA,EAAA,eAAA,mBACC,GAAA;AAAA,wBAAC,SAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,mBAAA;AAAA,4BACP,YAAA;AAAA,4BACA,OAAO,eAAA,KAAoB,QAAA,GAAW,eAAA,CAAgB,SAAA,GAAY;AAAA,2BACpE;AAAA,0BACA;AAAA;AAAA,uBACF,GACE;AAAA,qBAAA;AAAA,oBAhBC;AAAA,mBAiBP;AAAA,gBAEJ,CAAC;AAAA;AAAA;AAAA;AACH;AAAA;AACF;AAAA,GACF;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA","file":"chunk-IMUBWKZC.js","sourcesContent":["\"use client\"\n\nimport type {\n BarChartProps,\n BarChartSeriesConfig,\n} from \"./BarChart.types\"\n\nimport * as React from \"react\"\nimport {\n Bar,\n CartesianGrid,\n Label,\n LabelList,\n BarChart as RechartsBarChart,\n XAxis,\n YAxis,\n} from \"recharts\"\n\nimport { cn } from \"../../../lib/utils\"\nimport {\n ChartContainer,\n ChartLegend,\n ChartLegendContent,\n ChartTooltip,\n ChartTooltipContent,\n} from \"../Chart\"\n\n/**\n * Normalize series to BarChartSeriesConfig format\n */\nfunction normalizeSeriesConfig(\n series: (BarChartSeriesConfig | string)[]\n): BarChartSeriesConfig[] {\n return series.map((s) =>\n typeof s === \"string\" ? { dataKey: s } : s\n )\n}\n\n/**\n * BarChart - Data visualization component for categorical comparisons\n *\n * Displays quantitative values as rectangular bars. The height or width\n * of bars is proportional to the values they represent. Ideal for\n * comparing values between categories.\n *\n * @example\n * ```tsx\n * const data = [\n * { month: \"Jan\", desktop: 186, mobile: 80 },\n * { month: \"Feb\", desktop: 305, mobile: 200 },\n * ]\n *\n * const config = {\n * desktop: { label: \"Desktop\", color: \"hsl(var(--chart-1))\" },\n * mobile: { label: \"Mobile\", color: \"hsl(var(--chart-2))\" },\n * }\n *\n * <BarChart\n * data={data}\n * config={config}\n * xAxisKey=\"month\"\n * series={[\"desktop\", \"mobile\"]}\n * />\n * ```\n */\ninterface BarValueLabelProps {\n height?: number | string\n value?: number | string\n width?: number | string\n x?: number | string\n y?: number | string\n}\n\nfunction renderBarValueLabel(\n isHorizontal: boolean,\n formatter?: (value: number) => string\n) {\n return function BarValueLabel(labelProps: unknown) {\n const props = labelProps as BarValueLabelProps\n if (props.value == null) return null\n const value = Number(props.value)\n const height = Number(props.height ?? 0)\n const width = Number(props.width ?? 0)\n const x = Number(props.x ?? 0)\n const y = Number(props.y ?? 0)\n const text = formatter ? formatter(value) : String(props.value)\n const negative = value < 0\n // barra de tamanho zero não ganha rótulo (diverging: cada mês zera um lado)\n if ((isHorizontal ? width : height) === 0) return null\n if (isHorizontal) {\n return (\n <text\n className=\"fill-foreground text-xs\"\n dominantBaseline=\"central\"\n textAnchor={negative ? \"end\" : \"start\"}\n x={negative ? x - 6 : x + width + 6}\n y={y + height / 2}\n >\n {text}\n </text>\n )\n }\n return (\n <text\n className=\"fill-foreground text-xs\"\n textAnchor=\"middle\"\n x={x + width / 2}\n y={negative ? y + height + 14 : Math.max(y - 6, 12)}\n >\n {text}\n </text>\n )\n }\n}\n\nexport function BarChart({\n allowDecimals = true,\n ariaLabel,\n autoMinValue = false,\n barCategoryGap,\n barGap = 4,\n className,\n config,\n customTooltip,\n data,\n enableLegendSlider = false,\n gridDashArray = \"3 3\",\n intervalType,\n layout = \"vertical\",\n legendPosition = \"bottom\",\n maxValue,\n minValue,\n onValueChange,\n radius = 4,\n series,\n showGrid = true,\n showLegend = false,\n showValueLabels = false,\n showTooltip = true,\n showXAxis = true,\n showYAxis = true,\n startEndOnly = false,\n tickGap,\n tooltipCallback,\n tooltipIndicator = \"dot\",\n variant = \"default\",\n xAxisKey,\n xAxisLabel,\n xAxisTickFormatter,\n yAxisLabel,\n yAxisTickFormatter,\n yAxisWidth,\n ...props\n}: BarChartProps) {\n const normalizedSeries = normalizeSeriesConfig(series)\n const isStacked = variant === \"stacked\" || variant === \"stacked100\"\n const isHorizontal = layout === \"horizontal\"\n const prevTooltipStateRef = React.useRef<boolean>(false)\n\n // Handle bar click for onValueChange\n const handleBarClick = React.useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (dataKey: string) => (data: any) => {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n if (!onValueChange || !data?.payload) return\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const payload = data.payload as Record<string, unknown>\n const value = payload[dataKey]\n onValueChange({\n category: payload[xAxisKey],\n dataKey,\n payload,\n value: typeof value === \"number\" ? value : 0,\n })\n },\n [onValueChange, xAxisKey]\n )\n\n /* eslint-disable react-hooks/static-components, @eslint-react/no-nested-component-definitions, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access -- Intentional: memoized render function with Recharts any-typed props */\n // Custom tooltip content wrapper for tooltipCallback\n const TooltipContentWithCallback = React.useCallback(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (props: any) => {\n const { active = false, label, payload } = props\n\n // Call tooltipCallback when state changes\n if (tooltipCallback && active !== prevTooltipStateRef.current) {\n prevTooltipStateRef.current = active\n tooltipCallback({\n active,\n label,\n payload: payload?.map((p: { dataKey: number | string; payload: Record<string, unknown>; value: number; }) => ({\n dataKey: String(p.dataKey),\n value: p.value,\n payload: p.payload,\n })),\n })\n }\n\n return <ChartTooltipContent indicator={tooltipIndicator} {...props} />\n },\n [tooltipCallback, tooltipIndicator]\n )\n\n // Calculate value axis domain\n const valueDomain = React.useMemo(() => {\n const min = minValue ?? (autoMinValue ? \"auto\" : 0)\n const max = maxValue ?? \"auto\"\n return [min, max] as const\n }, [autoMinValue, maxValue, minValue])\n\n // Calculate category axis ticks for startEndOnly\n const categoryTicks = React.useMemo(() => {\n if (!startEndOnly || data.length < 2) return\n const first = data[0]\n const last = data[data.length - 1]\n if (!first || !last) return\n return [first[xAxisKey], last[xAxisKey]] as string[]\n }, [data, startEndOnly, xAxisKey])\n\n return (\n <div\n aria-label={ariaLabel}\n data-slot=\"bar-chart\"\n role={ariaLabel ? \"img\" : undefined}\n {...props}\n >\n <ChartContainer\n className={cn(className)}\n config={config}\n >\n <RechartsBarChart\n accessibilityLayer\n margin={{\n left: yAxisLabel ? 20 : 12,\n right: 12,\n bottom: xAxisLabel ? 20 : 0,\n }}\n barCategoryGap={barCategoryGap}\n barGap={barGap}\n data={data}\n layout={isHorizontal ? \"vertical\" : \"horizontal\"}\n >\n {showGrid && (\n <CartesianGrid\n horizontal={!isHorizontal}\n strokeDasharray={gridDashArray}\n vertical={isHorizontal}\n />\n )}\n\n {showXAxis && (\n isHorizontal ? (\n <XAxis\n axisLine={false}\n domain={valueDomain}\n interval={intervalType}\n minTickGap={tickGap}\n tickFormatter={xAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n type=\"number\"\n >\n {xAxisLabel && (\n <Label offset={-5} position=\"insideBottom\" value={xAxisLabel} />\n )}\n </XAxis>\n ) : (\n <XAxis\n axisLine={false}\n dataKey={xAxisKey}\n interval={intervalType}\n minTickGap={tickGap}\n tickFormatter={xAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n ticks={categoryTicks}\n >\n {xAxisLabel && (\n <Label offset={-5} position=\"insideBottom\" value={xAxisLabel} />\n )}\n </XAxis>\n )\n )}\n\n {showYAxis && (\n isHorizontal ? (\n <YAxis\n axisLine={false}\n dataKey={xAxisKey}\n tickFormatter={yAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n ticks={categoryTicks}\n type=\"category\"\n width={yAxisWidth}\n >\n {yAxisLabel && (\n <Label angle={-90} offset={-5} position=\"insideLeft\" value={yAxisLabel} />\n )}\n </YAxis>\n ) : (\n <YAxis\n allowDecimals={allowDecimals}\n axisLine={false}\n domain={valueDomain}\n tickFormatter={yAxisTickFormatter}\n tickLine={false}\n tickMargin={8}\n width={yAxisWidth}\n >\n {yAxisLabel && (\n <Label angle={-90} offset={-5} position=\"insideLeft\" value={yAxisLabel} />\n )}\n </YAxis>\n )\n )}\n\n {showTooltip && (\n <ChartTooltip\n content={\n customTooltip\n ?? (tooltipCallback\n ? <TooltipContentWithCallback />\n : <ChartTooltipContent indicator={tooltipIndicator} />)\n }\n cursor={false}\n />\n )}\n\n {showLegend && (\n <ChartLegend\n align={legendPosition === \"left\" ? \"left\" : legendPosition === \"right\" ? \"right\" : \"center\"}\n content={<ChartLegendContent enableSlider={enableLegendSlider} />}\n layout={legendPosition === \"left\" || legendPosition === \"right\" ? \"vertical\" : \"horizontal\"}\n verticalAlign={legendPosition === \"top\" ? \"top\" : legendPosition === \"bottom\" ? \"bottom\" : \"middle\"}\n />\n )}\n\n {normalizedSeries.map((seriesConfig) => {\n const { dataKey, radius: seriesRadius, stackId } = seriesConfig\n\n const fill = `var(--color-${dataKey})`\n const barRadius = seriesRadius ?? radius\n\n return (\n <Bar\n key={dataKey}\n dataKey={dataKey}\n fill={fill}\n radius={barRadius}\n stackId={isStacked ? \"bar-stack\" : stackId}\n style={onValueChange ? { cursor: \"pointer\" } : undefined}\n onClick={onValueChange ? handleBarClick(dataKey) : undefined}\n >\n {showValueLabels ? (\n <LabelList\n content={renderBarValueLabel(\n isHorizontal,\n typeof showValueLabels === \"object\" ? showValueLabels.formatter : undefined\n )}\n dataKey={dataKey}\n />\n ) : null}\n </Bar>\n )\n })}\n </RechartsBarChart>\n </ChartContainer>\n </div>\n )\n}\n\nBarChart.displayName = \"BarChart\"\n"]}
@@ -4501,5 +4501,5 @@ function DataTableDateCell({
4501
4501
  }
4502
4502
 
4503
4503
  export { DataTable, DataTableBooleanCell, DataTableCurrencyCell, DataTableDateCell, DataTableProgressCell, DataTableRatingCell, downloadFile, exportToCSV, exportToExcel, exportToPDF, tableToCSV };
4504
- //# sourceMappingURL=chunk-MDIXY44D.js.map
4505
- //# sourceMappingURL=chunk-MDIXY44D.js.map
4504
+ //# sourceMappingURL=chunk-P27ERD6W.js.map
4505
+ //# sourceMappingURL=chunk-P27ERD6W.js.map