@frontify/fondue-components 27.0.1 → 29.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 (304) hide show
  1. package/dist/fondue-components.js +62 -56
  2. package/dist/fondue-components.js.map +1 -1
  3. package/dist/fondue-components10.js +1 -1
  4. package/dist/fondue-components100.js +23 -6
  5. package/dist/fondue-components100.js.map +1 -1
  6. package/dist/fondue-components101.js +34 -12
  7. package/dist/fondue-components101.js.map +1 -1
  8. package/dist/fondue-components102.js +10 -70
  9. package/dist/fondue-components102.js.map +1 -1
  10. package/dist/fondue-components103.js +67 -14
  11. package/dist/fondue-components103.js.map +1 -1
  12. package/dist/fondue-components104.js +15 -7
  13. package/dist/fondue-components104.js.map +1 -1
  14. package/dist/fondue-components105.js +25 -88
  15. package/dist/fondue-components105.js.map +1 -1
  16. package/dist/fondue-components106.js +18 -80
  17. package/dist/fondue-components106.js.map +1 -1
  18. package/dist/fondue-components107.js +24 -30
  19. package/dist/fondue-components107.js.map +1 -1
  20. package/dist/fondue-components108.js +8 -20
  21. package/dist/fondue-components108.js.map +1 -1
  22. package/dist/fondue-components109.js +30 -39
  23. package/dist/fondue-components109.js.map +1 -1
  24. package/dist/fondue-components11.js +3 -3
  25. package/dist/fondue-components110.js +10 -0
  26. package/dist/fondue-components110.js.map +1 -0
  27. package/dist/fondue-components111.js +8 -0
  28. package/dist/fondue-components111.js.map +1 -0
  29. package/dist/fondue-components112.js +8 -0
  30. package/dist/fondue-components112.js.map +1 -0
  31. package/dist/fondue-components113.js +20 -0
  32. package/dist/fondue-components113.js.map +1 -0
  33. package/dist/fondue-components114.js +17 -0
  34. package/dist/fondue-components114.js.map +1 -0
  35. package/dist/fondue-components115.js +18 -0
  36. package/dist/fondue-components115.js.map +1 -0
  37. package/dist/fondue-components116.js +114 -0
  38. package/dist/fondue-components116.js.map +1 -0
  39. package/dist/fondue-components117.js +16 -0
  40. package/dist/fondue-components117.js.map +1 -0
  41. package/dist/fondue-components118.js +20 -0
  42. package/dist/fondue-components118.js.map +1 -0
  43. package/dist/fondue-components119.js +16 -0
  44. package/dist/fondue-components119.js.map +1 -0
  45. package/dist/fondue-components12.js +7 -37
  46. package/dist/fondue-components12.js.map +1 -1
  47. package/dist/fondue-components120.js +130 -0
  48. package/dist/fondue-components120.js.map +1 -0
  49. package/dist/fondue-components121.js +14 -0
  50. package/dist/fondue-components121.js.map +1 -0
  51. package/dist/fondue-components122.js +39 -0
  52. package/dist/fondue-components122.js.map +1 -0
  53. package/dist/fondue-components123.js +220 -0
  54. package/dist/fondue-components123.js.map +1 -0
  55. package/dist/fondue-components124.js +22 -0
  56. package/dist/fondue-components124.js.map +1 -0
  57. package/dist/fondue-components125.js +20 -0
  58. package/dist/fondue-components125.js.map +1 -0
  59. package/dist/fondue-components126.js +154 -0
  60. package/dist/fondue-components126.js.map +1 -0
  61. package/dist/fondue-components127.js +48 -0
  62. package/dist/fondue-components127.js.map +1 -0
  63. package/dist/fondue-components128.js +173 -0
  64. package/dist/fondue-components128.js.map +1 -0
  65. package/dist/fondue-components129.js +63 -0
  66. package/dist/fondue-components129.js.map +1 -0
  67. package/dist/fondue-components13.js +59 -118
  68. package/dist/fondue-components13.js.map +1 -1
  69. package/dist/fondue-components130.js +12 -0
  70. package/dist/fondue-components130.js.map +1 -0
  71. package/dist/fondue-components131.js +259 -0
  72. package/dist/fondue-components131.js.map +1 -0
  73. package/dist/fondue-components132.js +32 -0
  74. package/dist/fondue-components132.js.map +1 -0
  75. package/dist/fondue-components134.js +44 -0
  76. package/dist/fondue-components134.js.map +1 -0
  77. package/dist/fondue-components135.js +9 -0
  78. package/dist/fondue-components135.js.map +1 -0
  79. package/dist/fondue-components136.js +15 -0
  80. package/dist/fondue-components136.js.map +1 -0
  81. package/dist/fondue-components137.js +74 -0
  82. package/dist/fondue-components137.js.map +1 -0
  83. package/dist/fondue-components138.js +18 -0
  84. package/dist/fondue-components138.js.map +1 -0
  85. package/dist/fondue-components139.js +10 -0
  86. package/dist/fondue-components139.js.map +1 -0
  87. package/dist/fondue-components14.js +21 -21
  88. package/dist/fondue-components14.js.map +1 -1
  89. package/dist/fondue-components140.js +92 -0
  90. package/dist/fondue-components140.js.map +1 -0
  91. package/dist/fondue-components141.js +84 -0
  92. package/dist/fondue-components141.js.map +1 -0
  93. package/dist/fondue-components142.js +34 -0
  94. package/dist/fondue-components142.js.map +1 -0
  95. package/dist/fondue-components143.js +22 -0
  96. package/dist/fondue-components143.js.map +1 -0
  97. package/dist/fondue-components144.js +73 -0
  98. package/dist/fondue-components144.js.map +1 -0
  99. package/dist/fondue-components145.js +1355 -0
  100. package/dist/fondue-components145.js.map +1 -0
  101. package/dist/fondue-components146.js +944 -0
  102. package/dist/fondue-components146.js.map +1 -0
  103. package/dist/fondue-components147.js +201 -0
  104. package/dist/fondue-components147.js.map +1 -0
  105. package/dist/fondue-components148.js +24 -0
  106. package/dist/fondue-components148.js.map +1 -0
  107. package/dist/fondue-components149.js +43 -0
  108. package/dist/fondue-components149.js.map +1 -0
  109. package/dist/fondue-components15.js +121 -45
  110. package/dist/fondue-components15.js.map +1 -1
  111. package/dist/fondue-components150.js +71 -0
  112. package/dist/fondue-components150.js.map +1 -0
  113. package/dist/fondue-components151.js +34 -0
  114. package/dist/fondue-components151.js.map +1 -0
  115. package/dist/fondue-components152.js +12 -0
  116. package/dist/fondue-components152.js.map +1 -0
  117. package/dist/fondue-components153.js +156 -0
  118. package/dist/fondue-components153.js.map +1 -0
  119. package/dist/fondue-components154.js +111 -0
  120. package/dist/fondue-components154.js.map +1 -0
  121. package/dist/fondue-components155.js +19 -0
  122. package/dist/fondue-components155.js.map +1 -0
  123. package/dist/fondue-components156.js +19 -0
  124. package/dist/fondue-components156.js.map +1 -0
  125. package/dist/fondue-components157.js +32 -0
  126. package/dist/fondue-components157.js.map +1 -0
  127. package/dist/fondue-components158.js +16 -0
  128. package/dist/fondue-components158.js.map +1 -0
  129. package/dist/fondue-components159.js +10 -0
  130. package/dist/fondue-components159.js.map +1 -0
  131. package/dist/fondue-components16.js +35 -41
  132. package/dist/fondue-components16.js.map +1 -1
  133. package/dist/fondue-components17.js +44 -56
  134. package/dist/fondue-components17.js.map +1 -1
  135. package/dist/fondue-components18.js +40 -41
  136. package/dist/fondue-components18.js.map +1 -1
  137. package/dist/fondue-components19.js +56 -19
  138. package/dist/fondue-components19.js.map +1 -1
  139. package/dist/fondue-components20.js +42 -45
  140. package/dist/fondue-components20.js.map +1 -1
  141. package/dist/fondue-components21.js +18 -71
  142. package/dist/fondue-components21.js.map +1 -1
  143. package/dist/fondue-components22.js +46 -17
  144. package/dist/fondue-components22.js.map +1 -1
  145. package/dist/fondue-components23.js +68 -75
  146. package/dist/fondue-components23.js.map +1 -1
  147. package/dist/fondue-components24.js +70 -32
  148. package/dist/fondue-components24.js.map +1 -1
  149. package/dist/fondue-components25.js +17 -54
  150. package/dist/fondue-components25.js.map +1 -1
  151. package/dist/fondue-components26.js +77 -23
  152. package/dist/fondue-components26.js.map +1 -1
  153. package/dist/fondue-components27.js +34 -53
  154. package/dist/fondue-components27.js.map +1 -1
  155. package/dist/fondue-components28.js +52 -97
  156. package/dist/fondue-components28.js.map +1 -1
  157. package/dist/fondue-components29.js +23 -33
  158. package/dist/fondue-components29.js.map +1 -1
  159. package/dist/fondue-components3.js +1 -1
  160. package/dist/fondue-components30.js +52 -193
  161. package/dist/fondue-components30.js.map +1 -1
  162. package/dist/fondue-components31.js +89 -135
  163. package/dist/fondue-components31.js.map +1 -1
  164. package/dist/fondue-components32.js +30 -130
  165. package/dist/fondue-components32.js.map +1 -1
  166. package/dist/fondue-components33.js +191 -27
  167. package/dist/fondue-components33.js.map +1 -1
  168. package/dist/fondue-components34.js +144 -79
  169. package/dist/fondue-components34.js.map +1 -1
  170. package/dist/fondue-components35.js +125 -116
  171. package/dist/fondue-components35.js.map +1 -1
  172. package/dist/fondue-components36.js +32 -37
  173. package/dist/fondue-components36.js.map +1 -1
  174. package/dist/fondue-components37.js +77 -52
  175. package/dist/fondue-components37.js.map +1 -1
  176. package/dist/fondue-components38.js +123 -20
  177. package/dist/fondue-components38.js.map +1 -1
  178. package/dist/fondue-components39.js +34 -21
  179. package/dist/fondue-components39.js.map +1 -1
  180. package/dist/fondue-components4.js +3 -3
  181. package/dist/fondue-components40.js +56 -7
  182. package/dist/fondue-components40.js.map +1 -1
  183. package/dist/fondue-components41.js +20 -8
  184. package/dist/fondue-components41.js.map +1 -1
  185. package/dist/fondue-components42.js +26 -41
  186. package/dist/fondue-components42.js.map +1 -1
  187. package/dist/fondue-components43.js +7 -4
  188. package/dist/fondue-components43.js.map +1 -1
  189. package/dist/fondue-components44.js +8 -4
  190. package/dist/fondue-components44.js.map +1 -1
  191. package/dist/fondue-components45.js +41 -13
  192. package/dist/fondue-components45.js.map +1 -1
  193. package/dist/fondue-components46.js +5 -32
  194. package/dist/fondue-components46.js.map +1 -1
  195. package/dist/fondue-components47.js +4 -53
  196. package/dist/fondue-components47.js.map +1 -1
  197. package/dist/fondue-components48.js +12 -130
  198. package/dist/fondue-components48.js.map +1 -1
  199. package/dist/fondue-components49.js +32 -21
  200. package/dist/fondue-components49.js.map +1 -1
  201. package/dist/fondue-components5.js +2 -2
  202. package/dist/fondue-components50.js +54 -53
  203. package/dist/fondue-components50.js.map +1 -1
  204. package/dist/fondue-components51.js +130 -7
  205. package/dist/fondue-components51.js.map +1 -1
  206. package/dist/fondue-components52.js +21 -13
  207. package/dist/fondue-components52.js.map +1 -1
  208. package/dist/fondue-components53.js +53 -17
  209. package/dist/fondue-components53.js.map +1 -1
  210. package/dist/fondue-components54.js +7 -4
  211. package/dist/fondue-components54.js.map +1 -1
  212. package/dist/fondue-components55.js +13 -18
  213. package/dist/fondue-components55.js.map +1 -1
  214. package/dist/fondue-components56.js +16 -18
  215. package/dist/fondue-components56.js.map +1 -1
  216. package/dist/fondue-components57.js +1 -1
  217. package/dist/fondue-components58.js +18 -13
  218. package/dist/fondue-components58.js.map +1 -1
  219. package/dist/fondue-components59.js +18 -4
  220. package/dist/fondue-components59.js.map +1 -1
  221. package/dist/fondue-components6.js +1 -1
  222. package/dist/fondue-components60.js +43 -17
  223. package/dist/fondue-components60.js.map +1 -1
  224. package/dist/fondue-components61.js +24 -10
  225. package/dist/fondue-components61.js.map +1 -1
  226. package/dist/fondue-components62.js +22 -36
  227. package/dist/fondue-components62.js.map +1 -1
  228. package/dist/fondue-components63.js +6 -6
  229. package/dist/fondue-components64.js +1 -1
  230. package/dist/fondue-components65.js +10 -10
  231. package/dist/fondue-components66.js +3 -7
  232. package/dist/fondue-components66.js.map +1 -1
  233. package/dist/fondue-components67.js +16 -11
  234. package/dist/fondue-components67.js.map +1 -1
  235. package/dist/fondue-components68.js +10 -4
  236. package/dist/fondue-components68.js.map +1 -1
  237. package/dist/fondue-components69.js +36 -24
  238. package/dist/fondue-components69.js.map +1 -1
  239. package/dist/fondue-components7.js +1 -1
  240. package/dist/fondue-components70.js +6 -16
  241. package/dist/fondue-components70.js.map +1 -1
  242. package/dist/fondue-components71.js +5 -20
  243. package/dist/fondue-components71.js.map +1 -1
  244. package/dist/fondue-components72.js +13 -20
  245. package/dist/fondue-components72.js.map +1 -1
  246. package/dist/fondue-components73.js +52 -20
  247. package/dist/fondue-components73.js.map +1 -1
  248. package/dist/fondue-components74.js +44 -20
  249. package/dist/fondue-components74.js.map +1 -1
  250. package/dist/fondue-components75.js +6 -19
  251. package/dist/fondue-components75.js.map +1 -1
  252. package/dist/fondue-components76.js +6 -8
  253. package/dist/fondue-components76.js.map +1 -1
  254. package/dist/fondue-components77.js +13 -11
  255. package/dist/fondue-components77.js.map +1 -1
  256. package/dist/fondue-components78.js +27 -10
  257. package/dist/fondue-components78.js.map +1 -1
  258. package/dist/fondue-components79.js +13 -7
  259. package/dist/fondue-components79.js.map +1 -1
  260. package/dist/fondue-components8.js +5 -5
  261. package/dist/fondue-components80.js +4 -12
  262. package/dist/fondue-components80.js.map +1 -1
  263. package/dist/fondue-components81.js +12 -22
  264. package/dist/fondue-components81.js.map +1 -1
  265. package/dist/fondue-components82.js +48 -34
  266. package/dist/fondue-components82.js.map +1 -1
  267. package/dist/fondue-components83.js +22 -10
  268. package/dist/fondue-components83.js.map +1 -1
  269. package/dist/fondue-components84.js +623 -62
  270. package/dist/fondue-components84.js.map +1 -1
  271. package/dist/fondue-components85.js +8 -14
  272. package/dist/fondue-components85.js.map +1 -1
  273. package/dist/fondue-components86.js +12 -24
  274. package/dist/fondue-components86.js.map +1 -1
  275. package/dist/fondue-components87.js +4 -18
  276. package/dist/fondue-components87.js.map +1 -1
  277. package/dist/fondue-components88.js +24 -24
  278. package/dist/fondue-components88.js.map +1 -1
  279. package/dist/fondue-components89.js +16 -8
  280. package/dist/fondue-components89.js.map +1 -1
  281. package/dist/fondue-components9.js +5 -5
  282. package/dist/fondue-components90.js +20 -26
  283. package/dist/fondue-components90.js.map +1 -1
  284. package/dist/fondue-components91.js +20 -7
  285. package/dist/fondue-components91.js.map +1 -1
  286. package/dist/fondue-components92.js +20 -5
  287. package/dist/fondue-components92.js.map +1 -1
  288. package/dist/fondue-components93.js +20 -5
  289. package/dist/fondue-components93.js.map +1 -1
  290. package/dist/fondue-components94.js +19 -17
  291. package/dist/fondue-components94.js.map +1 -1
  292. package/dist/fondue-components95.js +8 -217
  293. package/dist/fondue-components95.js.map +1 -1
  294. package/dist/fondue-components96.js +10 -18
  295. package/dist/fondue-components96.js.map +1 -1
  296. package/dist/fondue-components97.js +10 -16
  297. package/dist/fondue-components97.js.map +1 -1
  298. package/dist/fondue-components98.js +6 -150
  299. package/dist/fondue-components98.js.map +1 -1
  300. package/dist/fondue-components99.js +12 -44
  301. package/dist/fondue-components99.js.map +1 -1
  302. package/dist/index.d.ts +201 -26
  303. package/dist/style.css +1 -1
  304. package/package.json +7 -3
