@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.
- package/dist/assets/LinkContextMenu.css +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +85 -39
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js.map +1 -1
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +115 -114
- package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js.map +1 -1
- package/dist/components/RteEditor/hooks/useFlyout.d.ts +0 -1
- package/dist/components/RteEditor/hooks/useFlyout.js +1 -1
- package/dist/components/RteEditor/hooks/useFlyout.js.map +1 -1
- package/dist/components/RteEditor/hooks/useTranslation.d.ts +18 -0
- package/dist/components/RteEditor/translations.d.ts +18 -0
- package/dist/components/RteEditor/translations.js +21 -3
- package/dist/components/RteEditor/translations.js.map +1 -1
- package/dist/components/hooks/{useOnClickOuside.js → useOnClickOutside.js} +1 -1
- package/dist/components/hooks/useOnClickOutside.js.map +1 -0
- package/package.json +1 -1
- package/dist/components/hooks/useOnClickOuside.js.map +0 -1
- /package/dist/components/hooks/{useOnClickOuside.d.ts → useOnClickOutside.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
._link-context-
|
|
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
|
|
2
|
-
import { forwardRef as
|
|
3
|
-
import { e as
|
|
4
|
-
import { Icon as
|
|
5
|
-
import { useTranslation as
|
|
6
|
-
import { Button as
|
|
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
|
|
10
|
-
"link-context-menu__wrapper": "_link-context-
|
|
11
|
-
"link-context-menu__input": "_link-context-
|
|
12
|
-
"link-context-menu__button": "_link-context-
|
|
13
|
-
"link-context-menu__actions": "_link-context-
|
|
14
|
-
},
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
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
|
|
27
|
-
clearForm:
|
|
28
|
-
})),
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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:
|
|
37
|
-
onChange: (
|
|
38
|
-
className:
|
|
39
|
-
disabled: !
|
|
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
|
-
!
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
47
|
-
/* @__PURE__ */ n(
|
|
48
|
-
/* @__PURE__ */ n(
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
5
|
-
import { useRef as a, useState as X, useEffect as
|
|
6
|
-
import { B as Z, M as f, a4 as $, a2 as tt, v as
|
|
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
|
|
9
|
-
import { LinkContextMenu as
|
|
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
|
|
25
|
-
import { s as
|
|
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,
|
|
33
|
+
const mt = 200, O = (p) => {
|
|
34
34
|
let n = p;
|
|
35
35
|
for (; n; ) {
|
|
36
|
-
if (
|
|
36
|
+
if (z(n))
|
|
37
37
|
return n;
|
|
38
38
|
n = n.getParent();
|
|
39
39
|
}
|
|
40
40
|
return null;
|
|
41
|
-
},
|
|
41
|
+
}, U = (p) => {
|
|
42
42
|
let n = p;
|
|
43
43
|
for (; n; ) {
|
|
44
|
-
if (
|
|
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:
|
|
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
|
|
57
|
-
x.current =
|
|
56
|
+
const e = f();
|
|
57
|
+
x.current = e;
|
|
58
58
|
});
|
|
59
|
-
},
|
|
59
|
+
}, R = () => {
|
|
60
60
|
c.update(() => {
|
|
61
|
-
x.current &&
|
|
61
|
+
x.current && ot(x.current);
|
|
62
62
|
});
|
|
63
|
-
},
|
|
63
|
+
}, H = (e, t) => {
|
|
64
64
|
_({
|
|
65
65
|
position: t,
|
|
66
|
-
children: /* @__PURE__ */
|
|
67
|
-
|
|
66
|
+
children: /* @__PURE__ */ k(
|
|
67
|
+
it,
|
|
68
68
|
{
|
|
69
|
-
url:
|
|
70
|
-
onSave: (
|
|
69
|
+
url: e,
|
|
70
|
+
onSave: (o) => B(o, ""),
|
|
71
71
|
onDelete: () => V(),
|
|
72
|
-
onClose:
|
|
72
|
+
onClose: D,
|
|
73
73
|
ref: T
|
|
74
74
|
}
|
|
75
75
|
)
|
|
76
76
|
});
|
|
77
|
-
},
|
|
78
|
-
var
|
|
79
|
-
(
|
|
80
|
-
},
|
|
77
|
+
}, D = () => {
|
|
78
|
+
var e;
|
|
79
|
+
(e = T.current) == null || e.clearForm(), C(), R();
|
|
80
|
+
}, F = () => {
|
|
81
81
|
var t;
|
|
82
|
-
const
|
|
83
|
-
!N.current &&
|
|
84
|
-
var
|
|
85
|
-
return (
|
|
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
|
-
},
|
|
88
|
-
|
|
89
|
-
},
|
|
87
|
+
}, b = () => {
|
|
88
|
+
C(), R();
|
|
89
|
+
}, B = (e, t) => {
|
|
90
90
|
c.update(() => {
|
|
91
|
-
const
|
|
92
|
-
if (
|
|
93
|
-
const
|
|
91
|
+
const o = f();
|
|
92
|
+
if (w(o)) {
|
|
93
|
+
const s = o.anchor.getNode(), i = O(s);
|
|
94
94
|
if (t && t !== "") {
|
|
95
|
-
if (
|
|
96
|
-
const l =
|
|
97
|
-
|
|
95
|
+
if (i) {
|
|
96
|
+
const l = rt(t);
|
|
97
|
+
i.replace(l), l.select();
|
|
98
98
|
}
|
|
99
|
-
if (t !==
|
|
100
|
-
const { anchor: l, focus:
|
|
101
|
-
|
|
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(
|
|
104
|
+
J(st(e), { target: "_blank" });
|
|
105
105
|
}
|
|
106
|
-
|
|
106
|
+
b();
|
|
107
107
|
});
|
|
108
108
|
}, V = () => {
|
|
109
|
-
c.dispatchCommand(Q, null),
|
|
109
|
+
c.dispatchCommand(Q, null), D();
|
|
110
110
|
}, j = {
|
|
111
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ k(
|
|
112
112
|
nt,
|
|
113
113
|
{
|
|
114
|
-
isLink:
|
|
115
|
-
onCloseHandler:
|
|
116
|
-
onSaveHandler: (
|
|
117
|
-
ref:
|
|
114
|
+
isLink: L,
|
|
115
|
+
onCloseHandler: b,
|
|
116
|
+
onSaveHandler: (e, t) => B(e, t),
|
|
117
|
+
ref: d
|
|
118
118
|
}
|
|
119
119
|
)
|
|
120
120
|
};
|
|
121
|
-
return
|
|
122
|
-
var
|
|
123
|
-
u ? (N.current = !0, (t =
|
|
124
|
-
}, [
|
|
125
|
-
const
|
|
126
|
-
if (
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
|
139
|
-
return
|
|
137
|
+
const r = f();
|
|
138
|
+
return g.current = (r == null ? void 0 : r.getTextContent()) ?? "", e(r), !1;
|
|
140
139
|
},
|
|
141
140
|
0
|
|
142
|
-
),
|
|
141
|
+
), o = c.registerCommand(
|
|
143
142
|
$,
|
|
144
|
-
(
|
|
145
|
-
const
|
|
146
|
-
return
|
|
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
|
-
|
|
150
|
+
o(), t();
|
|
152
151
|
};
|
|
153
|
-
}, [c]),
|
|
154
|
-
const
|
|
152
|
+
}, [c]), m(() => {
|
|
153
|
+
const e = c.registerCommand(
|
|
155
154
|
tt,
|
|
156
|
-
(
|
|
157
|
-
if (
|
|
158
|
-
const
|
|
159
|
-
if (
|
|
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
|
|
162
|
-
|
|
163
|
-
var
|
|
164
|
-
return (
|
|
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 (
|
|
168
|
-
return
|
|
169
|
-
const l =
|
|
170
|
-
return l !== "" ? (
|
|
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:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
180
|
-
const
|
|
181
|
-
if (
|
|
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:
|
|
185
|
-
linktext:
|
|
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
|
-
|
|
196
|
+
e(), t();
|
|
198
197
|
};
|
|
199
|
-
}, [c]),
|
|
200
|
-
var
|
|
201
|
-
P.current = u, u || (
|
|
202
|
-
}, [u]),
|
|
203
|
-
u &&
|
|
204
|
-
}, [p]),
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
|
|
209
|
+
C();
|
|
209
210
|
};
|
|
210
|
-
return
|
|
211
|
-
window.removeEventListener("keydown",
|
|
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__ */
|
|
214
|
-
/* @__PURE__ */
|
|
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:
|
|
218
|
+
onClick: F,
|
|
218
219
|
title: n.links.linkTooltip,
|
|
219
220
|
className: G(
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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:
|
|
228
|
-
children: /* @__PURE__ */
|
|
228
|
+
ref: S,
|
|
229
|
+
children: /* @__PURE__ */ k(lt, { name: "Link", size: 20 })
|
|
229
230
|
}
|
|
230
231
|
),
|
|
231
|
-
|
|
232
|
+
I
|
|
232
233
|
] }) });
|
|
233
234
|
};
|
|
234
235
|
export {
|
|
235
236
|
jt as LinkPlugin,
|
|
236
|
-
|
|
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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"}
|
|
@@ -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/
|
|
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/
|
|
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+
|
|
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 +
|
|
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":"AAAO,MAAMA,IAAe;AAAA,EAC1B,IAAI;AAAA,IACF,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,cAAc;AAAA,MACd,UAAU;AAAA,IACZ;AAAA,IACA,WAAW;AAAA,MACT,aAAa;AAAA,MACb,kBAAkB;AAAA,IACpB;AAAA,IACA,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,eAAe;AAAA,MACf,eAAe;AAAA,MACf,eAAe;AAAA,MACf,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,QACP,WAAW;AAAA,QACX,eAAe;AAAA,QACf,cAAc;AAAA,QACd,eAAe;AAAA,QACf,kBAAkB;AAAA,QAClB,eAAe;AAAA,QACf,qBAAqB;AAAA,QACrB,qBAAqB;AAAA,QACrB,gBAAgB;AAAA,QAChB,uBAAuB;AAAA,QACvB,wBAAwB;AAAA,QACxB,mBAAmB;AAAA,QACnB,kBAAkB;AAAA,QAClB,cAAc;AAAA,MAChB;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,wBAAwB;AAAA,MACxB,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,mBAAmB;AAAA,MACnB,cAAc;AAAA,MACd,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,OAAO;AAAA,MACL,WAAW;AAAA,MACX,SAAS;AAAA,MACT,UAAU;AAAA,MACV,iBAAiB;AAAA,MACjB,aAAa;AAAA,
|
|
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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"}
|
|
@@ -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
|
@@ -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;"}
|
|
File without changes
|