@adsgency_npm/adsgency-ads-ui 0.1.0-alpha.26 → 0.1.0-alpha.28

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.cjs CHANGED
@@ -224,6 +224,7 @@ var adsDefaultMessages = {
224
224
  collapseRow: "Collapse row",
225
225
  expandRow: "Expand row",
226
226
  filterColumn: "Filter column",
227
+ loadingRows: "Loading table rows",
227
228
  noDataAvailable: "No data available",
228
229
  selectAllRows: "Select all rows",
229
230
  selectRow: "Select row",
@@ -274,6 +275,7 @@ var adsDefaultMessages = {
274
275
  collapseRow: "\u6536\u8D77\u884C",
275
276
  expandRow: "\u5C55\u5F00\u884C",
276
277
  filterColumn: "\u7B5B\u9009\u5217",
278
+ loadingRows: "\u6B63\u5728\u52A0\u8F7D\u8868\u683C\u884C",
277
279
  noDataAvailable: "\u6682\u65E0\u6570\u636E",
278
280
  selectAllRows: "\u9009\u62E9\u5168\u90E8\u884C",
279
281
  selectRow: "\u9009\u62E9\u884C",
@@ -832,7 +834,7 @@ var adsTextColorClassName = {
832
834
  // src/components/AdsAlertDialog/index.tsx
833
835
  var import_jsx_runtime8 = require("react/jsx-runtime");
834
836
  var overlayClassName = "fixed inset-0 z-50 bg-black/80 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0";
835
- var contentClassName = "fixed left-1/2 top-1/2 z-50 grid w-[calc(100%-2rem)] max-w-[512px] -translate-x-1/2 -translate-y-1/2 gap-lg rounded-radius-lg border border-border bg-card p-xl shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.1),0px_10px_15px_-3px_rgba(0,0,0,0.1)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]";
837
+ var contentClassName = "fixed left-1/2 top-1/2 z-50 grid w-[calc(100%-2rem)] max-w-[512px] -translate-x-1/2 -translate-y-1/2 gap-lg rounded-radius-lg border-0 bg-card p-xl shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.1),0px_10px_15px_-3px_rgba(0,0,0,0.1)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]";
836
838
  var actionClassName = "inline-flex h-9 items-center justify-center rounded-radius-md border-0 bg-brand-gradient px-lg py-sm text-sm font-medium leading-5 tracking-normal shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-opacity hover:opacity-90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none disabled:opacity-[0.65]";
837
839
  var cancelClassName = "inline-flex h-9 items-center justify-center rounded-radius-md border border-border bg-card px-lg py-sm text-sm font-medium leading-5 tracking-normal shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none disabled:opacity-[0.65]";
838
840
  var AlertDialog = AlertDialogPrimitive.Root;
@@ -2836,6 +2838,7 @@ AdsSkeleton.displayName = "AdsSkeleton";
2836
2838
 
2837
2839
  // src/components/AdsInput/index.tsx
2838
2840
  var React31 = __toESM(require("react"), 1);
2841
+ var import_lucide_react10 = require("lucide-react");
2839
2842
 
2840
2843
  // src/lib/adsClearButton.tsx
2841
2844
  var React30 = __toESM(require("react"), 1);
@@ -2856,12 +2859,17 @@ AdsClearButton.displayName = "AdsClearButton";
2856
2859
 
2857
2860
  // src/components/AdsInput/index.tsx
2858
2861
  var import_jsx_runtime34 = require("react/jsx-runtime");
2859
- var inputBaseClassName = "flex w-full rounded-md border border-border bg-card px-3 py-2 ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--card-foreground)] placeholder:text-[var(--muted-foreground)] focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm";
2862
+ var inputBaseClassName = "flex w-full rounded-md border border-border bg-card px-3 py-2 ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-[var(--card-foreground)] placeholder:text-[var(--muted-foreground)] focus-visible:outline-none disabled:cursor-not-allowed disabled:border-border disabled:bg-muted disabled:text-[var(--muted-foreground)] disabled:placeholder:text-[var(--muted-foreground)] disabled:opacity-100 disabled:focus-visible:border-border disabled:focus-visible:ring-0 md:text-sm";
2860
2863
  var inputSizeClasses = {
2861
2864
  sm: "h-8 text-sm leading-5",
2862
2865
  md: "h-9 text-base leading-6",
2863
2866
  lg: "h-10 text-base leading-6"
2864
2867
  };
2868
+ var fileTriggerSizeClasses = {
2869
+ sm: "h-8 px-md py-sm",
2870
+ md: "h-9 px-lg py-sm",
2871
+ lg: "h-10 px-xl py-[10px]"
2872
+ };
2865
2873
  function assignInputRef(ref, value) {
2866
2874
  if (typeof ref === "function") {
2867
2875
  ref(value);
@@ -2880,6 +2888,17 @@ function getTextInputValue(value) {
2880
2888
  }
2881
2889
  return "";
2882
2890
  }
2891
+ function renderFileTriggerIcon(icon) {
2892
+ if (!icon) {
2893
+ return null;
2894
+ }
2895
+ if (React31.isValidElement(icon)) {
2896
+ return React31.cloneElement(icon, {
2897
+ className: cn("!h-4 !w-4 h-4 w-4", icon.props.className)
2898
+ });
2899
+ }
2900
+ return icon;
2901
+ }
2883
2902
  function getInputSurfaceClassName({
2884
2903
  className,
2885
2904
  errorText,
@@ -2906,6 +2925,7 @@ var AdsInput = React31.forwardRef(
2906
2925
  descriptionPlacement = "below",
2907
2926
  emptyFileLabel,
2908
2927
  errorText,
2928
+ fileTriggerIcon = /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react10.Upload, { "aria-hidden": true, className: "h-4 w-4" }),
2909
2929
  fileTriggerLabel,
2910
2930
  helperText,
2911
2931
  id,
@@ -2946,6 +2966,7 @@ var AdsInput = React31.forwardRef(
2946
2966
  });
2947
2967
  const resolvedClearButtonLabel = clearButtonLabel ?? messages.input.clear;
2948
2968
  const resolvedFileTriggerLabel = fileTriggerLabel ?? messages.input.chooseFile;
2969
+ const resolvedFileTriggerIcon = renderFileTriggerIcon(fileTriggerIcon);
2949
2970
  const resolvedEmptyFileLabel = emptyFileLabel ?? messages.input.noFileChosen;
2950
2971
  const handleChange = React31.useCallback(
2951
2972
  (event) => {
@@ -2976,7 +2997,7 @@ var AdsInput = React31.forwardRef(
2976
2997
  const fileNameText = selectedFiles.length > 0 ? selectedFiles.join(", ") : resolvedEmptyFileLabel;
2977
2998
  const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
2978
2999
  const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
2979
- const inputNode = isFileInput ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "relative flex w-full min-w-0 flex-1 items-center", children: [
3000
+ const inputNode = isFileInput ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "group relative flex w-full min-w-0 flex-1 items-center focus-within:[&_[data-ads-file-trigger]]:ring-2 focus-within:[&_[data-ads-file-trigger]]:ring-ring focus-within:[&_[data-ads-file-trigger]]:ring-offset-2 focus-within:[&_[data-ads-file-trigger]]:ring-offset-background", children: [
2980
3001
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2981
3002
  Input,
2982
3003
  {
@@ -3002,20 +3023,23 @@ var AdsInput = React31.forwardRef(
3002
3023
  {
3003
3024
  "aria-hidden": "true",
3004
3025
  className: cn(
3005
- inputSurfaceClassName,
3006
- adsTextColorClassName.card,
3007
- "items-center text-sm leading-5",
3026
+ "flex w-full min-w-0 items-center gap-sm text-sm leading-5",
3008
3027
  props.disabled ? "cursor-not-allowed opacity-50" : void 0
3009
3028
  ),
3010
3029
  children: [
3011
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
3030
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
3012
3031
  "span",
3013
3032
  {
3033
+ "data-ads-file-trigger": "",
3014
3034
  className: cn(
3015
- "shrink-0 pr-sm text-sm font-medium leading-5",
3016
- adsTextColorClassName.card
3035
+ "inline-flex shrink-0 items-center justify-center gap-sm rounded-radius-md border-0 bg-primary text-sm font-medium leading-5 shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors group-hover:bg-brand-primary-hover",
3036
+ fileTriggerSizeClasses[size],
3037
+ adsTextColorClassName.primary
3017
3038
  ),
3018
- children: resolvedFileTriggerLabel
3039
+ children: [
3040
+ resolvedFileTriggerIcon ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center [&>svg]:!h-4 [&>svg]:!w-4", children: resolvedFileTriggerIcon }) : null,
3041
+ resolvedFileTriggerLabel
3042
+ ]
3019
3043
  }
3020
3044
  ),
3021
3045
  /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
@@ -3306,7 +3330,7 @@ var React35 = __toESM(require("react"), 1);
3306
3330
  // src/primitives/input-otp.tsx
3307
3331
  var React34 = __toESM(require("react"), 1);
3308
3332
  var import_input_otp = require("input-otp");
3309
- var import_lucide_react10 = require("lucide-react");
3333
+ var import_lucide_react11 = require("lucide-react");
3310
3334
  var import_jsx_runtime37 = require("react/jsx-runtime");
3311
3335
  var InputOTP = React34.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
3312
3336
  import_input_otp.OTPInput,
@@ -3344,7 +3368,7 @@ var InputOTPSlot = React34.forwardRef(({ index, className, ...props }, ref) => {
3344
3368
  );
3345
3369
  });
3346
3370
  InputOTPSlot.displayName = "InputOTPSlot";
3347
- var InputOTPSeparator = React34.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react10.Dot, {}) }));
3371
+ var InputOTPSeparator = React34.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_lucide_react11.Dot, {}) }));
3348
3372
  InputOTPSeparator.displayName = "InputOTPSeparator";
3349
3373
 
3350
3374
  // src/components/AdsInputOTP/index.tsx
@@ -3472,11 +3496,11 @@ var React39 = __toESM(require("react"), 1);
3472
3496
 
3473
3497
  // src/components/AdsPagination/index.tsx
3474
3498
  var React37 = __toESM(require("react"), 1);
3475
- var import_lucide_react12 = require("lucide-react");
3499
+ var import_lucide_react13 = require("lucide-react");
3476
3500
 
3477
3501
  // src/primitives/pagination.tsx
3478
3502
  var React36 = __toESM(require("react"), 1);
3479
- var import_lucide_react11 = require("lucide-react");
3503
+ var import_lucide_react12 = require("lucide-react");
3480
3504
  var import_jsx_runtime39 = require("react/jsx-runtime");
3481
3505
  var Pagination = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
3482
3506
  "nav",
@@ -3530,7 +3554,7 @@ var PaginationPrevious = ({
3530
3554
  className: cn("gap-1 pl-2.5", className),
3531
3555
  ...props,
3532
3556
  children: [
3533
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react11.ChevronLeft, { className: "h-4 w-4" }),
3557
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.ChevronLeft, { className: "h-4 w-4" }),
3534
3558
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { children: "Previous" })
3535
3559
  ]
3536
3560
  }
@@ -3548,7 +3572,7 @@ var PaginationNext = ({
3548
3572
  ...props,
3549
3573
  children: [
3550
3574
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { children: "Next" }),
3551
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react11.ChevronRight, { className: "h-4 w-4" })
3575
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.ChevronRight, { className: "h-4 w-4" })
3552
3576
  ]
3553
3577
  }
