@uva-glass/component-library 1.64.4 → 1.64.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- ._link-context-menu__wrapper_22t82_1{align-items:center;display:flex;gap:1rem;justify-content:flex-start}._link-context-menu__input_22t82_8{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:2px solid var(--color-blue-500);border-radius:.5rem;color:var(--color-black);font-family:inherit;font-size:inherit;height:2.5rem;margin:0 .5rem 0 0;min-width:20rem;padding:0 .5rem}._link-context-menu__input_22t82_8:disabled{border-color:transparent}._link-context-menu__button_22t82_26{background-color:transparent;border:none;border-radius:.5rem;color:var(--color-black);cursor:pointer;font-size:inherit;height:2.5rem}._link-context-menu__actions_22t82_36{align-items:center;display:flex;gap:.5rem;justify-content:flex-end;margin-top:1rem}
1
+ ._link-context-menu__wrapper_1ub2v_1{align-items:center;display:flex;justify-content:flex-start}._link-context-menu__input_1ub2v_7{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:2px solid var(--color-blue-500);border-radius:.5rem;color:var(--color-black);font-family:inherit;font-size:inherit;height:2.5rem;margin:0 .5rem 0 0;min-width:20rem;padding:0 .5rem}._link-context-menu__input_1ub2v_7:disabled{border-color:transparent}._link-context-menu__button_1ub2v_25{aspect-ratio:1;background-color:transparent;border:none;border-radius:.5rem;color:var(--color-black);cursor:pointer;font-size:inherit;height:2.5rem}._link-context-menu__actions_1ub2v_36{align-items:center;display:flex;gap:.5rem;justify-content:flex-end;margin-top:1rem}
@@ -1,55 +1,101 @@
1
- import { jsxs as c, Fragment as w, jsx as n } from "react/jsx-runtime";
2
- import { forwardRef as C, useState as u, useImperativeHandle as N, useLayoutEffect as L } from "react";
3
- import { e as g } from "../../../../../helpers-BKqr9jXh.js";
4
- import { Icon as s } from "../../../../Icon/Icon.js";
5
- import { useTranslation as S } from "../../../hooks/useTranslation.js";
6
- import { Button as _ } from "../../../../Buttons/Button.js";
1
+ import { jsxs as k, Fragment as v, jsx as n } from "react/jsx-runtime";
2
+ import { forwardRef as K, useState as b, useRef as N, useImperativeHandle as T, useLayoutEffect as g } from "react";
3
+ import { e as E } from "../../../../../helpers-BKqr9jXh.js";
4
+ import { Icon as m } from "../../../../Icon/Icon.js";
5
+ import { useTranslation as R } from "../../../hooks/useTranslation.js";
6
+ import { Button as y } from "../../../../Buttons/Button.js";
7
7
  import "../../../../Buttons/LinkButton.js";
8
8
  import "@react-aria/button";
