@frontify/fondue-components 22.2.0 → 23.0.0

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 (157) hide show
  1. package/dist/fondue-components10.js +27 -24
  2. package/dist/fondue-components10.js.map +1 -1
  3. package/dist/fondue-components11.js +2 -2
  4. package/dist/fondue-components12.js +2 -2
  5. package/dist/fondue-components13.js +63 -59
  6. package/dist/fondue-components13.js.map +1 -1
  7. package/dist/fondue-components14.js +2 -2
  8. package/dist/fondue-components15.js +2 -2
  9. package/dist/fondue-components16.js +2 -2
  10. package/dist/fondue-components17.js +1 -1
  11. package/dist/fondue-components18.js +1 -1
  12. package/dist/fondue-components19.js +1 -1
  13. package/dist/fondue-components20.js +2 -2
  14. package/dist/fondue-components21.js +2 -2
  15. package/dist/fondue-components22.js +6 -6
  16. package/dist/fondue-components23.js +1 -1
  17. package/dist/fondue-components24.js +29 -25
  18. package/dist/fondue-components24.js.map +1 -1
  19. package/dist/fondue-components25.js +142 -119
  20. package/dist/fondue-components25.js.map +1 -1
  21. package/dist/fondue-components26.js +1 -1
  22. package/dist/fondue-components27.js +3 -3
  23. package/dist/fondue-components28.js +2 -2
  24. package/dist/fondue-components29.js +2 -2
  25. package/dist/fondue-components30.js +1 -1
  26. package/dist/fondue-components31.js +28 -10
  27. package/dist/fondue-components31.js.map +1 -1
  28. package/dist/fondue-components32.js +2 -2
  29. package/dist/fondue-components33.js +1 -1
  30. package/dist/fondue-components34.js +23 -7
  31. package/dist/fondue-components34.js.map +1 -1
  32. package/dist/fondue-components35.js +7 -6
  33. package/dist/fondue-components35.js.map +1 -1
  34. package/dist/fondue-components36.js +7 -32
  35. package/dist/fondue-components36.js.map +1 -1
  36. package/dist/fondue-components37.js +32 -5
  37. package/dist/fondue-components37.js.map +1 -1
  38. package/dist/fondue-components38.js +5 -12
  39. package/dist/fondue-components38.js.map +1 -1
  40. package/dist/fondue-components39.js +10 -153
  41. package/dist/fondue-components39.js.map +1 -1
  42. package/dist/fondue-components4.js +35 -31
  43. package/dist/fondue-components4.js.map +1 -1
  44. package/dist/fondue-components40.js +59 -22
  45. package/dist/fondue-components40.js.map +1 -1
  46. package/dist/fondue-components41.js +17 -17
  47. package/dist/fondue-components41.js.map +1 -1
  48. package/dist/fondue-components42.js +112 -15
  49. package/dist/fondue-components42.js.map +1 -1
  50. package/dist/fondue-components43.js +19 -30
  51. package/dist/fondue-components43.js.map +1 -1
  52. package/dist/fondue-components44.js +32 -53
  53. package/dist/fondue-components44.js.map +1 -1
  54. package/dist/fondue-components45.js +48 -124
  55. package/dist/fondue-components45.js.map +1 -1
  56. package/dist/fondue-components46.js +130 -20
  57. package/dist/fondue-components46.js.map +1 -1
  58. package/dist/fondue-components47.js +21 -53
  59. package/dist/fondue-components47.js.map +1 -1
  60. package/dist/fondue-components48.js +53 -8
  61. package/dist/fondue-components48.js.map +1 -1
  62. package/dist/fondue-components49.js +8 -13
  63. package/dist/fondue-components49.js.map +1 -1
  64. package/dist/fondue-components5.js +2 -2
  65. package/dist/fondue-components50.js +13 -15
  66. package/dist/fondue-components50.js.map +1 -1
  67. package/dist/fondue-components51.js +14 -4
  68. package/dist/fondue-components51.js.map +1 -1
  69. package/dist/fondue-components52.js +5 -60
  70. package/dist/fondue-components52.js.map +1 -1
  71. package/dist/fondue-components53.js +59 -17
  72. package/dist/fondue-components53.js.map +1 -1
  73. package/dist/fondue-components54.js +18 -19
  74. package/dist/fondue-components54.js.map +1 -1
  75. package/dist/fondue-components55.js +18 -4
  76. package/dist/fondue-components55.js.map +1 -1
  77. package/dist/fondue-components56.js +3 -13
  78. package/dist/fondue-components56.js.map +1 -1
  79. package/dist/fondue-components57.js +13 -3
  80. package/dist/fondue-components57.js.map +1 -1
  81. package/dist/fondue-components58.js +3 -17
  82. package/dist/fondue-components58.js.map +1 -1
  83. package/dist/fondue-components59.js +18 -10
  84. package/dist/fondue-components59.js.map +1 -1
  85. package/dist/fondue-components6.js +4 -4
  86. package/dist/fondue-components60.js +11 -35
  87. package/dist/fondue-components60.js.map +1 -1
  88. package/dist/fondue-components61.js +35 -5
  89. package/dist/fondue-components61.js.map +1 -1
  90. package/dist/fondue-components62.js +4 -12
  91. package/dist/fondue-components62.js.map +1 -1
  92. package/dist/fondue-components63.js +12 -4
  93. package/dist/fondue-components63.js.map +1 -1
  94. package/dist/fondue-components64.js +4 -24
  95. package/dist/fondue-components64.js.map +1 -1
  96. package/dist/fondue-components65.js +24 -16
  97. package/dist/fondue-components65.js.map +1 -1
  98. package/dist/fondue-components66.js +16 -150
  99. package/dist/fondue-components66.js.map +1 -1
  100. package/dist/fondue-components67.js +152 -19
  101. package/dist/fondue-components67.js.map +1 -1
  102. package/dist/fondue-components68.js +19 -78
  103. package/dist/fondue-components68.js.map +1 -1
  104. package/dist/fondue-components69.js +78 -8
  105. package/dist/fondue-components69.js.map +1 -1
  106. package/dist/fondue-components7.js +2 -2
  107. package/dist/fondue-components70.js +8 -37
  108. package/dist/fondue-components70.js.map +1 -1
  109. package/dist/fondue-components71.js +36 -70
  110. package/dist/fondue-components71.js.map +1 -1
  111. package/dist/fondue-components72.js +70 -10
  112. package/dist/fondue-components72.js.map +1 -1
  113. package/dist/fondue-components73.js +10 -12
  114. package/dist/fondue-components73.js.map +1 -1
  115. package/dist/fondue-components74.js +12 -12
  116. package/dist/fondue-components74.js.map +1 -1
  117. package/dist/fondue-components75.js +12 -22
  118. package/dist/fondue-components75.js.map +1 -1
  119. package/dist/fondue-components76.js +23 -34
  120. package/dist/fondue-components76.js.map +1 -1
  121. package/dist/fondue-components77.js +34 -11
  122. package/dist/fondue-components77.js.map +1 -1
  123. package/dist/fondue-components78.js +10 -67
  124. package/dist/fondue-components78.js.map +1 -1
  125. package/dist/fondue-components79.js +67 -14
  126. package/dist/fondue-components79.js.map +1 -1
  127. package/dist/fondue-components8.js +5 -5
  128. package/dist/fondue-components80.js +13 -24
  129. package/dist/fondue-components80.js.map +1 -1
  130. package/dist/fondue-components81.js +24 -17
  131. package/dist/fondue-components81.js.map +1 -1
  132. package/dist/fondue-components82.js +15 -19
  133. package/dist/fondue-components82.js.map +1 -1
  134. package/dist/fondue-components83.js +22 -6
  135. package/dist/fondue-components83.js.map +1 -1
  136. package/dist/fondue-components84.js +6 -6
  137. package/dist/fondue-components85.js +19 -4
  138. package/dist/fondue-components85.js.map +1 -1
  139. package/dist/fondue-components86.js +6 -4
  140. package/dist/fondue-components86.js.map +1 -1
  141. package/dist/fondue-components87.js +3 -15
  142. package/dist/fondue-components87.js.map +1 -1
  143. package/dist/fondue-components88.js +5 -2
  144. package/dist/fondue-components88.js.map +1 -1
  145. package/dist/fondue-components89.js +16 -39
  146. package/dist/fondue-components89.js.map +1 -1
  147. package/dist/fondue-components9.js +91 -87
  148. package/dist/fondue-components9.js.map +1 -1
  149. package/dist/fondue-components90.js +2 -6
  150. package/dist/fondue-components90.js.map +1 -1
  151. package/dist/fondue-components91.js +43 -0
  152. package/dist/fondue-components91.js.map +1 -0
  153. package/dist/fondue-components92.js +24 -0
  154. package/dist/fondue-components92.js.map +1 -0
  155. package/dist/index.d.ts +63 -5
  156. package/dist/style.css +1 -1
  157. package/package.json +8 -4