@@ -1,35 +1,199 @@
1
- import { jsx as l } from "react/jsx-runtime";
2
- import { forwardRef as p } from "react";
3
- import t from "./fondue-components86.js";
4
- const n = p(
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 v, useState as _, useEffect as D, useMemo as L } from "react";
4
+ import { useSyncRefs as R } from "./fondue-components54.js";
5
+ import { useTextTruncation as h } from "./fondue-components99.js";
6
+ import { useTranslation as j } from "./fondue-components42.js";
7
+ import { Box as M } from "./fondue-components5.js";
8
+ import { LoadingCircle as S } from "./fondue-components21.js";
9
+ import s from "./fondue-components100.js";
10
+ import { handleKeyDown as U, shouldIgnoreRowClick as q } from "./fondue-components101.js";
11
+ const x = u(
12
+ ({ layout: t = "auto", fontSize: e = "medium", gutter: r = "0px", sticky: o, noBorder: a = !1, children: l, ...m }, f) => {
13
+ const b = v(null), [p, i] = _(!1);
14
+ R(b, f);
15
+ const d = o === "head" || o === "both", N = o === "col" || o === "both";
16
+ return D(() => {
17
+ const c = b.current;
18
+ if (!c)
19
+ return;
20
+ const y = () => {
21
+ const g = c.parentElement;
22
+ if (!g)
23
+ return;
24
+ const C = c.scrollWidth, E = g.clientWidth;
25
+ i(C > E);
26
+ };
27
+ y();
28
+ const w = new ResizeObserver(y);
29
+ return w.observe(c), c.parentElement && w.observe(c.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: b,
37
+ className: s.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": d,
45
+ "data-sticky-left-column": N,
46
+ "data-no-border": a,
47
+ "data-has-horizontal-overflow": p,
48
+ onKeyDown: U,
49
+ ...m,
50
+ children: l
51
+ }
52
+ );
53
+ }
54
+ );
55
+ x.displayName = "Table.Root";
56
+ const k = u(({ children: t }, e) => /* @__PURE__ */ n("caption", { ref: e, className: s.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: s.header, "data-sticky": t, "aria-label": r, "aria-busy": o, children: e })
60
+ );
61
+ z.displayName = "Table.Header";
62
+ const H = u(
5
63
  ({
6
- children: o,
7
- as: a = "span",
8
- size: r = "medium",
9
- weight: s = "default",
10
- color: i = "default",
11
- boxColor: e,
12
- className: m,
13
- ...d
14
- }, f) => /* @__PURE__ */ l(
15
- a,
64
+ noShrink: t = !1,
65
+ truncate: e = !1,
66
+ align: r = "left",
67
+ scope: o = "col",
68
+ sortTranslations: a,
69
+ sortDirection: l,
70
+ colSpan: m,
71
+ width: f,
72
+ state: b = "idle",
73
+ loadingStateAriaLabel: p,
74
+ onSortChange: i,
75
+ children: d
76
+ }, N) => {
77
+ const { t: c } = j(), y = v(null);
78
+ R(y, N), h(y);
79
+ const w = L(() => typeof d == "string" ? l === "ascending" ? (a == null ? void 0 : a.sortDescending) ?? c("Table_sortByDescending", { column: d }) : (a == null ? void 0 : a.sortAscending) ?? c("Table_sortByAscending", { column: d }) : c(l === "ascending" ? "Table_sortDescending" : "Table_sortAscending"), [d, l, a, c]), g = () => {
80
+ if (!i)
81
+ return;
82
+ i(l === void 0 || l === "descending" ? "ascending" : "descending");
83
+ };
84
+ return /* @__PURE__ */ n(
85
+ "th",
86
+ {
87
+ ref: y,
88
+ style: { width: f },
89
+ className: s.headerCell,
90
+ scope: o,
91
+ colSpan: m,
92
+ "data-align": r,
93
+ "data-truncate": e,
94
+ "data-no-shrink": t,
95
+ "data-sortable": !!i,
96
+ "aria-sort": i ? l || "none" : void 0,
97
+ children: b === "loading" ? /* @__PURE__ */ T("div", { className: s.cellContent, "aria-live": "polite", "aria-label": p, children: [
98
+ typeof d == "string" && e ? /* @__PURE__ */ n("span", { className: s.buttonText, children: d }) : d,
99
+ /* @__PURE__ */ n(S, { "data-test-id": "fondue-loading-circle", size: "xx-small" })
100
+ ] }) : i ? /* @__PURE__ */ T(
101
+ "button",
102
+ {
103
+ className: s.cellContent,
104
+ "aria-label": w,
105
+ "data-active": !!l,
106
+ onClick: g,
107
+ type: "button",
108
+ children: [
109
+ typeof d == "string" && e ? /* @__PURE__ */ n("span", { className: s.buttonText, children: d }) : d,
110
+ /* @__PURE__ */ n(M, { width: 3, children: l === "ascending" ? /* @__PURE__ */ n(O, { className: s.sortIndicator, size: "12" }) : l === "descending" ? /* @__PURE__ */ n(K, { className: s.sortIndicator, size: "12" }) : /* @__PURE__ */ n(W, { className: s.sortIndicator, size: "12" }) })
111
+ ]
112
+ }
113
+ ) : d
114
+ }
115
+ );
116
+ }
117
+ );
118
+ H.displayName = "Table.HeaderCell";
119
+ const I = u(
120
+ ({ firstColumnSticky: t = !1, lastColumnSticky: e = !1, children: r, "aria-busy": o }, a) => /* @__PURE__ */ n(
121
+ "tbody",
16
122
  {
17
- "data-test-id": "text",
18
- className: [
19
- t.root,
20
- t[`size-${r}`],
21
- t[`weight-${s}`],
22
- t[e ? `color-box-${e}` : `color-${i}`],
23
- m
24
- ].filter(Boolean).join(" "),
25
- ref: f,
26
- ...d,
27
- children: o
123
+ ref: a,
124
+ className: s.body,
125
+ "data-first-column-sticky": t,
126
+ "data-last-column-sticky": e,
127
+ "aria-busy": o,
128
+ children: r
28
129
  }
29
130
  )
30
131
  );
