@uva-glass/component-library 1.62.10 → 1.62.12

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 (32) hide show
  1. package/dist/{TablePlugin-BkczRiUz.js → TablePlugin-B3ZkyOU_.js} +86 -85
  2. package/dist/TablePlugin-B3ZkyOU_.js.map +1 -0
  3. package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
  4. package/dist/components/FormInput/FormInput.js +1 -1
  5. package/dist/components/InputField/InputField.stories.js +1 -1
  6. package/dist/components/MultiSelect/MultiSelect.js +1 -1
  7. package/dist/components/MultiSelect/MultiSelect.stories.js +1 -1
  8. package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
  9. package/dist/components/MultiSelect/index.js +1 -1
  10. package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
  11. package/dist/components/ProgrammeCard/ProgrammeCard.stories.js +1 -1
  12. package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
  13. package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +1 -1
  14. package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +1 -1
  15. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +120 -119
  16. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js.map +1 -1
  17. package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +3 -2
  18. package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js.map +1 -1
  19. package/dist/components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu.js.map +1 -1
  20. package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +1 -1
  21. package/dist/components/RteEditor/Plugins/TablePlugin/index.js +1 -1
  22. package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +52 -47
  23. package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js.map +1 -1
  24. package/dist/components/RteEditor/Plugins/index.js +1 -1
  25. package/dist/components/RteEditor/RteEditor.js +1 -1
  26. package/dist/components/RteEditor/helpers.d.ts +2 -0
  27. package/dist/components/RteEditor/helpers.js +37 -27
  28. package/dist/components/RteEditor/helpers.js.map +1 -1
  29. package/dist/components/index.js +1 -1
  30. package/dist/index.js +1 -1
  31. package/package.json +6 -6
  32. package/dist/TablePlugin-BkczRiUz.js.map +0 -1
@@ -1,66 +1,71 @@
1
- import { jsxs as v, jsx as n } from "react/jsx-runtime";
1
+ import { jsxs as E, jsx as n } from "react/jsx-runtime";
2
2
  import { u as P } from "../../../../LexicalComposerContext.prod-Dyvim1tK.js";
