@adsgency_npm/adsgency-ads-ui 0.1.0-alpha.21 → 0.1.0-alpha.22

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
@@ -41,7 +41,6 @@ var adsDefaultMessages = {
41
41
  collapseRow: "Collapse row",
42
42
  expandRow: "Expand row",
43
43
  filterColumn: "Filter column",
44
- loadingRows: "Loading table rows",
45
44
  noDataAvailable: "No data available",
46
45
  selectAllRows: "Select all rows",
47
46
  selectRow: "Select row",
@@ -92,7 +91,6 @@ var adsDefaultMessages = {
92
91
  collapseRow: "\u6536\u8D77\u884C",
93
92
  expandRow: "\u5C55\u5F00\u884C",
94
93
  filterColumn: "\u7B5B\u9009\u5217",
95
- loadingRows: "\u6B63\u5728\u52A0\u8F7D\u8868\u683C\u884C",
96
94
  noDataAvailable: "\u6682\u65E0\u6570\u636E",
97
95
  selectAllRows: "\u9009\u62E9\u5168\u90E8\u884C",
98
96
  selectRow: "\u9009\u62E9\u884C",
@@ -651,7 +649,7 @@ var adsTextColorClassName = {
651
649
  // src/components/AdsAlertDialog/index.tsx
652
650
  import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
653
651
  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";
654
- 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%]";
652
+ 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%]";
655
653
  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]";
656
654
  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]";
657
655
  var AlertDialog = AlertDialogPrimitive.Root;
@@ -2640,7 +2638,6 @@ AdsSkeleton.displayName = "AdsSkeleton";
2640
2638
 
2641
2639
  // src/components/AdsInput/index.tsx
2642
2640
  import * as React30 from "react";
2643
- import { Upload } from "lucide-react";
2644
2641
 
2645
2642
  // src/lib/adsClearButton.tsx
2646
2643
  import * as React29 from "react";
@@ -2661,17 +2658,12 @@ AdsClearButton.displayName = "AdsClearButton";
2661
2658
 
2662
2659
  // src/components/AdsInput/index.tsx
2663
2660
  import { jsx as jsx33, jsxs as jsxs13 } from "react/jsx-runtime";
2664
- 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";
2661
+ 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";
2665
2662
  var inputSizeClasses = {
2666
2663
  sm: "h-8 text-sm leading-5",
2667
2664
  md: "h-9 text-base leading-6",
2668
2665
  lg: "h-10 text-base leading-6"
2669
2666
  };