31
- n.displayName = "FondueText";
132
+ I.displayName = "Table.Body";
133
+ const B = u(
134
+ ({ disabled: t = !1, selected: e = !1, onClick: r, children: o, "aria-label": a, "data-test-id": l }, m) => {
135
+ const f = r !== void 0 && !t, b = (i) => {
136
+ t || q(i) || r && r(e);
137
+ }, p = (i) => {
138
+ f && (i.key === "Enter" || i.key === " ") && (i.preventDefault(), b());
139
+ };
140
+ return /* @__PURE__ */ n(
141
+ "tr",
142
+ {
143
+ ref: m,
144
+ className: s.row,
145
+ tabIndex: 0,
146
+ role: f ? "button" : "row",
147
+ "data-disabled": t,
148
+ "data-interactive": f,
149
+ "data-selected": f ? void 0 : e,
150
+ "aria-disabled": t,
151
+ "aria-label": a,
152
+ "aria-selected": f ? void 0 : e,
153
+ onClick: f ? b : void 0,
154
+ onKeyDown: f ? p : void 0,
155
+ "data-test-id": l,
156
+ children: o
157
+ }
158
+ );
159
+ }
160
+ );
161
+ B.displayName = "Table.Row";
162
+ const A = u(
163
+ ({ colSpan: t, truncate: e, align: r = "left", children: o, "aria-label": a }, l) => {
164
+ const m = v(null);
165
+ return R(m, l), h(m), /* @__PURE__ */ n(
166
+ "td",
167
+ {
168
+ ref: m,
169
+ className: s.rowCell,
170
+ colSpan: t,
171
+ "data-align": r,
172
+ "data-truncate": e,
173
+ "aria-label": a,
174
+ children: o
175
+ }
176
+ );
177
+ }
178
+ );
179
+ A.displayName = "Table.RowCell";
180
+ const ee = {
181
+ Root: x,
182
+ Caption: k,
183
+ Header: z,
184
+ HeaderCell: H,
185
+ Body: I,
186
+ Row: B,
187
+ RowCell: A
188
+ };
32
189
  export {
33
- n as Text
190
+ ee as Table,
191
+ I as TableBody,
192
+ k as TableCaption,
193
+ z as TableHeader,
194
+ H as TableHeaderCell,
195
+ x as TableRoot,
196
+ B as TableRow,
197
+ A as TableRowCell
34
198
  };
