@actioneer/ads 0.5.7 → 0.5.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/bin/ads-init.mjs +6 -0
  2. package/components/accordion.js +50 -48
  3. package/components/agent-icon.d.ts +12 -0
  4. package/components/agent-icon.js +133 -120
  5. package/components/ai-elements/chain-of-thought.d.ts +1 -1
  6. package/components/ai-elements/chain-of-thought.js +108 -108
  7. package/components/ai-elements/chart.js +16 -14
  8. package/components/ai-elements/inline-citation.js +41 -41
  9. package/components/ai-elements/message.js +4 -4
  10. package/components/ai-elements/queue.js +7 -7
  11. package/components/ai-elements/research-activity.js +114 -114
  12. package/components/ai-elements/shimmer.d.ts +2 -2
  13. package/components/ai-elements/speech-input.js +28 -28
  14. package/components/ai-elements/task-progress.js +26 -16
  15. package/components/ai-elements/task.js +17 -17
  16. package/components/ai-elements/tool.js +6 -6
  17. package/components/ai-elements/transcript.js +6 -5
  18. package/components/ai-elements/voice.js +1 -1
  19. package/components/alert.js +10 -10
  20. package/components/answer-sources.js +1 -1
  21. package/components/answer.js +115 -114
  22. package/components/assistant-ui/action-bar.js +94 -48
  23. package/components/assistant-ui/attachment.js +103 -75
  24. package/components/assistant-ui/badge.d.ts +1 -1
  25. package/components/assistant-ui/badge.js +17 -17
  26. package/components/assistant-ui/chain-of-thought.d.ts +1 -1
  27. package/components/assistant-ui/composer-add-context.js +9 -9
  28. package/components/assistant-ui/composer-deep-research.js +5 -5
  29. package/components/assistant-ui/composer-harness.js +11 -9
  30. package/components/assistant-ui/composer-trigger-popover.js +45 -34
  31. package/components/assistant-ui/composer.js +59 -59
  32. package/components/assistant-ui/error.js +14 -14
  33. package/components/assistant-ui/file.d.ts +1 -1
  34. package/components/assistant-ui/image.d.ts +1 -1
  35. package/components/assistant-ui/image.js +113 -103
  36. package/components/assistant-ui/markdown-text.js +18 -18
  37. package/components/assistant-ui/message.js +46 -45
  38. package/components/assistant-ui/quote.js +1 -1
  39. package/components/assistant-ui/reasoning.d.ts +1 -1
  40. package/components/assistant-ui/reasoning.js +66 -77
  41. package/components/assistant-ui/suggestions.js +4 -4
  42. package/components/assistant-ui/thread.js +22 -22
  43. package/components/assistant-ui/tool-fallback.js +60 -63
  44. package/components/assistant-ui/tool-group.d.ts +1 -1
  45. package/components/assistant-ui/tool-group.js +36 -42
  46. package/components/audio-waveform.js +25 -24
  47. package/components/autocomplete.d.ts +1 -0
  48. package/components/autocomplete.js +45 -43
  49. package/components/avatar.d.ts +1 -0
  50. package/components/avatar.js +27 -26
  51. package/components/badge.d.ts +1 -1
  52. package/components/breadcrumbs.d.ts +2 -0
  53. package/components/breadcrumbs.js +52 -50
  54. package/components/button.d.ts +2 -2
  55. package/components/button.js +22 -20
  56. package/components/card.js +8 -8
  57. package/components/carousel.js +105 -104
  58. package/components/chart.d.ts +6 -0
  59. package/components/chart.js +743 -672
  60. package/components/checkbox.js +74 -38
  61. package/components/chip.d.ts +1 -1
  62. package/components/code-block.js +3 -3
  63. package/components/collapsible.js +67 -23
  64. package/components/connector-card.js +6 -6
  65. package/components/drawer.d.ts +18 -11
  66. package/components/drawer.js +81 -78
  67. package/components/dropdown.d.ts +2 -0
  68. package/components/dropdown.js +88 -79
  69. package/components/empty-state.d.ts +1 -1
  70. package/components/empty-state.js +7 -7
  71. package/components/field.d.ts +4 -0
  72. package/components/field.js +45 -34
  73. package/components/file-dropzone.js +12 -12
  74. package/components/index.d.ts +3 -0
  75. package/components/index.js +584 -558
  76. package/components/input-field.js +51 -46
  77. package/components/input.js +20 -20
  78. package/components/link.js +9 -9
  79. package/components/modal.d.ts +5 -1
  80. package/components/modal.js +121 -76
  81. package/components/navbar.d.ts +1 -1
  82. package/components/navbar.js +1 -1
  83. package/components/number-field.js +38 -29
  84. package/components/page-header.js +12 -12
  85. package/components/pagination.js +19 -19
  86. package/components/panel.js +2 -2
  87. package/components/pixel-blast-svg.js +3 -3
  88. package/components/pixel-icon.d.ts +4 -0
  89. package/components/pixel-icon.js +210 -164
  90. package/components/popover.d.ts +1 -1
  91. package/components/popover.js +66 -64
  92. package/components/progress-circle.js +36 -32
  93. package/components/progress.js +28 -24
  94. package/components/radio.js +59 -49
  95. package/components/resizable-panel.js +1 -1
  96. package/components/reveal.d.ts +2 -2
  97. package/components/ripple.d.ts +3 -3
  98. package/components/scroll-area.js +17 -16
  99. package/components/segmented.d.ts +1 -0
  100. package/components/segmented.js +39 -36
  101. package/components/select.d.ts +7 -0
  102. package/components/select.js +186 -137
  103. package/components/setting-row.js +45 -42
  104. package/components/sidebar.js +131 -127
  105. package/components/skeleton.js +5 -5
  106. package/components/spinner.d.ts +13 -4
  107. package/components/spinner.js +42 -42
  108. package/components/stepper.js +21 -21
  109. package/components/switch.js +41 -39
  110. package/components/table.d.ts +16 -0
  111. package/components/table.js +393 -260
  112. package/components/tabs.js +149 -137
  113. package/components/toast.js +66 -66
  114. package/components/tooltip.js +2 -2
  115. package/components/tree.js +62 -51
  116. package/components/typography.d.ts +2 -1
  117. package/components/typography.js +33 -32
  118. package/components/ui/button.d.ts +2 -2
  119. package/components/ui/button.js +19 -19
  120. package/components/ui/collapsible.d.ts +1 -5
  121. package/components/ui/dialog.d.ts +3 -3
  122. package/components/ui/dialog.js +95 -58
  123. package/components/ui/tooltip.d.ts +2 -2
  124. package/components/ui/tooltip.js +67 -33
  125. package/components/viz-charts.js +95 -95
  126. package/demo/components/add-to-artifact.js +363 -0
  127. package/demo/lib/artifact-library.js +142 -0
  128. package/demo/lib/artifact-pin-guard.js +12 -0
  129. package/fonts/aribau-grotesk-medium.woff2 +0 -0
  130. package/fonts/aribau-grotesk-regular.woff2 +0 -0
  131. package/fonts.css +11 -11
  132. package/hooks/agents-ui/use-agent-audio-visualizer-aura.js +17 -16
  133. package/hooks/agents-ui/use-agent-audio-visualizer-wave.js +21 -20
  134. package/lib/icons.d.ts +24 -0
  135. package/lib/icons.js +114 -108
  136. package/lib/motion.d.ts +42 -39
  137. package/lib/motion.js +112 -52
  138. package/lib/spinner-mark.d.ts +9 -0
  139. package/lib/spinner-mark.js +98 -0
  140. package/llms.txt +53 -19
  141. package/manifest.json +258 -36
  142. package/package.json +1 -1
  143. package/styles.css +143 -124
  144. package/theme.css +90 -93
  145. package/components/ui/collapsible.js +0 -35
  146. package/fonts/aribau-grotesk-500.otf +0 -0
  147. package/fonts/aribau-grotesk-600.woff2 +0 -0