3554
3578
  );
@@ -3563,7 +3587,7 @@ var PaginationEllipsis = ({
3563
3587
  className: cn("flex h-9 w-9 items-center justify-center", className),
3564
3588
  ...props,
3565
3589
  children: [
3566
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react11.MoreHorizontal, { className: "h-4 w-4" }),
3590
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_lucide_react12.MoreHorizontal, { className: "h-4 w-4" }),
3567
3591
  /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "sr-only", children: "More pages" })
3568
3592
  ]
3569
3593
  }
@@ -3618,7 +3642,7 @@ var AdsPaginationPrevious = React37.forwardRef(({ "aria-label": ariaLabel, child
3618
3642
  ref,
3619
3643
  ...props,
3620
3644
  children: [
3621
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react12.ChevronLeft, { "aria-hidden": true, className: "h-4 w-4" }),
3645
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.ChevronLeft, { "aria-hidden": true, className: "h-4 w-4" }),
3622
3646
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { children: label })
3623
3647
  ]
3624
3648
  }
@@ -3638,7 +3662,7 @@ var AdsPaginationNext = React37.forwardRef(
3638
3662
  ...props,
3639
3663
  children: [
3640
3664
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { children: label }),
3641
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react12.ChevronRight, { "aria-hidden": true, className: "h-4 w-4" })
3665
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.ChevronRight, { "aria-hidden": true, className: "h-4 w-4" })
3642
3666
  ]