3
- import { M as f, v as g, E as w } from "../../../../Lexical.prod-DOTdxgeo.js";
4
- import { useState as E, useRef as C, useCallback as L, useEffect as p } from "react";
5
- import { g as h } from "../../../../LexicalTable.prod-BKz2StgB.js";
6
- import { BlockFormatPlugin as T } from "../BlockFormatPlugin/BlockFormatPlugin.js";
7
- import { ListPlugin as y } from "../ListPlugin/ListPlugin.js";
8
- import { LinkPlugin as N } from "../LinkPlugin/LinkPlugin.js";
9
- import { HistoryPlugin as x } from "../HistoryPlugin/HistoryPlugin.js";
10
- import { T as B } from "../../../../TablePlugin-BkczRiUz.js";
11
- import { TableCellContextMenu as k } from "../TablePlugin/TableCellContextMenu/TableCellContextMenu.js";
12
- import { s as z } from "../../../../RteEditor.module-DcvGRx3a.js";
13
- const G = ({ editorScrollPosition: c }) => {
14
- const [e] = P(), [i, s] = E(null), m = C(null), d = L(() => {
15
- const o = f();
16
- if (g(o)) {
17
- const u = o.anchor.getNode(), r = h(u);
18
- if (r) {
19
- const l = e.getElementByKey(r.getKey()), a = l ? l.getBoundingClientRect() : { right: 0, bottom: 0, height: 0 };
20
- s({ xPos: a.right, yPos: a.bottom, height: a.height });
3
+ import { M as g, v as h, E as y } from "../../../../Lexical.prod-DOTdxgeo.js";
4
+ import { useState as C, useRef as L, useCallback as T, useEffect as m } from "react";
5
+ import { g as b } from "../../../../LexicalTable.prod-BKz2StgB.js";
6
+ import { BlockFormatPlugin as N } from "../BlockFormatPlugin/BlockFormatPlugin.js";
7
+ import { ListPlugin as k } from "../ListPlugin/ListPlugin.js";
8
+ import { LinkPlugin as x } from "../LinkPlugin/LinkPlugin.js";
9
+ import { HistoryPlugin as B } from "../HistoryPlugin/HistoryPlugin.js";
10
+ import { T as S } from "../../../../TablePlugin-B3ZkyOU_.js";
11
+ import { TableCellContextMenu as z } from "../TablePlugin/TableCellContextMenu/TableCellContextMenu.js";
12
+ import { s as A } from "../../../../RteEditor.module-DcvGRx3a.js";
13
+ import { setScrollableContainers as v, removeScrollableContainers as K } from "../../helpers.js";
14
+ const Q = ({ editorScrollPosition: d }) => {
15
+ const [t] = P(), [i, s] = C(null), u = L(null), f = T(() => {
16
+ const e = g();
17
+ if (h(e)) {
18
+ const l = e.anchor.getNode(), a = b(l);
19
+ if (a) {
20
+ const p = t.getElementByKey(a.getKey()), c = p ? p.getBoundingClientRect() : { right: 0, bottom: 0, height: 0 };
21
+ s({ xPos: c.right, yPos: c.bottom, height: c.height });
21
22
  } else
22
23
  s(null);
23
24
  }
24
- }, [e]), b = (o) => {
25
- var t;
26
- (t = m.current) == null || t.mutateTable(o);
25
+ }, [t]), w = (e) => {
26
+ var r;
27
+ (r = u.current) == null || r.mutateTable(e);
28
+ }, o = () => {
29
+ t.update(() => {
30
+ const e = g();
31
+ if (h(e)) {
32
+ const l = e.anchor.getNode();
33
+ b(l) && (y(null), s(null));
34
+ }
35
+ });
27
36
  };
28
- return p(() => {
29
- e.registerUpdateListener(({ editorState: o }) => {
30
- o.read(() => {
31
- d();
37
+ return m(() => {
38
+ t.registerUpdateListener(({ editorState: e }) => {
39
+ e.read(() => {
40
+ f();
32
41
  });
33
42
  });
34
- }, [e, d]), p(() => {
35
- const o = () => {
36
- e.update(() => {
37
- const t = f();
38
- if (g(t)) {
39
- const r = t.anchor.getNode();
40
- h(r) && (w(null), s(null));
41
- }
42
- });
43
+ }, [t, f]), m(() => (v(o), window.addEventListener("scroll", o), window.addEventListener("resize", o), () => {
44
+ window.removeEventListener("scroll", o), window.removeEventListener("resize", o), K(o);
45
+ }), [t]), m(() => {
46
+ const e = () => {
47
+ v(o);
43
48
  };
44
- return window.addEventListener("scroll", o), window.addEventListener("resize", o), () => {
45
- window.removeEventListener("scroll", o), window.removeEventListener("resize", o);
49
+ return window.addEventListener("keydown", e, { capture: !0 }), () => {
50
+ window.removeEventListener("keydown", e);
46
51
  };
47
- }, [e]), /* @__PURE__ */ v("div", { className: z.editor__toolbar, children: [
48
- /* @__PURE__ */ n(T, {}),
49
- /* @__PURE__ */ n(y, {}),
50
- /* @__PURE__ */ n(B, { isActive: !!i, ref: m }),
52
+ }, []), /* @__PURE__ */ E("div", { className: A.editor__toolbar, children: [
53
+ /* @__PURE__ */ n(N, {}),
54
+ /* @__PURE__ */ n(k, {}),
55
+ /* @__PURE__ */ n(S, { isActive: !!i, ref: u }),
51
56
  i && /* @__PURE__ */ n(
52
- k,
57
+ z,
53
58
  {
54
59
  position: i,
55
- parentScrollPosition: c,
56
- onAction: b
60
+ parentScrollPosition: d,
61
+ onAction: w
57
62
  }
58
63
  ),
59
- /* @__PURE__ */ n(N, { parentScrollPosition: c }),
60
- /* @__PURE__ */ n(x, {})
64
+ /* @__PURE__ */ n(x, { parentScrollPosition: d }),
65
+ /* @__PURE__ */ n(B, {})
61
66
  ] });
62
67
  };
63
68
  export {
64
- G as ToolBarPlugin
69
+ Q as ToolBarPlugin
65
70
  };
66
71
  //# sourceMappingURL=ToolbarPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolbarPlugin.js","sources":["../../../../../src/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $getSelection, $isRangeSelection, $setSelection } from 'lexical';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { $getTableCellNodeFromLexicalNode } from '@lexical/table';\n\nimport type { Actions } from 'components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu';\nimport type { TableMutation } from 'components/RteEditor/Plugins/TablePlugin/TablePlugin';\n\nimport {\n LinkPlugin,\n BlockFormatPlugin,\n ListPlugin,\n HistoryPlugin,\n TablePlugin,\n TableCellContextMenu,\n} from 'components/RteEditor/Plugins';\nimport styles from 'components/RteEditor/RteEditor.module.css';\n\nexport type Position = {\n xPos: number;\n yPos: number;\n height: number;\n};\n\ninterface ToolBarProps {\n editorScrollPosition: number;\n}\n\nexport const ToolBarPlugin = ({ editorScrollPosition }: ToolBarProps): JSX.Element => {\n const [editor] = useLexicalComposerContext();\n const [position, setPosition] = useState<Position | null>(null);\n const tableref = useRef<TableMutation>(null);\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n\n const tableCell = $getTableCellNodeFromLexicalNode(anchorNode);\n if (tableCell) {\n const domNode = editor.getElementByKey(tableCell.getKey());\n const position = domNode ? domNode.getBoundingClientRect() : { right: 0, bottom: 0, height: 0 };\n setPosition({ xPos: position.right, yPos: position.bottom, height: position.height });\n } else {\n setPosition(null);\n }\n }\n }, [editor]);\n\n const handleTableAction = (action: Actions) => {\n tableref.current?.mutateTable(action);\n };\n\n useEffect(() => {\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n });\n }, [editor, updateToolbar]);\n\n useEffect(() => {\n const handleResizeScroll = () => {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n\n const tableCell = $getTableCellNodeFromLexicalNode(anchorNode);\n if (tableCell) {\n $setSelection(null);\n setPosition(null);\n }\n }\n });\n };\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 };\n }, [editor]);\n\n return (\n <div className={styles['editor__toolbar']}>\n <BlockFormatPlugin />\n <ListPlugin />\n <TablePlugin isActive={Boolean(position)} ref={tableref} />\n {position && (\n <TableCellContextMenu\n position={position}\n parentScrollPosition={editorScrollPosition}\n onAction={handleTableAction}\n />\n )}\n <LinkPlugin parentScrollPosition={editorScrollPosition} />\n <HistoryPlugin />\n </div>\n );\n};\n"],"names":["ToolBarPlugin","editorScrollPosition","editor","useLexicalComposerContext","position","setPosition","useState","tableref","useRef","updateToolbar","useCallback","selection","$getSelection","$isRangeSelection","anchorNode","tableCell","$getTableCellNodeFromLexicalNode","domNode","handleTableAction","action","_a","useEffect","editorState","handleResizeScroll","$setSelection","jsxs","styles","jsx","BlockFormatPlugin","ListPlugin","TablePlugin","TableCellContextMenu","LinkPlugin","HistoryPlugin"],"mappings":";;;;;;;;;;;;AA4BO,MAAMA,IAAgB,CAAC,EAAE,sBAAAC,QAAsD;AAC9E,QAAA,CAACC,CAAM,IAAIC,KACX,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxDC,IAAWC,EAAsB,IAAI,GAErCC,IAAgBC,EAAY,MAAM;AACtC,UAAMC,IAAYC;AACd,QAAAC,EAAkBF,CAAS,GAAG;AAE1B,YAAAG,IADSH,EAAU,OACC,WAEpBI,IAAYC,EAAiCF,CAAU;AAC7D,UAAIC,GAAW;AACb,cAAME,IAAUf,EAAO,gBAAgBa,EAAU,OAAQ,CAAA,GACnDX,IAAWa,IAAUA,EAAQ,sBAAsB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,EAAE;AAClF,QAAAZ,EAAA,EAAE,MAAMD,EAAS,OAAO,MAAMA,EAAS,QAAQ,QAAQA,EAAS,OAAQ,CAAA;AAAA,MAAA;AAEpF,QAAAC,EAAY,IAAI;AAAA,IAEpB;AAAA,EAAA,GACC,CAACH,CAAM,CAAC,GAELgB,IAAoB,CAACC,MAAoB;;AACpC,KAAAC,IAAAb,EAAA,YAAA,QAAAa,EAAS,YAAYD;AAAA,EAAM;AAGtC,SAAAE,EAAU,MAAM;AACd,IAAAnB,EAAO,uBAAuB,CAAC,EAAE,aAAAoB,QAAkB;AACjD,MAAAA,EAAY,KAAK,MAAM;AACP,QAAAb;MAAA,CACf;AAAA,IAAA,CACF;AAAA,EAAA,GACA,CAACP,GAAQO,CAAa,CAAC,GAE1BY,EAAU,MAAM;AACd,UAAME,IAAqB,MAAM;AAC/B,MAAArB,EAAO,OAAO,MAAM;AAClB,cAAMS,IAAYC;AAEd,YAAAC,EAAkBF,CAAS,GAAG;AAE1B,gBAAAG,IADSH,EAAU,OACC;AAG1B,UADkBK,EAAiCF,CAAU,MAE3DU,EAAc,IAAI,GAClBnB,EAAY,IAAI;AAAA,QAEpB;AAAA,MAAA,CACD;AAAA,IAAA;AAGI,kBAAA,iBAAiB,UAAUkB,CAAkB,GAC7C,OAAA,iBAAiB,UAAUA,CAAkB,GAE7C,MAAM;AACJ,aAAA,oBAAoB,UAAUA,CAAkB,GAChD,OAAA,oBAAoB,UAAUA,CAAkB;AAAA,IAAA;AAAA,EACzD,GACC,CAACrB,CAAM,CAAC,GAGR,gBAAAuB,EAAA,OAAA,EAAI,WAAWC,EAAO,iBACrB,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAkB,EAAA;AAAA,sBAClBC,GAAW,EAAA;AAAA,sBACXC,GAAY,EAAA,UAAU,EAAQ1B,GAAW,KAAKG,GAAU;AAAA,IACxDH,KACC,gBAAAuB;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,UAAA3B;AAAA,QACA,sBAAsBH;AAAA,QACtB,UAAUiB;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,gBAAAS,EAACK,GAAW,EAAA,sBAAsB/B,EAAsB,CAAA;AAAA,sBACvDgC,GAAc,EAAA;AAAA,EACjB,EAAA,CAAA;AAEJ;"}
1
+ {"version":3,"file":"ToolbarPlugin.js","sources":["../../../../../src/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { $getSelection, $isRangeSelection, $setSelection } from 'lexical';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { $getTableCellNodeFromLexicalNode } from '@lexical/table';\n\nimport type { Actions } from 'components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu';\nimport type { TableMutation } from 'components/RteEditor/Plugins/TablePlugin/TablePlugin';\n\nimport {\n LinkPlugin,\n BlockFormatPlugin,\n ListPlugin,\n HistoryPlugin,\n TablePlugin,\n TableCellContextMenu,\n} from 'components/RteEditor/Plugins';\nimport styles from 'components/RteEditor/RteEditor.module.css';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\nexport type Position = {\n xPos: number;\n yPos: number;\n height: number;\n};\n\ninterface ToolBarProps {\n editorScrollPosition: number;\n}\n\nexport const ToolBarPlugin = ({ editorScrollPosition }: ToolBarProps): JSX.Element => {\n const [editor] = useLexicalComposerContext();\n const [position, setPosition] = useState<Position | null>(null);\n const tableref = useRef<TableMutation>(null);\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n\n const tableCell = $getTableCellNodeFromLexicalNode(anchorNode);\n if (tableCell) {\n const domNode = editor.getElementByKey(tableCell.getKey());\n const position = domNode ? domNode.getBoundingClientRect() : { right: 0, bottom: 0, height: 0 };\n setPosition({ xPos: position.right, yPos: position.bottom, height: position.height });\n } else {\n setPosition(null);\n }\n }\n }, [editor]);\n\n const handleTableAction = (action: Actions) => {\n tableref.current?.mutateTable(action);\n };\n\n const handleResizeScroll = () => {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const anchorNode = anchor.getNode();\n\n const tableCell = $getTableCellNodeFromLexicalNode(anchorNode);\n if (tableCell) {\n $setSelection(null);\n setPosition(null);\n }\n }\n });\n };\n\n useEffect(() => {\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n });\n }, [editor, updateToolbar]);\n\n useEffect(() => {\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 }, [editor]);\n\n useEffect(() => {\n const removeKeydown = () => {\n setScrollableContainers(handleResizeScroll);\n };\n\n window.addEventListener('keydown', removeKeydown, { capture: true });\n\n return () => {\n window.removeEventListener('keydown', removeKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <div className={styles['editor__toolbar']}>\n <BlockFormatPlugin />\n <ListPlugin />\n <TablePlugin isActive={Boolean(position)} ref={tableref} />\n {position && (\n <TableCellContextMenu\n position={position}\n parentScrollPosition={editorScrollPosition}\n onAction={handleTableAction}\n />\n )}\n <LinkPlugin parentScrollPosition={editorScrollPosition} />\n <HistoryPlugin />\n </div>\n );\n};\n"],"names":["ToolBarPlugin","editorScrollPosition","editor","useLexicalComposerContext","position","setPosition","useState","tableref","useRef","updateToolbar","useCallback","selection","$getSelection","$isRangeSelection","anchorNode","tableCell","$getTableCellNodeFromLexicalNode","domNode","handleTableAction","action","_a","handleResizeScroll","$setSelection","useEffect","editorState","setScrollableContainers","removeScrollableContainers","removeKeydown","jsxs","styles","jsx","BlockFormatPlugin","ListPlugin","TablePlugin","TableCellContextMenu","LinkPlugin","HistoryPlugin"],"mappings":";;;;;;;;;;;;;AA6BO,MAAMA,IAAgB,CAAC,EAAE,sBAAAC,QAAsD;AAC9E,QAAA,CAACC,CAAM,IAAIC,KACX,CAACC,GAAUC,CAAW,IAAIC,EAA0B,IAAI,GACxDC,IAAWC,EAAsB,IAAI,GAErCC,IAAgBC,EAAY,MAAM;AACtC,UAAMC,IAAYC;AACd,QAAAC,EAAkBF,CAAS,GAAG;AAE1B,YAAAG,IADSH,EAAU,OACC,WAEpBI,IAAYC,EAAiCF,CAAU;AAC7D,UAAIC,GAAW;AACb,cAAME,IAAUf,EAAO,gBAAgBa,EAAU,OAAQ,CAAA,GACnDX,IAAWa,IAAUA,EAAQ,sBAAsB,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,QAAQ,EAAE;AAClF,QAAAZ,EAAA,EAAE,MAAMD,EAAS,OAAO,MAAMA,EAAS,QAAQ,QAAQA,EAAS,OAAQ,CAAA;AAAA,MAAA;AAEpF,QAAAC,EAAY,IAAI;AAAA,IAEpB;AAAA,EAAA,GACC,CAACH,CAAM,CAAC,GAELgB,IAAoB,CAACC,MAAoB;;AACpC,KAAAC,IAAAb,EAAA,YAAA,QAAAa,EAAS,YAAYD;AAAA,EAAM,GAGhCE,IAAqB,MAAM;AAC/B,IAAAnB,EAAO,OAAO,MAAM;AAClB,YAAMS,IAAYC;AAEd,UAAAC,EAAkBF,CAAS,GAAG;AAE1B,cAAAG,IADSH,EAAU,OACC;AAG1B,QADkBK,EAAiCF,CAAU,MAE3DQ,EAAc,IAAI,GAClBjB,EAAY,IAAI;AAAA,MAEpB;AAAA,IAAA,CACD;AAAA,EAAA;AAGH,SAAAkB,EAAU,MAAM;AACd,IAAArB,EAAO,uBAAuB,CAAC,EAAE,aAAAsB,QAAkB;AACjD,MAAAA,EAAY,KAAK,MAAM;AACP,QAAAf;MAAA,CACf;AAAA,IAAA,CACF;AAAA,EAAA,GACA,CAACP,GAAQO,CAAa,CAAC,GAE1Bc,EAAU,OACRE,EAAwBJ,CAAkB,GAEnC,OAAA,iBAAiB,UAAUA,CAAkB,GAC7C,OAAA,iBAAiB,UAAUA,CAAkB,GAE7C,MAAM;AACJ,WAAA,oBAAoB,UAAUA,CAAkB,GAChD,OAAA,oBAAoB,UAAUA,CAAkB,GACvDK,EAA2BL,CAAkB;AAAA,EAAA,IAG9C,CAACnB,CAAM,CAAC,GAEXqB,EAAU,MAAM;AACd,UAAMI,IAAgB,MAAM;AAC1B,MAAAF,EAAwBJ,CAAkB;AAAA,IAAA;AAG5C,kBAAO,iBAAiB,WAAWM,GAAe,EAAE,SAAS,IAAM,GAE5D,MAAM;AACJ,aAAA,oBAAoB,WAAWA,CAAa;AAAA,IAAA;AAAA,EAGvD,GAAG,CAAE,CAAA,GAGF,gBAAAC,EAAA,OAAA,EAAI,WAAWC,EAAO,iBACrB,UAAA;AAAA,IAAA,gBAAAC,EAACC,GAAkB,EAAA;AAAA,sBAClBC,GAAW,EAAA;AAAA,sBACXC,GAAY,EAAA,UAAU,EAAQ7B,GAAW,KAAKG,GAAU;AAAA,IACxDH,KACC,gBAAA0B;AAAA,MAACI;AAAA,MAAA;AAAA,QACC,UAAA9B;AAAA,QACA,sBAAsBH;AAAA,QACtB,UAAUiB;AAAA,MAAA;AAAA,IACZ;AAAA,IAEF,gBAAAY,EAACK,GAAW,EAAA,sBAAsBlC,EAAsB,CAAA;AAAA,sBACvDmC,GAAc,EAAA;AAAA,EACjB,EAAA,CAAA;AAEJ;"}
@@ -3,7 +3,7 @@ import { BlockFormatPlugin as l } from "./BlockFormatPlugin/BlockFormatPlugin.js
3
3
  import { ListPlugin as n } from "./ListPlugin/ListPlugin.js";
4
4
  import { LinkPlugin as m, getLinkNodeTag as x } from "./LinkPlugin/LinkPlugin.js";
5
5
  import { HistoryPlugin as p } from "./HistoryPlugin/HistoryPlugin.js";
6
- import { T as a } from "../../../TablePlugin-BkczRiUz.js";
6
+ import { T as a } from "../../../TablePlugin-B3ZkyOU_.js";
7
7
  import { TableCellContextMenu as T } from "./TablePlugin/TableCellContextMenu/TableCellContextMenu.js";
8
8
  export {
9
9
  l as BlockFormatPlugin,
@@ -14,7 +14,7 @@ import { exportMap as sn, isStartingWithHtmlTag as an, mergeBoldStrongTags as ln
14
14
  import { s as M } from "../../RteEditor.module-DcvGRx3a.js";
15
15
  import { ToolBarPlugin as cn } from "./Plugins/ToolbarPlugin/ToolbarPlugin.js";
16
16
  import { useTranslation as dn } from "./hooks/useTranslation.js";
17
- import "../../TablePlugin-BkczRiUz.js";
17
+ import "../../TablePlugin-B3ZkyOU_.js";
18
18
  import "./Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js";
19
19
  import "./hooks/components/Flyout.js";
20
20
  import "../Buttons/Button.js";
@@ -3,3 +3,5 @@ export declare const isStartingWithHtmlTag: (str: string) => boolean;
3
3
  export declare const mergeBoldStrongTags: (html: string) => string;
4
4
  export declare const removeStylesExportDOM: (editor: LexicalEditor, target: LexicalNode) => DOMExportOutput;
5
5
  export declare const exportMap: Map<import('lexical').KlassConstructor<typeof LexicalNode>, (editor: LexicalEditor, target: LexicalNode) => DOMExportOutput>;
6
+ export declare const setScrollableContainers: (fn: (event: Event) => void) => void;
7
+ export declare const removeScrollableContainers: (fn: (event: Event) => void) => void;
@@ -1,30 +1,40 @@
1
- import { a as l } from "../../LexicalLink.prod-Cqa5Im8X.js";
2
- import { J as i, D as n } from "../../LexicalList.prod-DlqzsJTH.js";
3
- import { P as m, G as a } from "../../Lexical.prod-DOTdxgeo.js";
4
- import { u, c as g, e as c } from "../../LexicalTable.prod-BKz2StgB.js";
5
- const A = (o) => /^<(b|i|u|strong|em|mark|small|del|ins|sub|sup|div|p|span|h[1-6]|a|img|table|tr|td|th|ul|ol|li|blockquote|pre|code|br)(\s+[^>]*)?>/i.test(o.trim()), y = (o) => {
6
- let e = o.replace(/<b><strong>/gi, "<strong>");
7
- return e = e.replace(/<\/strong><\/b>/gi, "</strong>"), e;
8
- }, t = (o, e) => {
9
- const s = e.exportDOM(o);
10
- if (s && s.element instanceof HTMLElement)
11
- for (const r of [s.element, ...s.element.querySelectorAll('[style],[class],[dir="ltr"]')])
12
- r.removeAttribute("class"), r.getAttribute("style") && (r.setAttribute("style", ""), r.removeAttribute("style")), r.getAttribute("dir") === "ltr" && r.removeAttribute("dir");
13
- return s;
14
- }, h = /* @__PURE__ */ new Map([
15
- [m, t],
16
- [a, t],
17
- [i, t],
18
- [n, t],
19
- [u, t],
20
- [g, t],
21
- [c, t],
22
- [l, t]
23
- ]);
1
+ import { a as s } from "../../LexicalLink.prod-Cqa5Im8X.js";
2
+ import { J as n, D as i } from "../../LexicalList.prod-DlqzsJTH.js";
3
+ import { P as a, G as c } from "../../Lexical.prod-DOTdxgeo.js";
4
+ import { u as m, c as u, e as g } from "../../LexicalTable.prod-BKz2StgB.js";
5
+ const h = (e) => /^<(b|i|u|strong|em|mark|small|del|ins|sub|sup|div|p|span|h[1-6]|a|img|table|tr|td|th|ul|ol|li|blockquote|pre|code|br)(\s+[^>]*)?>/i.test(e.trim()), v = (e) => {
6
+ let r = e.replace(/<b><strong>/gi, "<strong>");
7
+ return r = r.replace(/<\/strong><\/b>/gi, "</strong>"), r;
8
+ }, l = (e, r) => {
9
+ const t = r.exportDOM(e);
10
+ if (t && t.element instanceof HTMLElement)
11
+ for (const o of [t.element, ...t.element.querySelectorAll('[style],[class],[dir="ltr"]')])
12
+ o.removeAttribute("class"), o.getAttribute("style") && (o.setAttribute("style", ""), o.removeAttribute("style")), o.getAttribute("dir") === "ltr" && o.removeAttribute("dir");
13
+ return t;
14
+ }, A = /* @__PURE__ */ new Map([
15
+ [a, l],
16
+ [c, l],
17
+ [n, l],
18
+ [i, l],
19
+ [m, l],
20
+ [u, l],
21
+ [g, l],
22
+ [s, l]
23
+ ]), y = (e) => {
24
+ document.querySelectorAll("*").forEach((t) => {
25
+ t.scrollHeight > t.clientHeight && t.addEventListener("scroll", e);
26
+ });
27
+ }, S = (e) => {
28
+ document.querySelectorAll("*").forEach((t) => {
29
+ t.scrollHeight > t.clientHeight && t.removeEventListener("scroll", e);
30
+ });
31
+ };
24
32
  export {
25
- h as exportMap,
26
- A as isStartingWithHtmlTag,
27
- y as mergeBoldStrongTags,
28
- t as removeStylesExportDOM
33
+ A as exportMap,
34
+ h as isStartingWithHtmlTag,
35
+ v as mergeBoldStrongTags,
36
+ S as removeScrollableContainers,
37
+ l as removeStylesExportDOM,
38
+ y as setScrollableContainers
29
39
  };
30
40
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/components/RteEditor/helpers.ts"],"sourcesContent":["import { LinkNode } from '@lexical/link';\nimport { ListNode, ListItemNode } from '@lexical/list';\nimport { ParagraphNode, TextNode } from 'lexical';\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table';\n\nimport type { DOMExportOutput, Klass, LexicalEditor, LexicalNode } from 'lexical';\n\nexport const isStartingWithHtmlTag = (str: string): boolean => {\n const htmlTagPattern =\n /^<(b|i|u|strong|em|mark|small|del|ins|sub|sup|div|p|span|h[1-6]|a|img|table|tr|td|th|ul|ol|li|blockquote|pre|code|br)(\\s+[^>]*)?>/i;\n return htmlTagPattern.test(str.trim());\n};\n\nexport const mergeBoldStrongTags = (html: string): string => {\n let mergedHtml = html.replace(/<b><strong>/gi, '<strong>');\n mergedHtml = mergedHtml.replace(/<\\/strong><\\/b>/gi, '</strong>');\n return mergedHtml;\n};\n\nexport const removeStylesExportDOM = (editor: LexicalEditor, target: LexicalNode): DOMExportOutput => {\n const output = target.exportDOM(editor);\n if (output && output.element instanceof HTMLElement) {\n for (const el of [output.element, ...output.element.querySelectorAll('[style],[class],[dir=\"ltr\"]')]) {\n el.removeAttribute('class');\n if (el.getAttribute('style')) {\n el.setAttribute('style', '');\n el.removeAttribute('style');\n }\n if (el.getAttribute('dir') === 'ltr') {\n el.removeAttribute('dir');\n }\n }\n }\n return output;\n};\n\nexport const exportMap = new Map<Klass<LexicalNode>, (editor: LexicalEditor, target: LexicalNode) => DOMExportOutput>([\n [ParagraphNode, removeStylesExportDOM],\n [TextNode, removeStylesExportDOM],\n [ListNode, removeStylesExportDOM],\n [ListItemNode, removeStylesExportDOM],\n [TableNode, removeStylesExportDOM],\n [TableRowNode, removeStylesExportDOM],\n [TableCellNode, removeStylesExportDOM],\n [LinkNode, removeStylesExportDOM],\n]);\n"],"names":["isStartingWithHtmlTag","str","mergeBoldStrongTags","html","mergedHtml","removeStylesExportDOM","editor","target","output","el","exportMap","ParagraphNode","TextNode","ListNode","ListItemNode","TableNode","TableRowNode","TableCellNode","LinkNode"],"mappings":";;;;AAOa,MAAAA,IAAwB,CAACC,MAElC,qIACoB,KAAKA,EAAI,KAAM,CAAA,GAG1BC,IAAsB,CAACC,MAAyB;AAC3D,MAAIC,IAAaD,EAAK,QAAQ,iBAAiB,UAAU;AAC5C,SAAAC,IAAAA,EAAW,QAAQ,qBAAqB,WAAW,GACzDA;AACT,GAEaC,IAAwB,CAACC,GAAuBC,MAAyC;AAC9F,QAAAC,IAASD,EAAO,UAAUD,CAAM;AAClC,MAAAE,KAAUA,EAAO,mBAAmB;AAC3B,eAAAC,KAAM,CAACD,EAAO,SAAS,GAAGA,EAAO,QAAQ,iBAAiB,6BAA6B,CAAC;AACjG,MAAAC,EAAG,gBAAgB,OAAO,GACtBA,EAAG,aAAa,OAAO,MACtBA,EAAA,aAAa,SAAS,EAAE,GAC3BA,EAAG,gBAAgB,OAAO,IAExBA,EAAG,aAAa,KAAK,MAAM,SAC7BA,EAAG,gBAAgB,KAAK;AAIvB,SAAAD;AACT,GAEaE,wBAAgB,IAAyF;AAAA,EACpH,CAACC,GAAeN,CAAqB;AAAA,EACrC,CAACO,GAAUP,CAAqB;AAAA,EAChC,CAACQ,GAAUR,CAAqB;AAAA,EAChC,CAACS,GAAcT,CAAqB;AAAA,EACpC,CAACU,GAAWV,CAAqB;AAAA,EACjC,CAACW,GAAcX,CAAqB;AAAA,EACpC,CAACY,GAAeZ,CAAqB;AAAA,EACrC,CAACa,GAAUb,CAAqB;AAClC,CAAC;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/components/RteEditor/helpers.ts"],"sourcesContent":["import { LinkNode } from '@lexical/link';\nimport { ListNode, ListItemNode } from '@lexical/list';\nimport { ParagraphNode, TextNode } from 'lexical';\nimport { TableCellNode, TableNode, TableRowNode } from '@lexical/table';\n\nimport type { DOMExportOutput, Klass, LexicalEditor, LexicalNode } from 'lexical';\n\nexport const isStartingWithHtmlTag = (str: string): boolean => {\n const htmlTagPattern =\n /^<(b|i|u|strong|em|mark|small|del|ins|sub|sup|div|p|span|h[1-6]|a|img|table|tr|td|th|ul|ol|li|blockquote|pre|code|br)(\\s+[^>]*)?>/i;\n return htmlTagPattern.test(str.trim());\n};\n\nexport const mergeBoldStrongTags = (html: string): string => {\n let mergedHtml = html.replace(/<b><strong>/gi, '<strong>');\n mergedHtml = mergedHtml.replace(/<\\/strong><\\/b>/gi, '</strong>');\n return mergedHtml;\n};\n\nexport const removeStylesExportDOM = (editor: LexicalEditor, target: LexicalNode): DOMExportOutput => {\n const output = target.exportDOM(editor);\n if (output && output.element instanceof HTMLElement) {\n for (const el of [output.element, ...output.element.querySelectorAll('[style],[class],[dir=\"ltr\"]')]) {\n el.removeAttribute('class');\n if (el.getAttribute('style')) {\n el.setAttribute('style', '');\n el.removeAttribute('style');\n }\n if (el.getAttribute('dir') === 'ltr') {\n el.removeAttribute('dir');\n }\n }\n }\n return output;\n};\n\nexport const exportMap = new Map<Klass<LexicalNode>, (editor: LexicalEditor, target: LexicalNode) => DOMExportOutput>([\n [ParagraphNode, removeStylesExportDOM],\n [TextNode, removeStylesExportDOM],\n [ListNode, removeStylesExportDOM],\n [ListItemNode, removeStylesExportDOM],\n [TableNode, removeStylesExportDOM],\n [TableRowNode, removeStylesExportDOM],\n [TableCellNode, removeStylesExportDOM],\n [LinkNode, removeStylesExportDOM],\n]);\n\nexport const setScrollableContainers = (fn: (event: Event) => void) => {\n const scrollableContainers = document.querySelectorAll('*');\n scrollableContainers.forEach((container) => {\n if (container.scrollHeight > container.clientHeight) {\n container.addEventListener('scroll', fn);\n }\n });\n};\n\nexport const removeScrollableContainers = (fn: (event: Event) => void) => {\n const scrollableContainers = document.querySelectorAll('*');\n scrollableContainers.forEach((container) => {\n if (container.scrollHeight > container.clientHeight) {\n container.removeEventListener('scroll', fn);\n }\n });\n};\n"],"names":["isStartingWithHtmlTag","str","mergeBoldStrongTags","html","mergedHtml","removeStylesExportDOM","editor","target","output","el","exportMap","ParagraphNode","TextNode","ListNode","ListItemNode","TableNode","TableRowNode","TableCellNode","LinkNode","setScrollableContainers","fn","container","removeScrollableContainers"],"mappings":";;;;AAOa,MAAAA,IAAwB,CAACC,MAElC,qIACoB,KAAKA,EAAI,KAAM,CAAA,GAG1BC,IAAsB,CAACC,MAAyB;AAC3D,MAAIC,IAAaD,EAAK,QAAQ,iBAAiB,UAAU;AAC5C,SAAAC,IAAAA,EAAW,QAAQ,qBAAqB,WAAW,GACzDA;AACT,GAEaC,IAAwB,CAACC,GAAuBC,MAAyC;AAC9F,QAAAC,IAASD,EAAO,UAAUD,CAAM;AAClC,MAAAE,KAAUA,EAAO,mBAAmB;AAC3B,eAAAC,KAAM,CAACD,EAAO,SAAS,GAAGA,EAAO,QAAQ,iBAAiB,6BAA6B,CAAC;AACjG,MAAAC,EAAG,gBAAgB,OAAO,GACtBA,EAAG,aAAa,OAAO,MACtBA,EAAA,aAAa,SAAS,EAAE,GAC3BA,EAAG,gBAAgB,OAAO,IAExBA,EAAG,aAAa,KAAK,MAAM,SAC7BA,EAAG,gBAAgB,KAAK;AAIvB,SAAAD;AACT,GAEaE,wBAAgB,IAAyF;AAAA,EACpH,CAACC,GAAeN,CAAqB;AAAA,EACrC,CAACO,GAAUP,CAAqB;AAAA,EAChC,CAACQ,GAAUR,CAAqB;AAAA,EAChC,CAACS,GAAcT,CAAqB;AAAA,EACpC,CAACU,GAAWV,CAAqB;AAAA,EACjC,CAACW,GAAcX,CAAqB;AAAA,EACpC,CAACY,GAAeZ,CAAqB;AAAA,EACrC,CAACa,GAAUb,CAAqB;AAClC,CAAC,GAEYc,IAA0B,CAACC,MAA+B;AAEhD,EADQ,SAAS,iBAAiB,GAAG,EACrC,QAAQ,CAACC,MAAc;AACtC,IAAAA,EAAU,eAAeA,EAAU,gBAC3BA,EAAA,iBAAiB,UAAUD,CAAE;AAAA,EACzC,CACD;AACH,GAEaE,IAA6B,CAACF,MAA+B;AAEnD,EADQ,SAAS,iBAAiB,GAAG,EACrC,QAAQ,CAACC,MAAc;AACtC,IAAAA,EAAU,eAAeA,EAAU,gBAC3BA,EAAA,oBAAoB,UAAUD,CAAE;AAAA,EAC5C,CACD;AACH;"}
@@ -30,7 +30,7 @@ import { Label as po } from "./Label/Label.js";
30
30
  import { MenuLink as mo } from "./MenuLink/MenuLink.js";
31
31
  import { MetaDataList as io } from "./MetaDataList/MetaDataList.js";
32
32
  import { ModalDialog as no } from "./ModalDialog/ModalDialog.js";
33
- import { M as uo } from "../TablePlugin-BkczRiUz.js";
33
+ import { M as uo } from "../TablePlugin-B3ZkyOU_.js";
34
34
  import { OverlayCloseButton as so } from "./OverlayCloseButton/OverlayCloseButton.js";
35
35
  import { PageOverlay as So } from "./PageOverlay/PageOverlay.js";
36
36
  import { Periods as ko } from "./Periods/Periods.js";
package/dist/index.js CHANGED
@@ -30,7 +30,7 @@ import { Label as po } from "./components/Label/Label.js";
30
30
  import { MenuLink as mo } from "./components/MenuLink/MenuLink.js";
31
31
  import { MetaDataList as io } from "./components/MetaDataList/MetaDataList.js";
32
32
  import { ModalDialog as no } from "./components/ModalDialog/ModalDialog.js";
33
- import { M as uo } from "./TablePlugin-BkczRiUz.js";
33
+ import { M as uo } from "./TablePlugin-B3ZkyOU_.js";
34
34
  import { OverlayCloseButton as so } from "./components/OverlayCloseButton/OverlayCloseButton.js";
35
35
  import { PageOverlay as So } from "./components/PageOverlay/PageOverlay.js";
36
36
  import { Periods as ko } from "./components/Periods/Periods.js";
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@uva-glass/component-library",
3
3
  "author": "Team Glass - Frontend vrienden",
4
4
  "private": false,
5
- "version": "1.62.10",
5
+ "version": "1.62.12",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
@@ -40,8 +40,8 @@
40
40
  "react-dom": "^18.3.1"
41
41
  },
42
42
  "devDependencies": {
43
- "@commitlint/cli": "^19.5.0",
44
- "@commitlint/config-conventional": "^19.5.0",
43
+ "@commitlint/cli": "^19.6.0",
44
+ "@commitlint/config-conventional": "^19.6.0",
45
45
  "@react-aria/button": "^3.10.1",
46
46
  "@react-aria/dialog": "^3.5.19",
47
47
  "@react-aria/overlays": "^3.23.4",
@@ -58,7 +58,7 @@
58
58
  "@storybook/react": "^8.4.4",
59
59
  "@storybook/react-vite": "^8.4.4",
60
60
  "@storybook/test": "^8.4.4",
61
- "@types/node": "^22.9.0",
61
+ "@types/node": "^22.9.1",
62
62
  "@types/react": "^18.3.12",
63
63
  "@types/react-dom": "^18.3.1",
64
64
  "@uva-glass/eslint-config": "^1.3.1",
@@ -71,7 +71,7 @@
71
71
  "eslint-plugin-react": "^7.37.2",
72
72
  "eslint-plugin-react-hooks": "^5.0.0",
73
73
  "eslint-plugin-react-refresh": "^0.4.14",
74
- "eslint-plugin-storybook": "^0.11.0",
74
+ "eslint-plugin-storybook": "^0.11.1",
75
75
  "glob": "^11.0.0",
76
76
  "jest": "^29.7.0",
77
77
  "jest-environment-jsdom": "^29.7.0",
@@ -94,7 +94,7 @@
94
94
  "vite-plugin-lib-inject-css": "^2.1.1",
95
95
  "vite-plugin-static-copy": "^2.1.0",
96
96
  "vite-plugin-svgr": "^4.3.0",
97
- "vite-tsconfig-paths": "^5.1.2"
97
+ "vite-tsconfig-paths": "^5.1.3"
98
98
  },
99
99
  "dependencies": {
100
100
  "@lexical/link": "^0.20.0",
@@ -1 +0,0 @@
1
- {"version":3,"file":"TablePlugin-BkczRiUz.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 } 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';\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 console.log('resize or scroll');\n handleClose();\n };\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 };\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 { 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>();\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","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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"}