@frontify/fondue 12.0.0-beta.335 → 12.0.0-beta.337

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.
@@ -1,86 +1,93 @@
1
- import { createAutoformatPlugin as i, MARK_UNDERLINE as p, MARK_BOLD as c, MARK_ITALIC as n, MARK_STRIKETHROUGH as d, MARK_CODE as h, ELEMENT_UL as m, unwrapList as o, toggleList as r, ELEMENT_OL as a } from "@udecode/plate";
2
- import { Plugin as u } from "../Plugin.es.js";
3
- import { AUTOFORMAT_PLUGIN as g } from "./id.es.js";
4
- import { TextStyles as e } from "../TextStylePlugin/types.es.js";
5
- import { ELEMENT_CHECK_ITEM as l } from "../CheckboxListPlugin/id.es.js";
6
- class L extends u {
1
+ import { Plugin as p } from "../Plugin.es.js";
2
+ import { AUTOFORMAT_PLUGIN as i } from "./id.es.js";
3
+ import { createAutoformatPlugin as u, autoformatPunctuation as c, autoformatArrow as n, autoformatLegal as s, autoformatSubscriptNumbers as l, autoformatSubscriptSymbols as d, autoformatSuperscriptNumbers as y, autoformatSuperscriptSymbols as f, MARK_UNDERLINE as g, MARK_BOLD as h, MARK_ITALIC as E, MARK_STRIKETHROUGH as T, MARK_CODE as b, ELEMENT_UL as r, unwrapList as m, toggleList as e, ELEMENT_OL as a } from "@udecode/plate";
4
+ import { TextStyles as o } from "../TextStylePlugin/types.es.js";
5
+ import { ELEMENT_CHECK_ITEM as k } from "../CheckboxListPlugin/id.es.js";
6
+ class S extends p {
7
7
  constructor(t) {
8
- super(g, {
8
+ super(i, {
9
9
  ...t
10
10
  });
11
11
  }
12
12
  plugins() {
13
13
  return [
14
- i({
14
+ u({
15
15
  options: {
16
16
  rules: [
17
+ ...c,
18
+ ...n,
19
+ ...s,
20
+ ...l,
21
+ ...d,
22
+ ...y,
23
+ ...f,
17
24
  {
18
25
  mode: "mark",
19
- type: [p],
26
+ type: [g],
20
27
  match: ["_", "_"],
21
28
  ignoreTrim: !0
22
29
  },
23
30
  {
24
31
  mode: "mark",
25
- type: [c],
32
+ type: [h],
26
33
  match: ["**", "**"],
27
34
  ignoreTrim: !0
28
35
  },
29
36
  {
30
37
  mode: "mark",
31
- type: [n],
38
+ type: [E],
32
39
  match: ["*", "*"],
33
40
  ignoreTrim: !0
34
41
  },
35
42
  {
36
43
  mode: "mark",
37
- type: [d],
44
+ type: [T],
38
45
  match: ["~~", "~~"],
39
46
  ignoreTrim: !0
40
47
  },
41
48
  {
42
49
  mode: "mark",
43
- type: [h],
50
+ type: [b],
44
51
  match: ["`", "`"],
45
52
  ignoreTrim: !0
46
53
  },
47
54
  {
48
55
  mode: "block",
49
56
  match: ["# "],
50
- type: e.heading1
57
+ type: o.heading1
51
58
  },
52
59
  {
53
60
  mode: "block",
54
61
  match: ["## "],
55
- type: e.heading2
62
+ type: o.heading2
56
63
  },
57
64
  {
58
65
  mode: "block",
59
66
  match: ["### "],
60
- type: e.heading3
67
+ type: o.heading3
61
68
  },
62
69
  {
63
70
  mode: "block",
64
71
  match: ["#### "],
65
- type: e.heading4
72
+ type: o.heading4
66
73
  },
67
74
  {
68
75
  mode: "block",
69
- type: m,
76
+ type: r,
70
77
  match: ["- "],
71
- preFormat: o,
72
- format: (t) => r(t, { type: m })
78
+ preFormat: m,
79
+ format: (t) => e(t, { type: r })
73
80
  },
74
81
  {
75
82
  mode: "block",
76
83
  type: a,
77
- match: ["1. "],
78
- preFormat: o,
79
- format: (t) => r(t, { type: a })
84
+ match: ["1. ", "1) "],
85
+ preFormat: m,
86
+ format: (t) => e(t, { type: a })
80
87
  },
81
88
  {
82
89
  mode: "block",
83
- type: l,
90
+ type: k,
84
91
  match: ["[] "]
85
92
  }
86
93
  ]
@@ -90,6 +97,6 @@ class L extends u {
90
97
  }
91
98
  }
92
99
  export {
93
- L as AutoformatPlugin
100
+ S as AutoformatPlugin
94
101
  };
95
102
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/AutoformatPlugin/index.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { createAutoformatPlugin } from '@udecode/plate';\nimport { Plugin, PluginProps } from '../Plugin';\nimport { AUTOFORMAT_PLUGIN } from './id';\nimport {\n ELEMENT_OL,\n ELEMENT_UL,\n MARK_BOLD,\n MARK_CODE,\n MARK_ITALIC,\n MARK_STRIKETHROUGH,\n MARK_UNDERLINE,\n toggleList,\n unwrapList,\n} from '@udecode/plate';\nimport { TextStyles } from '../TextStylePlugin';\nimport { ELEMENT_CHECK_ITEM } from '../CheckboxListPlugin';\n\nexport class AutoformatPlugin extends Plugin {\n constructor(props?: PluginProps) {\n super(AUTOFORMAT_PLUGIN, {\n ...props,\n });\n }\n\n plugins() {\n return [\n createAutoformatPlugin({\n options: {\n rules: [\n {\n mode: 'mark',\n type: [MARK_UNDERLINE],\n match: ['_', '_'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_BOLD],\n match: ['**', '**'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_ITALIC],\n match: ['*', '*'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_STRIKETHROUGH],\n match: ['~~', '~~'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_CODE],\n match: ['`', '`'],\n ignoreTrim: true,\n },\n {\n mode: 'block',\n match: ['# '],\n type: TextStyles.heading1,\n },\n {\n mode: 'block',\n match: ['## '],\n type: TextStyles.heading2,\n },\n {\n mode: 'block',\n match: ['### '],\n type: TextStyles.heading3,\n },\n {\n mode: 'block',\n match: ['#### '],\n type: TextStyles.heading4,\n },\n {\n mode: 'block',\n type: ELEMENT_UL,\n match: ['- '],\n preFormat: unwrapList,\n format: (editor) => toggleList(editor, { type: ELEMENT_UL }),\n },\n {\n mode: 'block',\n type: ELEMENT_OL,\n match: ['1. '],\n preFormat: unwrapList,\n format: (editor) => toggleList(editor, { type: ELEMENT_OL }),\n },\n {\n mode: 'block',\n type: ELEMENT_CHECK_ITEM,\n match: ['[] '],\n },\n ],\n },\n }),\n ];\n }\n}\n"],"names":["AutoformatPlugin","Plugin","props","AUTOFORMAT_PLUGIN","createAutoformatPlugin","MARK_UNDERLINE","MARK_BOLD","MARK_ITALIC","MARK_STRIKETHROUGH","MARK_CODE","TextStyles","ELEMENT_UL","unwrapList","editor","toggleList","ELEMENT_OL","ELEMENT_CHECK_ITEM"],"mappings":";;;;;AAmBO,MAAMA,UAAyBC,EAAO;AAAA,EACzC,YAAYC,GAAqB;AAC7B,UAAMC,GAAmB;AAAA,MACrB,GAAGD;AAAA,IAAA,CACN;AAAA,EACL;AAAA,EAEA,UAAU;AACC,WAAA;AAAA,MACHE,EAAuB;AAAA,QACnB,SAAS;AAAA,UACL,OAAO;AAAA,YACH;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAc;AAAA,cACrB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAS;AAAA,cAChB,OAAO,CAAC,MAAM,IAAI;AAAA,cAClB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAW;AAAA,cAClB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAkB;AAAA,cACzB,OAAO,CAAC,MAAM,IAAI;AAAA,cAClB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAS;AAAA,cAChB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,IAAI;AAAA,cACZ,MAAMC,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,KAAK;AAAA,cACb,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,MAAM;AAAA,cACd,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,OAAO;AAAA,cACf,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMC;AAAA,cACN,OAAO,CAAC,IAAI;AAAA,cACZ,WAAWC;AAAA,cACX,QAAQ,CAACC,MAAWC,EAAWD,GAAQ,EAAE,MAAMF,GAAY;AAAA,YAC/D;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMI;AAAA,cACN,OAAO,CAAC,KAAK;AAAA,cACb,WAAWH;AAAA,cACX,QAAQ,CAACC,MAAWC,EAAWD,GAAQ,EAAE,MAAME,GAAY;AAAA,YAC/D;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMC;AAAA,cACN,OAAO,CAAC,KAAK;AAAA,YACjB;AAAA,UACJ;AAAA,QACJ;AAAA,MAAA,CACH;AAAA,IAAA;AAAA,EAET;AACJ;"}
1
+ {"version":3,"file":"index.es.js","sources":["../../../../../src/components/RichTextEditor/Plugins/AutoformatPlugin/index.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { Plugin, PluginProps } from '../Plugin';\nimport { AUTOFORMAT_PLUGIN } from './id';\nimport {\n ELEMENT_OL,\n ELEMENT_UL,\n MARK_BOLD,\n MARK_CODE,\n MARK_ITALIC,\n MARK_STRIKETHROUGH,\n MARK_UNDERLINE,\n autoformatArrow,\n autoformatLegal,\n autoformatPunctuation,\n autoformatSubscriptNumbers,\n autoformatSubscriptSymbols,\n autoformatSuperscriptNumbers,\n autoformatSuperscriptSymbols,\n createAutoformatPlugin,\n toggleList,\n unwrapList,\n} from '@udecode/plate';\nimport { TextStyles } from '../TextStylePlugin';\nimport { ELEMENT_CHECK_ITEM } from '../CheckboxListPlugin';\n\nexport class AutoformatPlugin extends Plugin {\n constructor(props?: PluginProps) {\n super(AUTOFORMAT_PLUGIN, {\n ...props,\n });\n }\n\n plugins() {\n return [\n createAutoformatPlugin({\n options: {\n rules: [\n ...autoformatPunctuation,\n ...autoformatArrow,\n ...autoformatLegal,\n ...autoformatSubscriptNumbers,\n ...autoformatSubscriptSymbols,\n ...autoformatSuperscriptNumbers,\n ...autoformatSuperscriptSymbols,\n {\n mode: 'mark',\n type: [MARK_UNDERLINE],\n match: ['_', '_'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_BOLD],\n match: ['**', '**'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_ITALIC],\n match: ['*', '*'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_STRIKETHROUGH],\n match: ['~~', '~~'],\n ignoreTrim: true,\n },\n {\n mode: 'mark',\n type: [MARK_CODE],\n match: ['`', '`'],\n ignoreTrim: true,\n },\n {\n mode: 'block',\n match: ['# '],\n type: TextStyles.heading1,\n },\n {\n mode: 'block',\n match: ['## '],\n type: TextStyles.heading2,\n },\n {\n mode: 'block',\n match: ['### '],\n type: TextStyles.heading3,\n },\n {\n mode: 'block',\n match: ['#### '],\n type: TextStyles.heading4,\n },\n {\n mode: 'block',\n type: ELEMENT_UL,\n match: ['- '],\n preFormat: unwrapList,\n format: (editor) => toggleList(editor, { type: ELEMENT_UL }),\n },\n {\n mode: 'block',\n type: ELEMENT_OL,\n match: ['1. ', '1) '],\n preFormat: unwrapList,\n format: (editor) => toggleList(editor, { type: ELEMENT_OL }),\n },\n {\n mode: 'block',\n type: ELEMENT_CHECK_ITEM,\n match: ['[] '],\n },\n ],\n },\n }),\n ];\n }\n}\n"],"names":["AutoformatPlugin","Plugin","props","AUTOFORMAT_PLUGIN","createAutoformatPlugin","autoformatPunctuation","autoformatArrow","autoformatLegal","autoformatSubscriptNumbers","autoformatSubscriptSymbols","autoformatSuperscriptNumbers","autoformatSuperscriptSymbols","MARK_UNDERLINE","MARK_BOLD","MARK_ITALIC","MARK_STRIKETHROUGH","MARK_CODE","TextStyles","ELEMENT_UL","unwrapList","editor","toggleList","ELEMENT_OL","ELEMENT_CHECK_ITEM"],"mappings":";;;;;AA0BO,MAAMA,UAAyBC,EAAO;AAAA,EACzC,YAAYC,GAAqB;AAC7B,UAAMC,GAAmB;AAAA,MACrB,GAAGD;AAAA,IAAA,CACN;AAAA,EACL;AAAA,EAEA,UAAU;AACC,WAAA;AAAA,MACHE,EAAuB;AAAA,QACnB,SAAS;AAAA,UACL,OAAO;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH,GAAGC;AAAA,YACH;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAc;AAAA,cACrB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAS;AAAA,cAChB,OAAO,CAAC,MAAM,IAAI;AAAA,cAClB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAW;AAAA,cAClB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAkB;AAAA,cACzB,OAAO,CAAC,MAAM,IAAI;AAAA,cAClB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAM,CAACC,CAAS;AAAA,cAChB,OAAO,CAAC,KAAK,GAAG;AAAA,cAChB,YAAY;AAAA,YAChB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,IAAI;AAAA,cACZ,MAAMC,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,KAAK;AAAA,cACb,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,MAAM;AAAA,cACd,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,OAAO,CAAC,OAAO;AAAA,cACf,MAAMA,EAAW;AAAA,YACrB;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMC;AAAA,cACN,OAAO,CAAC,IAAI;AAAA,cACZ,WAAWC;AAAA,cACX,QAAQ,CAACC,MAAWC,EAAWD,GAAQ,EAAE,MAAMF,GAAY;AAAA,YAC/D;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMI;AAAA,cACN,OAAO,CAAC,OAAO,KAAK;AAAA,cACpB,WAAWH;AAAA,cACX,QAAQ,CAACC,MAAWC,EAAWD,GAAQ,EAAE,MAAME,GAAY;AAAA,YAC/D;AAAA,YACA;AAAA,cACI,MAAM;AAAA,cACN,MAAMC;AAAA,cACN,OAAO,CAAC,KAAK;AAAA,YACjB;AAAA,UACJ;AAAA,QACJ;AAAA,MAAA,CACH;AAAA,IAAA;AAAA,EAET;AACJ;"}
@@ -1,5 +1,5 @@
1
- import { jsxs as u, Fragment as z, jsx as n } from "react/jsx-runtime";
2
- import { useRef as V, useState as h, Children as A, isValidElement as L, useCallback as U, useEffect as $, cloneElement as W } from "react";
1
+ import { jsxs as m, Fragment as K, jsx as l } from "react/jsx-runtime";
2
+ import { useRef as V, useState as y, Children as A, isValidElement as L, useCallback as U, useEffect as T, cloneElement as W } from "react";
3
3
  import { merge as p } from "../../utilities/merge.es.js";
4
4
  import { motion as H } from "framer-motion";
5
5
  import { useFocusRing as Y } from "@react-aria/focus";
@@ -7,68 +7,68 @@ import { FOCUS_STYLE as _ } from "../../utilities/focusStyle.es.js";
7
7
  import { useMemoizedId as q } from "../../hooks/useMemoizedId.es.js";
8
8
  import G from "../../foundation/Icon/Generated/IconDotsHorizontal.es.js";
9
9
  import { Badge as B } from "../Badge/Badge.es.js";
10
- var J = /* @__PURE__ */ ((l) => (l.None = "None", l.XSmall = "XSmall", l.Small = "Small", l.Medium = "Medium", l.Large = "Large", l))(J || {}), P = /* @__PURE__ */ ((l) => (l.Small = "Small", l.Large = "Large", l))(P || {});
10
+ var J = /* @__PURE__ */ ((o) => (o.None = "None", o.XSmall = "XSmall", o.Small = "Small", o.Medium = "Medium", o.Large = "Large", o))(J || {}), P = /* @__PURE__ */ ((o) => (o.Small = "Small", o.Large = "Large", o))(P || {});
11
11
  const Q = {
12
12
  None: "tw-pl-0",
13
13
  XSmall: "tw-pl-xs",
14
14
  Small: "tw-pl-s",
15
15
  Medium: "tw-pl-m",
16
16
  Large: "tw-pl-l"
17
- }, Z = ({
18
- paddingX: l,
19
- size: y,
17
+ }, Z = (o, g) => o.disabled ? "tw-text-text-disabled" : o.id === g ? "tw-font-medium tw-text-text" : "tw-text-text-weak hover:tw-text-text", X = ({
18
+ paddingX: o,
19
+ size: g,
20
20
  activeItemId: i,
21
21
  children: v,
22
22
  onChange: N,
23
- maxHeight: C,
24
- minHeight: M
23
+ maxHeight: $,
24
+ minHeight: C
25
25
  }) => {
26
- const T = q(), k = V(null), [E, D] = h(!1), [w, c] = h(!1), g = A.map(v, (t) => L(t) ? t == null ? void 0 : t.props : null) ?? [], [F, R] = h([0]), a = U(() => {
26
+ const M = q(), k = V(null), [E, D] = y(!1), [w, c] = y(!1), x = A.map(v, (t) => L(t) ? t == null ? void 0 : t.props : null) ?? [], [F, R] = y([0]), a = U(() => {
27
27
  const t = k.current;
28
28
  D((t && t.scrollWidth > t.clientWidth) ?? !1);
29
29
  const r = [];
30
30
  if (t) {
31
31
  for (const e of t.children) {
32
- const s = [...t.children].indexOf(e), f = t.getBoundingClientRect(), m = e.getBoundingClientRect();
33
- (m.right > f.right || m.left < f.left) && r.push(s);
32
+ const s = [...t.children].indexOf(e), f = t.getBoundingClientRect(), u = e.getBoundingClientRect();
33
+ (u.right > f.right || u.left < f.left) && r.push(s);
34
34
  }
35
- const o = [...r].sort((e, s) => e - s);
36
- R(o);
35
+ const n = [...r].sort((e, s) => e - s);
36
+ R(n);
37
37
  }
38
- }, []), x = () => F.map((t) => g[t]), S = (t, r) => {
39
- const o = t.findIndex((e) => e.id === i);
40
- return t.filter((e, s) => r === "next" && s > o && !e.disabled || r === "previous" && s < o && !e.disabled ? e : !1);
38
+ }, []), b = () => F.map((t) => x[t]), S = (t, r) => {
39
+ const n = t.findIndex((e) => e.id === i);
40
+ return t.filter((e, s) => r === "next" && s > n && !e.disabled || r === "previous" && s < n && !e.disabled ? e : !1);
41
41
  }, O = (t) => {
42
42
  t.stopPropagation();
43
- const r = x(), o = t.target, e = o.id.includes("-m"), s = o.id.replace("-btn-m", ""), f = e ? r : g, m = S(f, "next"), b = S(f, "previous");
44
- (t.key === "ArrowRight" || t.key === "ArrowDown") && m.length > 0 && d(m[0].id, e), (t.key === "ArrowLeft" || t.key === "ArrowUp") && b.length > 0 && d(b[b.length - 1].id, e), t.key === "Enter" && e && (d(s, !0), c(!1), document.getElementById(`${s}-content`).focus()), o.id.includes("-m") || c(!1);
43
+ const r = b(), n = t.target, e = n.id.includes("-m"), s = n.id.replace("-btn-m", ""), f = e ? r : x, u = S(f, "next"), h = S(f, "previous");
44
+ (t.key === "ArrowRight" || t.key === "ArrowDown") && u.length > 0 && d(u[0].id, e), (t.key === "ArrowLeft" || t.key === "ArrowUp") && h.length > 0 && d(h[h.length - 1].id, e), t.key === "Enter" && e && (d(s, !0), c(!1), document.getElementById(`${s}-content`).focus()), n.id.includes("-m") || c(!1);
45
45
  }, d = (t, r) => {
46
46
  try {
47
- const o = document.getElementById(`${t}-btn`), e = document.getElementById(
47
+ const n = document.getElementById(`${t}-btn`), e = document.getElementById(
48
48
  r ? `${t}-btn-m` : `${t}-btn`
49
49
  );
50
- N && N(t), E && o.scrollIntoView({ behavior: "smooth", block: "end", inline: "end" }), e.focus();
51
- } catch (o) {
52
- throw o.message;
50
+ N && N(t), E && n.scrollIntoView({ behavior: "smooth", block: "end", inline: "end" }), e.focus();
51
+ } catch (n) {
52
+ throw n.message;
53
53
  }
54
54
  }, j = (t) => {
55
55
  a();
56
- const r = x();
56
+ const r = b();
57
57
  if (t.key === "Enter" && !w && r.length > 0) {
58
- const o = document.getElementById(`${r[0].id}-btn-m`);
59
- o && o.focus();
58
+ const n = document.getElementById(`${r[0].id}-btn-m`);
59
+ n && n.focus();
60
60
  }
61
61
  w && (t.key === "ArrowRight" || t.key === "ArrowDown") && d(r[0].id, !0);
62
62
  };
63
- $(() => {
63
+ T(() => {
64
64
  a();
65
- }, [a]), $(() => (window.addEventListener("resize", a), () => {
65
+ }, [a]), T(() => (window.addEventListener("resize", a), () => {
66
66
  window.removeEventListener("resize", a);
67
67
  }), [a]);
68
- const { isFocusVisible: I, focusProps: K } = Y();
69
- return /* @__PURE__ */ u(z, { children: [
70
- /* @__PURE__ */ u("div", { "data-test-id": "tabs", className: "tw-flex tw-relative tw-border-b tw-border-line", children: [
71
- /* @__PURE__ */ n(
68
+ const { isFocusVisible: I, focusProps: z } = Y();
69
+ return /* @__PURE__ */ m(K, { children: [
70
+ /* @__PURE__ */ m("div", { "data-test-id": "tabs", className: "tw-flex tw-relative tw-border-b tw-border-line", children: [
71
+ /* @__PURE__ */ l(
72
72
  "div",
73
73
  {
74
74
  ref: k,
@@ -76,12 +76,12 @@ const Q = {
76
76
  className: p([
77
77
  "tw-overflow-x-hidden tw-flex-shrink-0 tw-h-full tw-w-full tw-flex tw-justify-start",
78
78
  Q[
79
- l ?? "Small"
79
+ o ?? "Small"
80
80
  /* Small */
81
81
  ],
82
- y === "Small" ? "tw-gap-xxs" : "tw-gap-xs "
82
+ g === "Small" ? "tw-gap-xxs" : "tw-gap-xs "
83
83
  ]),
84
- children: g.map((t) => /* @__PURE__ */ u(
84
+ children: x.map((t) => /* @__PURE__ */ m(
85
85
  "button",
86
86
  {
87
87
  "data-test-id": "tab-item",
@@ -94,26 +94,23 @@ const Q = {
94
94
  id: `${t.id}-btn`,
95
95
  className: p([
96
96
  "tw-group tw-relative tw-mx-0 tw-py-4 tw-px-2 tw-w-max tw-cursor-pointer tw-flex tw-items-center tw-justify-center tw-whitespace-nowrap",
97
- t.disabled && "tw-text-text-disabled",
98
- !t.disabled && "hover:tw-text-text",
99
- t.id === i ? "tw-font-medium tw-text-text" : "tw-text-text-weak",
100
- y === "Small" ? "tw-text-sm" : "tw-text-md"
97
+ Z(t, i)
101
98
  ]),
102
99
  onClick: () => {
103
100
  t.disabled || (d(t.id, !1), c(!1));
104
101
  },
105
102
  onKeyDown: (r) => O(r),
106
103
  children: [
107
- t.decorator && /* @__PURE__ */ n("span", { className: "tw-mr-1.5", children: t.decorator }),
108
- /* @__PURE__ */ n("span", { children: t.label }),
109
- t.badge && /* @__PURE__ */ n("span", { className: "tw-ml-1.5", children: /* @__PURE__ */ n(B, { disabled: t.disabled, style: t.badge.style, children: t.badge.children }) }),
110
- t.id === i && /* @__PURE__ */ n(
104
+ t.decorator && /* @__PURE__ */ l("span", { className: "tw-mr-1.5", children: t.decorator }),
105
+ /* @__PURE__ */ l("span", { children: t.label }),
106
+ t.badge && /* @__PURE__ */ l("span", { className: "tw-ml-1.5", children: /* @__PURE__ */ l(B, { disabled: t.disabled, style: t.badge.style, children: t.badge.children }) }),
107
+ t.id === i && /* @__PURE__ */ l(
111
108
  H.div,
112
109
  {
113
110
  initial: !1,
114
111
  layoutDependency: i,
115
112
  "data-test-id": "tab-active-highlight",
116
- layoutId: T,
113
+ layoutId: M,
117
114
  className: "tw-absolute tw-h-[3px] tw-bg-box-selected-strong tw-rounded-t-x-large tw-w-full tw-bottom-0"
118
115
  }
119
116
  )
@@ -123,13 +120,13 @@ const Q = {
123
120
  ))
124
121
  }
125
122
  ),
126
- E && /* @__PURE__ */ u(
123
+ E && /* @__PURE__ */ m(
127
124
  "div",
128
125
  {
129
126
  "data-test-id": "tab-overflow",
130
127
  className: "tw-absolute tw-z-50 tw-right-3 tw-bottom-0 tw-top-0 tw-flex tw-justify-center tw-items-center",
131
128
  children: [
132
- /* @__PURE__ */ n(
129
+ /* @__PURE__ */ l(
133
130
  "button",
134
131
  {
135
132
  className: p([
@@ -141,18 +138,18 @@ const Q = {
141
138
  a(), c(!w);
142
139
  },
143
140
  onKeyDown: (t) => j(t),
144
- ...K,
145
- children: /* @__PURE__ */ n(G, {})
141
+ ...z,
142
+ children: /* @__PURE__ */ l(G, {})
146
143
  }
147
144
  ),
148
- w && /* @__PURE__ */ n(
145
+ w && /* @__PURE__ */ l(
149
146
  "div",
150
147
  {
151
148
  className: "tw-absolute tw-right-0 tw-top-11 tw-px-3 tw-pt-3 tw-bg-base tw-shadow tw-w-max",
152
149
  role: "dialog",
153
- children: x().map((t) => {
154
- var r, o;
155
- return /* @__PURE__ */ u(
150
+ children: b().map((t) => {
151
+ var r, n;
152
+ return /* @__PURE__ */ m(
156
153
  "button",
157
154
  {
158
155
  className: p([
@@ -172,8 +169,8 @@ const Q = {
172
169
  onKeyDown: (e) => O(e),
173
170
  children: [
174
171
  t.decorator,
175
- /* @__PURE__ */ n("span", { className: "tw-mr-1 tw-ml-1.5", children: t.label }),
176
- t.badge && /* @__PURE__ */ n(B, { disabled: t.disabled, style: (r = t.badge) == null ? void 0 : r.style, children: (o = t.badge) == null ? void 0 : o.children })
172
+ /* @__PURE__ */ l("span", { className: "tw-mr-1 tw-ml-1.5", children: t.label }),
173
+ t.badge && /* @__PURE__ */ l(B, { disabled: t.disabled, style: (r = t.badge) == null ? void 0 : r.style, children: (n = t.badge) == null ? void 0 : n.children })
177
174
  ]
178
175
  },
179
176
  t.id
@@ -185,13 +182,13 @@ const Q = {
185
182
  }
186
183
  )
187
184
  ] }),
188
- /* @__PURE__ */ n("div", { "data-test-id": "tab-content", className: "tw-flex tw-flex-col tw-overflow-y-auto", children: /* @__PURE__ */ n("div", { className: "tw-mr-0", style: { maxHeight: C, minHeight: M }, children: A.map(v, (t) => L(t) ? W(t, { ...t.props, active: t.props.id === i }) : null) }) })
185
+ /* @__PURE__ */ l("div", { "data-test-id": "tab-content", className: "tw-flex tw-flex-col tw-overflow-y-auto", children: /* @__PURE__ */ l("div", { className: "tw-mr-0", style: { maxHeight: $, minHeight: C }, children: A.map(v, (t) => L(t) ? W(t, { ...t.props, active: t.props.id === i }) : null) }) })
189
186
  ] });
190
187
  };
191
- Z.displayName = "FondueTabs";
188
+ X.displayName = "FondueTabs";
192
189
  export {
193
190
  P as TabSize,
194
- Z as Tabs,
191
+ X as Tabs,
195
192
  J as TabsPaddingX
196
193
  };
197
194
  //# sourceMappingURL=Tabs.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.es.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n Children,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { TabItemProps } from '@components/Tabs/TabItem';\nimport { merge } from '@utilities/merge';\nimport { IconDotsHorizontal } from '@foundation/Icon/Generated';\nimport { Badge } from '@components/Badge';\nimport { motion } from 'framer-motion';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { DimensionUnity } from '@utilities/dimensions';\n\nexport enum TabsPaddingX {\n None = 'None',\n XSmall = 'XSmall',\n Small = 'Small',\n Medium = 'Medium',\n Large = 'Large',\n}\n\nexport enum TabSize {\n Small = 'Small',\n Large = 'Large',\n}\n\nexport type TabsProps = {\n paddingX?: TabsPaddingX;\n size?: TabSize;\n activeItemId: string;\n children: ReactNode;\n onChange?: (tabId: string) => void;\n maxHeight?: `${number}${DimensionUnity}`;\n minHeight?: `${number}${DimensionUnity}`;\n};\n\nconst paddingMap: Record<TabsPaddingX, string> = {\n [TabsPaddingX.None]: 'tw-pl-0',\n [TabsPaddingX.XSmall]: 'tw-pl-xs',\n [TabsPaddingX.Small]: 'tw-pl-s',\n [TabsPaddingX.Medium]: 'tw-pl-m',\n [TabsPaddingX.Large]: 'tw-pl-l',\n};\n\nexport const Tabs = ({\n paddingX,\n size,\n activeItemId,\n children,\n onChange,\n maxHeight,\n minHeight,\n}: TabsProps): ReactElement => {\n const groupId = useMemoizedId();\n const tabNavRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const [isMenuOpened, setIsMenuOpened] = useState(false);\n\n const tabs: TabItemProps[] =\n Children.map(children, (child) => {\n if (!isValidElement<TabItemProps>(child)) {\n return null;\n }\n return child?.props;\n }) ?? [];\n\n const [overflowArray, setOverflowArray] = useState([0]);\n\n const checkIfOverflowing = useCallback(() => {\n const tabNav = tabNavRef.current;\n setIsOverflowing((tabNav && tabNav.scrollWidth > tabNav.clientWidth) ?? false);\n const overFlowIndex = [];\n if (tabNav) {\n for (const tabItem of tabNav.children) {\n const i = [...tabNav.children].indexOf(tabItem);\n const navPosition = tabNav.getBoundingClientRect();\n const tabPosition = tabItem.getBoundingClientRect();\n if (tabPosition.right > navPosition.right || tabPosition.left < navPosition.left) {\n overFlowIndex.push(i);\n }\n }\n\n const overFlowIndexInAscOrder = [...overFlowIndex].sort((a, b) => a - b);\n setOverflowArray(overFlowIndexInAscOrder);\n }\n }, []);\n\n const getOverflownTabs = () => {\n return overflowArray.map((i) => {\n return tabs[i];\n });\n };\n\n const filterTabList = (array: TabItemProps[], direction: string) => {\n const activeItemIndex = array.findIndex((tab) => tab.id === activeItemId);\n\n return array.filter((tab, index) => {\n if (direction === 'next') {\n if (index > activeItemIndex && !tab.disabled) {\n return tab;\n }\n }\n\n if (direction === 'previous') {\n if (index < activeItemIndex && !tab.disabled) {\n return tab;\n }\n }\n\n return false;\n });\n };\n\n const handleKeyboardTabChange = (event: KeyboardEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n const overflownTabs = getOverflownTabs();\n const target = event.target as HTMLElement;\n const fromOverflow = target.id.includes('-m');\n const currentTabId = target.id.replace('-btn-m', '');\n const currentTabsArray = fromOverflow ? overflownTabs : tabs;\n\n const nextTabs = filterTabList(currentTabsArray, 'next');\n const previousTabs = filterTabList(currentTabsArray, 'previous');\n\n if ((event.key === 'ArrowRight' || event.key === 'ArrowDown') && nextTabs.length > 0) {\n triggerTabButton(nextTabs[0].id, fromOverflow);\n }\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowUp') && previousTabs.length > 0) {\n triggerTabButton(previousTabs[previousTabs.length - 1].id, fromOverflow);\n }\n\n if (event.key === 'Enter' && fromOverflow) {\n triggerTabButton(currentTabId, true);\n setIsMenuOpened(false);\n const contentSection = document.getElementById(`${currentTabId}-content`) as HTMLDivElement;\n contentSection.focus();\n }\n\n if (!target.id.includes('-m')) {\n setIsMenuOpened(false);\n }\n };\n\n const triggerTabButton = (elementId: string, fromOverflow: boolean) => {\n try {\n const tabElement = document.getElementById(`${elementId}-btn`) as HTMLButtonElement;\n const buttonElement = document.getElementById(\n fromOverflow ? `${elementId}-btn-m` : `${elementId}-btn`,\n ) as HTMLButtonElement;\n if (onChange) {\n onChange(elementId);\n }\n if (isOverflowing) {\n tabElement.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'end' });\n }\n buttonElement.focus();\n } catch (error) {\n throw (error as Error).message;\n }\n };\n\n const triggerOverflowMenu = (event: KeyboardEvent<HTMLButtonElement>) => {\n checkIfOverflowing();\n const overflownTabs = getOverflownTabs();\n\n if (event.key === 'Enter') {\n if (!isMenuOpened && overflownTabs.length > 0) {\n const buttonElement = document.getElementById(`${overflownTabs[0].id}-btn-m`) as HTMLButtonElement;\n if (buttonElement) {\n buttonElement.focus();\n }\n }\n }\n\n if (isMenuOpened && (event.key === 'ArrowRight' || event.key === 'ArrowDown')) {\n triggerTabButton(overflownTabs[0].id, true);\n }\n };\n\n // First render\n useEffect(() => {\n checkIfOverflowing();\n }, [checkIfOverflowing]);\n\n useEffect(() => {\n window.addEventListener('resize', checkIfOverflowing);\n return () => {\n window.removeEventListener('resize', checkIfOverflowing);\n };\n }, [checkIfOverflowing]);\n\n const { isFocusVisible, focusProps } = useFocusRing();\n\n return (\n <>\n <div data-test-id=\"tabs\" className=\"tw-flex tw-relative tw-border-b tw-border-line\">\n <div\n ref={tabNavRef}\n role=\"tablist\"\n className={merge([\n 'tw-overflow-x-hidden tw-flex-shrink-0 tw-h-full tw-w-full tw-flex tw-justify-start',\n paddingMap[paddingX ?? TabsPaddingX.Small],\n size === TabSize.Small ? 'tw-gap-xxs' : 'tw-gap-xs ',\n ])}\n >\n {tabs.map((tab) => {\n return (\n <button\n data-test-id=\"tab-item\"\n role=\"tab\"\n type=\"button\"\n aria-selected={tab.id === activeItemId}\n aria-controls={`${tab.id}-content`}\n aria-hidden={tab.disabled}\n tabIndex={tab.id === activeItemId ? 0 : -1}\n id={`${tab.id}-btn`}\n className={merge([\n 'tw-group tw-relative tw-mx-0 tw-py-4 tw-px-2 tw-w-max tw-cursor-pointer tw-flex tw-items-center tw-justify-center tw-whitespace-nowrap',\n tab.disabled && 'tw-text-text-disabled',\n !tab.disabled && 'hover:tw-text-text',\n tab.id === activeItemId ? 'tw-font-medium tw-text-text' : 'tw-text-text-weak',\n size === TabSize.Small ? 'tw-text-sm' : 'tw-text-md',\n ])}\n key={tab.id}\n onClick={() => {\n if (!tab.disabled) {\n triggerTabButton(tab.id, false);\n setIsMenuOpened(false);\n }\n }}\n onKeyDown={(event) => handleKeyboardTabChange(event)}\n >\n {tab.decorator && <span className=\"tw-mr-1.5\">{tab.decorator}</span>}\n\n <span>{tab.label}</span>\n\n {tab.badge && (\n <span className=\"tw-ml-1.5\">\n <Badge disabled={tab.disabled} style={tab.badge.style}>\n {tab.badge.children}\n </Badge>\n </span>\n )}\n {tab.id === activeItemId && (\n <motion.div\n initial={false}\n layoutDependency={activeItemId}\n data-test-id=\"tab-active-highlight\"\n layoutId={groupId}\n className=\"tw-absolute tw-h-[3px] tw-bg-box-selected-strong tw-rounded-t-x-large tw-w-full tw-bottom-0\"\n />\n )}\n </button>\n );\n })}\n </div>\n {isOverflowing && (\n <div\n data-test-id=\"tab-overflow\"\n className=\"tw-absolute tw-z-50 tw-right-3 tw-bottom-0 tw-top-0 tw-flex tw-justify-center tw-items-center\"\n >\n <button\n className={merge([\n 'tw-w-6 tw-h-6 tw-bg-box-neutral tw-rounded tw-flex tw-justify-center tw-items-center',\n isFocusVisible ? FOCUS_STYLE : '',\n ])}\n type=\"button\"\n onClick={() => {\n checkIfOverflowing();\n setIsMenuOpened(!isMenuOpened);\n }}\n onKeyDown={(event) => triggerOverflowMenu(event)}\n {...focusProps}\n >\n <IconDotsHorizontal />\n </button>\n {isMenuOpened && (\n <div\n className=\"tw-absolute tw-right-0 tw-top-11 tw-px-3 tw-pt-3 tw-bg-base tw-shadow tw-w-max\"\n role=\"dialog\"\n >\n {getOverflownTabs().map((tab) => {\n return (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-w-full tw-mb-3 tw-text-left tw-text-text-weak',\n tab.disabled && 'tw-text-text-disabled',\n ])}\n key={tab.id}\n onClick={() => {\n if (!tab.disabled) {\n triggerTabButton(tab.id, true);\n setIsMenuOpened(false);\n }\n }}\n role=\"tab\"\n type=\"button\"\n aria-selected={tab.id === activeItemId}\n aria-controls={`${tab.id}-content`}\n aria-hidden={tab.disabled}\n tabIndex={!tab.disabled && isMenuOpened ? 0 : -1}\n id={`${tab.id}-btn-m`}\n onKeyDown={(event) => handleKeyboardTabChange(event)}\n >\n {tab.decorator}\n <span className=\"tw-mr-1 tw-ml-1.5\">{tab.label}</span>\n {tab.badge && (\n <Badge disabled={tab.disabled} style={tab.badge?.style}>\n {tab.badge?.children}\n </Badge>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n\n <div data-test-id=\"tab-content\" className=\"tw-flex tw-flex-col tw-overflow-y-auto\">\n <div className=\"tw-mr-0\" style={{ maxHeight, minHeight }}>\n {Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return null;\n }\n\n return cloneElement(child, { ...child.props, active: child.props.id === activeItemId });\n })}\n </div>\n </div>\n </>\n );\n};\nTabs.displayName = 'FondueTabs';\n"],"names":["TabsPaddingX","TabSize","paddingMap","Tabs","paddingX","size","activeItemId","children","onChange","maxHeight","minHeight","groupId","useMemoizedId","tabNavRef","useRef","isOverflowing","setIsOverflowing","useState","isMenuOpened","setIsMenuOpened","tabs","Children","child","isValidElement","overflowArray","setOverflowArray","checkIfOverflowing","useCallback","tabNav","overFlowIndex","tabItem","i","navPosition","tabPosition","overFlowIndexInAscOrder","a","b","getOverflownTabs","filterTabList","array","direction","activeItemIndex","tab","index","handleKeyboardTabChange","event","overflownTabs","target","fromOverflow","currentTabId","currentTabsArray","nextTabs","previousTabs","triggerTabButton","elementId","tabElement","buttonElement","error","triggerOverflowMenu","useEffect","isFocusVisible","focusProps","useFocusRing","jsxs","Fragment","jsx","merge","Badge","motion","FOCUS_STYLE","IconDotsHorizontal","_a","_b","cloneElement"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.es.js","sources":["../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n Children,\n KeyboardEvent,\n ReactElement,\n ReactNode,\n cloneElement,\n isValidElement,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { TabItemProps } from '@components/Tabs/TabItem';\nimport { merge } from '@utilities/merge';\nimport { IconDotsHorizontal } from '@foundation/Icon/Generated';\nimport { Badge } from '@components/Badge';\nimport { motion } from 'framer-motion';\nimport { useFocusRing } from '@react-aria/focus';\nimport { FOCUS_STYLE } from '@utilities/focusStyle';\nimport { useMemoizedId } from '@hooks/useMemoizedId';\nimport { DimensionUnity } from '@utilities/dimensions';\n\nexport enum TabsPaddingX {\n None = 'None',\n XSmall = 'XSmall',\n Small = 'Small',\n Medium = 'Medium',\n Large = 'Large',\n}\n\nexport enum TabSize {\n Small = 'Small',\n Large = 'Large',\n}\n\nexport type TabsProps = {\n paddingX?: TabsPaddingX;\n size?: TabSize;\n activeItemId: string;\n children: ReactNode;\n onChange?: (tabId: string) => void;\n maxHeight?: `${number}${DimensionUnity}`;\n minHeight?: `${number}${DimensionUnity}`;\n};\n\nconst paddingMap: Record<TabsPaddingX, string> = {\n [TabsPaddingX.None]: 'tw-pl-0',\n [TabsPaddingX.XSmall]: 'tw-pl-xs',\n [TabsPaddingX.Small]: 'tw-pl-s',\n [TabsPaddingX.Medium]: 'tw-pl-m',\n [TabsPaddingX.Large]: 'tw-pl-l',\n};\n\nconst getTabButtonTextStyle = (tab: TabItemProps, activeItemId: string) => {\n if (tab.disabled) {\n return 'tw-text-text-disabled';\n }\n\n if (tab.id === activeItemId) {\n return 'tw-font-medium tw-text-text';\n }\n\n return 'tw-text-text-weak hover:tw-text-text';\n};\n\nexport const Tabs = ({\n paddingX,\n size,\n activeItemId,\n children,\n onChange,\n maxHeight,\n minHeight,\n}: TabsProps): ReactElement => {\n const groupId = useMemoizedId();\n const tabNavRef = useRef<HTMLDivElement | null>(null);\n const [isOverflowing, setIsOverflowing] = useState(false);\n const [isMenuOpened, setIsMenuOpened] = useState(false);\n\n const tabs: TabItemProps[] =\n Children.map(children, (child) => {\n if (!isValidElement<TabItemProps>(child)) {\n return null;\n }\n return child?.props;\n }) ?? [];\n\n const [overflowArray, setOverflowArray] = useState([0]);\n\n const checkIfOverflowing = useCallback(() => {\n const tabNav = tabNavRef.current;\n setIsOverflowing((tabNav && tabNav.scrollWidth > tabNav.clientWidth) ?? false);\n const overFlowIndex = [];\n if (tabNav) {\n for (const tabItem of tabNav.children) {\n const i = [...tabNav.children].indexOf(tabItem);\n const navPosition = tabNav.getBoundingClientRect();\n const tabPosition = tabItem.getBoundingClientRect();\n if (tabPosition.right > navPosition.right || tabPosition.left < navPosition.left) {\n overFlowIndex.push(i);\n }\n }\n\n const overFlowIndexInAscOrder = [...overFlowIndex].sort((a, b) => a - b);\n setOverflowArray(overFlowIndexInAscOrder);\n }\n }, []);\n\n const getOverflownTabs = () => {\n return overflowArray.map((i) => {\n return tabs[i];\n });\n };\n\n const filterTabList = (array: TabItemProps[], direction: string) => {\n const activeItemIndex = array.findIndex((tab) => tab.id === activeItemId);\n\n return array.filter((tab, index) => {\n if (direction === 'next') {\n if (index > activeItemIndex && !tab.disabled) {\n return tab;\n }\n }\n\n if (direction === 'previous') {\n if (index < activeItemIndex && !tab.disabled) {\n return tab;\n }\n }\n\n return false;\n });\n };\n\n const handleKeyboardTabChange = (event: KeyboardEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n\n const overflownTabs = getOverflownTabs();\n const target = event.target as HTMLElement;\n const fromOverflow = target.id.includes('-m');\n const currentTabId = target.id.replace('-btn-m', '');\n const currentTabsArray = fromOverflow ? overflownTabs : tabs;\n\n const nextTabs = filterTabList(currentTabsArray, 'next');\n const previousTabs = filterTabList(currentTabsArray, 'previous');\n\n if ((event.key === 'ArrowRight' || event.key === 'ArrowDown') && nextTabs.length > 0) {\n triggerTabButton(nextTabs[0].id, fromOverflow);\n }\n\n if ((event.key === 'ArrowLeft' || event.key === 'ArrowUp') && previousTabs.length > 0) {\n triggerTabButton(previousTabs[previousTabs.length - 1].id, fromOverflow);\n }\n\n if (event.key === 'Enter' && fromOverflow) {\n triggerTabButton(currentTabId, true);\n setIsMenuOpened(false);\n const contentSection = document.getElementById(`${currentTabId}-content`) as HTMLDivElement;\n contentSection.focus();\n }\n\n if (!target.id.includes('-m')) {\n setIsMenuOpened(false);\n }\n };\n\n const triggerTabButton = (elementId: string, fromOverflow: boolean) => {\n try {\n const tabElement = document.getElementById(`${elementId}-btn`) as HTMLButtonElement;\n const buttonElement = document.getElementById(\n fromOverflow ? `${elementId}-btn-m` : `${elementId}-btn`,\n ) as HTMLButtonElement;\n if (onChange) {\n onChange(elementId);\n }\n if (isOverflowing) {\n tabElement.scrollIntoView({ behavior: 'smooth', block: 'end', inline: 'end' });\n }\n buttonElement.focus();\n } catch (error) {\n throw (error as Error).message;\n }\n };\n\n const triggerOverflowMenu = (event: KeyboardEvent<HTMLButtonElement>) => {\n checkIfOverflowing();\n const overflownTabs = getOverflownTabs();\n\n if (event.key === 'Enter') {\n if (!isMenuOpened && overflownTabs.length > 0) {\n const buttonElement = document.getElementById(`${overflownTabs[0].id}-btn-m`) as HTMLButtonElement;\n if (buttonElement) {\n buttonElement.focus();\n }\n }\n }\n\n if (isMenuOpened && (event.key === 'ArrowRight' || event.key === 'ArrowDown')) {\n triggerTabButton(overflownTabs[0].id, true);\n }\n };\n\n // First render\n useEffect(() => {\n checkIfOverflowing();\n }, [checkIfOverflowing]);\n\n useEffect(() => {\n window.addEventListener('resize', checkIfOverflowing);\n return () => {\n window.removeEventListener('resize', checkIfOverflowing);\n };\n }, [checkIfOverflowing]);\n\n const { isFocusVisible, focusProps } = useFocusRing();\n\n return (\n <>\n <div data-test-id=\"tabs\" className=\"tw-flex tw-relative tw-border-b tw-border-line\">\n <div\n ref={tabNavRef}\n role=\"tablist\"\n className={merge([\n 'tw-overflow-x-hidden tw-flex-shrink-0 tw-h-full tw-w-full tw-flex tw-justify-start',\n paddingMap[paddingX ?? TabsPaddingX.Small],\n size === TabSize.Small ? 'tw-gap-xxs' : 'tw-gap-xs ',\n ])}\n >\n {tabs.map((tab) => {\n return (\n <button\n data-test-id=\"tab-item\"\n role=\"tab\"\n type=\"button\"\n aria-selected={tab.id === activeItemId}\n aria-controls={`${tab.id}-content`}\n aria-hidden={tab.disabled}\n tabIndex={tab.id === activeItemId ? 0 : -1}\n id={`${tab.id}-btn`}\n className={merge([\n 'tw-group tw-relative tw-mx-0 tw-py-4 tw-px-2 tw-w-max tw-cursor-pointer tw-flex tw-items-center tw-justify-center tw-whitespace-nowrap',\n getTabButtonTextStyle(tab, activeItemId),\n ])}\n key={tab.id}\n onClick={() => {\n if (!tab.disabled) {\n triggerTabButton(tab.id, false);\n setIsMenuOpened(false);\n }\n }}\n onKeyDown={(event) => handleKeyboardTabChange(event)}\n >\n {tab.decorator && <span className=\"tw-mr-1.5\">{tab.decorator}</span>}\n\n <span>{tab.label}</span>\n\n {tab.badge && (\n <span className=\"tw-ml-1.5\">\n <Badge disabled={tab.disabled} style={tab.badge.style}>\n {tab.badge.children}\n </Badge>\n </span>\n )}\n {tab.id === activeItemId && (\n <motion.div\n initial={false}\n layoutDependency={activeItemId}\n data-test-id=\"tab-active-highlight\"\n layoutId={groupId}\n className=\"tw-absolute tw-h-[3px] tw-bg-box-selected-strong tw-rounded-t-x-large tw-w-full tw-bottom-0\"\n />\n )}\n </button>\n );\n })}\n </div>\n {isOverflowing && (\n <div\n data-test-id=\"tab-overflow\"\n className=\"tw-absolute tw-z-50 tw-right-3 tw-bottom-0 tw-top-0 tw-flex tw-justify-center tw-items-center\"\n >\n <button\n className={merge([\n 'tw-w-6 tw-h-6 tw-bg-box-neutral tw-rounded tw-flex tw-justify-center tw-items-center',\n isFocusVisible ? FOCUS_STYLE : '',\n ])}\n type=\"button\"\n onClick={() => {\n checkIfOverflowing();\n setIsMenuOpened(!isMenuOpened);\n }}\n onKeyDown={(event) => triggerOverflowMenu(event)}\n {...focusProps}\n >\n <IconDotsHorizontal />\n </button>\n {isMenuOpened && (\n <div\n className=\"tw-absolute tw-right-0 tw-top-11 tw-px-3 tw-pt-3 tw-bg-base tw-shadow tw-w-max\"\n role=\"dialog\"\n >\n {getOverflownTabs().map((tab) => {\n return (\n <button\n className={merge([\n 'tw-flex tw-items-center tw-w-full tw-mb-3 tw-text-left tw-text-text-weak',\n tab.disabled && 'tw-text-text-disabled',\n ])}\n key={tab.id}\n onClick={() => {\n if (!tab.disabled) {\n triggerTabButton(tab.id, true);\n setIsMenuOpened(false);\n }\n }}\n role=\"tab\"\n type=\"button\"\n aria-selected={tab.id === activeItemId}\n aria-controls={`${tab.id}-content`}\n aria-hidden={tab.disabled}\n tabIndex={!tab.disabled && isMenuOpened ? 0 : -1}\n id={`${tab.id}-btn-m`}\n onKeyDown={(event) => handleKeyboardTabChange(event)}\n >\n {tab.decorator}\n <span className=\"tw-mr-1 tw-ml-1.5\">{tab.label}</span>\n {tab.badge && (\n <Badge disabled={tab.disabled} style={tab.badge?.style}>\n {tab.badge?.children}\n </Badge>\n )}\n </button>\n );\n })}\n </div>\n )}\n </div>\n )}\n </div>\n\n <div data-test-id=\"tab-content\" className=\"tw-flex tw-flex-col tw-overflow-y-auto\">\n <div className=\"tw-mr-0\" style={{ maxHeight, minHeight }}>\n {Children.map(children, (child) => {\n if (!isValidElement(child)) {\n return null;\n }\n\n return cloneElement(child, { ...child.props, active: child.props.id === activeItemId });\n })}\n </div>\n </div>\n </>\n );\n};\nTabs.displayName = 'FondueTabs';\n"],"names":["TabsPaddingX","TabSize","paddingMap","getTabButtonTextStyle","tab","activeItemId","Tabs","paddingX","size","children","onChange","maxHeight","minHeight","groupId","useMemoizedId","tabNavRef","useRef","isOverflowing","setIsOverflowing","useState","isMenuOpened","setIsMenuOpened","tabs","Children","child","isValidElement","overflowArray","setOverflowArray","checkIfOverflowing","useCallback","tabNav","overFlowIndex","tabItem","i","navPosition","tabPosition","overFlowIndexInAscOrder","a","b","getOverflownTabs","filterTabList","array","direction","activeItemIndex","index","handleKeyboardTabChange","event","overflownTabs","target","fromOverflow","currentTabId","currentTabsArray","nextTabs","previousTabs","triggerTabButton","elementId","tabElement","buttonElement","error","triggerOverflowMenu","useEffect","isFocusVisible","focusProps","useFocusRing","jsxs","Fragment","jsx","merge","Badge","motion","FOCUS_STYLE","IconDotsHorizontal","_a","_b","cloneElement"],"mappings":";;;;;;;;;AAwBY,IAAAA,sBAAAA,OACRA,EAAA,OAAO,QACPA,EAAA,SAAS,UACTA,EAAA,QAAQ,SACRA,EAAA,SAAS,UACTA,EAAA,QAAQ,SALAA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACRA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SAFAA,IAAAA,KAAA,CAAA,CAAA;AAeZ,MAAMC,IAA2C;AAAA,EAC5C,MAAoB;AAAA,EACpB,QAAsB;AAAA,EACtB,OAAqB;AAAA,EACrB,QAAsB;AAAA,EACtB,OAAqB;AAC1B,GAEMC,IAAwB,CAACC,GAAmBC,MAC1CD,EAAI,WACG,0BAGPA,EAAI,OAAOC,IACJ,gCAGJ,wCAGEC,IAAO,CAAC;AAAA,EACjB,UAAAC;AAAA,EACA,MAAAC;AAAA,EACA,cAAAH;AAAA,EACA,UAAAI;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,WAAAC;AACJ,MAA+B;AAC3B,QAAMC,IAAUC,KACVC,IAAYC,EAA8B,IAAI,GAC9C,CAACC,GAAeC,CAAgB,IAAIC,EAAS,EAAK,GAClD,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAK,GAEhDG,IACFC,EAAS,IAAId,GAAU,CAACe,MACfC,EAA6BD,CAAK,IAGhCA,KAAA,gBAAAA,EAAO,QAFH,IAGd,KAAK,CAAA,GAEJ,CAACE,GAAeC,CAAgB,IAAIR,EAAS,CAAC,CAAC,CAAC,GAEhDS,IAAqBC,EAAY,MAAM;AACzC,UAAMC,IAASf,EAAU;AACzB,IAAAG,GAAkBY,KAAUA,EAAO,cAAcA,EAAO,gBAAgB,EAAK;AAC7E,UAAMC,IAAgB,CAAA;AACtB,QAAID,GAAQ;AACG,iBAAAE,KAAWF,EAAO,UAAU;AACnC,cAAMG,IAAI,CAAC,GAAGH,EAAO,QAAQ,EAAE,QAAQE,CAAO,GACxCE,IAAcJ,EAAO,yBACrBK,IAAcH,EAAQ;AAC5B,SAAIG,EAAY,QAAQD,EAAY,SAASC,EAAY,OAAOD,EAAY,SACxEH,EAAc,KAAKE,CAAC;AAAA,MAE5B;AAEM,YAAAG,IAA0B,CAAC,GAAGL,CAAa,EAAE,KAAK,CAACM,GAAGC,MAAMD,IAAIC,CAAC;AACvE,MAAAX,EAAiBS,CAAuB;AAAA,IAC5C;AAAA,EACJ,GAAG,CAAE,CAAA,GAECG,IAAmB,MACdb,EAAc,IAAI,CAACO,MACfX,EAAKW,CAAC,CAChB,GAGCO,IAAgB,CAACC,GAAuBC,MAAsB;AAChE,UAAMC,IAAkBF,EAAM,UAAU,CAACrC,MAAQA,EAAI,OAAOC,CAAY;AAExE,WAAOoC,EAAM,OAAO,CAACrC,GAAKwC,MAClBF,MAAc,UACVE,IAAQD,KAAmB,CAACvC,EAAI,YAKpCsC,MAAc,cACVE,IAAQD,KAAmB,CAACvC,EAAI,WACzBA,IAIR,EACV;AAAA,EAAA,GAGCyC,IAA0B,CAACC,MAA4C;AACzE,IAAAA,EAAM,gBAAgB;AAEtB,UAAMC,IAAgBR,KAChBS,IAASF,EAAM,QACfG,IAAeD,EAAO,GAAG,SAAS,IAAI,GACtCE,IAAeF,EAAO,GAAG,QAAQ,UAAU,EAAE,GAC7CG,IAAmBF,IAAeF,IAAgBzB,GAElD8B,IAAWZ,EAAcW,GAAkB,MAAM,GACjDE,IAAeb,EAAcW,GAAkB,UAAU;AAE1D,KAAAL,EAAM,QAAQ,gBAAgBA,EAAM,QAAQ,gBAAgBM,EAAS,SAAS,KAC/EE,EAAiBF,EAAS,CAAC,EAAE,IAAIH,CAAY,IAG5CH,EAAM,QAAQ,eAAeA,EAAM,QAAQ,cAAcO,EAAa,SAAS,KAChFC,EAAiBD,EAAaA,EAAa,SAAS,CAAC,EAAE,IAAIJ,CAAY,GAGvEH,EAAM,QAAQ,WAAWG,MACzBK,EAAiBJ,GAAc,EAAI,GACnC7B,EAAgB,EAAK,GACE,SAAS,eAAe,GAAG6B,CAAY,UAAU,EACzD,MAAM,IAGpBF,EAAO,GAAG,SAAS,IAAI,KACxB3B,EAAgB,EAAK;AAAA,EACzB,GAGEiC,IAAmB,CAACC,GAAmBN,MAA0B;AAC/D,QAAA;AACA,YAAMO,IAAa,SAAS,eAAe,GAAGD,CAAS,MAAM,GACvDE,IAAgB,SAAS;AAAA,QAC3BR,IAAe,GAAGM,CAAS,WAAW,GAAGA,CAAS;AAAA,MAAA;AAEtD,MAAI7C,KACAA,EAAS6C,CAAS,GAElBtC,KACWuC,EAAA,eAAe,EAAE,UAAU,UAAU,OAAO,OAAO,QAAQ,OAAO,GAEjFC,EAAc,MAAM;AAAA,aACfC,GAAO;AACZ,YAAOA,EAAgB;AAAA,IAC3B;AAAA,EAAA,GAGEC,IAAsB,CAACb,MAA4C;AAClD,IAAAlB;AACnB,UAAMmB,IAAgBR;AAElB,QAAAO,EAAM,QAAQ,WACV,CAAC1B,KAAgB2B,EAAc,SAAS,GAAG;AACrC,YAAAU,IAAgB,SAAS,eAAe,GAAGV,EAAc,CAAC,EAAE,EAAE,QAAQ;AAC5E,MAAIU,KACAA,EAAc,MAAM;AAAA,IAE5B;AAGJ,IAAIrC,MAAiB0B,EAAM,QAAQ,gBAAgBA,EAAM,QAAQ,gBAC7DQ,EAAiBP,EAAc,CAAC,EAAE,IAAI,EAAI;AAAA,EAC9C;AAIJ,EAAAa,EAAU,MAAM;AACO,IAAAhC;EAAA,GACpB,CAACA,CAAkB,CAAC,GAEvBgC,EAAU,OACC,OAAA,iBAAiB,UAAUhC,CAAkB,GAC7C,MAAM;AACF,WAAA,oBAAoB,UAAUA,CAAkB;AAAA,EAAA,IAE5D,CAACA,CAAkB,CAAC;AAEvB,QAAM,EAAE,gBAAAiC,GAAgB,YAAAC,EAAW,IAAIC,EAAa;AAEpD,SAEQ,gBAAAC,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAI,EAAA,gBAAa,QAAO,WAAU,kDAC/B,UAAA;AAAA,MAAA,gBAAAE;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,KAAKnD;AAAA,UACL,MAAK;AAAA,UACL,WAAWoD,EAAM;AAAA,YACb;AAAA,YACAjE;AAAA,cAAWK,KAAY;AAAA;AAAA,YAAkB;AAAA,YACzCC,MAAS,UAAgB,eAAe;AAAA,UAAA,CAC3C;AAAA,UAEA,UAAAc,EAAK,IAAI,CAAClB,MAEH,gBAAA4D;AAAA,YAAC;AAAA,YAAA;AAAA,cACG,gBAAa;AAAA,cACb,MAAK;AAAA,cACL,MAAK;AAAA,cACL,iBAAe5D,EAAI,OAAOC;AAAA,cAC1B,iBAAe,GAAGD,EAAI,EAAE;AAAA,cACxB,eAAaA,EAAI;AAAA,cACjB,UAAUA,EAAI,OAAOC,IAAe,IAAI;AAAA,cACxC,IAAI,GAAGD,EAAI,EAAE;AAAA,cACb,WAAW+D,EAAM;AAAA,gBACb;AAAA,gBACAhE,EAAsBC,GAAKC,CAAY;AAAA,cAAA,CAC1C;AAAA,cAED,SAAS,MAAM;AACP,gBAACD,EAAI,aACYkD,EAAAlD,EAAI,IAAI,EAAK,GAC9BiB,EAAgB,EAAK;AAAA,cAE7B;AAAA,cACA,WAAW,CAACyB,MAAUD,EAAwBC,CAAK;AAAA,cAElD,UAAA;AAAA,gBAAA1C,EAAI,aAAc,gBAAA8D,EAAA,QAAA,EAAK,WAAU,aAAa,YAAI,WAAU;AAAA,gBAE7D,gBAAAA,EAAC,QAAM,EAAA,UAAA9D,EAAI,MAAM,CAAA;AAAA,gBAEhBA,EAAI,SACD,gBAAA8D,EAAC,UAAK,WAAU,aACZ,4BAACE,GAAM,EAAA,UAAUhE,EAAI,UAAU,OAAOA,EAAI,MAAM,OAC3C,UAAIA,EAAA,MAAM,SACf,CAAA,GACJ;AAAA,gBAEHA,EAAI,OAAOC,KACR,gBAAA6D;AAAA,kBAACG,EAAO;AAAA,kBAAP;AAAA,oBACG,SAAS;AAAA,oBACT,kBAAkBhE;AAAA,oBAClB,gBAAa;AAAA,oBACb,UAAUQ;AAAA,oBACV,WAAU;AAAA,kBAAA;AAAA,gBACd;AAAA,cAAA;AAAA,YAAA;AAAA,YA3BCT,EAAI;AAAA,UAAA,CA+BpB;AAAA,QAAA;AAAA,MACL;AAAA,MACCa,KACG,gBAAA+C;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,gBAAa;AAAA,UACb,WAAU;AAAA,UAEV,UAAA;AAAA,YAAA,gBAAAE;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,WAAWC,EAAM;AAAA,kBACb;AAAA,kBACAN,IAAiBS,IAAc;AAAA,gBAAA,CAClC;AAAA,gBACD,MAAK;AAAA,gBACL,SAAS,MAAM;AACQ,kBAAA1C,KACnBP,EAAgB,CAACD,CAAY;AAAA,gBACjC;AAAA,gBACA,WAAW,CAAC0B,MAAUa,EAAoBb,CAAK;AAAA,gBAC9C,GAAGgB;AAAA,gBAEJ,4BAACS,GAAmB,EAAA;AAAA,cAAA;AAAA,YACxB;AAAA,YACCnD,KACG,gBAAA8C;AAAA,cAAC;AAAA,cAAA;AAAA,gBACG,WAAU;AAAA,gBACV,MAAK;AAAA,gBAEJ,UAAiB3B,EAAA,EAAE,IAAI,CAACnC,MAAQ;;AAEzB,yBAAA,gBAAA4D;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACG,WAAWG,EAAM;AAAA,wBACb;AAAA,wBACA/D,EAAI,YAAY;AAAA,sBAAA,CACnB;AAAA,sBAED,SAAS,MAAM;AACP,wBAACA,EAAI,aACYkD,EAAAlD,EAAI,IAAI,EAAI,GAC7BiB,EAAgB,EAAK;AAAA,sBAE7B;AAAA,sBACA,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,iBAAejB,EAAI,OAAOC;AAAA,sBAC1B,iBAAe,GAAGD,EAAI,EAAE;AAAA,sBACxB,eAAaA,EAAI;AAAA,sBACjB,UAAU,CAACA,EAAI,YAAYgB,IAAe,IAAI;AAAA,sBAC9C,IAAI,GAAGhB,EAAI,EAAE;AAAA,sBACb,WAAW,CAAC0C,MAAUD,EAAwBC,CAAK;AAAA,sBAElD,UAAA;AAAA,wBAAI1C,EAAA;AAAA,wBACJ,gBAAA8D,EAAA,QAAA,EAAK,WAAU,qBAAqB,YAAI,OAAM;AAAA,wBAC9C9D,EAAI,SACA,gBAAA8D,EAAAE,GAAA,EAAM,UAAUhE,EAAI,UAAU,QAAOoE,IAAApE,EAAI,UAAJ,gBAAAoE,EAAW,OAC5C,WAAAC,IAAArE,EAAI,UAAJ,gBAAAqE,EAAW,UAChB;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBArBCrE,EAAI;AAAA,kBAAA;AAAA,gBAuBb,CAEP;AAAA,cAAA;AAAA,YACL;AAAA,UAAA;AAAA,QAAA;AAAA,MAER;AAAA,IAAA,GAER;AAAA,sBAEC,OAAI,EAAA,gBAAa,eAAc,WAAU,0CACtC,4BAAC,OAAI,EAAA,WAAU,WAAU,OAAO,EAAE,WAAAO,GAAW,WAAAC,EAAU,GAClD,YAAS,IAAIH,GAAU,CAACe,MAChBC,EAAeD,CAAK,IAIlBkD,EAAalD,GAAO,EAAE,GAAGA,EAAM,OAAO,QAAQA,EAAM,MAAM,OAAOnB,EAAc,CAAA,IAH3E,IAId,GACL,EACJ,CAAA;AAAA,EACJ,EAAA,CAAA;AAER;AACAC,EAAK,cAAc;"}