3643
3667
  }
3644
3668
  );
@@ -3662,7 +3686,7 @@ function AdsPaginationEllipsis({
3662
3686
  ),
3663
3687
  ...props,
3664
3688
  children: [
3665
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react12.MoreHorizontal, { className: "h-4 w-4" }),
3689
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_lucide_react13.MoreHorizontal, { className: "h-4 w-4" }),
3666
3690
  /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "sr-only", children: resolvedLabel })
3667
3691
  ]
3668
3692
  }
@@ -4194,7 +4218,7 @@ function AdsDataPagination({
4194
4218
 
4195
4219
  // src/components/AdsDataTable/index.tsx
4196
4220
  var React44 = __toESM(require("react"), 1);
4197
- var import_lucide_react15 = require("lucide-react");
4221
+ var import_lucide_react16 = require("lucide-react");
4198
4222
 
4199
4223
  // src/components/AdsEmpty/index.tsx
4200
4224
  var import_class_variance_authority9 = require("class-variance-authority");
@@ -4301,7 +4325,7 @@ function AdsEmptyFooter({ className, ...props }) {
4301
4325
 
4302
4326
  // src/components/AdsTable/index.tsx
4303
4327
  var React43 = __toESM(require("react"), 1);
4304
- var import_lucide_react14 = require("lucide-react");
4328
+ var import_lucide_react15 = require("lucide-react");
4305
4329
 
4306
4330
  // src/components/AdsRadioGroup/index.tsx
4307
4331
  var React41 = __toESM(require("react"), 1);
@@ -4309,7 +4333,7 @@ var React41 = __toESM(require("react"), 1);
4309
4333
  // src/primitives/radio-group.tsx
4310
4334
  var React40 = __toESM(require("react"), 1);
4311
4335
  var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
4312
- var import_lucide_react13 = require("lucide-react");
4336
+ var import_lucide_react14 = require("lucide-react");
4313
4337
  var import_jsx_runtime44 = require("react/jsx-runtime");
4314
4338
  var RadioGroup = React40.forwardRef(({ className, ...props }, ref) => {
4315
4339
  return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
@@ -4332,7 +4356,7 @@ var RadioGroupItem = React40.forwardRef(({ className, ...props }, ref) => {
4332
4356
  className
4333
4357
  ),
4334
4358
  ...props,
4335
- children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react13.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
4359
+ children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react14.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
4336
4360
  }
4337
4361
  );
4338
4362
  });
@@ -4736,7 +4760,7 @@ var AdsTableSortHeader = React43.forwardRef(
4736
4760
  variant: "ghost",
4737
4761
  children: [
4738
4762
  /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "truncate", children: title }),
4739
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center text-icon-muted", children: sortOrder === "ascend" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.ChevronDown, { className: "h-4 w-4 rotate-180" }) : sortOrder === "descend" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.ChevronDown, { className: "h-4 w-4 opacity-60" }) })
4763
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center text-icon-muted", children: sortOrder === "ascend" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4 rotate-180" }) : sortOrder === "descend" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4 opacity-60" }) })
4740
4764
  ]
