@uva-glass/component-library 3.0.6 → 3.0.8

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 (104) hide show
  1. package/dist/Lexical.prod-D0woeN3R.js +4770 -0
  2. package/dist/Lexical.prod-D0woeN3R.js.map +1 -0
  3. package/dist/LexicalClipboard.prod-D9CvlqSO.js +258 -0
  4. package/dist/LexicalClipboard.prod-D9CvlqSO.js.map +1 -0
  5. package/dist/LexicalComposerContext.prod--Rm7-Z9o.js +26 -0
  6. package/dist/LexicalComposerContext.prod--Rm7-Z9o.js.map +1 -0
  7. package/dist/{LexicalLink.prod-JpC4y56U.js → LexicalLink.prod-__08uNAw.js} +51 -51
  8. package/dist/LexicalLink.prod-__08uNAw.js.map +1 -0
  9. package/dist/{LexicalList.prod-w0kSq9sB.js → LexicalList.prod-BgI8r9BS.js} +44 -44
  10. package/dist/LexicalList.prod-BgI8r9BS.js.map +1 -0
  11. package/dist/LexicalSelection.prod-B-SXpOS9.js +86 -0
  12. package/dist/LexicalSelection.prod-B-SXpOS9.js.map +1 -0
  13. package/dist/LexicalTable.prod-DJWDvnB3.js +1494 -0
  14. package/dist/LexicalTable.prod-DJWDvnB3.js.map +1 -0
  15. package/dist/LexicalUtils.prod-BYrJ1Iih.js +112 -0
  16. package/dist/LexicalUtils.prod-BYrJ1Iih.js.map +1 -0
  17. package/dist/{TablePlugin-Co5vgBHF.js → TablePlugin-BHY7_5Z8.js} +44 -44
  18. package/dist/{TablePlugin-Co5vgBHF.js.map → TablePlugin-BHY7_5Z8.js.map} +1 -1
  19. package/dist/assets/variables.css +21 -21
  20. package/dist/components/Accordion/Accordion.test.d.ts +0 -0
  21. package/dist/components/Accordion/Accordion.test.js +29 -0
  22. package/dist/components/Accordion/Accordion.test.js.map +1 -0
  23. package/dist/components/AccordionCard/AccordionCard.test.d.ts +0 -0
  24. package/dist/components/AccordionCard/AccordionCard.test.js +33 -0
  25. package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -0
  26. package/dist/components/ActionList/ActionList.test.d.ts +0 -0
  27. package/dist/components/ActionList/ActionList.test.js +60 -0
  28. package/dist/components/ActionList/ActionList.test.js.map +1 -0
  29. package/dist/components/AppStatusBar/AppStatusBar.test.d.ts +0 -0
  30. package/dist/components/AppStatusBar/AppStatusBar.test.js +10 -0
  31. package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -0
  32. package/dist/components/Attention/Attention.test.d.ts +0 -0
  33. package/dist/components/Attention/Attention.test.js +10 -0
  34. package/dist/components/Attention/Attention.test.js.map +1 -0
  35. package/dist/components/Backdrop/Backdrop.test.d.ts +0 -0
  36. package/dist/components/Backdrop/Backdrop.test.js +10 -0
  37. package/dist/components/Backdrop/Backdrop.test.js.map +1 -0
  38. package/dist/components/Buttons/Button.test.d.ts +0 -0
  39. package/dist/components/Buttons/Button.test.js +35 -0
  40. package/dist/components/Buttons/Button.test.js.map +1 -0
  41. package/dist/components/Buttons/LinkButton.test.d.ts +0 -0
  42. package/dist/components/Buttons/LinkButton.test.js +67 -0
  43. package/dist/components/Buttons/LinkButton.test.js.map +1 -0
  44. package/dist/components/Buttons/MenuButton.test.d.ts +0 -0
  45. package/dist/components/Buttons/MenuButton.test.js +66 -0
  46. package/dist/components/Buttons/MenuButton.test.js.map +1 -0
  47. package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
  48. package/dist/components/FormInput/FormInput.js +1 -1
  49. package/dist/components/InputField/InputField.stories.js +1 -1
  50. package/dist/components/Label/Label.test.js +19 -4254
  51. package/dist/components/Label/Label.test.js.map +1 -1
  52. package/dist/components/MultiSelect/MultiSelect.js +1 -1
  53. package/dist/components/MultiSelect/MultiSelect.stories.js +1 -1
  54. package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
  55. package/dist/components/MultiSelect/index.js +1 -1
  56. package/dist/components/OverlayStepBar/OverlayStepBar.js +1 -1
  57. package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
  58. package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +1 -1
  59. package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
  60. package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js +6 -6
  61. package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +10 -10
  62. package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +2 -2
  63. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +1 -1
  64. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +66 -66
  65. package/dist/components/RteEditor/Plugins/LinkPlugin/helpers.js +1 -1
  66. package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +26 -26
  67. package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.js +14 -14
  68. package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +1 -1
  69. package/dist/components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu.js +1 -1
  70. package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +4 -4
  71. package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +26 -26
  72. package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -1
  73. package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +9 -9
  74. package/dist/components/RteEditor/Plugins/index.js +1 -1
  75. package/dist/components/RteEditor/RteEditor.js +350 -350
  76. package/dist/components/RteEditor/RteEditor.js.map +1 -1
  77. package/dist/components/RteEditor/helpers.js +5 -5
  78. package/dist/components/index.js +1 -1
  79. package/dist/helpers-Cgw7V6LR.js +168 -0
  80. package/dist/helpers-Cgw7V6LR.js.map +1 -0
  81. package/dist/index-CcK2jjMp.js.map +1 -1
  82. package/dist/index-OJvb7CGo.js +2962 -0
  83. package/dist/index-OJvb7CGo.js.map +1 -0
  84. package/dist/index.js +1 -1
  85. package/dist/react.esm-BZoQ2TxA.js +4271 -0
  86. package/dist/react.esm-BZoQ2TxA.js.map +1 -0
  87. package/dist/setupTests.js.map +1 -1
  88. package/package.json +27 -26
  89. package/dist/Lexical.prod-DTADK2yJ.js +0 -4263
  90. package/dist/Lexical.prod-DTADK2yJ.js.map +0 -1
  91. package/dist/LexicalClipboard.prod-Dx5Fm6e5.js +0 -258
  92. package/dist/LexicalClipboard.prod-Dx5Fm6e5.js.map +0 -1
  93. package/dist/LexicalComposerContext.prod-BCXERl09.js +0 -26
  94. package/dist/LexicalComposerContext.prod-BCXERl09.js.map +0 -1
  95. package/dist/LexicalLink.prod-JpC4y56U.js.map +0 -1
  96. package/dist/LexicalList.prod-w0kSq9sB.js.map +0 -1
  97. package/dist/LexicalSelection.prod-DQLHaigk.js +0 -78
  98. package/dist/LexicalSelection.prod-DQLHaigk.js.map +0 -1
  99. package/dist/LexicalTable.prod-DjfZc87j.js +0 -1465
  100. package/dist/LexicalTable.prod-DjfZc87j.js.map +0 -1
  101. package/dist/LexicalUtils.prod-BBwue2Aj.js +0 -122
  102. package/dist/LexicalUtils.prod-BBwue2Aj.js.map +0 -1
  103. package/dist/helpers-DgTW1vIO.js +0 -168
  104. package/dist/helpers-DgTW1vIO.js.map +0 -1
@@ -1,10 +1,10 @@
1
1
  import { jsxs as m, jsx as t, Fragment as Z } from "react/jsx-runtime";
2
- import { u as ee } from "./LexicalComposerContext.prod-BCXERl09.js";
2
+ import { u as ee } from "./LexicalComposerContext.prod--Rm7-Z9o.js";
3
3
  import { c as $ } from "./clsx-OuTLNxxd.js";
4
- import { T as te, g as re } from "./LexicalTable.prod-DjfZc87j.js";
5
- import { a8 as oe, g as le, q as U, a as z, a2 as ne } from "./Lexical.prod-DTADK2yJ.js";
4
+ import { T as te, m as re } from "./LexicalTable.prod-DJWDvnB3.js";
5
+ import { ac as oe, e as le, h as U, G as V, a3 as ne } from "./Lexical.prod-D0woeN3R.js";
6
6
  import { forwardRef as A, useState as C, useRef as T, useId as D, useImperativeHandle as B, useEffect as g } from "react";
7
- import { Button as R } from "./components/Buttons/Button.js";
7
+ import { Button as L } from "./components/Buttons/Button.js";
8
8
  import "./components/Buttons/LinkButton.js";
9
9
  import "@react-aria/button";
10
10
  import "./components/Checkbox/Checkbox.js";
@@ -13,23 +13,23 @@ import "@react-aria/dialog";
13
13
  import "@react-aria/focus";
14
14
  import "@react-aria/overlays";
15
15
  import "./components/OverlayCloseButton/OverlayCloseButton.js";
16
- import { FormField as O } from "./components/FormField/FormField.js";
16
+ import { FormField as P } from "./components/FormField/FormField.js";
17
17
  import "./components/GridRow/GridRow.js";
18
18
  import "./components/IconButton/IconButton.js";
19
19
  import "./components/Input/Input.js";
20
- import { InputField as P } from "./components/InputField/InputField.js";
20
+ import { InputField as M } from "./components/InputField/InputField.js";
21
21
  import "react-router";
22
- import { s as L, M as ie } from "./MultiSelectItem-D9PxdX43.js";
22
+ import { s as R, M as ie } from "./MultiSelectItem-D9PxdX43.js";
23
23
  import "./components/RteEditor/Providers/LanguageProvider.js";
