sykpcomposer 0.0.113 → 0.0.115

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,260 +0,0 @@
1
- import { j as e, m as $, u as M, d as v, w, x as B, n as U, a as T, c as z, e as O, C as p, f as W, k as q, g as G, I as H, r as J, h as Q, i as V, l as X, T as Y, D as Z, B as K } from "./index-174aeef5.js";
2
- import { u as ee, d as te, L as ne, P as ae } from "./Placeholder-b9109e63.js";
3
- import { useRef as N, useState as I, useCallback as _, useEffect as se, Suspense as le } from "react";
4
- import "react-dom";
5
- function oe({
6
- children: s,
7
- label: r,
8
- className: t,
9
- ...g
10
- }) {
11
- return /* @__PURE__ */ e.jsxs("div", { className: "Input__wrapper", children: [
12
- /* @__PURE__ */ e.jsx("label", { style: { marginTop: "-1em" }, className: "Input__label", children: r }),
13
- /* @__PURE__ */ e.jsx("select", { ...g, className: t || "select", children: s })
14
- ] });
15
- }
16
- const y = /* @__PURE__ */ new Set();
17
- function re(s) {
18
- if (!y.has(s))
19
- throw new Promise((r) => {
20
- const t = new Image();
21
- t.src = s, t.onload = () => {
22
- y.add(s), r(null);
23
- };
24
- });
25
- }
26
- function ie({
27
- altText: s,
28
- className: r,
29
- imageRef: t,
30
- src: g,
31
- width: i,
32
- height: u,
33
- position: c
34
- }) {
35
- return re(g), /* @__PURE__ */ e.jsx(
36
- "img",
37
- {
38
- className: r || void 0,
39
- src: g,
40
- alt: s,
41
- ref: t,
42
- "data-position": c,
43
- style: {
44
- display: "block",
45
- height: u,
46
- width: i
47
- },
48
- draggable: "false"
49
- }
50
- );
51
- }
52
- function ce({
53
- activeEditor: s,
54
- nodeKey: r,
55
- onClose: t
56
- }) {
57
- const i = s.getEditorState().read(
58
- () => B(r)
59
- ), [u, c] = I(i.getAltText()), [j, E] = I(i.getShowCaption()), [C, h] = I(i.getPosition()), x = (d) => {
60
- E(d.target.checked);
61
- }, o = (d) => {
62
- h(d.target.value);
63
- }, f = () => {
64
- const d = { altText: u, position: C, showCaption: j };
65
- i && s.update(() => {
66
- i.update(d);
67
- }), t();
68
- };
69
- return /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
70
- /* @__PURE__ */ e.jsx("div", { style: { marginBottom: "1em" }, children: /* @__PURE__ */ e.jsx(
71
- Y,
72
- {
73
- label: "Alt Text",
74
- placeholder: "Descriptive alternative text",
75
- onChange: c,
76
- value: u,
77
- "data-test-id": "image-modal-alt-text-input"
78
- }
79
- ) }),
80
- /* @__PURE__ */ e.jsxs(
81
- oe,
82
- {
83
- style: { marginBottom: "1em", width: "208px" },
84
- value: C,
85
- label: "Position",
86
- name: "position",
87
- id: "position-select",
88
- onChange: o,
89
- children: [
90
- /* @__PURE__ */ e.jsx("option", { value: "left", children: "Left" }),
91
- /* @__PURE__ */ e.jsx("option", { value: "right", children: "Right" }),
92
- /* @__PURE__ */ e.jsx("option", { value: "full", children: "Full Width" })
93
- ]
94
- }
95
- ),
96
- /* @__PURE__ */ e.jsxs("div", { className: "Input__wrapper", children: [
97
- /* @__PURE__ */ e.jsx(
98
- "input",
99
- {
100
- id: "caption",
101
- type: "checkbox",
102
- checked: j,
103
- onChange: x
104
- }
105
- ),
106
- /* @__PURE__ */ e.jsx("label", { htmlFor: "caption", children: "Show Caption" })
107
- ] }),
108
- /* @__PURE__ */ e.jsx(Z, { children: /* @__PURE__ */ e.jsx(
109
- K,
110
- {
111
- "data-test-id": "image-modal-file-upload-btn",
112
- onClick: () => f(),
113
- children: "Confirm"
114
- }
115
- ) })
116
- ] });
117
- }
118
- function fe({
119
- src: s,
120
- altText: r,
121
- nodeKey: t,
122
- width: g,
123
- height: i,
124
- showCaption: u,
125
- caption: c,
126
- position: j
127
- }) {
128
- const [E, C] = $(), h = N(null), x = N(null), [o, f, d] = ee(t), [a] = M(), [k, F] = I(null), D = N(null), S = _(
129
- (l) => {
130
- if (o && v(w())) {
131
- l.preventDefault();
132
- const n = B(t);
133
- if (U(n))
134
- return n.remove(), !0;
135
- }
136
- return !1;
137
- },
138
- [o, t]
139
- ), R = _(
140
- (l) => {
141
- const m = w(), n = x.current;
142
- if (o && v(m) && m.getNodes().length === 1) {
143
- if (u)
144
- return T(null), l.preventDefault(), c.focus(), !0;
145
- if (n !== null && n !== document.activeElement)
146
- return l.preventDefault(), n.focus(), !0;
147
- }
148
- return !1;
149
- },
150
- [c, o, u]
151
- ), P = _(
152
- (l) => D.current === c || x.current === l.target ? (T(null), a.update(() => {
153
- f(!0);
154
- const m = a.getRootElement();
155
- m !== null && m.focus();
156
- }), !0) : !1,
157
- [c, a, f]
158
- );
159
- se(() => {
160
- let l = !0;
161
- const m = z(
162
- a.registerUpdateListener(({ editorState: n }) => {
163
- l && F(n.read(() => w()));
164
- }),
165
- a.registerCommand(
166
- Q,
167
- (n, b) => (D.current = b, !1),
168
- p
169
- ),
170
- a.registerCommand(
171
- J,
172
- (n) => {
173
- const b = n;
174
- return b.target === h.current ? (b.shiftKey ? f(!o) : (d(), f(!0)), !0) : !1;
175
- },
176
- p
177
- ),
178
- a.registerCommand(
179
- H,
180
- (n) => n.target === h.current ? (n.preventDefault(), !0) : !1,
181
- p
182
- ),
183
- a.registerCommand(
184
- G,
185
- S,
186
- p
187
- ),
188
- a.registerCommand(
189
- q,
190
- S,
191
- p
192
- ),
193
- a.registerCommand(W, R, p),
194
- a.registerCommand(O, P, p)
195
- );
196
- return () => {
197
- l = !1, m();
198
- };
199
- }, [
200
- d,
201
- a,
202
- o,
203
- t,
204
- S,
205
- R,
206
- P,
207
- f
208
- ]);
209
- const L = o && v(k), A = o;
210
- return /* @__PURE__ */ e.jsxs(le, { fallback: null, children: [
211
- /* @__PURE__ */ e.jsxs(e.Fragment, { children: [
212
- /* @__PURE__ */ e.jsxs("div", { draggable: L, children: [
213
- /* @__PURE__ */ e.jsx(
214
- "button",
215
- {
216
- className: "image-edit-button",
217
- ref: x,
218
- onClick: () => {
219
- C("Update Inline Image", (l) => /* @__PURE__ */ e.jsx(
220
- ce,
221
- {
222
- activeEditor: a,
223
- nodeKey: t,
224
- onClose: l
225
- }
226
- ));
227
- },
228
- children: "Edit"
229
- }
230
- ),
231
- /* @__PURE__ */ e.jsx(
232
- ie,
233
- {
234
- className: A ? `focused ${v(k) ? "draggable" : ""}` : null,
235
- src: s,
236
- altText: r,
237
- imageRef: h,
238
- width: g,
239
- height: i,
240
- position: j
241
- }
242
- )
243
- ] }),
244
- u && /* @__PURE__ */ e.jsx("div", { className: "image-caption-container", children: /* @__PURE__ */ e.jsx(te, { initialEditor: c, children: /* @__PURE__ */ e.jsx(
245
- V,
246
- {
247
- contentEditable: /* @__PURE__ */ e.jsx(ne, { className: "InlineImageNode__contentEditable" }),
248
- placeholder: /* @__PURE__ */ e.jsx(ae, { className: "InlineImageNode__placeholder", children: "Enter a caption..." }),
249
- ErrorBoundary: X
250
- }
251
- ) }) })
252
- ] }),
253
- E
254
- ] });
255
- }
256
- export {
257
- ce as UpdateInlineImageDialog,
258
- fe as default
259
- };
260
- //# sourceMappingURL=InlineImageComponent-2a80d49f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InlineImageComponent-2a80d49f.js","sources":["../src/components/ui/Select.tsx","../src/components/nodes/InlineImageComponent.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport './Select.css';\n\nimport * as React from 'react';\n\ntype SelectIntrinsicProps = JSX.IntrinsicElements['select'];\ninterface SelectProps extends SelectIntrinsicProps {\n label: string;\n}\n\nexport default function Select({\n children,\n label,\n className,\n ...other\n}: SelectProps): JSX.Element {\n return (\n <div className=\"Input__wrapper\">\n <label style={{marginTop: '-1em'}} className=\"Input__label\">\n {label}\n </label>\n <select {...other} className={className || 'select'}>\n {children}\n </select>\n </div>\n );\n}\n","import type { Position } from \"./InlineImageNode\";\nimport type { BaseSelection, LexicalEditor, NodeKey } from \"lexical\";\n\nimport \"./InlineImageNode.css\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport LexicalErrorBoundary from \"@lexical/react/LexicalErrorBoundary\";\nimport { LexicalNestedComposer } from \"@lexical/react/LexicalNestedComposer\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { useLexicalNodeSelection } from \"@lexical/react/useLexicalNodeSelection\";\nimport { mergeRegister } from \"@lexical/utils\";\nimport {\n $getNodeByKey,\n $getSelection,\n $isNodeSelection,\n $setSelection,\n CLICK_COMMAND,\n COMMAND_PRIORITY_LOW,\n DRAGSTART_COMMAND,\n KEY_BACKSPACE_COMMAND,\n KEY_DELETE_COMMAND,\n KEY_ENTER_COMMAND,\n KEY_ESCAPE_COMMAND,\n SELECTION_CHANGE_COMMAND,\n} from \"lexical\";\nimport * as React from \"react\";\nimport { Suspense, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport useModal from \"../hooks/useModal\";\nimport Button from \"../ui/Button\";\nimport ContentEditable from \"../ui/ContentEditable\";\nimport { DialogActions } from \"../ui/Dialog\";\nimport Placeholder from \"../ui/Placeholder\";\nimport Select from \"../ui/Select\";\nimport TextInput from \"../ui/TextInput\";\nimport { $isInlineImageNode, InlineImageNode } from \"./InlineImageNode\";\n\nconst imageCache = new Set();\n\nfunction useSuspenseImage(src: string) {\n if (!imageCache.has(src)) {\n throw new Promise((resolve) => {\n const img = new Image();\n img.src = src;\n img.onload = () => {\n imageCache.add(src);\n resolve(null);\n };\n });\n }\n}\n\nfunction LazyImage({\n altText,\n className,\n imageRef,\n src,\n width,\n height,\n position,\n}: {\n altText: string;\n className: string | null;\n height: \"inherit\" | number;\n imageRef: { current: null | HTMLImageElement };\n src: string;\n width: \"inherit\" | number;\n position: Position;\n}): JSX.Element {\n useSuspenseImage(src);\n return (\n <img\n className={className || undefined}\n src={src}\n alt={altText}\n ref={imageRef}\n data-position={position}\n style={{\n display: \"block\",\n height,\n width,\n }}\n draggable=\"false\"\n />\n );\n}\n\nexport function UpdateInlineImageDialog({\n activeEditor,\n nodeKey,\n onClose,\n}: {\n activeEditor: LexicalEditor;\n nodeKey: NodeKey;\n onClose: () => void;\n}): JSX.Element {\n const editorState = activeEditor.getEditorState();\n const node = editorState.read(\n () => $getNodeByKey(nodeKey) as InlineImageNode\n );\n const [altText, setAltText] = useState(node.getAltText());\n const [showCaption, setShowCaption] = useState(node.getShowCaption());\n const [position, setPosition] = useState<Position>(node.getPosition());\n\n const handleShowCaptionChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setShowCaption(e.target.checked);\n };\n\n const handlePositionChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n setPosition(e.target.value as Position);\n };\n\n const handleOnConfirm = () => {\n const payload = { altText, position, showCaption };\n if (node) {\n activeEditor.update(() => {\n node.update(payload);\n });\n }\n onClose();\n };\n\n return (\n <>\n <div style={{ marginBottom: \"1em\" }}>\n <TextInput\n label=\"Alt Text\"\n placeholder=\"Descriptive alternative text\"\n onChange={setAltText}\n value={altText}\n data-test-id=\"image-modal-alt-text-input\"\n />\n </div>\n\n <Select\n style={{ marginBottom: \"1em\", width: \"208px\" }}\n value={position}\n label=\"Position\"\n name=\"position\"\n id=\"position-select\"\n onChange={handlePositionChange}\n >\n <option value=\"left\">Left</option>\n <option value=\"right\">Right</option>\n <option value=\"full\">Full Width</option>\n </Select>\n\n <div className=\"Input__wrapper\">\n <input\n id=\"caption\"\n type=\"checkbox\"\n checked={showCaption}\n onChange={handleShowCaptionChange}\n />\n <label htmlFor=\"caption\">Show Caption</label>\n </div>\n\n <DialogActions>\n <Button\n data-test-id=\"image-modal-file-upload-btn\"\n onClick={() => handleOnConfirm()}\n >\n Confirm\n </Button>\n </DialogActions>\n </>\n );\n}\n\nexport default function InlineImageComponent({\n src,\n altText,\n nodeKey,\n width,\n height,\n showCaption,\n caption,\n position,\n}: {\n altText: string;\n caption: LexicalEditor;\n height: \"inherit\" | number;\n nodeKey: NodeKey;\n showCaption: boolean;\n src: string;\n width: \"inherit\" | number;\n position: Position;\n}): JSX.Element {\n const [modal, showModal] = useModal();\n const imageRef = useRef<null | HTMLImageElement>(null);\n const buttonRef = useRef<HTMLButtonElement | null>(null);\n const [isSelected, setSelected, clearSelection] =\n useLexicalNodeSelection(nodeKey);\n const [editor] = useLexicalComposerContext();\n const [selection, setSelection] = useState<BaseSelection | null>(null);\n const activeEditorRef = useRef<LexicalEditor | null>(null);\n\n const onDelete = useCallback(\n (payload: KeyboardEvent) => {\n if (isSelected && $isNodeSelection($getSelection())) {\n const event: KeyboardEvent = payload;\n event.preventDefault();\n const node = $getNodeByKey(nodeKey);\n if ($isInlineImageNode(node)) {\n node.remove();\n return true;\n }\n }\n return false;\n },\n [isSelected, nodeKey]\n );\n\n const onEnter = useCallback(\n (event: KeyboardEvent) => {\n const latestSelection = $getSelection();\n const buttonElem = buttonRef.current;\n if (\n isSelected &&\n $isNodeSelection(latestSelection) &&\n latestSelection.getNodes().length === 1\n ) {\n if (showCaption) {\n // Move focus into nested editor\n $setSelection(null);\n event.preventDefault();\n caption.focus();\n return true;\n } else if (\n buttonElem !== null &&\n buttonElem !== document.activeElement\n ) {\n event.preventDefault();\n buttonElem.focus();\n return true;\n }\n }\n return false;\n },\n [caption, isSelected, showCaption]\n );\n\n const onEscape = useCallback(\n (event: KeyboardEvent) => {\n if (\n activeEditorRef.current === caption ||\n buttonRef.current === event.target\n ) {\n $setSelection(null);\n editor.update(() => {\n setSelected(true);\n const parentRootElement = editor.getRootElement();\n if (parentRootElement !== null) {\n parentRootElement.focus();\n }\n });\n return true;\n }\n return false;\n },\n [caption, editor, setSelected]\n );\n\n useEffect(() => {\n let isMounted = true;\n const unregister = mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n if (isMounted) {\n setSelection(editorState.read(() => $getSelection()));\n }\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_, activeEditor) => {\n activeEditorRef.current = activeEditor;\n return false;\n },\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand<MouseEvent>(\n CLICK_COMMAND,\n (payload) => {\n const event = payload;\n if (event.target === imageRef.current) {\n if (event.shiftKey) {\n setSelected(!isSelected);\n } else {\n clearSelection();\n setSelected(true);\n }\n return true;\n }\n\n return false;\n },\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand(\n DRAGSTART_COMMAND,\n (event) => {\n if (event.target === imageRef.current) {\n // TODO This is just a temporary workaround for FF to behave like other browsers.\n // Ideally, this handles drag & drop too (and all browsers).\n event.preventDefault();\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand(\n KEY_DELETE_COMMAND,\n onDelete,\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand(\n KEY_BACKSPACE_COMMAND,\n onDelete,\n COMMAND_PRIORITY_LOW\n ),\n editor.registerCommand(KEY_ENTER_COMMAND, onEnter, COMMAND_PRIORITY_LOW),\n editor.registerCommand(KEY_ESCAPE_COMMAND, onEscape, COMMAND_PRIORITY_LOW)\n );\n return () => {\n isMounted = false;\n unregister();\n };\n }, [\n clearSelection,\n editor,\n isSelected,\n nodeKey,\n onDelete,\n onEnter,\n onEscape,\n setSelected,\n ]);\n\n const draggable = isSelected && $isNodeSelection(selection);\n const isFocused = isSelected;\n return (\n <Suspense fallback={null}>\n <>\n <div draggable={draggable}>\n <button\n className=\"image-edit-button\"\n ref={buttonRef}\n onClick={() => {\n showModal(\"Update Inline Image\", (onClose) => (\n <UpdateInlineImageDialog\n activeEditor={editor}\n nodeKey={nodeKey}\n onClose={onClose}\n />\n ));\n }}\n >\n Edit\n </button>\n <LazyImage\n className={\n isFocused\n ? `focused ${$isNodeSelection(selection) ? \"draggable\" : \"\"}`\n : null\n }\n src={src}\n altText={altText}\n imageRef={imageRef}\n width={width}\n height={height}\n position={position}\n />\n </div>\n {showCaption && (\n <div className=\"image-caption-container\">\n <LexicalNestedComposer initialEditor={caption}>\n <RichTextPlugin\n contentEditable={\n <ContentEditable className=\"InlineImageNode__contentEditable\" />\n }\n placeholder={\n <Placeholder className=\"InlineImageNode__placeholder\">\n Enter a caption...\n </Placeholder>\n }\n ErrorBoundary={LexicalErrorBoundary}\n />\n </LexicalNestedComposer>\n </div>\n )}\n </>\n {modal}\n </Suspense>\n );\n}\n"],"names":["Select","children","label","className","other","jsxs","jsx","imageCache","useSuspenseImage","src","resolve","img","LazyImage","altText","imageRef","width","height","position","UpdateInlineImageDialog","activeEditor","nodeKey","onClose","node","$getNodeByKey","setAltText","useState","showCaption","setShowCaption","setPosition","handleShowCaptionChange","e","handlePositionChange","handleOnConfirm","payload","Fragment","TextInput","DialogActions","Button","InlineImageComponent","caption","modal","showModal","useModal","useRef","buttonRef","isSelected","setSelected","clearSelection","useLexicalNodeSelection","editor","useLexicalComposerContext","selection","setSelection","activeEditorRef","onDelete","useCallback","$isNodeSelection","$getSelection","$isInlineImageNode","onEnter","event","latestSelection","buttonElem","$setSelection","onEscape","parentRootElement","useEffect","isMounted","unregister","mergeRegister","editorState","SELECTION_CHANGE_COMMAND","_","COMMAND_PRIORITY_LOW","CLICK_COMMAND","DRAGSTART_COMMAND","KEY_DELETE_COMMAND","KEY_BACKSPACE_COMMAND","KEY_ENTER_COMMAND","KEY_ESCAPE_COMMAND","draggable","isFocused","Suspense","LexicalNestedComposer","RichTextPlugin","ContentEditable","Placeholder","LexicalErrorBoundary"],"mappings":"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"}