@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.
- package/dist/Lexical.prod-D0woeN3R.js +4770 -0
- package/dist/Lexical.prod-D0woeN3R.js.map +1 -0
- package/dist/LexicalClipboard.prod-D9CvlqSO.js +258 -0
- package/dist/LexicalClipboard.prod-D9CvlqSO.js.map +1 -0
- package/dist/LexicalComposerContext.prod--Rm7-Z9o.js +26 -0
- package/dist/LexicalComposerContext.prod--Rm7-Z9o.js.map +1 -0
- package/dist/{LexicalLink.prod-JpC4y56U.js → LexicalLink.prod-__08uNAw.js} +51 -51
- package/dist/LexicalLink.prod-__08uNAw.js.map +1 -0
- package/dist/{LexicalList.prod-w0kSq9sB.js → LexicalList.prod-BgI8r9BS.js} +44 -44
- package/dist/LexicalList.prod-BgI8r9BS.js.map +1 -0
- package/dist/LexicalSelection.prod-B-SXpOS9.js +86 -0
- package/dist/LexicalSelection.prod-B-SXpOS9.js.map +1 -0
- package/dist/LexicalTable.prod-DJWDvnB3.js +1494 -0
- package/dist/LexicalTable.prod-DJWDvnB3.js.map +1 -0
- package/dist/LexicalUtils.prod-BYrJ1Iih.js +112 -0
- package/dist/LexicalUtils.prod-BYrJ1Iih.js.map +1 -0
- package/dist/{TablePlugin-Co5vgBHF.js → TablePlugin-BHY7_5Z8.js} +44 -44
- package/dist/{TablePlugin-Co5vgBHF.js.map → TablePlugin-BHY7_5Z8.js.map} +1 -1
- package/dist/assets/variables.css +21 -21
- package/dist/components/Accordion/Accordion.test.d.ts +0 -0
- package/dist/components/Accordion/Accordion.test.js +29 -0
- package/dist/components/Accordion/Accordion.test.js.map +1 -0
- package/dist/components/AccordionCard/AccordionCard.test.d.ts +0 -0
- package/dist/components/AccordionCard/AccordionCard.test.js +33 -0
- package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -0
- package/dist/components/ActionList/ActionList.test.d.ts +0 -0
- package/dist/components/ActionList/ActionList.test.js +60 -0
- package/dist/components/ActionList/ActionList.test.js.map +1 -0
- package/dist/components/AppStatusBar/AppStatusBar.test.d.ts +0 -0
- package/dist/components/AppStatusBar/AppStatusBar.test.js +10 -0
- package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -0
- package/dist/components/Attention/Attention.test.d.ts +0 -0
- package/dist/components/Attention/Attention.test.js +10 -0
- package/dist/components/Attention/Attention.test.js.map +1 -0
- package/dist/components/Backdrop/Backdrop.test.d.ts +0 -0
- package/dist/components/Backdrop/Backdrop.test.js +10 -0
- package/dist/components/Backdrop/Backdrop.test.js.map +1 -0
- package/dist/components/Buttons/Button.test.d.ts +0 -0
- package/dist/components/Buttons/Button.test.js +35 -0
- package/dist/components/Buttons/Button.test.js.map +1 -0
- package/dist/components/Buttons/LinkButton.test.d.ts +0 -0
- package/dist/components/Buttons/LinkButton.test.js +67 -0
- package/dist/components/Buttons/LinkButton.test.js.map +1 -0
- package/dist/components/Buttons/MenuButton.test.d.ts +0 -0
- package/dist/components/Buttons/MenuButton.test.js +66 -0
- package/dist/components/Buttons/MenuButton.test.js.map +1 -0
- package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
- package/dist/components/FormInput/FormInput.js +1 -1
- package/dist/components/InputField/InputField.stories.js +1 -1
- package/dist/components/Label/Label.test.js +19 -4254
- package/dist/components/Label/Label.test.js.map +1 -1
- package/dist/components/MultiSelect/MultiSelect.js +1 -1
- package/dist/components/MultiSelect/MultiSelect.stories.js +1 -1
- package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
- package/dist/components/MultiSelect/index.js +1 -1
- package/dist/components/OverlayStepBar/OverlayStepBar.js +1 -1
- package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
- package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +1 -1
- package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
- package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js +6 -6
- package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +10 -10
- package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +2 -2
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +66 -66
- package/dist/components/RteEditor/Plugins/LinkPlugin/helpers.js +1 -1
- package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +26 -26
- package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.js +14 -14
- package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu.js +1 -1
- package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +4 -4
- package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +26 -26
- package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -1
- package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +9 -9
- package/dist/components/RteEditor/Plugins/index.js +1 -1
- package/dist/components/RteEditor/RteEditor.js +350 -350
- package/dist/components/RteEditor/RteEditor.js.map +1 -1
- package/dist/components/RteEditor/helpers.js +5 -5
- package/dist/components/index.js +1 -1
- package/dist/helpers-Cgw7V6LR.js +168 -0
- package/dist/helpers-Cgw7V6LR.js.map +1 -0
- package/dist/index-CcK2jjMp.js.map +1 -1
- package/dist/index-OJvb7CGo.js +2962 -0
- package/dist/index-OJvb7CGo.js.map +1 -0
- package/dist/index.js +1 -1
- package/dist/react.esm-BZoQ2TxA.js +4271 -0
- package/dist/react.esm-BZoQ2TxA.js.map +1 -0
- package/dist/setupTests.js.map +1 -1
- package/package.json +27 -26
- package/dist/Lexical.prod-DTADK2yJ.js +0 -4263
- package/dist/Lexical.prod-DTADK2yJ.js.map +0 -1
- package/dist/LexicalClipboard.prod-Dx5Fm6e5.js +0 -258
- package/dist/LexicalClipboard.prod-Dx5Fm6e5.js.map +0 -1
- package/dist/LexicalComposerContext.prod-BCXERl09.js +0 -26
- package/dist/LexicalComposerContext.prod-BCXERl09.js.map +0 -1
- package/dist/LexicalLink.prod-JpC4y56U.js.map +0 -1
- package/dist/LexicalList.prod-w0kSq9sB.js.map +0 -1
- package/dist/LexicalSelection.prod-DQLHaigk.js +0 -78
- package/dist/LexicalSelection.prod-DQLHaigk.js.map +0 -1
- package/dist/LexicalTable.prod-DjfZc87j.js +0 -1465
- package/dist/LexicalTable.prod-DjfZc87j.js.map +0 -1
- package/dist/LexicalUtils.prod-BBwue2Aj.js +0 -122
- package/dist/LexicalUtils.prod-BBwue2Aj.js.map +0 -1
- package/dist/helpers-DgTW1vIO.js +0 -168
- 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-
|
|
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,
|
|
5
|
-
import {
|
|
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
|
|
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
|
|
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
|
|
20
|
+
import { InputField as M } from "./components/InputField/InputField.js";
|
|
21
21
|
import "react-router";
|
|
22
|
-
import { s as
|
|
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-
|
|
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
|
|
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
|
|
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:
|
|
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(
|
|
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: $(
|
|
51
|
-
[
|
|
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: $(
|
|
57
|
-
[
|
|
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),
|
|
83
|
-
!S(f) || w && !
|
|
84
|
-
},
|
|
85
|
-
b(),
|
|
86
|
-
},
|
|
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:
|
|
94
|
+
clearForm: O,
|
|
95
95
|
focusFirstField: Q,
|
|
96
96
|
setDefaults: J
|
|
97
97
|
})), /* @__PURE__ */ m("div", { className: N.linkform, children: [
|
|
98
|
-
/* @__PURE__ */ m(
|
|
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
|
-
|
|
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(
|
|
115
|
+
F && /* @__PURE__ */ t(z, { level: "error", feedback: F })
|
|
116
116
|
] }),
|
|
117
|
-
w && /* @__PURE__ */ m(
|
|
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
|
-
|
|
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(
|
|
129
|
+
v && /* @__PURE__ */ t(z, { level: "error", feedback: v })
|
|
130
130
|
] }),
|
|
131
131
|
/* @__PURE__ */ m("div", { className: N.linkform__footer, children: [
|
|
132
|
-
/* @__PURE__ */ t(
|
|
133
|
-
/* @__PURE__ */ t(
|
|
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",
|
|
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:
|
|
166
|
-
/* @__PURE__ */ m(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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:
|
|
194
|
-
/* @__PURE__ */ t(
|
|
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
|
-
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
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: $(
|
|
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-
|
|
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-
|
|
34
|
+
--color-silver: #bfbfbf;
|
|
30
35
|
--color-chilean-fire: #d45c3a;
|
|
31
|
-
--color-
|
|
32
|
-
--color-
|
|
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-
|
|
38
|
-
--color-
|
|
39
|
-
--color-
|
|
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-
|
|
48
|
-
--color-
|
|
48
|
+
--color-vista-blue: #8feabb;
|
|
49
|
+
--color-medium-aquamarine: #62df9f;
|
|
50
|
+
--color-uva-orange: #cc8500;
|
|
49
51
|
--color-fog: #cfcdd0;
|
|
50
|
-
--color-
|
|
51
|
-
--color-
|
|
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-
|
|
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;"}
|
|
File without changes
|
|
@@ -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;"}
|
|
File without changes
|
|
@@ -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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"}
|
|
File without changes
|