4741
4765
  }
4742
4766
  ) });
@@ -4800,7 +4824,7 @@ var AdsTableExpandCell = React43.forwardRef(
4800
4824
  size: "sm",
4801
4825
  type: "button",
4802
4826
  variant: "ghost",
4803
- children: expanded ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react14.ChevronRight, { className: "h-4 w-4" })
4827
+ children: expanded ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_lucide_react15.ChevronRight, { className: "h-4 w-4" })
4804
4828
  }
4805
4829
  ) }) });
4806
4830
  }
@@ -4813,18 +4837,33 @@ var SKELETON_ROW_COUNT = 4;
4813
4837
  var FLEX_WIDTH_UNIT = 160;
4814
4838
  var sizeClassNames = {
4815
4839
  small: {
4840
+ bodyHeight: 32,
4816
4841
  cell: "py-1.5 text-xs leading-4",
4842
+ headHeight: 32,
4817
4843
  head: "h-8 py-1.5 text-xs leading-4"
4818
4844
  },
4819
4845
  middle: {
4846
+ bodyHeight: 40,
4820
4847
  cell: "py-2 text-sm leading-5",
4848
+ headHeight: 40,
4821
4849
  head: "h-10 py-2 text-sm leading-5"
4822
4850
  },
4823
4851
  large: {
4852
+ bodyHeight: 48,
4824
4853
  cell: "py-3 text-base leading-6",
4854
+ headHeight: 48,
4825
4855
  head: "h-12 py-3 text-base leading-6"
4826
4856
  }
4827
4857
  };