2670
- var fileTriggerSizeClasses = {
2671
- sm: "h-8 px-md py-sm",
2672
- md: "h-9 px-lg py-sm",
2673
- lg: "h-10 px-xl py-[10px]"
2674
- };
2675
2667
  function assignInputRef(ref, value) {
2676
2668
  if (typeof ref === "function") {
2677
2669
  ref(value);
@@ -2690,17 +2682,6 @@ function getTextInputValue(value) {
2690
2682
  }
2691
2683
  return "";
2692
2684
  }
2693
- function renderFileTriggerIcon(icon) {
2694
- if (!icon) {
2695
- return null;
2696
- }
2697
- if (React30.isValidElement(icon)) {
2698
- return React30.cloneElement(icon, {
2699
- className: cn("!h-4 !w-4 h-4 w-4", icon.props.className)
2700
- });
2701
- }
2702
- return icon;
2703
- }
2704
2685
  function getInputSurfaceClassName({
2705
2686
  className,
2706
2687
  errorText,
@@ -2727,7 +2708,6 @@ var AdsInput = React30.forwardRef(
2727
2708
  descriptionPlacement = "below",
2728
2709
  emptyFileLabel,
2729
2710
  errorText,
2730
- fileTriggerIcon = /* @__PURE__ */ jsx33(Upload, { "aria-hidden": true, className: "h-4 w-4" }),
2731
2711
  fileTriggerLabel,
2732
2712
  helperText,
2733
2713
  id,
@@ -2768,7 +2748,6 @@ var AdsInput = React30.forwardRef(
2768
2748
  });
2769
2749
  const resolvedClearButtonLabel = clearButtonLabel ?? messages.input.clear;
2770
2750
  const resolvedFileTriggerLabel = fileTriggerLabel ?? messages.input.chooseFile;
2771
- const resolvedFileTriggerIcon = renderFileTriggerIcon(fileTriggerIcon);
2772
2751
  const resolvedEmptyFileLabel = emptyFileLabel ?? messages.input.noFileChosen;
2773
2752
  const handleChange = React30.useCallback(
2774
2753
  (event) => {
@@ -2799,7 +2778,7 @@ var AdsInput = React30.forwardRef(
2799
2778
  const fileNameText = selectedFiles.length > 0 ? selectedFiles.join(", ") : resolvedEmptyFileLabel;
2800
2779
  const helperNode = helperText ? /* @__PURE__ */ jsx33(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
2801
2780
  const errorNode = errorText ? /* @__PURE__ */ jsx33(AdsFieldError, { id: description.errorId, children: errorText }) : null;
2802
- const inputNode = isFileInput ? /* @__PURE__ */ jsxs13("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: [
2781
+ const inputNode = isFileInput ? /* @__PURE__ */ jsxs13("div", { className: "relative flex w-full min-w-0 flex-1 items-center", children: [
2803
2782
  /* @__PURE__ */ jsx33(
2804
2783
  Input,
2805
2784
  {
@@ -2825,23 +2804,20 @@ var AdsInput = React30.forwardRef(
2825
2804
  {
2826
2805
  "aria-hidden": "true",
2827
2806
  className: cn(
2828
- "flex w-full min-w-0 items-center gap-sm text-sm leading-5",
2807
+ inputSurfaceClassName,
2808
+ adsTextColorClassName.card,
2809
+ "items-center text-sm leading-5",
2829
2810
  props.disabled ? "cursor-not-allowed opacity-50" : void 0
2830
2811
  ),
2831
2812
  children: [
2832
- /* @__PURE__ */ jsxs13(
2813
+ /* @__PURE__ */ jsx33(
2833
2814
  "span",
2834
2815
  {
2835
- "data-ads-file-trigger": "",
2836
2816
  className: cn(
2837
- "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",
2838
- fileTriggerSizeClasses[size],
2839
- adsTextColorClassName.primary
2817
+ "shrink-0 pr-sm text-sm font-medium leading-5",
2818
+ adsTextColorClassName.card
2840
2819
  ),
2841
- children: [
2842
- resolvedFileTriggerIcon ? /* @__PURE__ */ jsx33("span", { className: "inline-flex h-4 w-4 items-center justify-center [&>svg]:!h-4 [&>svg]:!w-4", children: resolvedFileTriggerIcon }) : null,
2843
- resolvedFileTriggerLabel
2844
- ]
2820
+ children: resolvedFileTriggerLabel
2845
2821
  }
2846
2822
  ),
2847
2823
  /* @__PURE__ */ jsx33(
@@ -4639,33 +4615,18 @@ var SKELETON_ROW_COUNT = 4;
4639
4615
  var FLEX_WIDTH_UNIT = 160;
4640
4616
  var sizeClassNames = {
4641
4617
  small: {
4642
- bodyHeight: 32,
4643
4618
  cell: "py-1.5 text-xs leading-4",
4644
- headHeight: 32,
4645
4619
  head: "h-8 py-1.5 text-xs leading-4"
4646
4620
  },
4647
4621
  middle: {
4648
- bodyHeight: 40,
4649
4622
  cell: "py-2 text-sm leading-5",
4650
- headHeight: 40,
4651
4623
  head: "h-10 py-2 text-sm leading-5"
4652
4624
  },
4653
4625
  large: {
4654
- bodyHeight: 48,
4655
4626
  cell: "py-3 text-base leading-6",
4656
- headHeight: 48,
4657
4627
  head: "h-12 py-3 text-base leading-6"
4658
4628
  }
4659
4629
  };
4660
- function getSpinnerLoadingHeight(scrollY, density) {
4661
- if (typeof scrollY === "number") {
4662
- return Math.max(scrollY - density.headHeight, density.bodyHeight * SKELETON_ROW_COUNT);
4663
- }
4664
- if (typeof scrollY === "string") {
4665
- return `max(calc(${scrollY} - ${density.headHeight}px), ${density.bodyHeight * SKELETON_ROW_COUNT}px)`;
4666
- }
4667
- return density.bodyHeight * SKELETON_ROW_COUNT;
4668
- }
4669
4630
  function getColumnKey(column, index) {
4670
4631
  if (column.key !== void 0) {
4671
4632
  return String(column.key);
@@ -4876,8 +4837,6 @@ function AdsDataTable({
4876
4837
  dataSource = [],
4877
4838
  rowKey,
4878
4839
  loading = false,
4879
- loadingVariant = "skeleton",
4880
- expandedRowSurface = "inset",
4881
4840
  emptyText,
4882
4841
  emptyState,
4883
4842
  rowClassName,
@@ -4976,14 +4935,8 @@ function AdsDataTable({
4976
4935
  const hasSelectionColumn = Boolean(rowSelection);
4977
4936
  const hasExpandableColumn = Boolean(expandable?.expandedRowRender);
4978
4937
  const density = sizeClassNames[size];
4979
- const columnCount = resolvedColumns.length + Number(hasSelectionColumn) + Number(hasExpandableColumn);
4980
4938
  const paginationMode = pagination === false ? "client" : pagination.mode ?? "client";
4981
4939
  const allowsRowSelectionByClick = Boolean(rowSelection) && !suppressRowClickSelection;
4982
- const spinnerLoadingHeight = React43.useMemo(
4983
- () => getSpinnerLoadingHeight(scroll?.y, density),
4984
- [density, scroll?.y]
4985
- );
4986
- 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";
4987
4940
  const filterValues = React43.useMemo(
4988
4941
  () => resolvedColumns.reduce((accumulator, column, index) => {
4989
4942
  const columnKey = getColumnKey(column, index);
@@ -5339,26 +5292,7 @@ function AdsDataTable({
5339
5292
  );
5340
5293
  })
5341
5294
  ] }) }),
5342
- /* @__PURE__ */ jsx47(AdsTableBody, { children: loading && loadingVariant === "spinner" ? [
5343
- /* @__PURE__ */ jsx47(AdsTableRow, { children: /* @__PURE__ */ jsx47(
5344
- AdsTableCell,
5345
- {
5346
- className: "p-0",
5347
- colSpan: columnCount,
5348
- children: /* @__PURE__ */ jsx47(
5349
- "div",
5350
- {
5351
- "aria-label": messages.table.loadingRows,
5352
- "aria-live": "polite",
5353
- className: "flex items-center justify-center px-6 py-8 text-foreground",
5354
- role: "status",
5355
- style: { minHeight: spinnerLoadingHeight },
5356
- children: /* @__PURE__ */ jsx47(AdsSpinner, { size: "lg", tone: "foreground" })
5357
- }
5358
- )
5359
- }
5360
- ) }, "spinner-row")
5361
- ] : loading ? Array.from({ length: SKELETON_ROW_COUNT }, (_, skeletonIndex) => /* @__PURE__ */ jsxs23(AdsTableRow, { children: [
5295
+ /* @__PURE__ */ jsx47(AdsTableBody, { children: loading ? Array.from({ length: SKELETON_ROW_COUNT }, (_, skeletonIndex) => /* @__PURE__ */ jsxs23(AdsTableRow, { children: [
5362
5296
  hasSelectionColumn ? /* @__PURE__ */ jsx47(AdsTableCell, { className: "w-12 p-2", children: /* @__PURE__ */ jsx47(AdsSkeleton, { className: "h-4 w-4 rounded-[4px]" }) }) : null,
5363
5297
  hasExpandableColumn ? /* @__PURE__ */ jsx47(AdsTableCell, { className: "w-12 p-2", children: /* @__PURE__ */ jsx47(AdsSkeleton, { className: "h-4 w-4 rounded-[4px]" }) }) : null,
5364
5298
  resolvedColumns.map((column, index) => /* @__PURE__ */ jsx47(
@@ -5461,7 +5395,7 @@ function AdsDataTable({
5461
5395
  "div",
5462
5396
  {
5463
5397
  className: cn(
5464
- expandedRowContentClassName,
5398
+ "border-t border-border bg-popover/40 p-4",
5465
5399
  classNames?.expandedRowContent
5466
5400
  ),
5467
5401
  children: expandable?.expandedRowRender?.(record, index)
@@ -5474,7 +5408,7 @@ function AdsDataTable({
5474
5408
  /* @__PURE__ */ jsx47(AdsTableRow, { children: /* @__PURE__ */ jsx47(
5475
5409
  AdsTableCell,
5476
5410
  {
5477
- colSpan: columnCount,
5411
+ colSpan: resolvedColumns.length + Number(hasSelectionColumn) + Number(hasExpandableColumn),
5478
5412
  className: cn("p-0", classNames?.emptyRowCell),
5479
5413
  children: renderedEmptyState
5480
5414
  }
@@ -5742,14 +5676,324 @@ var AdsProgress = React45.forwardRef(
5742
5676
  );
5743
5677
  AdsProgress.displayName = "AdsProgress";
5744
5678
 
5745
- // src/components/AdsSlider/index.tsx
5679
+ // src/components/AdsRadialProgressChart/index.tsx
5680
+ import { PolarAngleAxis, RadialBar, RadialBarChart } from "recharts";
5681
+
5682
+ // src/primitives/chart.tsx
5683
+ import * as React46 from "react";
5684
+ import { ResponsiveContainer } from "recharts";
5685
+ import { jsx as jsx52 } from "react/jsx-runtime";
5686
+ var chartContext = React46.createContext(null);
5687
+ var ChartContainer = React46.forwardRef(
5688
+ ({ children, className, config, height = 240, style, ...props }, ref) => {
5689
+ const chartStyle = Object.entries(config).reduce((variables, [key, item]) => {
5690
+ if (item.color) {
5691
+ variables[`--color-${key}`] = item.color;
5692
+ }
5693
+ return variables;
5694
+ }, {});
5695
+ return /* @__PURE__ */ jsx52(chartContext.Provider, { value: config, children: /* @__PURE__ */ jsx52(
5696
+ "div",
5697
+ {
5698
+ className: cn("relative w-full text-xs", className),
5699
+ "data-slot": "chart",
5700
+ ref,
5701
+ style: { height, ...chartStyle, ...style },
5702
+ ...props,
5703
+ children: /* @__PURE__ */ jsx52(ResponsiveContainer, { height: "100%", width: "100%", children })
5704
+ }
5705
+ ) });
5706
+ }
5707
+ );
5708
+ ChartContainer.displayName = "ChartContainer";
5709
+
5710
+ // src/components/AdsRadialProgressChart/index.tsx
5711
+ import { jsx as jsx53, jsxs as jsxs27 } from "react/jsx-runtime";
5712
+ var DEFAULT_SIZE = 160;
5713
+ var DEFAULT_STROKE_WIDTH = 14;
5714
+ function clamp(value, min, max) {
5715
+ return Math.min(Math.max(value, min), max);
5716
+ }
5717
+ function AdsRadialProgressChart({
5718
+ ariaLabel,
5719
+ className,
5720
+ color = "var(--primary)",
5721
+ label,
5722
+ max = 100,
5723
+ size = DEFAULT_SIZE,
5724
+ strokeWidth = DEFAULT_STROKE_WIDTH,
5725
+ trackColor = "color-mix(in srgb, var(--primary) 20%, transparent)",
5726
+ value
5727
+ }) {
5728
+ const safeMax = Number.isFinite(max) && max > 0 ? max : 0;
5729
+ const safeValue = Number.isFinite(value) && safeMax > 0 ? clamp(value, 0, safeMax) : 0;
5730
+ const percentage = safeMax > 0 ? Math.round(safeValue / safeMax * 100) : 0;
5731
+ const safeSize = Number.isFinite(size) && size > 0 ? size : DEFAULT_SIZE;
5732
+ const safeStrokeWidth = clamp(
5733
+ Number.isFinite(strokeWidth) && strokeWidth > 0 ? strokeWidth : DEFAULT_STROKE_WIDTH,
5734
+ 1,
5735
+ safeSize / 2
5736
+ );
5737
+ const chartData = [{ value: safeValue }];
5738
+ return /* @__PURE__ */ jsxs27(
5739
+ "div",
5740
+ {
5741
+ "aria-label": ariaLabel ?? `${percentage}%`,
5742
+ className: cn(
5743
+ "relative inline-grid size-[var(--ads-radial-chart-size)] place-items-center",
5744
+ className
5745
+ ),
5746
+ "data-testid": "ads-radial-progress-chart",
5747
+ role: "img",
5748
+ style: { "--ads-radial-chart-size": `${safeSize}px` },
5749
+ children: [
5750
+ /* @__PURE__ */ jsx53(
5751
+ ChartContainer,
5752
+ {
5753
+ "aria-hidden": "true",
5754
+ className: "absolute inset-0",
5755
+ config: { value: { color } },
5756
+ height: "100%",
5757
+ children: /* @__PURE__ */ jsxs27(
5758
+ RadialBarChart,
5759
+ {
5760
+ accessibilityLayer: true,
5761
+ data: chartData,
5762
+ endAngle: -270,
5763
+ innerRadius: safeSize / 2 - safeStrokeWidth,
5764
+ outerRadius: safeSize / 2,
5765
+ startAngle: 90,
5766
+ children: [
5767
+ /* @__PURE__ */ jsx53(
5768
+ PolarAngleAxis,
5769
+ {
5770
+ axisLine: false,
5771
+ dataKey: "value",
5772
+ domain: [0, Math.max(safeMax, 1)],
5773
+ tick: false,
5774
+ type: "number"
5775
+ }
5776
+ ),
5777
+ /* @__PURE__ */ jsx53(
5778
+ RadialBar,
5779
+ {
5780
+ background: { fill: trackColor },
5781
+ cornerRadius: safeStrokeWidth / 2,
5782
+ dataKey: "value",
5783
+ fill: "var(--color-value)",
5784
+ isAnimationActive: false
5785
+ }
5786
+ )
5787
+ ]
5788
+ }
5789
+ )
5790
+ }
5791
+ ),
5792
+ /* @__PURE__ */ jsx53("span", { className: "pointer-events-none absolute inset-0 flex items-center justify-center text-center", children: label ?? `${percentage}%` })
5793
+ ]
5794
+ }
5795
+ );
5796
+ }
5797
+
5798
+ // src/components/AdsSparklineChart/index.tsx
5799
+ import { Line, LineChart, XAxis } from "recharts";
5800
+ import { jsx as jsx54, jsxs as jsxs28 } from "react/jsx-runtime";
5801
+ var DEFAULT_HEIGHT = 40;
5802
+ function getSafeHeight(height) {
5803
+ return Number.isFinite(height) && height && height > 0 ? height : DEFAULT_HEIGHT;
5804
+ }
5805
+ function getSafeValue(value) {
5806
+ return typeof value === "number" && Number.isFinite(value) ? Math.max(value, 0) : 0;
5807
+ }
5808
+ function AdsSparklineChart({
5809
+ ariaLabel,
5810
+ className,
5811
+ color = "var(--chart-1)",
5812
+ data,
5813
+ dataKey,
5814
+ height,
5815
+ xKey
5816
+ }) {
5817
+ const chartData = data.map((datum) => ({
5818
+ ...datum,
5819
+ [xKey]: datum[xKey],
5820
+ [dataKey]: getSafeValue(datum[dataKey])
5821
+ }));
5822
+ const safeHeight = getSafeHeight(height);
5823
+ return /* @__PURE__ */ jsx54(
5824
+ "div",
5825
+ {
5826
+ "aria-label": ariaLabel ?? "Trend chart",
5827
+ className: cn("w-full", className),
5828
+ "data-testid": "ads-sparkline-chart",
5829
+ role: "img",
5830
+ style: { height: safeHeight },
5831
+ children: /* @__PURE__ */ jsx54(
5832
+ ChartContainer,
5833
+ {
5834
+ "aria-hidden": "true",
5835
+ className: "h-full",
5836
+ config: { value: { color } },
5837
+ height: "100%",
5838
+ children: /* @__PURE__ */ jsxs28(LineChart, { data: chartData, margin: { bottom: 1, left: 1, right: 1, top: 1 }, children: [
5839
+ /* @__PURE__ */ jsx54(XAxis, { dataKey: xKey, hide: true, type: "category" }),
5840
+ /* @__PURE__ */ jsx54(
5841
+ Line,
5842
+ {
5843
+ activeDot: false,
5844
+ dataKey,
5845
+ dot: false,
5846
+ isAnimationActive: false,
5847
+ stroke: "var(--color-value)",
5848
+ strokeWidth: 2,
5849
+ type: "monotone"
5850
+ }
5851
+ )
5852
+ ] })
5853
+ }
5854
+ )
5855
+ }
5856
+ );
5857
+ }
5858
+
5859
+ // src/components/AdsStackedBarChart/index.tsx
5746
5860
  import * as React47 from "react";
5861
+ import { jsx as jsx55, jsxs as jsxs29 } from "react/jsx-runtime";
5862
+ var DEFAULT_HEIGHT2 = 20;
5863
+ var DEFAULT_SEGMENT_COLOR = "var(--chart-1)";
5864
+ function getSafeHeight2(height) {
5865
+ return Number.isFinite(height) && height && height > 0 ? height : DEFAULT_HEIGHT2;
5866
+ }
5867
+ function formatPercentage(percentage) {
5868
+ return `${Number(percentage.toFixed(2))}%`;
5869
+ }
5870
+ function AdsStackedBarChart({
5871
+ ariaLabel,
5872
+ className,
5873
+ height,
5874
+ segments
5875
+ }) {
5876
+ const descriptionId = React47.useId();
5877
+ const validSegments = segments.reduce((items, segment, index) => {
5878
+ const value = Number.isFinite(segment.value) ? Math.max(segment.value, 0) : 0;
5879
+ if (value > 0) {
5880
+ items.push({
5881
+ color: segment.color ?? DEFAULT_SEGMENT_COLOR,
5882
+ label: segment.label ?? `Segment ${index + 1}`,
5883
+ value
5884
+ });
5885
+ }
5886
+ return items;
5887
+ }, []);
5888
+ const normalizationBase = validSegments.reduce(
5889
+ (maximum, segment) => Math.max(maximum, segment.value),
5890
+ 0
5891
+ );
5892
+ const normalizedTotal = normalizationBase > 0 ? validSegments.reduce((sum, segment) => sum + segment.value / normalizationBase, 0) : 0;
5893
+ const hasData = normalizedTotal > 0 && Number.isFinite(normalizedTotal);
5894
+ const getPercentage = (value) => value / normalizationBase / normalizedTotal * 100;
5895
+ const summary = hasData ? validSegments.map((segment) => `${segment.label}: ${formatPercentage(getPercentage(segment.value))}`).join(", ") : "No data";
5896
+ return /* @__PURE__ */ jsxs29(
5897
+ "div",
5898
+ {
5899
+ "aria-label": ariaLabel ?? summary,
5900
+ "aria-describedby": ariaLabel ? descriptionId : void 0,
5901
+ className: cn("overflow-hidden rounded-full bg-muted", className),
5902
+ "data-testid": "ads-stacked-bar-chart",
5903
+ role: "img",
5904
+ style: { height: getSafeHeight2(height) },
5905
+ children: [
5906
+ ariaLabel && /* @__PURE__ */ jsx55("span", { className: "sr-only", id: descriptionId, children: summary }),
5907
+ hasData && /* @__PURE__ */ jsx55("div", { "aria-hidden": "true", className: "flex size-full", children: validSegments.map((segment, index) => {
5908
+ const percentage = getPercentage(segment.value);
5909
+ return /* @__PURE__ */ jsx55(
5910
+ "div",
5911
+ {
5912
+ "data-testid": "ads-stacked-bar-chart-segment",
5913
+ style: { backgroundColor: segment.color, width: `${percentage}%` }
5914
+ },
5915
+ `${segment.label}-${index}`
5916
+ );
5917
+ }) })
5918
+ ]
5919
+ }
5920
+ );
5921
+ }
5922
+
5923
+ // src/components/AdsBarChart/index.tsx
5924
+ import { Bar, BarChart, Cell, XAxis as XAxis2 } from "recharts";
5925
+ import { jsx as jsx56, jsxs as jsxs30 } from "react/jsx-runtime";
5926
+ var DEFAULT_HEIGHT3 = 160;
5927
+ var DEFAULT_HIGHLIGHT_COLOR = "var(--chart-2)";
5928
+ var DEFAULT_RADIUS = 4;
5929
+ function getSafeHeight3(height) {
5930
+ return Number.isFinite(height) && height && height > 0 ? height : DEFAULT_HEIGHT3;
5931
+ }
5932
+ function getSafeRadius(radius) {
5933
+ return Number.isFinite(radius) && radius !== void 0 && radius >= 0 ? radius : DEFAULT_RADIUS;
5934
+ }
5935
+ function getSafeValue2(value) {
5936
+ return typeof value === "number" && Number.isFinite(value) ? Math.max(value, 0) : 0;
5937
+ }
5938
+ function AdsBarChart({
5939
+ ariaLabel,
5940
+ barRadius,
5941
+ className,
5942
+ color = "var(--chart-1)",
5943
+ data,
5944
+ dataKey,
5945
+ height,
5946
+ highlightColor,
5947
+ highlightIndex,
5948
+ xKey
5949
+ }) {
5950
+ const chartData = data.map((datum) => ({
5951
+ ...datum,
5952
+ [xKey]: datum[xKey],
5953
+ [dataKey]: getSafeValue2(datum[dataKey])
5954
+ }));
5955
+ const safeHeight = getSafeHeight3(height);
5956
+ const safeRadius = getSafeRadius(barRadius);
5957
+ const safeHighlightIndex = Number.isInteger(highlightIndex) ? highlightIndex : -1;
5958
+ return /* @__PURE__ */ jsx56(
5959
+ "div",
5960
+ {
5961
+ "aria-label": ariaLabel ?? "Bar chart",
5962
+ className: cn("w-full", className),
5963
+ "data-testid": "ads-bar-chart",
5964
+ role: "img",
5965
+ style: { height: safeHeight },
5966
+ children: /* @__PURE__ */ jsx56(
5967
+ ChartContainer,
5968
+ {
5969
+ "aria-hidden": "true",
5970
+ className: "h-full",
5971
+ config: { value: { color } },
5972
+ height: "100%",
5973
+ children: /* @__PURE__ */ jsxs30(BarChart, { data: chartData, margin: { bottom: 0, left: 0, right: 0, top: 0 }, children: [
5974
+ /* @__PURE__ */ jsx56(XAxis2, { dataKey: xKey, hide: true, type: "category" }),
5975
+ /* @__PURE__ */ jsx56(Bar, { dataKey, fill: "var(--color-value)", isAnimationActive: false, radius: safeRadius, children: chartData.map((_, index) => /* @__PURE__ */ jsx56(
5976
+ Cell,
5977
+ {
5978
+ fill: index === safeHighlightIndex ? highlightColor ?? DEFAULT_HIGHLIGHT_COLOR : "var(--color-value)"
5979
+ },
5980
+ index
5981
+ )) })
5982
+ ] })
5983
+ }
5984
+ )
5985
+ }
5986
+ );
5987
+ }
5988
+
5989
+ // src/components/AdsSlider/index.tsx
5990
+ import * as React49 from "react";
5747
5991
 
5748
5992
  // src/primitives/slider.tsx
5749
- import * as React46 from "react";
5993
+ import * as React48 from "react";
5750
5994
  import * as SliderPrimitive from "@radix-ui/react-slider";
5751
- import { jsx as jsx52, jsxs as jsxs27 } from "react/jsx-runtime";
5752
- var Slider = React46.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs27(
5995
+ import { jsx as jsx57, jsxs as jsxs31 } from "react/jsx-runtime";
5996
+ var Slider = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs31(
5753
5997
  SliderPrimitive.Root,
5754
5998
  {
5755
5999
  ref,
@@ -5759,10 +6003,10 @@ var Slider = React46.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
5759
6003
  ),
5760
6004
  ...props,
5761
6005
  children: [
5762
- /* @__PURE__ */ jsx52(SliderPrimitive.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx52(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
6006
+ /* @__PURE__ */ jsx57(SliderPrimitive.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx57(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
5763
6007
  Array.from({
5764
6008
  length: Array.isArray(props.value) ? props.value.length : Array.isArray(props.defaultValue) ? props.defaultValue.length : 1
5765
- }).map((_, index) => /* @__PURE__ */ jsx52(
6009
+ }).map((_, index) => /* @__PURE__ */ jsx57(
5766
6010
  SliderPrimitive.Thumb,
5767
6011
  {
5768
6012
  className: "block h-5 w-5 rounded-full border border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"
@@ -5775,11 +6019,11 @@ var Slider = React46.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
5775
6019
  Slider.displayName = SliderPrimitive.Root.displayName;
5776
6020
 
5777
6021
  // src/components/AdsSlider/index.tsx
5778
- import { jsx as jsx53, jsxs as jsxs28 } from "react/jsx-runtime";
6022
+ import { jsx as jsx58, jsxs as jsxs32 } from "react/jsx-runtime";
5779
6023
  var sliderBaseClassName = "py-1";
5780
- var Slider2 = React47.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx53(Slider, { className: cn(sliderBaseClassName, className), ref, ...props }));
6024
+ var Slider2 = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx58(Slider, { className: cn(sliderBaseClassName, className), ref, ...props }));
5781
6025
  Slider2.displayName = "Slider";
5782
- var AdsSlider = React47.forwardRef(
6026
+ var AdsSlider = React49.forwardRef(
5783
6027
  ({
5784
6028
  className,
5785
6029
  descriptionPlacement = "above",
@@ -5794,12 +6038,12 @@ var AdsSlider = React47.forwardRef(
5794
6038
  helperText,
5795
6039
  id
5796
6040
  });
5797
- const helperNode = helperText ? /* @__PURE__ */ jsx53(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
5798
- const errorNode = errorText ? /* @__PURE__ */ jsx53(AdsFieldError, { id: description.errorId, children: errorText }) : null;
5799
- return /* @__PURE__ */ jsxs28(AdsFieldItem, { children: [
5800
- label ? /* @__PURE__ */ jsx53(AdsFieldLabel, { children: label }) : null,
6041
+ const helperNode = helperText ? /* @__PURE__ */ jsx58(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
6042
+ const errorNode = errorText ? /* @__PURE__ */ jsx58(AdsFieldError, { id: description.errorId, children: errorText }) : null;
6043
+ return /* @__PURE__ */ jsxs32(AdsFieldItem, { children: [
6044
+ label ? /* @__PURE__ */ jsx58(AdsFieldLabel, { children: label }) : null,
5801
6045
  descriptionPlacement === "above" ? helperNode : null,
5802
- /* @__PURE__ */ jsx53(
6046
+ /* @__PURE__ */ jsx58(
5803
6047
  Slider2,
5804
6048
  {
5805
6049
  "aria-describedby": description.describedBy,
@@ -5816,13 +6060,13 @@ var AdsSlider = React47.forwardRef(
5816
6060
  AdsSlider.displayName = "AdsSlider";
5817
6061
 
5818
6062
  // src/components/AdsSwitch/index.tsx
5819
- import * as React49 from "react";
6063
+ import * as React51 from "react";
5820
6064
 
5821
6065
  // src/primitives/switch.tsx
5822
- import * as React48 from "react";
6066
+ import * as React50 from "react";
5823
6067
  import * as SwitchPrimitives from "@radix-ui/react-switch";
5824
- import { jsx as jsx54 } from "react/jsx-runtime";
5825
- var Switch = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx54(
6068
+ import { jsx as jsx59 } from "react/jsx-runtime";
6069
+ var Switch = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx59(
5826
6070
  SwitchPrimitives.Root,
5827
6071
  {
5828
6072
  className: cn(
@@ -5831,7 +6075,7 @@ var Switch = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
5831
6075
  ),
5832
6076
  ...props,
5833
6077
  ref,
5834
- children: /* @__PURE__ */ jsx54(
6078
+ children: /* @__PURE__ */ jsx59(
5835
6079
  SwitchPrimitives.Thumb,
5836
6080
  {
5837
6081
  className: cn(
@@ -5844,15 +6088,15 @@ var Switch = React48.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
5844
6088
  Switch.displayName = SwitchPrimitives.Root.displayName;
5845
6089
 
5846
6090
  // src/components/AdsSwitch/index.tsx
5847
- import { jsx as jsx55, jsxs as jsxs29 } from "react/jsx-runtime";
6091
+ import { jsx as jsx60, jsxs as jsxs33 } from "react/jsx-runtime";
5848
6092
  var switchBaseClassName = "h-6 w-11 border border-transparent bg-muted shadow-[0px_1px_2px_rgba(0,0,0,0.1)] focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted";
5849
- var Switch2 = React49.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx55(Switch, { className: cn(switchBaseClassName, className), ref, ...props }));
6093
+ var Switch2 = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx60(Switch, { className: cn(switchBaseClassName, className), ref, ...props }));
5850
6094
  Switch2.displayName = "Switch";
5851
- var AdsSwitch = React49.forwardRef(({ className, description, id, label, switchClassName, wrapperClassName, ...props }, ref) => {
5852
- const generatedId = React49.useId();
6095
+ var AdsSwitch = React51.forwardRef(({ className, description, id, label, switchClassName, wrapperClassName, ...props }, ref) => {
6096
+ const generatedId = React51.useId();
5853
6097
  const inputId = id ?? generatedId;
5854
6098
  if (!label) {
5855
- return /* @__PURE__ */ jsx55(
6099
+ return /* @__PURE__ */ jsx60(
5856
6100
  Switch2,
5857
6101
  {
5858
6102
  className: cn(className, switchClassName),
@@ -5862,12 +6106,12 @@ var AdsSwitch = React49.forwardRef(({ className, description, id, label, switchC
5862
6106
  }
5863
6107
  );
5864
6108
  }
5865
- return /* @__PURE__ */ jsx55("label", { className: cn("block w-full cursor-pointer", wrapperClassName), htmlFor: inputId, children: /* @__PURE__ */ jsxs29("div", { className: "flex w-full items-start gap-3", children: [
5866
- /* @__PURE__ */ jsxs29("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5 pt-0.5", children: [
5867
- /* @__PURE__ */ jsx55("div", { className: "text-sm font-medium leading-5 text-foreground", children: label }),
5868
- description ? /* @__PURE__ */ jsx55(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
6109
+ return /* @__PURE__ */ jsx60("label", { className: cn("block w-full cursor-pointer", wrapperClassName), htmlFor: inputId, children: /* @__PURE__ */ jsxs33("div", { className: "flex w-full items-start gap-3", children: [
6110
+ /* @__PURE__ */ jsxs33("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5 pt-0.5", children: [
6111
+ /* @__PURE__ */ jsx60("div", { className: "text-sm font-medium leading-5 text-foreground", children: label }),
6112
+ description ? /* @__PURE__ */ jsx60(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
5869
6113
  ] }),
5870
- /* @__PURE__ */ jsx55("div", { className: "shrink-0", children: /* @__PURE__ */ jsx55(
6114
+ /* @__PURE__ */ jsx60("div", { className: "shrink-0", children: /* @__PURE__ */ jsx60(
5871
6115
  Switch2,
5872
6116
  {
5873
6117
  className: cn(className, switchClassName),
@@ -5881,14 +6125,14 @@ var AdsSwitch = React49.forwardRef(({ className, description, id, label, switchC
5881
6125
  AdsSwitch.displayName = "AdsSwitch";
5882
6126
 
5883
6127
  // src/components/AdsTabs/index.tsx
5884
- import * as React51 from "react";
6128
+ import * as React53 from "react";
5885
6129
 
5886
6130
  // src/primitives/tabs.tsx
5887
- import * as React50 from "react";
6131
+ import * as React52 from "react";
5888
6132
  import * as TabsPrimitive from "@radix-ui/react-tabs";
5889
- import { jsx as jsx56 } from "react/jsx-runtime";
6133
+ import { jsx as jsx61 } from "react/jsx-runtime";
5890
6134
  var Tabs = TabsPrimitive.Root;
5891
- var TabsList = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx56(
6135
+ var TabsList = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx61(
5892
6136
  TabsPrimitive.List,
5893
6137
  {
5894
6138
  className: cn("inline-flex items-center", className),
@@ -5897,7 +6141,7 @@ var TabsList = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__
5897
6141
  }
5898
6142
  ));
5899
6143
  TabsList.displayName = TabsPrimitive.List.displayName;
5900
- var TabsTrigger = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx56(
6144
+ var TabsTrigger = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx61(
5901
6145
  TabsPrimitive.Trigger,
5902
6146
  {
5903
6147
  className: cn(
@@ -5909,7 +6153,7 @@ var TabsTrigger = React50.forwardRef(({ className, ...props }, ref) => /* @__PUR
5909
6153
  }
5910
6154
  ));
5911
6155
  TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
5912
- var TabsContent = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx56(
6156
+ var TabsContent = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx61(
5913
6157
  TabsPrimitive.Content,
5914
6158
  {
5915
6159
  className: cn("focus-visible:outline-none", className),
@@ -5920,9 +6164,9 @@ var TabsContent = React50.forwardRef(({ className, ...props }, ref) => /* @__PUR
5920
6164
  TabsContent.displayName = TabsPrimitive.Content.displayName;
5921
6165
 
5922
6166
  // src/components/AdsTabs/index.tsx
5923
- import { jsx as jsx57 } from "react/jsx-runtime";
6167
+ import { jsx as jsx62 } from "react/jsx-runtime";
5924
6168
  var AdsTabs = Tabs;
5925
- var AdsTabsList = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx57(
6169
+ var AdsTabsList = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx62(
5926
6170
  TabsList,
5927
6171
  {
5928
6172
  className: cn(
@@ -5934,7 +6178,7 @@ var AdsTabsList = React51.forwardRef(({ className, ...props }, ref) => /* @__PUR
5934
6178
  }
5935
6179
  ));
5936
6180
  AdsTabsList.displayName = "AdsTabsList";
5937
- var AdsTabsTrigger = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx57(
6181
+ var AdsTabsTrigger = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx62(
5938
6182
  TabsTrigger,
5939
6183
  {
5940
6184
  className: cn(
@@ -5946,7 +6190,7 @@ var AdsTabsTrigger = React51.forwardRef(({ className, ...props }, ref) => /* @__
5946
6190
  }
5947
6191
  ));
5948
6192
  AdsTabsTrigger.displayName = "AdsTabsTrigger";
5949
- var AdsTabsContent = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx57(
6193
+ var AdsTabsContent = React53.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx62(
5950
6194
  TabsContent,
5951
6195
  {
5952
6196
  className: cn(
@@ -5960,13 +6204,13 @@ var AdsTabsContent = React51.forwardRef(({ className, ...props }, ref) => /* @__
5960
6204
  AdsTabsContent.displayName = "AdsTabsContent";
5961
6205
 
5962
6206
  // src/components/AdsToggle/index.tsx
5963
- import * as React53 from "react";
6207
+ import * as React55 from "react";
5964
6208
 
5965
6209
  // src/primitives/toggle.tsx
5966
- import * as React52 from "react";
6210
+ import * as React54 from "react";
5967
6211
  import * as TogglePrimitive from "@radix-ui/react-toggle";
5968
- import { jsx as jsx58 } from "react/jsx-runtime";
5969
- var Toggle = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx58(
6212
+ import { jsx as jsx63 } from "react/jsx-runtime";
6213
+ var Toggle = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx63(
5970
6214
  TogglePrimitive.Root,
5971
6215
  {
5972
6216
  className: cn(
@@ -5980,7 +6224,7 @@ var Toggle = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
5980
6224
  Toggle.displayName = TogglePrimitive.Root.displayName;
5981
6225
 
5982
6226
  // src/components/AdsToggle/index.tsx
5983
- import { jsx as jsx59 } from "react/jsx-runtime";
6227
+ import { jsx as jsx64 } from "react/jsx-runtime";
5984
6228
  var sizeClassName3 = {
5985
6229
  sm: "!h-8 px-[6px] text-sm",
5986
6230
  md: "!h-9 px-md text-sm",
@@ -5995,10 +6239,10 @@ var variantClassName = {
5995
6239
  default: "border border-transparent bg-transparent text-foreground shadow-none hover:bg-muted/70 data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]",
5996
6240
  outline: "border border-border bg-transparent text-foreground shadow-none hover:bg-muted/70 data-[state=on]:border-transparent data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]"
5997
6241
  };
5998
- var AdsToggle = React53.forwardRef(({ children, className, size = "md", variant = "default", ...props }, ref) => {
5999
- const childCount = React53.Children.count(children);
6000
- const isIconOnly = childCount === 1 && React53.isValidElement(children);
6001
- return /* @__PURE__ */ jsx59(
6242
+ var AdsToggle = React55.forwardRef(({ children, className, size = "md", variant = "default", ...props }, ref) => {
6243
+ const childCount = React55.Children.count(children);
6244
+ const isIconOnly = childCount === 1 && React55.isValidElement(children);
6245
+ return /* @__PURE__ */ jsx64(
6002
6246
  Toggle,
6003
6247
  {
6004
6248
  className: cn(
@@ -6017,13 +6261,13 @@ var AdsToggle = React53.forwardRef(({ children, className, size = "md", variant
6017
6261
  AdsToggle.displayName = "AdsToggle";
6018
6262
 
6019
6263
  // src/components/AdsToggleGroup/index.tsx
6020
- import * as React55 from "react";
6264
+ import * as React57 from "react";
6021
6265
 
6022
6266
  // src/primitives/toggle-group.tsx
6023
- import * as React54 from "react";
6267
+ import * as React56 from "react";
6024
6268
  import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
6025
- import { jsx as jsx60 } from "react/jsx-runtime";
6026
- var ToggleGroup = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx60(
6269
+ import { jsx as jsx65 } from "react/jsx-runtime";
6270
+ var ToggleGroup = React56.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx65(
6027
6271
  ToggleGroupPrimitive.Root,
6028
6272
  {
6029
6273
  className: cn("inline-flex items-center justify-start", className),
@@ -6032,7 +6276,7 @@ var ToggleGroup = React54.forwardRef(({ className, ...props }, ref) => /* @__PUR
6032
6276
  }
6033
6277
  ));
6034
6278
  ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
6035
- var ToggleGroupItem = React54.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx60(
6279
+ var ToggleGroupItem = React56.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx65(
6036
6280
  ToggleGroupPrimitive.Item,
6037
6281
  {
6038
6282
  className: cn(
@@ -6046,7 +6290,7 @@ var ToggleGroupItem = React54.forwardRef(({ className, ...props }, ref) => /* @_
6046
6290
  ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
6047
6291
 
6048
6292
  // src/components/AdsToggleGroup/index.tsx
6049
- import { jsx as jsx61 } from "react/jsx-runtime";
6293
+ import { jsx as jsx66 } from "react/jsx-runtime";
6050
6294
  var sizeClassName4 = {
6051
6295
  sm: "h-8 min-w-7 px-[6px] text-sm",
6052
6296
  md: "h-9 min-w-[34px] px-md text-sm",
@@ -6056,8 +6300,8 @@ var variantClassName2 = {
6056
6300
  default: "border-transparent bg-transparent text-foreground hover:bg-muted/70 data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]",
6057
6301
  outline: "border border-border bg-transparent text-foreground hover:bg-muted/70 data-[state=on]:border-transparent data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]"
6058
6302
  };
6059
- var AdsToggleGroupContext = React55.createContext(null);
6060
- var AdsToggleGroup = React55.forwardRef(
6303
+ var AdsToggleGroupContext = React57.createContext(null);
6304
+ var AdsToggleGroup = React57.forwardRef(
6061
6305
  ({
6062
6306
  children,
6063
6307
  className,
@@ -6065,7 +6309,7 @@ var AdsToggleGroup = React55.forwardRef(
6065
6309
  size = "md",
6066
6310
  variant = "default",
6067
6311
  ...props
6068
- }, ref) => /* @__PURE__ */ jsx61(AdsToggleGroupContext.Provider, { value: { orientation, size, variant }, children: /* @__PURE__ */ jsx61(
6312
+ }, ref) => /* @__PURE__ */ jsx66(AdsToggleGroupContext.Provider, { value: { orientation, size, variant }, children: /* @__PURE__ */ jsx66(
6069
6313
  ToggleGroup,
6070
6314
  {
6071
6315
  className: cn(
@@ -6081,12 +6325,12 @@ var AdsToggleGroup = React55.forwardRef(
6081
6325
  ) })
6082
6326
  );
6083
6327
  AdsToggleGroup.displayName = "AdsToggleGroup";
6084
- var AdsToggleGroupItem = React55.forwardRef(({ className, size, variant, ...props }, ref) => {
6085
- const context = React55.useContext(AdsToggleGroupContext);
6328
+ var AdsToggleGroupItem = React57.forwardRef(({ className, size, variant, ...props }, ref) => {
6329
+ const context = React57.useContext(AdsToggleGroupContext);
6086
6330
  const resolvedOrientation = context?.orientation ?? "horizontal";
6087
6331
  const resolvedSize = size ?? context?.size ?? "md";
6088
6332
  const resolvedVariant = variant ?? context?.variant ?? "default";
6089
- return /* @__PURE__ */ jsx61(
6333
+ return /* @__PURE__ */ jsx66(
6090
6334
  ToggleGroupItem,
6091
6335
  {
6092
6336
  className: cn(
@@ -6104,10 +6348,10 @@ var AdsToggleGroupItem = React55.forwardRef(({ className, size, variant, ...prop
6104
6348
  AdsToggleGroupItem.displayName = "AdsToggleGroupItem";
6105
6349
 
6106
6350
  // src/components/AdsTextarea/index.tsx
6107
- import * as React56 from "react";
6108
- import { jsx as jsx62, jsxs as jsxs30 } from "react/jsx-runtime";
6109
- 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";
6110
- var AdsTextarea = React56.forwardRef(
6351
+ import * as React58 from "react";
6352
+ import { jsx as jsx67, jsxs as jsxs34 } from "react/jsx-runtime";
6353
+ 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";
6354
+ var AdsTextarea = React58.forwardRef(
6111
6355
  ({
6112
6356
  action,
6113
6357
  className,
@@ -6126,12 +6370,12 @@ var AdsTextarea = React56.forwardRef(
6126
6370
  helperText,
6127
6371
  id
6128
6372
  });
6129
- const helperNode = helperText ? /* @__PURE__ */ jsx62(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
6130
- const errorNode = errorText ? /* @__PURE__ */ jsx62(AdsFieldError, { id: description.errorId, children: errorText }) : null;
6131
- return /* @__PURE__ */ jsxs30(AdsFieldItem, { children: [
6132
- label ? /* @__PURE__ */ jsx62(AdsFieldLabel, { htmlFor: description.inputId, children: label }) : null,
6373
+ const helperNode = helperText ? /* @__PURE__ */ jsx67(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
6374
+ const errorNode = errorText ? /* @__PURE__ */ jsx67(AdsFieldError, { id: description.errorId, children: errorText }) : null;
6375
+ return /* @__PURE__ */ jsxs34(AdsFieldItem, { children: [
6376
+ label ? /* @__PURE__ */ jsx67(AdsFieldLabel, { htmlFor: description.inputId, children: label }) : null,
6133
6377
  descriptionPlacement === "above" ? helperNode : null,
6134
- /* @__PURE__ */ jsx62(
6378
+ /* @__PURE__ */ jsx67(
6135
6379
  Textarea,
6136
6380
  {
6137
6381
  "aria-describedby": description.describedBy,
@@ -6149,7 +6393,7 @@ var AdsTextarea = React56.forwardRef(
6149
6393
  ...props
6150
6394
  }
6151
6395
  ),
6152
- action ? /* @__PURE__ */ jsx62("div", { className: "w-full [&>*]:w-full", children: action }) : null,
6396
+ action ? /* @__PURE__ */ jsx67("div", { className: "w-full [&>*]:w-full", children: action }) : null,
6153
6397
  descriptionPlacement === "below" ? helperNode : null,
6154
6398
  errorNode
6155
6399
  ] });
@@ -6158,17 +6402,17 @@ var AdsTextarea = React56.forwardRef(
6158
6402
  AdsTextarea.displayName = "AdsTextarea";
6159
6403
 
6160
6404
  // src/components/AdsTooltip/index.tsx
6161
- import * as React58 from "react";
6405
+ import * as React60 from "react";
6162
6406
 
6163
6407
  // src/primitives/tooltip.tsx
6164
- import * as React57 from "react";
6408
+ import * as React59 from "react";
6165
6409
  import * as TooltipPrimitive from "@radix-ui/react-tooltip";
6166
- import { jsx as jsx63 } from "react/jsx-runtime";
6410
+ import { jsx as jsx68 } from "react/jsx-runtime";
6167
6411
  var TooltipProvider = TooltipPrimitive.Provider;
6168
6412
  var Tooltip = TooltipPrimitive.Root;
6169
6413
  var TooltipTrigger = TooltipPrimitive.Trigger;
6170
6414
  var TooltipArrow = TooltipPrimitive.Arrow;
6171
- var TooltipContent = React57.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx63(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx63(
6415
+ var TooltipContent = React59.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx68(TooltipPrimitive.Portal, { children: /* @__PURE__ */ jsx68(
6172
6416
  TooltipPrimitive.Content,
6173
6417
  {
6174
6418
  className: cn(
@@ -6183,12 +6427,12 @@ var TooltipContent = React57.forwardRef(({ className, sideOffset = 4, ...props }
6183
6427
  TooltipContent.displayName = TooltipPrimitive.Content.displayName;
6184
6428
 
6185
6429
  // src/components/AdsTooltip/index.tsx
6186
- import { jsx as jsx64 } from "react/jsx-runtime";
6430
+ import { jsx as jsx69 } from "react/jsx-runtime";
6187
6431
  var tooltipContentClassName = "z-50 rounded-[6px] border-0 bg-[#844fff] px-3 py-2 text-sm font-normal leading-5 text-[#fdfdfd] shadow-[0px_8px_24px_rgba(0,0,0,0.22)]";
6188
6432
  var AdsTooltipProvider = TooltipProvider;
6189
6433
  var AdsTooltip = Tooltip;
6190
6434
  var AdsTooltipTrigger = TooltipTrigger;
6191
- var AdsTooltipContent = React58.forwardRef(({ align = "center", className, sideOffset = 10, ...props }, ref) => /* @__PURE__ */ jsx64(
6435
+ var AdsTooltipContent = React60.forwardRef(({ align = "center", className, sideOffset = 10, ...props }, ref) => /* @__PURE__ */ jsx69(
6192
6436
  TooltipContent,
6193
6437
  {
6194
6438
  align,
@@ -6199,7 +6443,7 @@ var AdsTooltipContent = React58.forwardRef(({ align = "center", className, sideO
6199
6443
  }
6200
6444
  ));
6201
6445
  AdsTooltipContent.displayName = "AdsTooltipContent";
6202
- var AdsTooltipArrow = React58.forwardRef(({ className, height = 5, width = 10, ...props }, ref) => /* @__PURE__ */ jsx64(
6446
+ var AdsTooltipArrow = React60.forwardRef(({ className, height = 5, width = 10, ...props }, ref) => /* @__PURE__ */ jsx69(
6203
6447
  TooltipArrow,
6204
6448
  {
6205
6449
  className: cn("fill-[#844fff]", className),
@@ -6212,7 +6456,7 @@ var AdsTooltipArrow = React58.forwardRef(({ className, height = 5, width = 10, .
6212
6456
  AdsTooltipArrow.displayName = "AdsTooltipArrow";
6213
6457
 
6214
6458
  // src/components/AdsToast/index.tsx
6215
- import * as React59 from "react";
6459
+ import * as React61 from "react";
6216
6460
  import {
6217
6461
  CircleCheck as CircleCheck2,
6218
6462
  Info as Info2,
@@ -6221,7 +6465,7 @@ import {
6221
6465
  TriangleAlert as TriangleAlert2
6222
6466
  } from "lucide-react";
6223
6467
  import { Toaster, toast } from "sonner";
6224
- import { jsx as jsx65, jsxs as jsxs31 } from "react/jsx-runtime";
6468
+ import { jsx as jsx70, jsxs as jsxs35 } from "react/jsx-runtime";
6225
6469
  var adsToastIconMap = {
6226
6470
  success: CircleCheck2,
6227
6471
  info: Info2,
@@ -6237,7 +6481,7 @@ function resolveToastIcon(intent, icon) {
6237
6481
  return null;
6238
6482
  }
6239
6483
  const Icon2 = adsToastIconMap[intent];
6240
- return /* @__PURE__ */ jsx65(
6484
+ return /* @__PURE__ */ jsx70(
6241
6485
  Icon2,
6242
6486
  {
6243
6487
  "aria-hidden": true,
@@ -6250,7 +6494,7 @@ function resolveToastIcon(intent, icon) {
6250
6494
  }
6251
6495
  );
6252
6496
  }
6253
- var AdsToast = React59.forwardRef(
6497
+ var AdsToast = React61.forwardRef(
6254
6498
  ({
6255
6499
  action,
6256
6500
  className,
@@ -6261,7 +6505,7 @@ var AdsToast = React59.forwardRef(
6261
6505
  ...props
6262
6506
  }, ref) => {
6263
6507
  const resolvedIcon = resolveToastIcon(intent, icon);
6264
- return /* @__PURE__ */ jsxs31(
6508
+ return /* @__PURE__ */ jsxs35(
6265
6509
  "div",
6266
6510
  {
6267
6511
  className: cn(
@@ -6276,8 +6520,8 @@ var AdsToast = React59.forwardRef(
6276
6520
  ...props,
6277
6521
  children: [
6278
6522
  resolvedIcon,
6279
- /* @__PURE__ */ jsxs31("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
6280
- /* @__PURE__ */ jsx65(
6523
+ /* @__PURE__ */ jsxs35("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
6524
+ /* @__PURE__ */ jsx70(
6281
6525
  "p",
6282
6526
  {
6283
6527
  className: cn(
@@ -6287,7 +6531,7 @@ var AdsToast = React59.forwardRef(
6287
6531
  children: title
6288
6532
  }
6289
6533
  ),
6290
- description ? /* @__PURE__ */ jsx65(
6534
+ description ? /* @__PURE__ */ jsx70(
6291
6535
  "p",
6292
6536
  {
6293
6537
  className: cn(
@@ -6298,7 +6542,7 @@ var AdsToast = React59.forwardRef(
6298
6542
  }
6299
6543
  ) : null
6300
6544
  ] }),
6301
- action ? /* @__PURE__ */ jsx65(
6545
+ action ? /* @__PURE__ */ jsx70(
6302
6546
  AdsButton,
6303
6547
  {
6304
6548
  className: "shrink-0 rounded-radius-lg",
@@ -6324,7 +6568,7 @@ function AdsToaster({
6324
6568
  ...props
6325
6569
  }) {
6326
6570
  const { messages } = useAdsI18n();
6327
- return /* @__PURE__ */ jsx65(
6571
+ return /* @__PURE__ */ jsx70(
6328
6572
  Toaster,
6329
6573
  {
6330
6574
  closeButton: false,
@@ -6342,7 +6586,7 @@ function AdsToaster({
6342
6586
  );
6343
6587
  }
6344
6588
  function toStageNode(intent, title, options) {
6345
- return /* @__PURE__ */ jsx65(
6589
+ return /* @__PURE__ */ jsx70(
6346
6590
  AdsToast,
6347
6591
  {
6348
6592
  action: options?.action,
@@ -6356,7 +6600,7 @@ function toStageNode(intent, title, options) {
6356
6600
  function showAdsToast(intent, title, options) {
6357
6601
  const { action, description, icon, ...toastOptions } = options ?? {};
6358
6602
  return toast.custom(
6359
- (id) => /* @__PURE__ */ jsx65(
6603
+ (id) => /* @__PURE__ */ jsx70(
6360
6604
  AdsToast,
6361
6605
  {
6362
6606
  action: action ? {
@@ -6410,10 +6654,10 @@ var AdsToastManager = Object.assign(
6410
6654
  );
6411
6655
 
6412
6656
  // src/components/AdsDialog/index.tsx
6413
- import * as React60 from "react";
6657
+ import * as React62 from "react";
6414
6658
  import * as DialogPrimitive from "@radix-ui/react-dialog";
6415
6659
  import { X as X2 } from "lucide-react";
6416
- import { jsx as jsx66, jsxs as jsxs32 } from "react/jsx-runtime";
6660
+ import { jsx as jsx71, jsxs as jsxs36 } from "react/jsx-runtime";
6417
6661
  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";
6418
6662
  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%]";
6419
6663
  var bodyClassName = "min-h-0 flex-1 overflow-y-auto overscroll-contain [scrollbar-gutter:stable]";
@@ -6421,7 +6665,7 @@ var closeButtonClassName = "absolute right-xl top-xl inline-flex h-6 w-6 items-c
6421
6665
  var Dialog = DialogPrimitive.Root;
6422
6666
  var DialogTrigger = DialogPrimitive.Trigger;
6423
6667
  var DialogPortal = DialogPrimitive.Portal;
6424
- var DialogOverlay = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6668
+ var DialogOverlay = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6425
6669
  DialogPrimitive.Overlay,
6426
6670
  {
6427
6671
  className: cn(overlayClassName2, className),
@@ -6430,7 +6674,7 @@ var DialogOverlay = React60.forwardRef(({ className, ...props }, ref) => /* @__P
6430
6674
  }
6431
6675
  ));
6432
6676
  DialogOverlay.displayName = "DialogOverlay";
6433
- var DialogClose = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6677
+ var DialogClose = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6434
6678
  DialogPrimitive.Close,
6435
6679
  {
6436
6680
  className: cn(
@@ -6444,8 +6688,8 @@ var DialogClose = React60.forwardRef(({ className, ...props }, ref) => /* @__PUR
6444
6688
  DialogClose.displayName = "DialogClose";
6445
6689
  function flattenDialogChildren(children) {
6446
6690
  const nodes = [];
6447
- React60.Children.forEach(children, (child) => {
6448
- if (React60.isValidElement(child) && child.type === React60.Fragment) {
6691
+ React62.Children.forEach(children, (child) => {
6692
+ if (React62.isValidElement(child) && child.type === React62.Fragment) {
6449
6693
  nodes.push(...flattenDialogChildren(child.props.children));
6450
6694
  return;
6451
6695
  }
@@ -6454,10 +6698,10 @@ function flattenDialogChildren(children) {
6454
6698
  return nodes;
6455
6699
  }
6456
6700
  function isDialogSlotElement(child, component) {
6457
- return React60.isValidElement(child) && child.type === component;
6701
+ return React62.isValidElement(child) && child.type === component;
6458
6702
  }
6459
- var DialogBody = React60.forwardRef(
6460
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6703
+ var DialogBody = React62.forwardRef(
6704
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6461
6705
  "div",
6462
6706
  {
6463
6707
  className: cn(bodyClassName, className),
@@ -6468,7 +6712,7 @@ var DialogBody = React60.forwardRef(
6468
6712
  )
6469
6713
  );
6470
6714
  DialogBody.displayName = "DialogBody";
6471
- var DialogContent = React60.forwardRef(
6715
+ var DialogContent = React62.forwardRef(
6472
6716
  ({
6473
6717
  children,
6474
6718
  className,
@@ -6525,9 +6769,9 @@ var DialogContent = React60.forwardRef(
6525
6769
  const looseBodyNodes = bodyNodes.filter(
6526
6770
  (child) => !isDialogSlotElement(child, DialogBody)
6527
6771
  );
6528
- return /* @__PURE__ */ jsx66(NestedDismissableLayerProvider, { coordinator: parentLayer.coordinator, children: /* @__PURE__ */ jsxs32(DialogPortal, { children: [
6529
- /* @__PURE__ */ jsx66(DialogOverlay, {}),
6530
- /* @__PURE__ */ jsxs32(
6772
+ return /* @__PURE__ */ jsx71(NestedDismissableLayerProvider, { coordinator: parentLayer.coordinator, children: /* @__PURE__ */ jsxs36(DialogPortal, { children: [
6773
+ /* @__PURE__ */ jsx71(DialogOverlay, {}),
6774
+ /* @__PURE__ */ jsxs36(
6531
6775
  DialogPrimitive.Content,
6532
6776
  {
6533
6777
  "data-slot": "ads-dialog-content",
@@ -6543,18 +6787,18 @@ var DialogContent = React60.forwardRef(
6543
6787
  ...props,
6544
6788
  children: [
6545
6789
  headerNode,
6546
- headerNode === null && generatedHeaderNodes.length > 0 ? /* @__PURE__ */ jsx66(DialogHeader, { children: generatedHeaderNodes }) : null,
6790
+ headerNode === null && generatedHeaderNodes.length > 0 ? /* @__PURE__ */ jsx71(DialogHeader, { children: generatedHeaderNodes }) : null,
6547
6791
  explicitBodyNodes.length > 0 ? explicitBodyNodes : null,
6548
- looseBodyNodes.length > 0 ? /* @__PURE__ */ jsx66(DialogBody, { children: looseBodyNodes }) : null,
6792
+ looseBodyNodes.length > 0 ? /* @__PURE__ */ jsx71(DialogBody, { children: looseBodyNodes }) : null,
6549
6793
  footerNode,
6550
- !hideCloseButton ? /* @__PURE__ */ jsxs32(
6794
+ !hideCloseButton ? /* @__PURE__ */ jsxs36(
6551
6795
  DialogPrimitive.Close,
6552
6796
  {
6553
6797
  "aria-label": resolvedCloseLabel,
6554
6798
  className: cn(closeButtonClassName, adsTextColorClassName.card),
6555
6799
  children: [
6556
- /* @__PURE__ */ jsx66(X2, { "aria-hidden": true, className: "h-4 w-4" }),
6557
- /* @__PURE__ */ jsx66("span", { className: "sr-only", children: resolvedCloseLabel })
6800
+ /* @__PURE__ */ jsx71(X2, { "aria-hidden": true, className: "h-4 w-4" }),
6801
+ /* @__PURE__ */ jsx71("span", { className: "sr-only", children: resolvedCloseLabel })
6558
6802
  ]
6559
6803
  }
6560
6804
  ) : null
@@ -6565,8 +6809,8 @@ var DialogContent = React60.forwardRef(
6565
6809
  }
6566
6810
  );
6567
6811
  DialogContent.displayName = "DialogContent";
6568
- var DialogHeader = React60.forwardRef(
6569
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6812
+ var DialogHeader = React62.forwardRef(
6813
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6570
6814
  "div",
6571
6815
  {
6572
6816
  "data-slot": "ads-dialog-header",
@@ -6577,8 +6821,8 @@ var DialogHeader = React60.forwardRef(
6577
6821
  )
6578
6822
  );
6579
6823
  DialogHeader.displayName = "DialogHeader";
6580
- var DialogFooter = React60.forwardRef(
6581
- ({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6824
+ var DialogFooter = React62.forwardRef(
6825
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6582
6826
  "div",
6583
6827
  {
6584
6828
  "data-slot": "ads-dialog-footer",
@@ -6592,7 +6836,7 @@ var DialogFooter = React60.forwardRef(
6592
6836
  )
6593
6837
  );
6594
6838
  DialogFooter.displayName = "DialogFooter";
6595
- var DialogTitle = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6839
+ var DialogTitle = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6596
6840
  DialogPrimitive.Title,
6597
6841
  {
6598
6842
  className: cn(
@@ -6605,7 +6849,7 @@ var DialogTitle = React60.forwardRef(({ className, ...props }, ref) => /* @__PUR
6605
6849
  }
6606
6850
  ));
6607
6851
  DialogTitle.displayName = "DialogTitle";
6608
- var DialogDescription = React60.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx66(
6852
+ var DialogDescription = React62.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx71(
6609
6853
  DialogPrimitive.Description,
6610
6854
  {
6611
6855
  className: cn("text-sm leading-5", adsTextColorClassName.muted, className),
@@ -6628,7 +6872,7 @@ var AdsDialogDescription = DialogDescription;
6628
6872
 
6629
6873
  // src/components/AdsMasonry/index.tsx
6630
6874
  import { Masonry } from "masonic";
6631
- import { jsx as jsx67, jsxs as jsxs33 } from "react/jsx-runtime";
6875
+ import { jsx as jsx72, jsxs as jsxs37 } from "react/jsx-runtime";
6632
6876
  var DEFAULT_COLUMN_WIDTH = 240;
6633
6877
  var DEFAULT_GAP = 16;
6634
6878
  var DEFAULT_ITEM_HEIGHT_ESTIMATE = 280;
@@ -6664,7 +6908,7 @@ function AdsMasonry({
6664
6908
  { length: loadingItemCount },
6665
6909
  (_, index) => index
6666
6910
  );
6667
- return /* @__PURE__ */ jsx67(
6911
+ return /* @__PURE__ */ jsx72(
6668
6912
  "div",
6669
6913
  {
6670
6914
  className: cn(
@@ -6676,20 +6920,20 @@ function AdsMasonry({
6676
6920
  const mediaHeight = LOADING_MEDIA_HEIGHT_PATTERN[index % LOADING_MEDIA_HEIGHT_PATTERN.length];
6677
6921
  const titleWidth = LOADING_TITLE_WIDTH_PATTERN[index % LOADING_TITLE_WIDTH_PATTERN.length];
6678
6922
  const bodyWidth = LOADING_BODY_WIDTH_PATTERN[index % LOADING_BODY_WIDTH_PATTERN.length];
6679
- return /* @__PURE__ */ jsxs33(
6923
+ return /* @__PURE__ */ jsxs37(
6680
6924
  "article",
6681
6925
  {
6682
6926
  className: "overflow-hidden rounded-radius-lg border border-border bg-card shadow-showcase",
6683
6927
  "data-slot": "ads-masonry-loading-card",
6684
6928
  "data-testid": "ads-masonry-loading-card",
6685
6929
  children: [
6686
- /* @__PURE__ */ jsx67(
6930
+ /* @__PURE__ */ jsx72(
6687
6931
  "div",
6688
6932
  {
6689
6933
  className: "border-b border-border/60 bg-surface-inset/50",
6690
6934
  "data-slot": "ads-masonry-skeleton-preview",
6691
6935
  "data-testid": "ads-masonry-skeleton-preview",
6692
- children: /* @__PURE__ */ jsx67(
6936
+ children: /* @__PURE__ */ jsx72(
6693
6937
  AdsSkeleton,
6694
6938
  {
6695
6939
  className: cn("w-full rounded-none", classNames?.skeleton),
@@ -6700,10 +6944,10 @@ function AdsMasonry({
6700
6944
  )
6701
6945
  }
6702
6946
  ),
6703
- /* @__PURE__ */ jsxs33("div", { className: "flex flex-col gap-4 p-lg", children: [
6704
- /* @__PURE__ */ jsxs33("div", { className: "flex items-start justify-between gap-3", children: [
6705
- /* @__PURE__ */ jsxs33("div", { className: "flex-1 space-y-2", children: [
6706
- /* @__PURE__ */ jsx67(
6947
+ /* @__PURE__ */ jsxs37("div", { className: "flex flex-col gap-4 p-lg", children: [
6948
+ /* @__PURE__ */ jsxs37("div", { className: "flex items-start justify-between gap-3", children: [
6949
+ /* @__PURE__ */ jsxs37("div", { className: "flex-1 space-y-2", children: [
6950
+ /* @__PURE__ */ jsx72(
6707
6951
  AdsSkeleton,
6708
6952
  {
6709
6953
  className: cn("h-3 w-16 rounded-full", classNames?.skeleton),
@@ -6711,7 +6955,7 @@ function AdsMasonry({
6711
6955
  "data-testid": "ads-masonry-skeleton"
6712
6956
  }
6713
6957
  ),
6714
- /* @__PURE__ */ jsx67(
6958
+ /* @__PURE__ */ jsx72(
6715
6959
  AdsSkeleton,
6716
6960
  {
6717
6961
  className: cn("h-6 rounded-full", classNames?.skeleton),
@@ -6721,7 +6965,7 @@ function AdsMasonry({
6721
6965
  }
6722
6966
  )
6723
6967
  ] }),
6724
- /* @__PURE__ */ jsx67(
6968
+ /* @__PURE__ */ jsx72(
6725
6969
  AdsSkeleton,
6726
6970
  {
6727
6971
  className: cn("h-6 w-16 rounded-full", classNames?.skeleton),
@@ -6730,7 +6974,7 @@ function AdsMasonry({
6730
6974
  }
6731
6975
  )
6732
6976
  ] }),
6733
- /* @__PURE__ */ jsx67(
6977
+ /* @__PURE__ */ jsx72(
6734
6978
  AdsSkeleton,
6735
6979
  {
6736
6980
  className: cn("h-4 rounded-full", classNames?.skeleton),
@@ -6749,7 +6993,7 @@ function AdsMasonry({
6749
6993
  );
6750
6994
  }
6751
6995
  if (items.length === 0) {
6752
- return emptyState ? /* @__PURE__ */ jsx67(
6996
+ return emptyState ? /* @__PURE__ */ jsx72(
6753
6997
  "div",
6754
6998
  {
6755
6999
  className: cn(rootClassName, classNames?.empty),
@@ -6758,7 +7002,7 @@ function AdsMasonry({
6758
7002
  }
6759
7003
  ) : null;
6760
7004
  }
6761
- return /* @__PURE__ */ jsx67(
7005
+ return /* @__PURE__ */ jsx72(
6762
7006
  Masonry,
6763
7007
  {
6764
7008
  className: rootClassName,
@@ -6770,7 +7014,7 @@ function AdsMasonry({
6770
7014
  maxColumnCount,
6771
7015
  onRender,
6772
7016
  overscanBy,
6773
- render: ({ data, index, width }) => /* @__PURE__ */ jsx67(
7017
+ render: ({ data, index, width }) => /* @__PURE__ */ jsx72(
6774
7018
  "div",
6775
7019
  {
6776
7020
  className: cn("pb-0", classNames?.item, itemClassName),
@@ -6804,6 +7048,7 @@ export {
6804
7048
  AdsAlertDialogTrigger,
6805
7049
  AlertTitle2 as AdsAlertTitle,
6806
7050
  AdsBadge,
7051
+ AdsBarChart,
6807
7052
  AdsBreadcrumb,
6808
7053
  AdsBreadcrumbEllipsis,
6809
7054
  AdsBreadcrumbItem,
@@ -6880,6 +7125,7 @@ export {
6880
7125
  AdsPopoverTitle,
6881
7126
  AdsPopoverTrigger,
6882
7127
  AdsProgress,
7128
+ AdsRadialProgressChart,
6883
7129
  AdsRadioGroup,
6884
7130
  AdsRadioGroupCardOption,
6885
7131
  AdsRadioGroupOption,
@@ -6897,7 +7143,9 @@ export {
6897
7143
  AdsSeparator,
6898
7144
  AdsSkeleton,
6899
7145
  AdsSlider,
7146
+ AdsSparklineChart,
6900
7147
  AdsSpinner,
7148
+ AdsStackedBarChart,
6901
7149
  AdsSwitch,
6902
7150
  AdsTable,
6903
7151
  AdsTableBody,