9
- import '../../../../../assets/LinkContextMenu.css';const t = {
10
- "link-context-menu__wrapper": "_link-context-menu__wrapper_22t82_1",
11
- "link-context-menu__input": "_link-context-menu__input_22t82_8",
12
- "link-context-menu__button": "_link-context-menu__button_22t82_26",
13
- "link-context-menu__actions": "_link-context-menu__actions_22t82_36"
14
- }, P = C(({ url: e, onSave: p, onDelete: k, onClose: d }, b) => {
15
- const o = S(), [r, i] = u(e), [l, m] = u(!1), a = () => {
16
- i(e), m(!1);
17
- }, x = () => {
18
- p(r), a();
19
- }, h = () => {
20
- k(), i(""), a();
21
- }, f = () => {
22
- a(), d();
23
- }, y = () => {
24
- window.open(g(e), "_blank");
9
+ import '../../../../../assets/LinkContextMenu.css';const a = {
10
+ "link-context-menu__wrapper": "_link-context-menu__wrapper_1ub2v_1",
11
+ "link-context-menu__input": "_link-context-menu__input_1ub2v_7",
12
+ "link-context-menu__button": "_link-context-menu__button_1ub2v_25",
13
+ "link-context-menu__actions": "_link-context-menu__actions_1ub2v_36"
14
+ }, O = K(({ url: l, onSave: f, onDelete: h, onClose: x }, w) => {
15
+ const e = R(), [_, s] = b(l), [c, u] = b(!1), o = N(null), r = () => {
16
+ var t;
17
+ s(l), u(!1), (t = o.current) == null || t.blur();
18
+ }, C = () => {
19
+ f(_), r();
20
+ }, p = () => {
21
+ h(), s(""), r();
22
+ }, L = () => {
23
+ r(), x();
24
+ }, d = () => {
25
+ window.open(E(l), "_blank");
25
26
  };
26
- return N(b, () => ({
27
- clearForm: a
28
- })), L(() => {
29
- i(e);
30
- }, [e]), /* @__PURE__ */ c(w, { children: [
31
- /* @__PURE__ */ c("div", { className: t["link-context-menu__wrapper"], children: [
27
+ return T(w, () => ({
28
+ clearForm: r
29
+ })), g(() => {
30
+ s(l), window.addEventListener("keydown", (t) => {
31
+ t.ctrlKey && t.shiftKey && t.key === "L" && (u(!0), setTimeout(() => {
32
+ var i;
33
+ return (i = o.current) == null ? void 0 : i.focus();
34
+ }, 0)), t.ctrlKey && t.shiftKey && t.code === "Digit1" && (d(), setTimeout(() => {
35
+ var i;
36
+ return (i = o.current) == null ? void 0 : i.focus();
37
+ }, 0)), t.ctrlKey && t.shiftKey && t.key === "Q" && (p(), setTimeout(() => {
38
+ var i;
39
+ return (i = o.current) == null ? void 0 : i.focus();
40
+ }, 0));
41
+ });
42
+ }, [l]), /* @__PURE__ */ k(v, { children: [
43
+ /* @__PURE__ */ k("div", { className: a["link-context-menu__wrapper"], children: [
32
44
  /* @__PURE__ */ n(
33
45
  "input",
34
46
  {
35
47
  type: "text",
36
- value: r,
37
- onChange: (v) => i(v.target.value),
38
- className: t["link-context-menu__input"],
39
- disabled: !l
48
+ value: _,
49
+ onChange: (t) => s(t.target.value),
50
+ className: a["link-context-menu__input"],
51
+ disabled: !c,
52
+ ref: o
40
53
  }
41
54
  ),
42
- !l && /* @__PURE__ */ n("button", { type: "button", className: t["link-context-menu__button"], onClick: () => m(!0), children: /* @__PURE__ */ n(s, { name: "Pencil", size: 20 }) }),
43
- /* @__PURE__ */ n("button", { type: "button", className: t["link-context-menu__button"], onClick: y, children: /* @__PURE__ */ n(s, { name: "ArrowTopRightOnSquare", size: 20 }) }),
44
- /* @__PURE__ */ n("button", { type: "button", className: t["link-context-menu__button"], onClick: h, children: /* @__PURE__ */ n(s, { name: "LinkSlash", size: 20 }) })
55
+ !c && /* @__PURE__ */ n(
56
+ "button",
57
+ {
58
+ type: "button",
59
+ className: a["link-context-menu__button"],
60
+ onClick: () => u(!0),
61
+ title: e.links.linkEdittip,
62
+ "aria-label": e.aria.labels.link,
63
+ "aria-keyshortcuts": e.aria.keyshortcuts.editlink,
64
+ children: /* @__PURE__ */ n(m, { name: "Pencil", size: 20 })
65
+ }
66
+ ),
67
+ /* @__PURE__ */ n(
68
+ "button",
69
+ {
70
+ type: "button",
71
+ className: a["link-context-menu__button"],
72
+ onClick: d,
73
+ title: e.links.linkTesttip,
74
+ "aria-label": e.aria.labels.link,
75
+ "aria-keyshortcuts": e.aria.keyshortcuts.testlink,
76
+ children: /* @__PURE__ */ n(m, { name: "ArrowTopRightOnSquare", size: 20 })
77
+ }
78
+ ),
79
+ /* @__PURE__ */ n(
80
+ "button",
81
+ {
82
+ type: "button",
83
+ className: a["link-context-menu__button"],
84
+ onClick: p,
85
+ title: e.links.linkDeletetip,
86
+ "aria-label": e.aria.labels.link,
87
+ "aria-keyshortcuts": e.aria.keyshortcuts.deletelink,
88
+ children: /* @__PURE__ */ n(m, { name: "LinkSlash", size: 20 })
89
+ }
90
+ )
45
91
  ] }),
46
- l && /* @__PURE__ */ c("div", { className: t["link-context-menu__actions"], children: [
47
- /* @__PURE__ */ n(_, { variant: "secondary", onClick: f, "aria-label": o.common.cancel, type: "button", children: o.common.cancel }),
48
- /* @__PURE__ */ n(_, { variant: "primary", onClick: x, "aria-label": o.aria.labels.linkOkButton, type: "button", children: o.links.addLink })
92
+ c && /* @__PURE__ */ k("div", { className: a["link-context-menu__actions"], children: [
93
+ /* @__PURE__ */ n(y, { variant: "secondary", onClick: L, "aria-label": e.common.cancel, type: "button", children: e.common.cancel }),
94
+ /* @__PURE__ */ n(y, { variant: "primary", onClick: C, "aria-label": e.aria.labels.linkOkButton, type: "button", children: e.links.addLink })
49
95
  ] })
50
96
  ] });
51
97
  });
52
98
  export {
53
- P as LinkContextMenu
99
+ O as LinkContextMenu
54
100
  };
55
101
  //# sourceMappingURL=LinkContextMenu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkContextMenu.js","sources":["../../../../../../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.tsx"],"sourcesContent":["import { forwardRef, useImperativeHandle, useLayoutEffect, useState } from 'react';\n\nimport styles from './LinkContextMenu.module.css';\n\nimport { ensureHttps } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Icon } from 'components/Icon';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { Button } from 'components/Buttons';\n\ninterface LinkContextMenuProps {\n url: string;\n onSave: (url: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport interface linkFormMethods {\n clearForm: () => void;\n}\n\nexport const LinkContextMenu = forwardRef(({ url, onSave, onDelete, onClose }: LinkContextMenuProps, ref) => {\n const t = useTranslation();\n const [link, setLink] = useState(url);\n const [editable, setEditable] = useState(false);\n\n const reset = () => {\n setLink(url);\n setEditable(false);\n };\n\n const handleSave = () => {\n onSave(link);\n reset();\n };\n\n const handleDelete = () => {\n onDelete();\n setLink('');\n reset();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n const handlePreview = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: reset,\n }));\n\n useLayoutEffect(() => {\n setLink(url);\n }, [url]);\n\n return (\n <>\n <div className={styles['link-context-menu__wrapper']}>\n <input\n type=\"text\"\n value={link}\n onChange={(event) => setLink(event.target.value)}\n className={styles['link-context-menu__input']}\n disabled={!editable}\n />\n {!editable && (\n <button type=\"button\" className={styles['link-context-menu__button']} onClick={() => setEditable(true)}>\n <Icon name=\"Pencil\" size={20} />\n </button>\n )}\n <button type=\"button\" className={styles['link-context-menu__button']} onClick={handlePreview}>\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n <button type=\"button\" className={styles['link-context-menu__button']} onClick={handleDelete}>\n <Icon name=\"LinkSlash\" size={20} />\n </button>\n </div>\n {editable && (\n <div className={styles['link-context-menu__actions']}>\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 )}\n </>\n );\n});\n"],"names":["LinkContextMenu","forwardRef","url","onSave","onDelete","onClose","ref","t","useTranslation","link","setLink","useState","editable","setEditable","reset","handleSave","handleDelete","handleClose","handlePreview","ensureHttps","useImperativeHandle","useLayoutEffect","jsxs","Fragment","styles","jsx","event","Icon","Button"],"mappings":";;;;;;;;;;;;;GAoBaA,IAAkBC,EAAW,CAAC,EAAE,KAAAC,GAAK,QAAAC,GAAQ,UAAAC,GAAU,SAAAC,EAAQ,GAAyBC,MAAQ;AAC3G,QAAMC,IAAIC,KACJ,CAACC,GAAMC,CAAO,IAAIC,EAAST,CAAG,GAC9B,CAACU,GAAUC,CAAW,IAAIF,EAAS,EAAK,GAExCG,IAAQ,MAAM;AAClB,IAAAJ,EAAQR,CAAG,GACXW,EAAY,EAAK;AAAA,EAAA,GAGbE,IAAa,MAAM;AACvB,IAAAZ,EAAOM,CAAI,GACLK;EAAA,GAGFE,IAAe,MAAM;AAChB,IAAAZ,KACTM,EAAQ,EAAE,GACJI;EAAA,GAGFG,IAAc,MAAM;AAClB,IAAAH,KACET;EAAA,GAGJa,IAAgB,MAAM;AAC1B,WAAO,KAAKC,EAAYjB,CAAG,GAAG,QAAQ;AAAA,EAAA;AAGxC,SAAAkB,EAAoBd,GAAK,OAAO;AAAA,IAC9B,WAAWQ;AAAA,EACX,EAAA,GAEFO,EAAgB,MAAM;AACpB,IAAAX,EAAQR,CAAG;AAAA,EAAA,GACV,CAACA,CAAG,CAAC,GAIJ,gBAAAoB,EAAAC,GAAA,EAAA,UAAA;AAAA,IAAA,gBAAAD,EAAC,OAAI,EAAA,WAAWE,EAAO,4BAA4B,GACjD,UAAA;AAAA,MAAA,gBAAAC;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAOhB;AAAA,UACP,UAAU,CAACiB,MAAUhB,EAAQgB,EAAM,OAAO,KAAK;AAAA,UAC/C,WAAWF,EAAO,0BAA0B;AAAA,UAC5C,UAAU,CAACZ;AAAA,QAAA;AAAA,MACb;AAAA,MACC,CAACA,KACC,gBAAAa,EAAA,UAAA,EAAO,MAAK,UAAS,WAAWD,EAAO,2BAA2B,GAAG,SAAS,MAAMX,EAAY,EAAI,GACnG,UAAA,gBAAAY,EAACE,KAAK,MAAK,UAAS,MAAM,GAAI,CAAA,GAChC;AAAA,wBAED,UAAO,EAAA,MAAK,UAAS,WAAWH,EAAO,2BAA2B,GAAG,SAASN,GAC7E,4BAACS,GAAK,EAAA,MAAK,yBAAwB,MAAM,GAAI,CAAA,GAC/C;AAAA,wBACC,UAAO,EAAA,MAAK,UAAS,WAAWH,EAAO,2BAA2B,GAAG,SAASR,GAC7E,4BAACW,GAAK,EAAA,MAAK,aAAY,MAAM,GAAI,CAAA,GACnC;AAAA,IAAA,GACF;AAAA,IACCf,KACE,gBAAAU,EAAA,OAAA,EAAI,WAAWE,EAAO,4BAA4B,GACjD,UAAA;AAAA,MAAA,gBAAAC,EAACG,GAAO,EAAA,SAAS,aAAa,SAASX,GAAa,cAAYV,EAAE,OAAO,QAAQ,MAAK,UACnF,UAAAA,EAAE,OAAO,QACZ;AAAA,MACC,gBAAAkB,EAAAG,GAAA,EAAO,SAAS,WAAW,SAASb,GAAY,cAAYR,EAAE,KAAK,OAAO,cAAc,MAAK,UAC3F,UAAAA,EAAE,MAAM,SACX;AAAA,IAAA,GACF;AAAA,EAEJ,EAAA,CAAA;AAEJ,CAAC;"}
1
+ {"version":3,"file":"LinkContextMenu.js","sources":["../../../../../../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.tsx"],"sourcesContent":["import { forwardRef, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';\n\nimport styles from './LinkContextMenu.module.css';\n\nimport { ensureHttps } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Icon } from 'components/Icon';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { Button } from 'components/Buttons';\n\ninterface LinkContextMenuProps {\n url: string;\n onSave: (url: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport interface linkFormMethods {\n clearForm: () => void;\n}\n\nexport const LinkContextMenu = forwardRef(({ url, onSave, onDelete, onClose }: LinkContextMenuProps, ref) => {\n const t = useTranslation();\n const [link, setLink] = useState(url);\n const [editable, setEditable] = useState(false);\n const linkRef = useRef<HTMLInputElement>(null);\n\n const reset = () => {\n setLink(url);\n setEditable(false);\n linkRef.current?.blur();\n };\n\n const handleSave = () => {\n onSave(link);\n reset();\n };\n\n const handleDelete = () => {\n onDelete();\n setLink('');\n reset();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n const handlePreview = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: reset,\n }));\n\n useLayoutEffect(() => {\n setLink(url);\n window.addEventListener('keydown', (event) => {\n if (event.ctrlKey && event.shiftKey && event.key === 'L') {\n setEditable(true);\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit1') {\n handlePreview();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n if (event.ctrlKey && event.shiftKey && event.key === 'Q') {\n handleDelete();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n return (\n <>\n <div className={styles['link-context-menu__wrapper']}>\n <input\n type=\"text\"\n value={link}\n onChange={(event) => setLink(event.target.value)}\n className={styles['link-context-menu__input']}\n disabled={!editable}\n ref={linkRef}\n />\n {!editable && (\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={() => setEditable(true)}\n title={t.links.linkEdittip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.editlink}\n >\n <Icon name=\"Pencil\" size={20} />\n </button>\n )}\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handlePreview}\n title={t.links.linkTesttip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.testlink}\n >\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handleDelete}\n title={t.links.linkDeletetip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.deletelink}\n >\n <Icon name=\"LinkSlash\" size={20} />\n </button>\n </div>\n {editable && (\n <div className={styles['link-context-menu__actions']}>\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 )}\n </>\n );\n});\n"],"names":["LinkContextMenu","forwardRef","url","onSave","onDelete","onClose","ref","t","useTranslation","link","setLink","useState","editable","setEditable","linkRef","useRef","reset","_a","handleSave","handleDelete","handleClose","handlePreview","ensureHttps","useImperativeHandle","useLayoutEffect","event","jsxs","Fragment","styles","jsx","Icon","Button"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { jsx as h, jsxs as Y } from "react/jsx-runtime";
1
+ import { jsx as k, jsxs as Y } from "react/jsx-runtime";
2
2
  import { u as q } from "../../../../LexicalComposerContext.prod-Dyvim1tK.js";
3
3
  import { c as G } from "../../../../clsx-OuTLNxxd.js";
4
- import { g as U, m as J, U as Q } from "../../../../LexicalLink.prod-BvJo1BD4.js";
5
- import { useRef as a, useState as X, useEffect as d } from "react";
6
- import { B as Z, M as f, a4 as $, a2 as tt, v as b, a3 as et, F as rt, c as ot } from "../../../../Lexical.prod-RJB8n7sC.js";
4
+ import { g as z, m as J, U as Q } from "../../../../LexicalLink.prod-BvJo1BD4.js";
5
+ import { useRef as a, useState as X, useEffect as m } from "react";
6
+ import { B as Z, M as f, a4 as $, a2 as tt, v as w, a3 as et, F as ot, c as rt } from "../../../../Lexical.prod-RJB8n7sC.js";
7
7
  import { A as nt } from "../../../../TablePlugin-BVkwu1Gt.js";
8
- import { e as it } from "../../../../helpers-BKqr9jXh.js";
9
- import { LinkContextMenu as st } from "./LinkContextMenu/LinkContextMenu.js";
8
+ import { e as st } from "../../../../helpers-BKqr9jXh.js";
9
+ import { LinkContextMenu as it } from "./LinkContextMenu/LinkContextMenu.js";
10
10
  import { useFlyout as ct } from "../../hooks/useFlyout.js";
11
11
  import { Icon as lt } from "../../../Icon/Icon.js";
12
12
  import "../../../Buttons/Button.js";
@@ -21,8 +21,8 @@ import "../../../IconButton/IconButton.js";
21
21
  import "../../../Input/Input.js";
22
22
  import "../../../InputField/InputField.js";
23
23
  import "react-router-dom";
24
- import { setScrollableContainers as A, removeScrollableContainers as at } from "../../helpers.js";
25
- import { s as y } from "../../../../RteEditor.module-oFMKEW6f.js";
24
+ import { setScrollableContainers as M, removeScrollableContainers as at } from "../../helpers.js";
25
+ import { s as h } from "../../../../RteEditor.module-oFMKEW6f.js";
26
26
  import { useTranslation as ut } from "../../hooks/useTranslation.js";
27
27
  import "../../Providers/LanguageProvider.js";
28
28
  import "../../../../index-DPQ9bZx5.js";
@@ -30,18 +30,18 @@ import "../../../SelectListbox/SelectListbox.js";
30
30
  import "../../../SelectListbox/SelectProvider.js";
31
31
  import "../../../Sortable/components/SortableItem.js";
32
32
  import "../../../../SortableProvider-BUsvniX7.js";
33
- const mt = 200, B = (p) => {
33
+ const mt = 200, O = (p) => {
34
34
  let n = p;
35
35
  for (; n; ) {
36
- if (U(n))
36
+ if (z(n))
37
37
  return n;
38
38
  n = n.getParent();
39
39
  }
40
40
  return null;
41
- }, K = (p) => {
41
+ }, U = (p) => {
42
42
  let n = p;
43
43
  for (; n; ) {
44
- if (U(n))
44
+ if (z(n))
45
45
  return {
46
46
  active: !0,
47
47
  url: n.getURL(),
@@ -51,138 +51,137 @@ const mt = 200, B = (p) => {
51
51
  }
52
52
  return !1;
53
53
  }, jt = ({ parentScrollPosition: p }) => {
54
- const n = ut(), [c] = q(), { flyout: M, showFlyout: _, hideFlyout: g, isVisible: u } = ct(), m = a(), N = a(!1), C = a(""), k = a(""), [v, O] = X({ active: !1, url: "", linktext: "" }), P = a(u), x = a(null), R = a(null), T = a(), w = () => {
54
+ const n = ut(), [c] = q(), { flyout: I, showFlyout: _, hideFlyout: C, isVisible: u } = ct(), d = a(), N = a(!1), y = a(""), g = a(""), [L, A] = X({ active: !1, url: "", linktext: "" }), P = a(u), x = a(null), S = a(null), T = a(), v = () => {
55
55
  c.update(() => {
56
- const r = f();
57
- x.current = r;
56
+ const e = f();
57
+ x.current = e;
58
58
  });
59
- }, z = () => {
59
+ }, R = () => {
60
60
  c.update(() => {
61
- x.current && rt(x.current);
61
+ x.current && ot(x.current);
62
62
  });
63
- }, I = (r, t) => {
63
+ }, H = (e, t) => {
64
64
  _({
65
65
  position: t,
66
- children: /* @__PURE__ */ h(
67
- st,
66
+ children: /* @__PURE__ */ k(
67
+ it,
68
68
  {
69
- url: r,
70
- onSave: (e) => S(e, ""),
69
+ url: e,
70
+ onSave: (o) => B(o, ""),
71
71
  onDelete: () => V(),
72
- onClose: g,
72
+ onClose: D,
73
73
  ref: T
74
74
  }
75
75
  )
76
76
  });
77
- }, H = () => {
78
- var r;
79
- (r = T.current) == null || r.clearForm(), g();
80
- }, E = () => {
77
+ }, D = () => {
78
+ var e;
79
+ (e = T.current) == null || e.clearForm(), C(), R();
80
+ }, F = () => {
81
81
  var t;
82
- const r = (t = R.current) == null ? void 0 : t.getBoundingClientRect();
83
- !N.current && r && (w(), _({ position: { top: r.bottom, left: r.left }, ...j }), setTimeout(() => {
84
- var e;
85
- return (e = m.current) == null ? void 0 : e.setDefaults("", k.current);
82
+ const e = (t = S.current) == null ? void 0 : t.getBoundingClientRect();
83
+ !N.current && e && (v(), _({ position: { top: e.bottom, left: e.left }, ...j }), setTimeout(() => {
84
+ var o;
85
+ return (o = d.current) == null ? void 0 : o.setDefaults("", g.current);
86
86
  }, 0));
87
- }, L = () => {
88
- g(), z();
89
- }, S = (r, t) => {
87
+ }, b = () => {
88
+ C(), R();
89
+ }, B = (e, t) => {
90
90
  c.update(() => {
91
- const e = f();
92
- if (b(e)) {
93
- const i = e.anchor.getNode(), s = B(i);
91
+ const o = f();
92
+ if (w(o)) {
93
+ const s = o.anchor.getNode(), i = O(s);
94
94
  if (t && t !== "") {
95
- if (s) {
96
- const l = ot(t);
97
- s.replace(l), l.select();
95
+ if (i) {
96
+ const l = rt(t);
97
+ i.replace(l), l.select();
98
98
  }
99
- if (t !== C.current && C.current === "") {
100
- const { anchor: l, focus: F } = e;
101
- e.insertText(t), l.offset -= t.length, F.offset = l.offset + t.length;
99
+ if (t !== y.current && y.current === "") {
100
+ const { anchor: l, focus: E } = o;
101
+ o.insertText(t), l.offset -= t.length, E.offset = l.offset + t.length;
102
102
  }
103
103
  }
104
- J(it(r), { target: "_blank" });
104
+ J(st(e), { target: "_blank" });
105
105
  }
106
- L();
106
+ b();
107
107
  });
108
108
  }, V = () => {
109
- c.dispatchCommand(Q, null), H();
109
+ c.dispatchCommand(Q, null), D();
110
110
  }, j = {
111
- children: /* @__PURE__ */ h(
111
+ children: /* @__PURE__ */ k(
112
112
  nt,
113
113
  {
114
- isLink: v,
115
- onCloseHandler: L,
116
- onSaveHandler: (r, t) => S(r, t),
117
- ref: m
114
+ isLink: L,
115
+ onCloseHandler: b,
116
+ onSaveHandler: (e, t) => B(e, t),
117
+ ref: d
118
118
  }
119
119
  )
120
120
  };
121
- return d(() => {
122
- var r, t;
123
- u ? (N.current = !0, (t = m.current) == null || t.focusFirstField()) : ((r = m.current) == null || r.clearForm(), C.current = k.current = "", setTimeout(() => N.current = !1, mt));
124
- }, [m, u]), d(() => {
125
- const r = (o) => {
126
- if (b(o) && o.isCollapsed()) {
127
- w();
128
- const i = K(o.anchor.getNode());
129
- if (i) {
130
- const s = c.getElementByKey(o.anchor.getNode().getKey()), l = s ? { top: s.getBoundingClientRect().bottom, left: s.getBoundingClientRect().left } : { top: 0, left: 0 };
131
- return I(i.url, l), !0;
121
+ return m(() => {
122
+ var e, t;
123
+ u ? (N.current = !0, (t = d.current) == null || t.focusFirstField()) : ((e = d.current) == null || e.clearForm(), y.current = g.current = "", setTimeout(() => N.current = !1, mt));
124
+ }, [d, u]), m(() => {
125
+ const e = (r) => {
126
+ if (w(r) && r.isCollapsed()) {
127
+ const s = U(r.anchor.getNode());
128
+ if (s) {
129
+ const i = c.getElementByKey(r.anchor.getNode().getKey()), l = i ? { top: i.getBoundingClientRect().bottom, left: i.getBoundingClientRect().left } : { top: 0, left: 0 };
130
+ return H(s.url, l), !0;
132
131
  }
133
132
  }
134
133
  return !1;
135
134
  }, t = c.registerCommand(
136
135
  Z,
137
136
  () => {
138
- const o = f();
139
- return k.current = (o == null ? void 0 : o.getTextContent()) ?? "", r(o), !1;
137
+ const r = f();
138
+ return g.current = (r == null ? void 0 : r.getTextContent()) ?? "", e(r), !1;
140
139
  },
141
140
  0
142
- ), e = c.registerCommand(
141
+ ), o = c.registerCommand(
143
142
  $,
144
- (o) => {
145
- const i = f();
146
- return o.preventDefault(), o.stopPropagation(), o.stopImmediatePropagation(), r(i), !1;
143
+ (r) => {
144
+ const s = f();
145
+ return v(), r.preventDefault(), r.stopPropagation(), r.stopImmediatePropagation(), e(s), !1;
147
146
  },
148
147
  0
149
148
  );
150
149
  return () => {
151
- e(), t();
150
+ o(), t();
152
151
  };
153
- }, [c]), d(() => {
154
- const r = c.registerCommand(
152
+ }, [c]), m(() => {
153
+ const e = c.registerCommand(
155
154
  tt,
156
- (e) => {
157
- if (e.ctrlKey && e.shiftKey && e.key === "U") {
158
- const o = f();
159
- if (w(), !b(o))
155
+ (o) => {
156
+ if (o.ctrlKey && o.shiftKey && o.key === "U") {
157
+ const r = f();
158
+ if (v(), !w(r))
160
159
  return !1;
161
- const i = K(o.anchor.getNode()), s = (F = "", W = "") => {
162
- E(), setTimeout(() => {
163
- var D;
164
- return (D = m.current) == null ? void 0 : D.setDefaults(F, W);
160
+ const s = U(r.anchor.getNode()), i = (E = "", W = "") => {
161
+ F(), setTimeout(() => {
162
+ var K;
163
+ return (K = d.current) == null ? void 0 : K.setDefaults(E, W);
165
164
  }, 0);
166
165
  };
167
- if (i)
168
- return e.preventDefault(), e.stopPropagation(), e.stopImmediatePropagation(), C.current = i.linktext, s(i.url, i.linktext), !0;
169
- const l = o.getTextContent();
170
- return l !== "" ? (k.current = l, s("", k.current), !0) : (E(), !0);
166
+ if (s)
167
+ return o.preventDefault(), o.stopPropagation(), o.stopImmediatePropagation(), y.current = s.linktext, i(s.url, s.linktext), !0;
168
+ const l = r.getTextContent();
169
+ return l !== "" ? (g.current = l, i("", g.current), !0) : (F(), !0);
171
170
  }
172
171
  return !1;
173
172
  },
174
173
  et
175
- ), t = c.registerUpdateListener(({ editorState: e }) => {
176
- O(
177
- e.read(() => {
178
- const o = f();
179
- if (w(), b(o)) {
180
- const i = o.anchor.getNode(), s = B(i);
181
- if (s)
174
+ ), t = c.registerUpdateListener(({ editorState: o }) => {
175
+ A(
176
+ o.read(() => {
177
+ const r = f();
178
+ if (v(), w(r)) {
179
+ const s = r.anchor.getNode(), i = O(s);
180
+ if (i)
182
181
  return {
183
182
  active: !0,
184
- url: s.getURL(),
185
- linktext: s.getTextContent()
183
+ url: i.getURL(),
184
+ linktext: i.getTextContent()
186
185
  };
187
186
  }
188
187
  return {
@@ -194,45 +193,47 @@ const mt = 200, B = (p) => {
194
193
  );
195
194
  });
196
195
  return () => {
197
- r(), t();
196
+ e(), t();
198
197
  };
199
- }, [c]), d(() => {
200
- var r;
201
- P.current = u, u || (r = T.current) == null || r.clearForm();
202
- }, [u]), d(() => {
203
- u && L();
204
- }, [p]), d(() => {
205
- const r = (e) => (A(t), e.key === "Escape" && P.current && (e.preventDefault(), e.stopPropagation(), L()), (e.key === "ArrowLeft" || e.key === "ArrowRight" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "Enter") && !v.active && g(), !0);
206
- window.addEventListener("keydown", r, { capture: !0 });
198
+ }, [c]), m(() => {
199
+ var e;
200
+ P.current = u, u || (e = T.current) == null || e.clearForm();
201
+ }, [u]), m(() => {
202
+ u && b();
203
+ }, [p]), m(() => {
204
+ L.active || C();
205
+ }, [L]), m(() => {
206
+ const e = (o) => (M(t), o.key === "Escape" && P.current && (o.preventDefault(), o.stopPropagation(), b()), !0);
207
+ window.addEventListener("keydown", e, { capture: !0 });
207
208
  const t = () => {
208
- g();
209
+ C();
209
210
  };
210
- return A(t), window.addEventListener("scroll", t), window.addEventListener("resize", t), () => {
211
- window.removeEventListener("keydown", r), window.removeEventListener("scroll", t), window.removeEventListener("resize", t), at(t);
211
+ return M(t), window.addEventListener("scroll", t), window.addEventListener("resize", t), () => {
212
+ window.removeEventListener("keydown", e), window.removeEventListener("scroll", t), window.removeEventListener("resize", t), at(t);
212
213
  };
213
- }, []), /* @__PURE__ */ h("div", { className: y["editor__toolbar-button-group"], children: /* @__PURE__ */ Y("div", { className: y["editor__toolbar-button-flyoutwrapper"], children: [
214
- /* @__PURE__ */ h(
214
+ }, []), /* @__PURE__ */ k("div", { className: h["editor__toolbar-button-group"], children: /* @__PURE__ */ Y("div", { className: h["editor__toolbar-button-flyoutwrapper"], children: [
215
+ /* @__PURE__ */ k(
215
216
  "button",
216
217
  {
217
- onClick: E,
218
+ onClick: F,
218
219
  title: n.links.linkTooltip,
219
220
  className: G(
220
- y["editor__toolbar-button"],
221
- y["editor__toolbar-button--link"],
222
- v.active && y["editor__toolbar-button--active"]
221
+ h["editor__toolbar-button"],
222
+ h["editor__toolbar-button--link"],
223
+ L.active && h["editor__toolbar-button--active"]
223
224
  ),
224
225
  "aria-label": n.aria.labels.link,
225
226
  "aria-keyshortcuts": n.aria.keyshortcuts.link,
226
227
  type: "button",
227
- ref: R,
228
- children: /* @__PURE__ */ h(lt, { name: "Link", size: 20 })
228
+ ref: S,
229
+ children: /* @__PURE__ */ k(lt, { name: "Link", size: 20 })
229
230
  }
230
231
  ),
231
- M
232
+ I
232
233
  ] }) });
233
234
  };
234
235
  export {
235
236
  jt as LinkPlugin,
236
- K as getLinkNodeTag
237
+ U as getLinkNodeTag
237
238
  };
238
239
  //# sourceMappingURL=LinkPlugin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkPlugin.js","sources":["../../../../../src/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport { $isLinkNode, $toggleLink, TOGGLE_LINK_COMMAND } from '@lexical/link';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n $createTextNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_EDITOR,\n KEY_DOWN_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical';\n\nimport type { LinkNode } from '@lexical/link';\nimport type { ElementNode, TextNode, BaseSelection } from 'lexical';\nimport type { addLinkFormMethods } from './AddLinkForm/AddLinkFrom';\nimport type { linkFormMethods } from './LinkContextMenu/LinkContextMenu';\n\nimport { AddLinkForm } from './AddLinkForm/AddLinkFrom';\nimport { ensureHttps } from './helpers';\nimport { LinkContextMenu } from './LinkContextMenu/LinkContextMenu';\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';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\nconst PREVENT_OPEN_DELAY = 200;\n\nexport interface LinkType {\n active: boolean;\n url: string;\n linktext: string;\n}\n\ntype Position = {\n top: number;\n left: number;\n};\n\ninterface LinkPluginProps {\n parentScrollPosition: number;\n}\n\nconst getLinkNode = (node: ElementNode | null): ElementNode | null => {\n let currentNode: TextNode | ElementNode | null = node;\n\n while (currentNode) {\n if ($isLinkNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.getParent();\n }\n\n return null;\n};\n\nexport const getLinkNodeTag = (anchorNode: ElementNode | TextNode): boolean | LinkType => {\n let currentNode: TextNode | ElementNode | null = anchorNode;\n\n while (currentNode) {\n if ($isLinkNode(currentNode)) {\n return {\n active: true,\n url: currentNode.getURL(),\n linktext: currentNode.getTextContent(),\n };\n }\n currentNode = currentNode.getParent();\n }\n\n return false;\n};\n\nexport const LinkPlugin = ({ parentScrollPosition }: LinkPluginProps) => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addLinkForm = useRef<addLinkFormMethods>();\n const preventOpen = useRef(false);\n const previousLinkText = useRef('');\n const selectedText = useRef('');\n const [isLink, setIsLink] = useState<LinkType>({ active: false, url: '', linktext: '' });\n const isVisibleRef = useRef(isVisible);\n const storedSelection = useRef<BaseSelection | null>(null);\n const linkButtonRef = useRef<HTMLButtonElement>(null);\n const editLinkForm = useRef<linkFormMethods>();\n\n const storeCursorPosition = () => {\n editor.update(() => {\n const selection = $getSelection();\n storedSelection.current = selection;\n });\n };\n\n const rePositionCursor = () => {\n editor.update(() => {\n if (storedSelection.current) {\n $setSelection(storedSelection.current);\n }\n });\n };\n\n const openContextMenu = (url: string, position: Position) => {\n showFlyout({\n position,\n children: (\n <LinkContextMenu\n url={url}\n onSave={(url) => insertLink(url, '')}\n onDelete={() => removeLink()}\n onClose={hideFlyout}\n ref={editLinkForm}\n />\n ),\n });\n };\n\n const closeContextMenu = () => {\n editLinkForm.current?.clearForm();\n hideFlyout();\n };\n\n const openFlyout = () => {\n const rect = linkButtonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n storeCursorPosition();\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n setTimeout(() => addLinkForm.current?.setDefaults('', selectedText.current), 0);\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n rePositionCursor();\n };\n\n const insertLink = (url: string, linktext: string) => {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const node = anchor.getNode() as ElementNode;\n const linkNode = getLinkNode(node);\n if (linktext && linktext !== '') {\n if (linkNode) {\n const newTextNode = $createTextNode(linktext);\n linkNode.replace(newTextNode);\n newTextNode.select();\n }\n if (linktext !== previousLinkText.current && previousLinkText.current === '') {\n const { anchor, focus } = selection;\n selection.insertText(linktext);\n anchor.offset -= linktext.length;\n focus.offset = anchor.offset + linktext.length;\n }\n }\n $toggleLink(ensureHttps(url), { target: '_blank' });\n }\n\n closeFlyout();\n });\n };\n\n const removeLink = (): void => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n closeContextMenu();\n };\n\n const flyoutOptions = {\n children: (\n <AddLinkForm\n isLink={isLink}\n onCloseHandler={closeFlyout}\n onSaveHandler={(url, linktext) => insertLink(url, linktext)}\n ref={addLinkForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addLinkForm.current?.clearForm();\n previousLinkText.current = selectedText.current = '';\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addLinkForm.current?.focusFirstField();\n }\n }, [addLinkForm, isVisible]);\n\n useEffect(() => {\n const handleSelectionClickOrChange = (selection: BaseSelection | null) => {\n if ($isRangeSelection(selection) && selection.isCollapsed()) {\n storeCursorPosition();\n const node = getLinkNodeTag(selection.anchor.getNode()) as LinkType;\n\n if (node) {\n const domNode = editor.getElementByKey(selection.anchor.getNode().getKey());\n const position = domNode\n ? { top: domNode.getBoundingClientRect().bottom, left: domNode.getBoundingClientRect().left }\n : { top: 0, left: 0 };\n openContextMenu(node.url, position);\n return true;\n }\n }\n return false;\n };\n\n const unregisterSelect = editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n const selection = $getSelection();\n selectedText.current = selection?.getTextContent() ?? '';\n handleSelectionClickOrChange(selection);\n return false;\n },\n 0\n );\n\n const unregisterClick = editor.registerCommand(\n CLICK_COMMAND,\n (event) => {\n const selection = $getSelection();\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n handleSelectionClickOrChange(selection);\n return false;\n },\n 0\n );\n\n return () => {\n unregisterClick();\n unregisterSelect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.key === 'U') {\n const selection = $getSelection();\n storeCursorPosition();\n\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n const node = getLinkNodeTag(selection.anchor.getNode()) as LinkType;\n\n const openFlyoutWithDefaults = (url = '', linkText = '') => {\n openFlyout();\n setTimeout(() => addLinkForm.current?.setDefaults(url, linkText), 0);\n };\n\n if (node) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n previousLinkText.current = node.linktext;\n openFlyoutWithDefaults(node.url, node.linktext);\n\n return true;\n }\n\n const selectedTextContent = selection.getTextContent();\n if (selectedTextContent !== '') {\n selectedText.current = selectedTextContent;\n openFlyoutWithDefaults('', selectedText.current);\n\n return true;\n }\n\n openFlyout();\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n setIsLink(\n editorState.read(() => {\n const selection = $getSelection();\n storeCursorPosition();\n\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode() as ElementNode;\n const linkNode = getLinkNode(anchorNode) as LinkNode;\n\n if (linkNode) {\n return {\n active: true,\n url: linkNode.getURL(),\n linktext: linkNode.getTextContent(),\n };\n }\n }\n\n return {\n active: false,\n url: '',\n linktext: '',\n };\n })\n );\n });\n\n return () => {\n removeKeyboardShortcut();\n removeStatusListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n if (!isVisible) editLinkForm.current?.clearForm();\n }, [isVisible]);\n\n useEffect(() => {\n if (isVisible) {\n closeFlyout();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentScrollPosition]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent): boolean => {\n setScrollableContainers(handleResizeScroll);\n\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n\n if (\n (event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'ArrowDown' ||\n event.key === 'ArrowUp' ||\n event.key === 'Enter') &&\n !isLink.active\n ) {\n hideFlyout();\n }\n return true;\n };\n\n window.addEventListener('keydown', removeKeydown, { capture: true });\n\n const handleResizeScroll = () => {\n hideFlyout();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('keydown', removeKeydown);\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['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.links.linkTooltip}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--link`],\n isLink.active && styles['editor__toolbar-button--active']\n )}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.link}\n type=\"button\"\n ref={linkButtonRef}\n >\n <Icon name=\"Link\" size={20} />\n </button>\n {flyout}\n </div>\n </div>\n );\n};\n"],"names":["PREVENT_OPEN_DELAY","getLinkNode","node","currentNode","$isLinkNode","getLinkNodeTag","anchorNode","LinkPlugin","parentScrollPosition","t","useTranslation","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addLinkForm","useRef","preventOpen","previousLinkText","selectedText","isLink","setIsLink","useState","isVisibleRef","storedSelection","linkButtonRef","editLinkForm","storeCursorPosition","selection","$getSelection","rePositionCursor","$setSelection","openContextMenu","url","position","jsx","LinkContextMenu","insertLink","removeLink","closeContextMenu","_a","openFlyout","rect","flyoutOptions","closeFlyout","linktext","$isRangeSelection","linkNode","newTextNode","$createTextNode","anchor","focus","$toggleLink","ensureHttps","TOGGLE_LINK_COMMAND","AddLinkForm","useEffect","_b","handleSelectionClickOrChange","domNode","unregisterSelect","SELECTION_CHANGE_COMMAND","unregisterClick","CLICK_COMMAND","event","removeKeyboardShortcut","KEY_DOWN_COMMAND","openFlyoutWithDefaults","linkText","selectedTextContent","COMMAND_PRIORITY_EDITOR","removeStatusListener","editorState","removeKeydown","setScrollableContainers","handleResizeScroll","removeScrollableContainers","styles","jsxs","clsx","Icon"],"mappings":"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"}
1
+ {"version":3,"file":"LinkPlugin.js","sources":["../../../../../src/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.tsx"],"sourcesContent":["import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport clsx from 'clsx';\nimport { $isLinkNode, $toggleLink, TOGGLE_LINK_COMMAND } from '@lexical/link';\nimport { useEffect, useRef, useState } from 'react';\nimport {\n $createTextNode,\n $getSelection,\n $isRangeSelection,\n $setSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_EDITOR,\n KEY_DOWN_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from 'lexical';\n\nimport type { LinkNode } from '@lexical/link';\nimport type { ElementNode, TextNode, BaseSelection } from 'lexical';\nimport type { addLinkFormMethods } from './AddLinkForm/AddLinkFrom';\nimport type { linkFormMethods } from './LinkContextMenu/LinkContextMenu';\n\nimport { AddLinkForm } from './AddLinkForm/AddLinkFrom';\nimport { ensureHttps } from './helpers';\nimport { LinkContextMenu } from './LinkContextMenu/LinkContextMenu';\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';\nimport { removeScrollableContainers, setScrollableContainers } from 'components/RteEditor/helpers';\n\nconst PREVENT_OPEN_DELAY = 200;\n\nexport interface LinkType {\n active: boolean;\n url: string;\n linktext: string;\n}\n\ntype Position = {\n top: number;\n left: number;\n};\n\ninterface LinkPluginProps {\n parentScrollPosition: number;\n}\n\nconst getLinkNode = (node: ElementNode | null): ElementNode | null => {\n let currentNode: TextNode | ElementNode | null = node;\n\n while (currentNode) {\n if ($isLinkNode(currentNode)) {\n return currentNode;\n }\n currentNode = currentNode.getParent();\n }\n\n return null;\n};\n\nexport const getLinkNodeTag = (anchorNode: ElementNode | TextNode): boolean | LinkType => {\n let currentNode: TextNode | ElementNode | null = anchorNode;\n\n while (currentNode) {\n if ($isLinkNode(currentNode)) {\n return {\n active: true,\n url: currentNode.getURL(),\n linktext: currentNode.getTextContent(),\n };\n }\n currentNode = currentNode.getParent();\n }\n\n return false;\n};\n\nexport const LinkPlugin = ({ parentScrollPosition }: LinkPluginProps) => {\n const t = useTranslation();\n const [editor] = useLexicalComposerContext();\n const { flyout, showFlyout, hideFlyout, isVisible } = useFlyout();\n const addLinkForm = useRef<addLinkFormMethods>();\n const preventOpen = useRef(false);\n const previousLinkText = useRef('');\n const selectedText = useRef('');\n const [isLink, setIsLink] = useState<LinkType>({ active: false, url: '', linktext: '' });\n const isVisibleRef = useRef(isVisible);\n const storedSelection = useRef<BaseSelection | null>(null);\n const linkButtonRef = useRef<HTMLButtonElement>(null);\n const editLinkForm = useRef<linkFormMethods>();\n\n const storeCursorPosition = () => {\n editor.update(() => {\n const selection = $getSelection();\n storedSelection.current = selection;\n });\n };\n\n const rePositionCursor = () => {\n editor.update(() => {\n if (storedSelection.current) {\n $setSelection(storedSelection.current);\n }\n });\n };\n\n const openContextMenu = (url: string, position: Position) => {\n showFlyout({\n position,\n children: (\n <LinkContextMenu\n url={url}\n onSave={(url) => insertLink(url, '')}\n onDelete={() => removeLink()}\n onClose={closeContextMenu}\n ref={editLinkForm}\n />\n ),\n });\n };\n\n const closeContextMenu = () => {\n editLinkForm.current?.clearForm();\n hideFlyout();\n rePositionCursor();\n };\n\n const openFlyout = () => {\n const rect = linkButtonRef.current?.getBoundingClientRect();\n if (!preventOpen.current && rect) {\n storeCursorPosition();\n showFlyout({ position: { top: rect.bottom, left: rect.left }, ...flyoutOptions });\n setTimeout(() => addLinkForm.current?.setDefaults('', selectedText.current), 0);\n }\n };\n\n const closeFlyout = () => {\n hideFlyout();\n rePositionCursor();\n };\n\n const insertLink = (url: string, linktext: string) => {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n const anchor = selection.anchor;\n const node = anchor.getNode() as ElementNode;\n const linkNode = getLinkNode(node);\n if (linktext && linktext !== '') {\n if (linkNode) {\n const newTextNode = $createTextNode(linktext);\n linkNode.replace(newTextNode);\n newTextNode.select();\n }\n if (linktext !== previousLinkText.current && previousLinkText.current === '') {\n const { anchor, focus } = selection;\n selection.insertText(linktext);\n anchor.offset -= linktext.length;\n focus.offset = anchor.offset + linktext.length;\n }\n }\n $toggleLink(ensureHttps(url), { target: '_blank' });\n }\n\n closeFlyout();\n });\n };\n\n const removeLink = (): void => {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n closeContextMenu();\n };\n\n const flyoutOptions = {\n children: (\n <AddLinkForm\n isLink={isLink}\n onCloseHandler={closeFlyout}\n onSaveHandler={(url, linktext) => insertLink(url, linktext)}\n ref={addLinkForm}\n />\n ),\n };\n\n useEffect(() => {\n if (!isVisible) {\n addLinkForm.current?.clearForm();\n previousLinkText.current = selectedText.current = '';\n setTimeout(() => (preventOpen.current = false), PREVENT_OPEN_DELAY);\n } else {\n preventOpen.current = true;\n addLinkForm.current?.focusFirstField();\n }\n }, [addLinkForm, isVisible]);\n\n useEffect(() => {\n const handleSelectionClickOrChange = (selection: BaseSelection | null) => {\n if ($isRangeSelection(selection) && selection.isCollapsed()) {\n const node = getLinkNodeTag(selection.anchor.getNode()) as LinkType;\n\n if (node) {\n const domNode = editor.getElementByKey(selection.anchor.getNode().getKey());\n const position = domNode\n ? { top: domNode.getBoundingClientRect().bottom, left: domNode.getBoundingClientRect().left }\n : { top: 0, left: 0 };\n openContextMenu(node.url, position);\n return true;\n }\n }\n return false;\n };\n\n const unregisterSelect = editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n const selection = $getSelection();\n selectedText.current = selection?.getTextContent() ?? '';\n handleSelectionClickOrChange(selection);\n return false;\n },\n 0\n );\n\n const unregisterClick = editor.registerCommand(\n CLICK_COMMAND,\n (event) => {\n const selection = $getSelection();\n storeCursorPosition();\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n handleSelectionClickOrChange(selection);\n return false;\n },\n 0\n );\n\n return () => {\n unregisterClick();\n unregisterSelect();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n const removeKeyboardShortcut = editor.registerCommand(\n KEY_DOWN_COMMAND,\n (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.key === 'U') {\n const selection = $getSelection();\n storeCursorPosition();\n\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n const node = getLinkNodeTag(selection.anchor.getNode()) as LinkType;\n\n const openFlyoutWithDefaults = (url = '', linkText = '') => {\n openFlyout();\n setTimeout(() => addLinkForm.current?.setDefaults(url, linkText), 0);\n };\n\n if (node) {\n event.preventDefault();\n event.stopPropagation();\n event.stopImmediatePropagation();\n\n previousLinkText.current = node.linktext;\n openFlyoutWithDefaults(node.url, node.linktext);\n\n return true;\n }\n\n const selectedTextContent = selection.getTextContent();\n if (selectedTextContent !== '') {\n selectedText.current = selectedTextContent;\n openFlyoutWithDefaults('', selectedText.current);\n\n return true;\n }\n\n openFlyout();\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_EDITOR\n );\n\n const removeStatusListener = editor.registerUpdateListener(({ editorState }) => {\n setIsLink(\n editorState.read(() => {\n const selection = $getSelection();\n storeCursorPosition();\n\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode() as ElementNode;\n const linkNode = getLinkNode(anchorNode) as LinkNode;\n\n if (linkNode) {\n return {\n active: true,\n url: linkNode.getURL(),\n linktext: linkNode.getTextContent(),\n };\n }\n }\n\n return {\n active: false,\n url: '',\n linktext: '',\n };\n })\n );\n });\n\n return () => {\n removeKeyboardShortcut();\n removeStatusListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n useEffect(() => {\n isVisibleRef.current = isVisible;\n if (!isVisible) editLinkForm.current?.clearForm();\n }, [isVisible]);\n\n useEffect(() => {\n if (isVisible) {\n closeFlyout();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [parentScrollPosition]);\n\n useEffect(() => {\n if (!isLink.active) {\n hideFlyout();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLink]);\n\n useEffect(() => {\n const removeKeydown = (event: KeyboardEvent): boolean => {\n setScrollableContainers(handleResizeScroll);\n\n if (event.key === 'Escape' && isVisibleRef.current) {\n event.preventDefault();\n event.stopPropagation();\n closeFlyout();\n }\n return true;\n };\n\n window.addEventListener('keydown', removeKeydown, { capture: true });\n\n const handleResizeScroll = () => {\n hideFlyout();\n };\n\n setScrollableContainers(handleResizeScroll);\n\n window.addEventListener('scroll', handleResizeScroll);\n window.addEventListener('resize', handleResizeScroll);\n\n return () => {\n window.removeEventListener('keydown', removeKeydown);\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['editor__toolbar-button-group']}>\n <div className={styles['editor__toolbar-button-flyoutwrapper']}>\n <button\n onClick={openFlyout}\n title={t.links.linkTooltip}\n className={clsx(\n styles['editor__toolbar-button'],\n styles[`editor__toolbar-button--link`],\n isLink.active && styles['editor__toolbar-button--active']\n )}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.link}\n type=\"button\"\n ref={linkButtonRef}\n >\n <Icon name=\"Link\" size={20} />\n </button>\n {flyout}\n </div>\n </div>\n );\n};\n"],"names":["PREVENT_OPEN_DELAY","getLinkNode","node","currentNode","$isLinkNode","getLinkNodeTag","anchorNode","LinkPlugin","parentScrollPosition","t","useTranslation","editor","useLexicalComposerContext","flyout","showFlyout","hideFlyout","isVisible","useFlyout","addLinkForm","useRef","preventOpen","previousLinkText","selectedText","isLink","setIsLink","useState","isVisibleRef","storedSelection","linkButtonRef","editLinkForm","storeCursorPosition","selection","$getSelection","rePositionCursor","$setSelection","openContextMenu","url","position","jsx","LinkContextMenu","insertLink","removeLink","closeContextMenu","_a","openFlyout","rect","flyoutOptions","closeFlyout","linktext","$isRangeSelection","linkNode","newTextNode","$createTextNode","anchor","focus","$toggleLink","ensureHttps","TOGGLE_LINK_COMMAND","AddLinkForm","useEffect","_b","handleSelectionClickOrChange","domNode","unregisterSelect","SELECTION_CHANGE_COMMAND","unregisterClick","CLICK_COMMAND","event","removeKeyboardShortcut","KEY_DOWN_COMMAND","openFlyoutWithDefaults","linkText","selectedTextContent","COMMAND_PRIORITY_EDITOR","removeStatusListener","editorState","removeKeydown","setScrollableContainers","handleResizeScroll","removeScrollableContainers","styles","jsxs","clsx","Icon"],"mappings":"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"}
@@ -5,7 +5,6 @@ interface FlyoutOptions {
5
5
  left: number;
6
6
  };
7
7
  children?: ReactNode;
8
- exludeNodeOutside?: HTMLElement;
9
8
  }
10
9
  export interface FlyoutHookResult {
11
10
  flyout: ReactNode;
@@ -1,7 +1,7 @@
1
1
  import { jsx as f } from "react/jsx-runtime";
2
2
  import { useRef as c, useState as n } from "react";
3
3
  import { Flyout as p } from "./components/Flyout.js";
4
- import { useOnClickOutside as m } from "../../hooks/useOnClickOuside.js";
4
+ import { useOnClickOutside as m } from "../../hooks/useOnClickOutside.js";
5
5
  const b = () => {
6
6
  const t = c(null), [s, i] = n(!1), [o, e] = n({
7
7
  position: { top: 0, left: 0 },
@@ -1 +1 @@
1
- {"version":3,"file":"useFlyout.js","sources":["../../../../src/components/RteEditor/hooks/useFlyout.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport type { ReactNode } from 'react';\n\nimport { Flyout } from './components/Flyout';\n\nimport { useOnClickOutside } from 'components/hooks/useOnClickOuside';\n\ninterface FlyoutOptions {\n position: { top: number; left: number };\n children?: ReactNode;\n exludeNodeOutside?: HTMLElement;\n}\n\nexport interface FlyoutHookResult {\n flyout: ReactNode;\n showFlyout: (options: FlyoutOptions) => void;\n hideFlyout: () => void;\n isVisible: boolean;\n}\n\nexport const useFlyout = (): FlyoutHookResult => {\n const flyoutRef = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [options, setOptions] = useState<FlyoutOptions>({\n position: { top: 0, left: 0 },\n children: null,\n });\n\n const showFlyout = (customOptions: FlyoutOptions): void => {\n setVisible(true);\n setOptions({ ...options, ...customOptions });\n };\n\n const hideFlyout = (): void => {\n setVisible(false);\n setOptions({ ...options });\n };\n\n useOnClickOutside(flyoutRef, hideFlyout);\n\n const flyout = (\n <Flyout visible={visible} position={options.position} ref={flyoutRef}>\n {options.children}\n </Flyout>\n );\n\n return {\n flyout,\n showFlyout,\n hideFlyout,\n isVisible: visible,\n };\n};\n"],"names":["useFlyout","flyoutRef","useRef","visible","setVisible","useState","options","setOptions","showFlyout","customOptions","hideFlyout","useOnClickOutside","jsx","Flyout"],"mappings":";;;;AAqBO,MAAMA,IAAY,MAAwB;AACzC,QAAAC,IAAYC,EAAuB,IAAI,GACvC,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAASC,CAAU,IAAIF,EAAwB;AAAA,IACpD,UAAU,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,IAC5B,UAAU;AAAA,EAAA,CACX,GAEKG,IAAa,CAACC,MAAuC;AACzD,IAAAL,EAAW,EAAI,GACfG,EAAW,EAAE,GAAGD,GAAS,GAAGG,EAAe,CAAA;AAAA,EAAA,GAGvCC,IAAa,MAAY;AAC7B,IAAAN,EAAW,EAAK,GACLG,EAAA,EAAE,GAAGD,EAAA,CAAS;AAAA,EAAA;AAG3B,SAAAK,EAAkBV,GAAWS,CAAU,GAQhC;AAAA,IACL,QANC,gBAAAE,EAAAC,GAAA,EAAO,SAAAV,GAAkB,UAAUG,EAAQ,UAAU,KAAKL,GACxD,UAAAK,EAAQ,SACX,CAAA;AAAA,IAKA,YAAAE;AAAA,IACA,YAAAE;AAAA,IACA,WAAWP;AAAA,EAAA;AAEf;"}
1
+ {"version":3,"file":"useFlyout.js","sources":["../../../../src/components/RteEditor/hooks/useFlyout.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport type { ReactNode } from 'react';\n\nimport { Flyout } from './components/Flyout';\n\nimport { useOnClickOutside } from 'components/hooks/useOnClickOutside';\n\ninterface FlyoutOptions {\n position: { top: number; left: number };\n children?: ReactNode;\n}\n\nexport interface FlyoutHookResult {\n flyout: ReactNode;\n showFlyout: (options: FlyoutOptions) => void;\n hideFlyout: () => void;\n isVisible: boolean;\n}\n\nexport const useFlyout = (): FlyoutHookResult => {\n const flyoutRef = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [options, setOptions] = useState<FlyoutOptions>({\n position: { top: 0, left: 0 },\n children: null,\n });\n\n const showFlyout = (customOptions: FlyoutOptions): void => {\n setVisible(true);\n setOptions({ ...options, ...customOptions });\n };\n\n const hideFlyout = (): void => {\n setVisible(false);\n setOptions({ ...options });\n };\n\n useOnClickOutside(flyoutRef, hideFlyout);\n\n const flyout = (\n <Flyout visible={visible} position={options.position} ref={flyoutRef}>\n {options.children}\n </Flyout>\n );\n\n return {\n flyout,\n showFlyout,\n hideFlyout,\n isVisible: visible,\n };\n};\n"],"names":["useFlyout","flyoutRef","useRef","visible","setVisible","useState","options","setOptions","showFlyout","customOptions","hideFlyout","useOnClickOutside","jsx","Flyout"],"mappings":";;;;AAoBO,MAAMA,IAAY,MAAwB;AACzC,QAAAC,IAAYC,EAAuB,IAAI,GACvC,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAASC,CAAU,IAAIF,EAAwB;AAAA,IACpD,UAAU,EAAE,KAAK,GAAG,MAAM,EAAE;AAAA,IAC5B,UAAU;AAAA,EAAA,CACX,GAEKG,IAAa,CAACC,MAAuC;AACzD,IAAAL,EAAW,EAAI,GACfG,EAAW,EAAE,GAAGD,GAAS,GAAGG,EAAe,CAAA;AAAA,EAAA,GAGvCC,IAAa,MAAY;AAC7B,IAAAN,EAAW,EAAK,GACLG,EAAA,EAAE,GAAGD,EAAA,CAAS;AAAA,EAAA;AAG3B,SAAAK,EAAkBV,GAAWS,CAAU,GAQhC;AAAA,IACL,QANC,gBAAAE,EAAAC,GAAA,EAAO,SAAAV,GAAkB,UAAUG,EAAQ,UAAU,KAAKL,GACxD,UAAAK,EAAQ,SACX,CAAA;AAAA,IAKA,YAAAE;AAAA,IACA,YAAAE;AAAA,IACA,WAAWP;AAAA,EAAA;AAEf;"}
@@ -30,6 +30,9 @@ export declare const useTranslation: () => {
30
30
  linkField: string;
31
31
  linkTextfield: string;
32
32
  linkOkButton: string;
33
+ linkEditButton: string;
34
+ linkTestButton: string;
35
+ linkDeleteButton: string;
33
36
  tableRowfield: string;
34
37
  tableColumnfield: string;
35
38
  tableOkButton: string;
@@ -50,6 +53,9 @@ export declare const useTranslation: () => {
50
53
  undo: string;
51
54
  redo: string;
52
55
  link: string;
56
+ editlink: string;
57
+ deletelink: string;
58
+ testlink: string;
53
59
  table: string;
54
60
  };
55
61
  };
@@ -73,6 +79,9 @@ export declare const useTranslation: () => {
73
79
  linkText: string;
74
80
  linkPlaceholder: string;
75
81
  linkTooltip: string;
82
+ linkEdittip: string;
83
+ linkTesttip: string;
84
+ linkDeletetip: string;
76
85
  };
77
86
  } | {
78
87
  common: {
@@ -106,6 +115,9 @@ export declare const useTranslation: () => {
106
115
  linkField: string;
107
116
  linkTextfield: string;
108
117
  linkOkButton: string;
118
+ linkEditButton: string;
119
+ linkTestButton: string;
120
+ linkDeleteButton: string;
109
121
  tableRowfield: string;
110
122
  tableColumnfield: string;
111
123
  tableOkButton: string;
@@ -126,6 +138,9 @@ export declare const useTranslation: () => {
126
138
  undo: string;
127
139
  redo: string;
128
140
  link: string;
141
+ editlink: string;
142
+ deletelink: string;
143
+ testlink: string;
129
144
  table: string;
130
145
  };
131
146
  };
@@ -149,5 +164,8 @@ export declare const useTranslation: () => {
149
164
  linkText: string;
150
165
  linkPlaceholder: string;
151
166
  linkTooltip: string;
167
+ linkEdittip: string;
168
+ linkTesttip: string;
169
+ linkDeletetip: string;
152
170
  };
153
171
  };
@@ -31,6 +31,9 @@ export declare const translations: {
31
31
  linkField: string;
32
32
  linkTextfield: string;
33
33
  linkOkButton: string;
34
+ linkEditButton: string;
35
+ linkTestButton: string;
36
+ linkDeleteButton: string;
34
37
  tableRowfield: string;
35
38
  tableColumnfield: string;
36
39
  tableOkButton: string;
@@ -51,6 +54,9 @@ export declare const translations: {
51
54
  undo: string;
52
55
  redo: string;
53
56
  link: string;
57
+ editlink: string;
58
+ deletelink: string;
59
+ testlink: string;
54
60
  table: string;
55
61
  };
56
62
  };
@@ -74,6 +80,9 @@ export declare const translations: {
74
80
  linkText: string;
75
81
  linkPlaceholder: string;
76
82
  linkTooltip: string;
83
+ linkEdittip: string;
84
+ linkTesttip: string;
85
+ linkDeletetip: string;
77
86
  };
78
87
  };
79
88
  en: {
@@ -108,6 +117,9 @@ export declare const translations: {
108
117
  linkField: string;
109
118
  linkTextfield: string;
110
119
  linkOkButton: string;
120
+ linkEditButton: string;
121
+ linkTestButton: string;
122
+ linkDeleteButton: string;
111
123
  tableRowfield: string;
112
124
  tableColumnfield: string;
113
125
  tableOkButton: string;
@@ -128,6 +140,9 @@ export declare const translations: {
128
140
  undo: string;
129
141
  redo: string;
130
142
  link: string;
143
+ editlink: string;
144
+ deletelink: string;
145
+ testlink: string;
131
146
  table: string;
132
147
  };
133
148
  };
@@ -151,6 +166,9 @@ export declare const translations: {
151
166
  linkText: string;
152
167
  linkPlaceholder: string;
153
168
  linkTooltip: string;
169
+ linkEdittip: string;
170
+ linkTesttip: string;
171
+ linkDeletetip: string;
154
172
  };
155
173
  };
156
174
  };
@@ -31,6 +31,9 @@ const e = {
31
31
  linkField: "Voer een url in",
32
32
  linkTextfield: "Voer een link tekst in",
33
33
  linkOkButton: "Pas link en link tekst toe",
34
+ linkEditButton: "Bewerk de link (Ctrl + Shift + L)",
35
+ linkTestButton: "Test de link (Ctrl + Shift + 1)",
36
+ linkDeleteButton: "Verwijder de link (Ctrl + Shift + Q)",
34
37
  tableRowfield: "Voer het aantal rijen in",
35
38
  tableColumnfield: "Voer het aantal kolommen in",
36
39
  tableOkButton: "Voeg tabel toe",
@@ -51,6 +54,9 @@ const e = {
51
54
  undo: "Control+Z",
52
55
  redo: "Control+Y",
53
56
  link: "Control+Shift+L",
57
+ editlink: "Control+Shift+L",
58
+ deletelink: "Control+Shift+Q",
59
+ testlink: "Control+Shift+T",
54
60
  table: "Control+Shift+9"
55
61
  }
56
62
  },
@@ -73,7 +79,10 @@ const e = {
73
79
  addLink: "Pas toe",
74
80
  linkText: "Link tekst",
75
81
  linkPlaceholder: "www.voorbeeld.nl",
76
- linkTooltip: "Voeg link toe (Ctrl + Shift + U)"
82
+ linkTooltip: "Voeg link toe (Ctrl + Shift + U)",
83
+ linkEdittip: "Bewerk link (Ctrl + Shift + L)",
84
+ linkTesttip: "Test link (Ctrl + Shift + 1)",
85
+ linkDeletetip: "Verwijder link (Ctrl + Shift + Q)"
77
86
  }
78
87
  },
79
88
  en: {
@@ -108,6 +117,9 @@ const e = {
108
117
  linkField: "Enter a url",
109
118
  linkTextfield: "Enter a link text",
110
119
  linkOkButton: "Apply link and link text",
120
+ linkEditButton: "Edit the link (Ctrl + Shift + L)",
121
+ linkTestButton: "Test the link (Ctrl + Shift + 1)",
122
+ linkDeleteButton: "Delete the link (Ctrl + Shift + Q)",
111
123
  tableRowfield: "Enter the number of rows",
112
124
  tableColumnfield: "Enter the number of columns",
113
125
  tableOkButton: "Add table",
@@ -127,7 +139,10 @@ const e = {
127
139
  bullet: "Control+Shift+8",
128
140
  undo: "Control+Z",
129
141
  redo: "Control+Y",
130
- link: "Control+Shift+L",
142
+ link: "Control+Shift+U",
143
+ editlink: "Control+Shift+L",
144
+ deletelink: "Control+Shift+Q",
145
+ testlink: "Control+Shift+1",
131
146
  table: "Control+Shift+9"
132
147
  }
133
148
  },
@@ -150,7 +165,10 @@ const e = {
150
165
  addLink: "Apply",
151
166
  linkText: "Link text",
152
167
  linkPlaceholder: "www.example.com",
153
- linkTooltip: "Add link (Ctrl + Shift + L)"
168
+ linkTooltip: "Add link (Ctrl + Shift + U)",
169
+ linkEdittip: "Edit link (Ctrl + Shift + L)",
170
+ linkTesttip: "Test link (Ctrl + Shift + 1)",
171
+ linkDeletetip: "Delete link (Ctrl + Shift + Q)"
154
172
  }
155
173
  }
156
174
  };
@@ -1 +1 @@
1
- {"version":3,"file":"translations.js","sources":["../../../src/components/RteEditor/translations.ts"],"sourcesContent":["export const translations = {\n nl: {\n common: {\n cancel: 'Annuleren',\n add: 'Voeg toe',\n rteAriaLabel: 'Inhoud van Rich text editor',\n rteTitle: 'Inhoud van Rich text editor',\n },\n errortext: {\n urlNotValid: 'Geen geldige url',\n linkTextNotValid: 'Geen geldige link tekst',\n },\n format: {\n boldTooltip: 'Vet (Ctrl + B)',\n italicTooltip: 'Cursief (Ctrl + I)',\n numberTooltip: 'Genummerde lijst (Ctrl + Shift + 7)',\n bulletTooltip: 'Ongenummerde lijst (Ctrl + Shift + 8)',\n undoTooltip: 'Ongedaan maken (Ctrl + Z)',\n redoTooltip: 'Opnieuw uitvoeren (Ctrl + Y)',\n },\n aria: {\n labels: {\n bold: 'Maak de selectie vet',\n italic: 'Maak de selectie cursief',\n number: 'Maak van de selectie een genummerde lijst',\n bullet: 'Maak van de selectie een lijst',\n undo: 'Ongedaan maken',\n redo: 'Opnieuw uitvoeren',\n link: 'Maak van de selectie een link',\n table: 'Voeg een tabel in op de cursor positie',\n linkField: 'Voer een url in',\n linkTextfield: 'Voer een link tekst in',\n linkOkButton: 'Pas link en link tekst toe',\n tableRowfield: 'Voer het aantal rijen in',\n tableColumnfield: 'Voer het aantal kolommen in',\n tableOkButton: 'Voeg tabel toe',\n tableInsertRowAbove: 'Voeg rij in boven',\n tableInsertRowBelow: 'Voeg rij in onder',\n tableDeleteRow: 'Verwijder rij',\n tableInsertColumnLeft: 'Voeg kolom links in',\n tableInsertColumnRight: 'Voeg kolom rechts in',\n tableDeleteColumn: 'Verwijder kolom',\n tableDeleteTable: 'Verwijder tabel',\n cancelButton: 'Annuleren',\n },\n keyshortcuts: {\n bold: 'Control+B',\n italic: 'Control+I',\n number: 'Control+Shift+7',\n bullet: 'Control+Shift+8',\n undo: 'Control+Z',\n redo: 'Control+Y',\n link: 'Control+Shift+L',\n table: 'Control+Shift+9',\n },\n },\n table: {\n nrofRows: 'Aantal rijen',\n nrofRowsPlaceholder: 'aantal rijen',\n nrofColumns: 'Aantal kolommen',\n nrofColumnsPlaceholder: 'aantal kolommen',\n insertRowAbove: 'Voeg rij boven toe',\n insertRowBelow: 'Voeg rij onder toe',\n deleteRow: 'Verwijder rij',\n insertColumnLeft: 'Voeg kolom links toe',\n insertColumnRight: 'Voeg kolom rechts toe',\n deleteColumn: 'Verwijder kolom',\n deleteTable: 'Verwijder tabel',\n tableTooltip: 'Voeg tabel toe (Ctrl + Shift + 9)',\n },\n links: {\n linkLabel: 'Externe link',\n addLink: 'Pas toe',\n linkText: 'Link tekst',\n linkPlaceholder: 'www.voorbeeld.nl',\n linkTooltip: 'Voeg link toe (Ctrl + Shift + U)',\n },\n },\n en: {\n common: {\n cancel: 'Cancel',\n add: 'Add',\n rteAriaLabel: 'Rich text editor content',\n rteTitle: 'Rich text editor content',\n },\n errortext: {\n urlNotValid: 'No valid url',\n linkTextNotValid: 'No valid link text',\n },\n format: {\n boldTooltip: 'Bold (Ctrl + B)',\n italicTooltip: 'Italic (Ctrl + I)',\n numberTooltip: 'Ordered list (Ctrl + Shift + O)',\n bulletTooltip: 'Unordered list (Ctrl + Shift + U)',\n undoTooltip: 'Undo (Ctrl + Z)',\n redoTooltip: 'Redo (Ctrl + Y)',\n },\n aria: {\n labels: {\n bold: 'Make the selection bold',\n italic: 'Make the selection italic',\n number: 'Make the selection an ordered list',\n bullet: 'Make the selection an unordered list',\n undo: 'Undo',\n redo: 'Redo',\n link: 'Turn the selection into a link',\n table: 'Insert a table at the cursor position',\n linkField: 'Enter a url',\n linkTextfield: 'Enter a link text',\n linkOkButton: 'Apply link and link text',\n tableRowfield: 'Enter the number of rows',\n tableColumnfield: 'Enter the number of columns',\n tableOkButton: 'Add table',\n tableInsertRowAbove: 'Insert row above',\n tableInsertRowBelow: 'Insert row below',\n tableDeleteRow: 'Delete row',\n tableInsertColumnLeft: 'Insert column left',\n tableInsertColumnRight: 'Insert column right',\n tableDeleteColumn: 'Delete column',\n tableDeleteTable: 'Delete table',\n cancel: 'Cancel',\n },\n keyshortcuts: {\n bold: 'Control+B',\n italic: 'Control+I',\n number: 'Control+Shift+7',\n bullet: 'Control+Shift+8',\n undo: 'Control+Z',\n redo: 'Control+Y',\n link: 'Control+Shift+L',\n table: 'Control+Shift+9',\n },\n },\n table: {\n nrofRows: 'Number of rows',\n nrofRowsPlaceholder: 'number of rows',\n nrofColumns: 'Number of columns',\n nrofColumnsPlaceholder: 'number of columns',\n insertRowAbove: 'Insert row above',\n insertRowBelow: 'Insert row below',\n deleteRow: 'Delete row',\n insertColumnLeft: 'Insert column left',\n insertColumnRight: 'Insert column right',\n deleteColumn: 'Delete column',\n deleteTable: 'Delete table',\n tableTooltip: 'Add table (Ctrl + Shift + 9)',\n },\n links: {\n linkLabel: 'External link',\n addLink: 'Apply',\n linkText: 'Link text',\n linkPlaceholder: 'www.example.com',\n linkTooltip: 'Add link (Ctrl + Shift + L)',\n },\n },\n};\n"],"names":["translations"],"mappings":"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"}
1
+ {"version":3,"file":"translations.js","sources":["../../../src/components/RteEditor/translations.ts"],"sourcesContent":["export const translations = {\n nl: {\n common: {\n cancel: 'Annuleren',\n add: 'Voeg toe',\n rteAriaLabel: 'Inhoud van Rich text editor',\n rteTitle: 'Inhoud van Rich text editor',\n },\n errortext: {\n urlNotValid: 'Geen geldige url',\n linkTextNotValid: 'Geen geldige link tekst',\n },\n format: {\n boldTooltip: 'Vet (Ctrl + B)',\n italicTooltip: 'Cursief (Ctrl + I)',\n numberTooltip: 'Genummerde lijst (Ctrl + Shift + 7)',\n bulletTooltip: 'Ongenummerde lijst (Ctrl + Shift + 8)',\n undoTooltip: 'Ongedaan maken (Ctrl + Z)',\n redoTooltip: 'Opnieuw uitvoeren (Ctrl + Y)',\n },\n aria: {\n labels: {\n bold: 'Maak de selectie vet',\n italic: 'Maak de selectie cursief',\n number: 'Maak van de selectie een genummerde lijst',\n bullet: 'Maak van de selectie een lijst',\n undo: 'Ongedaan maken',\n redo: 'Opnieuw uitvoeren',\n link: 'Maak van de selectie een link',\n table: 'Voeg een tabel in op de cursor positie',\n linkField: 'Voer een url in',\n linkTextfield: 'Voer een link tekst in',\n linkOkButton: 'Pas link en link tekst toe',\n linkEditButton: 'Bewerk de link (Ctrl + Shift + L)',\n linkTestButton: 'Test de link (Ctrl + Shift + 1)',\n linkDeleteButton: 'Verwijder de link (Ctrl + Shift + Q)',\n tableRowfield: 'Voer het aantal rijen in',\n tableColumnfield: 'Voer het aantal kolommen in',\n tableOkButton: 'Voeg tabel toe',\n tableInsertRowAbove: 'Voeg rij in boven',\n tableInsertRowBelow: 'Voeg rij in onder',\n tableDeleteRow: 'Verwijder rij',\n tableInsertColumnLeft: 'Voeg kolom links in',\n tableInsertColumnRight: 'Voeg kolom rechts in',\n tableDeleteColumn: 'Verwijder kolom',\n tableDeleteTable: 'Verwijder tabel',\n cancelButton: 'Annuleren',\n },\n keyshortcuts: {\n bold: 'Control+B',\n italic: 'Control+I',\n number: 'Control+Shift+7',\n bullet: 'Control+Shift+8',\n undo: 'Control+Z',\n redo: 'Control+Y',\n link: 'Control+Shift+L',\n editlink: 'Control+Shift+L',\n deletelink: 'Control+Shift+Q',\n testlink: 'Control+Shift+T',\n table: 'Control+Shift+9',\n },\n },\n table: {\n nrofRows: 'Aantal rijen',\n nrofRowsPlaceholder: 'aantal rijen',\n nrofColumns: 'Aantal kolommen',\n nrofColumnsPlaceholder: 'aantal kolommen',\n insertRowAbove: 'Voeg rij boven toe',\n insertRowBelow: 'Voeg rij onder toe',\n deleteRow: 'Verwijder rij',\n insertColumnLeft: 'Voeg kolom links toe',\n insertColumnRight: 'Voeg kolom rechts toe',\n deleteColumn: 'Verwijder kolom',\n deleteTable: 'Verwijder tabel',\n tableTooltip: 'Voeg tabel toe (Ctrl + Shift + 9)',\n },\n links: {\n linkLabel: 'Externe link',\n addLink: 'Pas toe',\n linkText: 'Link tekst',\n linkPlaceholder: 'www.voorbeeld.nl',\n linkTooltip: 'Voeg link toe (Ctrl + Shift + U)',\n linkEdittip: 'Bewerk link (Ctrl + Shift + L)',\n linkTesttip: 'Test link (Ctrl + Shift + 1)',\n linkDeletetip: 'Verwijder link (Ctrl + Shift + Q)',\n },\n },\n en: {\n common: {\n cancel: 'Cancel',\n add: 'Add',\n rteAriaLabel: 'Rich text editor content',\n rteTitle: 'Rich text editor content',\n },\n errortext: {\n urlNotValid: 'No valid url',\n linkTextNotValid: 'No valid link text',\n },\n format: {\n boldTooltip: 'Bold (Ctrl + B)',\n italicTooltip: 'Italic (Ctrl + I)',\n numberTooltip: 'Ordered list (Ctrl + Shift + O)',\n bulletTooltip: 'Unordered list (Ctrl + Shift + U)',\n undoTooltip: 'Undo (Ctrl + Z)',\n redoTooltip: 'Redo (Ctrl + Y)',\n },\n aria: {\n labels: {\n bold: 'Make the selection bold',\n italic: 'Make the selection italic',\n number: 'Make the selection an ordered list',\n bullet: 'Make the selection an unordered list',\n undo: 'Undo',\n redo: 'Redo',\n link: 'Turn the selection into a link',\n table: 'Insert a table at the cursor position',\n linkField: 'Enter a url',\n linkTextfield: 'Enter a link text',\n linkOkButton: 'Apply link and link text',\n linkEditButton: 'Edit the link (Ctrl + Shift + L)',\n linkTestButton: 'Test the link (Ctrl + Shift + 1)',\n linkDeleteButton: 'Delete the link (Ctrl + Shift + Q)',\n tableRowfield: 'Enter the number of rows',\n tableColumnfield: 'Enter the number of columns',\n tableOkButton: 'Add table',\n tableInsertRowAbove: 'Insert row above',\n tableInsertRowBelow: 'Insert row below',\n tableDeleteRow: 'Delete row',\n tableInsertColumnLeft: 'Insert column left',\n tableInsertColumnRight: 'Insert column right',\n tableDeleteColumn: 'Delete column',\n tableDeleteTable: 'Delete table',\n cancel: 'Cancel',\n },\n keyshortcuts: {\n bold: 'Control+B',\n italic: 'Control+I',\n number: 'Control+Shift+7',\n bullet: 'Control+Shift+8',\n undo: 'Control+Z',\n redo: 'Control+Y',\n link: 'Control+Shift+U',\n editlink: 'Control+Shift+L',\n deletelink: 'Control+Shift+Q',\n testlink: 'Control+Shift+1',\n table: 'Control+Shift+9',\n },\n },\n table: {\n nrofRows: 'Number of rows',\n nrofRowsPlaceholder: 'number of rows',\n nrofColumns: 'Number of columns',\n nrofColumnsPlaceholder: 'number of columns',\n insertRowAbove: 'Insert row above',\n insertRowBelow: 'Insert row below',\n deleteRow: 'Delete row',\n insertColumnLeft: 'Insert column left',\n insertColumnRight: 'Insert column right',\n deleteColumn: 'Delete column',\n deleteTable: 'Delete table',\n tableTooltip: 'Add table (Ctrl + Shift + 9)',\n },\n links: {\n linkLabel: 'External link',\n addLink: 'Apply',\n linkText: 'Link text',\n linkPlaceholder: 'www.example.com',\n linkTooltip: 'Add link (Ctrl + Shift + U)',\n linkEdittip: 'Edit link (Ctrl + Shift + L)',\n linkTesttip: 'Test link (Ctrl + Shift + 1)',\n linkDeletetip: 'Delete link (Ctrl + Shift + Q)',\n },\n },\n};\n"],"names":["translations"],"mappings":"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"}
@@ -12,4 +12,4 @@ const u = (e, n) => {
12
12
  export {
13
13
  u as useOnClickOutside
14
14
  };
15
- //# sourceMappingURL=useOnClickOuside.js.map
15
+ //# sourceMappingURL=useOnClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside.js","sources":["../../../src/components/hooks/useOnClickOutside.ts"],"sourcesContent":["import { type RefObject, useEffect } from 'react';\n\ntype Handler = (event: MouseEvent | TouchEvent | KeyboardEvent) => void;\n\nexport const useOnClickOutside = <T extends HTMLElement = HTMLElement>(ref: RefObject<T>, handler: Handler): void => {\n useEffect(() => {\n const listener = (\n event:\n | (MouseEvent & { target: HTMLElement | null })\n | (TouchEvent & { target: HTMLElement | null })\n | (KeyboardEvent & { target: HTMLElement | null })\n ): void => {\n if (!ref.current || ref.current.contains(event.target as Node)) {\n return;\n }\n handler(event as MouseEvent | TouchEvent | KeyboardEvent);\n };\n document.addEventListener('mousedown', listener as EventListener);\n document.addEventListener('touchstart', listener as EventListener);\n return () => {\n document.removeEventListener('mousedown', listener as EventListener);\n document.removeEventListener('touchstart', listener as EventListener);\n };\n }, [ref, handler]);\n};\n"],"names":["useOnClickOutside","ref","handler","useEffect","listener","event"],"mappings":";AAIa,MAAAA,IAAoB,CAAsCC,GAAmBC,MAA2B;AACnH,EAAAC,EAAU,MAAM;AACR,UAAAC,IAAW,CACfC,MAIS;AACL,MAAA,CAACJ,EAAI,WAAWA,EAAI,QAAQ,SAASI,EAAM,MAAc,KAG7DH,EAAQG,CAAgD;AAAA,IAAA;AAEjD,oBAAA,iBAAiB,aAAaD,CAAyB,GACvD,SAAA,iBAAiB,cAAcA,CAAyB,GAC1D,MAAM;AACF,eAAA,oBAAoB,aAAaA,CAAyB,GAC1D,SAAA,oBAAoB,cAAcA,CAAyB;AAAA,IAAA;AAAA,EACtE,GACC,CAACH,GAAKC,CAAO,CAAC;AACnB;"}
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.64.4",
5
+ "version": "1.64.5",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"useOnClickOuside.js","sources":["../../../src/components/hooks/useOnClickOuside.ts"],"sourcesContent":["import { type RefObject, useEffect } from 'react';\n\ntype Handler = (event: MouseEvent | TouchEvent | KeyboardEvent) => void;\n\nexport const useOnClickOutside = <T extends HTMLElement = HTMLElement>(ref: RefObject<T>, handler: Handler): void => {\n useEffect(() => {\n const listener = (\n event:\n | (MouseEvent & { target: HTMLElement | null })\n | (TouchEvent & { target: HTMLElement | null })\n | (KeyboardEvent & { target: HTMLElement | null })\n ): void => {\n if (!ref.current || ref.current.contains(event.target as Node)) {\n return;\n }\n handler(event as MouseEvent | TouchEvent | KeyboardEvent);\n };\n document.addEventListener('mousedown', listener as EventListener);\n document.addEventListener('touchstart', listener as EventListener);\n return () => {\n document.removeEventListener('mousedown', listener as EventListener);\n document.removeEventListener('touchstart', listener as EventListener);\n };\n }, [ref, handler]);\n};\n"],"names":["useOnClickOutside","ref","handler","useEffect","listener","event"],"mappings":";AAIa,MAAAA,IAAoB,CAAsCC,GAAmBC,MAA2B;AACnH,EAAAC,EAAU,MAAM;AACR,UAAAC,IAAW,CACfC,MAIS;AACL,MAAA,CAACJ,EAAI,WAAWA,EAAI,QAAQ,SAASI,EAAM,MAAc,KAG7DH,EAAQG,CAAgD;AAAA,IAAA;AAEjD,oBAAA,iBAAiB,aAAaD,CAAyB,GACvD,SAAA,iBAAiB,cAAcA,CAAyB,GAC1D,MAAM;AACF,eAAA,oBAAoB,aAAaA,CAAyB,GAC1D,SAAA,oBAAoB,cAAcA,CAAyB;AAAA,IAAA;AAAA,EACtE,GACC,CAACH,GAAKC,CAAO,CAAC;AACnB;"}