24
- import { e as ae, v as se } from "./helpers-DgTW1vIO.js";
24
+ import { e as ae, v as se } from "./helpers-Cgw7V6LR.js";
25
25
  import { Icon as K } from "./components/Icon/Icon.js";
26
- import { FeedbackBox as V } from "./components/FeedbackBox/FeedbackBox.js";
26
+ import { FeedbackBox as z } from "./components/FeedbackBox/FeedbackBox.js";
27
27
  import { useTranslation as H } from "./components/RteEditor/hooks/useTranslation.js";
28
28
  import "./components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
29
29
  import "./components/RteEditor/hooks/components/Flyout.js";
30
30
  import { deleteTable as ce, deleteColumn as me, insertColumn as ue, deleteRow as de, insertRow as fe, createTable as pe } from "./components/RteEditor/Plugins/TablePlugin/helpers.js";
31
31
  import { useFlyout as be } from "./components/RteEditor/hooks/useFlyout.js";
32
- import { s as q } from "./RteEditor.module-oFMKEW6f.js";
32
+ import { s as I } from "./RteEditor.module-oFMKEW6f.js";
33
33
  import "./index-B3c5pcHk.js";
34
34
  import "./components/SelectListbox/SelectListbox.js";
35
35
  import "./components/SelectListbox/SelectProvider.js";
@@ -37,9 +37,9 @@ import "./components/Sortable/components/SortableItem.js";
37
37
  import "./SortableProvider-Ck_XnBVq.js";
38
38
  import { setScrollableContainers as _e, removeScrollableContainers as he } from "./components/RteEditor/helpers.js";
