@frontify/fondue-components 22.0.0 → 22.1.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 (67) hide show
  1. package/dist/fondue-components11.js +62 -47
  2. package/dist/fondue-components11.js.map +1 -1
  3. package/dist/fondue-components13.js +71 -69
  4. package/dist/fondue-components13.js.map +1 -1
  5. package/dist/fondue-components19.js +66 -61
  6. package/dist/fondue-components19.js.map +1 -1
  7. package/dist/fondue-components25.js +111 -97
  8. package/dist/fondue-components25.js.map +1 -1
  9. package/dist/fondue-components27.js +20 -18
  10. package/dist/fondue-components27.js.map +1 -1
  11. package/dist/fondue-components29.js +56 -51
  12. package/dist/fondue-components29.js.map +1 -1
  13. package/dist/fondue-components31.js +12 -12
  14. package/dist/fondue-components31.js.map +1 -1
  15. package/dist/fondue-components32.js +37 -37
  16. package/dist/fondue-components32.js.map +1 -1
  17. package/dist/fondue-components33.js +1 -1
  18. package/dist/fondue-components34.js +2 -2
  19. package/dist/fondue-components35.js +1 -1
  20. package/dist/fondue-components37.js +1 -1
  21. package/dist/fondue-components39.js +1 -1
  22. package/dist/fondue-components4.js +1 -1
  23. package/dist/fondue-components4.js.map +1 -1
  24. package/dist/fondue-components42.js +1 -1
  25. package/dist/fondue-components44.js +1 -1
  26. package/dist/fondue-components50.js +4 -4
  27. package/dist/fondue-components52.js +1 -1
  28. package/dist/fondue-components52.js.map +1 -1
  29. package/dist/fondue-components54.js +14 -14
  30. package/dist/fondue-components55.js +1 -1
  31. package/dist/fondue-components56.js +12 -12
  32. package/dist/fondue-components57.js +1 -1
  33. package/dist/fondue-components59.js +5 -5
  34. package/dist/fondue-components62.js +4 -4
  35. package/dist/fondue-components63.js +1 -1
  36. package/dist/fondue-components65.js +14 -14
  37. package/dist/fondue-components68.js +42 -42
  38. package/dist/fondue-components68.js.map +1 -1
  39. package/dist/fondue-components70.js +34 -34
  40. package/dist/fondue-components71.js +2 -2
  41. package/dist/fondue-components73.js +8 -8
  42. package/dist/fondue-components75.js +18 -16
  43. package/dist/fondue-components75.js.map +1 -1
  44. package/dist/fondue-components77.js +8 -8
  45. package/dist/fondue-components78.js +47 -35
  46. package/dist/fondue-components78.js.map +1 -1
  47. package/dist/fondue-components79.js +10 -10
  48. package/dist/fondue-components81.js +16 -12
  49. package/dist/fondue-components81.js.map +1 -1
  50. package/dist/fondue-components84.js +1 -1
  51. package/dist/fondue-components85.js +5 -2
  52. package/dist/fondue-components85.js.map +1 -1
  53. package/dist/fondue-components86.js +4 -39
  54. package/dist/fondue-components86.js.map +1 -1
  55. package/dist/fondue-components87.js +2 -6
  56. package/dist/fondue-components87.js.map +1 -1
  57. package/dist/fondue-components88.js +15 -3
  58. package/dist/fondue-components88.js.map +1 -1
  59. package/dist/fondue-components89.js +39 -4
  60. package/dist/fondue-components89.js.map +1 -1
  61. package/dist/fondue-components9.js +71 -70
  62. package/dist/fondue-components9.js.map +1 -1
  63. package/dist/fondue-components90.js +6 -17
  64. package/dist/fondue-components90.js.map +1 -1
  65. package/dist/index.d.ts +30 -4
  66. package/dist/style.css +1 -1
  67. package/package.json +1 -1
@@ -1,8 +1,9 @@
1
- import { jsxs as b, jsx as l } from "react/jsx-runtime";
1
+ import { jsxs as h, jsx as l } from "react/jsx-runtime";
2
2
  import * as a from "@radix-ui/react-scroll-area";
3
- import { forwardRef as h } from "react";
3
+ import { forwardRef as p } from "react";
4
+ import { useFondueTheme as u } from "./fondue-components31.js";
4
5
  import o from "./fondue-components62.js";