4858
+ function getSpinnerLoadingHeight(scrollY, density) {
4859
+ if (typeof scrollY === "number") {
4860
+ return Math.max(scrollY - density.headHeight, density.bodyHeight * SKELETON_ROW_COUNT);
4861
+ }
4862
+ if (typeof scrollY === "string") {
4863
+ return `max(calc(${scrollY} - ${density.headHeight}px), ${density.bodyHeight * SKELETON_ROW_COUNT}px)`;
4864
+ }
4865
+ return density.bodyHeight * SKELETON_ROW_COUNT;
4866
+ }
4828
4867
  function getColumnKey(column, index) {
4829
4868
  if (column.key !== void 0) {
4830
4869
  return String(column.key);
@@ -5035,6 +5074,8 @@ function AdsDataTable({
5035
5074
  dataSource = [],
5036
5075
  rowKey,
5037
5076
  loading = false,
5077
+ loadingVariant = "skeleton",
5078
+ expandedRowSurface = "inset",
5038
5079
  emptyText,
5039
5080
  emptyState,
5040
5081
  rowClassName,
@@ -5133,8 +5174,14 @@ function AdsDataTable({
5133
5174
  const hasSelectionColumn = Boolean(rowSelection);
5134
5175
  const hasExpandableColumn = Boolean(expandable?.expandedRowRender);
5135
5176
  const density = sizeClassNames[size];
5177
+ const columnCount = resolvedColumns.length + Number(hasSelectionColumn) + Number(hasExpandableColumn);
5136
5178
  const paginationMode = pagination === false ? "client" : pagination.mode ?? "client";
5137
5179
  const allowsRowSelectionByClick = Boolean(rowSelection) && !suppressRowClickSelection;
5180
+ const spinnerLoadingHeight = React44.useMemo(
5181
+ () => getSpinnerLoadingHeight(scroll?.y, density),
5182
+ [density, scroll?.y]
5183
+ );
5184
+ const expandedRowContentClassName = expandedRowSurface === "plain" ? "bg-transparent p-4" : expandedRowSurface === "subtle" ? "mx-6 my-4 rounded-[20px] border border-border bg-transparent p-4" : "border-t border-border bg-popover/40 p-4";
5138
5185
  const filterValues = React44.useMemo(
5139
5186
  () => resolvedColumns.reduce((accumulator, column, index) => {
5140
5187
  const columnKey = getColumnKey(column, index);
@@ -5393,7 +5440,7 @@ function AdsDataTable({
5393
5440
  variant: "ghost",
5394
5441
  children: [
5395
5442
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "truncate", children: headerTitle }),
5396
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center text-icon-muted", children: columnSortOrder === "ascend" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4 rotate-180" }) : columnSortOrder === "descend" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react15.ChevronDown, { className: "h-4 w-4 opacity-60" }) })
5443
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center text-icon-muted", children: columnSortOrder === "ascend" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react16.ChevronDown, { className: "h-4 w-4 rotate-180" }) : columnSortOrder === "descend" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react16.ChevronDown, { className: "h-4 w-4" }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react16.ChevronDown, { className: "h-4 w-4 opacity-60" }) })
5397
5444
  ]
5398
5445
  }
5399
5446
  ) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "truncate", children: headerTitle }),
@@ -5410,7 +5457,7 @@ function AdsDataTable({
5410
5457
  size: "sm",
5411
5458
  type: "button",
5412
5459
  variant: "ghost",
5413
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react15.Filter, { className: "h-3.5 w-3.5" })
5460
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react16.Filter, { className: "h-3.5 w-3.5" })
5414
5461
  }
5415
5462
  ) }),
5416
5463
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsPopoverContent, { align: "end", className: "w-64", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
@@ -5490,7 +5537,26 @@ function AdsDataTable({
5490
5537
  );
5491
5538
  })
5492
5539
  ] }) }),