35
199
  //# sourceMappingURL=fondue-components33.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components33.js","sources":["../src/components/Text/Text.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type ReactNode, forwardRef, type ForwardedRef, type HTMLAttributeAnchorTarget } from 'react';\n\nimport { type CommonAriaProps } from '#/helpers/aria';\n\nimport styles from './styles/text.module.scss';\n\ntype TextWeight = 'default' | 'strong' | 'x-strong';\ntype TextSize = 'x-small' | 'small' | 'medium' | 'large';\ntype TextColor = 'default' | 'weak' | 'x-weak' | 'disabled' | 'negative' | 'positive' | 'warning' | 'interactive';\ntype BoxColor = 'neutral' | 'selected' | 'disabled' | 'positive' | 'negative' | 'warning';\n\ntype TagType = 'a' | 'abbr' | 'address' | 'em' | 'label' | 'li' | 'span' | 'strong' | 'time' | 'p';\n\nexport type TextProps<TTag extends TagType = 'span'> = CommonAriaProps &\n TagProps<TTag> & {\n /**\n * Id of the element\n */\n id?: string;\n /**\n * Size of the text\n *\n * @default 'medium'\n */\n size?: TextSize;\n /**\n * Weight of the font\n *\n * @default 'default'\n */\n weight?: TextWeight;\n /**\n * The html element used to render\n *\n * @default 'span'\n */\n as?: TTag;\n /**\n * Color of the text\n *\n * @default 'default'\n */\n color?: TextColor;\n /**\n * The texts color when used within a box\n *\n * @description optional color prop that uses the inverse box color when accessibility contrast is needed\n **/\n boxColor?: BoxColor;\n className?: string;\n children?: ReactNode;\n };\n\ntype TagPropMap = {\n a: { href?: string; target: HTMLAttributeAnchorTarget; rel?: string; title?: string };\n abbr: { title?: string };\n address: object;\n em: object;\n label: { for?: string };\n li: { value?: string };\n p: object;\n span: object;\n strong: object;\n time: { dateTime?: string };\n};\ntype TagProps<TTag extends TagType> = TagPropMap[TTag];\n\ntype TextElementMap = {\n a: HTMLAnchorElement;\n abbr: HTMLElement;\n address: HTMLElement;\n em: HTMLElement;\n label: HTMLLabelElement;\n li: HTMLLIElement;\n p: HTMLParagraphElement;\n span: HTMLSpanElement;\n strong: HTMLElement;\n time: HTMLTimeElement;\n};\ntype TextElementType<TTag extends TagType> = TextElementMap[TTag];\n\nexport const Text = forwardRef(\n (\n {\n children,\n as: Tag = 'span',\n size = 'medium',\n weight = 'default',\n color = 'default',\n boxColor,\n className,\n ...props\n },\n ref,\n ) => (\n <Tag\n data-test-id=\"text\"\n className={[\n styles.root,\n styles[`size-${size}`],\n styles[`weight-${weight}`],\n styles[boxColor ? `color-box-${boxColor}` : `color-${color}`],\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n // @ts-expect-error ref can not be inferred properly by TS\n ref={ref}\n {...props}\n >\n {children}\n </Tag>\n ),\n) as (<TTag extends TagType = 'span'>(\n props: TextProps<TTag> & { ref?: ForwardedRef<TextElementType<TTag>> },\n) => JSX.Element) & { displayName: string };\n\nText.displayName = 'FondueText';\n"],"names":["Text","forwardRef","children","Tag","size","weight","color","boxColor","className","props","ref","jsx","styles"],"mappings":";;;AAmFO,MAAMA,IAAOC;AAAA,EAChB,CACI;AAAA,IACI,UAAAC;AAAA,IACA,IAAIC,IAAM;AAAA,IACV,MAAAC,IAAO;AAAA,IACP,QAAAC,IAAS;AAAA,IACT,OAAAC,IAAQ;AAAA,IACR,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAEPC,MAEA,gBAAAC;AAAA,IAACR;AAAA,IAAA;AAAA,MACG,gBAAa;AAAA,MACb,WAAW;AAAA,QACPS,EAAO;AAAA,QACPA,EAAO,QAAQR,CAAI,EAAE;AAAA,QACrBQ,EAAO,UAAUP,CAAM,EAAE;AAAA,QACzBO,EAAOL,IAAW,aAAaA,CAAQ,KAAK,SAASD,CAAK,EAAE;AAAA,QAC5DE;AAAA,MAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,MAEb,KAAAE;AAAA,MACC,GAAGD;AAAA,MAEH,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGb;AAIAF,EAAK,cAAc;"}