5
- const p = ({
6
+ const f = ({
6
7
  type: t = "hover",
7
8
  maxHeight: e = "100%",
8
9
  maxWidth: s = "100%",
@@ -11,64 +12,68 @@ const p = ({
11
12
  padding: m,
12
13
  children: n,
13
14
  "data-test-id": r = "fondue-scroll-area"
14
- }, d) => /* @__PURE__ */ b(
15
- a.Root,
16
- {
17
- type: t,
18
- className: o.root,
19
- style: { maxWidth: s },
20
- "data-test-id": r,
21
- ref: d,
22
- children: [
23
- /* @__PURE__ */ l(
24
- a.Viewport,
25
- {
26
- className: o.viewport,
27
- style: { maxHeight: e },
28
- "data-scroll-padding": m,
29
- "data-show-shadow": c,
30
- "data-scrollbar-type": t,
31
- "data-scrollbar-gutter": i,
32
- "data-test-id": `${r}-viewport`,
33
- children: n
34
- }
35
- ),
36
- /* @__PURE__ */ l(
37
- a.Scrollbar,
38
- {
39
- className: o.scrollbar,
40
- orientation: "vertical",
41
- "data-test-id": `${r}-vertical-scrollbar`,
42
- children: /* @__PURE__ */ l(
43
- a.Thumb,
44
- {
45
- className: o.thumb,
46
- "data-test-id": `${r}-vertical-scrollbar-thumb`
47
- }
48
- )
49
- }
50
- ),
51
- /* @__PURE__ */ l(
52
- a.Scrollbar,
53
- {
54
- className: o.scrollbar,
55
- orientation: "horizontal",
56
- "data-test-id": `${r}-horizontal-scrollbar`,
57
- children: /* @__PURE__ */ l(
58
- a.Thumb,
59
- {
60
- className: o.thumb,
61
- "data-test-id": `${r}-horizontal-scrollbar-thumb`
62
- }
63
- )
64
- }
65
- ),
66
- /* @__PURE__ */ l(a.Corner, { className: o.corner, "data-test-id": `${r}-corner` })
67
- ]
68
- }
69
- ), u = h(p);
70
- u.displayName = "ScrollArea";
15
+ }, d) => {
16
+ const { dir: b } = u();
17
+ return /* @__PURE__ */ h(
18
+ a.Root,
19
+ {
20
+ type: t,
21
+ dir: b,
22
+ className: o.root,
23
+ style: { maxWidth: s },
24
+ "data-test-id": r,
25
+ ref: d,
26
+ children: [
27
+ /* @__PURE__ */ l(
28
+ a.Viewport,
29
+ {
30
+ className: o.viewport,
31
+ style: { maxHeight: e },
32
+ "data-scroll-padding": m,
33
+ "data-show-shadow": c,
34
+ "data-scrollbar-type": t,
35
+ "data-scrollbar-gutter": i,
36
+ "data-test-id": `${r}-viewport`,
37
+ children: n
38
+ }
39
+ ),
40
+ /* @__PURE__ */ l(
41
+ a.Scrollbar,
42
+ {
43
+ className: o.scrollbar,
44
+ orientation: "vertical",
45
+ "data-test-id": `${r}-vertical-scrollbar`,
46
+ children: /* @__PURE__ */ l(
47
+ a.Thumb,
48
+ {
49
+ className: o.thumb,
50
+ "data-test-id": `${r}-vertical-scrollbar-thumb`
51
+ }
52
+ )
53
+ }
54
+ ),
55
+ /* @__PURE__ */ l(
56
+ a.Scrollbar,
57
+ {
58
+ className: o.scrollbar,
59
+ orientation: "horizontal",
60
+ "data-test-id": `${r}-horizontal-scrollbar`,
61
+ children: /* @__PURE__ */ l(
62
+ a.Thumb,
63
+ {
64
+ className: o.thumb,
65
+ "data-test-id": `${r}-horizontal-scrollbar-thumb`
66
+ }
67
+ )
68
+ }
69
+ ),
70
+ /* @__PURE__ */ l(a.Corner, { className: o.corner, "data-test-id": `${r}-corner` })
71
+ ]
72
+ }
73
+ );
74
+ }, N = p(f);
75
+ N.displayName = "ScrollArea";
71
76
  export {
72
- u as ScrollArea
77
+ N as ScrollArea
73
78
  };
74
79
  //# sourceMappingURL=fondue-components19.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fondue-components19.js","sources":["../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport * as RadixScrollArea from '@radix-ui/react-scroll-area';\nimport { type ForwardedRef, forwardRef, type ReactElement, type ReactNode } from 'react';\n\nimport styles from './styles/scrollArea.module.scss';\n\nexport type ScrollAreaProps = {\n /**\n * \"auto\" visible when content is overflowing on the corresponding orientation.\n * \"always\" always visible regardless of whether the content is overflowing. Sets the scrollbar gutter to stable.\n * \"scroll\" visible when the user is scrolling along its corresponding orientation.\n * \"hover\" when the user is hovering over the scroll area.\n * @default 'hover'\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover';\n /**\n * Determines if the scrollbar should take up space in the content area\n * @default 'auto'\n */\n scrollbarGutter?: 'auto' | 'stable' | 'stable-horizontal' | 'stable-vertical';\n /**\n * Maximum height of the scroll area\n * @default '100%'\n */\n maxHeight?: string | number;\n /**\n * Minimum width of the scroll area\n * @default '100%'\n */\n maxWidth?: string | number;\n /**\n * Define the padding of the scroll area\n * @default \"compact\"\n */\n padding?: 'none' | 'tight' | 'compact' | 'comfortable' | 'spacious';\n /**\n * Determines if a inset shadow should be shown the edge of the component\n */\n showShadow?: boolean;\n 'data-test-id'?: string;\n children: ReactNode;\n};\n\nconst ScrollAreaComponent = (\n {\n type = 'hover',\n maxHeight = '100%',\n maxWidth = '100%',\n showShadow = false,\n scrollbarGutter = 'auto',\n padding,\n children,\n 'data-test-id': dataTestId = 'fondue-scroll-area',\n }: ScrollAreaProps,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement => {\n return (\n <RadixScrollArea.Root\n type={type}\n className={styles.root}\n style={{ maxWidth }}\n data-test-id={dataTestId}\n ref={ref}\n >\n <RadixScrollArea.Viewport\n className={styles.viewport}\n style={{ maxHeight }}\n data-scroll-padding={padding}\n data-show-shadow={showShadow}\n data-scrollbar-type={type}\n data-scrollbar-gutter={scrollbarGutter}\n data-test-id={`${dataTestId}-viewport`}\n >\n {children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n className={styles.scrollbar}\n orientation=\"vertical\"\n data-test-id={`${dataTestId}-vertical-scrollbar`}\n >\n <RadixScrollArea.Thumb\n className={styles.thumb}\n data-test-id={`${dataTestId}-vertical-scrollbar-thumb`}\n />\n </RadixScrollArea.Scrollbar>\n <RadixScrollArea.Scrollbar\n className={styles.scrollbar}\n orientation=\"horizontal\"\n data-test-id={`${dataTestId}-horizontal-scrollbar`}\n >\n <RadixScrollArea.Thumb\n className={styles.thumb}\n data-test-id={`${dataTestId}-horizontal-scrollbar-thumb`}\n />\n </RadixScrollArea.Scrollbar>\n <RadixScrollArea.Corner className={styles.corner} data-test-id={`${dataTestId}-corner`} />\n </RadixScrollArea.Root>\n );\n};\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(ScrollAreaComponent);\nScrollArea.displayName = 'ScrollArea';\n"],"names":["ScrollAreaComponent","type","maxHeight","maxWidth","showShadow","scrollbarGutter","padding","children","dataTestId","ref","jsxs","RadixScrollArea","styles","jsx","ScrollArea","forwardRef"],"mappings":";;;;AA4CA,MAAMA,IAAsB,CACxB;AAAA,EACI,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,iBAAAC,IAAkB;AAAA,EAClB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAgBC,IAAa;AACjC,GACAC,MAGI,gBAAAC;AAAA,EAACC,EAAgB;AAAA,EAAhB;AAAA,IACG,MAAAV;AAAA,IACA,WAAWW,EAAO;AAAA,IAClB,OAAO,EAAE,UAAAT,EAAA;AAAA,IACT,gBAAcK;AAAA,IACd,KAAAC;AAAA,IAEA,UAAA;AAAA,MAAA,gBAAAI;AAAA,QAACF,EAAgB;AAAA,QAAhB;AAAA,UACG,WAAWC,EAAO;AAAA,UAClB,OAAO,EAAE,WAAAV,EAAA;AAAA,UACT,uBAAqBI;AAAA,UACrB,oBAAkBF;AAAA,UAClB,uBAAqBH;AAAA,UACrB,yBAAuBI;AAAA,UACvB,gBAAc,GAAGG,CAAU;AAAA,UAE1B,UAAAD;AAAA,QAAA;AAAA,MAAA;AAAA,MAEL,gBAAAM;AAAA,QAACF,EAAgB;AAAA,QAAhB;AAAA,UACG,WAAWC,EAAO;AAAA,UAClB,aAAY;AAAA,UACZ,gBAAc,GAAGJ,CAAU;AAAA,UAE3B,UAAA,gBAAAK;AAAA,YAACF,EAAgB;AAAA,YAAhB;AAAA,cACG,WAAWC,EAAO;AAAA,cAClB,gBAAc,GAAGJ,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/B;AAAA,MAAA;AAAA,MAEJ,gBAAAK;AAAA,QAACF,EAAgB;AAAA,QAAhB;AAAA,UACG,WAAWC,EAAO;AAAA,UAClB,aAAY;AAAA,UACZ,gBAAc,GAAGJ,CAAU;AAAA,UAE3B,UAAA,gBAAAK;AAAA,YAACF,EAAgB;AAAA,YAAhB;AAAA,cACG,WAAWC,EAAO;AAAA,cAClB,gBAAc,GAAGJ,CAAU;AAAA,YAAA;AAAA,UAAA;AAAA,QAC/B;AAAA,MAAA;AAAA,MAEJ,gBAAAK,EAACF,EAAgB,QAAhB,EAAuB,WAAWC,EAAO,QAAQ,gBAAc,GAAGJ,CAAU,UAAA,CAAW;AAAA,IAAA;AAAA,EAAA;AAAA,GAKvFM,IAAaC,EAA4Cf,CAAmB;AACzFc,EAAW,cAAc;"}
1
+ {"version":3,"file":"fondue-components19.js","sources":["../src/components/ScrollArea/ScrollArea.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport * as RadixScrollArea from '@radix-ui/react-scroll-area';\nimport { type ForwardedRef, forwardRef, type ReactElement, type ReactNode } from 'react';\n\nimport { useFondueTheme } from '../ThemeProvider/ThemeProvider';\n\nimport styles from './styles/scrollArea.module.scss';\n\nexport type ScrollAreaProps = {\n /**\n * \"auto\" visible when content is overflowing on the corresponding orientation.\n * \"always\" always visible regardless of whether the content is overflowing. Sets the scrollbar gutter to stable.\n * \"scroll\" visible when the user is scrolling along its corresponding orientation.\n * \"hover\" when the user is hovering over the scroll area.\n * @default 'hover'\n */\n type?: 'auto' | 'always' | 'scroll' | 'hover';\n /**\n * Determines if the scrollbar should take up space in the content area\n * @default 'auto'\n */\n scrollbarGutter?: 'auto' | 'stable' | 'stable-horizontal' | 'stable-vertical';\n /**\n * Maximum height of the scroll area\n * @default '100%'\n */\n maxHeight?: string | number;\n /**\n * Minimum width of the scroll area\n * @default '100%'\n */\n maxWidth?: string | number;\n /**\n * Define the padding of the scroll area\n * @default \"compact\"\n */\n padding?: 'none' | 'tight' | 'compact' | 'comfortable' | 'spacious';\n /**\n * Determines if a inset shadow should be shown the edge of the component\n */\n showShadow?: boolean;\n 'data-test-id'?: string;\n children: ReactNode;\n};\n\nconst ScrollAreaComponent = (\n {\n type = 'hover',\n maxHeight = '100%',\n maxWidth = '100%',\n showShadow = false,\n scrollbarGutter = 'auto',\n padding,\n children,\n 'data-test-id': dataTestId = 'fondue-scroll-area',\n }: ScrollAreaProps,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement => {\n const { dir } = useFondueTheme();\n\n return (\n <RadixScrollArea.Root\n type={type}\n dir={dir}\n className={styles.root}\n style={{ maxWidth }}\n data-test-id={dataTestId}\n ref={ref}\n >\n <RadixScrollArea.Viewport\n className={styles.viewport}\n style={{ maxHeight }}\n data-scroll-padding={padding}\n data-show-shadow={showShadow}\n data-scrollbar-type={type}\n data-scrollbar-gutter={scrollbarGutter}\n data-test-id={`${dataTestId}-viewport`}\n >\n {children}\n </RadixScrollArea.Viewport>\n <RadixScrollArea.Scrollbar\n className={styles.scrollbar}\n orientation=\"vertical\"\n data-test-id={`${dataTestId}-vertical-scrollbar`}\n >\n <RadixScrollArea.Thumb\n className={styles.thumb}\n data-test-id={`${dataTestId}-vertical-scrollbar-thumb`}\n />\n </RadixScrollArea.Scrollbar>\n <RadixScrollArea.Scrollbar\n className={styles.scrollbar}\n orientation=\"horizontal\"\n data-test-id={`${dataTestId}-horizontal-scrollbar`}\n >\n <RadixScrollArea.Thumb\n className={styles.thumb}\n data-test-id={`${dataTestId}-horizontal-scrollbar-thumb`}\n />\n </RadixScrollArea.Scrollbar>\n <RadixScrollArea.Corner className={styles.corner} data-test-id={`${dataTestId}-corner`} />\n </RadixScrollArea.Root>\n );\n};\n\nexport const ScrollArea = forwardRef<HTMLDivElement, ScrollAreaProps>(ScrollAreaComponent);\nScrollArea.displayName = 'ScrollArea';\n"],"names":["ScrollAreaComponent","type","maxHeight","maxWidth","showShadow","scrollbarGutter","padding","children","dataTestId","ref","dir","useFondueTheme","jsxs","RadixScrollArea","styles","jsx","ScrollArea","forwardRef"],"mappings":";;;;;AA8CA,MAAMA,IAAsB,CACxB;AAAA,EACI,MAAAC,IAAO;AAAA,EACP,WAAAC,IAAY;AAAA,EACZ,UAAAC,IAAW;AAAA,EACX,YAAAC,IAAa;AAAA,EACb,iBAAAC,IAAkB;AAAA,EAClB,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,gBAAgBC,IAAa;AACjC,GACAC,MACe;AACf,QAAM,EAAE,KAAAC,EAAA,IAAQC,EAAA;AAEhB,SACI,gBAAAC;AAAA,IAACC,EAAgB;AAAA,IAAhB;AAAA,MACG,MAAAZ;AAAA,MACA,KAAAS;AAAA,MACA,WAAWI,EAAO;AAAA,MAClB,OAAO,EAAE,UAAAX,EAAA;AAAA,MACT,gBAAcK;AAAA,MACd,KAAAC;AAAA,MAEA,UAAA;AAAA,QAAA,gBAAAM;AAAA,UAACF,EAAgB;AAAA,UAAhB;AAAA,YACG,WAAWC,EAAO;AAAA,YAClB,OAAO,EAAE,WAAAZ,EAAA;AAAA,YACT,uBAAqBI;AAAA,YACrB,oBAAkBF;AAAA,YAClB,uBAAqBH;AAAA,YACrB,yBAAuBI;AAAA,YACvB,gBAAc,GAAGG,CAAU;AAAA,YAE1B,UAAAD;AAAA,UAAA;AAAA,QAAA;AAAA,QAEL,gBAAAQ;AAAA,UAACF,EAAgB;AAAA,UAAhB;AAAA,YACG,WAAWC,EAAO;AAAA,YAClB,aAAY;AAAA,YACZ,gBAAc,GAAGN,CAAU;AAAA,YAE3B,UAAA,gBAAAO;AAAA,cAACF,EAAgB;AAAA,cAAhB;AAAA,gBACG,WAAWC,EAAO;AAAA,gBAClB,gBAAc,GAAGN,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UAC/B;AAAA,QAAA;AAAA,QAEJ,gBAAAO;AAAA,UAACF,EAAgB;AAAA,UAAhB;AAAA,YACG,WAAWC,EAAO;AAAA,YAClB,aAAY;AAAA,YACZ,gBAAc,GAAGN,CAAU;AAAA,YAE3B,UAAA,gBAAAO;AAAA,cAACF,EAAgB;AAAA,cAAhB;AAAA,gBACG,WAAWC,EAAO;AAAA,gBAClB,gBAAc,GAAGN,CAAU;AAAA,cAAA;AAAA,YAAA;AAAA,UAC/B;AAAA,QAAA;AAAA,QAEJ,gBAAAO,EAACF,EAAgB,QAAhB,EAAuB,WAAWC,EAAO,QAAQ,gBAAc,GAAGN,CAAU,UAAA,CAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGpG,GAEaQ,IAAaC,EAA4CjB,CAAmB;AACzFgB,EAAW,cAAc;"}
@@ -1,162 +1,176 @@
1
- import { jsx as t, jsxs as p } from "react/jsx-runtime";
2
- import { IconArrowUp as A, IconArrowDown as K, IconArrowBidirectional as h } from "@frontify/fondue-icons";
3
- import { forwardRef as b, useRef as w, useMemo as j } from "react";
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
4
  import { useSyncRefs as g } from "./fondue-components48.js";
5
5
  import { useTextTruncation as N } from "./fondue-components74.js";
6
6
  import { Box as L } from "./fondue-components5.js";
7
- import { LoadingCircle as S } from "./fondue-components18.js";
8
- import i from "./fondue-components75.js";
7
+ import { LoadingCircle as j } from "./fondue-components18.js";
8
+ import n from "./fondue-components75.js";
9
9
  import { handleKeyDown as $, shouldIgnoreRowClick as D } from "./fondue-components76.js";
10
- const R = b(
11
- ({ layout: a = "auto", fontSize: e = "medium", sticky: o, children: s, ...d }, l) => (
12
- // eslint-disable-next-line jsx-a11y-x/no-noninteractive-element-interactions
13
- /* @__PURE__ */ t(
14
- "table",
15
- {
16
- ref: l,
17
- className: i.table,
18
- "data-layout": a,
19
- "data-font-size": e,
20
- "data-sticky": o,
21
- onKeyDown: $,
22
- ...d,
23
- children: s
24
- }
25
- )
26
- )
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
+ )
29
+ );
30
+ }
27
31
  );