5493
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableBody, { children: loading ? Array.from({ length: SKELETON_ROW_COUNT }, (_, skeletonIndex) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(AdsTableRow, { children: [
5540
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableBody, { children: loading && loadingVariant === "spinner" ? [
5541
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5542
+ AdsTableCell,
5543
+ {
5544
+ className: "p-0",
5545
+ colSpan: columnCount,
5546
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5547
+ "div",
5548
+ {
5549
+ "aria-label": messages.table.loadingRows,
5550
+ "aria-live": "polite",
5551
+ className: "flex items-center justify-center px-6 py-8 text-foreground",
5552
+ role: "status",
5553
+ style: { minHeight: spinnerLoadingHeight },
5554
+ children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsSpinner, { size: "lg", tone: "foreground" })
5555
+ }
5556
+ )
5557
+ }
5558
+ ) }, "spinner-row")
5559
+ ] : loading ? Array.from({ length: SKELETON_ROW_COUNT }, (_, skeletonIndex) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(AdsTableRow, { children: [
5494
5560
  hasSelectionColumn ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableCell, { className: "w-12 p-2", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsSkeleton, { className: "h-4 w-4 rounded-[4px]" }) }) : null,
5495
5561
  hasExpandableColumn ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableCell, { className: "w-12 p-2", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsSkeleton, { className: "h-4 w-4 rounded-[4px]" }) }) : null,
5496
5562
  resolvedColumns.map((column, index) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
@@ -5593,7 +5659,7 @@ function AdsDataTable({
5593
5659
  "div",
5594
5660
  {
5595
5661
  className: cn(
5596
- "border-t border-border bg-popover/40 p-4",
5662
+ expandedRowContentClassName,
5597
5663
  classNames?.expandedRowContent
5598
5664
  ),
5599
5665
  children: expandable?.expandedRowRender?.(record, index)
@@ -5606,7 +5672,7 @@ function AdsDataTable({
5606
5672
  /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(AdsTableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
5607
5673
  AdsTableCell,
5608
5674
  {
5609
- colSpan: resolvedColumns.length + Number(hasSelectionColumn) + Number(hasExpandableColumn),
5675
+ colSpan: columnCount,
5610
5676
  className: cn("p-0", classNames?.emptyRowCell),
5611
5677
  children: renderedEmptyState
5612
5678
  }
@@ -5967,14 +6033,21 @@ function AdsRadialProgressChart({
5967
6033
  children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
5968
6034
  import_recharts2.RadialBarChart,
5969
6035
  {
5970
- accessibilityLayer: true,
6036
+ accessibilityLayer: false,
5971
6037
  data: chartData,
5972
6038
  endAngle: -270,
5973
6039
  innerRadius: safeSize / 2 - safeStrokeWidth,
5974
6040
  outerRadius: safeSize / 2,
5975
6041
  startAngle: 90,
5976
6042
  children: [
5977
- showTooltip && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_recharts2.Tooltip, { contentStyle: tooltipContentStyle, cursor: false }),
6043
+ showTooltip && /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
6044
+ import_recharts2.Tooltip,
6045
+ {
6046
+ contentStyle: tooltipContentStyle,
6047
+ cursor: false,
6048
+ wrapperStyle: { zIndex: 1 }
6049
+ }
6050
+ ),
5978
6051
  /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
5979
6052
  import_recharts2.PolarAngleAxis,
5980
6053
  {
@@ -6054,22 +6127,30 @@ function AdsSparklineChart({
6054
6127
  className: "h-full",
6055
6128
  config: { value: { color } },
6056
6129
  height: "100%",
6057
- children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(import_recharts3.LineChart, { data: chartData, margin: { bottom: 1, left: 1, right: 1, top: 1 }, children: [
6058
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_recharts3.XAxis, { dataKey: xKey, hide: true, type: "category" }),
6059
- showTooltip && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_recharts3.Tooltip, { contentStyle: tooltipContentStyle2, cursor: false }),
6060
- /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6061
- import_recharts3.Line,
6062
- {
6063
- activeDot: false,
6064
- dataKey,
6065
- dot: false,
6066
- isAnimationActive: false,
6067
- stroke: "var(--color-value)",
6068
- strokeWidth: 2,
6069
- type: "monotone"
6070
- }
6071
- )
6072
- ] })
6130
+ children: /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
6131
+ import_recharts3.LineChart,
6132
+ {
6133
+ accessibilityLayer: false,
6134
+ data: chartData,
6135
+ margin: { bottom: 1, left: 1, right: 1, top: 1 },
6136
+ children: [
6137
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_recharts3.XAxis, { dataKey: xKey, hide: true, type: "category" }),
6138
+ showTooltip && /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(import_recharts3.Tooltip, { contentStyle: tooltipContentStyle2, cursor: false }),
6139
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
6140
+ import_recharts3.Line,
6141
+ {
6142
+ activeDot: false,
6143
+ dataKey,
6144
+ dot: false,
6145
+ isAnimationActive: false,
6146
+ stroke: "var(--color-value)",
6147
+ strokeWidth: 2,
6148
+ type: "monotone"
6149
+ }
6150
+ )
6151
+ ]
6152
+ }
6153
+ )
6073
6154
  }
6074
6155
  )
6075
6156
  }
@@ -6239,6 +6320,7 @@ function AdsBarChart({
6239
6320
  height,
6240
6321
  highlightColor,
6241
6322
  highlightIndex,
6323
+ hoverColor,
6242
6324
  showTooltip = true,
6243
6325
  xAxis,
6244
6326
  xKey,
@@ -6267,51 +6349,60 @@ function AdsBarChart({
6267
6349
  className: "h-full",
6268
6350
  config: { value: { color } },
6269
6351
  height: "100%",
6270
- children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_recharts4.BarChart, { data: chartData, margin: { bottom: 0, left: 0, right: 0, top: 0 }, children: [
6271
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6272
- import_recharts4.XAxis,
6273
- {
6274
- axisLine: xAxis?.axisLine ?? false,
6275
- dataKey: xKey,
6276
- hide: xAxis?.hide ?? true,
6277
- tick: xAxis?.tick === false ? false : { fill: xAxis?.tickColor, fontSize: xAxis?.tickFontSize },
6278
- tickLine: xAxis?.tickLine ?? false,
6279
- tickMargin: xAxis?.tickMargin,
6280
- type: "category"
6281
- }
6282
- ),
6283
- yAxis && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6284
- import_recharts4.YAxis,
6285
- {
6286
- axisLine: yAxis.axisLine ?? false,
6287
- domain: yAxis.domain,
6288
- tick: yAxis.tick === false ? false : { fill: yAxis.tickColor, fontSize: yAxis.tickFontSize },
6289
- tickCount: yAxis.tickCount,
6290
- tickLine: yAxis.tickLine ?? false,
6291
- tickMargin: yAxis.tickMargin,
6292
- ticks: yAxis.ticks,
6293
- width: yAxis.width
6294
- }
6295
- ),
6296
- showTooltip && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_recharts4.Tooltip, { contentStyle: tooltipContentStyle3, cursor: { fill: "transparent" } }),
6297
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6298
- import_recharts4.Bar,
6299
- {
6300
- barSize,
6301
- dataKey,
6302
- fill: "var(--color-value)",
6303
- isAnimationActive: false,
6304
- radius: safeRadius,
6305
- children: chartData.map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6306
- import_recharts4.Cell,
6352
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
6353
+ import_recharts4.BarChart,
6354
+ {
6355
+ accessibilityLayer: false,
6356
+ data: chartData,
6357
+ margin: { bottom: 0, left: 0, right: 0, top: 0 },
6358
+ children: [
6359
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6360
+ import_recharts4.XAxis,
6307
6361
  {
6308
- fill: index === safeHighlightIndex ? highlightColor ?? DEFAULT_HIGHLIGHT_COLOR : "var(--color-value)"
6309
- },
6310
- index
6311
- ))
6312
- }
6313
- )
6314
- ] })
6362
+ axisLine: xAxis?.axisLine ?? false,
6363
+ dataKey: xKey,
6364
+ hide: xAxis?.hide ?? true,
6365
+ tick: xAxis?.tick ?? true,
6366
+ tickLine: xAxis?.tickLine ?? false,
6367
+ tickMargin: xAxis?.tickMargin,
6368
+ type: "category"
6369
+ }
6370
+ ),
6371
+ yAxis && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6372
+ import_recharts4.YAxis,
6373
+ {
6374
+ axisLine: yAxis.axisLine ?? false,
6375
+ domain: yAxis.domain,
6376
+ tick: yAxis.tick ?? true,
6377
+ tickCount: yAxis.tickCount,
6378
+ tickLine: yAxis.tickLine ?? false,
6379
+ tickMargin: yAxis.tickMargin,
6380
+ ticks: yAxis.ticks,
6381
+ width: yAxis.width
6382
+ }
6383
+ ),
6384
+ showTooltip && /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_recharts4.Tooltip, { contentStyle: tooltipContentStyle3, cursor: { fill: "transparent" } }),
6385
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6386
+ import_recharts4.Bar,
6387
+ {
6388
+ activeBar: hoverColor ? { fill: hoverColor } : void 0,
6389
+ barSize,
6390
+ dataKey,
6391
+ fill: "var(--color-value)",
6392
+ isAnimationActive: false,
6393
+ radius: safeRadius,
6394
+ children: chartData.map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
6395
+ import_recharts4.Cell,
6396
+ {
6397
+ fill: index === safeHighlightIndex ? highlightColor ?? DEFAULT_HIGHLIGHT_COLOR : "var(--color-value)"
6398
+ },
6399
+ index
6400
+ ))
6401
+ }
6402
+ )
6403
+ ]
6404
+ }
6405
+ )
6315
6406
  }