39
39
  import './assets/TablePlugin.css';function ke({ label: b, clearTrigger: d, onClear: a }) {
40
- return /* @__PURE__ */ m("header", { className: L["multi-select__header"], children: [
40
+ return /* @__PURE__ */ m("header", { className: R["multi-select__header"], children: [
41
41
  /* @__PURE__ */ t(E, { htmlFor: "multi-select-list", children: b }),
42
- d && /* @__PURE__ */ t(R, { variant: "blank", onClick: a, children: d })
42
+ d && /* @__PURE__ */ t(L, { variant: "blank", onClick: a, children: d })
43
43
  ] });
44
44
  }
45
45
  const j = ({ scrollable: b = !0, noBorder: d, header: a, children: l }) => /* @__PURE__ */ m(Z, { children: [
@@ -47,14 +47,14 @@ const j = ({ scrollable: b = !0, noBorder: d, header: a, children: l }) => /* @_
47
47
  /* @__PURE__ */ t(
48
48
  "div",
49
49
  {
50
- className: $(L["multi-select"], {
51
- [L["multi-select--no-border"]]: d
50
+ className: $(R["multi-select"], {
51
+ [R["multi-select--no-border"]]: d
52
52
  }),
53
53
  children: /* @__PURE__ */ t(
54
54
  "ul",
55
55
  {
56
- className: $(L["multi-select__list"], {
57
- [L["multi-select__list--scrollable"]]: b
56
+ className: $(R["multi-select__list"], {
57
+ [R["multi-select__list--scrollable"]]: b
58
58
  }),
59
59
  id: "multi-select-list",
60
60
  children: l
@@ -79,11 +79,11 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
79
79
  u(i.target.value);
80
80
  }, c = (i) => {
81
81
  _(i.target.value);
82
- }, S = (i) => se(i) === !1 || i.trim() === "" ? (k(n.errortext.urlNotValid), !1) : (k(null), !0), W = (i) => i.trim() === "" ? (p(n.errortext.linkTextNotValid), !1) : (p(null), !0), Y = () => {
83
- !S(f) || w && !W(s) || (d(f, s), M());
84
- }, G = () => {
85
- b(), M();
86
- }, M = () => {
82
+ }, S = (i) => se(i) === !1 || i.trim() === "" ? (k(n.errortext.urlNotValid), !1) : (k(null), !0), G = (i) => i.trim() === "" ? (p(n.errortext.linkTextNotValid), !1) : (p(null), !0), W = () => {
83
+ !S(f) || w && !G(s) || (d(f, s), O());
84
+ }, Y = () => {
85
+ b(), O();
86
+ }, O = () => {
87
87
  u(""), h(!1), k(null), p(null);
88
88
  }, J = (i, X) => {
89
89
  u(i), !X && !i && h(!0);
@@ -91,15 +91,15 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
91
91
  o.current && o.current.focus();
92
92
  };
93
93
  return B(l, () => ({
94
- clearForm: M,
94
+ clearForm: O,
95
95
  focusFirstField: Q,
96
96
  setDefaults: J
97
97
  })), /* @__PURE__ */ m("div", { className: N.linkform, children: [
98
- /* @__PURE__ */ m(O, { className: N["linkform__input-field"], children: [
98
+ /* @__PURE__ */ m(P, { className: N["linkform__input-field"], children: [
99
99
  /* @__PURE__ */ t(E, { htmlFor: y, children: n.links.linkLabel }),
100
100
  /* @__PURE__ */ m("div", { className: N["linkform__input-url-wrapper"], children: [
101
101
  /* @__PURE__ */ t(
102
- P,
102
+ M,
103
103
  {
104
104
  id: y,
105
105
  placeholder: n.links.linkPlaceholder,
@@ -112,12 +112,12 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
112
112
  ),
113
113
  f && /* @__PURE__ */ t("button", { type: "button", onClick: r, className: N["linkform__open-url-button"], children: /* @__PURE__ */ t(K, { name: "ArrowTopRightOnSquare", size: 20 }) })
114
114
  ] }),
115
- F && /* @__PURE__ */ t(V, { level: "error", feedback: F })
115
+ F && /* @__PURE__ */ t(z, { level: "error", feedback: F })
116
116
  ] }),
117
- w && /* @__PURE__ */ m(O, { className: N["linkform__input-field"], children: [
117
+ w && /* @__PURE__ */ m(P, { className: N["linkform__input-field"], children: [
118
118
  /* @__PURE__ */ t(E, { htmlFor: e, children: n.links.linkText }),
119
119
  /* @__PURE__ */ t(
120
- P,
120
+ M,
121
121
  {
122
122
  id: e,
123
123
  value: s,
@@ -126,15 +126,15 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
126
126
  "aria-label": n.aria.labels.linkTextfield
127
127
  }
128
128
  ),
129
- v && /* @__PURE__ */ t(V, { level: "error", feedback: v })
129
+ v && /* @__PURE__ */ t(z, { level: "error", feedback: v })
130
130
  ] }),
131
131
  /* @__PURE__ */ m("div", { className: N.linkform__footer, children: [
132
- /* @__PURE__ */ t(R, { variant: "secondary", onClick: G, "aria-label": n.common.cancel, type: "button", children: n.common.cancel }),
133
- /* @__PURE__ */ t(R, { variant: "primary", onClick: Y, "aria-label": n.aria.labels.linkOkButton, type: "button", children: n.links.addLink })
132
+ /* @__PURE__ */ t(L, { variant: "secondary", onClick: Y, "aria-label": n.common.cancel, type: "button", children: n.common.cancel }),
133
+ /* @__PURE__ */ t(L, { variant: "primary", onClick: W, "aria-label": n.aria.labels.linkOkButton, type: "button", children: n.links.addLink })
134
134
  ] })
135
135
  ] });
136
136
  }
137
- ), Fe = "_tableform_t5fpq_1", Ce = "_tableform__footer_t5fpq_12", I = {
137
+ ), Fe = "_tableform_t5fpq_1", Ce = "_tableform__footer_t5fpq_12", q = {
138
138
  tableform: Fe,
139
139
  "tableform__input-field": "_tableform__input-field_t5fpq_5",
140
140
  tableform__footer: Ce
@@ -162,11 +162,11 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
162
162
  return _e(o), window.addEventListener("scroll", o), window.addEventListener("resize", o), () => {
163
163
  window.removeEventListener("scroll", o), window.removeEventListener("resize", o), he(o);
164
164
  };
165
- }, []), /* @__PURE__ */ m("div", { className: I.tableform, children: [
166
- /* @__PURE__ */ m(O, { className: I["tableform__input-field"], children: [
165
+ }, []), /* @__PURE__ */ m("div", { className: q.tableform, children: [
166
+ /* @__PURE__ */ m(P, { className: q["tableform__input-field"], children: [
167
167
  /* @__PURE__ */ t(E, { htmlFor: w, children: l.table.nrofRows }),
168
168
  /* @__PURE__ */ t(
169
- P,
169
+ M,
170
170
  {
171
171
  id: w,
172
172
  placeholder: l.table.nrofRowsPlaceholder,
@@ -177,10 +177,10 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
177
177
  }
178
178
  )
179
179
  ] }),
180
- /* @__PURE__ */ m(O, { className: I["tableform__input-field"], children: [
180
+ /* @__PURE__ */ m(P, { className: q["tableform__input-field"], children: [
181
181
  /* @__PURE__ */ t(E, { htmlFor: h, children: l.table.nrofColumns }),
182
182
  /* @__PURE__ */ t(
183
- P,
183
+ M,
184
184
  {
185
185
  id: h,
186
186
  placeholder: l.table.nrofColumnsPlaceholder,
@@ -190,10 +190,10 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
190
190
  }
191
191
  )
192
192
  ] }),
193
- /* @__PURE__ */ m("div", { className: I.tableform__footer, children: [
194
- /* @__PURE__ */ t(R, { variant: "secondary", onClick: v, "aria-label": l.common.cancel, children: l.common.cancel }),
193
+ /* @__PURE__ */ m("div", { className: q.tableform__footer, children: [
194
+ /* @__PURE__ */ t(L, { variant: "secondary", onClick: v, "aria-label": l.common.cancel, children: l.common.cancel }),
195
195
  /* @__PURE__ */ t(
196
- R,
196
+ L,
197
197
  {
198
198
  variant: "primary",
199
199
  onClick: k,
@@ -214,14 +214,14 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
214
214
  }, p = (e, r) => {
215
215
  l.update(() => {
216
216
  const x = U(), c = pe(e, r);
217
- z(x) ? x.insertNodes([c]) : ne().append(c);
217
+ V(x) ? x.insertNodes([c]) : ne().append(c);
218
218
  const S = c.getFirstDescendant();
219
219
  S && S.select();
220
220
  }), v();
221
221
  }, o = (e) => {
222
222
  l.update(() => {
223
223
  const r = U();
224
- if (z(r)) {
224
+ if (V(r)) {
225
225
  const x = r.anchor.getNode(), c = te(x);
226
226
  if (re(c))
227
227
  switch (e) {
@@ -278,13 +278,13 @@ const ve = "_linkform_x5q7m_1", we = "_linkform__footer_x5q7m_12", N = {
278
278
  };
279
279
  }, []), B(d, () => ({
280
280
  mutateTable: o
281
- })), /* @__PURE__ */ t("div", { className: q["editor__toolbar-button-group"], children: /* @__PURE__ */ m("div", { className: q["editor__toolbar-button-flyoutwrapper"], children: [
281
+ })), /* @__PURE__ */ t("div", { className: I["editor__toolbar-button-group"], children: /* @__PURE__ */ m("div", { className: I["editor__toolbar-button-flyoutwrapper"], children: [
282
282
  /* @__PURE__ */ t(
283
283
  "button",
284
284
  {
285
285
  onClick: k,
286
286
  title: a.table.tableTooltip,
287
- className: $(q["editor__toolbar-button"], b && q["editor__toolbar-button--active"]),
287
+ className: $(I["editor__toolbar-button"], b && I["editor__toolbar-button--active"]),
288
288
  "aria-label": a.aria.labels.table,
289
289
  "aria-keyshortcuts": a.aria.keyshortcuts.table,
290
290
  ref: w,
@@ -302,4 +302,4 @@ export {
302
302
  ke as a,
303
303
  ye as b
304
304
  };
305
- //# sourceMappingURL=TablePlugin-Co5vgBHF.js.map
305
+ //# sourceMappingURL=TablePlugin-BHY7_5Z8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TablePlugin-Co5vgBHF.js","sources":["../src/components/MultiSelect/components/MultiSelectHeader.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/AddTableFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/TablePlugin.tsx"],"sourcesContent":["import styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Label } from 'components/Label';\nimport { Button } from 'components';\n\nexport interface MultiSelectHeaderProps {\n label: string;\n clearTrigger?: string;\n onClear?: () => void;\n}\n\nexport function MultiSelectHeader({ label, clearTrigger, onClear }: MultiSelectHeaderProps) {\n return (\n <header className={styles['multi-select__header']}>\n <Label htmlFor=\"multi-select-list\">{label}</Label>\n {clearTrigger && (\n <Button variant={'blank'} onClick={onClear}>\n {clearTrigger}\n </Button>\n )}\n </header>\n );\n}\n","import clsx from 'clsx';\n\nimport type { PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './MultiSelect.module.css';\n\nimport { MultiSelectItem } from 'components/MultiSelect/components/MultiSelectItem';\nimport { MultiSelectHeader } from 'components/MultiSelect/components/MultiSelectHeader';\n\nexport interface MultiSelectProps {\n /** `true` if the container should scroll on overflow; otherwise, `false` to resize the container to its contents. The default is `true`. */\n scrollable?: boolean;\n /** `true` to disable the border around the container; otherwise, `false`. The default is `false`. */\n noBorder?: boolean;\n /** The header contents. */\n header?: ReactNode;\n}\n\n/** Represents a component to list a number of checkboxes. */\nexport const MultiSelect = ({ scrollable = true, noBorder, header, children }: PropsWithChildren<MultiSelectProps>) => (\n <>\n {header}\n <div\n className={clsx(styles['multi-select'], {\n [styles['multi-select--no-border']]: noBorder,\n })}\n >\n <ul\n className={clsx(styles['multi-select__list'], {\n [styles['multi-select__list--scrollable']]: scrollable,\n })}\n id=\"multi-select-list\"\n >\n {children}\n </ul>\n </div>\n </>\n);\n\nMultiSelect.MultiSelectHeader = MultiSelectHeader;\nMultiSelect.MultiSelectItem = MultiSelectItem;\n","import { useState, forwardRef, useImperativeHandle, useRef, useId } from 'react';\n\nimport type { ChangeEvent, JSX } from 'react';\nimport type { LinkType } from 'components/RteEditor/Plugins/LinkPlugin';\n\nimport styles from './AddLinkForm.module.css';\n\nimport { ensureHttps, validateUrlWithProtocol } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Button, FeedbackBox, FormField, Icon, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface AddLinkFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (url: string, linktext: string) => void;\n isLink: LinkType;\n}\n\nexport interface addLinkFormMethods {\n clearForm: () => void;\n focusFirstField: () => void;\n setDefaults: (url: string, linktext: string) => void;\n}\n\nexport const AddLinkForm = forwardRef(\n (\n { onCloseHandler, onSaveHandler, isLink = { active: false, url: '', linktext: '' } }: AddLinkFormProps,\n ref\n ): JSX.Element => {\n const t = useTranslation();\n const [url, setUrl] = useState<string>(isLink.url || '');\n const [linkText, setLinkText] = useState<string>(isLink.linktext || '');\n const [showLinktextField, setShowLinktextField] = useState<boolean>(false);\n const [urlError, setUrlError] = useState<string | null>(null);\n const [linkTextError, setLinkTextError] = useState<string | null>(null);\n const firstField = useRef<HTMLInputElement>(null);\n const linkId = `link_${useId()}`;\n const textId = `text_${useId()}`;\n\n const handleOpenUrl = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n const handleUrl = (event: ChangeEvent<HTMLInputElement>) => {\n setUrl(event.target.value);\n };\n\n const handleLinkText = (event: ChangeEvent<HTMLInputElement>) => {\n setLinkText(event.target.value);\n };\n\n const validateUrl = (url: string): boolean => {\n if (validateUrlWithProtocol(url) === false || url.trim() === '') {\n setUrlError(t.errortext.urlNotValid);\n return false;\n }\n setUrlError(null);\n return true;\n };\n\n const validateLinkText = (linkText: string): boolean => {\n if (linkText.trim() === '') {\n setLinkTextError(t.errortext.linkTextNotValid);\n return false;\n }\n setLinkTextError(null);\n return true;\n };\n\n const handleSave = () => {\n if (!validateUrl(url) || (showLinktextField && !validateLinkText(linkText))) {\n return;\n }\n\n onSaveHandler(url, linkText);\n resetForm();\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setUrl('');\n setShowLinktextField(false);\n setUrlError(null);\n setLinkTextError(null);\n };\n\n const setDefaults = (url: string, linktext: string) => {\n setUrl(url);\n if (!linktext && !url) {\n setShowLinktextField(true);\n }\n };\n\n const focusFirstField = () => {\n if (firstField.current) {\n firstField.current.focus();\n }\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField,\n setDefaults,\n }));\n\n return (\n <div className={styles['linkform']}>\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={linkId}>{t.links.linkLabel}</Label>\n <div className={styles['linkform__input-url-wrapper']}>\n <InputField\n id={linkId}\n placeholder={t.links.linkPlaceholder}\n value={url}\n onChange={(event) => handleUrl(event)}\n onFocus={() => setUrlError(null)}\n ref={firstField}\n aria-label={t.aria.labels.linkField}\n />\n {url && (\n <button type=\"button\" onClick={handleOpenUrl} className={styles['linkform__open-url-button']}>\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n )}\n </div>\n {urlError && <FeedbackBox level=\"error\" feedback={urlError} />}\n </FormField>\n {showLinktextField && (\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={textId}>{t.links.linkText}</Label>\n <InputField\n id={textId}\n value={linkText}\n onChange={(event) => handleLinkText(event)}\n onFocus={() => setLinkTextError(null)}\n aria-label={t.aria.labels.linkTextfield}\n />\n {linkTextError && <FeedbackBox level=\"error\" feedback={linkTextError} />}\n </FormField>\n )}\n <div className={styles['linkform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n </div>\n );\n }\n);\n","import { useState, forwardRef, useImperativeHandle, useRef, useId, useEffect } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from './AddTableFrom.module.css';\n\nimport { Button, FormField, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\ninterface AddTableFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (nrfOfRows: number, nrOfColumns: number) => void;\n}\n\nexport interface addTableForm {\n clearForm: () => void;\n focusFirstField: () => void;\n}\n\nexport const AddTableForm = forwardRef(({ onCloseHandler, onSaveHandler }: AddTableFormProps, ref) => {\n const t = useTranslation();\n const [rowCount, setRowCount] = useState<number>();\n const [columnCount, setColumnCount] = useState<number>();\n const firstField = useRef<HTMLInputElement>(null);\n const rowId = `row_${useId()}`;\n const columnId = `column_${useId()}`;\n\n const handleDimentionChange = (event: ChangeEvent<HTMLInputElement>, type: string) => {\n const value = event.target.value;\n type === 'row' ? setRowCount(parseInt(value)) : setColumnCount(parseInt(value));\n };\n\n const handleSave = () => {\n if (rowCount !== undefined && columnCount !== undefined) {\n onSaveHandler(rowCount, columnCount);\n resetForm();\n }\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setRowCount(undefined);\n setColumnCount(undefined);\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField: () => firstField.current?.focus(),\n }));\n\n useEffect(() => {\n const handleResizeScroll = () => {\n handleClose();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('scroll', handleResizeScroll);\n window.removeEventListener('resize', handleResizeScroll);\n removeScrollableContainers(handleResizeScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className={styles['tableform']}>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={rowId}>{t.table.nrofRows}</Label>\n <InputField\n id={rowId}\n placeholder={t.table.nrofRowsPlaceholder}\n value={rowCount ? rowCount : ''}\n onChange={(event) => handleDimentionChange(event, 'row')}\n aria-label={t.aria.labels.tableRowfield}\n ref={firstField}\n />\n </FormField>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={columnId}>{t.table.nrofColumns}</Label>\n <InputField\n id={columnId}\n placeholder={t.table.nrofColumnsPlaceholder}\n value={columnCount ? columnCount : ''}\n onChange={(event) => handleDimentionChange(event, 'column')}\n aria-label={t.aria.labels.tableColumnfield}\n />\n </FormField>\n <div className={styles['tableform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel}>\n {t.common.cancel}\n </Button>\n <Button\n variant={'primary'}\n onClick={handleSave}\n disabled={!rowCount || !columnCount}\n aria-label={t.aria.labels.tableOkButton}\n >\n {t.common.add}\n </Button>\n </div>\n </div>\n );\n});\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport { $getTableCellNodeFromLexicalNode, $isTableCellNode } from '@lexical/table';\nimport { $getSelection, $isRangeSelection, $getRoot, KEY_DOWN_COMMAND, COMMAND_PRIORITY_EDITOR } from 'lexical';\nimport { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport type { JSX } from 'react';\nimport type { TextNode } from 'lexical';\nimport type { addTableForm } from './AddTableFrom';\nimport type { Actions } from './TableCellContextMenu';\n\nimport { AddTableForm } from './AddTableFrom';\nimport { createTable, deleteColumn, deleteRow, deleteTable, insertColumn, insertRow } from './helpers';\n\nimport { useFlyout } from 'components/RteEditor/hooks/useFlyout';\nimport { Icon } from 'components';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\nconst PREVENT_OPEN_DELAY = 200;\n\ninterface TablePluginProps {\n isActive: boolean;\n}\n\nexport interface TableMutation {\n mutateTable: (type: Actions) => void;\n}\n\nexport const TablePlugin = forwardRef(({ isActive }: TablePluginProps, ref): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addTableForm = useRef<addTableForm>(undefined);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const preventOpen = useRef(false);\n const isVisibleRef = useRef(isVisible);\n\n const openFlyout = () => {\n const rect = buttonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n };\n\n const insertTable = (nrOfRows: number, nrOfColumns: number) => {\n editor.update(() => {\n const selection = $getSelection();\n const tableNode = createTable(nrOfRows, nrOfColumns);\n if ($isRangeSelection(selection)) {\n selection.insertNodes([tableNode]);\n } else {\n $getRoot().append(tableNode);\n }\n const firstDescendant = tableNode.getFirstDescendant();\n if (firstDescendant) {\n (firstDescendant as TextNode).select();\n }\n });\n\n closeFlyout();\n };\n\n const mutateTable = (action: Actions) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const currentNode = $getTableCellNodeFromLexicalNode(anchorNode);\n\n if ($isTableCellNode(currentNode)) {\n switch (action) {\n case 'insertRowAbove':\n case 'insertRowBelow':\n insertRow(currentNode, action);\n break;\n case 'deleteRow':\n deleteRow(currentNode);\n break;\n case 'insertColumnLeft':\n case 'insertColumnRight':\n insertColumn(currentNode, action);\n break;\n case 'deleteColumn':\n deleteColumn(currentNode);\n break;\n case 'deleteTable':\n deleteTable(currentNode);\n break;\n }\n }\n }\n });\n };\n\n const flyoutOptions = {\n children: (\n <AddTableForm\n onCloseHandler={closeFlyout}\n onSaveHandler={(rows, columns) => insertTable(rows, columns)}\n ref={addTableForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addTableForm.current?.clearForm();\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addTableForm.current?.focusFirstField();\n }\n }, [addTableForm, isVisible]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit9') {\n event.preventDefault();\n openFlyout();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n }, [isVisible]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n };\n\n document.addEventListener('keydown', removeKeydown, { capture: true });\n\n return () => {\n document.removeEventListener('keydown', removeKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useImperativeHandle(ref, () => ({\n mutateTable,\n }));\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.table.tableTooltip}\n className={clsx(styles['editor__toolbar-button'], isActive && styles[`editor__toolbar-button--active`])}\n aria-label={t.aria.labels.table}\n aria-keyshortcuts={t.aria.keyshortcuts.table}\n ref={buttonRef}\n type=\"button\"\n >\n <Icon name=\"Table\" size={24} />\n </button>\n {flyout}\n </div>\n </div>\n );\n});\n"],"names":["MultiSelectHeader","label","clearTrigger","onClear","jsxs","styles","jsx","Label","Button","MultiSelect","scrollable","noBorder","header","children","Fragment","clsx","MultiSelectItem","AddLinkForm","forwardRef","onCloseHandler","onSaveHandler","isLink","ref","t","useTranslation","url","setUrl","useState","linkText","setLinkText","showLinktextField","setShowLinktextField","urlError","setUrlError","linkTextError","setLinkTextError","firstField","useRef","linkId","useId","textId","handleOpenUrl","ensureHttps","handleUrl","event","handleLinkText","validateUrl","validateUrlWithProtocol","validateLinkText","handleSave","resetForm","handleClose","setDefaults","linktext","focusFirstField","useImperativeHandle","FormField","InputField","Icon","FeedbackBox","AddTableForm","rowCount","setRowCount","columnCount","setColumnCount","rowId","columnId","handleDimentionChange","type","value","_a","useEffect","handleResizeScroll","setScrollableContainers","removeScrollableContainers","PREVENT_OPEN_DELAY","TablePlugin","isActive","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addTableForm","buttonRef","preventOpen","isVisibleRef","openFlyout","rect","flyoutOptions","closeFlyout","insertTable","nrOfRows","nrOfColumns","selection","$getSelection","tableNode","createTable","$isRangeSelection","$getRoot","firstDescendant","mutateTable","action","anchorNode","currentNode","$getTableCellNodeFromLexicalNode","$isTableCellNode","insertRow","deleteRow","insertColumn","deleteColumn","deleteTable","rows","columns","_b","removeKeyboardShortcut","KEY_DOWN_COMMAND","COMMAND_PRIORITY_EDITOR","removeKeydown"],"mappings":"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"}
1
+ {"version":3,"file":"TablePlugin-BHY7_5Z8.js","sources":["../src/components/MultiSelect/components/MultiSelectHeader.tsx","../src/components/MultiSelect/MultiSelect.tsx","../src/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/AddTableFrom.tsx","../src/components/RteEditor/Plugins/TablePlugin/TablePlugin.tsx"],"sourcesContent":["import styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Label } from 'components/Label';\nimport { Button } from 'components';\n\nexport interface MultiSelectHeaderProps {\n label: string;\n clearTrigger?: string;\n onClear?: () => void;\n}\n\nexport function MultiSelectHeader({ label, clearTrigger, onClear }: MultiSelectHeaderProps) {\n return (\n <header className={styles['multi-select__header']}>\n <Label htmlFor=\"multi-select-list\">{label}</Label>\n {clearTrigger && (\n <Button variant={'blank'} onClick={onClear}>\n {clearTrigger}\n </Button>\n )}\n </header>\n );\n}\n","import clsx from 'clsx';\n\nimport type { PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './MultiSelect.module.css';\n\nimport { MultiSelectItem } from 'components/MultiSelect/components/MultiSelectItem';\nimport { MultiSelectHeader } from 'components/MultiSelect/components/MultiSelectHeader';\n\nexport interface MultiSelectProps {\n /** `true` if the container should scroll on overflow; otherwise, `false` to resize the container to its contents. The default is `true`. */\n scrollable?: boolean;\n /** `true` to disable the border around the container; otherwise, `false`. The default is `false`. */\n noBorder?: boolean;\n /** The header contents. */\n header?: ReactNode;\n}\n\n/** Represents a component to list a number of checkboxes. */\nexport const MultiSelect = ({ scrollable = true, noBorder, header, children }: PropsWithChildren<MultiSelectProps>) => (\n <>\n {header}\n <div\n className={clsx(styles['multi-select'], {\n [styles['multi-select--no-border']]: noBorder,\n })}\n >\n <ul\n className={clsx(styles['multi-select__list'], {\n [styles['multi-select__list--scrollable']]: scrollable,\n })}\n id=\"multi-select-list\"\n >\n {children}\n </ul>\n </div>\n </>\n);\n\nMultiSelect.MultiSelectHeader = MultiSelectHeader;\nMultiSelect.MultiSelectItem = MultiSelectItem;\n","import { useState, forwardRef, useImperativeHandle, useRef, useId } from 'react';\n\nimport type { ChangeEvent, JSX } from 'react';\nimport type { LinkType } from 'components/RteEditor/Plugins/LinkPlugin';\n\nimport styles from './AddLinkForm.module.css';\n\nimport { ensureHttps, validateUrlWithProtocol } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Button, FeedbackBox, FormField, Icon, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\ninterface AddLinkFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (url: string, linktext: string) => void;\n isLink: LinkType;\n}\n\nexport interface addLinkFormMethods {\n clearForm: () => void;\n focusFirstField: () => void;\n setDefaults: (url: string, linktext: string) => void;\n}\n\nexport const AddLinkForm = forwardRef(\n (\n { onCloseHandler, onSaveHandler, isLink = { active: false, url: '', linktext: '' } }: AddLinkFormProps,\n ref\n ): JSX.Element => {\n const t = useTranslation();\n const [url, setUrl] = useState<string>(isLink.url || '');\n const [linkText, setLinkText] = useState<string>(isLink.linktext || '');\n const [showLinktextField, setShowLinktextField] = useState<boolean>(false);\n const [urlError, setUrlError] = useState<string | null>(null);\n const [linkTextError, setLinkTextError] = useState<string | null>(null);\n const firstField = useRef<HTMLInputElement>(null);\n const linkId = `link_${useId()}`;\n const textId = `text_${useId()}`;\n\n const handleOpenUrl = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n const handleUrl = (event: ChangeEvent<HTMLInputElement>) => {\n setUrl(event.target.value);\n };\n\n const handleLinkText = (event: ChangeEvent<HTMLInputElement>) => {\n setLinkText(event.target.value);\n };\n\n const validateUrl = (url: string): boolean => {\n if (validateUrlWithProtocol(url) === false || url.trim() === '') {\n setUrlError(t.errortext.urlNotValid);\n return false;\n }\n setUrlError(null);\n return true;\n };\n\n const validateLinkText = (linkText: string): boolean => {\n if (linkText.trim() === '') {\n setLinkTextError(t.errortext.linkTextNotValid);\n return false;\n }\n setLinkTextError(null);\n return true;\n };\n\n const handleSave = () => {\n if (!validateUrl(url) || (showLinktextField && !validateLinkText(linkText))) {\n return;\n }\n\n onSaveHandler(url, linkText);\n resetForm();\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setUrl('');\n setShowLinktextField(false);\n setUrlError(null);\n setLinkTextError(null);\n };\n\n const setDefaults = (url: string, linktext: string) => {\n setUrl(url);\n if (!linktext && !url) {\n setShowLinktextField(true);\n }\n };\n\n const focusFirstField = () => {\n if (firstField.current) {\n firstField.current.focus();\n }\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField,\n setDefaults,\n }));\n\n return (\n <div className={styles['linkform']}>\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={linkId}>{t.links.linkLabel}</Label>\n <div className={styles['linkform__input-url-wrapper']}>\n <InputField\n id={linkId}\n placeholder={t.links.linkPlaceholder}\n value={url}\n onChange={(event) => handleUrl(event)}\n onFocus={() => setUrlError(null)}\n ref={firstField}\n aria-label={t.aria.labels.linkField}\n />\n {url && (\n <button type=\"button\" onClick={handleOpenUrl} className={styles['linkform__open-url-button']}>\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n )}\n </div>\n {urlError && <FeedbackBox level=\"error\" feedback={urlError} />}\n </FormField>\n {showLinktextField && (\n <FormField className={styles['linkform__input-field']}>\n <Label htmlFor={textId}>{t.links.linkText}</Label>\n <InputField\n id={textId}\n value={linkText}\n onChange={(event) => handleLinkText(event)}\n onFocus={() => setLinkTextError(null)}\n aria-label={t.aria.labels.linkTextfield}\n />\n {linkTextError && <FeedbackBox level=\"error\" feedback={linkTextError} />}\n </FormField>\n )}\n <div className={styles['linkform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n </div>\n );\n }\n);\n","import { useState, forwardRef, useImperativeHandle, useRef, useId, useEffect } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from './AddTableFrom.module.css';\n\nimport { Button, FormField, InputField, Label } from 'components';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\ninterface AddTableFormProps {\n onCloseHandler: () => void;\n onSaveHandler: (nrfOfRows: number, nrOfColumns: number) => void;\n}\n\nexport interface addTableForm {\n clearForm: () => void;\n focusFirstField: () => void;\n}\n\nexport const AddTableForm = forwardRef(({ onCloseHandler, onSaveHandler }: AddTableFormProps, ref) => {\n const t = useTranslation();\n const [rowCount, setRowCount] = useState<number>();\n const [columnCount, setColumnCount] = useState<number>();\n const firstField = useRef<HTMLInputElement>(null);\n const rowId = `row_${useId()}`;\n const columnId = `column_${useId()}`;\n\n const handleDimentionChange = (event: ChangeEvent<HTMLInputElement>, type: string) => {\n const value = event.target.value;\n type === 'row' ? setRowCount(parseInt(value)) : setColumnCount(parseInt(value));\n };\n\n const handleSave = () => {\n if (rowCount !== undefined && columnCount !== undefined) {\n onSaveHandler(rowCount, columnCount);\n resetForm();\n }\n };\n\n const handleClose = () => {\n onCloseHandler();\n resetForm();\n };\n\n const resetForm = () => {\n setRowCount(undefined);\n setColumnCount(undefined);\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: resetForm,\n focusFirstField: () => firstField.current?.focus(),\n }));\n\n useEffect(() => {\n const handleResizeScroll = () => {\n handleClose();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('scroll', handleResizeScroll);\n window.removeEventListener('resize', handleResizeScroll);\n removeScrollableContainers(handleResizeScroll);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className={styles['tableform']}>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={rowId}>{t.table.nrofRows}</Label>\n <InputField\n id={rowId}\n placeholder={t.table.nrofRowsPlaceholder}\n value={rowCount ? rowCount : ''}\n onChange={(event) => handleDimentionChange(event, 'row')}\n aria-label={t.aria.labels.tableRowfield}\n ref={firstField}\n />\n </FormField>\n <FormField className={styles['tableform__input-field']}>\n <Label htmlFor={columnId}>{t.table.nrofColumns}</Label>\n <InputField\n id={columnId}\n placeholder={t.table.nrofColumnsPlaceholder}\n value={columnCount ? columnCount : ''}\n onChange={(event) => handleDimentionChange(event, 'column')}\n aria-label={t.aria.labels.tableColumnfield}\n />\n </FormField>\n <div className={styles['tableform__footer']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel}>\n {t.common.cancel}\n </Button>\n <Button\n variant={'primary'}\n onClick={handleSave}\n disabled={!rowCount || !columnCount}\n aria-label={t.aria.labels.tableOkButton}\n >\n {t.common.add}\n </Button>\n </div>\n </div>\n );\n});\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport { $getTableCellNodeFromLexicalNode, $isTableCellNode } from '@lexical/table';\nimport { $getSelection, $isRangeSelection, $getRoot, KEY_DOWN_COMMAND, COMMAND_PRIORITY_EDITOR } from 'lexical';\nimport { useRef, useEffect, useImperativeHandle, forwardRef } from 'react';\n\nimport type { JSX } from 'react';\nimport type { TextNode } from 'lexical';\nimport type { addTableForm } from './AddTableFrom';\nimport type { Actions } from './TableCellContextMenu';\n\nimport { AddTableForm } from './AddTableFrom';\nimport { createTable, deleteColumn, deleteRow, deleteTable, insertColumn, insertRow } from './helpers';\n\nimport { useFlyout } from 'components/RteEditor/hooks/useFlyout';\nimport { Icon } from 'components';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\n\nconst PREVENT_OPEN_DELAY = 200;\n\ninterface TablePluginProps {\n isActive: boolean;\n}\n\nexport interface TableMutation {\n mutateTable: (type: Actions) => void;\n}\n\nexport const TablePlugin = forwardRef(({ isActive }: TablePluginProps, ref): JSX.Element => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addTableForm = useRef<addTableForm>(undefined);\n const buttonRef = useRef<HTMLButtonElement>(null);\n const preventOpen = useRef(false);\n const isVisibleRef = useRef(isVisible);\n\n const openFlyout = () => {\n const rect = buttonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n };\n\n const insertTable = (nrOfRows: number, nrOfColumns: number) => {\n editor.update(() => {\n const selection = $getSelection();\n const tableNode = createTable(nrOfRows, nrOfColumns);\n if ($isRangeSelection(selection)) {\n selection.insertNodes([tableNode]);\n } else {\n $getRoot().append(tableNode);\n }\n const firstDescendant = tableNode.getFirstDescendant();\n if (firstDescendant) {\n (firstDescendant as TextNode).select();\n }\n });\n\n closeFlyout();\n };\n\n const mutateTable = (action: Actions) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const currentNode = $getTableCellNodeFromLexicalNode(anchorNode);\n\n if ($isTableCellNode(currentNode)) {\n switch (action) {\n case 'insertRowAbove':\n case 'insertRowBelow':\n insertRow(currentNode, action);\n break;\n case 'deleteRow':\n deleteRow(currentNode);\n break;\n case 'insertColumnLeft':\n case 'insertColumnRight':\n insertColumn(currentNode, action);\n break;\n case 'deleteColumn':\n deleteColumn(currentNode);\n break;\n case 'deleteTable':\n deleteTable(currentNode);\n break;\n }\n }\n }\n });\n };\n\n const flyoutOptions = {\n children: (\n <AddTableForm\n onCloseHandler={closeFlyout}\n onSaveHandler={(rows, columns) => insertTable(rows, columns)}\n ref={addTableForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addTableForm.current?.clearForm();\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addTableForm.current?.focusFirstField();\n }\n }, [addTableForm, isVisible]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit9') {\n event.preventDefault();\n openFlyout();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n return () => {\n removeKeyboardShortcut();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n }, [isVisible]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n };\n\n document.addEventListener('keydown', removeKeydown, { capture: true });\n\n return () => {\n document.removeEventListener('keydown', removeKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useImperativeHandle(ref, () => ({\n mutateTable,\n }));\n\n return (\n <div className={styles['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.table.tableTooltip}\n className={clsx(styles['editor__toolbar-button'], isActive && styles[`editor__toolbar-button--active`])}\n aria-label={t.aria.labels.table}\n aria-keyshortcuts={t.aria.keyshortcuts.table}\n ref={buttonRef}\n type=\"button\"\n >\n <Icon name=\"Table\" size={24} />\n </button>\n {flyout}\n </div>\n </div>\n );\n});\n"],"names":["MultiSelectHeader","label","clearTrigger","onClear","jsxs","styles","jsx","Label","Button","MultiSelect","scrollable","noBorder","header","children","Fragment","clsx","MultiSelectItem","AddLinkForm","forwardRef","onCloseHandler","onSaveHandler","isLink","ref","t","useTranslation","url","setUrl","useState","linkText","setLinkText","showLinktextField","setShowLinktextField","urlError","setUrlError","linkTextError","setLinkTextError","firstField","useRef","linkId","useId","textId","handleOpenUrl","ensureHttps","handleUrl","event","handleLinkText","validateUrl","validateUrlWithProtocol","validateLinkText","handleSave","resetForm","handleClose","setDefaults","linktext","focusFirstField","useImperativeHandle","FormField","InputField","Icon","FeedbackBox","AddTableForm","rowCount","setRowCount","columnCount","setColumnCount","rowId","columnId","handleDimentionChange","type","value","_a","useEffect","handleResizeScroll","setScrollableContainers","removeScrollableContainers","PREVENT_OPEN_DELAY","TablePlugin","isActive","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addTableForm","buttonRef","preventOpen","isVisibleRef","openFlyout","rect","flyoutOptions","closeFlyout","insertTable","nrOfRows","nrOfColumns","selection","$getSelection","tableNode","createTable","$isRangeSelection","$getRoot","firstDescendant","mutateTable","action","anchorNode","currentNode","$getTableCellNodeFromLexicalNode","$isTableCellNode","insertRow","deleteRow","insertColumn","deleteColumn","deleteTable","rows","columns","_b","removeKeyboardShortcut","KEY_DOWN_COMMAND","COMMAND_PRIORITY_EDITOR","removeKeydown"],"mappings":"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"}
@@ -24,34 +24,34 @@
24
24
  --color-blue-400: #a3e7ff;
25
25
  --color-blue-50: #e0f7ff;
26
26
  --color-purple-400: #9747ff;
27
+ --color-black-transparent: rgba(0 0 0 / 50%);
28
+ --color-cobalt: #0d4da5;
29
+ --color-san-felix: #2c632e;
30
+ --color-uva-green: #49a74c;
31
+ --color-scarpa-flow: #69656c;
27
32
  --color-uva-red-dark: #9e002a;
28
33
  --color-uva-red: #bd0032;
29
- --color-amaranth: #dc3251;
34
+ --color-silver: #bfbfbf;
30
35
  --color-chilean-fire: #d45c3a;
31
- --color-uva-orange: #cc8500;
32
- --color-uva-red-transparent: rgba(189 0 50 / 10%);
36
+ --color-pattens-blue: #dddedf;
37
+ --color-amaranth: #dc3251;
38
+ --color-ghost-white: #f4f4f5;
39
+ --color-lavender: #ebebec;
40
+ --color-mint-cream: #eafbf2;
33
41
  --color-amour: #ffe5ec;
34
- --color-cobalt: #0d4da5;
35
42
  --color-dandelion: #ffde66;
36
43
  --color-natural-wood: #fff6d6;
37
- --color-columbia-blue: #a1e7fc;
38
- --color-san-felix: #2c632e;
39
- --color-light-cyan: #e1f8ff;
40
- --color-uva-green: #49a74c;
41
- --color-medium-aquamarine: #62df9f;
42
- --color-vista-blue: #8feabb;
43
- --color-mint-cream: #eafbf2;
44
- --color-black-transparent: rgba(0 0 0 / 50%);
45
- --color-scarpa-flow: #69656c;
44
+ --color-uva-black: #1F1D20;
45
+ --color-uva-red-transparent: rgba(189 0 50 / 10%);
46
+ --color-electric-violet: #9747FF;
46
47
  --color-lemon-grass: #99998a;
47
- --color-french-grey: #b3afb6;
48
- --color-silver: #bfbfbf;
48
+ --color-vista-blue: #8feabb;
49
+ --color-medium-aquamarine: #62df9f;
50
+ --color-uva-orange: #cc8500;
49
51
  --color-fog: #cfcdd0;
50
- --color-pattens-blue: #dddedf;
51
- --color-lavender: #ebebec;
52
+ --color-french-grey: #b3afb6;
53
+ --color-columbia-blue: #a1e7fc;
54
+ --color-light-cyan: #e1f8ff;
52
55
  --color-lavender-transparent: rgba(235 235 236 / 50%);
53
- --color-ghost-white: #f4f4f5;
54
- --color-electric-violet: #9747ff;
55
- --color-natural-wool: #fff6d6;
56
- --color-uva-black: #1f1d20;
56
+ --color-natural-wool: #FFF6D6;
57
57
  }
File without changes
@@ -0,0 +1,29 @@
1
+ import { jsx as o } from "react/jsx-runtime";
2
+ import "../../index-BqHyOZsF.js";
3
+ import { r as n, s as a } from "../../react.esm-BZoQ2TxA.js";
4
+ import { u as e } from "../../index-OJvb7CGo.js";
5
+ import { Accordion as i } from "./Accordion.js";
6
+ describe("Accordion", () => {
7
+ it("should render", () => {
8
+ n(/* @__PURE__ */ o(i, { title: "Test Accordion", content: "Test Content" }));
9
+ const t = a.getByText("Test Accordion");
10
+ expect(t).toBeInTheDocument(), expect(t).toHaveAttribute("aria-expanded", "false");
11
+ }), it("should display content when expanded by default", () => {
12
+ n(/* @__PURE__ */ o(i, { title: "Test Accordion", content: "Test Content", expanded: !0 }));
13
+ const t = a.getByText("Test Accordion");
14
+ expect(t).toBeInTheDocument(), expect(t).toHaveAttribute("aria-expanded", "true");
15
+ }), it("should toggle content visibility on click", async () => {
16
+ n(/* @__PURE__ */ o(i, { title: "Test Accordion", content: "Test Content" }));
17
+ const t = a.getByText("Test Accordion");
18
+ await e.click(t), expect(t).toHaveAttribute("aria-expanded", "true"), await e.click(t), expect(t).toHaveAttribute("aria-expanded", "false");
19
+ }), it("should toggle content visibility on Enter key press", async () => {
20
+ n(/* @__PURE__ */ o(i, { title: "Test Accordion", content: "Test Content" }));
21
+ const t = a.getByText("Test Accordion");
22
+ await e.keyboard("[Tab]"), await e.keyboard("[Enter]"), expect(t).toHaveAttribute("aria-expanded", "true"), await e.keyboard("[Enter]"), expect(t).toHaveAttribute("aria-expanded", "false");
23
+ }), it("should toggle content visibility on Space key press", async () => {
24
+ n(/* @__PURE__ */ o(i, { title: "Test Accordion", content: "Test Content" }));
25
+ const t = a.getByText("Test Accordion");
26
+ await e.keyboard("[Tab]"), await e.keyboard("[Space]"), expect(t).toHaveAttribute("aria-expanded", "true"), await e.keyboard("[Space]"), expect(t).toHaveAttribute("aria-expanded", "false");
27
+ });
28
+ });
29
+ //# sourceMappingURL=Accordion.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Accordion.test.js","sources":["../../../src/components/Accordion/Accordion.test.tsx"],"sourcesContent":["import '@testing-library/jest-dom';\r\nimport { render, screen } from '@testing-library/react';\r\nimport userEvent from '@testing-library/user-event';\r\n\r\nimport { Accordion } from './Accordion';\r\n\r\ndescribe('Accordion', () => {\r\n it('should render', () => {\r\n render(<Accordion title=\"Test Accordion\" content=\"Test Content\" />);\r\n const titleElement = screen.getByText('Test Accordion');\r\n expect(titleElement).toBeInTheDocument();\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'false');\r\n });\r\n\r\n it('should display content when expanded by default', () => {\r\n render(<Accordion title=\"Test Accordion\" content=\"Test Content\" expanded />);\r\n const titleElement = screen.getByText('Test Accordion');\r\n expect(titleElement).toBeInTheDocument();\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'true');\r\n });\r\n\r\n it('should toggle content visibility on click', async () => {\r\n render(<Accordion title=\"Test Accordion\" content=\"Test Content\" />);\r\n const titleElement = screen.getByText('Test Accordion');\r\n await userEvent.click(titleElement);\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'true');\r\n await userEvent.click(titleElement);\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'false');\r\n });\r\n\r\n it('should toggle content visibility on Enter key press', async () => {\r\n render(<Accordion title=\"Test Accordion\" content=\"Test Content\" />);\r\n const titleElement = screen.getByText('Test Accordion');\r\n await userEvent.keyboard('[Tab]');\r\n await userEvent.keyboard('[Enter]');\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'true');\r\n await userEvent.keyboard('[Enter]');\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'false');\r\n });\r\n\r\n it('should toggle content visibility on Space key press', async () => {\r\n render(<Accordion title=\"Test Accordion\" content=\"Test Content\" />);\r\n const titleElement = screen.getByText('Test Accordion');\r\n await userEvent.keyboard('[Tab]');\r\n await userEvent.keyboard('[Space]');\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'true');\r\n await userEvent.keyboard('[Space]');\r\n expect(titleElement).toHaveAttribute('aria-expanded', 'false');\r\n });\r\n});\r\n"],"names":["render","Accordion","titleElement","screen","jsx","userEvent"],"mappings":";;;;;AAMA,SAAS,aAAa,MAAM;AAC1B,KAAG,iBAAiB,MAAM;AACxB,IAAAA,oBAAQC,GAAU,EAAA,OAAM,kBAAiB,SAAQ,gBAAe,CAAE;AAC5D,UAAAC,IAAeC,EAAO,UAAU,gBAAgB;AAC/C,WAAAD,CAAY,EAAE,kBAAkB,GACvC,OAAOA,CAAY,EAAE,gBAAgB,iBAAiB,OAAO;AAAA,EAAA,CAC9D,GAED,GAAG,mDAAmD,MAAM;AACnD,IAAAF,EAAA,gBAAAI,EAACH,KAAU,OAAM,kBAAiB,SAAQ,gBAAe,UAAQ,IAAC,CAAE;AACrE,UAAAC,IAAeC,EAAO,UAAU,gBAAgB;AAC/C,WAAAD,CAAY,EAAE,kBAAkB,GACvC,OAAOA,CAAY,EAAE,gBAAgB,iBAAiB,MAAM;AAAA,EAAA,CAC7D,GAED,GAAG,6CAA6C,YAAY;AAC1D,IAAAF,oBAAQC,GAAU,EAAA,OAAM,kBAAiB,SAAQ,gBAAe,CAAE;AAC5D,UAAAC,IAAeC,EAAO,UAAU,gBAAgB;AAChD,UAAAE,EAAU,MAAMH,CAAY,GAClC,OAAOA,CAAY,EAAE,gBAAgB,iBAAiB,MAAM,GACtD,MAAAG,EAAU,MAAMH,CAAY,GAClC,OAAOA,CAAY,EAAE,gBAAgB,iBAAiB,OAAO;AAAA,EAAA,CAC9D,GAED,GAAG,uDAAuD,YAAY;AACpE,IAAAF,oBAAQC,GAAU,EAAA,OAAM,kBAAiB,SAAQ,gBAAe,CAAE;AAC5D,UAAAC,IAAeC,EAAO,UAAU,gBAAgB;AAChD,UAAAE,EAAU,SAAS,OAAO,GAC1B,MAAAA,EAAU,SAAS,SAAS,GAClC,OAAOH,CAAY,EAAE,gBAAgB,iBAAiB,MAAM,GACtD,MAAAG,EAAU,SAAS,SAAS,GAClC,OAAOH,CAAY,EAAE,gBAAgB,iBAAiB,OAAO;AAAA,EAAA,CAC9D,GAED,GAAG,uDAAuD,YAAY;AACpE,IAAAF,oBAAQC,GAAU,EAAA,OAAM,kBAAiB,SAAQ,gBAAe,CAAE;AAC5D,UAAAC,IAAeC,EAAO,UAAU,gBAAgB;AAChD,UAAAE,EAAU,SAAS,OAAO,GAC1B,MAAAA,EAAU,SAAS,SAAS,GAClC,OAAOH,CAAY,EAAE,gBAAgB,iBAAiB,MAAM,GACtD,MAAAG,EAAU,SAAS,SAAS,GAClC,OAAOH,CAAY,EAAE,gBAAgB,iBAAiB,OAAO;AAAA,EAAA,CAC9D;AACH,CAAC;"}
@@ -0,0 +1,33 @@
1
+ import { jsx as n } from "react/jsx-runtime";
2
+ import "../../index-BqHyOZsF.js";
3
+ import { r as c, s as e, f as s, w as d } from "../../react.esm-BZoQ2TxA.js";
4
+ import { u as r } from "../../index-OJvb7CGo.js";
5
+ import { AccordionCard as a } from "./AccordionCard.js";
6
+ describe("AccordionCard", () => {
7
+ it("should render", () => {
8
+ c(/* @__PURE__ */ n(a, { title: "Test Accordion Card", content: "TestComponent", expanded: !0 })), expect(e.getByText("Test Accordion Card")).toBeInTheDocument(), expect(e.getByText("TestComponent")).toBeInTheDocument();
9
+ }), it("should display content when expanded by default", () => {
10
+ c(/* @__PURE__ */ n(a, { title: "Test Accordion Card", content: "TestComponent", expanded: !0 })), expect(e.getByText("Test Accordion Card")).toBeInTheDocument(), expect(e.getByText("TestComponent")).toHaveClass("accordion-card__content--expanded");
11
+ }), it("should toggle content visibility on click", () => {
12
+ c(/* @__PURE__ */ n(a, { title: "Test Accordion Card", content: "TestComponent" }));
13
+ const o = e.getByText("Test Accordion Card"), t = e.getByText("TestComponent");
14
+ expect(o).toBeInTheDocument(), s.click(o), expect(t).toHaveClass("accordion-card__content--expanded"), s.click(o), expect(t).not.toHaveClass("accordion-card__content--expanded");
15
+ }), it("should toggle content visibility on Enter key press", async () => {
16
+ c(/* @__PURE__ */ n(a, { title: "Test Accordion Card", content: "TestComponent" }));
17
+ const o = e.getByRole("button"), t = e.getByText("TestComponent");
18
+ o.focus(), await r.keyboard("[Enter]"), await d(() => {
19
+ expect(t).toHaveClass("accordion-card__content--expanded");
20
+ }), await r.keyboard("[Enter]"), await d(() => {
21
+ expect(t).not.toHaveClass("accordion-card__content--expanded");
22
+ });
23
+ }), it("should toggle content visibility on Space key press", async () => {
24
+ c(/* @__PURE__ */ n(a, { title: "Test Accordion Card", content: "TestComponent" }));
25
+ const o = e.getByRole("button"), t = e.getByText("TestComponent");
26
+ o.focus(), await r.keyboard("[Space]"), await d(() => {
27
+ expect(t).toHaveClass("accordion-card__content--expanded");
28
+ }), await r.keyboard("[Space]"), await d(() => {
29
+ expect(t).not.toHaveClass("accordion-card__content--expanded");
30
+ });
31
+ });
32
+ });
33
+ //# sourceMappingURL=AccordionCard.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionCard.test.js","sources":["../../../src/components/AccordionCard/AccordionCard.test.tsx"],"sourcesContent":["import '@testing-library/jest-dom';\r\nimport { fireEvent, render, screen, waitFor } from '@testing-library/react';\r\nimport userEvent from '@testing-library/user-event';\r\n\r\nimport { AccordionCard } from './AccordionCard';\r\n\r\ndescribe('AccordionCard', () => {\r\n it('should render', () => {\r\n render(<AccordionCard title=\"Test Accordion Card\" content={'TestComponent'} expanded />);\r\n expect(screen.getByText('Test Accordion Card')).toBeInTheDocument();\r\n expect(screen.getByText('TestComponent')).toBeInTheDocument();\r\n });\r\n\r\n it('should display content when expanded by default', () => {\r\n render(<AccordionCard title=\"Test Accordion Card\" content={'TestComponent'} expanded />);\r\n expect(screen.getByText('Test Accordion Card')).toBeInTheDocument();\r\n expect(screen.getByText('TestComponent')).toHaveClass('accordion-card__content--expanded');\r\n });\r\n\r\n it('should toggle content visibility on click', () => {\r\n render(<AccordionCard title=\"Test Accordion Card\" content={'TestComponent'} />);\r\n const titleElement = screen.getByText('Test Accordion Card');\r\n const contentElement = screen.getByText('TestComponent');\r\n expect(titleElement).toBeInTheDocument();\r\n fireEvent.click(titleElement);\r\n expect(contentElement).toHaveClass('accordion-card__content--expanded');\r\n fireEvent.click(titleElement);\r\n expect(contentElement).not.toHaveClass('accordion-card__content--expanded');\r\n });\r\n\r\n it('should toggle content visibility on Enter key press', async () => {\r\n render(<AccordionCard title=\"Test Accordion Card\" content={'TestComponent'} />);\r\n const titleElement = screen.getByRole('button');\r\n const contentElement = screen.getByText('TestComponent');\r\n titleElement.focus();\r\n await userEvent.keyboard('[Enter]');\r\n await waitFor(() => {\r\n expect(contentElement).toHaveClass('accordion-card__content--expanded');\r\n });\r\n await userEvent.keyboard('[Enter]');\r\n await waitFor(() => {\r\n expect(contentElement).not.toHaveClass('accordion-card__content--expanded');\r\n });\r\n });\r\n\r\n it('should toggle content visibility on Space key press', async () => {\r\n render(<AccordionCard title=\"Test Accordion Card\" content={'TestComponent'} />);\r\n const titleElement = screen.getByRole('button');\r\n const contentElement = screen.getByText('TestComponent');\r\n titleElement.focus();\r\n await userEvent.keyboard('[Space]');\r\n await waitFor(() => {\r\n expect(contentElement).toHaveClass('accordion-card__content--expanded');\r\n });\r\n await userEvent.keyboard('[Space]');\r\n await waitFor(() => {\r\n expect(contentElement).not.toHaveClass('accordion-card__content--expanded');\r\n });\r\n });\r\n});\r\n"],"names":["render","jsx","AccordionCard","screen","titleElement","contentElement","fireEvent","userEvent","waitFor"],"mappings":";;;;;AAMA,SAAS,iBAAiB,MAAM;AAC9B,KAAG,iBAAiB,MAAM;AACjB,IAAAA,EAAA,gBAAAC,EAACC,KAAc,OAAM,uBAAsB,SAAS,iBAAiB,UAAQ,IAAC,CAAE,GACvF,OAAOC,EAAO,UAAU,qBAAqB,CAAC,EAAE,kBAAkB,GAClE,OAAOA,EAAO,UAAU,eAAe,CAAC,EAAE,kBAAkB;AAAA,EAAA,CAC7D,GAED,GAAG,mDAAmD,MAAM;AACnD,IAAAH,EAAA,gBAAAC,EAACC,KAAc,OAAM,uBAAsB,SAAS,iBAAiB,UAAQ,IAAC,CAAE,GACvF,OAAOC,EAAO,UAAU,qBAAqB,CAAC,EAAE,kBAAkB,GAClE,OAAOA,EAAO,UAAU,eAAe,CAAC,EAAE,YAAY,mCAAmC;AAAA,EAAA,CAC1F,GAED,GAAG,6CAA6C,MAAM;AACpD,IAAAH,oBAAQE,GAAc,EAAA,OAAM,uBAAsB,SAAS,iBAAiB,CAAE;AACxE,UAAAE,IAAeD,EAAO,UAAU,qBAAqB,GACrDE,IAAiBF,EAAO,UAAU,eAAe;AAChD,WAAAC,CAAY,EAAE,kBAAkB,GACvCE,EAAU,MAAMF,CAAY,GACrB,OAAAC,CAAc,EAAE,YAAY,mCAAmC,GACtEC,EAAU,MAAMF,CAAY,GAC5B,OAAOC,CAAc,EAAE,IAAI,YAAY,mCAAmC;AAAA,EAAA,CAC3E,GAED,GAAG,uDAAuD,YAAY;AACpE,IAAAL,oBAAQE,GAAc,EAAA,OAAM,uBAAsB,SAAS,iBAAiB,CAAE;AACxE,UAAAE,IAAeD,EAAO,UAAU,QAAQ,GACxCE,IAAiBF,EAAO,UAAU,eAAe;AACvD,IAAAC,EAAa,MAAM,GACb,MAAAG,EAAU,SAAS,SAAS,GAClC,MAAMC,EAAQ,MAAM;AACX,aAAAH,CAAc,EAAE,YAAY,mCAAmC;AAAA,IAAA,CACvE,GACK,MAAAE,EAAU,SAAS,SAAS,GAClC,MAAMC,EAAQ,MAAM;AAClB,aAAOH,CAAc,EAAE,IAAI,YAAY,mCAAmC;AAAA,IAAA,CAC3E;AAAA,EAAA,CACF,GAED,GAAG,uDAAuD,YAAY;AACpE,IAAAL,oBAAQE,GAAc,EAAA,OAAM,uBAAsB,SAAS,iBAAiB,CAAE;AACxE,UAAAE,IAAeD,EAAO,UAAU,QAAQ,GACxCE,IAAiBF,EAAO,UAAU,eAAe;AACvD,IAAAC,EAAa,MAAM,GACb,MAAAG,EAAU,SAAS,SAAS,GAClC,MAAMC,EAAQ,MAAM;AACX,aAAAH,CAAc,EAAE,YAAY,mCAAmC;AAAA,IAAA,CACvE,GACK,MAAAE,EAAU,SAAS,SAAS,GAClC,MAAMC,EAAQ,MAAM;AAClB,aAAOH,CAAc,EAAE,IAAI,YAAY,mCAAmC;AAAA,IAAA,CAC3E;AAAA,EAAA,CACF;AACH,CAAC;"}
@@ -0,0 +1,60 @@
1
+ import { jsx as i } from "react/jsx-runtime";
2
+ import "../../index-BqHyOZsF.js";
3
+ import { r as n, s as t, w as a } from "../../react.esm-BZoQ2TxA.js";
4
+ import { u as l } from "../../index-OJvb7CGo.js";
5
+ import { ActionList as o } from "./ActionList.js";
6
+ const T = jest.fn(), c = [
7
+ /* @__PURE__ */ i("button", { type: "button", onClick: T, children: "Test Action 1" }, "1"),
8
+ /* @__PURE__ */ i("button", { type: "button", children: "Test Action 2" }, "2"),
9
+ /* @__PURE__ */ i("button", { type: "button", children: "Test Action 3" }, "3")
10
+ ];
11
+ describe("ActionList", () => {
12
+ it("should render (variant primary)", () => {
13
+ n(
14
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "primary", iconName: "EllipsisVertical", children: c.map((e) => e) })
15
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--primary"), expect(t.getByText("Test Action 1")).toBeInTheDocument(), expect(t.getByText("Test Action 2")).toBeInTheDocument(), expect(t.getByText("Test Action 3")).toBeInTheDocument();
16
+ }), it("should render variant secondary", () => {
17
+ n(
18
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "secondary", iconName: "EllipsisVertical", children: c.map((e) => e) })
19
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--secondary");
20
+ }), it("should render variant destructive-primary", () => {
21
+ n(
22
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "destructive-primary", iconName: "EllipsisVertical", children: c.map((e) => e) })
23
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--destructive-primary");
24
+ }), it("should render variant destructive-secondary", () => {
25
+ n(
26
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "destructive-secondary", iconName: "EllipsisVertical", children: c.map((e) => e) })
27
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--destructive-secondary");
28
+ }), it("should render variant blank", () => {
29
+ n(
30
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "blank", iconName: "EllipsisVertical", children: c.map((e) => e) })
31
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--blank");
32
+ }), it("should render variant blank-icon", () => {
33
+ n(
34
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "blank-icon", iconName: "EllipsisVertical", children: c.map((e) => e) })
35
+ ), expect(t.getByText("Test ActionList")).toBeInTheDocument(), expect(t.getByText("Test ActionList")).toHaveClass("button--blank-icon");
36
+ }), it("should toggle content visibility on click", async () => {
37
+ n(
38
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "blank-icon", iconName: "EllipsisVertical", children: c.map((r) => r) })
39
+ );
40
+ const e = t.getByText("Test ActionList"), s = t.getByRole("menu");
41
+ expect(e).toBeInTheDocument(), expect(s).toBeInTheDocument(), await l.click(e), await a(() => {
42
+ expect(s).toHaveClass("action-list--open");
43
+ }), await l.click(e), await a(() => {
44
+ expect(s).not.toHaveClass("action-list--open");
45
+ });
46
+ }), it("should fire action on click on action button", async () => {
47
+ n(
48
+ /* @__PURE__ */ i(o, { label: "Test ActionList", variant: "blank-icon", iconName: "EllipsisVertical", children: c.map((p) => p) })
49
+ );
50
+ const e = t.getByText("Test ActionList"), s = t.getByRole("menu");
51
+ expect(e).toBeInTheDocument(), expect(s).toBeInTheDocument(), await l.click(e), await a(() => {
52
+ expect(s).toHaveClass("action-list--open");
53
+ });
54
+ const r = t.getByText("Test Action 1");
55
+ await l.click(r), expect(T).toHaveBeenCalledTimes(1), await a(() => {
56
+ expect(s).not.toHaveClass("action-list--open");
57
+ });
58
+ });
59
+ });
60
+ //# sourceMappingURL=ActionList.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionList.test.js","sources":["../../../src/components/ActionList/ActionList.test.tsx"],"sourcesContent":["import '@testing-library/jest-dom';\r\nimport { render, screen, waitFor } from '@testing-library/react';\r\nimport userEvent from '@testing-library/user-event';\r\n\r\nimport { ActionList } from './ActionList';\r\n\r\nconst onClickSpy = jest.fn();\r\n\r\nconst BUTTON_LIST = [\r\n <button key=\"1\" type=\"button\" onClick={onClickSpy}>\r\n Test Action 1\r\n </button>,\r\n <button key=\"2\" type=\"button\">\r\n Test Action 2\r\n </button>,\r\n <button key=\"3\" type=\"button\">\r\n Test Action 3\r\n </button>,\r\n];\r\n\r\ndescribe('ActionList', () => {\r\n it('should render (variant primary)', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"primary\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--primary');\r\n expect(screen.getByText('Test Action 1')).toBeInTheDocument();\r\n expect(screen.getByText('Test Action 2')).toBeInTheDocument();\r\n expect(screen.getByText('Test Action 3')).toBeInTheDocument();\r\n });\r\n\r\n it('should render variant secondary', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"secondary\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--secondary');\r\n });\r\n\r\n it('should render variant destructive-primary', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"destructive-primary\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--destructive-primary');\r\n });\r\n\r\n it('should render variant destructive-secondary', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"destructive-secondary\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--destructive-secondary');\r\n });\r\n\r\n it('should render variant blank', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"blank\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--blank');\r\n });\r\n\r\n it('should render variant blank-icon', () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"blank-icon\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n expect(screen.getByText('Test ActionList')).toBeInTheDocument();\r\n expect(screen.getByText('Test ActionList')).toHaveClass('button--blank-icon');\r\n });\r\n\r\n it('should toggle content visibility on click', async () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"blank-icon\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n const triggerElement = screen.getByText('Test ActionList');\r\n const actionListElement = screen.getByRole('menu');\r\n expect(triggerElement).toBeInTheDocument();\r\n expect(actionListElement).toBeInTheDocument();\r\n await userEvent.click(triggerElement);\r\n await waitFor(() => {\r\n expect(actionListElement).toHaveClass('action-list--open');\r\n });\r\n await userEvent.click(triggerElement);\r\n await waitFor(() => {\r\n expect(actionListElement).not.toHaveClass('action-list--open');\r\n });\r\n });\r\n\r\n it('should fire action on click on action button', async () => {\r\n render(\r\n <ActionList label=\"Test ActionList\" variant=\"blank-icon\" iconName=\"EllipsisVertical\">\r\n {BUTTON_LIST.map((button) => button)}\r\n </ActionList>\r\n );\r\n const triggerElement = screen.getByText('Test ActionList');\r\n const actionListElement = screen.getByRole('menu');\r\n expect(triggerElement).toBeInTheDocument();\r\n expect(actionListElement).toBeInTheDocument();\r\n await userEvent.click(triggerElement);\r\n await waitFor(() => {\r\n expect(actionListElement).toHaveClass('action-list--open');\r\n });\r\n const actionButton = screen.getByText('Test Action 1');\r\n await userEvent.click(actionButton);\r\n expect(onClickSpy).toHaveBeenCalledTimes(1);\r\n await waitFor(() => {\r\n expect(actionListElement).not.toHaveClass('action-list--open');\r\n });\r\n });\r\n});\r\n"],"names":["onClickSpy","BUTTON_LIST","jsx","render","ActionList","button","screen","triggerElement","actionListElement","userEvent","waitFor","actionButton"],"mappings":"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"}