28
32
  R.displayName = "Table.Root";
29
- const C = b(({ children: a }, e) => /* @__PURE__ */ t("caption", { ref: e, className: i.caption, children: a }));
33
+ const C = f(({ children: t }, e) => /* @__PURE__ */ d("caption", { ref: e, className: n.caption, children: t }));
30
34
  C.displayName = "Table.Caption";
31
- const v = b(
32
- ({ children: a, "aria-label": e, "aria-busy": o }, s) => /* @__PURE__ */ t("thead", { ref: s, className: i.header, "aria-label": e, "aria-busy": o, children: a })
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 })
33
37
  );
34
38
  v.displayName = "Table.Header";
35
- const x = b(
39
+ const x = f(
36
40
  ({
37
- noShrink: a = !1,
41
+ noShrink: t = !1,
38
42
  truncate: e = !1,
39
- align: o = "left",
40
- scope: s = "col",
41
- sortTranslations: d,
42
- sortDirection: l,
43
+ align: l = "left",
44
+ scope: i = "col",
45
+ sortTranslations: a,
46
+ sortDirection: o,
43
47
  colSpan: m,
44
- width: c,
45
- state: f = "idle",
48
+ width: s,
49
+ state: b = "idle",
46
50
  loadingStateAriaLabel: u,
47
- onSortChange: n,
48
- children: r
49
- }, H) => {
51
+ onSortChange: r,
52
+ children: c
53
+ }, I) => {
50
54
  const y = w(null);
51
- g(y, H), N(y);
52
- const z = j(() => typeof r == "string" ? l === "ascending" ? (d == null ? void 0 : d.sortDescending) ?? `Sort by ${r} descending` : (d == null ? void 0 : d.sortAscending) ?? `Sort by ${r} ascending` : l === "ascending" ? "Sort descending" : "Sort ascending", [r, l, d]), B = () => {
53
- if (!n)
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)
54
58
  return;
55
- n(l === void 0 || l === "descending" ? "ascending" : "descending");
59
+ r(o === void 0 || o === "descending" ? "ascending" : "descending");
56
60
  };
57
- return /* @__PURE__ */ t(
61
+ return /* @__PURE__ */ d(
58
62
  "th",
59
63
  {
60
64
  ref: y,
61
- style: { width: c },
62
- className: i.headerCell,
63
- scope: s,
65
+ style: { width: s },
66
+ className: n.headerCell,
67
+ scope: i,
64
68
  colSpan: m,
65
- "data-align": o,
69
+ "data-align": l,
66
70
  "data-truncate": e,
67
- "data-no-shrink": a,
68
- "data-sortable": !!n,
69
- "aria-sort": n ? l || "none" : void 0,
70
- children: f === "loading" ? /* @__PURE__ */ p("div", { className: i.cellContent, "aria-live": "polite", "aria-label": u, children: [
71
- typeof r == "string" && e ? /* @__PURE__ */ t("span", { className: i.buttonText, children: r }) : r,
72
- /* @__PURE__ */ t(S, { "data-test-id": "fondue-loading-circle", size: "xx-small" })
73
- ] }) : n ? /* @__PURE__ */ p(
71
+ "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(
74
78
  "button",
75
79
  {
76
- className: i.cellContent,
77
- "aria-label": z,
78
- "data-active": !!l,
79
- onClick: B,
80
+ className: n.cellContent,
81
+ "aria-label": h,
82
+ "data-active": !!o,
83
+ onClick: z,
80
84
  type: "button",
81
85
  children: [
82
- typeof r == "string" && e ? /* @__PURE__ */ t("span", { className: i.buttonText, children: r }) : r,
83
- /* @__PURE__ */ t(L, { width: 3, children: l === "ascending" ? /* @__PURE__ */ t(A, { size: "12" }) : l === "descending" ? /* @__PURE__ */ t(K, { size: "12" }) : /* @__PURE__ */ t(h, { className: i.sortIndicator, size: "12" }) })
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" }) })
84
88
  ]
85
89
  }
86
- ) : r
90
+ ) : c
87
91
  }
88
92
  );
89
93
  }