6316
6407
  )
6317
6408
  }
@@ -6682,7 +6773,7 @@ AdsToggleGroupItem.displayName = "AdsToggleGroupItem";
6682
6773
  // src/components/AdsTextarea/index.tsx
6683
6774
  var React61 = __toESM(require("react"), 1);
6684
6775
  var import_jsx_runtime70 = require("react/jsx-runtime");
6685
- var textareaBaseClassName = "w-full rounded-radius-md border border-border bg-card px-md py-md text-base leading-6 shadow-[0px_1px_2px_rgba(0,0,0,0.1)] placeholder:text-[var(--muted-foreground)] focus-visible:border-border-focus focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:opacity-50";
6776
+ var textareaBaseClassName = "w-full rounded-radius-md border border-border bg-card px-md py-md text-base leading-6 shadow-[0px_1px_2px_rgba(0,0,0,0.1)] placeholder:text-[var(--muted-foreground)] focus-visible:border-border-focus focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 disabled:cursor-not-allowed disabled:border-border disabled:bg-muted disabled:text-[var(--muted-foreground)] disabled:placeholder:text-[var(--muted-foreground)] disabled:opacity-100 disabled:focus-visible:border-border disabled:focus-visible:ring-0";
6686
6777
  var AdsTextarea = React61.forwardRef(
6687
6778
  ({
6688
6779
  action,
@@ -6735,15 +6826,15 @@ AdsTextarea.displayName = "AdsTextarea";
6735
6826
 
6736
6827
  // src/components/AdsToast/index.tsx
6737
6828
  var React62 = __toESM(require("react"), 1);
6738
- var import_lucide_react16 = require("lucide-react");
6829
+ var import_lucide_react17 = require("lucide-react");
6739
6830
  var import_sonner = require("sonner");
6740
6831
  var import_jsx_runtime71 = require("react/jsx-runtime");
6741
6832
  var adsToastIconMap = {
6742
- success: import_lucide_react16.CircleCheck,
6743
- info: import_lucide_react16.Info,
6744
- warning: import_lucide_react16.TriangleAlert,
6745
- error: import_lucide_react16.OctagonX,
6746
- loading: import_lucide_react16.LoaderCircle
6833
+ success: import_lucide_react17.CircleCheck,
6834
+ info: import_lucide_react17.Info,
6835
+ warning: import_lucide_react17.TriangleAlert,
6836
+ error: import_lucide_react17.OctagonX,
6837
+ loading: import_lucide_react17.LoaderCircle
6747
6838
  };
6748
6839
  function resolveToastIcon(intent, icon) {
6749
6840
  if (icon) {
@@ -6928,7 +7019,7 @@ var AdsToastManager = Object.assign(
6928
7019
  // src/components/AdsDialog/index.tsx
6929
7020
  var React63 = __toESM(require("react"), 1);
6930
7021
  var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
6931
- var import_lucide_react17 = require("lucide-react");
7022
+ var import_lucide_react18 = require("lucide-react");
6932
7023
  var import_jsx_runtime72 = require("react/jsx-runtime");
6933
7024
  var overlayClassName2 = "fixed inset-0 z-50 bg-black/80 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0";
6934
7025
  var contentClassName2 = "fixed left-1/2 top-1/2 z-50 flex max-h-[calc(100dvh-2rem)] w-[calc(100%-2rem)] max-w-[423px] -translate-x-1/2 -translate-y-1/2 flex-col gap-lg overflow-hidden rounded-radius-md border border-border bg-card p-xl shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.1),0px_10px_15px_-3px_rgba(0,0,0,0.1)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]";
@@ -7069,7 +7160,7 @@ var DialogContent = React63.forwardRef(
7069
7160
  "aria-label": resolvedCloseLabel,
7070
7161
  className: cn(closeButtonClassName, adsTextColorClassName.card),
7071
7162
  children: [
7072
- /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react17.X, { "aria-hidden": true, className: "h-4 w-4" }),
7163
+ /* @__PURE__ */ (0, import_jsx_runtime72.jsx)(import_lucide_react18.X, { "aria-hidden": true, className: "h-4 w-4" }),
7073
7164
  /* @__PURE__ */ (0, import_jsx_runtime72.jsx)("span", { className: "sr-only", children: resolvedCloseLabel })
7074
7165
  ]
7075
7166
  }