@@ -1,10 +1,10 @@
1
1
  "use client";
2
- import { jsx as d, jsxs as A } from "react/jsx-runtime";
3
- import * as a from "react";
2
+ import { jsx as p, jsxs as T } from "react/jsx-runtime";
3
+ import * as o from "react";
4
4
  import { cn as u } from "../lib/cn.js";
5
- import { Checkbox as j } from "./checkbox.js";
6
- import { ChevronUp as ie, ChevronDown as ce, SortIcon as ue } from "../lib/icons.js";
7
- const W = (e) => e === "center" ? "text-center" : e === "right" ? "text-right" : "text-left", X = (e, t = !1) => e === "left" ? u(
5
+ import { Checkbox as re } from "./checkbox.js";
6
+ import { ChevronUp as ge, ChevronDown as he, SortIcon as we } from "../lib/icons.js";
7
+ const ne = (e) => e === "center" ? "text-center" : e === "right" ? "text-right" : "text-left", ae = (e, t = !1) => e === "left" ? u(
8
8
  "sticky left-0 z-10",
9
9
  // Scroll-aware: the smudge only appears once content is actually
10
10
  // hidden behind the pinned column (nothing to scroll back to at the
@@ -15,13 +15,13 @@ const W = (e) => e === "center" ? "text-center" : e === "right" ? "text-right" :
15
15
  // Backward-compatible fallback. Action columns should opt into the
16
16
  // Table-level elevation so one shadow spans the complete column.
17
17
  !t && "group-data-[scroll-right=true]/table-shell:shadow-table-smudge-right"
18
- ) : void 0, G = (e) => e === "right" ? u(
19
- "group-first/row:before:pointer-events-none group-first/row:before:absolute group-first/row:before:right-0 group-first/row:before:top-0 group-first/row:before:size-1 group-first/row:before:content-[''] group-first/row:before:[background:radial-gradient(circle_at_0%_100%,transparent_3.5px,var(--table-shell)_4px)]",
20
- "group-last/row:after:pointer-events-none group-last/row:after:absolute group-last/row:after:right-0 group-last/row:after:bottom-0 group-last/row:after:size-1 group-last/row:after:content-[''] group-last/row:after:[background:radial-gradient(circle_at_0%_0%,transparent_3.5px,var(--table-shell)_4px)]"
18
+ ) : void 0, se = (e) => e === "right" ? u(
19
+ "group-first/row:before:pointer-events-none group-first/row:before:absolute group-first/row:before:right-0 group-first/row:before:top-0 group-first/row:before:size-3 group-first/row:before:content-[''] group-first/row:before:[background:radial-gradient(circle_at_0%_100%,transparent_11.5px,var(--table-shell)_12px)]",
20
+ "group-last/row:after:pointer-events-none group-last/row:after:absolute group-last/row:after:right-0 group-last/row:after:bottom-0 group-last/row:after:size-3 group-last/row:after:content-[''] group-last/row:after:[background:radial-gradient(circle_at_0%_0%,transparent_11.5px,var(--table-shell)_12px)]"
21
21
  ) : u(
22
- "group-first/row:before:pointer-events-none group-first/row:before:absolute group-first/row:before:left-0 group-first/row:before:top-0 group-first/row:before:size-1 group-first/row:before:content-[''] group-first/row:before:[background:radial-gradient(circle_at_100%_100%,transparent_3.5px,var(--table-shell)_4px)]",
23
- "group-last/row:after:pointer-events-none group-last/row:after:absolute group-last/row:after:left-0 group-last/row:after:bottom-0 group-last/row:after:size-1 group-last/row:after:content-[''] group-last/row:after:[background:radial-gradient(circle_at_100%_0%,transparent_3.5px,var(--table-shell)_4px)]"
24
- ), Q = (e) => u(
22
+ "group-first/row:before:pointer-events-none group-first/row:before:absolute group-first/row:before:left-0 group-first/row:before:top-0 group-first/row:before:size-3 group-first/row:before:content-[''] group-first/row:before:[background:radial-gradient(circle_at_100%_100%,transparent_11.5px,var(--table-shell)_12px)]",
23
+ "group-last/row:after:pointer-events-none group-last/row:after:absolute group-last/row:after:left-0 group-last/row:after:bottom-0 group-last/row:after:size-3 group-last/row:after:content-[''] group-last/row:after:[background:radial-gradient(circle_at_100%_0%,transparent_11.5px,var(--table-shell)_12px)]"
24
+ ), le = (e) => u(
25
25
  "bg-card align-middle transition-colors",
26
26
  // Row separators — functional hairline, none under the last row.
27
27
  "border-b border-border group-last/row:border-b-0",
@@ -33,45 +33,45 @@ const W = (e) => e === "center" ? "text-center" : e === "right" ? "text-right" :
33
33
  "group-hover/row:bg-(--table-row-hover) group-focus-within/row:bg-(--table-row-hover)",
34
34
  "group-data-[selected]/row:bg-(--table-row-selected)"
35
35
  )
36
- ), de = u(
37
- "group-first/row:rounded-tl-sm",
38
- "group-last/row:rounded-bl-sm"
39
- ), pe = u(
40
- "group-first/row:first:rounded-tl-sm",
41
- "group-first/row:last:rounded-tr-sm",
42
- "group-last/row:first:rounded-bl-sm",
43
- "group-last/row:last:rounded-br-sm"
44
- ), Y = u(
36
+ ), ve = u(
37
+ "group-first/row:rounded-tl-(--table-card-radius)",
38
+ "group-last/row:rounded-bl-(--table-card-radius)"
39
+ ), ye = u(
40
+ "group-first/row:first:rounded-tl-(--table-card-radius)",
41
+ "group-first/row:last:rounded-tr-(--table-card-radius)",
42
+ "group-last/row:first:rounded-bl-(--table-card-radius)",
43
+ "group-last/row:last:rounded-br-(--table-card-radius)"
44
+ ), ie = u(
45
45
  "after:pointer-events-none after:absolute after:right-0 after:top-1/2",
46
46
  "after:h-4 after:w-px after:-translate-y-1/2 after:rounded-sm",
47
47
  "after:bg-border-strong last:after:hidden"
48
- ), H = "__ads_table_column_", fe = new Intl.Collator(void 0, {
48
+ ), K = "__ads_table_column_", G = 64, xe = new Intl.Collator(void 0, {
49
49
  numeric: !0,
50
50
  sensitivity: "base"
51
51
  });
52
- function z(e) {
52
+ function V(e) {
53
53
  const t = [];
54
- return a.Children.forEach(e, (n) => {
55
- if (a.isValidElement(n) && n.type === a.Fragment) {
56
- t.push(...z(n.props.children));
54
+ return o.Children.forEach(e, (a) => {
55
+ if (o.isValidElement(a) && a.type === o.Fragment) {
56
+ t.push(...V(a.props.children));
57
57
  return;
58
58
  }
59
- t.push(n);
59
+ t.push(a);
60
60
  }), t;
61
61
  }
62
- function D(e) {
62
+ function X(e) {
63
63
  if (e == null || typeof e == "boolean")
64
64
  return "";
65
65
  if (typeof e == "number" || typeof e == "string") return e;
66
66
  if (Array.isArray(e))
67
- return e.map((r) => String(D(r))).join(" ").trim();
68
- if (!a.isValidElement(e)) return "";
67
+ return e.map((n) => String(X(n))).join(" ").trim();
68
+ if (!o.isValidElement(e)) return "";
69
69
  const t = e.props.sortValue;
70
70
  if (typeof t == "string" || typeof t == "number" || t instanceof Date)
71
71
  return t;
72
- const n = D(e.props.children);
73
- if (String(n).trim()) return n;
74
- for (const r of [
72
+ const a = X(e.props.children);
73
+ if (String(a).trim()) return a;
74
+ for (const n of [
75
75
  "value",
76
76
  "label",
77
77
  "status",
@@ -79,12 +79,12 @@ function D(e) {
79
79
  "title",
80
80
  "health"
81
81
  ]) {
82
- const o = e.props[r];
83
- if (typeof o == "string" || typeof o == "number") return o;
82
+ const s = e.props[n];
83
+ if (typeof s == "string" || typeof s == "number") return s;
84
84
  }
85
85
  return "";
86
86
  }
87
- function J(e) {
87
+ function oe(e) {
88
88
  if (e instanceof Date)
89
89
  return { kind: "number", value: e.getTime() };
90
90
  if (typeof e == "number")
@@ -92,199 +92,251 @@ function J(e) {
92
92
  const t = e.trim();
93
93
  if (!t || t === "—" || t === "-")
94
94
  return { kind: "empty", value: "" };
95
- const n = t.replace(/[,\s]/g, "").replace(/^[₹$€£]/, "").replace(/%$/, "");
96
- if (/^[+-]?(?:\d+\.?\d*|\.\d+)$/.test(n))
97
- return { kind: "number", value: Number(n) };
98
- const o = /^\d{4}[-/]\d{1,2}[-/]\d{1,2}/.test(t) || /\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/i.test(t) ? Date.parse(t) : Number.NaN;
99
- return Number.isNaN(o) ? { kind: "text", value: t } : { kind: "number", value: o };
95
+ const a = t.replace(/[,\s]/g, "").replace(/^[₹$€£]/, "").replace(/%$/, "");
96
+ if (/^[+-]?(?:\d+\.?\d*|\.\d+)$/.test(a))
97
+ return { kind: "number", value: Number(a) };
98
+ const s = /^\d{4}[-/]\d{1,2}[-/]\d{1,2}/.test(t) || /\b(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/i.test(t) ? Date.parse(t) : Number.NaN;
99
+ return Number.isNaN(s) ? { kind: "text", value: t } : { kind: "number", value: s };
100
100
  }
101
- function me(e, t, n) {
102
- const r = J(e), o = J(t);
103
- if (r.kind === "empty") return o.kind === "empty" ? 0 : 1;
104
- if (o.kind === "empty") return -1;
105
- const l = r.kind === "number" && o.kind === "number" ? r.value - o.value : fe.compare(String(r.value), String(o.value));
106
- return n === "ascending" ? l : -l;
101
+ function Ce(e, t, a) {
102
+ const n = oe(e), s = oe(t);
103
+ if (n.kind === "empty") return s.kind === "empty" ? 0 : 1;
104
+ if (s.kind === "empty") return -1;
105
+ const i = n.kind === "number" && s.kind === "number" ? n.value - s.value : xe.compare(String(n.value), String(s.value));
106
+ return a === "ascending" ? i : -i;
107
107
  }
108
- const Z = a.createContext(null), V = () => a.useContext(Z), P = a.createContext("body");
109
- function be(e) {
110
- const t = [], r = z(e.props.children).map((o, l) => {
111
- if (!a.isValidElement(o) || o.type !== $)
112
- return o;
113
- let s = 0;
114
- const f = z(o.props.children).map((i) => {
115
- if (!a.isValidElement(i)) return i;
116
- for (; (t[s] ?? 0) > l; )
117
- s += 1;
118
- const S = Math.max(1, Number(i.props.colSpan ?? 1)), h = Math.max(1, Number(i.props.rowSpan ?? 1)), g = s;
119
- for (let x = 0; x < S; x += 1)
120
- t[g + x] = Math.max(
121
- t[g + x] ?? 0,
122
- l + h
108
+ const ce = o.createContext(null), j = () => o.useContext(ce), Q = o.createContext("body");
109
+ function Ne(e) {
110
+ const t = [], n = V(e.props.children).map((s, i) => {
111
+ if (!o.isValidElement(s) || s.type !== Y)
112
+ return s;
113
+ let l = 0;
114
+ const w = V(s.props.children).map((r) => {
115
+ if (!o.isValidElement(r)) return r;
116
+ for (; (t[l] ?? 0) > i; )
117
+ l += 1;
118
+ const E = Math.max(1, Number(r.props.colSpan ?? 1)), x = Math.max(1, Number(r.props.rowSpan ?? 1)), v = l;
119
+ for (let C = 0; C < E; C += 1)
120
+ t[v + C] = Math.max(
121
+ t[v + C] ?? 0,
122
+ i + x
123
123
  );
124
- return s += S, i.type !== re ? i : a.cloneElement(i, { _sortColumnIndex: g });
124
+ return l += E, r.type !== fe ? r : o.cloneElement(r, { _sortColumnIndex: v });
125
125
  });
126
- return a.cloneElement(o, void 0, f);
126
+ return o.cloneElement(s, void 0, w);
127
127
  });
128
- return a.cloneElement(e, void 0, r);
128
+ return o.cloneElement(e, void 0, n);
129
129
  }
130
- function ge(e, t, n) {
131
- const r = z(e.props.children).map((o, l) => {
132
- if (!a.isValidElement(o) || o.type !== $)
133
- return { row: o, index: l, value: "" };
134
- const s = z(o.props.children);
130
+ function ze(e, t, a) {
131
+ const n = V(e.props.children).map((s, i) => {
132
+ if (!o.isValidElement(s) || s.type !== Y)
133
+ return { row: s, index: i, value: "" };
134
+ const l = V(s.props.children);
135
135
  return {
136
- row: o,
137
- index: l,
138
- value: D(s[t])
136
+ row: s,
137
+ index: i,
138
+ value: X(l[t])
139
139
  };
140
140
  });
141
- return r.sort((o, l) => me(o.value, l.value, n) || o.index - l.index), a.cloneElement(
141
+ return n.sort((s, i) => Ce(s.value, i.value, a) || s.index - i.index), o.cloneElement(
142
142
  e,
143
143
  void 0,
144
- r.map(({ row: o }) => o)
144
+ n.map(({ row: s }) => s)
145
145
  );
146
146
  }
147
- function K(e, t) {
148
- const n = t != null && t.column.startsWith(H) ? Number(t.column.slice(H.length)) : Number.NaN;
149
- return a.Children.map(e, (r) => a.isValidElement(r) ? r.type === a.Fragment ? a.cloneElement(
150
- r,
147
+ function ue(e, t) {
148
+ const a = t != null && t.column.startsWith(K) ? Number(t.column.slice(K.length)) : Number.NaN;
149
+ return o.Children.map(e, (n) => o.isValidElement(n) ? n.type === o.Fragment ? o.cloneElement(
150
+ n,
151
151
  void 0,
152
- K(r.props.children, t)
153
- ) : r.type === ee ? be(r) : r.type === te && t && Number.isInteger(n) && n >= 0 ? ge(r, n, t.direction) : r : r);
152
+ ue(n.props.children, t)
153
+ ) : n.type === de ? Ne(n) : n.type === pe && t && Number.isInteger(a) && a >= 0 ? ze(n, a, t.direction) : n : n);
154
154
  }
155
- const he = a.forwardRef(
155
+ const Se = o.forwardRef(
156
156
  ({
157
157
  className: e,
158
158
  wrapperClassName: t,
159
- footer: n,
160
- children: r,
161
- selectionMode: o = "none",
162
- selectedKeys: l,
163
- onSelectionChange: s,
164
- rowKeys: b,
165
- elevatedActionColumn: f = !1,
166
- actionColumnWidth: i = "4rem",
167
- sortDescriptor: S,
168
- onSortChange: h,
169
- allowsSorting: g = !0,
170
- isStatic: x = !1,
171
- ...C
172
- }, _) => {
173
- const w = a.useMemo(() => b ?? [], [b]), v = l === "all", p = v ? null : l ?? /* @__PURE__ */ new Set(), R = a.useCallback(
174
- (c) => v || !!(p != null && p.has(c)),
175
- [v, p]
176
- ), k = w.length > 0 && (v || w.every((c) => p == null ? void 0 : p.has(c))), q = !k && (v || w.some((c) => p == null ? void 0 : p.has(c))), F = a.useCallback(
159
+ footer: a,
160
+ children: n,
161
+ selectionMode: s = "none",
162
+ selectedKeys: i,
163
+ onSelectionChange: l,
164
+ rowKeys: h,
165
+ elevatedActionColumn: w = !1,
166
+ actionColumnWidth: r = "4rem",
167
+ sortDescriptor: E,
168
+ onSortChange: x,
169
+ allowsSorting: v = !0,
170
+ isStatic: C = !1,
171
+ resizableColumns: A = !0,
172
+ maxBodyHeight: z,
173
+ ...W
174
+ }, O) => {
175
+ const N = o.useMemo(() => h ?? [], [h]), y = i === "all", b = y ? null : i ?? /* @__PURE__ */ new Set(), k = o.useCallback(
176
+ (c) => y || !!(b != null && b.has(c)),
177
+ [y, b]
178
+ ), R = N.length > 0 && (y || N.every((c) => b == null ? void 0 : b.has(c))), $ = !R && (y || N.some((c) => b == null ? void 0 : b.has(c))), M = o.useCallback(
177
179
  (c) => {
178
- if (!s) return;
179
- if (o === "single") {
180
- s(R(c) ? /* @__PURE__ */ new Set() : /* @__PURE__ */ new Set([c]));
180
+ if (!l) return;
181
+ if (s === "single") {
182
+ l(k(c) ? /* @__PURE__ */ new Set() : /* @__PURE__ */ new Set([c]));
181
183
  return;
182
184
  }
183
- const m = new Set(v ? w : p ?? /* @__PURE__ */ new Set());
184
- m.has(c) ? m.delete(c) : m.add(c), s(m);
185
+ const m = new Set(y ? N : b ?? /* @__PURE__ */ new Set());
186
+ m.has(c) ? m.delete(c) : m.add(c), l(m);
185
187
  },
186
- [s, o, R, v, w, p]
187
- ), I = a.useCallback(() => {
188
- s && s(k ? /* @__PURE__ */ new Set() : new Set(w));
189
- }, [s, k, w]), [oe, ne] = a.useState(), T = g && !h, y = T ? oe ?? S : S, B = a.useCallback(
188
+ [l, s, k, y, N, b]
189
+ ), H = o.useCallback(() => {
190
+ l && l(R ? /* @__PURE__ */ new Set() : new Set(N));
191
+ }, [l, R, N]), [U, q] = o.useState(), S = v && !x, d = S ? U ?? E : E, f = o.useCallback(
190
192
  (c) => {
191
- if (!g) return;
192
- const m = (y == null ? void 0 : y.column) === c && y.direction === "ascending" ? "descending" : "ascending", N = { column: c, direction: m };
193
- h ? h(N) : ne(N);
193
+ if (!v) return;
194
+ const m = (d == null ? void 0 : d.column) === c && d.direction === "ascending" ? "descending" : "ascending", g = { column: c, direction: m };
195
+ x ? x(g) : q(g);
194
196
  },
195
- [y, g, h]
196
- ), ae = a.useMemo(
197
- () => T ? K(r, y) : r,
198
- [y, T, r]
199
- ), M = a.useRef(null), [L, se] = a.useState({
197
+ [d, v, x]
198
+ ), _ = o.useMemo(
199
+ () => S ? ue(n, d) : n,
200
+ [d, S, n]
201
+ ), D = o.useRef(null), [I, me] = o.useState({
200
202
  left: !1,
201
203
  right: !1
202
- }), E = a.useCallback(() => {
203
- const c = M.current;
204
+ }), F = o.useCallback(() => {
205
+ const c = D.current;
204
206
  if (!c) return;
205
- const m = c.scrollWidth - c.clientWidth, N = c.scrollLeft > 1, U = c.scrollLeft < m - 1;
206
- se(
207
- (O) => O.left === N && O.right === U ? O : { left: N, right: U }
207
+ const m = c.scrollWidth - c.clientWidth, g = c.scrollLeft > 1, L = c.scrollLeft < m - 1;
208
+ me(
209
+ (J) => J.left === g && J.right === L ? J : { left: g, right: L }
208
210
  );
209
211
  }, []);
210
- a.useEffect(() => {
211
- E();
212
- const c = M.current;
212
+ o.useEffect(() => {
213
+ F();
214
+ const c = D.current;
213
215
  if (!c || typeof ResizeObserver > "u") return;
214
- const m = new ResizeObserver(E);
216
+ const m = new ResizeObserver(F);
215
217
  m.observe(c);
216
- const N = c.querySelector("table");
217
- return N && m.observe(N), () => m.disconnect();
218
- }, [E]);
219
- const le = a.useMemo(
218
+ const g = c.querySelector("table");
219
+ return g && m.observe(g), () => m.disconnect();
220
+ }, [F]);
221
+ const [P, B] = o.useState(
222
+ null
223
+ ), Z = o.useCallback(
224
+ (c) => {
225
+ B(
226
+ (m) => m ?? Array.from(
227
+ c.cells,
228
+ (g) => g.getBoundingClientRect().width
229
+ )
230
+ );
231
+ },
232
+ []
233
+ ), ee = o.useCallback(
234
+ (c, m) => {
235
+ B((g) => {
236
+ if (!g) return g;
237
+ const L = [...g];
238
+ return L[c] = Math.max(G, m), L;
239
+ });
240
+ },
241
+ []
242
+ ), te = o.useCallback(
243
+ () => B(null),
244
+ []
245
+ ), be = o.useMemo(
220
246
  () => ({
221
- selectionMode: o,
222
- isSelected: R,
223
- toggleKey: F,
224
- toggleAll: I,
225
- allSelected: k,
226
- someSelected: q,
227
- isStatic: x,
228
- sortDescriptor: y,
229
- requestSort: g ? B : void 0,
230
- automaticSorting: T,
231
- elevatedActionColumn: f
247
+ selectionMode: s,
248
+ isSelected: k,
249
+ toggleKey: M,
250
+ toggleAll: H,
251
+ allSelected: R,
252
+ someSelected: $,
253
+ isStatic: C,
254
+ sortDescriptor: d,
255
+ requestSort: v ? f : void 0,
256
+ automaticSorting: S,
257
+ elevatedActionColumn: w,
258
+ resizableColumns: A,
259
+ columnWidths: P,
260
+ snapshotColumnWidths: Z,
261
+ setColumnWidth: ee,
262
+ resetColumnWidths: te,
263
+ stickyHeader: z != null
232
264
  }),
233
265
  [
234
- o,
235
- R,
236
- F,
237
- I,
266
+ s,
238
267
  k,
239
- q,
240
- x,
241
- y,
242
- g,
243
- T,
244
- B,
245
- f
268
+ M,
269
+ H,
270
+ R,
271
+ $,
272
+ C,
273
+ d,
274
+ v,
275
+ S,
276
+ f,
277
+ w,
278
+ A,
279
+ P,
280
+ Z,
281
+ ee,
282
+ te,
283
+ z
246
284
  ]
247
285
  );
248
- return /* @__PURE__ */ d(Z.Provider, { value: le, children: /* @__PURE__ */ A(
286
+ return /* @__PURE__ */ p(ce.Provider, { value: be, children: /* @__PURE__ */ T(
249
287
  "div",
250
288
  {
251
- "data-scroll-left": L.left ? "true" : "false",
252
- "data-scroll-right": L.right ? "true" : "false",
289
+ "data-scroll-left": I.left ? "true" : "false",
290
+ "data-scroll-right": I.right ? "true" : "false",
253
291
  className: u(
254
292
  "group/table-shell overflow-clip rounded-2xl bg-table-shell px-1 pb-1",
293
+ // Concentric inner radius for the white body card: shell radius
294
+ // minus the 4px inset above. Every card corner (cells, viewport,
295
+ // pinned caps) derives from this one value.
296
+ "[--table-card-radius:calc(var(--radius-2xl)-0.25rem)]",
255
297
  t
256
298
  ),
257
299
  children: [
258
- /* @__PURE__ */ A(
300
+ /* @__PURE__ */ T(
259
301
  "div",
260
302
  {
261
303
  className: "relative",
262
- style: f ? {
263
- "--table-action-column-width": i
304
+ style: w ? {
305
+ "--table-action-column-width": r
264
306
  } : void 0,
265
307
  children: [
266
- /* @__PURE__ */ d(
308
+ /* @__PURE__ */ p(
267
309
  "div",
268
310
  {
269
- ref: M,
270
- onScroll: E,
271
- className: "overflow-x-auto rounded-sm",
272
- children: /* @__PURE__ */ d(
311
+ ref: D,
312
+ onScroll: F,
313
+ className: u(
314
+ "overflow-x-auto rounded-(--table-card-radius)",
315
+ z != null && "overflow-y-auto"
316
+ ),
317
+ style: z != null ? { maxHeight: z } : void 0,
318
+ children: /* @__PURE__ */ T(
273
319
  "table",
274
320
  {
275
- ref: _,
321
+ ref: O,
276
322
  "data-slot": "table",
277
323
  className: u(
278
324
  "w-full border-separate border-spacing-0 text-base",
325
+ // Manual widths need fixed layout so the <colgroup> wins;
326
+ // until the first resize the automatic layout is untouched.
327
+ P && "table-fixed",
279
328
  e
280
329
  ),
281
- ...C,
282
- children: ae
330
+ ...W,
331
+ children: [
332
+ P && /* @__PURE__ */ p("colgroup", { children: P.map((c, m) => /* @__PURE__ */ p("col", { style: { width: c } }, m)) }),
333
+ _
334
+ ]
283
335
  }
284
336
  )
285
337
  }
286
338
  ),
287
- /* @__PURE__ */ d(
339
+ /* @__PURE__ */ p(
288
340
  "div",
289
341
  {
290
342
  "aria-hidden": "true",
@@ -292,13 +344,13 @@ const he = a.forwardRef(
292
344
  className: u(
293
345
  "pointer-events-none absolute inset-y-0 z-20 w-10",
294
346
  "bg-gradient-to-l from-(--table-scroll-hint) to-transparent",
295
- "opacity-0 transition-opacity duration-(--duration-fast) ease-out motion-reduce:transition-none",
296
- L.right && "opacity-100",
297
- f ? "right-[var(--table-action-column-width)]" : "right-0"
347
+ "opacity-0 transition-opacity duration-150 ease-out motion-reduce:transition-none",
348
+ I.right && "opacity-100",
349
+ w ? "right-[var(--table-action-column-width)]" : "right-0"
298
350
  )
299
351
  }
300
352
  ),
301
- f && /* @__PURE__ */ d(
353
+ w && /* @__PURE__ */ p(
302
354
  "div",
303
355
  {
304
356
  "aria-hidden": "true",
@@ -306,7 +358,7 @@ const he = a.forwardRef(
306
358
  className: u(
307
359
  "pointer-events-none absolute inset-y-0 right-0 z-20",
308
360
  "w-[var(--table-action-column-width)]",
309
- "rounded-br-sm"
361
+ "rounded-br-(--table-card-radius)"
310
362
  // No shadow of its own: while columns hide behind the pinned
311
363
  // surface the scroll-hint gradient is already washing the
312
364
  // seam — stacking a cast on top of it read harsh. The hint
@@ -317,113 +369,153 @@ const he = a.forwardRef(
317
369
  ]
318
370
  }
319
371
  ),
320
- n && /* @__PURE__ */ d("div", { className: "flex items-center px-4 py-2.5", children: n })
372
+ a && /* @__PURE__ */ p("div", { className: "flex items-center px-4 py-2.5", children: a })
321
373
  ]
322
374
  }
323
375
  ) });
324
376
  }
325
377
  );
326
- he.displayName = "Table";
327
- const ee = a.forwardRef(({ className: e, ...t }, n) => {
328
- const r = V();
329
- return /* @__PURE__ */ d(P.Provider, { value: "header", children: /* @__PURE__ */ d(
378
+ Se.displayName = "Table";
379
+ const de = o.forwardRef(({ className: e, ...t }, a) => {
380
+ const n = j();
381
+ return /* @__PURE__ */ p(Q.Provider, { value: "header", children: /* @__PURE__ */ p(
330
382
  "thead",
331
383
  {
332
- ref: n,
384
+ ref: a,
333
385
  className: u(
334
386
  "text-xs text-muted-foreground",
335
- (r == null ? void 0 : r.elevatedActionColumn) && "relative z-30 bg-table-shell",
387
+ (n == null ? void 0 : n.elevatedActionColumn) && "relative z-30 bg-table-shell",
336
388
  e
337
389
  ),
338
390
  ...t
339
391
  }
340
392
  ) });
341
393
  });
342
- ee.displayName = "TableHeader";
343
- const te = a.forwardRef(({ className: e, ...t }, n) => /* @__PURE__ */ d(P.Provider, { value: "body", children: /* @__PURE__ */ d("tbody", { ref: n, className: u(e), ...t }) }));
344
- te.displayName = "TableBody";
345
- const $ = a.forwardRef(
346
- ({ className: e, rowKey: t, children: n, ...r }, o) => {
347
- const l = V(), s = a.useContext(P), b = !!l && l.selectionMode !== "none", f = b && s === "body" && t !== void 0 ? l.isSelected(t) : !1;
348
- return /* @__PURE__ */ A(
394
+ de.displayName = "TableHeader";
395
+ const pe = o.forwardRef(({ className: e, ...t }, a) => /* @__PURE__ */ p(Q.Provider, { value: "body", children: /* @__PURE__ */ p("tbody", { ref: a, className: u(e), ...t }) }));
396
+ pe.displayName = "TableBody";
397
+ const Y = o.forwardRef(
398
+ ({ className: e, rowKey: t, children: a, ...n }, s) => {
399
+ const i = j(), l = o.useContext(Q), h = !!i && i.selectionMode !== "none", w = h && l === "body" && t !== void 0 ? i.isSelected(t) : !1;
400
+ return /* @__PURE__ */ T(
349
401
  "tr",
350
402
  {
351
- ref: o,
352
- "data-selected": f || void 0,
403
+ ref: s,
404
+ "data-selected": w || void 0,
353
405
  className: u("group/row", e),
354
- ...r,
406
+ ...n,
355
407
  children: [
356
- b && (s === "header" ? /* @__PURE__ */ d(
408
+ h && (l === "header" ? /* @__PURE__ */ T(
357
409
  "th",
358
410
  {
359
411
  scope: "col",
360
412
  className: u(
361
413
  "w-10 px-4 py-2.5",
362
- Y,
414
+ ie,
363
415
  // Sticky without the baked shadow — an always-on smudge
364
416
  // muddies the shell's corners (elevation = actionability).
365
417
  // (sticky is positioned, so the ::after tick anchors to it —
366
418
  // no `relative` needed, and it would conflict with sticky.)
367
419
  "sticky left-0 z-10 bg-table-shell"
368
420
  ),
369
- children: l.selectionMode === "multiple" && /* @__PURE__ */ d(
370
- j,
371
- {
372
- size: "sm",
373
- "aria-label": "Select all rows",
374
- checked: l.allSelected,
375
- indeterminate: l.someSelected,
376
- onChange: l.toggleAll
377
- }
378
- )
421
+ children: [
422
+ /* @__PURE__ */ p("span", { className: "sr-only", children: "Row selection" }),
423
+ i.selectionMode === "multiple" && /* @__PURE__ */ p(
424
+ re,
425
+ {
426
+ size: "sm",
427
+ "aria-label": "Select all rows",
428
+ checked: i.allSelected,
429
+ indeterminate: i.someSelected,
430
+ onChange: i.toggleAll
431
+ }
432
+ )
433
+ ]
379
434
  }
380
- ) : /* @__PURE__ */ d(
435
+ ) : /* @__PURE__ */ p(
381
436
  "td",
382
437
  {
383
438
  className: u(
384
439
  "w-10 px-4 py-3",
385
- Q(l.isStatic),
386
- de,
440
+ le(i.isStatic),
441
+ ve,
387
442
  "sticky left-0 z-10",
388
443
  // Same white-behind-white corner problem as pinned data cells.
389
- G("left")
444
+ se("left")
390
445
  ),
391
- onClick: (i) => i.stopPropagation(),
392
- children: t !== void 0 && /* @__PURE__ */ d(
393
- j,
446
+ onClick: (r) => r.stopPropagation(),
447
+ children: t !== void 0 && /* @__PURE__ */ p(
448
+ re,
394
449
  {
395
450
  size: "sm",
396
451
  "aria-label": `Select ${t}`,
397
- checked: f,
398
- onChange: () => l.toggleKey(t)
452
+ checked: w,
453
+ onChange: () => i.toggleKey(t)
399
454
  }
400
455
  )
401
456
  }
402
457
  )),
403
- n
458
+ a
404
459
  ]
405
460
  }
406
461
  );
407
462
  }
408
463
  );
409
- $.displayName = "TableRow";
410
- const re = a.forwardRef(({ className: e, align: t, sticky: n, sortKey: r, allowsSorting: o = !0, _sortColumnIndex: l, children: s, ...b }, f) => {
411
- var v, p;
412
- const i = V(), h = (i != null && i.automaticSorting && l !== void 0 ? `${H}${l}` : void 0) ?? r, g = Number(b.colSpan ?? 1) === 1, x = String(D(s)).trim().length > 0, C = o && g && n !== "right" && x && !!h && !!(i != null && i.requestSort), _ = C && ((v = i == null ? void 0 : i.sortDescriptor) == null ? void 0 : v.column) === h, w = (p = i == null ? void 0 : i.sortDescriptor) == null ? void 0 : p.direction;
413
- return /* @__PURE__ */ d(
464
+ Y.displayName = "TableRow";
465
+ const fe = o.forwardRef(({ className: e, align: t, sticky: a, sortKey: n, allowsSorting: s = !0, _sortColumnIndex: i, children: l, ...h }, w) => {
466
+ var U, q, S;
467
+ const r = j(), x = (r != null && r.automaticSorting && i !== void 0 ? `${K}${i}` : void 0) ?? n, v = Number(h.colSpan ?? 1) === 1, C = String(X(l)).trim(), A = C.length > 0, z = s && v && a !== "right" && A && !!x && !!(r != null && r.requestSort), W = z && ((U = r == null ? void 0 : r.sortDescriptor) == null ? void 0 : U.column) === x, O = (q = r == null ? void 0 : r.sortDescriptor) == null ? void 0 : q.direction, N = !!(r != null && r.resizableColumns) && v && a !== "right", y = o.useRef(null), [b, k] = o.useState(!1), R = (d) => {
468
+ if (d.button !== 0 || !r) return;
469
+ const f = d.currentTarget.parentElement, _ = f == null ? void 0 : f.parentElement;
470
+ if (!(!f || !_)) {
471
+ r.snapshotColumnWidths(_), y.current = {
472
+ index: f.cellIndex,
473
+ startX: d.clientX,
474
+ startWidth: f.getBoundingClientRect().width
475
+ }, k(!0);
476
+ try {
477
+ d.currentTarget.setPointerCapture(d.pointerId);
478
+ } catch {
479
+ }
480
+ d.preventDefault();
481
+ }
482
+ }, $ = (d) => {
483
+ const f = y.current;
484
+ !f || !r || r.setColumnWidth(
485
+ f.index,
486
+ f.startWidth + (d.clientX - f.startX)
487
+ );
488
+ }, M = () => {
489
+ y.current = null, k(!1);
490
+ }, H = (d) => {
491
+ if (d.key !== "ArrowLeft" && d.key !== "ArrowRight" || !r) return;
492
+ d.preventDefault();
493
+ const f = d.currentTarget.parentElement, _ = f == null ? void 0 : f.parentElement;
494
+ if (!f || !_) return;
495
+ r.snapshotColumnWidths(_);
496
+ const D = d.shiftKey ? 32 : 8, I = d.key === "ArrowRight" ? D : -D;
497
+ r.setColumnWidth(f.cellIndex, f.getBoundingClientRect().width + I);
498
+ };
499
+ return /* @__PURE__ */ T(
414
500
  "th",
415
501
  {
416
- ref: f,
502
+ ref: w,
417
503
  scope: "col",
418
- "aria-sort": _ ? w === "ascending" ? "ascending" : "descending" : C ? "none" : void 0,
504
+ "aria-sort": W ? O === "ascending" ? "ascending" : "descending" : z ? "none" : void 0,
419
505
  className: u(
420
506
  // whitespace-nowrap: header labels hug their content — the table
421
507
  // scrolls horizontally, so wrapping "Null %" to two lines only
422
508
  // wastes header height without saving any width.
423
509
  "relative whitespace-nowrap px-4 py-2.5 font-normal",
424
- Y,
425
- W(t),
426
- n && (n === "right" && (i != null && i.elevatedActionColumn) ? u(
510
+ ie,
511
+ // The resize handle carries its own tick visual, so drop the
512
+ // decorative one; the last column never shows a handle.
513
+ N && "after:hidden [&:last-child>[data-slot=resize-handle]]:hidden",
514
+ // Capped-height tables scroll under the header: pin it to the
515
+ // viewport top, painted on the shell gray so rows pass beneath.
516
+ (r == null ? void 0 : r.stickyHeader) && "sticky top-0 z-30 bg-table-shell",
517
+ ne(t),
518
+ a && (a === "right" && (r != null && r.elevatedActionColumn) ? u(
427
519
  // Preserve the semantic column width, but do not pin or paint
428
520
  // a blank header cell over the labels behind it. Only body
429
521
  // action cells participate in the sticky elevated surface.
@@ -431,51 +523,92 @@ const re = a.forwardRef(({ className: e, align: t, sticky: n, sortKey: r, allows
431
523
  "min-w-[var(--table-action-column-width)]",
432
524
  "max-w-[var(--table-action-column-width)]",
433
525
  "bg-transparent"
434
- ) : u(X(n), "bg-table-shell")),
526
+ ) : u(ae(a), "bg-table-shell")),
435
527
  e
436
528
  ),
437
- ...b,
438
- children: C ? /* @__PURE__ */ A(
439
- "button",
440
- {
441
- type: "button",
442
- onClick: () => i.requestSort(h),
443
- className: u(
444
- "group/sort -mx-1 inline-flex items-center gap-1 rounded px-1 outline-none transition-colors",
445
- "hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",
446
- t === "right" && "flex-row-reverse",
447
- _ && "text-foreground"
448
- ),
449
- children: [
450
- s,
451
- _ ? w === "ascending" ? /* @__PURE__ */ d(ie, { className: "size-3.5" }) : /* @__PURE__ */ d(ce, { className: "size-3.5" }) : /* @__PURE__ */ d(ue, { className: "size-3.5 opacity-0 transition-opacity group-hover/sort:opacity-60" })
452
- ]
453
- }
454
- ) : s
529
+ ...h,
530
+ children: [
531
+ z ? /* @__PURE__ */ T(
532
+ "button",
533
+ {
534
+ type: "button",
535
+ onClick: () => r.requestSort(x),
536
+ className: u(
537
+ "group/sort -mx-1 inline-flex items-center gap-1 rounded px-1 outline-none transition-colors",
538
+ "hover:text-foreground focus-visible:ring-2 focus-visible:ring-ring",
539
+ t === "right" && "flex-row-reverse",
540
+ W && "text-foreground"
541
+ ),
542
+ children: [
543
+ l,
544
+ W ? O === "ascending" ? /* @__PURE__ */ p(ge, { className: "size-3.5" }) : /* @__PURE__ */ p(he, { className: "size-3.5" }) : /* @__PURE__ */ p(we, { className: "size-3.5 opacity-0 transition-opacity group-hover/sort:opacity-60" })
545
+ ]
546
+ }
547
+ ) : A ? l : /* @__PURE__ */ p("span", { className: "sr-only", children: h["aria-label"] ?? "Table column" }),
548
+ N && /* @__PURE__ */ p(
549
+ "span",
550
+ {
551
+ "data-slot": "resize-handle",
552
+ role: "separator",
553
+ "aria-orientation": "vertical",
554
+ "aria-label": `Resize ${C || "this"} column`,
555
+ "aria-valuemin": G,
556
+ "aria-valuemax": 2e3,
557
+ "aria-valuenow": ((S = r == null ? void 0 : r.columnWidths) == null ? void 0 : S[i ?? -1]) ?? G,
558
+ tabIndex: 0,
559
+ "data-resizing": b ? "true" : void 0,
560
+ onPointerDown: R,
561
+ onPointerMove: $,
562
+ onPointerUp: M,
563
+ onPointerCancel: M,
564
+ onKeyDown: H,
565
+ onDoubleClick: () => r == null ? void 0 : r.resetColumnWidths(),
566
+ className: u(
567
+ // 12px hit area straddling the column edge; the 1px tick inside
568
+ // is the visible affordance (it replaces the decorative one).
569
+ "group/resize absolute -right-1.5 top-0 z-10 flex h-full w-3 cursor-col-resize touch-none select-none items-center justify-center rounded-sm outline-none",
570
+ "focus-visible:ring-2 focus-visible:ring-ring"
571
+ ),
572
+ children: /* @__PURE__ */ p(
573
+ "span",
574
+ {
575
+ "aria-hidden": "true",
576
+ className: u(
577
+ "h-4 w-px rounded-sm bg-border-strong",
578
+ "transition-[transform,background-color] duration-150 ease-out motion-reduce:transition-none",
579
+ "group-hover/resize:scale-y-125 group-hover/resize:bg-foreground/60",
580
+ "group-focus-visible/resize:scale-y-125 group-focus-visible/resize:bg-foreground/60",
581
+ "group-data-[resizing]/resize:scale-y-125 group-data-[resizing]/resize:bg-foreground/60"
582
+ )
583
+ }
584
+ )
585
+ }
586
+ )
587
+ ]
455
588
  }
456
589
  );
457
590
  });
458
- re.displayName = "TableColumn";
459
- const we = a.forwardRef(
460
- ({ className: e, align: t, sticky: n, sortValue: r, ...o }, l) => {
461
- const s = V(), b = n === "right" && (s == null ? void 0 : s.elevatedActionColumn);
462
- return /* @__PURE__ */ d(
591
+ fe.displayName = "TableColumn";
592
+ const ke = o.forwardRef(
593
+ ({ className: e, align: t, sticky: a, sortValue: n, ...s }, i) => {
594
+ const l = j(), h = a === "right" && (l == null ? void 0 : l.elevatedActionColumn);
595
+ return /* @__PURE__ */ p(
463
596
  "td",
464
597
  {
465
- ref: l,
466
- "data-sort-value": r instanceof Date ? r.toISOString() : r,
598
+ ref: i,
599
+ "data-sort-value": n instanceof Date ? n.toISOString() : n,
467
600
  className: u(
468
601
  // whitespace-nowrap: cell content never wraps — the table's
469
602
  // overflow-x-auto viewport scrolls horizontally instead, matching the
470
603
  // header cells. Opt back into wrapping with `whitespace-normal` for
471
604
  // deliberate multi-line content (e.g. an EmptyState in a colSpan cell).
472
605
  "whitespace-nowrap px-4 py-3",
473
- Q((s == null ? void 0 : s.isStatic) ?? !1),
474
- pe,
475
- W(t),
476
- n && X(n, s == null ? void 0 : s.elevatedActionColumn),
477
- n && G(n),
478
- b && u(
606
+ le((l == null ? void 0 : l.isStatic) ?? !1),
607
+ ye,
608
+ ne(t),
609
+ a && ae(a, l == null ? void 0 : l.elevatedActionColumn),
610
+ a && se(a),
611
+ h && u(
479
612
  "w-[var(--table-action-column-width)]",
480
613
  "min-w-[var(--table-action-column-width)]",
481
614
  "max-w-[var(--table-action-column-width)]",
@@ -484,17 +617,17 @@ const we = a.forwardRef(
484
617
  ),
485
618
  e
486
619
  ),
487
- ...o
620
+ ...s
488
621
  }
489
622
  );
490
623
  }
491
624
  );
492
- we.displayName = "TableCell";
625
+ ke.displayName = "TableCell";
493
626
  export {
494
- he as Table,
495
- te as TableBody,
496
- we as TableCell,
497
- re as TableColumn,
498
- ee as TableHeader,
499
- $ as TableRow
627
+ Se as Table,
628
+ pe as TableBody,
629
+ ke as TableCell,
630
+ fe as TableColumn,
631
+ de as TableHeader,
632
+ Y as TableRow
500
633
  };