1
+ {"version":3,"file":"fondue-components33.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 forwardRef,\n useEffect,\n useMemo,\n useRef,\n useState,\n type AriaAttributes,\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 ascending/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 className={styles.sortIndicator} size=\"12\" />\n ) : sortDirection === 'descending' ? (\n <IconArrowDown className={styles.sortIndicator} 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,84 +1,149 @@
1
- import { jsxs as m, jsx as t } from "react/jsx-runtime";
2
- import { IconCheckMark as w, IconExclamationMarkTriangle as h } from "@frontify/fondue-icons";
3
- import { forwardRef as f, useRef as S } from "react";
4
- import { LoadingCircle as T } from "./fondue-components19.js";
5
- import a from "./fondue-components87.js";
6
- const u = ({
7
- children: s,
8
- className: c,
9
- status: e = "neutral",
10
- "data-test-id": l = "fondue-text-input",
11
- "aria-errormessage": R,
12
- placeholder: n,
13
- ...o
14
- }, N) => {
15
- const d = S(!1);
16
- return /* @__PURE__ */ m(
17
- "div",
18
- {
19
- className: [a.root, c].filter(Boolean).join(" "),
20
- "data-status": e,
21
- "data-test-id": l,
22
- children: [
23
- e === "loading" ? /* @__PURE__ */ t("div", { className: a.loadingStatus, "data-test-id": `${l}-loader`, children: /* @__PURE__ */ t(T, { size: "xx-small" }) }) : null,
24
- /* @__PURE__ */ m("div", { className: a.inputWrapper, children: [
25
- n && /* @__PURE__ */ t("div", { className: a.placeholder, children: n }),
26
- /* @__PURE__ */ t(
27
- "input",
28
- {
29
- onMouseDown: (r) => {
30
- d.current = !0, r.currentTarget.dataset.showFocusRing = "false";
31
- },
32
- type: "text",
33
- placeholder: n,
34
- ...o,
35
- onFocus: (r) => {
36
- var i;
37
- d.current || (r.target.dataset.showFocusRing = "true"), (i = o.onFocus) == null || i.call(o, r);
38
- },
39
- onBlur: (r) => {
40
- var i;
41
- r.target.dataset.showFocusRing = "false", d.current = !1, (i = o.onBlur) == null || i.call(o, r);
42
- },
43
- ref: N,
44
- className: a.input,
45
- "aria-invalid": e === "error",
46
- "aria-errormessage": e === "error" ? R : void 0
47
- }
48
- )
49
- ] }),
50
- e === "success" ? /* @__PURE__ */ t(w, { size: 16, className: a.iconSuccess, "data-test-id": `${l}-success-icon` }) : null,
51
- e === "error" ? /* @__PURE__ */ t(
52
- h,
53
- {
54
- size: 16,
55
- className: a.iconError,
56
- "data-test-id": `${l}-error-icon`
57
- }
58
- ) : null,
59
- s
60
- ]
61
- }
62
- );
63
- };
64
- u.displayName = "TextField.Root";
65
- const x = ({ name: s, className: c, ...e }, l) => /* @__PURE__ */ t(
66
- "div",
67
- {
68
- "data-slot": !0,
69
- "data-name": s,
70
- ...e,
71
- ref: l,
72
- className: [a.slot, c].filter(Boolean).join(" ")
1
+ import { jsxs as h, jsx as t, Fragment as b } from "react/jsx-runtime";
2
+ import { IconPlus as j, IconCross as M } from "@frontify/fondue-icons";
3
+ import { forwardRef as x, useState as P, Children as H, isValidElement as I } from "react";
4
+ import s from "./fondue-components102.js";
5
+ const S = x(
6
+ ({
7
+ "aria-label": e,
8
+ "data-test-id": n = "tag",
9
+ children: o,
10
+ disabled: a = !1,
11
+ emphasis: c = "strong",
12
+ onAddClick: m,
13
+ onClick: u,
14
+ onDismiss: i,
15
+ size: p = "default",
16
+ title: l,
17
+ variant: y = "default"
18
+ }, v) => {
19
+ const [C, d] = P(!1);
20
+ let r = null;
21
+ const g = H.map(o, (f) => I(f) && f.type === N ? (r = f.props.children, null) : f), $ = {
22
+ "data-addable": !!m,
23
+ "data-component": "tag",
24
+ "data-disabled": a,
25
+ "data-dismissable": !!i,
26
+ "data-emphasis": c,
27
+ "data-size": p,
28
+ "data-variant": y,
29
+ className: s.root
30
+ };
31
+ return /* @__PURE__ */ h("div", { ...$, children: [
32
+ /* @__PURE__ */ t(
33
+ z,
34
+ {
35
+ ref: v,
36
+ "aria-label": e || l,
37
+ disabled: a,
38
+ hoverContent: r,
39
+ isHover: C,
40
+ onClick: u,
41
+ onMouseEnter: () => d(!0),
42
+ onMouseLeave: () => d(!1),
43
+ title: l,
44
+ "data-test-id": n,
45
+ children: g
46
+ }
47
+ ),
48
+ /* @__PURE__ */ t(
49
+ R,
50
+ {
51
+ "aria-label": e || l,
52
+ disabled: a,
53
+ onAddClick: m,
54
+ onDismiss: i
55
+ }
56
+ )
57
+ ] });
58
+ }
59
+ );
60
+ S.displayName = "Tag";
61
+ const z = x(
62
+ ({
63
+ "aria-label": e,
64
+ "data-test-id": n,
65
+ children: o,
66
+ disabled: a = !1,
67
+ hoverContent: c,
68
+ isHover: m = !1,
69
+ onClick: u,
70
+ onMouseEnter: i,
71
+ onMouseLeave: p,
72
+ title: l
73
+ }, y) => {
74
+ let v = 0;
75
+ const C = H.map(o, (r) => {
76
+ if (I(r) && r.type === T) {
77
+ const g = v++;
78
+ return /* @__PURE__ */ t("div", { className: s.secondaryContent, children: r.props.children }, `secondary-${g}`);
79
+ }
80
+ return r;
81
+ }), d = c ? /* @__PURE__ */ h("div", { "data-hover": m, children: [
82
+ /* @__PURE__ */ t("div", { children: c }),
83
+ /* @__PURE__ */ t("div", { children: C })
84
+ ] }) : C;
85
+ return u ? /* @__PURE__ */ t(
86
+ "button",
87
+ {
88
+ ref: y,
89
+ type: "button",
90
+ "aria-label": e,
91
+ title: l,
92
+ className: s.mainContent,
93
+ onClick: a ? void 0 : u,
94
+ onMouseEnter: i,
95
+ onMouseLeave: p,
96
+ disabled: a,
97
+ "data-test-id": n,
98
+ children: d
99
+ }
100
+ ) : /* @__PURE__ */ t(
101
+ "div",
102
+ {
103
+ ref: y,
104
+ className: s.mainContent,
105
+ onMouseEnter: i,
106
+ onMouseLeave: p,
107
+ "data-test-id": n,
108
+ children: d
109
+ }
110
+ );
73
111
  }
74
112
  );
75
- x.displayName = "TextField.Slot";
76
- const F = f(u), v = f(x), g = F;
77
- g.Root = F;
78
- g.Slot = v;
113
+ z.displayName = "TagMainContent";
114
+ const R = ({ "aria-label": e, disabled: n, onAddClick: o, onDismiss: a }) => /* @__PURE__ */ h(b, { children: [
115
+ o && /* @__PURE__ */ t(
116
+ "button",
117
+ {
118
+ type: "button",
119
+ "aria-label": `Add ${e || ""}`,
120
+ className: s.actionButton,
121
+ disabled: n,
122
+ onClick: o,
123
+ children: /* @__PURE__ */ t(j, { size: "16" })
124
+ }
125
+ ),
126
+ a && /* @__PURE__ */ t(
127
+ "button",
128
+ {
129
+ type: "button",
130
+ "aria-label": `Dismiss ${e || ""}`,
131
+ className: s.actionButton,
132
+ disabled: n,
133
+ onClick: a,
134
+ children: /* @__PURE__ */ t(M, { size: "16" })
135
+ }
136
+ )
137
+ ] }), N = ({ children: e }) => /* @__PURE__ */ t(b, { children: e });
138
+ N.displayName = "Tag.HoverContent";
139
+ const T = ({ children: e }) => /* @__PURE__ */ t(b, { children: e });
140
+ T.displayName = "Tag.SecondaryContent";
141
+ const B = S;
142
+ B.HoverContent = N;
143
+ B.SecondaryContent = T;
79
144
  export {
80
- u as TextFieldRoot,
81
- x as TextFieldSlot,
82
- g as TextInput
145
+ B as Tag,
146
+ N as TagHoverContent,
147
+ T as TagSecondaryContent
83
148
  };
84
149
  //# sourceMappingURL=fondue-components34.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components34.js","sources":["../src/components/TextInput/TextInput.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCheckMark, IconExclamationMarkTriangle } from '@frontify/fondue-icons';\nimport {\n forwardRef,\n useRef,\n type ChangeEvent,\n type FocusEvent,\n type ForwardedRef,\n type KeyboardEvent,\n type ReactNode,\n type SyntheticEvent,\n} from 'react';\n\nimport { LoadingCircle } from '../LoadingCircle/LoadingCircle';\n\nimport styles from './styles/text.module.scss';\n\nexport type TextInputProps = {\n id?: string;\n name?: string;\n /**\n * The place where the input slots are placed\n */\n children?: ReactNode;\n /**\n * The default value of the text input\n * Used for uncontrolled components\n */\n defaultValue?: string | number;\n /**\n * The controlled value of the text input\n */\n value?: string | number;\n /**\n * Type of the text input\n * @default \"text\"\n */\n type?: 'date' | 'email' | 'hidden' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'time' | 'url';\n /**\n * The placeholder in the text input\n */\n placeholder?: string;\n /**\n * Disable the text input\n * @default false\n */\n disabled?: boolean;\n /**\n * Make the text input required in form\n * @default false\n */\n required?: boolean;\n /**\n * Make the text input spell-checkable\n * @default true\n */\n spellCheck?: boolean;\n /**\n * Make the text input read-only\n * @default false\n */\n readOnly?: boolean;\n /**\n * Set the type of input so autocomplete can help the user\n * @default \"on\"\n */\n autoComplete?: string;\n /**\n * The maximum length of the text input\n */\n maxLength?: number;\n /**\n * Status of the text input\n * @default \"neutral\"\n */\n status?: 'neutral' | 'success' | 'error' | 'loading';\n className?: string;\n /**\n * Event handler called when the text input value changes\n */\n onChange?: (event: ChangeEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text input is blurred\n */\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text input is focused\n */\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when a key is pressed\n */\n onKeyDown?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when a key is released\n */\n onKeyUp?: (event: KeyboardEvent<HTMLInputElement>) => void;\n /**\n * Event handler called when the text inside of text input is selected\n */\n onSelect?: (event: SyntheticEvent<HTMLInputElement>) => void;\n 'data-test-id'?: string;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n 'aria-errormessage'?: string;\n};\n\nexport const TextFieldRoot = (\n {\n children,\n className,\n status = 'neutral',\n 'data-test-id': dataTestId = 'fondue-text-input',\n 'aria-errormessage': ariaErrormessage,\n placeholder,\n ...inputProps\n }: TextInputProps,\n ref: ForwardedRef<HTMLInputElement>,\n) => {\n const wasClicked = useRef(false);\n\n return (\n <div\n className={[styles.root, className].filter(Boolean).join(' ')}\n data-status={status}\n data-test-id={dataTestId}\n >\n {status === 'loading' ? (\n <div className={styles.loadingStatus} data-test-id={`${dataTestId}-loader`}>\n <LoadingCircle size=\"xx-small\" />\n </div>\n ) : null}\n <div className={styles.inputWrapper}>\n {placeholder && <div className={styles.placeholder}>{placeholder}</div>}\n <input\n onMouseDown={(mouseEvent) => {\n wasClicked.current = true;\n mouseEvent.currentTarget.dataset.showFocusRing = 'false';\n }}\n type=\"text\"\n placeholder={placeholder}\n {...inputProps}\n onFocus={(focusEvent) => {\n if (!wasClicked.current) {\n focusEvent.target.dataset.showFocusRing = 'true';\n }\n inputProps.onFocus?.(focusEvent);\n }}\n onBlur={(blurEvent) => {\n blurEvent.target.dataset.showFocusRing = 'false';\n wasClicked.current = false;\n inputProps.onBlur?.(blurEvent);\n }}\n ref={ref}\n className={styles.input}\n aria-invalid={status === 'error'}\n aria-errormessage={status === 'error' ? ariaErrormessage : undefined}\n />\n </div>\n\n {status === 'success' ? (\n <IconCheckMark size={16} className={styles.iconSuccess} data-test-id={`${dataTestId}-success-icon`} />\n ) : null}\n\n {status === 'error' ? (\n <IconExclamationMarkTriangle\n size={16}\n className={styles.iconError}\n data-test-id={`${dataTestId}-error-icon`}\n />\n ) : null}\n\n {children}\n </div>\n );\n};\nTextFieldRoot.displayName = 'TextField.Root';\n\nexport type TextFieldSlotProps = {\n children: ReactNode;\n name?: 'left' | 'right';\n className?: string;\n};\n\nexport const TextFieldSlot = (\n { name, className, ...slotProps }: TextFieldSlotProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n) => {\n return (\n <div\n data-slot\n data-name={name}\n {...slotProps}\n ref={forwardedRef}\n className={[styles.slot, className].filter(Boolean).join(' ')}\n />\n );\n};\n\nTextFieldSlot.displayName = 'TextField.Slot';\n\nconst ForwardedRefTextFieldRoot = forwardRef<HTMLInputElement, TextInputProps>(TextFieldRoot);\nconst ForwardedRefTextFieldSlot = forwardRef<HTMLDivElement, TextFieldSlotProps>(TextFieldSlot);\n// @ts-expect-error We support both single component (without slots) and compound components (with slots)\nexport const TextInput: typeof TextFieldRoot & {\n Root: typeof ForwardedRefTextFieldRoot;\n Slot: typeof ForwardedRefTextFieldSlot;\n} = ForwardedRefTextFieldRoot;\nTextInput.Root = ForwardedRefTextFieldRoot;\nTextInput.Slot = ForwardedRefTextFieldSlot;\n"],"names":["TextFieldRoot","children","className","status","dataTestId","ariaErrormessage","placeholder","inputProps","ref","wasClicked","useRef","jsxs","styles","jsx","LoadingCircle","mouseEvent","focusEvent","_a","blurEvent","IconCheckMark","IconExclamationMarkTriangle","TextFieldSlot","name","slotProps","forwardedRef","ForwardedRefTextFieldRoot","forwardRef","ForwardedRefTextFieldSlot","TextInput"],"mappings":";;;;;AA6GO,MAAMA,IAAgB,CACzB;AAAA,EACI,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,gBAAgBC,IAAa;AAAA,EAC7B,qBAAqBC;AAAA,EACrB,aAAAC;AAAA,EACA,GAAGC;AACP,GACAC,MACC;AACD,QAAMC,IAAaC,EAAO,EAAK;AAE/B,SACI,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAW,CAACC,EAAO,MAAMV,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,MAC5D,eAAaC;AAAA,MACb,gBAAcC;AAAA,MAEb,UAAA;AAAA,QAAAD,MAAW,YACR,gBAAAU,EAAC,OAAA,EAAI,WAAWD,EAAO,eAAe,gBAAc,GAAGR,CAAU,WAC7D,UAAA,gBAAAS,EAACC,GAAA,EAAc,MAAK,WAAA,CAAW,GACnC,IACA;AAAA,QACJ,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAO,cAClB,UAAA;AAAA,UAAAN,KAAe,gBAAAO,EAAC,OAAA,EAAI,WAAWD,EAAO,aAAc,UAAAN,GAAY;AAAA,UACjE,gBAAAO;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,aAAa,CAACE,MAAe;AACzB,gBAAAN,EAAW,UAAU,IACrBM,EAAW,cAAc,QAAQ,gBAAgB;AAAA,cACrD;AAAA,cACA,MAAK;AAAA,cACL,aAAAT;AAAA,cACC,GAAGC;AAAA,cACJ,SAAS,CAACS,MAAe;;AACrB,gBAAKP,EAAW,YACZO,EAAW,OAAO,QAAQ,gBAAgB,UAE9CC,IAAAV,EAAW,YAAX,QAAAU,EAAA,KAAAV,GAAqBS;AAAA,cACzB;AAAA,cACA,QAAQ,CAACE,MAAc;;AACnB,gBAAAA,EAAU,OAAO,QAAQ,gBAAgB,SACzCT,EAAW,UAAU,KACrBQ,IAAAV,EAAW,WAAX,QAAAU,EAAA,KAAAV,GAAoBW;AAAA,cACxB;AAAA,cACA,KAAAV;AAAA,cACA,WAAWI,EAAO;AAAA,cAClB,gBAAcT,MAAW;AAAA,cACzB,qBAAmBA,MAAW,UAAUE,IAAmB;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/D,GACJ;AAAA,QAECF,MAAW,YACR,gBAAAU,EAACM,GAAA,EAAc,MAAM,IAAI,WAAWP,EAAO,aAAa,gBAAc,GAAGR,CAAU,iBAAiB,IACpG;AAAA,QAEHD,MAAW,UACR,gBAAAU;AAAA,UAACO;AAAA,UAAA;AAAA,YACG,MAAM;AAAA,YACN,WAAWR,EAAO;AAAA,YAClB,gBAAc,GAAGR,CAAU;AAAA,UAAA;AAAA,QAAA,IAE/B;AAAA,QAEHH;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGb;AACAD,EAAc,cAAc;AAQrB,MAAMqB,IAAgB,CACzB,EAAE,MAAAC,GAAM,WAAApB,GAAW,GAAGqB,EAAA,GACtBC,MAGI,gBAAAX;AAAA,EAAC;AAAA,EAAA;AAAA,IACG,aAAS;AAAA,IACT,aAAWS;AAAA,IACV,GAAGC;AAAA,IACJ,KAAKC;AAAA,IACL,WAAW,CAACZ,EAAO,MAAMV,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAAA;AAAA;AAKxEmB,EAAc,cAAc;AAE5B,MAAMI,IAA4BC,EAA6C1B,CAAa,GACtF2B,IAA4BD,EAA+CL,CAAa,GAEjFO,IAGTH;AACJG,EAAU,OAAOH;AACjBG,EAAU,OAAOD;"}
1
+ {"version":3,"file":"fondue-components34.js","sources":["../src/components/Tag/Tag.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { IconCross, IconPlus } from '@frontify/fondue-icons';\nimport { Children, forwardRef, isValidElement, useState, type MouseEvent, type ReactNode } from 'react';\n\nimport styles from './styles/tag.module.scss';\n\ntype TagStyle = 'default' | 'highlight';\n\ntype TagEmphasis = 'strong' | 'weak';\n\ntype TagSize = 'default' | 'small';\n\ntype TagProps = {\n /**\n * @default 'strong'\n */\n emphasis?: TagEmphasis;\n /**\n * @default 'default'\n */\n variant?: TagStyle;\n /**\n * @default 'default'\n */\n size?: TagSize;\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * Click handler - when provided, the Tag renders as a button element\n */\n onClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on dismiss - providing this will show the dismiss button\n */\n onDismiss?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on add click - providing this will show the add button\n */\n onAddClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n title?: string;\n 'aria-label'?: string;\n 'data-test-id'?: string;\n children: ReactNode;\n};\n\nexport type TagPropsWithClick = Omit<TagProps, 'onClick'> & {\n onClick: (event?: MouseEvent<HTMLButtonElement>) => void;\n};\n\nexport type TagPropsWithoutClick = Omit<TagProps, 'onClick'> & {\n onClick?: undefined;\n};\n\nexport type TagHoverContentProps = {\n children: ReactNode;\n};\n\nexport type TagSecondaryContentProps = {\n children: ReactNode;\n};\n\nconst TagRoot = forwardRef<HTMLButtonElement | HTMLDivElement, TagProps>(\n (\n {\n 'aria-label': ariaLabel,\n 'data-test-id': dataTestId = 'tag',\n children,\n disabled = false,\n emphasis = 'strong',\n onAddClick,\n onClick,\n onDismiss,\n size = 'default',\n title,\n variant = 'default',\n },\n ref,\n ) => {\n const [isHover, setIsHover] = useState(false);\n\n // Extract hover content from slots\n let extractedHoverContent: ReactNode = null;\n const processedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.type === TagHoverContent) {\n // eslint-disable-next-line react-hooks/immutability\n extractedHoverContent = child.props.children;\n return null;\n }\n return child;\n });\n\n const commonProps = {\n 'data-addable': !!onAddClick,\n 'data-component': 'tag',\n 'data-disabled': disabled,\n 'data-dismissable': !!onDismiss,\n 'data-emphasis': emphasis,\n 'data-size': size,\n 'data-variant': variant,\n className: styles.root,\n };\n\n return (\n <div {...commonProps}>\n <TagMainContent\n ref={ref}\n aria-label={ariaLabel || title}\n disabled={disabled}\n hoverContent={extractedHoverContent}\n isHover={isHover}\n onClick={onClick}\n onMouseEnter={() => setIsHover(true)}\n onMouseLeave={() => setIsHover(false)}\n title={title}\n data-test-id={dataTestId}\n >\n {processedChildren}\n </TagMainContent>\n <TagActionButtons\n aria-label={ariaLabel || title}\n disabled={disabled}\n onAddClick={onAddClick}\n onDismiss={onDismiss}\n />\n </div>\n );\n },\n);\nTagRoot.displayName = 'Tag';\n\ntype TagMainContentProps = {\n 'aria-label'?: string;\n 'data-test-id'?: string;\n children: ReactNode;\n disabled?: boolean;\n hoverContent?: ReactNode;\n isHover?: boolean;\n onClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n title?: string;\n};\n\nconst TagMainContent = forwardRef<HTMLButtonElement | HTMLDivElement, TagMainContentProps>(\n (\n {\n 'aria-label': ariaLabel,\n 'data-test-id': dataTestId,\n children,\n disabled = false,\n hoverContent,\n isHover = false,\n onClick,\n onMouseEnter,\n onMouseLeave,\n title,\n },\n ref,\n ) => {\n // Process children to handle secondary content slots in their natural position\n let secondaryIndex = 0;\n const processedChildren = Children.map(children, (child) => {\n if (isValidElement(child) && child.type === TagSecondaryContent) {\n const currentIndex = secondaryIndex++;\n return (\n <div className={styles.secondaryContent} key={`secondary-${currentIndex}`}>\n {/* eslint-disable-next-line @typescript-eslint/no-unsafe-member-access */}\n {child.props.children}\n </div>\n );\n }\n return child;\n });\n\n const content = hoverContent ? (\n <div data-hover={isHover}>\n <div>{hoverContent}</div>\n <div>{processedChildren}</div>\n </div>\n ) : (\n processedChildren\n );\n\n if (onClick) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n aria-label={ariaLabel}\n title={title}\n className={styles.mainContent}\n onClick={disabled ? undefined : onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n disabled={disabled}\n data-test-id={dataTestId}\n >\n {content}\n </button>\n );\n }\n\n return (\n <div\n ref={ref as React.Ref<HTMLDivElement>}\n className={styles.mainContent}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n data-test-id={dataTestId}\n >\n {content}\n </div>\n );\n },\n);\nTagMainContent.displayName = 'TagMainContent';\n\ntype TagActionButtonsProps = {\n /**\n * @default false\n */\n disabled?: boolean;\n /**\n * Click handler on dismiss\n */\n onDismiss?: (event?: MouseEvent<HTMLButtonElement>) => void;\n /**\n * Click handler on add click\n */\n onAddClick?: (event?: MouseEvent<HTMLButtonElement>) => void;\n 'aria-label'?: string;\n};\n\nconst TagActionButtons = ({ 'aria-label': ariaLabel, disabled, onAddClick, onDismiss }: TagActionButtonsProps) => {\n return (\n <>\n {onAddClick && (\n <button\n type=\"button\"\n aria-label={`Add ${ariaLabel || ''}`}\n className={styles.actionButton}\n disabled={disabled}\n onClick={onAddClick}\n >\n <IconPlus size=\"16\" />\n </button>\n )}\n {onDismiss && (\n <button\n type=\"button\"\n aria-label={`Dismiss ${ariaLabel || ''}`}\n className={styles.actionButton}\n disabled={disabled}\n onClick={onDismiss}\n >\n <IconCross size=\"16\" />\n </button>\n )}\n </>\n );\n};\n\nexport const TagHoverContent = ({ children }: TagHoverContentProps) => {\n return <>{children}</>;\n};\nTagHoverContent.displayName = 'Tag.HoverContent';\n\nexport const TagSecondaryContent = ({ children }: TagSecondaryContentProps) => {\n return <>{children}</>;\n};\nTagSecondaryContent.displayName = 'Tag.SecondaryContent';\n\n/**\n * TagComponent interface with function overloads for conditional ref typing.\n *\n * The overload order matters for TypeScript's type inference:\n * - TypeScript uses the FIRST matching overload when inferring types in generic contexts\n * (e.g., Storybook's StoryObj<typeof Tag>)\n * - By placing TagPropsWithoutClick first, generic inference defaults to HTMLDivElement\n * - When onClick is explicitly provided, TypeScript matches the second overload,\n * correctly inferring HTMLButtonElement for the ref\n */\ntype TagComponent = {\n (props: TagPropsWithoutClick & React.RefAttributes<HTMLDivElement>): React.ReactNode;\n (props: TagPropsWithClick & React.RefAttributes<HTMLButtonElement>): React.ReactNode;\n displayName?: string;\n HoverContent: typeof TagHoverContent;\n SecondaryContent: typeof TagSecondaryContent;\n};\n\nexport const Tag: TagComponent = TagRoot as unknown as TagComponent;\nTag.HoverContent = TagHoverContent;\nTag.SecondaryContent = TagSecondaryContent;\n"],"names":["TagRoot","forwardRef","ariaLabel","dataTestId","children","disabled","emphasis","onAddClick","onClick","onDismiss","size","title","variant","ref","isHover","setIsHover","useState","extractedHoverContent","processedChildren","Children","child","isValidElement","TagHoverContent","commonProps","styles","jsxs","jsx","TagMainContent","TagActionButtons","hoverContent","onMouseEnter","onMouseLeave","secondaryIndex","TagSecondaryContent","currentIndex","content","Fragment","IconPlus","IconCross","Tag"],"mappings":"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"}