@@ -1,176 +1,199 @@
1
- import { jsx as d, jsxs as p } from "react/jsx-runtime";
2
- import { IconArrowUp as B, IconArrowDown as A, IconArrowBidirectional as K } from "@frontify/fondue-icons";
3
- import { forwardRef as f, useRef as w, useMemo as S } from "react";
4
- import { useSyncRefs as g } from "./fondue-components48.js";
5
- import { useTextTruncation as N } from "./fondue-components74.js";
6
- import { Box as L } from "./fondue-components5.js";
7
- import { LoadingCircle as j } from "./fondue-components18.js";
8
- import n from "./fondue-components75.js";
9
- import { handleKeyDown as $, shouldIgnoreRowClick as D } from "./fondue-components76.js";
10
- const R = f(
11
- ({ layout: t = "auto", fontSize: e = "medium", sticky: l, children: i, ...a }, o) => {
12
- const m = l === "head" || l === "both", s = l === "col" || l === "both";
13
- return (
14
- // eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions
15
- /* @__PURE__ */ d(
16
- "table",
17
- {
18
- ref: o,
19
- className: n.table,
20
- "data-layout": t,
21
- "data-font-size": e,
22
- "data-sticky-header": m,
23
- "data-sticky-left-column": s,
24
- onKeyDown: $,
25
- ...a,
26
- children: i
27
- }
28
- )
1
+ import { jsx as n, jsxs as T } from "react/jsx-runtime";
2
+ import { IconArrowUp as O, IconArrowDown as K, IconArrowBidirectional as W } from "@frontify/fondue-icons";
3
+ import { forwardRef as u, useRef as N, useState as _, useEffect as D, useMemo as L } from "react";
4
+ import { useSyncRefs as R } from "./fondue-components49.js";
5
+ import { useTextTruncation as h } from "./fondue-components75.js";
6
+ import { useTranslation as j } from "./fondue-components34.js";
7
+ import { Box as M } from "./fondue-components5.js";
8
+ import { LoadingCircle as S } from "./fondue-components18.js";
9
+ import c from "./fondue-components76.js";
10
+ import { handleKeyDown as U, shouldIgnoreRowClick as q } from "./fondue-components77.js";
11
+ const x = u(
12
+ ({ layout: t = "auto", fontSize: e = "medium", gutter: r = "0px", sticky: o, noBorder: a = !1, children: l, ...b }, f) => {
13
+ const m = N(null), [p, s] = _(!1);
14
+ R(m, f);
15
+ const i = o === "head" || o === "both", v = o === "col" || o === "both";
16
+ return D(() => {
17
+ const d = m.current;
18
+ if (!d)
19
+ return;
20
+ const y = () => {
21
+ const g = d.parentElement;
22
+ if (!g)
23
+ return;
24
+ const C = d.scrollWidth, E = g.clientWidth;
25
+ s(C > E);
26
+ };
27
+ y();
28
+ const w = new ResizeObserver(y);
29
+ return w.observe(d), d.parentElement && w.observe(d.parentElement), () => {
30
+ w.disconnect();
31
+ };
32
+ }, [l]), // eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions
33
+ /* @__PURE__ */ n(
34
+ "table",
35
+ {
36
+ ref: m,
37
+ className: c.table,
38
+ style: {
39
+ // @ts-expect-error CSS custom properties are not in CSSProperties type
40
+ "--table-gutter": r
41
+ },
42
+ "data-layout": t,
43
+ "data-font-size": e,
44
+ "data-sticky-header": i,
45
+ "data-sticky-left-column": v,
46
+ "data-no-border": a,
47
+ "data-has-horizontal-overflow": p,
48
+ onKeyDown: U,
49
+ ...b,
50
+ children: l
51
+ }
29
52
  );
30
53
  }
31
54
  );
32
- R.displayName = "Table.Root";
33
- const C = f(({ children: t }, e) => /* @__PURE__ */ d("caption", { ref: e, className: n.caption, children: t }));
34
- C.displayName = "Table.Caption";
35
- const v = f(
36
- ({ sticky: t = !1, children: e, "aria-label": l, "aria-busy": i }, a) => /* @__PURE__ */ d("thead", { ref: a, className: n.header, "data-sticky": t, "aria-label": l, "aria-busy": i, children: e })
55
+ x.displayName = "Table.Root";
56
+ const k = u(({ children: t }, e) => /* @__PURE__ */ n("caption", { ref: e, className: c.caption, children: t }));
57
+ k.displayName = "Table.Caption";
58
+ const z = u(
59
+ ({ sticky: t = !1, children: e, "aria-label": r, "aria-busy": o }, a) => /* @__PURE__ */ n("thead", { ref: a, className: c.header, "data-sticky": t, "aria-label": r, "aria-busy": o, children: e })
37
60
  );
38
- v.displayName = "Table.Header";
39
- const x = f(
61
+ z.displayName = "Table.Header";
62
+ const H = u(
40
63
  ({
41
64
  noShrink: t = !1,
42
65
  truncate: e = !1,
43
- align: l = "left",
44
- scope: i = "col",
66
+ align: r = "left",
67
+ scope: o = "col",
45
68
  sortTranslations: a,
46
- sortDirection: o,
47
- colSpan: m,
48
- width: s,
49
- state: b = "idle",
50
- loadingStateAriaLabel: u,
51
- onSortChange: r,
52
- children: c
53
- }, I) => {
54
- const y = w(null);
55
- g(y, I), N(y);
56
- const h = S(() => typeof c == "string" ? o === "ascending" ? (a == null ? void 0 : a.sortDescending) ?? `Sort by ${c} descending` : (a == null ? void 0 : a.sortAscending) ?? `Sort by ${c} ascending` : o === "ascending" ? "Sort descending" : "Sort ascending", [c, o, a]), z = () => {
57
- if (!r)
69
+ sortDirection: l,
70
+ colSpan: b,
71
+ width: f,
72
+ state: m = "idle",
73
+ loadingStateAriaLabel: p,
74
+ onSortChange: s,
75
+ children: i
76
+ }, v) => {
77
+ const { t: d } = j(), y = N(null);
78
+ R(y, v), h(y);
79
+ const w = L(() => typeof i == "string" ? l === "ascending" ? (a == null ? void 0 : a.sortDescending) ?? d("Table_sortByDescending", { column: i }) : (a == null ? void 0 : a.sortAscending) ?? d("Table_sortByAscending", { column: i }) : d(l === "ascending" ? "Table_sortDescending" : "Table_sortAscending"), [i, l, a, d]), g = () => {
80
+ if (!s)
58
81
  return;
59
- r(o === void 0 || o === "descending" ? "ascending" : "descending");
82
+ s(l === void 0 || l === "descending" ? "ascending" : "descending");
60
83
  };
61
- return /* @__PURE__ */ d(
84
+ return /* @__PURE__ */ n(
62
85
  "th",
63
86
  {
64
87
  ref: y,
65
- style: { width: s },
66
- className: n.headerCell,
67
- scope: i,
68
- colSpan: m,
69
- "data-align": l,
88
+ style: { width: f },
89
+ className: c.headerCell,
90
+ scope: o,
91
+ colSpan: b,
92
+ "data-align": r,
70
93
  "data-truncate": e,
71
94
  "data-no-shrink": t,
72
- "data-sortable": !!r,
73
- "aria-sort": r ? o || "none" : void 0,
74
- children: b === "loading" ? /* @__PURE__ */ p("div", { className: n.cellContent, "aria-live": "polite", "aria-label": u, children: [
75
- typeof c == "string" && e ? /* @__PURE__ */ d("span", { className: n.buttonText, children: c }) : c,
76
- /* @__PURE__ */ d(j, { "data-test-id": "fondue-loading-circle", size: "xx-small" })
77
- ] }) : r ? /* @__PURE__ */ p(
95
+ "data-sortable": !!s,
96
+ "aria-sort": s ? l || "none" : void 0,
97
+ children: m === "loading" ? /* @__PURE__ */ T("div", { className: c.cellContent, "aria-live": "polite", "aria-label": p, children: [
98
+ typeof i == "string" && e ? /* @__PURE__ */ n("span", { className: c.buttonText, children: i }) : i,
99
+ /* @__PURE__ */ n(S, { "data-test-id": "fondue-loading-circle", size: "xx-small" })
100
+ ] }) : s ? /* @__PURE__ */ T(
78
101
  "button",
79
102
  {
80
- className: n.cellContent,
81
- "aria-label": h,
82
- "data-active": !!o,
83
- onClick: z,
103
+ className: c.cellContent,
104
+ "aria-label": w,
105
+ "data-active": !!l,
106
+ onClick: g,
84
107
  type: "button",
85
108
  children: [
86
- typeof c == "string" && e ? /* @__PURE__ */ d("span", { className: n.buttonText, children: c }) : c,
87
- /* @__PURE__ */ d(L, { width: 3, children: o === "ascending" ? /* @__PURE__ */ d(B, { size: "12" }) : o === "descending" ? /* @__PURE__ */ d(A, { size: "12" }) : /* @__PURE__ */ d(K, { className: n.sortIndicator, size: "12" }) })
109
+ typeof i == "string" && e ? /* @__PURE__ */ n("span", { className: c.buttonText, children: i }) : i,
110
+ /* @__PURE__ */ n(M, { width: 3, children: l === "ascending" ? /* @__PURE__ */ n(O, { size: "12" }) : l === "descending" ? /* @__PURE__ */ n(K, { size: "12" }) : /* @__PURE__ */ n(W, { className: c.sortIndicator, size: "12" }) })
88
111
  ]
89
112
  }
90
- ) : c
113
+ ) : i
91
114
  }
92
115
  );
93
116
  }
94
117
  );
95
- x.displayName = "Table.HeaderCell";
96
- const k = f(
97
- ({ firstColumnSticky: t = !1, lastColumnSticky: e = !1, children: l, "aria-busy": i }, a) => /* @__PURE__ */ d(
118
+ H.displayName = "Table.HeaderCell";
119
+ const B = u(
120
+ ({ firstColumnSticky: t = !1, lastColumnSticky: e = !1, children: r, "aria-busy": o }, a) => /* @__PURE__ */ n(
98
121
  "tbody",
99
122
  {
100
123
  ref: a,
101
- className: n.body,
124
+ className: c.body,
102
125
  "data-first-column-sticky": t,
103
126
  "data-last-column-sticky": e,
104
- "aria-busy": i,
105
- children: l
127
+ "aria-busy": o,
128
+ children: r
106
129
  }
107
130
  )
108
131
  );
109
- k.displayName = "Table.Body";
110
- const T = f(
111
- ({ disabled: t = !1, selected: e = !1, onClick: l, children: i, "aria-label": a, "data-test-id": o }, m) => {
112
- const s = l !== void 0 && !t, b = (r) => {
113
- t || D(r) || l && l(e);
114
- }, u = (r) => {
115
- s && (r.key === "Enter" || r.key === " ") && (r.preventDefault(), b());
132
+ B.displayName = "Table.Body";
133
+ const I = u(
134
+ ({ disabled: t = !1, selected: e = !1, onClick: r, children: o, "aria-label": a, "data-test-id": l }, b) => {
135
+ const f = r !== void 0 && !t, m = (s) => {
136
+ t || q(s) || r && r(e);
137
+ }, p = (s) => {
138
+ f && (s.key === "Enter" || s.key === " ") && (s.preventDefault(), m());
116
139
  };
117
- return /* @__PURE__ */ d(
140
+ return /* @__PURE__ */ n(
118
141
  "tr",
119
142
  {
120
- ref: m,
121
- className: n.row,
143
+ ref: b,
144
+ className: c.row,
122
145
  tabIndex: 0,
123
- role: s ? "button" : "row",
146
+ role: f ? "button" : "row",
124
147
  "data-disabled": t,
125
- "data-interactive": s,
126
- "data-selected": s ? void 0 : e,
148
+ "data-interactive": f,
149
+ "data-selected": f ? void 0 : e,
127
150
  "aria-disabled": t,
128
151
  "aria-label": a,
129
- "aria-selected": s ? void 0 : e,
130
- onClick: s ? b : void 0,
131
- onKeyDown: s ? u : void 0,
132
- "data-test-id": o,
133
- children: i
152
+ "aria-selected": f ? void 0 : e,
153
+ onClick: f ? m : void 0,
154
+ onKeyDown: f ? p : void 0,
155
+ "data-test-id": l,
156
+ children: o
134
157
  }
135
158
  );
136
159
  }
137
160
  );
138
- T.displayName = "Table.Row";
139
- const H = f(
140
- ({ colSpan: t, truncate: e, align: l = "left", children: i, "aria-label": a }, o) => {
141
- const m = w(null);
142
- return g(m, o), N(m), /* @__PURE__ */ d(
161
+ I.displayName = "Table.Row";
162
+ const A = u(
163
+ ({ colSpan: t, truncate: e, align: r = "left", children: o, "aria-label": a }, l) => {
164
+ const b = N(null);
165
+ return R(b, l), h(b), /* @__PURE__ */ n(
143
166
  "td",
144
167
  {
145
- ref: m,
146
- className: n.rowCell,
168
+ ref: b,
169
+ className: c.rowCell,
147
170
  colSpan: t,
148
- "data-align": l,
171
+ "data-align": r,
149
172
  "data-truncate": e,
150
173
  "aria-label": a,
151
- children: i
174
+ children: o
152
175
  }
153
176
  );
154
177
  }
155
178
  );
156
- H.displayName = "Table.RowCell";
157
- const V = {
158
- Root: R,
159
- Caption: C,
160
- Header: v,
161
- HeaderCell: x,
162
- Body: k,
163
- Row: T,
164
- RowCell: H
179
+ A.displayName = "Table.RowCell";
180
+ const ee = {
181
+ Root: x,
182
+ Caption: k,
183
+ Header: z,
184
+ HeaderCell: H,
185
+ Body: B,
186
+ Row: I,
187
+ RowCell: A
165
188
  };
166
189
  export {
167
- V as Table,
168
- k as TableBody,
169
- C as TableCaption,
170
- v as TableHeader,
171
- x as TableHeaderCell,
172
- R as TableRoot,
173
- T as TableRow,
174
- H as TableRowCell
190
+ ee as Table,
191
+ B as TableBody,
192
+ k as TableCaption,
193
+ z as TableHeader,
194
+ H as TableHeaderCell,
195
+ x as TableRoot,
196
+ I as TableRow,
197
+ A as TableRowCell
175
198
  };
176
199
  //# sourceMappingURL=fondue-components25.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components25.js","sources":["../src/components/Table/Table.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconArrowBidirectional, IconArrowDown, IconArrowUp } from '@frontify/fondue-icons';\nimport {\n type AriaAttributes,\n forwardRef,\n useMemo,\n useRef,\n type CSSProperties,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { useSyncRefs } from '#/hooks/useSyncRefs';\nimport { useTextTruncation } from '#/hooks/useTextTruncation';\nimport { type CommonAriaAttrs } from '#/utilities/types';\n\nimport { Box } from '../Box/Box';\nimport { LoadingCircle } from '../LoadingCircle/LoadingCircle';\n\nimport styles from './styles/table.module.scss';\nimport { handleKeyDown, shouldIgnoreRowClick } from './utils';\n\ntype TableRootProps = {\n /**\n * Whether the table should have a fixed or auto layout\n * @default 'auto'\n */\n layout?: 'auto' | 'fixed';\n /**\n * Font size of the table content\n * @default 'small'\n */\n fontSize?: 'small' | 'medium';\n /**\n * Whether header should stick to the top when scrolling\n * @deprecated Use `Table.Header sticky` prop instead. For sticky columns, use `Table.Body firstColumnSticky` or `lastColumnSticky` props\n */\n sticky?: 'head' | 'col' | 'both';\n children: ReactNode;\n} & CommonAriaAttrs &\n Pick<AriaAttributes, 'aria-multiselectable'>;\n\nexport const TableRoot = forwardRef<HTMLTableElement, TableRootProps>(\n ({ layout = 'auto', fontSize = 'medium', sticky, children, ...props }, ref) => {\n // Handle deprecated `sticky` prop for backward compatibility\n const legacyStickyHeader = sticky === 'head' || sticky === 'both';\n const legacyStickyLeftColumn = sticky === 'col' || sticky === 'both';\n\n return (\n // eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions\n <table\n ref={ref}\n className={styles.table}\n data-layout={layout}\n data-font-size={fontSize}\n data-sticky-header={legacyStickyHeader}\n data-sticky-left-column={legacyStickyLeftColumn}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </table>\n );\n },\n);\nTableRoot.displayName = 'Table.Root';\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, { children: ReactNode }>(({ children }, ref) => {\n return (\n <caption ref={ref} className={styles.caption}>\n {children}\n </caption>\n );\n});\nTableCaption.displayName = 'Table.Caption';\n\ntype TableHeaderProps = {\n /**\n * Whether the header should stick to the top when scrolling\n * @default false\n */\n sticky?: boolean;\n children: ReactNode;\n 'aria-label'?: string;\n 'aria-busy'?: boolean;\n};\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ sticky = false, children, 'aria-label': ariaLabel, 'aria-busy': ariaBusy }, ref) => {\n return (\n <thead ref={ref} className={styles.header} data-sticky={sticky} aria-label={ariaLabel} aria-busy={ariaBusy}>\n {children}\n </thead>\n );\n },\n);\nTableHeader.displayName = 'Table.Header';\n\ntype SortDirection = 'ascending' | 'descending' | undefined;\ntype HorizontalAlignment = 'left' | 'center' | 'right';\n\ntype TableHeaderCellProps = {\n /**\n * Scope of the column\n * @default 'col'\n */\n scope?: HTMLTableCellElement['scope'];\n /**\n * Number of columns the cell should span\n */\n colSpan?: HTMLTableCellElement['colSpan'];\n /**\n * Width of the column\n */\n width?: CSSProperties['width'];\n /**\n * Current sort direction of the column\n */\n sortDirection?: SortDirection;\n /**\n * Horizontal alignment of the content\n * @default 'left'\n */\n align?: HorizontalAlignment;\n /**\n * Whether to truncate content with ellipsis when it overflows\n * @default false\n */\n truncate?: boolean;\n /**\n * Aria label for asceding/descending sort. Variables: {column} - column name\n * @default \"Sort by {column} ascending/descending\"\n */\n sortTranslations?: {\n sortAscending?: string;\n sortDescending?: string;\n };\n /**\n * Whether the column should have a minimum width\n * @default false\n */\n noShrink?: boolean;\n /**\n * State of the cell, used for displaying loading state\n * @default 'idle'\n */\n state?: 'idle' | 'loading';\n /**\n * The aria-label to be applied when state='loading'\n */\n loadingStateAriaLabel?: string;\n /**\n * Handler called when the sort direction changes\n * @param direction - The new sort direction\n */\n onSortChange?: (direction: SortDirection) => void;\n children: ReactNode;\n};\n\nexport const TableHeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n (\n {\n noShrink = false,\n truncate = false,\n align = 'left',\n scope = 'col',\n sortTranslations,\n sortDirection,\n colSpan,\n width,\n state = 'idle',\n loadingStateAriaLabel,\n onSortChange,\n children,\n },\n ref,\n ) => {\n const cellRef = useRef<HTMLTableCellElement>(null);\n useSyncRefs<HTMLTableCellElement>(cellRef, ref);\n\n useTextTruncation(cellRef);\n\n const sortLabel = useMemo(() => {\n if (typeof children === 'string') {\n if (sortDirection === 'ascending') {\n return sortTranslations?.sortDescending ?? `Sort by ${children} descending`;\n }\n return sortTranslations?.sortAscending ?? `Sort by ${children} ascending`;\n }\n\n return sortDirection === 'ascending' ? 'Sort descending' : 'Sort ascending';\n }, [children, sortDirection, sortTranslations]);\n\n const handleSortChange = () => {\n if (!onSortChange) {\n return;\n }\n\n const newDirection: SortDirection =\n sortDirection === undefined || sortDirection === 'descending' ? 'ascending' : 'descending';\n\n onSortChange(newDirection);\n };\n\n return (\n <th\n ref={cellRef}\n style={{ width }}\n className={styles.headerCell}\n scope={scope}\n colSpan={colSpan}\n data-align={align}\n data-truncate={truncate}\n data-no-shrink={noShrink}\n data-sortable={!!onSortChange}\n aria-sort={onSortChange ? sortDirection || 'none' : undefined}\n >\n {state === 'loading' ? (\n <div className={styles.cellContent} aria-live=\"polite\" aria-label={loadingStateAriaLabel}>\n {typeof children === 'string' && truncate ? (\n <span className={styles.buttonText}>{children}</span>\n ) : (\n children\n )}\n <LoadingCircle data-test-id=\"fondue-loading-circle\" size=\"xx-small\" />\n </div>\n ) : onSortChange ? (\n <button\n className={styles.cellContent}\n aria-label={sortLabel}\n data-active={!!sortDirection}\n onClick={handleSortChange}\n type=\"button\"\n >\n {typeof children === 'string' && truncate ? (\n <span className={styles.buttonText}>{children}</span>\n ) : (\n children\n )}\n <Box width={3}>\n {sortDirection === 'ascending' ? (\n <IconArrowUp size=\"12\" />\n ) : sortDirection === 'descending' ? (\n <IconArrowDown size=\"12\" />\n ) : (\n <IconArrowBidirectional className={styles.sortIndicator} size=\"12\" />\n )}\n </Box>\n </button>\n ) : (\n children\n )}\n </th>\n );\n },\n);\nTableHeaderCell.displayName = 'Table.HeaderCell';\n\ntype TableBodyProps = {\n /**\n * Whether the first column should stick to the left when scrolling horizontally\n * @default false\n */\n firstColumnSticky?: boolean;\n /**\n * Whether the last column should stick to the right when scrolling horizontally\n * @default false\n */\n lastColumnSticky?: boolean;\n children: ReactNode;\n 'aria-busy'?: boolean;\n};\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ firstColumnSticky = false, lastColumnSticky = false, children, 'aria-busy': ariaBusy }, ref) => {\n return (\n <tbody\n ref={ref}\n className={styles.body}\n data-first-column-sticky={firstColumnSticky}\n data-last-column-sticky={lastColumnSticky}\n aria-busy={ariaBusy}\n >\n {children}\n </tbody>\n );\n },\n);\nTableBody.displayName = 'Table.Body';\n\ntype TableRowProps = {\n /**\n * Whether the row is in a selected state\n * @default false\n */\n selected?: boolean;\n /**\n * Whether to disable interactions for this row\n * @default false\n */\n disabled?: boolean;\n /**\n * Handler called when the row is clicked or activated via keyboard\n * If provided, the row will be hoverable and interactive\n */\n onClick?: (selected: boolean) => void;\n /**\n * Content to be rendered within the row\n */\n children: ReactNode;\n /**\n * Accessible label for the row\n */\n 'aria-label'?: string;\n 'data-test-id'?: string;\n};\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(\n (\n { disabled = false, selected = false, onClick, children, 'aria-label': ariaLabel, 'data-test-id': dataTestId },\n ref,\n ) => {\n const isInteractive = onClick !== undefined && !disabled;\n\n const handleClick = (event?: MouseEvent) => {\n if (disabled) {\n return;\n }\n\n if (shouldIgnoreRowClick(event)) {\n return;\n }\n\n if (onClick) {\n onClick(selected);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!isInteractive) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleClick();\n }\n };\n\n return (\n <tr\n ref={ref}\n className={styles.row}\n tabIndex={0}\n role={isInteractive ? 'button' : 'row'}\n data-disabled={disabled}\n data-interactive={isInteractive}\n data-selected={!isInteractive ? selected : undefined}\n aria-disabled={disabled}\n aria-label={ariaLabel}\n aria-selected={!isInteractive ? selected : undefined}\n onClick={isInteractive ? handleClick : undefined}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n data-test-id={dataTestId}\n >\n {children}\n </tr>\n );\n },\n);\nTableRow.displayName = 'Table.Row';\n\ntype TableRowCellProps = {\n /**\n * Number of columns the cell should span\n */\n colSpan?: HTMLTableCellElement['colSpan'];\n /**\n * Whether to truncate content with ellipsis when it overflows\n * @default false\n */\n truncate?: boolean;\n /**\n * Horizontal alignment of the content\n * @default 'left'\n */\n align?: HorizontalAlignment;\n children: ReactNode;\n 'aria-label'?: string;\n};\n\nexport const TableRowCell = forwardRef<HTMLTableCellElement, TableRowCellProps>(\n ({ colSpan, truncate, align = 'left', children, 'aria-label': ariaLabel }, ref): ReactElement => {\n const cellRef = useRef<HTMLTableCellElement>(null);\n useSyncRefs<HTMLTableCellElement>(cellRef, ref);\n\n useTextTruncation(cellRef);\n\n return (\n <td\n ref={cellRef}\n className={styles.rowCell}\n colSpan={colSpan}\n data-align={align}\n data-truncate={truncate}\n aria-label={ariaLabel}\n >\n {children}\n </td>\n );\n },\n);\nTableRowCell.displayName = 'Table.RowCell';\n\nexport const Table = {\n Root: TableRoot,\n Caption: TableCaption,\n Header: TableHeader,\n HeaderCell: TableHeaderCell,\n Body: TableBody,\n Row: TableRow,\n RowCell: TableRowCell,\n};\n"],"names":["TableRoot","forwardRef","layout","fontSize","sticky","children","props","ref","legacyStickyHeader","legacyStickyLeftColumn","jsx","styles","handleKeyDown","TableCaption","TableHeader","ariaLabel","ariaBusy","TableHeaderCell","noShrink","truncate","align","scope","sortTranslations","sortDirection","colSpan","width","state","loadingStateAriaLabel","onSortChange","cellRef","useRef","useSyncRefs","useTextTruncation","sortLabel","useMemo","handleSortChange","jsxs","LoadingCircle","Box","IconArrowUp","IconArrowDown","IconArrowBidirectional","TableBody","firstColumnSticky","lastColumnSticky","TableRow","disabled","selected","onClick","dataTestId","isInteractive","handleClick","event","shouldIgnoreRowClick","TableRowCell","Table"],"mappings":"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"}
1
+ {"version":3,"file":"fondue-components25.js","sources":["../src/components/Table/Table.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconArrowBidirectional, IconArrowDown, IconArrowUp } from '@frontify/fondue-icons';\nimport {\n type AriaAttributes,\n forwardRef,\n useMemo,\n useRef,\n useEffect,\n useState,\n type CSSProperties,\n type KeyboardEvent,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react';\n\nimport { useSyncRefs } from '#/hooks/useSyncRefs';\nimport { useTextTruncation } from '#/hooks/useTextTruncation';\nimport { useTranslation } from '#/hooks/useTranslation';\nimport { type CommonAriaAttrs } from '#/utilities/types';\n\nimport { Box } from '../Box/Box';\nimport { LoadingCircle } from '../LoadingCircle/LoadingCircle';\n\nimport styles from './styles/table.module.scss';\nimport { handleKeyDown, shouldIgnoreRowClick } from './utils';\n\ntype TableRootProps = {\n /**\n * Whether the table should have a fixed or auto layout\n * @default 'auto'\n */\n layout?: 'auto' | 'fixed';\n /**\n * Font size of the table content\n * @default 'small'\n */\n fontSize?: 'small' | 'medium';\n /**\n * Additional spacing between table cells (both horizontal and vertical)\n *\n * This value is added to the default cell spacing. For example, with `gutter=\"48px\"`,\n * cells will have 48px of additional space between them in both directions\n * (24px added to each side).\n *\n * Accepts any CSS length value with units (e.g., '16px', '1rem', '48px')\n *\n * **Important:** Always include a unit, even for zero (use '0px', not '0')\n * @default '0px'\n */\n gutter?: CSSProperties['borderSpacing'];\n /**\n * Whether header should stick to the top when scrolling\n * @deprecated Use `Table.Header sticky` prop instead. For sticky columns, use `Table.Body firstColumnSticky` or `lastColumnSticky` props\n */\n sticky?: 'head' | 'col' | 'both';\n /**\n * Whether to remove the top and bottom borders from the table\n * @default false\n */\n noBorder?: boolean;\n children: ReactNode;\n} & CommonAriaAttrs &\n Pick<AriaAttributes, 'aria-multiselectable'>;\n\nexport const TableRoot = forwardRef<HTMLTableElement, TableRootProps>(\n ({ layout = 'auto', fontSize = 'medium', gutter = '0px', sticky, noBorder = false, children, ...props }, ref) => {\n const tableRef = useRef<HTMLTableElement>(null);\n const [hasHorizontalOverflow, setHasHorizontalOverflow] = useState(false);\n\n useSyncRefs<HTMLTableElement>(tableRef, ref);\n\n // Handle deprecated `sticky` prop for backward compatibility\n const legacyStickyHeader = sticky === 'head' || sticky === 'both';\n const legacyStickyLeftColumn = sticky === 'col' || sticky === 'both';\n\n useEffect(() => {\n const table = tableRef.current;\n if (!table) {\n return;\n }\n\n const checkOverflow = () => {\n const parent = table.parentElement;\n if (!parent) {\n return;\n }\n\n const tableWidth = table.scrollWidth;\n const parentWidth = parent.clientWidth;\n setHasHorizontalOverflow(tableWidth > parentWidth);\n };\n\n checkOverflow();\n\n const resizeObserver = new ResizeObserver(checkOverflow);\n resizeObserver.observe(table);\n if (table.parentElement) {\n resizeObserver.observe(table.parentElement);\n }\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [children]);\n\n return (\n // eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions\n <table\n ref={tableRef}\n className={styles.table}\n style={{\n // @ts-expect-error CSS custom properties are not in CSSProperties type\n '--table-gutter': gutter,\n }}\n data-layout={layout}\n data-font-size={fontSize}\n data-sticky-header={legacyStickyHeader}\n data-sticky-left-column={legacyStickyLeftColumn}\n data-no-border={noBorder}\n data-has-horizontal-overflow={hasHorizontalOverflow}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </table>\n );\n },\n);\nTableRoot.displayName = 'Table.Root';\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, { children: ReactNode }>(({ children }, ref) => {\n return (\n <caption ref={ref} className={styles.caption}>\n {children}\n </caption>\n );\n});\nTableCaption.displayName = 'Table.Caption';\n\ntype TableHeaderProps = {\n /**\n * Whether the header should stick to the top when scrolling\n * @default false\n */\n sticky?: boolean;\n children: ReactNode;\n 'aria-label'?: string;\n 'aria-busy'?: boolean;\n};\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ sticky = false, children, 'aria-label': ariaLabel, 'aria-busy': ariaBusy }, ref) => {\n return (\n <thead ref={ref} className={styles.header} data-sticky={sticky} aria-label={ariaLabel} aria-busy={ariaBusy}>\n {children}\n </thead>\n );\n },\n);\nTableHeader.displayName = 'Table.Header';\n\ntype SortDirection = 'ascending' | 'descending' | undefined;\ntype HorizontalAlignment = 'left' | 'center' | 'right';\n\ntype TableHeaderCellProps = {\n /**\n * Scope of the column\n * @default 'col'\n */\n scope?: HTMLTableCellElement['scope'];\n /**\n * Number of columns the cell should span\n */\n colSpan?: HTMLTableCellElement['colSpan'];\n /**\n * Width of the column\n */\n width?: CSSProperties['width'];\n /**\n * Current sort direction of the column\n */\n sortDirection?: SortDirection;\n /**\n * Horizontal alignment of the content\n * @default 'left'\n */\n align?: HorizontalAlignment;\n /**\n * Whether to truncate content with ellipsis when it overflows\n * @default false\n */\n truncate?: boolean;\n /**\n * Aria label for asceding/descending sort. Variables: {column} - column name\n * @default \"Sort by {column} ascending/descending\"\n */\n sortTranslations?: {\n sortAscending?: string;\n sortDescending?: string;\n };\n /**\n * Whether the column should have a minimum width\n * @default false\n */\n noShrink?: boolean;\n /**\n * State of the cell, used for displaying loading state\n * @default 'idle'\n */\n state?: 'idle' | 'loading';\n /**\n * The aria-label to be applied when state='loading'\n */\n loadingStateAriaLabel?: string;\n /**\n * Handler called when the sort direction changes\n * @param direction - The new sort direction\n */\n onSortChange?: (direction: SortDirection) => void;\n children: ReactNode;\n};\n\nexport const TableHeaderCell = forwardRef<HTMLTableCellElement, TableHeaderCellProps>(\n (\n {\n noShrink = false,\n truncate = false,\n align = 'left',\n scope = 'col',\n sortTranslations,\n sortDirection,\n colSpan,\n width,\n state = 'idle',\n loadingStateAriaLabel,\n onSortChange,\n children,\n },\n ref,\n ) => {\n const { t } = useTranslation();\n const cellRef = useRef<HTMLTableCellElement>(null);\n useSyncRefs<HTMLTableCellElement>(cellRef, ref);\n\n useTextTruncation(cellRef);\n\n const sortLabel = useMemo(() => {\n if (typeof children === 'string') {\n if (sortDirection === 'ascending') {\n return sortTranslations?.sortDescending ?? t('Table_sortByDescending', { column: children });\n }\n return sortTranslations?.sortAscending ?? t('Table_sortByAscending', { column: children });\n }\n\n return sortDirection === 'ascending' ? t('Table_sortDescending') : t('Table_sortAscending');\n }, [children, sortDirection, sortTranslations, t]);\n\n const handleSortChange = () => {\n if (!onSortChange) {\n return;\n }\n\n const newDirection: SortDirection =\n sortDirection === undefined || sortDirection === 'descending' ? 'ascending' : 'descending';\n\n onSortChange(newDirection);\n };\n\n return (\n <th\n ref={cellRef}\n style={{ width }}\n className={styles.headerCell}\n scope={scope}\n colSpan={colSpan}\n data-align={align}\n data-truncate={truncate}\n data-no-shrink={noShrink}\n data-sortable={!!onSortChange}\n aria-sort={onSortChange ? sortDirection || 'none' : undefined}\n >\n {state === 'loading' ? (\n <div className={styles.cellContent} aria-live=\"polite\" aria-label={loadingStateAriaLabel}>\n {typeof children === 'string' && truncate ? (\n <span className={styles.buttonText}>{children}</span>\n ) : (\n children\n )}\n <LoadingCircle data-test-id=\"fondue-loading-circle\" size=\"xx-small\" />\n </div>\n ) : onSortChange ? (\n <button\n className={styles.cellContent}\n aria-label={sortLabel}\n data-active={!!sortDirection}\n onClick={handleSortChange}\n type=\"button\"\n >\n {typeof children === 'string' && truncate ? (\n <span className={styles.buttonText}>{children}</span>\n ) : (\n children\n )}\n <Box width={3}>\n {sortDirection === 'ascending' ? (\n <IconArrowUp size=\"12\" />\n ) : sortDirection === 'descending' ? (\n <IconArrowDown size=\"12\" />\n ) : (\n <IconArrowBidirectional className={styles.sortIndicator} size=\"12\" />\n )}\n </Box>\n </button>\n ) : (\n children\n )}\n </th>\n );\n },\n);\nTableHeaderCell.displayName = 'Table.HeaderCell';\n\ntype TableBodyProps = {\n /**\n * Whether the first column should stick to the left when scrolling horizontally\n * @default false\n */\n firstColumnSticky?: boolean;\n /**\n * Whether the last column should stick to the right when scrolling horizontally\n * @default false\n */\n lastColumnSticky?: boolean;\n children: ReactNode;\n 'aria-busy'?: boolean;\n};\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ firstColumnSticky = false, lastColumnSticky = false, children, 'aria-busy': ariaBusy }, ref) => {\n return (\n <tbody\n ref={ref}\n className={styles.body}\n data-first-column-sticky={firstColumnSticky}\n data-last-column-sticky={lastColumnSticky}\n aria-busy={ariaBusy}\n >\n {children}\n </tbody>\n );\n },\n);\nTableBody.displayName = 'Table.Body';\n\ntype TableRowProps = {\n /**\n * Whether the row is in a selected state\n * @default false\n */\n selected?: boolean;\n /**\n * Whether to disable interactions for this row\n * @default false\n */\n disabled?: boolean;\n /**\n * Handler called when the row is clicked or activated via keyboard\n * If provided, the row will be hoverable and interactive\n */\n onClick?: (selected: boolean) => void;\n /**\n * Content to be rendered within the row\n */\n children: ReactNode;\n /**\n * Accessible label for the row\n */\n 'aria-label'?: string;\n 'data-test-id'?: string;\n};\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(\n (\n { disabled = false, selected = false, onClick, children, 'aria-label': ariaLabel, 'data-test-id': dataTestId },\n ref,\n ) => {\n const isInteractive = onClick !== undefined && !disabled;\n\n const handleClick = (event?: MouseEvent) => {\n if (disabled) {\n return;\n }\n\n if (shouldIgnoreRowClick(event)) {\n return;\n }\n\n if (onClick) {\n onClick(selected);\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent<HTMLTableRowElement>) => {\n if (!isInteractive) {\n return;\n }\n\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handleClick();\n }\n };\n\n return (\n <tr\n ref={ref}\n className={styles.row}\n tabIndex={0}\n role={isInteractive ? 'button' : 'row'}\n data-disabled={disabled}\n data-interactive={isInteractive}\n data-selected={!isInteractive ? selected : undefined}\n aria-disabled={disabled}\n aria-label={ariaLabel}\n aria-selected={!isInteractive ? selected : undefined}\n onClick={isInteractive ? handleClick : undefined}\n onKeyDown={isInteractive ? handleKeyDown : undefined}\n data-test-id={dataTestId}\n >\n {children}\n </tr>\n );\n },\n);\nTableRow.displayName = 'Table.Row';\n\ntype TableRowCellProps = {\n /**\n * Number of columns the cell should span\n */\n colSpan?: HTMLTableCellElement['colSpan'];\n /**\n * Whether to truncate content with ellipsis when it overflows\n * @default false\n */\n truncate?: boolean;\n /**\n * Horizontal alignment of the content\n * @default 'left'\n */\n align?: HorizontalAlignment;\n children: ReactNode;\n 'aria-label'?: string;\n};\n\nexport const TableRowCell = forwardRef<HTMLTableCellElement, TableRowCellProps>(\n ({ colSpan, truncate, align = 'left', children, 'aria-label': ariaLabel }, ref): ReactElement => {\n const cellRef = useRef<HTMLTableCellElement>(null);\n useSyncRefs<HTMLTableCellElement>(cellRef, ref);\n\n useTextTruncation(cellRef);\n\n return (\n <td\n ref={cellRef}\n className={styles.rowCell}\n colSpan={colSpan}\n data-align={align}\n data-truncate={truncate}\n aria-label={ariaLabel}\n >\n {children}\n </td>\n );\n },\n);\nTableRowCell.displayName = 'Table.RowCell';\n\nexport const Table = {\n Root: TableRoot,\n Caption: TableCaption,\n Header: TableHeader,\n HeaderCell: TableHeaderCell,\n Body: TableBody,\n Row: TableRow,\n RowCell: TableRowCell,\n};\n"],"names":["TableRoot","forwardRef","layout","fontSize","gutter","sticky","noBorder","children","props","ref","tableRef","useRef","hasHorizontalOverflow","setHasHorizontalOverflow","useState","useSyncRefs","legacyStickyHeader","legacyStickyLeftColumn","useEffect","table","checkOverflow","parent","tableWidth","parentWidth","resizeObserver","jsx","styles","handleKeyDown","TableCaption","TableHeader","ariaLabel","ariaBusy","TableHeaderCell","noShrink","truncate","align","scope","sortTranslations","sortDirection","colSpan","width","state","loadingStateAriaLabel","onSortChange","t","useTranslation","cellRef","useTextTruncation","sortLabel","useMemo","handleSortChange","jsxs","LoadingCircle","Box","IconArrowUp","IconArrowDown","IconArrowBidirectional","TableBody","firstColumnSticky","lastColumnSticky","TableRow","disabled","selected","onClick","dataTestId","isInteractive","handleClick","event","shouldIgnoreRowClick","TableRowCell","Table"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs as g, jsx as t, Fragment as h } from "react/jsx-runtime";
2
2
  import { IconPlus as z, IconCross as B } from "@frontify/fondue-icons";
3
3
  import { useState as $, Children as T, isValidElement as x } from "react";
4
- import s from "./fondue-components77.js";
4
+ import s from "./fondue-components78.js";
5
5
  const H = ({
6
6
  "aria-label": e,
7
7
  "data-test-id": n = "tag",
@@ -2,12 +2,12 @@ import { jsx as a, jsxs as b } from "react/jsx-runtime";
2
2
  import { createContext as E, forwardRef as l, useContext as f, useRef as w, useEffect as q, useMemo as I, useCallback as B, createElement as z } from "react";
3
3
  import { IconDotsHorizontal as F } from "@frontify/fondue-icons";
4
4
  import * as c from "@radix-ui/react-tabs";
5
- import { useControllableState as H } from "./fondue-components64.js";
5
+ import { useControllableState as H } from "./fondue-components65.js";
6
6
  import { Button as M } from "./fondue-components6.js";
7
7
  import { Dropdown as d } from "./fondue-components11.js";
8
8
  import { useFondueTheme as W } from "./fondue-components31.js";
9
- import { useTabTriggers as G } from "./fondue-components78.js";
10
- import n from "./fondue-components79.js";
9
+ import { useTabTriggers as G } from "./fondue-components79.js";
10
+ import n from "./fondue-components80.js";
11
11
  const m = E({
12
12
  value: "",
13
13
  disabled: !1
@@ -1,7 +1,7 @@
1
1
  import { jsx as p } from "react/jsx-runtime";
2
2
  import { forwardRef as l } from "react";
3
- import { cn as c } from "./fondue-components38.js";
4
- import t from "./fondue-components80.js";
3
+ import { cn as c } from "./fondue-components39.js";
4
+ import t from "./fondue-components81.js";
5
5
  const x = l(
6
6
  ({
7
7
  children: e,
@@ -1,8 +1,8 @@
1
1
  import { jsxs as m, jsx as s } from "react/jsx-runtime";
2
2
  import { IconCheckMark as h, IconExclamationMarkTriangle as S } from "@frontify/fondue-icons";
3
3
  import { forwardRef as f, useRef as T } from "react";
4
- import { cn as u } from "./fondue-components38.js";
5
- import a from "./fondue-components81.js";
4
+ import { cn as u } from "./fondue-components39.js";
5
+ import a from "./fondue-components82.js";
6
6
  const x = ({
7
7
  children: i,
8
8
  className: c,
@@ -1,7 +1,7 @@
1
1
  import { jsxs as z, jsx as o } from "react/jsx-runtime";
2
2
  import { IconCheckMark as $, IconExclamationMarkTriangle as b, IconCross as q } from "@frontify/fondue-icons";
3
3
  import { useRef as F, useState as x, useEffect as B } from "react";
4
- import l from "./fondue-components82.js";
4
+ import l from "./fondue-components83.js";
5
5
  const Q = ({
6
6
  "data-test-id": w = "fondue-textarea",
7
7
  autocomplete: D,
@@ -1,16 +1,34 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import i from "./fondue-components83.js";
3
- import { Slot as c } from "@radix-ui/react-slot";
4
- import { createContext as a, useContext as u, useMemo as p } from "react";
5
- const o = a({ theme: "light", dir: "ltr" });
1
+ import { jsx as m } from "react/jsx-runtime";
2
+ import a from "./fondue-components84.js";
3
+ import { Slot as p } from "@radix-ui/react-slot";
4
+ import { createContext as u, useContext as x, useMemo as f } from "react";
5
+ import { enUS as n } from "./fondue-components85.js";
6
+ const o = u({
7
+ theme: "light",
8
+ dir: "ltr",
9
+ translations: n
10
+ });
6
11
  o.displayName = "ThemeContext";
7
- const C = () => u(o), v = ({ children: m, theme: e = "light", dir: t = "ltr", asChild: s = !1 }) => {
8
- const n = s ? c : "div", l = p(() => ({ theme: e, dir: t }), [e, t]);
9
- return /* @__PURE__ */ r(o.Provider, { value: l, children: /* @__PURE__ */ r(n, { dir: t, className: i[e], children: m }) });
12
+ const g = () => x(o), y = ({
13
+ children: s,
14
+ theme: e = "light",
15
+ dir: t = "ltr",
16
+ translations: r = n,
17
+ asChild: l = !1
18
+ }) => {
19
+ const i = l ? p : "div", c = f(
20
+ () => ({
21
+ theme: e,
22
+ dir: t,
23
+ translations: r
24
+ }),
25
+ [t, e, r]
26
+ );
27
+ return /* @__PURE__ */ m(o.Provider, { value: c, children: /* @__PURE__ */ m(i, { dir: t, className: a[e], children: s }) });
10
28
  };
11
29
  export {
12
30
  o as ThemeContext,
13
- v as ThemeProvider,
14
- C as useFondueTheme
31
+ y as ThemeProvider,
32
+ g as useFondueTheme
15
33
  };
16
34
  //# sourceMappingURL=fondue-components31.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components31.js","sources":["../src/components/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport styles from '@frontify/fondue-tokens/theme-tokens';\nimport { Slot } from '@radix-ui/react-slot';\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\n\ntype AvailableTheme = keyof typeof styles;\n\ntype ThemeProviderProps = {\n children: ReactNode;\n /**\n * The theme to apply\n * @default \"light\"\n * */\n theme: AvailableTheme;\n /**\n * Direction to apply to the theme\n * @default \"ltr\"\n */\n dir: 'ltr' | 'rtl';\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n * @default false\n */\n asChild?: boolean;\n};\n\nexport const ThemeContext = createContext<Pick<ThemeProviderProps, 'theme' | 'dir'>>({ theme: 'light', dir: 'ltr' });\nThemeContext.displayName = 'ThemeContext';\n\nexport const useFondueTheme = () => {\n return useContext(ThemeContext);\n};\n\nexport const ThemeProvider = ({ children, theme = 'light', dir = 'ltr', asChild = false }: ThemeProviderProps) => {\n const Comp = asChild ? Slot : 'div';\n\n const contextValue = useMemo(() => ({ theme, dir }), [theme, dir]);\n\n return (\n <ThemeContext.Provider value={contextValue}>\n <Comp dir={dir} className={styles[theme]}>\n {children}\n </Comp>\n </ThemeContext.Provider>\n );\n};\n"],"names":["ThemeContext","createContext","useFondueTheme","useContext","ThemeProvider","children","theme","dir","asChild","Comp","Slot","contextValue","useMemo","jsx","styles"],"mappings":";;;;AA2BO,MAAMA,IAAeC,EAAyD,EAAE,OAAO,SAAS,KAAK,OAAO;AACnHD,EAAa,cAAc;AAEpB,MAAME,IAAiB,MACnBC,EAAWH,CAAY,GAGrBI,IAAgB,CAAC,EAAE,UAAAC,GAAU,OAAAC,IAAQ,SAAS,KAAAC,IAAM,OAAO,SAAAC,IAAU,SAAgC;AAC9G,QAAMC,IAAOD,IAAUE,IAAO,OAExBC,IAAeC,EAAQ,OAAO,EAAE,OAAAN,GAAO,KAAAC,MAAQ,CAACD,GAAOC,CAAG,CAAC;AAEjE,SACI,gBAAAM,EAACb,EAAa,UAAb,EAAsB,OAAOW,GAC1B,UAAA,gBAAAE,EAACJ,GAAA,EAAK,KAAAF,GAAU,WAAWO,EAAOR,CAAK,GAClC,UAAAD,GACL,GACJ;AAER;"}
1
+ {"version":3,"file":"fondue-components31.js","sources":["../src/components/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport styles from '@frontify/fondue-tokens/theme-tokens';\nimport { Slot } from '@radix-ui/react-slot';\nimport { createContext, useContext, useMemo, type ReactNode } from 'react';\n\nimport { enUS, type Translations } from '../../locales';\n\ntype AvailableTheme = keyof typeof styles;\n\ntype ThemeProviderProps = {\n children: ReactNode;\n /**\n * The theme to apply\n * @default \"light\"\n * */\n theme?: AvailableTheme;\n /**\n * Direction to apply to the theme\n * @default \"ltr\"\n */\n dir?: 'ltr' | 'rtl';\n /**\n * Translations object to use for component strings.\n * Import from '@frontify/fondue/components/locales' or provide your own.\n * Must be a complete Translations object.\n * @default \"enUS\"\n * @example\n * ```tsx\n * import { deDE } from '@frontify/fondue/components/locales';\n * <ThemeProvider translations={deDE}>...</ThemeProvider>\n * ```\n */\n translations?: Translations;\n /**\n * Change the default rendered element for the one passed as a child, merging their props and behavior.\n * @default false\n */\n asChild?: boolean;\n};\n\ntype ThemeContextValue = {\n theme: AvailableTheme;\n dir: 'ltr' | 'rtl';\n translations: Translations;\n};\n\nexport const ThemeContext = createContext<ThemeContextValue>({\n theme: 'light',\n dir: 'ltr',\n translations: enUS,\n});\nThemeContext.displayName = 'ThemeContext';\n\nexport const useFondueTheme = () => {\n return useContext(ThemeContext);\n};\n\nexport const ThemeProvider = ({\n children,\n theme = 'light',\n dir = 'ltr',\n translations = enUS,\n asChild = false,\n}: ThemeProviderProps) => {\n const Comp = asChild ? Slot : 'div';\n\n const contextValue = useMemo(\n () => ({\n theme,\n dir,\n translations,\n }),\n [dir, theme, translations],\n );\n\n return (\n <ThemeContext.Provider value={contextValue}>\n <Comp dir={dir} className={styles[theme]}>\n {children}\n </Comp>\n </ThemeContext.Provider>\n );\n};\n"],"names":["ThemeContext","createContext","enUS","useFondueTheme","useContext","ThemeProvider","children","theme","dir","translations","asChild","Comp","Slot","contextValue","useMemo","jsx","styles"],"mappings":";;;;;AA+CO,MAAMA,IAAeC,EAAiC;AAAA,EACzD,OAAO;AAAA,EACP,KAAK;AAAA,EACL,cAAcC;AAClB,CAAC;AACDF,EAAa,cAAc;AAEpB,MAAMG,IAAiB,MACnBC,EAAWJ,CAAY,GAGrBK,IAAgB,CAAC;AAAA,EAC1B,UAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,KAAAC,IAAM;AAAA,EACN,cAAAC,IAAeP;AAAA,EACf,SAAAQ,IAAU;AACd,MAA0B;AACtB,QAAMC,IAAOD,IAAUE,IAAO,OAExBC,IAAeC;AAAA,IACjB,OAAO;AAAA,MACH,OAAAP;AAAA,MACA,KAAAC;AAAA,MACA,cAAAC;AAAA,IAAA;AAAA,IAEJ,CAACD,GAAKD,GAAOE,CAAY;AAAA,EAAA;AAG7B,SACI,gBAAAM,EAACf,EAAa,UAAb,EAAsB,OAAOa,GAC1B,UAAA,gBAAAE,EAACJ,GAAA,EAAK,KAAAH,GAAU,WAAWQ,EAAOT,CAAK,GAClC,UAAAD,GACL,GACJ;AAER;"}
@@ -1,9 +1,9 @@
1
1
  import { jsx as o, jsxs as y } from "react/jsx-runtime";
2
2
  import * as r from "@radix-ui/react-tooltip";
3
3
  import { forwardRef as l } from "react";
4
- import { cn as R } from "./fondue-components38.js";
4
+ import { cn as R } from "./fondue-components39.js";
5
5
  import { useFondueTheme as N, ThemeProvider as x } from "./fondue-components31.js";
6
- import s from "./fondue-components84.js";
6
+ import s from "./fondue-components86.js";
7
7
  const p = ({ children: t, enterDelay: e = 700, open: i, onOpenChange: n }) => /* @__PURE__ */ o(r.Provider, { children: /* @__PURE__ */ o(r.Root, { delayDuration: e, open: i, onOpenChange: n, children: t }) });
8
8
  p.displayName = "Tooltip.Root";
9
9
  const m = ({ asChild: t = !1, children: e, "data-test-id": i = "fondue-tooltip-trigger" }, n) => /* @__PURE__ */ o(
@@ -1,4 +1,4 @@
1
- const o = "_root_eybkh_2", c = "_accordionItem_eybkh_23", n = "_accordionTrigger_eybkh_29", r = "_accordionHeader_eybkh_34", t = "_accordionSlot_eybkh_41", e = "_accordionCaret_eybkh_66", a = "_accordionTriggerContent_eybkh_74", i = "_accordionContent_eybkh_79", d = "_accordionContentText_eybkh_108", _ = {
1
+ const o = "_root_12wzh_2", c = "_accordionItem_12wzh_23", n = "_accordionTrigger_12wzh_29", r = "_accordionHeader_12wzh_34", t = "_accordionSlot_12wzh_42", e = "_accordionCaret_12wzh_69", a = "_accordionTriggerContent_12wzh_77", i = "_accordionContent_12wzh_82", d = "_accordionContentText_12wzh_111", _ = {
2
2
  root: o,
3
3
  accordionItem: c,
4
4
  accordionTrigger: n,
@@ -1,11 +1,27 @@
1
- import { jsx as r } from "react/jsx-runtime";
2
- import s from "./fondue-components85.js";
3
- import { colorToCss as e } from "./fondue-components86.js";
4
- const a = ["default", "positive", "highlight", "warning", "negative"], i = (t) => typeof t == "string" && a.includes(t), p = ({ status: t }) => {
5
- const o = i(t) ? { "data-status": t } : { style: { backgroundColor: typeof t == "string" ? t : e(t) || "transparent" } };
6
- return /* @__PURE__ */ r("div", { "data-test-id": "badge-status", className: s.root, ...o });
1
+ import { useContext as i, useCallback as u } from "react";
2
+ import { ThemeContext as c } from "./fondue-components31.js";
3
+ const d = () => {
4
+ const { translations: r } = i(c);
5
+ return {
6
+ /** Translation function */
7
+ t: u(
8
+ (o, e) => {
9
+ const n = r[o];
10
+ if (n === void 0)
11
+ return process.env.NODE_ENV !== "production" && console.warn(`[Fondue] Translation key "${o}" not found`), o;
12
+ if (typeof n != "string")
13
+ return process.env.NODE_ENV !== "production" && console.warn(`[Fondue] Translation value for key "${o}" is not a string`), o;
14
+ let t = n;
15
+ if (e)
16
+ for (const [s, a] of Object.entries(e))
17
+ t = t.replaceAll(`\${${s}}`, a);
18
+ return t;
19
+ },
20
+ [r]
21
+ )
22
+ };
7
23
  };
8
24
  export {
9
- p as BadgeStatus
25
+ d as useTranslation
10
26
  };
11
27
  //# sourceMappingURL=fondue-components34.js.map