@marcoschwartz/lite-ui 0.27.10 → 0.27.11
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.
- package/dist/index.js +248 -244
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +130 -126
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -664,7 +664,7 @@ var Navbar = ({
|
|
|
664
664
|
sticky = false,
|
|
665
665
|
variant = "solid"
|
|
666
666
|
}) => {
|
|
667
|
-
const
|
|
667
|
+
const baseClasses2 = sticky ? "sticky top-0 z-40" : "";
|
|
668
668
|
const getVariantClasses2 = () => {
|
|
669
669
|
switch (variant) {
|
|
670
670
|
case "glass":
|
|
@@ -676,7 +676,7 @@ var Navbar = ({
|
|
|
676
676
|
return "bg-[hsl(var(--background))] border-b border-[hsl(var(--border))]";
|
|
677
677
|
}
|
|
678
678
|
};
|
|
679
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: `${getVariantClasses2()} ${
|
|
679
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("nav", { className: `${getVariantClasses2()} ${baseClasses2} ${className}`, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex justify-between items-center h-16", children: [
|
|
680
680
|
logo && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex items-center", children: logo }),
|
|
681
681
|
children && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex items-center gap-6", children })
|
|
682
682
|
] }) }) });
|
|
@@ -869,7 +869,7 @@ var SidebarNavItem = ({
|
|
|
869
869
|
const iconElement = leftSection || icon;
|
|
870
870
|
const hasChildren = import_react4.default.Children.count(children) > 0;
|
|
871
871
|
const Component = component || (href ? "a" : "button");
|
|
872
|
-
const
|
|
872
|
+
const baseClasses2 = `
|
|
873
873
|
flex items-center gap-3 w-full px-3 py-2.5 rounded-lg
|
|
874
874
|
text-sm font-medium
|
|
875
875
|
transition-colors duration-150
|
|
@@ -898,7 +898,7 @@ var SidebarNavItem = ({
|
|
|
898
898
|
"button",
|
|
899
899
|
{
|
|
900
900
|
onClick: handleClick,
|
|
901
|
-
className:
|
|
901
|
+
className: baseClasses2,
|
|
902
902
|
"aria-disabled": disabled,
|
|
903
903
|
"aria-expanded": childrenOpen,
|
|
904
904
|
children: content
|
|
@@ -912,7 +912,7 @@ var SidebarNavItem = ({
|
|
|
912
912
|
{
|
|
913
913
|
href,
|
|
914
914
|
onClick: handleClick,
|
|
915
|
-
className:
|
|
915
|
+
className: baseClasses2,
|
|
916
916
|
"aria-disabled": disabled,
|
|
917
917
|
"aria-current": active ? "page" : void 0,
|
|
918
918
|
children: content
|
|
@@ -2473,10 +2473,10 @@ var Code = ({
|
|
|
2473
2473
|
setTimeout(() => setCopied(false), 2e3);
|
|
2474
2474
|
}
|
|
2475
2475
|
};
|
|
2476
|
-
const
|
|
2476
|
+
const baseClasses2 = `font-mono text-sm ${colorClasses[color]}`;
|
|
2477
2477
|
if (block) {
|
|
2478
2478
|
return /* @__PURE__ */ (0, import_jsx_runtime87.jsxs)("div", { className: `relative group ${className}`, children: [
|
|
2479
|
-
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("pre", { className: `${
|
|
2479
|
+
/* @__PURE__ */ (0, import_jsx_runtime87.jsx)("pre", { className: `${baseClasses2} p-4 rounded-lg overflow-x-auto`, children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("code", { children }) }),
|
|
2480
2480
|
copyable && /* @__PURE__ */ (0, import_jsx_runtime87.jsx)(
|
|
2481
2481
|
"button",
|
|
2482
2482
|
{
|
|
@@ -2488,7 +2488,7 @@ var Code = ({
|
|
|
2488
2488
|
)
|
|
2489
2489
|
] });
|
|
2490
2490
|
}
|
|
2491
|
-
return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("code", { className: `${
|
|
2491
|
+
return /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("code", { className: `${baseClasses2} px-1.5 py-0.5 rounded ${className}`, children });
|
|
2492
2492
|
};
|
|
2493
2493
|
Code.displayName = "Code";
|
|
2494
2494
|
|
|
@@ -3907,7 +3907,7 @@ var ProgressBar = ({
|
|
|
3907
3907
|
className = ""
|
|
3908
3908
|
}) => {
|
|
3909
3909
|
const percentage = Math.min(Math.max(value / max * 100, 0), 100);
|
|
3910
|
-
const
|
|
3910
|
+
const sizeClasses8 = {
|
|
3911
3911
|
sm: "h-1",
|
|
3912
3912
|
md: "h-2",
|
|
3913
3913
|
lg: "h-3"
|
|
@@ -3929,7 +3929,7 @@ var ProgressBar = ({
|
|
|
3929
3929
|
/* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
3930
3930
|
"div",
|
|
3931
3931
|
{
|
|
3932
|
-
className: `w-full bg-[hsl(var(--muted))] rounded-full overflow-hidden ${
|
|
3932
|
+
className: `w-full bg-[hsl(var(--muted))] rounded-full overflow-hidden ${sizeClasses8[size]}`,
|
|
3933
3933
|
role: "progressbar",
|
|
3934
3934
|
"aria-valuenow": value,
|
|
3935
3935
|
"aria-valuemin": 0,
|
|
@@ -3937,7 +3937,7 @@ var ProgressBar = ({
|
|
|
3937
3937
|
children: /* @__PURE__ */ (0, import_jsx_runtime102.jsx)(
|
|
3938
3938
|
"div",
|
|
3939
3939
|
{
|
|
3940
|
-
className: `${
|
|
3940
|
+
className: `${sizeClasses8[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`,
|
|
3941
3941
|
style: { width: `${percentage}%` }
|
|
3942
3942
|
}
|
|
3943
3943
|
)
|
|
@@ -4149,7 +4149,7 @@ var Avatar = ({
|
|
|
4149
4149
|
fallbackColor = "bg-[hsl(var(--primary))]"
|
|
4150
4150
|
}) => {
|
|
4151
4151
|
const [imageError, setImageError] = import_react22.default.useState(false);
|
|
4152
|
-
const
|
|
4152
|
+
const sizeClasses8 = {
|
|
4153
4153
|
xs: "w-6 h-6 text-xs",
|
|
4154
4154
|
sm: "w-8 h-8 text-sm",
|
|
4155
4155
|
md: "w-10 h-10 text-base",
|
|
@@ -4169,7 +4169,7 @@ var Avatar = ({
|
|
|
4169
4169
|
return /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
|
|
4170
4170
|
"div",
|
|
4171
4171
|
{
|
|
4172
|
-
className: `${
|
|
4172
|
+
className: `${sizeClasses8[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${showImage ? "bg-[hsl(var(--muted))]" : `${fallbackColor} text-white`} ${className}`,
|
|
4173
4173
|
children: showImage ? /* @__PURE__ */ (0, import_jsx_runtime104.jsx)(
|
|
4174
4174
|
"img",
|
|
4175
4175
|
{
|
|
@@ -4192,8 +4192,23 @@ var Avatar = ({
|
|
|
4192
4192
|
};
|
|
4193
4193
|
|
|
4194
4194
|
// src/components/Textarea.tsx
|
|
4195
|
+
var import_react23 = require("react");
|
|
4195
4196
|
var import_jsx_runtime105 = require("react/jsx-runtime");
|
|
4196
|
-
var
|
|
4197
|
+
var sizeClasses7 = {
|
|
4198
|
+
sm: "px-3 py-1.5 text-sm min-h-[80px]",
|
|
4199
|
+
md: "px-4 py-2.5 text-base min-h-[100px]",
|
|
4200
|
+
lg: "px-4 py-3 text-lg min-h-[120px]"
|
|
4201
|
+
};
|
|
4202
|
+
var resizeClasses = {
|
|
4203
|
+
none: "resize-none",
|
|
4204
|
+
vertical: "resize-y",
|
|
4205
|
+
horizontal: "resize-x",
|
|
4206
|
+
both: "resize"
|
|
4207
|
+
};
|
|
4208
|
+
var baseClasses = "w-full rounded-md border bg-transparent text-[hsl(var(--foreground))] placeholder:text-[hsl(var(--muted-foreground))] focus:outline-none focus:ring-1 disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-[hsl(var(--muted))]";
|
|
4209
|
+
var normalBorderClasses = "border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))] focus:ring-[hsl(var(--ring))]/50 focus:border-[hsl(var(--ring))]";
|
|
4210
|
+
var errorBorderClasses = "border-[hsl(var(--destructive))] focus:ring-[hsl(var(--destructive))]/50";
|
|
4211
|
+
var Textarea = (0, import_react23.memo)(({
|
|
4197
4212
|
label,
|
|
4198
4213
|
error,
|
|
4199
4214
|
helperText,
|
|
@@ -4203,28 +4218,16 @@ var Textarea = ({
|
|
|
4203
4218
|
disabled,
|
|
4204
4219
|
...props
|
|
4205
4220
|
}) => {
|
|
4206
|
-
const
|
|
4207
|
-
|
|
4208
|
-
|
|
4209
|
-
|
|
4210
|
-
};
|
|
4211
|
-
const resizeClasses = {
|
|
4212
|
-
none: "resize-none",
|
|
4213
|
-
vertical: "resize-y",
|
|
4214
|
-
horizontal: "resize-x",
|
|
4215
|
-
both: "resize"
|
|
4216
|
-
};
|
|
4217
|
-
const baseClasses = `w-full rounded-md border transition-colors duration-150 focus:outline-none focus:ring-1 focus:ring-[hsl(var(--ring))]/50 focus:border-[hsl(var(--ring))]
|
|
4218
|
-
${error ? "border-[hsl(var(--destructive))] focus:ring-[hsl(var(--destructive))]/50" : "border-[hsl(var(--input))] hover:border-[hsl(var(--muted-foreground))]"}
|
|
4219
|
-
bg-transparent text-[hsl(var(--foreground))]
|
|
4220
|
-
placeholder:text-[hsl(var(--muted-foreground))]
|
|
4221
|
-
disabled:opacity-50 disabled:cursor-not-allowed disabled:bg-[hsl(var(--muted))]`;
|
|
4221
|
+
const textareaClassName = (0, import_react23.useMemo)(() => {
|
|
4222
|
+
const borderClasses = error ? errorBorderClasses : normalBorderClasses;
|
|
4223
|
+
return `${baseClasses} ${borderClasses} ${sizeClasses7[size]} ${resizeClasses[resize]}`;
|
|
4224
|
+
}, [error, size, resize]);
|
|
4222
4225
|
return /* @__PURE__ */ (0, import_jsx_runtime105.jsxs)("div", { className: `w-full ${className}`, children: [
|
|
4223
4226
|
label && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("label", { className: "block text-sm font-medium text-[hsl(var(--foreground))] mb-1.5", children: label }),
|
|
4224
4227
|
/* @__PURE__ */ (0, import_jsx_runtime105.jsx)(
|
|
4225
4228
|
"textarea",
|
|
4226
4229
|
{
|
|
4227
|
-
className:
|
|
4230
|
+
className: textareaClassName,
|
|
4228
4231
|
disabled,
|
|
4229
4232
|
...props
|
|
4230
4233
|
}
|
|
@@ -4232,10 +4235,11 @@ var Textarea = ({
|
|
|
4232
4235
|
error && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("p", { className: "mt-1.5 text-sm text-[hsl(var(--destructive))]", children: error }),
|
|
4233
4236
|
helperText && !error && /* @__PURE__ */ (0, import_jsx_runtime105.jsx)("p", { className: "mt-1.5 text-sm text-[hsl(var(--muted-foreground))]", children: helperText })
|
|
4234
4237
|
] });
|
|
4235
|
-
};
|
|
4238
|
+
});
|
|
4239
|
+
Textarea.displayName = "Textarea";
|
|
4236
4240
|
|
|
4237
4241
|
// src/components/RichTextEditor.tsx
|
|
4238
|
-
var
|
|
4242
|
+
var import_react24 = require("react");
|
|
4239
4243
|
var import_jsx_runtime106 = require("react/jsx-runtime");
|
|
4240
4244
|
var RichTextEditor = ({
|
|
4241
4245
|
value = "",
|
|
@@ -4250,16 +4254,16 @@ var RichTextEditor = ({
|
|
|
4250
4254
|
helperText
|
|
4251
4255
|
}) => {
|
|
4252
4256
|
const { themeName } = useTheme();
|
|
4253
|
-
const editorRef = (0,
|
|
4254
|
-
const [isFocused, setIsFocused] = (0,
|
|
4255
|
-
const [activeFormats, setActiveFormats] = (0,
|
|
4256
|
-
const [showLinkModal, setShowLinkModal] = (0,
|
|
4257
|
-
const [linkUrl, setLinkUrl] = (0,
|
|
4258
|
-
const [showImageModal, setShowImageModal] = (0,
|
|
4259
|
-
const [imageUrl, setImageUrl] = (0,
|
|
4260
|
-
const [imageAlt, setImageAlt] = (0,
|
|
4261
|
-
const savedSelection = (0,
|
|
4262
|
-
(0,
|
|
4257
|
+
const editorRef = (0, import_react24.useRef)(null);
|
|
4258
|
+
const [isFocused, setIsFocused] = (0, import_react24.useState)(false);
|
|
4259
|
+
const [activeFormats, setActiveFormats] = (0, import_react24.useState)(/* @__PURE__ */ new Set());
|
|
4260
|
+
const [showLinkModal, setShowLinkModal] = (0, import_react24.useState)(false);
|
|
4261
|
+
const [linkUrl, setLinkUrl] = (0, import_react24.useState)("");
|
|
4262
|
+
const [showImageModal, setShowImageModal] = (0, import_react24.useState)(false);
|
|
4263
|
+
const [imageUrl, setImageUrl] = (0, import_react24.useState)("");
|
|
4264
|
+
const [imageAlt, setImageAlt] = (0, import_react24.useState)("");
|
|
4265
|
+
const savedSelection = (0, import_react24.useRef)(null);
|
|
4266
|
+
(0, import_react24.useLayoutEffect)(() => {
|
|
4263
4267
|
const styleId = "rich-text-editor-styles";
|
|
4264
4268
|
if (!document.getElementById(styleId)) {
|
|
4265
4269
|
const style = document.createElement("style");
|
|
@@ -4321,9 +4325,9 @@ var RichTextEditor = ({
|
|
|
4321
4325
|
document.head.appendChild(style);
|
|
4322
4326
|
}
|
|
4323
4327
|
}, []);
|
|
4324
|
-
const isInitialRender = (0,
|
|
4325
|
-
const isInternalUpdate = (0,
|
|
4326
|
-
(0,
|
|
4328
|
+
const isInitialRender = (0, import_react24.useRef)(true);
|
|
4329
|
+
const isInternalUpdate = (0, import_react24.useRef)(false);
|
|
4330
|
+
(0, import_react24.useEffect)(() => {
|
|
4327
4331
|
if (isInitialRender.current && editorRef.current) {
|
|
4328
4332
|
editorRef.current.innerHTML = value;
|
|
4329
4333
|
isInitialRender.current = false;
|
|
@@ -4334,7 +4338,7 @@ var RichTextEditor = ({
|
|
|
4334
4338
|
}
|
|
4335
4339
|
}
|
|
4336
4340
|
}, []);
|
|
4337
|
-
(0,
|
|
4341
|
+
(0, import_react24.useEffect)(() => {
|
|
4338
4342
|
if (!isInitialRender.current && !isInternalUpdate.current && editorRef.current) {
|
|
4339
4343
|
const currentHtml = editorRef.current.innerHTML;
|
|
4340
4344
|
if (currentHtml !== value) {
|
|
@@ -4377,7 +4381,7 @@ var RichTextEditor = ({
|
|
|
4377
4381
|
}
|
|
4378
4382
|
isInternalUpdate.current = false;
|
|
4379
4383
|
}, [value]);
|
|
4380
|
-
const updateActiveFormats = (0,
|
|
4384
|
+
const updateActiveFormats = (0, import_react24.useCallback)(() => {
|
|
4381
4385
|
const formats = /* @__PURE__ */ new Set();
|
|
4382
4386
|
if (document.queryCommandState("bold")) formats.add("bold");
|
|
4383
4387
|
if (document.queryCommandState("italic")) formats.add("italic");
|
|
@@ -4394,14 +4398,14 @@ var RichTextEditor = ({
|
|
|
4394
4398
|
}
|
|
4395
4399
|
setActiveFormats(formats);
|
|
4396
4400
|
}, []);
|
|
4397
|
-
const handleInput = (0,
|
|
4401
|
+
const handleInput = (0, import_react24.useCallback)(() => {
|
|
4398
4402
|
if (editorRef.current && onChange) {
|
|
4399
4403
|
isInternalUpdate.current = true;
|
|
4400
4404
|
onChange(editorRef.current.innerHTML);
|
|
4401
4405
|
}
|
|
4402
4406
|
updateActiveFormats();
|
|
4403
4407
|
}, [onChange, updateActiveFormats]);
|
|
4404
|
-
const handleFocus = (0,
|
|
4408
|
+
const handleFocus = (0, import_react24.useCallback)(() => {
|
|
4405
4409
|
setIsFocused(true);
|
|
4406
4410
|
if (editorRef.current && (!editorRef.current.innerHTML || editorRef.current.innerHTML === "")) {
|
|
4407
4411
|
editorRef.current.innerHTML = "<p><br></p>";
|
|
@@ -4415,28 +4419,28 @@ var RichTextEditor = ({
|
|
|
4415
4419
|
}
|
|
4416
4420
|
}
|
|
4417
4421
|
}, []);
|
|
4418
|
-
const handleFormat = (0,
|
|
4422
|
+
const handleFormat = (0, import_react24.useCallback)((command) => {
|
|
4419
4423
|
if (disabled) return;
|
|
4420
4424
|
document.execCommand(command, false);
|
|
4421
4425
|
editorRef.current?.focus();
|
|
4422
4426
|
updateActiveFormats();
|
|
4423
4427
|
handleInput();
|
|
4424
4428
|
}, [disabled, updateActiveFormats, handleInput]);
|
|
4425
|
-
const handleList = (0,
|
|
4429
|
+
const handleList = (0, import_react24.useCallback)((command) => {
|
|
4426
4430
|
if (disabled) return;
|
|
4427
4431
|
document.execCommand(command, false);
|
|
4428
4432
|
editorRef.current?.focus();
|
|
4429
4433
|
updateActiveFormats();
|
|
4430
4434
|
handleInput();
|
|
4431
4435
|
}, [disabled, updateActiveFormats, handleInput]);
|
|
4432
|
-
const handleHeading = (0,
|
|
4436
|
+
const handleHeading = (0, import_react24.useCallback)((level) => {
|
|
4433
4437
|
if (disabled) return;
|
|
4434
4438
|
document.execCommand("formatBlock", false, level);
|
|
4435
4439
|
editorRef.current?.focus();
|
|
4436
4440
|
updateActiveFormats();
|
|
4437
4441
|
handleInput();
|
|
4438
4442
|
}, [disabled, updateActiveFormats, handleInput]);
|
|
4439
|
-
const handleLink = (0,
|
|
4443
|
+
const handleLink = (0, import_react24.useCallback)(() => {
|
|
4440
4444
|
if (disabled) return;
|
|
4441
4445
|
const selection = window.getSelection();
|
|
4442
4446
|
if (selection && selection.rangeCount > 0) {
|
|
@@ -4444,7 +4448,7 @@ var RichTextEditor = ({
|
|
|
4444
4448
|
}
|
|
4445
4449
|
setShowLinkModal(true);
|
|
4446
4450
|
}, [disabled]);
|
|
4447
|
-
const insertLink = (0,
|
|
4451
|
+
const insertLink = (0, import_react24.useCallback)(() => {
|
|
4448
4452
|
if (!linkUrl || !editorRef.current) return;
|
|
4449
4453
|
const selection = window.getSelection();
|
|
4450
4454
|
if (savedSelection.current && selection) {
|
|
@@ -4462,7 +4466,7 @@ var RichTextEditor = ({
|
|
|
4462
4466
|
editorRef.current?.focus();
|
|
4463
4467
|
handleInput();
|
|
4464
4468
|
}, [linkUrl, handleInput]);
|
|
4465
|
-
const handleCode = (0,
|
|
4469
|
+
const handleCode = (0, import_react24.useCallback)(() => {
|
|
4466
4470
|
if (disabled) return;
|
|
4467
4471
|
const selection = window.getSelection();
|
|
4468
4472
|
if (selection && selection.rangeCount > 0) {
|
|
@@ -4478,7 +4482,7 @@ var RichTextEditor = ({
|
|
|
4478
4482
|
}
|
|
4479
4483
|
editorRef.current?.focus();
|
|
4480
4484
|
}, [disabled, handleInput]);
|
|
4481
|
-
const handleImage = (0,
|
|
4485
|
+
const handleImage = (0, import_react24.useCallback)(() => {
|
|
4482
4486
|
if (disabled) return;
|
|
4483
4487
|
const selection = window.getSelection();
|
|
4484
4488
|
if (selection && selection.rangeCount > 0) {
|
|
@@ -4486,7 +4490,7 @@ var RichTextEditor = ({
|
|
|
4486
4490
|
}
|
|
4487
4491
|
setShowImageModal(true);
|
|
4488
4492
|
}, [disabled]);
|
|
4489
|
-
const insertImage = (0,
|
|
4493
|
+
const insertImage = (0, import_react24.useCallback)(() => {
|
|
4490
4494
|
if (!imageUrl || !editorRef.current) return;
|
|
4491
4495
|
editorRef.current.focus();
|
|
4492
4496
|
const img = document.createElement("img");
|
|
@@ -4858,19 +4862,19 @@ var RichTextEditor = ({
|
|
|
4858
4862
|
};
|
|
4859
4863
|
|
|
4860
4864
|
// src/components/Toast.tsx
|
|
4861
|
-
var
|
|
4865
|
+
var import_react25 = require("react");
|
|
4862
4866
|
var import_jsx_runtime107 = require("react/jsx-runtime");
|
|
4863
|
-
var ToastContext = (0,
|
|
4867
|
+
var ToastContext = (0, import_react25.createContext)(void 0);
|
|
4864
4868
|
var useToast = () => {
|
|
4865
|
-
const context = (0,
|
|
4869
|
+
const context = (0, import_react25.useContext)(ToastContext);
|
|
4866
4870
|
if (!context) {
|
|
4867
4871
|
throw new Error("useToast must be used within a ToastProvider");
|
|
4868
4872
|
}
|
|
4869
4873
|
return context;
|
|
4870
4874
|
};
|
|
4871
4875
|
var ToastProvider = ({ children, position = "top-right" }) => {
|
|
4872
|
-
const [toasts, setToasts] = (0,
|
|
4873
|
-
const addToast = (0,
|
|
4876
|
+
const [toasts, setToasts] = (0, import_react25.useState)([]);
|
|
4877
|
+
const addToast = (0, import_react25.useCallback)((toast2) => {
|
|
4874
4878
|
const id = Math.random().toString(36).substring(7);
|
|
4875
4879
|
const newToast = { ...toast2, id };
|
|
4876
4880
|
setToasts((prev) => [...prev, newToast]);
|
|
@@ -4879,7 +4883,7 @@ var ToastProvider = ({ children, position = "top-right" }) => {
|
|
|
4879
4883
|
removeToast(id);
|
|
4880
4884
|
}, duration);
|
|
4881
4885
|
}, []);
|
|
4882
|
-
const removeToast = (0,
|
|
4886
|
+
const removeToast = (0, import_react25.useCallback)((id) => {
|
|
4883
4887
|
setToasts((prev) => prev.filter((toast2) => toast2.id !== id));
|
|
4884
4888
|
}, []);
|
|
4885
4889
|
const positionClasses2 = {
|
|
@@ -4954,7 +4958,7 @@ var toast = {
|
|
|
4954
4958
|
};
|
|
4955
4959
|
|
|
4956
4960
|
// src/components/Stepper.tsx
|
|
4957
|
-
var
|
|
4961
|
+
var import_react26 = __toESM(require("react"));
|
|
4958
4962
|
var import_jsx_runtime108 = require("react/jsx-runtime");
|
|
4959
4963
|
var Stepper = ({
|
|
4960
4964
|
steps,
|
|
@@ -4989,7 +4993,7 @@ var Stepper = ({
|
|
|
4989
4993
|
const visibility = getStepVisibility(index);
|
|
4990
4994
|
const visibleMobileSteps = steps.filter((_, i) => getStepVisibility(i).mobile);
|
|
4991
4995
|
const isLastVisibleMobile = index === steps.map((_, i) => i).filter((i) => getStepVisibility(i).mobile).slice(-1)[0];
|
|
4992
|
-
return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(
|
|
4996
|
+
return /* @__PURE__ */ (0, import_jsx_runtime108.jsxs)(import_react26.default.Fragment, { children: [
|
|
4993
4997
|
/* @__PURE__ */ (0, import_jsx_runtime108.jsxs)("div", { className: `
|
|
4994
4998
|
flex ${isHorizontal ? "flex-col items-center flex-shrink-0" : "flex-row items-start"}
|
|
4995
4999
|
${isHorizontal ? "" : isLast ? "" : "mb-6"}
|
|
@@ -5089,7 +5093,7 @@ var Divider = ({
|
|
|
5089
5093
|
};
|
|
5090
5094
|
|
|
5091
5095
|
// src/components/FileUpload.tsx
|
|
5092
|
-
var
|
|
5096
|
+
var import_react27 = require("react");
|
|
5093
5097
|
var import_jsx_runtime110 = require("react/jsx-runtime");
|
|
5094
5098
|
var FileUpload = ({
|
|
5095
5099
|
accept,
|
|
@@ -5103,9 +5107,9 @@ var FileUpload = ({
|
|
|
5103
5107
|
label,
|
|
5104
5108
|
helperText
|
|
5105
5109
|
}) => {
|
|
5106
|
-
const [files, setFiles] = (0,
|
|
5107
|
-
const [isDragging, setIsDragging] = (0,
|
|
5108
|
-
const fileInputRef = (0,
|
|
5110
|
+
const [files, setFiles] = (0, import_react27.useState)([]);
|
|
5111
|
+
const [isDragging, setIsDragging] = (0, import_react27.useState)(false);
|
|
5112
|
+
const fileInputRef = (0, import_react27.useRef)(null);
|
|
5109
5113
|
const formatFileSize = (bytes) => {
|
|
5110
5114
|
if (bytes === 0) return "0 Bytes";
|
|
5111
5115
|
const k = 1024;
|
|
@@ -5232,7 +5236,7 @@ var FileUpload = ({
|
|
|
5232
5236
|
};
|
|
5233
5237
|
|
|
5234
5238
|
// src/components/AudioPlayer.tsx
|
|
5235
|
-
var
|
|
5239
|
+
var import_react28 = require("react");
|
|
5236
5240
|
var import_jsx_runtime111 = require("react/jsx-runtime");
|
|
5237
5241
|
var AudioPlayer = ({
|
|
5238
5242
|
src,
|
|
@@ -5256,18 +5260,18 @@ var AudioPlayer = ({
|
|
|
5256
5260
|
showChapters = true,
|
|
5257
5261
|
onChapterChange
|
|
5258
5262
|
}) => {
|
|
5259
|
-
const audioRef = (0,
|
|
5260
|
-
const [isPlaying, setIsPlaying] = (0,
|
|
5261
|
-
const [currentTime, setCurrentTime] = (0,
|
|
5262
|
-
const [duration, setDuration] = (0,
|
|
5263
|
-
const [volume, setVolume] = (0,
|
|
5264
|
-
const [isMuted, setIsMuted] = (0,
|
|
5265
|
-
const [isLoading, setIsLoading] = (0,
|
|
5266
|
-
const [currentChapter, setCurrentChapter] = (0,
|
|
5267
|
-
const [showChapterList, setShowChapterList] = (0,
|
|
5268
|
-
const [hoveredChapter, setHoveredChapter] = (0,
|
|
5269
|
-
const [hoverPosition, setHoverPosition] = (0,
|
|
5270
|
-
(0,
|
|
5263
|
+
const audioRef = (0, import_react28.useRef)(null);
|
|
5264
|
+
const [isPlaying, setIsPlaying] = (0, import_react28.useState)(false);
|
|
5265
|
+
const [currentTime, setCurrentTime] = (0, import_react28.useState)(0);
|
|
5266
|
+
const [duration, setDuration] = (0, import_react28.useState)(0);
|
|
5267
|
+
const [volume, setVolume] = (0, import_react28.useState)(1);
|
|
5268
|
+
const [isMuted, setIsMuted] = (0, import_react28.useState)(false);
|
|
5269
|
+
const [isLoading, setIsLoading] = (0, import_react28.useState)(true);
|
|
5270
|
+
const [currentChapter, setCurrentChapter] = (0, import_react28.useState)(null);
|
|
5271
|
+
const [showChapterList, setShowChapterList] = (0, import_react28.useState)(false);
|
|
5272
|
+
const [hoveredChapter, setHoveredChapter] = (0, import_react28.useState)(null);
|
|
5273
|
+
const [hoverPosition, setHoverPosition] = (0, import_react28.useState)({ x: 0, y: 0 });
|
|
5274
|
+
(0, import_react28.useEffect)(() => {
|
|
5271
5275
|
const audio = audioRef.current;
|
|
5272
5276
|
if (!audio) return;
|
|
5273
5277
|
const handleLoadedMetadata = () => {
|
|
@@ -5331,7 +5335,7 @@ var AudioPlayer = ({
|
|
|
5331
5335
|
audio.removeEventListener("error", handleError);
|
|
5332
5336
|
};
|
|
5333
5337
|
}, [onPlay, onPause, onEnded, onTimeUpdate]);
|
|
5334
|
-
(0,
|
|
5338
|
+
(0, import_react28.useEffect)(() => {
|
|
5335
5339
|
const audio = audioRef.current;
|
|
5336
5340
|
if (!audio) return;
|
|
5337
5341
|
audio.load();
|
|
@@ -5712,7 +5716,7 @@ var AudioPlayer = ({
|
|
|
5712
5716
|
};
|
|
5713
5717
|
|
|
5714
5718
|
// src/components/VideoPlayer.tsx
|
|
5715
|
-
var
|
|
5719
|
+
var import_react29 = require("react");
|
|
5716
5720
|
var import_jsx_runtime112 = require("react/jsx-runtime");
|
|
5717
5721
|
var VideoPlayer = ({
|
|
5718
5722
|
src,
|
|
@@ -5737,21 +5741,21 @@ var VideoPlayer = ({
|
|
|
5737
5741
|
showChapters = true,
|
|
5738
5742
|
onChapterChange
|
|
5739
5743
|
}) => {
|
|
5740
|
-
const videoRef = (0,
|
|
5741
|
-
const containerRef = (0,
|
|
5742
|
-
const [isPlaying, setIsPlaying] = (0,
|
|
5743
|
-
const [currentTime, setCurrentTime] = (0,
|
|
5744
|
-
const [duration, setDuration] = (0,
|
|
5745
|
-
const [volume, setVolume] = (0,
|
|
5746
|
-
const [isMuted, setIsMuted] = (0,
|
|
5747
|
-
const [isLoading, setIsLoading] = (0,
|
|
5748
|
-
const [isFullscreen, setIsFullscreen] = (0,
|
|
5749
|
-
const [showControlsOverlay, setShowControlsOverlay] = (0,
|
|
5750
|
-
const hideControlsTimeout = (0,
|
|
5751
|
-
const [currentChapter, setCurrentChapter] = (0,
|
|
5752
|
-
const [hoveredChapter, setHoveredChapter] = (0,
|
|
5753
|
-
const [hoverPosition, setHoverPosition] = (0,
|
|
5754
|
-
(0,
|
|
5744
|
+
const videoRef = (0, import_react29.useRef)(null);
|
|
5745
|
+
const containerRef = (0, import_react29.useRef)(null);
|
|
5746
|
+
const [isPlaying, setIsPlaying] = (0, import_react29.useState)(false);
|
|
5747
|
+
const [currentTime, setCurrentTime] = (0, import_react29.useState)(0);
|
|
5748
|
+
const [duration, setDuration] = (0, import_react29.useState)(0);
|
|
5749
|
+
const [volume, setVolume] = (0, import_react29.useState)(muted ? 0 : 1);
|
|
5750
|
+
const [isMuted, setIsMuted] = (0, import_react29.useState)(muted);
|
|
5751
|
+
const [isLoading, setIsLoading] = (0, import_react29.useState)(true);
|
|
5752
|
+
const [isFullscreen, setIsFullscreen] = (0, import_react29.useState)(false);
|
|
5753
|
+
const [showControlsOverlay, setShowControlsOverlay] = (0, import_react29.useState)(true);
|
|
5754
|
+
const hideControlsTimeout = (0, import_react29.useRef)(null);
|
|
5755
|
+
const [currentChapter, setCurrentChapter] = (0, import_react29.useState)(null);
|
|
5756
|
+
const [hoveredChapter, setHoveredChapter] = (0, import_react29.useState)(null);
|
|
5757
|
+
const [hoverPosition, setHoverPosition] = (0, import_react29.useState)({ x: 0, y: 0 });
|
|
5758
|
+
(0, import_react29.useEffect)(() => {
|
|
5755
5759
|
const video = videoRef.current;
|
|
5756
5760
|
if (!video) return;
|
|
5757
5761
|
const handleLoadedMetadata = () => {
|
|
@@ -5820,12 +5824,12 @@ var VideoPlayer = ({
|
|
|
5820
5824
|
document.removeEventListener("fullscreenchange", handleFullscreenChange);
|
|
5821
5825
|
};
|
|
5822
5826
|
}, [onPlay, onPause, onEnded, onTimeUpdate]);
|
|
5823
|
-
(0,
|
|
5827
|
+
(0, import_react29.useEffect)(() => {
|
|
5824
5828
|
const video = videoRef.current;
|
|
5825
5829
|
if (!video) return;
|
|
5826
5830
|
video.load();
|
|
5827
5831
|
}, [src]);
|
|
5828
|
-
(0,
|
|
5832
|
+
(0, import_react29.useEffect)(() => {
|
|
5829
5833
|
if (!isPlaying) {
|
|
5830
5834
|
setShowControlsOverlay(true);
|
|
5831
5835
|
return;
|
|
@@ -6226,7 +6230,7 @@ var VideoPlayer = ({
|
|
|
6226
6230
|
};
|
|
6227
6231
|
|
|
6228
6232
|
// src/charts/LineChart.tsx
|
|
6229
|
-
var
|
|
6233
|
+
var import_react33 = __toESM(require("react"));
|
|
6230
6234
|
|
|
6231
6235
|
// src/charts/constants.ts
|
|
6232
6236
|
var CHART_DEFAULTS = {
|
|
@@ -6293,7 +6297,7 @@ var CHART_DEFAULTS = {
|
|
|
6293
6297
|
};
|
|
6294
6298
|
|
|
6295
6299
|
// src/charts/hooks/useResponsiveChart.ts
|
|
6296
|
-
var
|
|
6300
|
+
var import_react30 = require("react");
|
|
6297
6301
|
var BREAKPOINTS = {
|
|
6298
6302
|
mobile: 640,
|
|
6299
6303
|
// < 640px
|
|
@@ -6312,8 +6316,8 @@ var DEFAULT_ASPECT_RATIOS = {
|
|
|
6312
6316
|
desktop: 2
|
|
6313
6317
|
};
|
|
6314
6318
|
function useBreakpoint() {
|
|
6315
|
-
const [breakpoint, setBreakpoint] = (0,
|
|
6316
|
-
(0,
|
|
6319
|
+
const [breakpoint, setBreakpoint] = (0, import_react30.useState)("desktop");
|
|
6320
|
+
(0, import_react30.useEffect)(() => {
|
|
6317
6321
|
const update = () => {
|
|
6318
6322
|
const width = window.innerWidth;
|
|
6319
6323
|
if (width < BREAKPOINTS.mobile) {
|
|
@@ -6610,7 +6614,7 @@ function createTickFormatter(domain) {
|
|
|
6610
6614
|
}
|
|
6611
6615
|
|
|
6612
6616
|
// src/charts/components/ChartTooltip.tsx
|
|
6613
|
-
var
|
|
6617
|
+
var import_react31 = __toESM(require("react"));
|
|
6614
6618
|
var import_jsx_runtime113 = require("react/jsx-runtime");
|
|
6615
6619
|
var DefaultTooltipContent = ({
|
|
6616
6620
|
active,
|
|
@@ -6657,10 +6661,10 @@ var ChartTooltip = ({
|
|
|
6657
6661
|
containerBounds,
|
|
6658
6662
|
animationDuration = 150
|
|
6659
6663
|
}) => {
|
|
6660
|
-
const tooltipRef = (0,
|
|
6661
|
-
const [position, setPosition] = (0,
|
|
6662
|
-
const [isVisible, setIsVisible] = (0,
|
|
6663
|
-
(0,
|
|
6664
|
+
const tooltipRef = (0, import_react31.useRef)(null);
|
|
6665
|
+
const [position, setPosition] = (0, import_react31.useState)({ x: 0, y: 0 });
|
|
6666
|
+
const [isVisible, setIsVisible] = (0, import_react31.useState)(false);
|
|
6667
|
+
(0, import_react31.useEffect)(() => {
|
|
6664
6668
|
if (!active || !tooltipRef.current) {
|
|
6665
6669
|
setIsVisible(false);
|
|
6666
6670
|
return;
|
|
@@ -6689,13 +6693,13 @@ var ChartTooltip = ({
|
|
|
6689
6693
|
if (!active) {
|
|
6690
6694
|
return null;
|
|
6691
6695
|
}
|
|
6692
|
-
const tooltipContent = content ?
|
|
6696
|
+
const tooltipContent = content ? import_react31.default.isValidElement(content) ? import_react31.default.cloneElement(content, {
|
|
6693
6697
|
active,
|
|
6694
6698
|
label,
|
|
6695
6699
|
payload,
|
|
6696
6700
|
formatter,
|
|
6697
6701
|
labelFormatter
|
|
6698
|
-
}) :
|
|
6702
|
+
}) : import_react31.default.createElement(content, {
|
|
6699
6703
|
active,
|
|
6700
6704
|
label,
|
|
6701
6705
|
payload,
|
|
@@ -6728,26 +6732,26 @@ var ChartTooltip = ({
|
|
|
6728
6732
|
);
|
|
6729
6733
|
};
|
|
6730
6734
|
function useTooltip() {
|
|
6731
|
-
const [tooltipData, setTooltipData] = (0,
|
|
6735
|
+
const [tooltipData, setTooltipData] = (0, import_react31.useState)({
|
|
6732
6736
|
active: false,
|
|
6733
6737
|
x: 0,
|
|
6734
6738
|
y: 0,
|
|
6735
6739
|
label: void 0,
|
|
6736
6740
|
payload: void 0
|
|
6737
6741
|
});
|
|
6738
|
-
const showTooltip =
|
|
6742
|
+
const showTooltip = import_react31.default.useCallback((data) => {
|
|
6739
6743
|
setTooltipData({
|
|
6740
6744
|
active: true,
|
|
6741
6745
|
...data
|
|
6742
6746
|
});
|
|
6743
6747
|
}, []);
|
|
6744
|
-
const hideTooltip =
|
|
6748
|
+
const hideTooltip = import_react31.default.useCallback(() => {
|
|
6745
6749
|
setTooltipData((prev) => ({
|
|
6746
6750
|
...prev,
|
|
6747
6751
|
active: false
|
|
6748
6752
|
}));
|
|
6749
6753
|
}, []);
|
|
6750
|
-
const updatePosition =
|
|
6754
|
+
const updatePosition = import_react31.default.useCallback((x, y) => {
|
|
6751
6755
|
setTooltipData((prev) => ({
|
|
6752
6756
|
...prev,
|
|
6753
6757
|
x,
|
|
@@ -7154,7 +7158,7 @@ var ReferenceArea = ({
|
|
|
7154
7158
|
};
|
|
7155
7159
|
|
|
7156
7160
|
// src/charts/components/CartesianGrid.tsx
|
|
7157
|
-
var
|
|
7161
|
+
var import_react32 = require("react");
|
|
7158
7162
|
var import_jsx_runtime117 = require("react/jsx-runtime");
|
|
7159
7163
|
var CartesianGrid = ({
|
|
7160
7164
|
horizontal = true,
|
|
@@ -7172,12 +7176,12 @@ var CartesianGrid = ({
|
|
|
7172
7176
|
return null;
|
|
7173
7177
|
}
|
|
7174
7178
|
const { width, height } = _chartDimensions;
|
|
7175
|
-
const hPoints = (0,
|
|
7179
|
+
const hPoints = (0, import_react32.useMemo)(() => {
|
|
7176
7180
|
if (horizontalPoints) return horizontalPoints;
|
|
7177
7181
|
const count = 5;
|
|
7178
7182
|
return Array.from({ length: count + 1 }, (_, i) => height / count * i);
|
|
7179
7183
|
}, [horizontalPoints, height]);
|
|
7180
|
-
const vPoints = (0,
|
|
7184
|
+
const vPoints = (0, import_react32.useMemo)(() => {
|
|
7181
7185
|
if (verticalPoints) return verticalPoints;
|
|
7182
7186
|
const count = 6;
|
|
7183
7187
|
return Array.from({ length: count + 1 }, (_, i) => width / count * i);
|
|
@@ -7253,9 +7257,9 @@ var LineChart = ({
|
|
|
7253
7257
|
colors = CHART_DEFAULTS.colors,
|
|
7254
7258
|
ariaLabel
|
|
7255
7259
|
}) => {
|
|
7256
|
-
const containerRef = (0,
|
|
7257
|
-
const svgRef = (0,
|
|
7258
|
-
const [activeIndex, setActiveIndex] = (0,
|
|
7260
|
+
const containerRef = (0, import_react33.useRef)(null);
|
|
7261
|
+
const svgRef = (0, import_react33.useRef)(null);
|
|
7262
|
+
const [activeIndex, setActiveIndex] = (0, import_react33.useState)(null);
|
|
7259
7263
|
const { tooltipData, showTooltip: showTooltipFn, hideTooltip } = useTooltip();
|
|
7260
7264
|
const {
|
|
7261
7265
|
width,
|
|
@@ -7273,7 +7277,7 @@ var LineChart = ({
|
|
|
7273
7277
|
providedHeight
|
|
7274
7278
|
});
|
|
7275
7279
|
const animate = animateProp && !_isResizing;
|
|
7276
|
-
const padding = (0,
|
|
7280
|
+
const padding = (0, import_react33.useMemo)(() => ({
|
|
7277
7281
|
top: customPadding?.top ?? CHART_DEFAULTS.padding.top,
|
|
7278
7282
|
right: customPadding?.right ?? (showValueLabels ? 80 : CHART_DEFAULTS.padding.right),
|
|
7279
7283
|
bottom: customPadding?.bottom ?? (showXAxis ? 60 : CHART_DEFAULTS.padding.bottom),
|
|
@@ -7281,17 +7285,17 @@ var LineChart = ({
|
|
|
7281
7285
|
}), [customPadding, showXAxis, showYAxis, showValueLabels]);
|
|
7282
7286
|
const chartWidth = width - padding.left - padding.right;
|
|
7283
7287
|
const chartHeight = height - padding.top - padding.bottom;
|
|
7284
|
-
const allPoints = (0,
|
|
7288
|
+
const allPoints = (0, import_react33.useMemo)(
|
|
7285
7289
|
() => data.flatMap((series) => series.data),
|
|
7286
7290
|
[data]
|
|
7287
7291
|
);
|
|
7288
|
-
const xValueType = (0,
|
|
7292
|
+
const xValueType = (0, import_react33.useMemo)(() => {
|
|
7289
7293
|
const firstX = data[0]?.data[0]?.x;
|
|
7290
7294
|
if (firstX instanceof Date) return "date";
|
|
7291
7295
|
if (typeof firstX === "number") return "number";
|
|
7292
7296
|
return "string";
|
|
7293
7297
|
}, [data]);
|
|
7294
|
-
const xDomainCalc = (0,
|
|
7298
|
+
const xDomainCalc = (0, import_react33.useMemo)(() => {
|
|
7295
7299
|
if (xValueType === "date") {
|
|
7296
7300
|
const dates = allPoints.map((p) => p.x.getTime());
|
|
7297
7301
|
return [Math.min(...dates), Math.max(...dates)];
|
|
@@ -7303,12 +7307,12 @@ var LineChart = ({
|
|
|
7303
7307
|
const maxLen = Math.max(...data.map((s) => s.data.length));
|
|
7304
7308
|
return [0, maxLen - 1];
|
|
7305
7309
|
}, [allPoints, xValueType, data]);
|
|
7306
|
-
const yDomainCalc = (0,
|
|
7310
|
+
const yDomainCalc = (0, import_react33.useMemo)(() => {
|
|
7307
7311
|
if (yDomain) return yDomain;
|
|
7308
7312
|
const yValues = allPoints.map((p) => p.y);
|
|
7309
7313
|
return calculateDomain(yValues, { includeZero: true, padding: 0.1 });
|
|
7310
7314
|
}, [allPoints, yDomain]);
|
|
7311
|
-
const xScale = (0,
|
|
7315
|
+
const xScale = (0, import_react33.useMemo)(() => {
|
|
7312
7316
|
if (xValueType === "date") {
|
|
7313
7317
|
return (value) => {
|
|
7314
7318
|
const time = value instanceof Date ? value.getTime() : Number(value);
|
|
@@ -7331,18 +7335,18 @@ var LineChart = ({
|
|
|
7331
7335
|
return index / maxLen * chartWidth;
|
|
7332
7336
|
};
|
|
7333
7337
|
}, [xValueType, xDomainCalc, chartWidth, data]);
|
|
7334
|
-
const yScale = (0,
|
|
7338
|
+
const yScale = (0, import_react33.useMemo)(
|
|
7335
7339
|
() => scaleLinear({
|
|
7336
7340
|
domain: yDomainCalc,
|
|
7337
7341
|
range: [chartHeight, 0]
|
|
7338
7342
|
}),
|
|
7339
7343
|
[yDomainCalc, chartHeight]
|
|
7340
7344
|
);
|
|
7341
|
-
const yTicks = (0,
|
|
7345
|
+
const yTicks = (0, import_react33.useMemo)(
|
|
7342
7346
|
() => getTicks(yDomainCalc, yAxisTickCount),
|
|
7343
7347
|
[yDomainCalc, yAxisTickCount]
|
|
7344
7348
|
);
|
|
7345
|
-
const xTicks = (0,
|
|
7349
|
+
const xTicks = (0, import_react33.useMemo)(() => {
|
|
7346
7350
|
if (xValueType === "string") {
|
|
7347
7351
|
return data[0]?.data.map((p, i) => ({ value: p.x, index: i })) || [];
|
|
7348
7352
|
}
|
|
@@ -7350,7 +7354,7 @@ var LineChart = ({
|
|
|
7350
7354
|
const ticks = getTicks(xDomainCalc, tickCount);
|
|
7351
7355
|
return ticks.map((t) => ({ value: t, index: 0 }));
|
|
7352
7356
|
}, [xValueType, xDomainCalc, data]);
|
|
7353
|
-
const xFormatter = (0,
|
|
7357
|
+
const xFormatter = (0, import_react33.useCallback)((value) => {
|
|
7354
7358
|
if (formatXValue) return formatXValue(value);
|
|
7355
7359
|
if (value instanceof Date) {
|
|
7356
7360
|
const range = xDomainCalc[1] - xDomainCalc[0];
|
|
@@ -7358,11 +7362,11 @@ var LineChart = ({
|
|
|
7358
7362
|
}
|
|
7359
7363
|
return String(value);
|
|
7360
7364
|
}, [formatXValue, xDomainCalc]);
|
|
7361
|
-
const yFormatter = (0,
|
|
7365
|
+
const yFormatter = (0, import_react33.useMemo)(() => {
|
|
7362
7366
|
if (formatYValue) return formatYValue;
|
|
7363
7367
|
return createTickFormatter(yDomainCalc);
|
|
7364
7368
|
}, [formatYValue, yDomainCalc]);
|
|
7365
|
-
const seriesPaths = (0,
|
|
7369
|
+
const seriesPaths = (0, import_react33.useMemo)(() => {
|
|
7366
7370
|
return data.map((series) => {
|
|
7367
7371
|
const points = series.data.map((point, i) => ({
|
|
7368
7372
|
x: xScale(point.x, i),
|
|
@@ -7387,7 +7391,7 @@ var LineChart = ({
|
|
|
7387
7391
|
return { points, path };
|
|
7388
7392
|
});
|
|
7389
7393
|
}, [data, xScale, yScale]);
|
|
7390
|
-
const handleChartMouseMove = (0,
|
|
7394
|
+
const handleChartMouseMove = (0, import_react33.useCallback)((e) => {
|
|
7391
7395
|
if (!svgRef.current || !containerRef.current || data.length === 0 || data[0].data.length === 0) return;
|
|
7392
7396
|
const svgElement = svgRef.current;
|
|
7393
7397
|
const point = svgElement.createSVGPoint();
|
|
@@ -7427,12 +7431,12 @@ var LineChart = ({
|
|
|
7427
7431
|
}
|
|
7428
7432
|
onPointHover?.(data[0].data[nearestIndex], 0, nearestIndex);
|
|
7429
7433
|
}, [data, seriesPaths, padding, showTooltip, colors, xFormatter, showTooltipFn, onPointHover]);
|
|
7430
|
-
const handleChartMouseLeave = (0,
|
|
7434
|
+
const handleChartMouseLeave = (0, import_react33.useCallback)(() => {
|
|
7431
7435
|
setActiveIndex(null);
|
|
7432
7436
|
hideTooltip();
|
|
7433
7437
|
onPointHover?.(null, -1, -1);
|
|
7434
7438
|
}, [hideTooltip, onPointHover]);
|
|
7435
|
-
const handleChartClick = (0,
|
|
7439
|
+
const handleChartClick = (0, import_react33.useCallback)(() => {
|
|
7436
7440
|
if (activeIndex === null || !onPointClick) return;
|
|
7437
7441
|
data.forEach((series, seriesIndex) => {
|
|
7438
7442
|
if (series.data[activeIndex]) {
|
|
@@ -7440,7 +7444,7 @@ var LineChart = ({
|
|
|
7440
7444
|
}
|
|
7441
7445
|
});
|
|
7442
7446
|
}, [activeIndex, data, onPointClick]);
|
|
7443
|
-
const legendItems = (0,
|
|
7447
|
+
const legendItems = (0, import_react33.useMemo)(
|
|
7444
7448
|
() => data.map((series, i) => ({
|
|
7445
7449
|
name: series.name,
|
|
7446
7450
|
color: series.color || colors[i % colors.length],
|
|
@@ -7448,7 +7452,7 @@ var LineChart = ({
|
|
|
7448
7452
|
})),
|
|
7449
7453
|
[data, colors]
|
|
7450
7454
|
);
|
|
7451
|
-
const referenceElements = (0,
|
|
7455
|
+
const referenceElements = (0, import_react33.useMemo)(() => {
|
|
7452
7456
|
if (!children) return null;
|
|
7453
7457
|
const chartDimensions = {
|
|
7454
7458
|
width: chartWidth,
|
|
@@ -7465,10 +7469,10 @@ var LineChart = ({
|
|
|
7465
7469
|
},
|
|
7466
7470
|
yScale
|
|
7467
7471
|
};
|
|
7468
|
-
return
|
|
7469
|
-
if (!
|
|
7472
|
+
return import_react33.default.Children.map(children, (child) => {
|
|
7473
|
+
if (!import_react33.default.isValidElement(child)) return child;
|
|
7470
7474
|
if (child.type === ReferenceLine || child.type === ReferenceArea || child.type === CartesianGrid) {
|
|
7471
|
-
return
|
|
7475
|
+
return import_react33.default.cloneElement(child, {
|
|
7472
7476
|
_chartDimensions: chartDimensions,
|
|
7473
7477
|
_scales: scales
|
|
7474
7478
|
});
|
|
@@ -7476,7 +7480,7 @@ var LineChart = ({
|
|
|
7476
7480
|
return child;
|
|
7477
7481
|
});
|
|
7478
7482
|
}, [children, chartWidth, chartHeight, padding, xScale, yScale, xValueType, data]);
|
|
7479
|
-
const accessibleDescription = (0,
|
|
7483
|
+
const accessibleDescription = (0, import_react33.useMemo)(() => {
|
|
7480
7484
|
if (ariaLabel) return ariaLabel;
|
|
7481
7485
|
const seriesNames = data.map((s) => s.name).join(", ");
|
|
7482
7486
|
return `Line chart with ${data.length} series: ${seriesNames}`;
|
|
@@ -7756,7 +7760,7 @@ var LineChart = ({
|
|
|
7756
7760
|
};
|
|
7757
7761
|
|
|
7758
7762
|
// src/charts/BarChart.tsx
|
|
7759
|
-
var
|
|
7763
|
+
var import_react34 = __toESM(require("react"));
|
|
7760
7764
|
var import_jsx_runtime119 = require("react/jsx-runtime");
|
|
7761
7765
|
var BarChart = ({
|
|
7762
7766
|
data,
|
|
@@ -7793,8 +7797,8 @@ var BarChart = ({
|
|
|
7793
7797
|
colors = CHART_DEFAULTS.colors,
|
|
7794
7798
|
ariaLabel
|
|
7795
7799
|
}) => {
|
|
7796
|
-
const containerRef = (0,
|
|
7797
|
-
const [hoveredBar, setHoveredBar] = (0,
|
|
7800
|
+
const containerRef = (0, import_react34.useRef)(null);
|
|
7801
|
+
const [hoveredBar, setHoveredBar] = (0, import_react34.useState)(null);
|
|
7798
7802
|
const { tooltipData, showTooltip: showTooltipFn, hideTooltip } = useTooltip();
|
|
7799
7803
|
const {
|
|
7800
7804
|
width,
|
|
@@ -7812,7 +7816,7 @@ var BarChart = ({
|
|
|
7812
7816
|
providedHeight
|
|
7813
7817
|
});
|
|
7814
7818
|
const animate = animateProp && !_isResizing && !isResponsive;
|
|
7815
|
-
const padding = (0,
|
|
7819
|
+
const padding = (0, import_react34.useMemo)(() => ({
|
|
7816
7820
|
top: customPadding?.top ?? CHART_DEFAULTS.padding.top,
|
|
7817
7821
|
right: customPadding?.right ?? CHART_DEFAULTS.padding.right,
|
|
7818
7822
|
bottom: customPadding?.bottom ?? (showXAxis ? 70 : CHART_DEFAULTS.padding.bottom),
|
|
@@ -7820,11 +7824,11 @@ var BarChart = ({
|
|
|
7820
7824
|
}), [customPadding, showXAxis, showYAxis]);
|
|
7821
7825
|
const chartWidth = width - padding.left - padding.right;
|
|
7822
7826
|
const chartHeight = height - padding.top - padding.bottom;
|
|
7823
|
-
const categories = (0,
|
|
7827
|
+
const categories = (0, import_react34.useMemo)(() => {
|
|
7824
7828
|
const cats = data[0]?.data.map((d) => String(d.x)) || [];
|
|
7825
7829
|
return [...new Set(cats)];
|
|
7826
7830
|
}, [data]);
|
|
7827
|
-
const yDomainCalc = (0,
|
|
7831
|
+
const yDomainCalc = (0, import_react34.useMemo)(() => {
|
|
7828
7832
|
if (yDomain) return yDomain;
|
|
7829
7833
|
if (stacked) {
|
|
7830
7834
|
const maxStacked = categories.map((_, catIndex) => {
|
|
@@ -7837,7 +7841,7 @@ var BarChart = ({
|
|
|
7837
7841
|
const allY = data.flatMap((s) => s.data.map((d) => d.y));
|
|
7838
7842
|
return calculateDomain(allY, { includeZero: true, padding: 0.1 });
|
|
7839
7843
|
}, [data, categories, stacked, yDomain]);
|
|
7840
|
-
const xBandScale = (0,
|
|
7844
|
+
const xBandScale = (0, import_react34.useMemo)(
|
|
7841
7845
|
() => scaleBand({
|
|
7842
7846
|
domain: categories,
|
|
7843
7847
|
range: horizontal ? [chartHeight, 0] : [0, chartWidth],
|
|
@@ -7845,25 +7849,25 @@ var BarChart = ({
|
|
|
7845
7849
|
}),
|
|
7846
7850
|
[categories, chartWidth, chartHeight, horizontal, barCategoryGap]
|
|
7847
7851
|
);
|
|
7848
|
-
const yScale = (0,
|
|
7852
|
+
const yScale = (0, import_react34.useMemo)(
|
|
7849
7853
|
() => scaleLinear({
|
|
7850
7854
|
domain: yDomainCalc,
|
|
7851
7855
|
range: horizontal ? [0, chartWidth] : [chartHeight, 0]
|
|
7852
7856
|
}),
|
|
7853
7857
|
[yDomainCalc, chartWidth, chartHeight, horizontal]
|
|
7854
7858
|
);
|
|
7855
|
-
const yTicks = (0,
|
|
7859
|
+
const yTicks = (0, import_react34.useMemo)(
|
|
7856
7860
|
() => getTicks(yDomainCalc, yAxisTickCount),
|
|
7857
7861
|
[yDomainCalc, yAxisTickCount]
|
|
7858
7862
|
);
|
|
7859
|
-
const yFormatter = (0,
|
|
7863
|
+
const yFormatter = (0, import_react34.useMemo)(() => {
|
|
7860
7864
|
if (formatYValue) return formatYValue;
|
|
7861
7865
|
return createTickFormatter(yDomainCalc);
|
|
7862
7866
|
}, [formatYValue, yDomainCalc]);
|
|
7863
7867
|
const numSeries = data.length;
|
|
7864
7868
|
const bandwidth = xBandScale.bandwidth();
|
|
7865
7869
|
const barWidth = stacked ? bandwidth : (bandwidth - bandwidth * barGap * (numSeries - 1)) / numSeries;
|
|
7866
|
-
const handleBarEnter = (0,
|
|
7870
|
+
const handleBarEnter = (0, import_react34.useCallback)((e, seriesIndex, barIndex) => {
|
|
7867
7871
|
const series = data[seriesIndex];
|
|
7868
7872
|
const point = series.data[barIndex];
|
|
7869
7873
|
setHoveredBar({ seriesIndex, barIndex });
|
|
@@ -7886,16 +7890,16 @@ var BarChart = ({
|
|
|
7886
7890
|
}
|
|
7887
7891
|
onBarHover?.(point, seriesIndex, barIndex);
|
|
7888
7892
|
}, [data, showTooltip, colors, showTooltipFn, onBarHover]);
|
|
7889
|
-
const handleBarLeave = (0,
|
|
7893
|
+
const handleBarLeave = (0, import_react34.useCallback)(() => {
|
|
7890
7894
|
setHoveredBar(null);
|
|
7891
7895
|
hideTooltip();
|
|
7892
7896
|
onBarHover?.(null, -1, -1);
|
|
7893
7897
|
}, [hideTooltip, onBarHover]);
|
|
7894
|
-
const handleBarClick = (0,
|
|
7898
|
+
const handleBarClick = (0, import_react34.useCallback)((seriesIndex, barIndex) => {
|
|
7895
7899
|
const point = data[seriesIndex].data[barIndex];
|
|
7896
7900
|
onBarClick?.(point, seriesIndex, barIndex);
|
|
7897
7901
|
}, [data, onBarClick]);
|
|
7898
|
-
const legendItems = (0,
|
|
7902
|
+
const legendItems = (0, import_react34.useMemo)(
|
|
7899
7903
|
() => data.map((series, i) => ({
|
|
7900
7904
|
name: series.name,
|
|
7901
7905
|
color: series.color || colors[i % colors.length],
|
|
@@ -7903,7 +7907,7 @@ var BarChart = ({
|
|
|
7903
7907
|
})),
|
|
7904
7908
|
[data, colors]
|
|
7905
7909
|
);
|
|
7906
|
-
const bars = (0,
|
|
7910
|
+
const bars = (0, import_react34.useMemo)(() => {
|
|
7907
7911
|
const result = [];
|
|
7908
7912
|
const cumulativeValues = {};
|
|
7909
7913
|
data.forEach((series, seriesIndex) => {
|
|
@@ -8015,17 +8019,17 @@ var BarChart = ({
|
|
|
8015
8019
|
handleBarLeave,
|
|
8016
8020
|
handleBarClick
|
|
8017
8021
|
]);
|
|
8018
|
-
const referenceElements = (0,
|
|
8022
|
+
const referenceElements = (0, import_react34.useMemo)(() => {
|
|
8019
8023
|
if (!children) return null;
|
|
8020
8024
|
const chartDimensions = { width: chartWidth, height: chartHeight, padding };
|
|
8021
8025
|
const scales = {
|
|
8022
8026
|
xScale: (value) => xBandScale.scale(String(value)) + bandwidth / 2,
|
|
8023
8027
|
yScale
|
|
8024
8028
|
};
|
|
8025
|
-
return
|
|
8026
|
-
if (!
|
|
8029
|
+
return import_react34.default.Children.map(children, (child) => {
|
|
8030
|
+
if (!import_react34.default.isValidElement(child)) return child;
|
|
8027
8031
|
if (child.type === ReferenceLine || child.type === ReferenceArea || child.type === CartesianGrid) {
|
|
8028
|
-
return
|
|
8032
|
+
return import_react34.default.cloneElement(child, {
|
|
8029
8033
|
_chartDimensions: chartDimensions,
|
|
8030
8034
|
_scales: scales
|
|
8031
8035
|
});
|
|
@@ -8033,7 +8037,7 @@ var BarChart = ({
|
|
|
8033
8037
|
return child;
|
|
8034
8038
|
});
|
|
8035
8039
|
}, [children, chartWidth, chartHeight, padding, xBandScale, bandwidth, yScale]);
|
|
8036
|
-
const accessibleDescription = (0,
|
|
8040
|
+
const accessibleDescription = (0, import_react34.useMemo)(() => {
|
|
8037
8041
|
if (ariaLabel) return ariaLabel;
|
|
8038
8042
|
const seriesNames = data.map((s) => s.name).join(", ");
|
|
8039
8043
|
return `Bar chart with ${data.length} series: ${seriesNames}`;
|
|
@@ -8182,7 +8186,7 @@ var BarChart = ({
|
|
|
8182
8186
|
};
|
|
8183
8187
|
|
|
8184
8188
|
// src/charts/AreaChart.tsx
|
|
8185
|
-
var
|
|
8189
|
+
var import_react35 = __toESM(require("react"));
|
|
8186
8190
|
var import_jsx_runtime120 = require("react/jsx-runtime");
|
|
8187
8191
|
var AreaChart = ({
|
|
8188
8192
|
data,
|
|
@@ -8218,10 +8222,10 @@ var AreaChart = ({
|
|
|
8218
8222
|
colors = CHART_DEFAULTS.colors,
|
|
8219
8223
|
ariaLabel
|
|
8220
8224
|
}) => {
|
|
8221
|
-
const containerRef = (0,
|
|
8222
|
-
const svgRef = (0,
|
|
8223
|
-
const chartId = (0,
|
|
8224
|
-
const [activeIndex, setActiveIndex] = (0,
|
|
8225
|
+
const containerRef = (0, import_react35.useRef)(null);
|
|
8226
|
+
const svgRef = (0, import_react35.useRef)(null);
|
|
8227
|
+
const chartId = (0, import_react35.useId)();
|
|
8228
|
+
const [activeIndex, setActiveIndex] = (0, import_react35.useState)(null);
|
|
8225
8229
|
const { tooltipData, showTooltip: showTooltipFn, hideTooltip } = useTooltip();
|
|
8226
8230
|
const {
|
|
8227
8231
|
width,
|
|
@@ -8239,7 +8243,7 @@ var AreaChart = ({
|
|
|
8239
8243
|
providedHeight
|
|
8240
8244
|
});
|
|
8241
8245
|
const animate = animateProp && !_isResizing && !isResponsive;
|
|
8242
|
-
const padding = (0,
|
|
8246
|
+
const padding = (0, import_react35.useMemo)(() => ({
|
|
8243
8247
|
top: customPadding?.top ?? CHART_DEFAULTS.padding.top,
|
|
8244
8248
|
right: customPadding?.right ?? CHART_DEFAULTS.padding.right,
|
|
8245
8249
|
bottom: customPadding?.bottom ?? (showXAxis ? 60 : CHART_DEFAULTS.padding.bottom),
|
|
@@ -8247,17 +8251,17 @@ var AreaChart = ({
|
|
|
8247
8251
|
}), [customPadding, showXAxis, showYAxis]);
|
|
8248
8252
|
const chartWidth = width - padding.left - padding.right;
|
|
8249
8253
|
const chartHeight = height - padding.top - padding.bottom;
|
|
8250
|
-
const allPoints = (0,
|
|
8254
|
+
const allPoints = (0, import_react35.useMemo)(
|
|
8251
8255
|
() => data.flatMap((series) => series.data),
|
|
8252
8256
|
[data]
|
|
8253
8257
|
);
|
|
8254
|
-
const xValueType = (0,
|
|
8258
|
+
const xValueType = (0, import_react35.useMemo)(() => {
|
|
8255
8259
|
const firstX = data[0]?.data[0]?.x;
|
|
8256
8260
|
if (firstX instanceof Date) return "date";
|
|
8257
8261
|
if (typeof firstX === "number") return "number";
|
|
8258
8262
|
return "string";
|
|
8259
8263
|
}, [data]);
|
|
8260
|
-
const xDomainCalc = (0,
|
|
8264
|
+
const xDomainCalc = (0, import_react35.useMemo)(() => {
|
|
8261
8265
|
if (xValueType === "date") {
|
|
8262
8266
|
const dates = allPoints.map((p) => p.x.getTime());
|
|
8263
8267
|
return [Math.min(...dates), Math.max(...dates)];
|
|
@@ -8269,7 +8273,7 @@ var AreaChart = ({
|
|
|
8269
8273
|
const maxLen = Math.max(...data.map((s) => s.data.length));
|
|
8270
8274
|
return [0, maxLen - 1];
|
|
8271
8275
|
}, [allPoints, xValueType, data]);
|
|
8272
|
-
const yDomainCalc = (0,
|
|
8276
|
+
const yDomainCalc = (0, import_react35.useMemo)(() => {
|
|
8273
8277
|
if (yDomain) return yDomain;
|
|
8274
8278
|
if (stacked) {
|
|
8275
8279
|
const maxPoints = Math.max(...data.map((s) => s.data.length));
|
|
@@ -8281,7 +8285,7 @@ var AreaChart = ({
|
|
|
8281
8285
|
const yValues = allPoints.map((p) => p.y);
|
|
8282
8286
|
return calculateDomain(yValues, { includeZero: true, padding: 0.1 });
|
|
8283
8287
|
}, [allPoints, stacked, data, yDomain]);
|
|
8284
|
-
const xScale = (0,
|
|
8288
|
+
const xScale = (0, import_react35.useMemo)(() => {
|
|
8285
8289
|
if (xValueType === "date") {
|
|
8286
8290
|
return (value) => {
|
|
8287
8291
|
const time = value instanceof Date ? value.getTime() : Number(value);
|
|
@@ -8304,18 +8308,18 @@ var AreaChart = ({
|
|
|
8304
8308
|
return index / maxLen * chartWidth;
|
|
8305
8309
|
};
|
|
8306
8310
|
}, [xValueType, xDomainCalc, chartWidth, data]);
|
|
8307
|
-
const yScale = (0,
|
|
8311
|
+
const yScale = (0, import_react35.useMemo)(
|
|
8308
8312
|
() => scaleLinear({
|
|
8309
8313
|
domain: yDomainCalc,
|
|
8310
8314
|
range: [chartHeight, 0]
|
|
8311
8315
|
}),
|
|
8312
8316
|
[yDomainCalc, chartHeight]
|
|
8313
8317
|
);
|
|
8314
|
-
const yTicks = (0,
|
|
8318
|
+
const yTicks = (0, import_react35.useMemo)(
|
|
8315
8319
|
() => getTicks(yDomainCalc, yAxisTickCount),
|
|
8316
8320
|
[yDomainCalc, yAxisTickCount]
|
|
8317
8321
|
);
|
|
8318
|
-
const xTicks = (0,
|
|
8322
|
+
const xTicks = (0, import_react35.useMemo)(() => {
|
|
8319
8323
|
if (xValueType === "string") {
|
|
8320
8324
|
return data[0]?.data.map((p, i) => ({ value: p.x, index: i })) || [];
|
|
8321
8325
|
}
|
|
@@ -8323,7 +8327,7 @@ var AreaChart = ({
|
|
|
8323
8327
|
const ticks = getTicks(xDomainCalc, tickCount);
|
|
8324
8328
|
return ticks.map((t) => ({ value: t, index: 0 }));
|
|
8325
8329
|
}, [xValueType, xDomainCalc, data]);
|
|
8326
|
-
const xFormatter = (0,
|
|
8330
|
+
const xFormatter = (0, import_react35.useCallback)((value) => {
|
|
8327
8331
|
if (formatXValue) return formatXValue(value);
|
|
8328
8332
|
if (value instanceof Date) {
|
|
8329
8333
|
const range = xDomainCalc[1] - xDomainCalc[0];
|
|
@@ -8331,11 +8335,11 @@ var AreaChart = ({
|
|
|
8331
8335
|
}
|
|
8332
8336
|
return String(value);
|
|
8333
8337
|
}, [formatXValue, xDomainCalc]);
|
|
8334
|
-
const yFormatter = (0,
|
|
8338
|
+
const yFormatter = (0, import_react35.useMemo)(() => {
|
|
8335
8339
|
if (formatYValue) return formatYValue;
|
|
8336
8340
|
return createTickFormatter(yDomainCalc);
|
|
8337
8341
|
}, [formatYValue, yDomainCalc]);
|
|
8338
|
-
const areaPaths = (0,
|
|
8342
|
+
const areaPaths = (0, import_react35.useMemo)(() => {
|
|
8339
8343
|
const paths = [];
|
|
8340
8344
|
const cumulativeY = Array(data[0]?.data.length || 0).fill(0);
|
|
8341
8345
|
data.forEach((series) => {
|
|
@@ -8369,7 +8373,7 @@ var AreaChart = ({
|
|
|
8369
8373
|
});
|
|
8370
8374
|
return paths;
|
|
8371
8375
|
}, [data, xScale, yScale, stacked, curved]);
|
|
8372
|
-
const handleChartMouseMove = (0,
|
|
8376
|
+
const handleChartMouseMove = (0, import_react35.useCallback)((e) => {
|
|
8373
8377
|
if (!svgRef.current || !containerRef.current || data.length === 0 || data[0].data.length === 0) return;
|
|
8374
8378
|
const svgElement = svgRef.current;
|
|
8375
8379
|
const point = svgElement.createSVGPoint();
|
|
@@ -8409,12 +8413,12 @@ var AreaChart = ({
|
|
|
8409
8413
|
}
|
|
8410
8414
|
onPointHover?.(data[0].data[nearestIndex], 0, nearestIndex);
|
|
8411
8415
|
}, [data, areaPaths, padding, showTooltip, colors, xFormatter, showTooltipFn, onPointHover]);
|
|
8412
|
-
const handleChartMouseLeave = (0,
|
|
8416
|
+
const handleChartMouseLeave = (0, import_react35.useCallback)(() => {
|
|
8413
8417
|
setActiveIndex(null);
|
|
8414
8418
|
hideTooltip();
|
|
8415
8419
|
onPointHover?.(null, -1, -1);
|
|
8416
8420
|
}, [hideTooltip, onPointHover]);
|
|
8417
|
-
const handleChartClick = (0,
|
|
8421
|
+
const handleChartClick = (0, import_react35.useCallback)(() => {
|
|
8418
8422
|
if (activeIndex === null || !onPointClick) return;
|
|
8419
8423
|
data.forEach((series, seriesIndex) => {
|
|
8420
8424
|
if (series.data[activeIndex]) {
|
|
@@ -8422,7 +8426,7 @@ var AreaChart = ({
|
|
|
8422
8426
|
}
|
|
8423
8427
|
});
|
|
8424
8428
|
}, [activeIndex, data, onPointClick]);
|
|
8425
|
-
const legendItems = (0,
|
|
8429
|
+
const legendItems = (0, import_react35.useMemo)(
|
|
8426
8430
|
() => data.map((series, i) => ({
|
|
8427
8431
|
name: series.name,
|
|
8428
8432
|
color: series.color || colors[i % colors.length],
|
|
@@ -8430,7 +8434,7 @@ var AreaChart = ({
|
|
|
8430
8434
|
})),
|
|
8431
8435
|
[data, colors]
|
|
8432
8436
|
);
|
|
8433
|
-
const referenceElements = (0,
|
|
8437
|
+
const referenceElements = (0, import_react35.useMemo)(() => {
|
|
8434
8438
|
if (!children) return null;
|
|
8435
8439
|
const chartDimensions = { width: chartWidth, height: chartHeight, padding };
|
|
8436
8440
|
const scales = {
|
|
@@ -8443,10 +8447,10 @@ var AreaChart = ({
|
|
|
8443
8447
|
},
|
|
8444
8448
|
yScale
|
|
8445
8449
|
};
|
|
8446
|
-
return
|
|
8447
|
-
if (!
|
|
8450
|
+
return import_react35.default.Children.map(children, (child) => {
|
|
8451
|
+
if (!import_react35.default.isValidElement(child)) return child;
|
|
8448
8452
|
if (child.type === ReferenceLine || child.type === ReferenceArea || child.type === CartesianGrid) {
|
|
8449
|
-
return
|
|
8453
|
+
return import_react35.default.cloneElement(child, {
|
|
8450
8454
|
_chartDimensions: chartDimensions,
|
|
8451
8455
|
_scales: scales
|
|
8452
8456
|
});
|
|
@@ -8454,7 +8458,7 @@ var AreaChart = ({
|
|
|
8454
8458
|
return child;
|
|
8455
8459
|
});
|
|
8456
8460
|
}, [children, chartWidth, chartHeight, padding, xScale, yScale, xValueType, data]);
|
|
8457
|
-
const accessibleDescription = (0,
|
|
8461
|
+
const accessibleDescription = (0, import_react35.useMemo)(() => {
|
|
8458
8462
|
if (ariaLabel) return ariaLabel;
|
|
8459
8463
|
const seriesNames = data.map((s) => s.name).join(", ");
|
|
8460
8464
|
return `Area chart with ${data.length} series: ${seriesNames}`;
|
|
@@ -8723,7 +8727,7 @@ var AreaChart = ({
|
|
|
8723
8727
|
};
|
|
8724
8728
|
|
|
8725
8729
|
// src/charts/PieChart.tsx
|
|
8726
|
-
var
|
|
8730
|
+
var import_react36 = require("react");
|
|
8727
8731
|
var import_jsx_runtime121 = require("react/jsx-runtime");
|
|
8728
8732
|
var PieChart = ({
|
|
8729
8733
|
data,
|
|
@@ -8757,9 +8761,9 @@ var PieChart = ({
|
|
|
8757
8761
|
colors = CHART_DEFAULTS.colors,
|
|
8758
8762
|
ariaLabel
|
|
8759
8763
|
}) => {
|
|
8760
|
-
const containerRef = (0,
|
|
8761
|
-
const [hoveredSlice, setHoveredSlice] = (0,
|
|
8762
|
-
const [activeSlice, setActiveSlice] = (0,
|
|
8764
|
+
const containerRef = (0, import_react36.useRef)(null);
|
|
8765
|
+
const [hoveredSlice, setHoveredSlice] = (0, import_react36.useState)(null);
|
|
8766
|
+
const [activeSlice, setActiveSlice] = (0, import_react36.useState)(null);
|
|
8763
8767
|
const { tooltipData, showTooltip: showTooltipFn, hideTooltip } = useTooltip();
|
|
8764
8768
|
const {
|
|
8765
8769
|
width,
|
|
@@ -8786,11 +8790,11 @@ var PieChart = ({
|
|
|
8786
8790
|
const outerRadius = providedOuterRadius || maxRadius;
|
|
8787
8791
|
const innerRadius = providedInnerRadius ?? (donut ? outerRadius * 0.6 : 0);
|
|
8788
8792
|
const isDonut = innerRadius > 0;
|
|
8789
|
-
const total = (0,
|
|
8793
|
+
const total = (0, import_react36.useMemo)(
|
|
8790
8794
|
() => data.reduce((sum, d) => sum + d.value, 0),
|
|
8791
8795
|
[data]
|
|
8792
8796
|
);
|
|
8793
|
-
const slices = (0,
|
|
8797
|
+
const slices = (0, import_react36.useMemo)(() => {
|
|
8794
8798
|
const angleRange = endAngle - startAngle;
|
|
8795
8799
|
let currentAngle = startAngle;
|
|
8796
8800
|
return data.map((item, index) => {
|
|
@@ -8826,7 +8830,7 @@ var PieChart = ({
|
|
|
8826
8830
|
};
|
|
8827
8831
|
});
|
|
8828
8832
|
}, [data, total, startAngle, endAngle, paddingAngle, centerX, centerY, outerRadius, innerRadius, isDonut, colors]);
|
|
8829
|
-
const handleSliceEnter = (0,
|
|
8833
|
+
const handleSliceEnter = (0, import_react36.useCallback)((e, index) => {
|
|
8830
8834
|
const slice = slices[index];
|
|
8831
8835
|
setHoveredSlice(index);
|
|
8832
8836
|
if (showTooltip && containerRef.current) {
|
|
@@ -8848,16 +8852,16 @@ var PieChart = ({
|
|
|
8848
8852
|
}
|
|
8849
8853
|
onSliceHover?.(data[index], index);
|
|
8850
8854
|
}, [slices, data, showTooltip, showTooltipFn, onSliceHover]);
|
|
8851
|
-
const handleSliceLeave = (0,
|
|
8855
|
+
const handleSliceLeave = (0, import_react36.useCallback)(() => {
|
|
8852
8856
|
setHoveredSlice(null);
|
|
8853
8857
|
hideTooltip();
|
|
8854
8858
|
onSliceHover?.(null, -1);
|
|
8855
8859
|
}, [hideTooltip, onSliceHover]);
|
|
8856
|
-
const handleSliceClick = (0,
|
|
8860
|
+
const handleSliceClick = (0, import_react36.useCallback)((index) => {
|
|
8857
8861
|
setActiveSlice((prev) => prev === index ? null : index);
|
|
8858
8862
|
onSliceClick?.(data[index], index);
|
|
8859
8863
|
}, [data, onSliceClick]);
|
|
8860
|
-
const getLabelText = (0,
|
|
8864
|
+
const getLabelText = (0, import_react36.useCallback)((slice) => {
|
|
8861
8865
|
if (labelFormatter) {
|
|
8862
8866
|
return labelFormatter(data[slice.index], slice.percent);
|
|
8863
8867
|
}
|
|
@@ -8872,7 +8876,7 @@ var PieChart = ({
|
|
|
8872
8876
|
return `${slice.percent.toFixed(1)}%`;
|
|
8873
8877
|
}
|
|
8874
8878
|
}, [labelType, labelFormatter, data]);
|
|
8875
|
-
const legendItems = (0,
|
|
8879
|
+
const legendItems = (0, import_react36.useMemo)(
|
|
8876
8880
|
() => data.map((item, i) => ({
|
|
8877
8881
|
name: `${item.label}${showPercentages ? ` (${(item.value / total * 100).toFixed(1)}%)` : ""}`,
|
|
8878
8882
|
color: item.color || colors[i % colors.length],
|
|
@@ -8880,7 +8884,7 @@ var PieChart = ({
|
|
|
8880
8884
|
})),
|
|
8881
8885
|
[data, colors, total, showPercentages]
|
|
8882
8886
|
);
|
|
8883
|
-
const accessibleDescription = (0,
|
|
8887
|
+
const accessibleDescription = (0, import_react36.useMemo)(() => {
|
|
8884
8888
|
if (ariaLabel) return ariaLabel;
|
|
8885
8889
|
const sliceNames = data.map((d) => `${d.label}: ${d.value}`).join(", ");
|
|
8886
8890
|
return `${isDonut ? "Donut" : "Pie"} chart with ${data.length} slices: ${sliceNames}`;
|
|
@@ -9026,7 +9030,7 @@ var PieChart = ({
|
|
|
9026
9030
|
};
|
|
9027
9031
|
|
|
9028
9032
|
// src/charts/ScatterChart.tsx
|
|
9029
|
-
var
|
|
9033
|
+
var import_react37 = __toESM(require("react"));
|
|
9030
9034
|
var import_jsx_runtime122 = require("react/jsx-runtime");
|
|
9031
9035
|
function linearRegression(points) {
|
|
9032
9036
|
const n = points.length;
|
|
@@ -9154,8 +9158,8 @@ var ScatterChart = ({
|
|
|
9154
9158
|
colors = CHART_DEFAULTS.colors,
|
|
9155
9159
|
ariaLabel
|
|
9156
9160
|
}) => {
|
|
9157
|
-
const containerRef = (0,
|
|
9158
|
-
const [hoveredPoint, setHoveredPoint] = (0,
|
|
9161
|
+
const containerRef = (0, import_react37.useRef)(null);
|
|
9162
|
+
const [hoveredPoint, setHoveredPoint] = (0, import_react37.useState)(null);
|
|
9159
9163
|
const { tooltipData, showTooltip: showTooltipFn, hideTooltip } = useTooltip();
|
|
9160
9164
|
const {
|
|
9161
9165
|
width,
|
|
@@ -9173,7 +9177,7 @@ var ScatterChart = ({
|
|
|
9173
9177
|
providedHeight
|
|
9174
9178
|
});
|
|
9175
9179
|
const animate = animateProp && !_isResizing && !isResponsive;
|
|
9176
|
-
const padding = (0,
|
|
9180
|
+
const padding = (0, import_react37.useMemo)(() => ({
|
|
9177
9181
|
top: customPadding?.top ?? CHART_DEFAULTS.padding.top,
|
|
9178
9182
|
right: customPadding?.right ?? CHART_DEFAULTS.padding.right,
|
|
9179
9183
|
bottom: customPadding?.bottom ?? (showXAxis ? 60 : CHART_DEFAULTS.padding.bottom),
|
|
@@ -9181,52 +9185,52 @@ var ScatterChart = ({
|
|
|
9181
9185
|
}), [customPadding, showXAxis, showYAxis]);
|
|
9182
9186
|
const chartWidth = width - padding.left - padding.right;
|
|
9183
9187
|
const chartHeight = height - padding.top - padding.bottom;
|
|
9184
|
-
const allPoints = (0,
|
|
9188
|
+
const allPoints = (0, import_react37.useMemo)(
|
|
9185
9189
|
() => data.flatMap((series) => series.data),
|
|
9186
9190
|
[data]
|
|
9187
9191
|
);
|
|
9188
|
-
const xDomainCalc = (0,
|
|
9192
|
+
const xDomainCalc = (0, import_react37.useMemo)(() => {
|
|
9189
9193
|
if (xDomain) return xDomain;
|
|
9190
9194
|
const xValues = allPoints.map((p) => p.x);
|
|
9191
9195
|
return calculateDomain(xValues, { includeZero: false, padding: 0.1 });
|
|
9192
9196
|
}, [allPoints, xDomain]);
|
|
9193
|
-
const yDomainCalc = (0,
|
|
9197
|
+
const yDomainCalc = (0, import_react37.useMemo)(() => {
|
|
9194
9198
|
if (yDomain) return yDomain;
|
|
9195
9199
|
const yValues = allPoints.map((p) => p.y);
|
|
9196
9200
|
return calculateDomain(yValues, { includeZero: false, padding: 0.1 });
|
|
9197
9201
|
}, [allPoints, yDomain]);
|
|
9198
|
-
const zDomain = (0,
|
|
9202
|
+
const zDomain = (0, import_react37.useMemo)(() => {
|
|
9199
9203
|
if (!bubble) return [0, 1];
|
|
9200
9204
|
const zValues = allPoints.map((p) => p.z || 0).filter((z) => z > 0);
|
|
9201
9205
|
if (zValues.length === 0) return [0, 1];
|
|
9202
9206
|
return [Math.min(...zValues), Math.max(...zValues)];
|
|
9203
9207
|
}, [allPoints, bubble]);
|
|
9204
|
-
const xScale = (0,
|
|
9208
|
+
const xScale = (0, import_react37.useMemo)(
|
|
9205
9209
|
() => scaleLinear({
|
|
9206
9210
|
domain: xDomainCalc,
|
|
9207
9211
|
range: [0, chartWidth]
|
|
9208
9212
|
}),
|
|
9209
9213
|
[xDomainCalc, chartWidth]
|
|
9210
9214
|
);
|
|
9211
|
-
const yScale = (0,
|
|
9215
|
+
const yScale = (0, import_react37.useMemo)(
|
|
9212
9216
|
() => scaleLinear({
|
|
9213
9217
|
domain: yDomainCalc,
|
|
9214
9218
|
range: [chartHeight, 0]
|
|
9215
9219
|
}),
|
|
9216
9220
|
[yDomainCalc, chartHeight]
|
|
9217
9221
|
);
|
|
9218
|
-
const sizeScale = (0,
|
|
9222
|
+
const sizeScale = (0, import_react37.useMemo)(() => {
|
|
9219
9223
|
if (!bubble) return () => pointSize;
|
|
9220
9224
|
return scaleLinear({
|
|
9221
9225
|
domain: zDomain,
|
|
9222
9226
|
range: [minBubbleSize, maxBubbleSize]
|
|
9223
9227
|
});
|
|
9224
9228
|
}, [bubble, zDomain, minBubbleSize, maxBubbleSize, pointSize]);
|
|
9225
|
-
const xTicks = (0,
|
|
9226
|
-
const yTicks = (0,
|
|
9227
|
-
const xFormatter = (0,
|
|
9228
|
-
const yFormatter = (0,
|
|
9229
|
-
const trendLines = (0,
|
|
9229
|
+
const xTicks = (0, import_react37.useMemo)(() => getTicks(xDomainCalc, xAxisTickCount), [xDomainCalc, xAxisTickCount]);
|
|
9230
|
+
const yTicks = (0, import_react37.useMemo)(() => getTicks(yDomainCalc, yAxisTickCount), [yDomainCalc, yAxisTickCount]);
|
|
9231
|
+
const xFormatter = (0, import_react37.useMemo)(() => formatXValue || createTickFormatter(xDomainCalc), [formatXValue, xDomainCalc]);
|
|
9232
|
+
const yFormatter = (0, import_react37.useMemo)(() => formatYValue || createTickFormatter(yDomainCalc), [formatYValue, yDomainCalc]);
|
|
9233
|
+
const trendLines = (0, import_react37.useMemo)(() => {
|
|
9230
9234
|
if (!showTrendLine) return [];
|
|
9231
9235
|
return data.map((series) => {
|
|
9232
9236
|
const regression = linearRegression(series.data);
|
|
@@ -9242,7 +9246,7 @@ var ScatterChart = ({
|
|
|
9242
9246
|
};
|
|
9243
9247
|
});
|
|
9244
9248
|
}, [data, showTrendLine, xDomainCalc, xScale, yScale]);
|
|
9245
|
-
const handlePointEnter = (0,
|
|
9249
|
+
const handlePointEnter = (0, import_react37.useCallback)((e, seriesIndex, pointIndex) => {
|
|
9246
9250
|
const series = data[seriesIndex];
|
|
9247
9251
|
const point = series.data[pointIndex];
|
|
9248
9252
|
setHoveredPoint({ seriesIndex, pointIndex });
|
|
@@ -9266,16 +9270,16 @@ var ScatterChart = ({
|
|
|
9266
9270
|
}
|
|
9267
9271
|
onPointHover?.(point, seriesIndex, pointIndex);
|
|
9268
9272
|
}, [data, showTooltip, colors, bubble, showTooltipFn, onPointHover]);
|
|
9269
|
-
const handlePointLeave = (0,
|
|
9273
|
+
const handlePointLeave = (0, import_react37.useCallback)(() => {
|
|
9270
9274
|
setHoveredPoint(null);
|
|
9271
9275
|
hideTooltip();
|
|
9272
9276
|
onPointHover?.(null, -1, -1);
|
|
9273
9277
|
}, [hideTooltip, onPointHover]);
|
|
9274
|
-
const handlePointClick = (0,
|
|
9278
|
+
const handlePointClick = (0, import_react37.useCallback)((seriesIndex, pointIndex) => {
|
|
9275
9279
|
const point = data[seriesIndex].data[pointIndex];
|
|
9276
9280
|
onPointClick?.(point, seriesIndex, pointIndex);
|
|
9277
9281
|
}, [data, onPointClick]);
|
|
9278
|
-
const legendItems = (0,
|
|
9282
|
+
const legendItems = (0, import_react37.useMemo)(
|
|
9279
9283
|
() => data.map((series, i) => ({
|
|
9280
9284
|
name: series.name,
|
|
9281
9285
|
color: series.color || colors[i % colors.length],
|
|
@@ -9283,14 +9287,14 @@ var ScatterChart = ({
|
|
|
9283
9287
|
})),
|
|
9284
9288
|
[data, colors]
|
|
9285
9289
|
);
|
|
9286
|
-
const referenceElements = (0,
|
|
9290
|
+
const referenceElements = (0, import_react37.useMemo)(() => {
|
|
9287
9291
|
if (!children) return null;
|
|
9288
9292
|
const chartDimensions = { width: chartWidth, height: chartHeight, padding };
|
|
9289
9293
|
const scales = { xScale, yScale };
|
|
9290
|
-
return
|
|
9291
|
-
if (!
|
|
9294
|
+
return import_react37.default.Children.map(children, (child) => {
|
|
9295
|
+
if (!import_react37.default.isValidElement(child)) return child;
|
|
9292
9296
|
if (child.type === ReferenceLine || child.type === ReferenceArea || child.type === CartesianGrid) {
|
|
9293
|
-
return
|
|
9297
|
+
return import_react37.default.cloneElement(child, {
|
|
9294
9298
|
_chartDimensions: chartDimensions,
|
|
9295
9299
|
_scales: scales
|
|
9296
9300
|
});
|
|
@@ -9298,7 +9302,7 @@ var ScatterChart = ({
|
|
|
9298
9302
|
return child;
|
|
9299
9303
|
});
|
|
9300
9304
|
}, [children, chartWidth, chartHeight, padding, xScale, yScale]);
|
|
9301
|
-
const accessibleDescription = (0,
|
|
9305
|
+
const accessibleDescription = (0, import_react37.useMemo)(() => {
|
|
9302
9306
|
if (ariaLabel) return ariaLabel;
|
|
9303
9307
|
const totalPoints = data.reduce((sum, s) => sum + s.data.length, 0);
|
|
9304
9308
|
return `Scatter chart with ${data.length} series and ${totalPoints} data points`;
|
|
@@ -9484,7 +9488,7 @@ var ScatterChart = ({
|
|
|
9484
9488
|
};
|
|
9485
9489
|
|
|
9486
9490
|
// src/charts/components/ResponsiveContainer.tsx
|
|
9487
|
-
var
|
|
9491
|
+
var import_react38 = __toESM(require("react"));
|
|
9488
9492
|
var import_jsx_runtime123 = require("react/jsx-runtime");
|
|
9489
9493
|
var ResponsiveContainer = ({
|
|
9490
9494
|
width = "100%",
|
|
@@ -9499,13 +9503,13 @@ var ResponsiveContainer = ({
|
|
|
9499
9503
|
children,
|
|
9500
9504
|
onResize
|
|
9501
9505
|
}) => {
|
|
9502
|
-
const containerRef = (0,
|
|
9503
|
-
const [dimensions, setDimensions] = (0,
|
|
9506
|
+
const containerRef = (0, import_react38.useRef)(null);
|
|
9507
|
+
const [dimensions, setDimensions] = (0, import_react38.useState)({
|
|
9504
9508
|
width: 0,
|
|
9505
9509
|
height: 0
|
|
9506
9510
|
});
|
|
9507
|
-
const debounceTimerRef = (0,
|
|
9508
|
-
const calculateDimensions = (0,
|
|
9511
|
+
const debounceTimerRef = (0, import_react38.useRef)(null);
|
|
9512
|
+
const calculateDimensions = (0, import_react38.useCallback)((containerWidth, containerHeight) => {
|
|
9509
9513
|
let finalWidth = containerWidth;
|
|
9510
9514
|
let finalHeight = containerHeight;
|
|
9511
9515
|
if (aspect && !height) {
|
|
@@ -9521,7 +9525,7 @@ var ResponsiveContainer = ({
|
|
|
9521
9525
|
}
|
|
9522
9526
|
return { width: finalWidth, height: finalHeight };
|
|
9523
9527
|
}, [aspect, height, minWidth, minHeight, maxWidth, maxHeight]);
|
|
9524
|
-
const handleResize = (0,
|
|
9528
|
+
const handleResize = (0, import_react38.useCallback)((entries) => {
|
|
9525
9529
|
const entry = entries[0];
|
|
9526
9530
|
if (!entry) return;
|
|
9527
9531
|
const { width: containerWidth, height: containerHeight } = entry.contentRect;
|
|
@@ -9539,7 +9543,7 @@ var ResponsiveContainer = ({
|
|
|
9539
9543
|
updateDimensions();
|
|
9540
9544
|
}
|
|
9541
9545
|
}, [calculateDimensions, debounce, onResize]);
|
|
9542
|
-
(0,
|
|
9546
|
+
(0, import_react38.useEffect)(() => {
|
|
9543
9547
|
const container = containerRef.current;
|
|
9544
9548
|
if (!container) return;
|
|
9545
9549
|
const observer = new ResizeObserver(handleResize);
|
|
@@ -9572,7 +9576,7 @@ var ResponsiveContainer = ({
|
|
|
9572
9576
|
}
|
|
9573
9577
|
);
|
|
9574
9578
|
}
|
|
9575
|
-
const chartElement =
|
|
9579
|
+
const chartElement = import_react38.default.cloneElement(
|
|
9576
9580
|
children,
|
|
9577
9581
|
{
|
|
9578
9582
|
width: dimensions.width,
|
|
@@ -9591,7 +9595,7 @@ var ResponsiveContainer = ({
|
|
|
9591
9595
|
};
|
|
9592
9596
|
|
|
9593
9597
|
// src/components/Heatmap.tsx
|
|
9594
|
-
var
|
|
9598
|
+
var import_react39 = __toESM(require("react"));
|
|
9595
9599
|
var import_jsx_runtime124 = require("react/jsx-runtime");
|
|
9596
9600
|
var COLOR_SCALES = {
|
|
9597
9601
|
blue: {
|
|
@@ -9635,9 +9639,9 @@ var Heatmap = ({
|
|
|
9635
9639
|
formatValue = (v) => v.toFixed(0),
|
|
9636
9640
|
formatTooltip
|
|
9637
9641
|
}) => {
|
|
9638
|
-
const [hoveredCell, setHoveredCell] = (0,
|
|
9639
|
-
const [isDarkMode, setIsDarkMode] = (0,
|
|
9640
|
-
|
|
9642
|
+
const [hoveredCell, setHoveredCell] = (0, import_react39.useState)(null);
|
|
9643
|
+
const [isDarkMode, setIsDarkMode] = (0, import_react39.useState)(false);
|
|
9644
|
+
import_react39.default.useEffect(() => {
|
|
9641
9645
|
const checkDarkMode = () => {
|
|
9642
9646
|
setIsDarkMode(document.documentElement.classList.contains("dark"));
|
|
9643
9647
|
};
|
|
@@ -9646,7 +9650,7 @@ var Heatmap = ({
|
|
|
9646
9650
|
observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
|
|
9647
9651
|
return () => observer.disconnect();
|
|
9648
9652
|
}, []);
|
|
9649
|
-
const { uniqueX, uniqueY, dataMap, minValue, maxValue } = (0,
|
|
9653
|
+
const { uniqueX, uniqueY, dataMap, minValue, maxValue } = (0, import_react39.useMemo)(() => {
|
|
9650
9654
|
const xSet = /* @__PURE__ */ new Set();
|
|
9651
9655
|
const ySet = /* @__PURE__ */ new Set();
|
|
9652
9656
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -9818,9 +9822,9 @@ var CalendarHeatmap = ({
|
|
|
9818
9822
|
onCellClick,
|
|
9819
9823
|
formatTooltip
|
|
9820
9824
|
}) => {
|
|
9821
|
-
const [hoveredCell, setHoveredCell] = (0,
|
|
9822
|
-
const [isDarkMode, setIsDarkMode] = (0,
|
|
9823
|
-
|
|
9825
|
+
const [hoveredCell, setHoveredCell] = (0, import_react39.useState)(null);
|
|
9826
|
+
const [isDarkMode, setIsDarkMode] = (0, import_react39.useState)(false);
|
|
9827
|
+
import_react39.default.useEffect(() => {
|
|
9824
9828
|
const checkDarkMode = () => {
|
|
9825
9829
|
setIsDarkMode(document.documentElement.classList.contains("dark"));
|
|
9826
9830
|
};
|
|
@@ -9829,7 +9833,7 @@ var CalendarHeatmap = ({
|
|
|
9829
9833
|
observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] });
|
|
9830
9834
|
return () => observer.disconnect();
|
|
9831
9835
|
}, []);
|
|
9832
|
-
const { weeks, minValue, maxValue, dataMap, monthLabels } = (0,
|
|
9836
|
+
const { weeks, minValue, maxValue, dataMap, monthLabels } = (0, import_react39.useMemo)(() => {
|
|
9833
9837
|
const map = /* @__PURE__ */ new Map();
|
|
9834
9838
|
let min = Infinity;
|
|
9835
9839
|
let max = -Infinity;
|