90
94
  );
91
95
  x.displayName = "Table.HeaderCell";
92
- const T = b(
93
- ({ children: a, "aria-busy": e }, o) => /* @__PURE__ */ t("tbody", { ref: o, className: i.body, "aria-busy": e, children: a })
96
+ const k = f(
97
+ ({ firstColumnSticky: t = !1, lastColumnSticky: e = !1, children: l, "aria-busy": i }, a) => /* @__PURE__ */ d(
98
+ "tbody",
99
+ {
100
+ ref: a,
101
+ className: n.body,
102
+ "data-first-column-sticky": t,
103
+ "data-last-column-sticky": e,
104
+ "aria-busy": i,
105
+ children: l
106
+ }
107
+ )
94
108
  );
95
- T.displayName = "Table.Body";
96
- const I = b(
97
- ({ disabled: a = !1, selected: e = !1, onClick: o, children: s, "aria-label": d, "data-test-id": l }, m) => {
98
- const c = o !== void 0 && !a, f = (n) => {
99
- a || D(n) || o && o(e);
100
- }, u = (n) => {
101
- c && (n.key === "Enter" || n.key === " ") && (n.preventDefault(), f());
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());
102
116
  };
103
- return /* @__PURE__ */ t(
117
+ return /* @__PURE__ */ d(
104
118
  "tr",
105
119
  {
106
120
  ref: m,
107
- className: i.row,
121
+ className: n.row,
108
122
  tabIndex: 0,
109
- role: c ? "button" : "row",
110
- "data-disabled": a,
111
- "data-interactive": c,
112
- "data-selected": c ? void 0 : e,
113
- "aria-disabled": a,
114
- "aria-label": d,
115
- "aria-selected": c ? void 0 : e,
116
- onClick: c ? f : void 0,
117
- onKeyDown: c ? u : void 0,
118
- "data-test-id": l,
119
- children: s
123
+ role: s ? "button" : "row",
124
+ "data-disabled": t,
125
+ "data-interactive": s,
126
+ "data-selected": s ? void 0 : e,
127
+ "aria-disabled": t,
128
+ "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
120
134
  }
121
135
  );
122
136
  }
123
137
  );
124
- I.displayName = "Table.Row";
125
- const k = b(
126
- ({ colSpan: a, truncate: e, align: o = "left", children: s, "aria-label": d }, l) => {
138
+ T.displayName = "Table.Row";
139
+ const H = f(
140
+ ({ colSpan: t, truncate: e, align: l = "left", children: i, "aria-label": a }, o) => {
127
141
  const m = w(null);
128
- return g(m, l), N(m), /* @__PURE__ */ t(
142
+ return g(m, o), N(m), /* @__PURE__ */ d(
129
143
  "td",
130
144
  {
131
145
  ref: m,
132
- className: i.rowCell,
133
- colSpan: a,
134
- "data-align": o,
146
+ className: n.rowCell,
147
+ colSpan: t,
148
+ "data-align": l,
135
149
  "data-truncate": e,
136
- "aria-label": d,
137
- children: s
150
+ "aria-label": a,
151
+ children: i
138
152
  }
139
153
  );
140
154
  }
141
155
  );
142
- k.displayName = "Table.RowCell";
156
+ H.displayName = "Table.RowCell";
143
157
  const V = {
144
158
  Root: R,
145
159
  Caption: C,
146
160
  Header: v,
147
161
  HeaderCell: x,
148
- Body: T,
149
- Row: I,
150
- RowCell: k
162
+ Body: k,
163
+ Row: T,
164
+ RowCell: H
151
165
  };
152
166
  export {
153
167
  V as Table,
154
- T as TableBody,
168
+ k as TableBody,
155
169
  C as TableCaption,
156
170
  v as TableHeader,
157
171
  x as TableHeaderCell,
158
172
  R as TableRoot,
159
- I as TableRow,
160
- k as TableRowCell
173
+ T as TableRow,
174
+ H as TableRowCell
161
175
  };
162
176
  //# 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 */\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 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={sticky}\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 children: ReactNode;\n 'aria-label'?: string;\n 'aria-busy'?: boolean;\n};\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n ({ children, 'aria-label': ariaLabel, 'aria-busy': ariaBusy }, ref) => {\n return (\n <thead ref={ref} className={styles.header} 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 children: ReactNode;\n 'aria-busy'?: boolean;\n};\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(\n ({ children, 'aria-busy': ariaBusy }, ref) => {\n return (\n <tbody ref={ref} className={styles.body} aria-busy={ariaBusy}>\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","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","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 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":";;;;;;;;;AA6CO,MAAMA,IAAYC;AAAA,EACrB,CAAC,EAAE,QAAAC,IAAS,QAAQ,UAAAC,IAAW,UAAU,QAAAC,GAAQ,UAAAC,GAAU,GAAGC,EAAA,GAASC,MAAQ;AAE3E,UAAMC,IAAqBJ,MAAW,UAAUA,MAAW,QACrDK,IAAyBL,MAAW,SAASA,MAAW;AAE9D;AAAA;AAAA,MAEI,gBAAAM;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAAH;AAAA,UACA,WAAWI,EAAO;AAAA,UAClB,eAAaT;AAAA,UACb,kBAAgBC;AAAA,UAChB,sBAAoBK;AAAA,UACpB,2BAAyBC;AAAA,UACzB,WAAWG;AAAA,UACV,GAAGN;AAAA,UAEH,UAAAD;AAAA,QAAA;AAAA,MAAA;AAAA;AAAA,EAGb;AACJ;AACAL,EAAU,cAAc;AAEjB,MAAMa,IAAeZ,EAA6D,CAAC,EAAE,UAAAI,EAAA,GAAYE,wBAE/F,WAAA,EAAQ,KAAAA,GAAU,WAAWI,EAAO,SAChC,UAAAN,GACL,CAEP;AACDQ,EAAa,cAAc;AAapB,MAAMC,IAAcb;AAAA,EACvB,CAAC,EAAE,QAAAG,IAAS,IAAO,UAAAC,GAAU,cAAcU,GAAW,aAAaC,EAAA,GAAYT,MAEvE,gBAAAG,EAAC,SAAA,EAAM,KAAAH,GAAU,WAAWI,EAAO,QAAQ,eAAaP,GAAQ,cAAYW,GAAW,aAAWC,GAC7F,UAAAX,EAAA,CACL;AAGZ;AACAS,EAAY,cAAc;AA+DnB,MAAMG,IAAkBhB;AAAA,EAC3B,CACI;AAAA,IACI,UAAAiB,IAAW;AAAA,IACX,UAAAC,IAAW;AAAA,IACX,OAAAC,IAAQ;AAAA,IACR,OAAAC,IAAQ;AAAA,IACR,kBAAAC;AAAA,IACA,eAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,uBAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAvB;AAAA,EAAA,GAEJE,MACC;AACD,UAAMsB,IAAUC,EAA6B,IAAI;AACjD,IAAAC,EAAkCF,GAAStB,CAAG,GAE9CyB,EAAkBH,CAAO;AAEzB,UAAMI,IAAYC,EAAQ,MAClB,OAAO7B,KAAa,WAChBkB,MAAkB,eACXD,KAAA,gBAAAA,EAAkB,mBAAkB,WAAWjB,CAAQ,iBAE3DiB,KAAA,gBAAAA,EAAkB,kBAAiB,WAAWjB,CAAQ,eAG1DkB,MAAkB,cAAc,oBAAoB,kBAC5D,CAAClB,GAAUkB,GAAeD,CAAgB,CAAC,GAExCa,IAAmB,MAAM;AAC3B,UAAI,CAACP;AACD;AAMJ,MAAAA,EAFIL,MAAkB,UAAaA,MAAkB,eAAe,cAAc,YAEzD;AAAA,IAC7B;AAEA,WACI,gBAAAb;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAKmB;AAAA,QACL,OAAO,EAAE,OAAAJ,EAAA;AAAA,QACT,WAAWd,EAAO;AAAA,QAClB,OAAAU;AAAA,QACA,SAAAG;AAAA,QACA,cAAYJ;AAAA,QACZ,iBAAeD;AAAA,QACf,kBAAgBD;AAAA,QAChB,iBAAe,CAAC,CAACU;AAAA,QACjB,aAAWA,IAAeL,KAAiB,SAAS;AAAA,QAEnD,UAAAG,MAAU,YACP,gBAAAU,EAAC,OAAA,EAAI,WAAWzB,EAAO,aAAa,aAAU,UAAS,cAAYgB,GAC9D,UAAA;AAAA,UAAA,OAAOtB,KAAa,YAAYc,IAC7B,gBAAAT,EAAC,UAAK,WAAWC,EAAO,YAAa,UAAAN,EAAA,CAAS,IAE9CA;AAAA,UAEJ,gBAAAK,EAAC2B,GAAA,EAAc,gBAAa,yBAAwB,MAAK,WAAA,CAAW;AAAA,QAAA,EAAA,CACxE,IACAT,IACA,gBAAAQ;AAAA,UAAC;AAAA,UAAA;AAAA,YACG,WAAWzB,EAAO;AAAA,YAClB,cAAYsB;AAAA,YACZ,eAAa,CAAC,CAACV;AAAA,YACf,SAASY;AAAA,YACT,MAAK;AAAA,YAEJ,UAAA;AAAA,cAAA,OAAO9B,KAAa,YAAYc,IAC7B,gBAAAT,EAAC,UAAK,WAAWC,EAAO,YAAa,UAAAN,EAAA,CAAS,IAE9CA;AAAA,cAEJ,gBAAAK,EAAC4B,GAAA,EAAI,OAAO,GACP,UAAAf,MAAkB,cACf,gBAAAb,EAAC6B,GAAA,EAAY,MAAK,KAAA,CAAK,IACvBhB,MAAkB,eAClB,gBAAAb,EAAC8B,GAAA,EAAc,MAAK,KAAA,CAAK,IAEzB,gBAAA9B,EAAC+B,GAAA,EAAuB,WAAW9B,EAAO,eAAe,MAAK,KAAA,CAAK,EAAA,CAE3E;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA,IAGJN;AAAA,MAAA;AAAA,IAAA;AAAA,EAIhB;AACJ;AACAY,EAAgB,cAAc;AAiBvB,MAAMyB,IAAYzC;AAAA,EACrB,CAAC,EAAE,mBAAA0C,IAAoB,IAAO,kBAAAC,IAAmB,IAAO,UAAAvC,GAAU,aAAaW,EAAA,GAAYT,MAEnF,gBAAAG;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,KAAAH;AAAA,MACA,WAAWI,EAAO;AAAA,MAClB,4BAA0BgC;AAAA,MAC1B,2BAAyBC;AAAA,MACzB,aAAW5B;AAAA,MAEV,UAAAX;AAAA,IAAA;AAAA,EAAA;AAIjB;AACAqC,EAAU,cAAc;AA6BjB,MAAMG,IAAW5C;AAAA,EACpB,CACI,EAAE,UAAA6C,IAAW,IAAO,UAAAC,IAAW,IAAO,SAAAC,GAAS,UAAA3C,GAAU,cAAcU,GAAW,gBAAgBkC,EAAA,GAClG1C,MACC;AACD,UAAM2C,IAAgBF,MAAY,UAAa,CAACF,GAE1CK,IAAc,CAACC,MAAuB;AACxC,MAAIN,KAIAO,EAAqBD,CAAK,KAI1BJ,KACAA,EAAQD,CAAQ;AAAA,IAExB,GAEMnC,IAAgB,CAACwC,MAA8C;AACjE,MAAKF,MAIDE,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACvCA,EAAM,eAAA,GACND,EAAA;AAAA,IAER;AAEA,WACI,gBAAAzC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAAH;AAAA,QACA,WAAWI,EAAO;AAAA,QAClB,UAAU;AAAA,QACV,MAAMuC,IAAgB,WAAW;AAAA,QACjC,iBAAeJ;AAAA,QACf,oBAAkBI;AAAA,QAClB,iBAAgBA,IAA2B,SAAXH;AAAA,QAChC,iBAAeD;AAAA,QACf,cAAY/B;AAAA,QACZ,iBAAgBmC,IAA2B,SAAXH;AAAA,QAChC,SAASG,IAAgBC,IAAc;AAAA,QACvC,WAAWD,IAAgBtC,IAAgB;AAAA,QAC3C,gBAAcqC;AAAA,QAEb,UAAA5C;AAAA,MAAA;AAAA,IAAA;AAAA,EAGb;AACJ;AACAwC,EAAS,cAAc;AAqBhB,MAAMS,IAAerD;AAAA,EACxB,CAAC,EAAE,SAAAuB,GAAS,UAAAL,GAAU,OAAAC,IAAQ,QAAQ,UAAAf,GAAU,cAAcU,EAAA,GAAaR,MAAsB;AAC7F,UAAMsB,IAAUC,EAA6B,IAAI;AACjD,WAAAC,EAAkCF,GAAStB,CAAG,GAE9CyB,EAAkBH,CAAO,GAGrB,gBAAAnB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,KAAKmB;AAAA,QACL,WAAWlB,EAAO;AAAA,QAClB,SAAAa;AAAA,QACA,cAAYJ;AAAA,QACZ,iBAAeD;AAAA,QACf,cAAYJ;AAAA,QAEX,UAAAV;AAAA,MAAA;AAAA,IAAA;AAAA,EAGb;AACJ;AACAiD,EAAa,cAAc;AAEpB,MAAMC,IAAQ;AAAA,EACjB,MAAMvD;AAAA,EACN,SAASa;AAAA,EACT,QAAQC;AAAA,EACR,YAAYG;AAAA,EACZ,MAAMyB;AAAA,EACN,KAAKG;AAAA,EACL,SAASS;AACb;"}