@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 CHANGED
@@ -664,7 +664,7 @@ var Navbar = ({
664
664
  sticky = false,
665
665
  variant = "solid"
666
666
  }) => {
667
- const baseClasses = sticky ? "sticky top-0 z-40" : "";
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()} ${baseClasses} ${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: [
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 baseClasses = `
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: baseClasses,
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: baseClasses,
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 baseClasses = `font-mono text-sm ${colorClasses[color]}`;
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: `${baseClasses} p-4 rounded-lg overflow-x-auto`, children: /* @__PURE__ */ (0, import_jsx_runtime87.jsx)("code", { children }) }),
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: `${baseClasses} px-1.5 py-0.5 rounded ${className}`, children });
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 sizeClasses7 = {
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 ${sizeClasses7[size]}`,
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: `${sizeClasses7[size]} ${variantClasses[variant]} rounded-full transition-all duration-300 ease-out`,
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 sizeClasses7 = {
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: `${sizeClasses7[size]} ${shapeClass} flex items-center justify-center overflow-hidden ${showImage ? "bg-[hsl(var(--muted))]" : `${fallbackColor} text-white`} ${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 Textarea = ({
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 sizeClasses7 = {
4207
- sm: "px-3 py-1.5 text-sm min-h-[80px]",
4208
- md: "px-4 py-2.5 text-base min-h-[100px]",
4209
- lg: "px-4 py-3 text-lg min-h-[120px]"
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: `${baseClasses} ${sizeClasses7[size]} ${resizeClasses[resize]}`,
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 import_react23 = require("react");
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, import_react23.useRef)(null);
4254
- const [isFocused, setIsFocused] = (0, import_react23.useState)(false);
4255
- const [activeFormats, setActiveFormats] = (0, import_react23.useState)(/* @__PURE__ */ new Set());
4256
- const [showLinkModal, setShowLinkModal] = (0, import_react23.useState)(false);
4257
- const [linkUrl, setLinkUrl] = (0, import_react23.useState)("");
4258
- const [showImageModal, setShowImageModal] = (0, import_react23.useState)(false);
4259
- const [imageUrl, setImageUrl] = (0, import_react23.useState)("");
4260
- const [imageAlt, setImageAlt] = (0, import_react23.useState)("");
4261
- const savedSelection = (0, import_react23.useRef)(null);
4262
- (0, import_react23.useLayoutEffect)(() => {
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, import_react23.useRef)(true);
4325
- const isInternalUpdate = (0, import_react23.useRef)(false);
4326
- (0, import_react23.useEffect)(() => {
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, import_react23.useEffect)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)((command) => {
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, import_react23.useCallback)((command) => {
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, import_react23.useCallback)((level) => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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, import_react23.useCallback)(() => {
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 import_react24 = require("react");
4865
+ var import_react25 = require("react");
4862
4866
  var import_jsx_runtime107 = require("react/jsx-runtime");
4863
- var ToastContext = (0, import_react24.createContext)(void 0);
4867
+ var ToastContext = (0, import_react25.createContext)(void 0);
4864
4868
  var useToast = () => {
4865
- const context = (0, import_react24.useContext)(ToastContext);
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, import_react24.useState)([]);
4873
- const addToast = (0, import_react24.useCallback)((toast2) => {
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, import_react24.useCallback)((id) => {
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 import_react25 = __toESM(require("react"));
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)(import_react25.default.Fragment, { children: [
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 import_react26 = require("react");
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, import_react26.useState)([]);
5107
- const [isDragging, setIsDragging] = (0, import_react26.useState)(false);
5108
- const fileInputRef = (0, import_react26.useRef)(null);
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 import_react27 = require("react");
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, import_react27.useRef)(null);
5260
- const [isPlaying, setIsPlaying] = (0, import_react27.useState)(false);
5261
- const [currentTime, setCurrentTime] = (0, import_react27.useState)(0);
5262
- const [duration, setDuration] = (0, import_react27.useState)(0);
5263
- const [volume, setVolume] = (0, import_react27.useState)(1);
5264
- const [isMuted, setIsMuted] = (0, import_react27.useState)(false);
5265
- const [isLoading, setIsLoading] = (0, import_react27.useState)(true);
5266
- const [currentChapter, setCurrentChapter] = (0, import_react27.useState)(null);
5267
- const [showChapterList, setShowChapterList] = (0, import_react27.useState)(false);
5268
- const [hoveredChapter, setHoveredChapter] = (0, import_react27.useState)(null);
5269
- const [hoverPosition, setHoverPosition] = (0, import_react27.useState)({ x: 0, y: 0 });
5270
- (0, import_react27.useEffect)(() => {
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, import_react27.useEffect)(() => {
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 import_react28 = require("react");
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, import_react28.useRef)(null);
5741
- const containerRef = (0, import_react28.useRef)(null);
5742
- const [isPlaying, setIsPlaying] = (0, import_react28.useState)(false);
5743
- const [currentTime, setCurrentTime] = (0, import_react28.useState)(0);
5744
- const [duration, setDuration] = (0, import_react28.useState)(0);
5745
- const [volume, setVolume] = (0, import_react28.useState)(muted ? 0 : 1);
5746
- const [isMuted, setIsMuted] = (0, import_react28.useState)(muted);
5747
- const [isLoading, setIsLoading] = (0, import_react28.useState)(true);
5748
- const [isFullscreen, setIsFullscreen] = (0, import_react28.useState)(false);
5749
- const [showControlsOverlay, setShowControlsOverlay] = (0, import_react28.useState)(true);
5750
- const hideControlsTimeout = (0, import_react28.useRef)(null);
5751
- const [currentChapter, setCurrentChapter] = (0, import_react28.useState)(null);
5752
- const [hoveredChapter, setHoveredChapter] = (0, import_react28.useState)(null);
5753
- const [hoverPosition, setHoverPosition] = (0, import_react28.useState)({ x: 0, y: 0 });
5754
- (0, import_react28.useEffect)(() => {
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, import_react28.useEffect)(() => {
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, import_react28.useEffect)(() => {
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 import_react32 = __toESM(require("react"));
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 import_react29 = require("react");
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, import_react29.useState)("desktop");
6316
- (0, import_react29.useEffect)(() => {
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 import_react30 = __toESM(require("react"));
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, import_react30.useRef)(null);
6661
- const [position, setPosition] = (0, import_react30.useState)({ x: 0, y: 0 });
6662
- const [isVisible, setIsVisible] = (0, import_react30.useState)(false);
6663
- (0, import_react30.useEffect)(() => {
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 ? import_react30.default.isValidElement(content) ? import_react30.default.cloneElement(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
- }) : import_react30.default.createElement(content, {
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, import_react30.useState)({
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 = import_react30.default.useCallback((data) => {
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 = import_react30.default.useCallback(() => {
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 = import_react30.default.useCallback((x, y) => {
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 import_react31 = require("react");
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, import_react31.useMemo)(() => {
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, import_react31.useMemo)(() => {
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, import_react32.useRef)(null);
7257
- const svgRef = (0, import_react32.useRef)(null);
7258
- const [activeIndex, setActiveIndex] = (0, import_react32.useState)(null);
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, import_react32.useMemo)(() => ({
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, import_react32.useMemo)(
7288
+ const allPoints = (0, import_react33.useMemo)(
7285
7289
  () => data.flatMap((series) => series.data),
7286
7290
  [data]
7287
7291
  );
7288
- const xValueType = (0, import_react32.useMemo)(() => {
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, import_react32.useMemo)(() => {
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, import_react32.useMemo)(() => {
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, import_react32.useMemo)(() => {
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, import_react32.useMemo)(
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, import_react32.useMemo)(
7345
+ const yTicks = (0, import_react33.useMemo)(
7342
7346
  () => getTicks(yDomainCalc, yAxisTickCount),
7343
7347
  [yDomainCalc, yAxisTickCount]
7344
7348
  );
7345
- const xTicks = (0, import_react32.useMemo)(() => {
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, import_react32.useCallback)((value) => {
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, import_react32.useMemo)(() => {
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, import_react32.useMemo)(() => {
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, import_react32.useCallback)((e) => {
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, import_react32.useCallback)(() => {
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, import_react32.useCallback)(() => {
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, import_react32.useMemo)(
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, import_react32.useMemo)(() => {
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 import_react32.default.Children.map(children, (child) => {
7469
- if (!import_react32.default.isValidElement(child)) return child;
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 import_react32.default.cloneElement(child, {
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, import_react32.useMemo)(() => {
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 import_react33 = __toESM(require("react"));
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, import_react33.useRef)(null);
7797
- const [hoveredBar, setHoveredBar] = (0, import_react33.useState)(null);
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, import_react33.useMemo)(() => ({
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, import_react33.useMemo)(() => {
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, import_react33.useMemo)(() => {
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, import_react33.useMemo)(
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, import_react33.useMemo)(
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, import_react33.useMemo)(
7859
+ const yTicks = (0, import_react34.useMemo)(
7856
7860
  () => getTicks(yDomainCalc, yAxisTickCount),
7857
7861
  [yDomainCalc, yAxisTickCount]
7858
7862
  );
7859
- const yFormatter = (0, import_react33.useMemo)(() => {
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, import_react33.useCallback)((e, seriesIndex, barIndex) => {
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, import_react33.useCallback)(() => {
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, import_react33.useCallback)((seriesIndex, barIndex) => {
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, import_react33.useMemo)(
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, import_react33.useMemo)(() => {
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, import_react33.useMemo)(() => {
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 import_react33.default.Children.map(children, (child) => {
8026
- if (!import_react33.default.isValidElement(child)) return child;
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 import_react33.default.cloneElement(child, {
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, import_react33.useMemo)(() => {
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 import_react34 = __toESM(require("react"));
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, import_react34.useRef)(null);
8222
- const svgRef = (0, import_react34.useRef)(null);
8223
- const chartId = (0, import_react34.useId)();
8224
- const [activeIndex, setActiveIndex] = (0, import_react34.useState)(null);
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, import_react34.useMemo)(() => ({
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, import_react34.useMemo)(
8254
+ const allPoints = (0, import_react35.useMemo)(
8251
8255
  () => data.flatMap((series) => series.data),
8252
8256
  [data]
8253
8257
  );
8254
- const xValueType = (0, import_react34.useMemo)(() => {
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, import_react34.useMemo)(() => {
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, import_react34.useMemo)(() => {
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, import_react34.useMemo)(() => {
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, import_react34.useMemo)(
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, import_react34.useMemo)(
8318
+ const yTicks = (0, import_react35.useMemo)(
8315
8319
  () => getTicks(yDomainCalc, yAxisTickCount),
8316
8320
  [yDomainCalc, yAxisTickCount]
8317
8321
  );
8318
- const xTicks = (0, import_react34.useMemo)(() => {
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, import_react34.useCallback)((value) => {
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, import_react34.useMemo)(() => {
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, import_react34.useMemo)(() => {
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, import_react34.useCallback)((e) => {
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, import_react34.useCallback)(() => {
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, import_react34.useCallback)(() => {
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, import_react34.useMemo)(
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, import_react34.useMemo)(() => {
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 import_react34.default.Children.map(children, (child) => {
8447
- if (!import_react34.default.isValidElement(child)) return child;
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 import_react34.default.cloneElement(child, {
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, import_react34.useMemo)(() => {
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 import_react35 = require("react");
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, import_react35.useRef)(null);
8761
- const [hoveredSlice, setHoveredSlice] = (0, import_react35.useState)(null);
8762
- const [activeSlice, setActiveSlice] = (0, import_react35.useState)(null);
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, import_react35.useMemo)(
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, import_react35.useMemo)(() => {
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, import_react35.useCallback)((e, index) => {
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, import_react35.useCallback)(() => {
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, import_react35.useCallback)((index) => {
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, import_react35.useCallback)((slice) => {
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, import_react35.useMemo)(
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, import_react35.useMemo)(() => {
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 import_react36 = __toESM(require("react"));
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, import_react36.useRef)(null);
9158
- const [hoveredPoint, setHoveredPoint] = (0, import_react36.useState)(null);
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, import_react36.useMemo)(() => ({
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, import_react36.useMemo)(
9188
+ const allPoints = (0, import_react37.useMemo)(
9185
9189
  () => data.flatMap((series) => series.data),
9186
9190
  [data]
9187
9191
  );
9188
- const xDomainCalc = (0, import_react36.useMemo)(() => {
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, import_react36.useMemo)(() => {
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, import_react36.useMemo)(() => {
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, import_react36.useMemo)(
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, import_react36.useMemo)(
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, import_react36.useMemo)(() => {
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, import_react36.useMemo)(() => getTicks(xDomainCalc, xAxisTickCount), [xDomainCalc, xAxisTickCount]);
9226
- const yTicks = (0, import_react36.useMemo)(() => getTicks(yDomainCalc, yAxisTickCount), [yDomainCalc, yAxisTickCount]);
9227
- const xFormatter = (0, import_react36.useMemo)(() => formatXValue || createTickFormatter(xDomainCalc), [formatXValue, xDomainCalc]);
9228
- const yFormatter = (0, import_react36.useMemo)(() => formatYValue || createTickFormatter(yDomainCalc), [formatYValue, yDomainCalc]);
9229
- const trendLines = (0, import_react36.useMemo)(() => {
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, import_react36.useCallback)((e, seriesIndex, pointIndex) => {
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, import_react36.useCallback)(() => {
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, import_react36.useCallback)((seriesIndex, pointIndex) => {
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, import_react36.useMemo)(
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, import_react36.useMemo)(() => {
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 import_react36.default.Children.map(children, (child) => {
9291
- if (!import_react36.default.isValidElement(child)) return child;
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 import_react36.default.cloneElement(child, {
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, import_react36.useMemo)(() => {
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 import_react37 = __toESM(require("react"));
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, import_react37.useRef)(null);
9503
- const [dimensions, setDimensions] = (0, import_react37.useState)({
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, import_react37.useRef)(null);
9508
- const calculateDimensions = (0, import_react37.useCallback)((containerWidth, containerHeight) => {
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, import_react37.useCallback)((entries) => {
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, import_react37.useEffect)(() => {
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 = import_react37.default.cloneElement(
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 import_react38 = __toESM(require("react"));
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, import_react38.useState)(null);
9639
- const [isDarkMode, setIsDarkMode] = (0, import_react38.useState)(false);
9640
- import_react38.default.useEffect(() => {
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, import_react38.useMemo)(() => {
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, import_react38.useState)(null);
9822
- const [isDarkMode, setIsDarkMode] = (0, import_react38.useState)(false);
9823
- import_react38.default.useEffect(() => {
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, import_react38.useMemo)(() => {
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;