@blankdotpage/cake 0.1.32 → 0.1.34
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/cake/editor/cake-editor.d.ts +0 -1
- package/dist/cake/editor/cake-editor.d.ts.map +1 -1
- package/dist/cake/editor/cake-editor.js +0 -34
- package/dist/cake/extensions/index.d.ts +1 -0
- package/dist/cake/extensions/index.d.ts.map +1 -1
- package/dist/cake/extensions/link/link-popover.d.ts +3 -1
- package/dist/cake/extensions/link/link-popover.d.ts.map +1 -1
- package/dist/cake/extensions/link/link-popover.js +82 -13
- package/dist/cake/extensions/link/link.d.ts +22 -1
- package/dist/cake/extensions/link/link.d.ts.map +1 -1
- package/dist/cake/extensions/link/link.js +82 -7
- package/package.json +1 -1
|
@@ -254,7 +254,6 @@ export declare class CakeEditor {
|
|
|
254
254
|
private clearCompositionCommit;
|
|
255
255
|
private handleScroll;
|
|
256
256
|
private handleResize;
|
|
257
|
-
private openLinkPopoverForSelection;
|
|
258
257
|
private scheduleOverlayUpdate;
|
|
259
258
|
private flushOverlayUpdate;
|
|
260
259
|
private ensureOverlayRoot;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cake-editor.d.ts","sourceRoot":"","sources":["../../../src/cake/editor/cake-editor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cake-editor.d.ts","sourceRoot":"","sources":["../../../src/cake/editor/cake-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -641,8 +641,6 @@ export class CakeEditor {
|
|
|
641
641
|
return this.history.redoStack.length > 0;
|
|
642
642
|
}
|
|
643
643
|
executeCommand(command, options) {
|
|
644
|
-
// Check for openPopover flag on any command (used by link extension)
|
|
645
|
-
const shouldOpenLinkPopover = "openPopover" in command && command.openPopover === true;
|
|
646
644
|
const nextState = this.runtime.applyEdit(command, this.state);
|
|
647
645
|
if (nextState === this.state) {
|
|
648
646
|
return false;
|
|
@@ -659,14 +657,6 @@ export class CakeEditor {
|
|
|
659
657
|
// (marks may change even when selection position doesn't)
|
|
660
658
|
this.notifySelectionChange();
|
|
661
659
|
this.scheduleScrollCaretIntoView();
|
|
662
|
-
if (shouldOpenLinkPopover) {
|
|
663
|
-
// The popover is rendered via React overlays, and its event listeners are
|
|
664
|
-
// registered in `useEffect`. Dispatch after a frame so the overlay has a
|
|
665
|
-
// chance to commit and attach listeners across engines.
|
|
666
|
-
window.requestAnimationFrame(() => {
|
|
667
|
-
this.openLinkPopoverForSelection(true);
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
660
|
if (options?.restoreFocus) {
|
|
671
661
|
this.focus();
|
|
672
662
|
this.applySelection(this.state.selection);
|
|
@@ -2841,30 +2831,6 @@ export class CakeEditor {
|
|
|
2841
2831
|
handleResize() {
|
|
2842
2832
|
this.scheduleOverlayUpdate();
|
|
2843
2833
|
}
|
|
2844
|
-
openLinkPopoverForSelection(isEditing) {
|
|
2845
|
-
if (!this.contentRoot || !this.domMap) {
|
|
2846
|
-
return;
|
|
2847
|
-
}
|
|
2848
|
-
const selection = this.state.selection;
|
|
2849
|
-
const focus = selection.start === selection.end
|
|
2850
|
-
? selection.start
|
|
2851
|
-
: Math.max(selection.start, selection.end);
|
|
2852
|
-
const affinity = selection.affinity ?? "forward";
|
|
2853
|
-
const domPoint = this.domMap.domAtCursor(focus, affinity);
|
|
2854
|
-
if (!domPoint) {
|
|
2855
|
-
return;
|
|
2856
|
-
}
|
|
2857
|
-
const link = domPoint.node.parentElement?.closest("a.cake-link") ??
|
|
2858
|
-
this.contentRoot.querySelector("a.cake-link");
|
|
2859
|
-
if (!link || !(link instanceof HTMLAnchorElement)) {
|
|
2860
|
-
return;
|
|
2861
|
-
}
|
|
2862
|
-
const event = new CustomEvent("cake-link-popover-open", {
|
|
2863
|
-
bubbles: true,
|
|
2864
|
-
detail: { link, isEditing },
|
|
2865
|
-
});
|
|
2866
|
-
this.contentRoot.dispatchEvent(event);
|
|
2867
|
-
}
|
|
2868
2834
|
scheduleOverlayUpdate() {
|
|
2869
2835
|
if (this.isComposing) {
|
|
2870
2836
|
return;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { boldExtension } from "./bold/bold";
|
|
2
2
|
import { combinedEmphasisExtension } from "./combined-emphasis/combined-emphasis";
|
|
3
3
|
import { linkExtension } from "./link/link";
|
|
4
|
+
export type { OnRequestLinkInput, LinkExtensionOptions } from "./link/link";
|
|
4
5
|
import { blockquoteExtension } from "./blockquote/blockquote";
|
|
5
6
|
import { italicExtension } from "./italic/italic";
|
|
6
7
|
import { headingExtension } from "./heading/heading";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cake/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,CAAC;AAEF,eAAO,MAAM,6BAA6B,iCAUzC,CAAC;AAEF,eAAO,MAAM,iBAAiB,iCAG7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cake/extensions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,OAAO,EACL,aAAa,EACb,yBAAyB,EACzB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,kBAAkB,GACnB,CAAC;AAEF,eAAO,MAAM,6BAA6B,iCAUzC,CAAC;AAEF,eAAO,MAAM,iBAAiB,iCAG7B,CAAC"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CakeEditor } from "../../editor/cake-editor";
|
|
2
|
-
|
|
2
|
+
import type { LinkExtensionStyles } from "./link";
|
|
3
|
+
export declare function CakeLinkPopover({ editor, styles, }: {
|
|
3
4
|
editor: CakeEditor;
|
|
5
|
+
styles?: LinkExtensionStyles;
|
|
4
6
|
}): import("react/jsx-runtime").JSX.Element | null;
|
|
5
7
|
//# sourceMappingURL=link-popover.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-popover.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link-popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"link-popover.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link-popover.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AA4DlD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,MAAM,GACP,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B,kDAgYA"}
|
|
@@ -8,6 +8,19 @@ function getLinkFromEventTarget(target) {
|
|
|
8
8
|
}
|
|
9
9
|
return target.closest("a.cake-link");
|
|
10
10
|
}
|
|
11
|
+
function getLinkFromDomSelection(contentRoot) {
|
|
12
|
+
const selection = window.getSelection();
|
|
13
|
+
const focusNode = selection?.focusNode ?? null;
|
|
14
|
+
const focusElement = focusNode instanceof Element ? focusNode : focusNode?.parentElement ?? null;
|
|
15
|
+
if (!focusElement || !contentRoot.contains(focusElement)) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const link = focusElement.closest("a.cake-link");
|
|
19
|
+
if (!link || !(link instanceof HTMLAnchorElement)) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return link;
|
|
23
|
+
}
|
|
11
24
|
function getPopoverPosition(params) {
|
|
12
25
|
const anchorRect = params.toOverlayRect(params.anchor.getBoundingClientRect());
|
|
13
26
|
return {
|
|
@@ -15,7 +28,10 @@ function getPopoverPosition(params) {
|
|
|
15
28
|
left: anchorRect.left,
|
|
16
29
|
};
|
|
17
30
|
}
|
|
18
|
-
|
|
31
|
+
function cx(...parts) {
|
|
32
|
+
return parts.filter(Boolean).join(" ");
|
|
33
|
+
}
|
|
34
|
+
export function CakeLinkPopover({ editor, styles, }) {
|
|
19
35
|
const container = editor.getContainer();
|
|
20
36
|
const contentRoot = editor.getContentRoot();
|
|
21
37
|
if (!contentRoot) {
|
|
@@ -44,7 +60,11 @@ export function CakeLinkPopover({ editor }) {
|
|
|
44
60
|
const popoverRef = useRef(null);
|
|
45
61
|
const inputRef = useRef(null);
|
|
46
62
|
const [state, setState] = useState({ status: "closed" });
|
|
63
|
+
const stateRef = useRef(state);
|
|
47
64
|
const isEditing = state.status === "open" ? state.isEditing : false;
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
stateRef.current = state;
|
|
67
|
+
}, [state]);
|
|
48
68
|
const close = useCallback(() => {
|
|
49
69
|
anchorRef.current = null;
|
|
50
70
|
setState({ status: "closed" });
|
|
@@ -114,19 +134,68 @@ export function CakeLinkPopover({ editor }) {
|
|
|
114
134
|
};
|
|
115
135
|
}, [close, contentRoot, openForLink]);
|
|
116
136
|
useEffect(() => {
|
|
117
|
-
function
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
137
|
+
function handleKeyDown(event) {
|
|
138
|
+
const key = event.key.length === 1 ? event.key.toLowerCase() : event.key;
|
|
139
|
+
if (key !== "u" || !event.shiftKey || (!event.metaKey && !event.ctrlKey)) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const selection = editor.getSelection();
|
|
143
|
+
if (selection.start !== selection.end) {
|
|
121
144
|
return;
|
|
122
145
|
}
|
|
123
|
-
|
|
146
|
+
if (!contentRoot) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const link = getLinkFromDomSelection(contentRoot);
|
|
150
|
+
if (!link) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
openForLink(link, { isEditing: true });
|
|
155
|
+
}
|
|
156
|
+
if (!contentRoot) {
|
|
157
|
+
return;
|
|
124
158
|
}
|
|
125
|
-
contentRoot.addEventListener("
|
|
159
|
+
contentRoot.addEventListener("keydown", handleKeyDown);
|
|
160
|
+
return () => {
|
|
161
|
+
contentRoot.removeEventListener("keydown", handleKeyDown);
|
|
162
|
+
};
|
|
163
|
+
}, [contentRoot, editor, openForLink]);
|
|
164
|
+
useEffect(() => {
|
|
165
|
+
function handleUpdate() {
|
|
166
|
+
if (stateRef.current.status !== "closed") {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const selection = editor.getSelection();
|
|
170
|
+
if (selection.start !== selection.end) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (!contentRoot) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const link = getLinkFromDomSelection(contentRoot);
|
|
177
|
+
if (!link) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
const href = link.getAttribute("href") ?? "";
|
|
181
|
+
if (href !== "") {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
openForLink(link, { isEditing: true });
|
|
185
|
+
}
|
|
186
|
+
const unsubscribeChange = editor.onChange(() => {
|
|
187
|
+
// Defer check to next frame so DOM selection has settled
|
|
188
|
+
requestAnimationFrame(() => handleUpdate());
|
|
189
|
+
});
|
|
190
|
+
const unsubscribeSelection = editor.onSelectionChange(() => {
|
|
191
|
+
requestAnimationFrame(() => handleUpdate());
|
|
192
|
+
});
|
|
193
|
+
handleUpdate();
|
|
126
194
|
return () => {
|
|
127
|
-
|
|
195
|
+
unsubscribeChange();
|
|
196
|
+
unsubscribeSelection();
|
|
128
197
|
};
|
|
129
|
-
}, [contentRoot, openForLink]);
|
|
198
|
+
}, [contentRoot, editor, openForLink]);
|
|
130
199
|
useEffect(() => {
|
|
131
200
|
if (state.status !== "open") {
|
|
132
201
|
return;
|
|
@@ -213,20 +282,20 @@ export function CakeLinkPopover({ editor }) {
|
|
|
213
282
|
handleCancel();
|
|
214
283
|
}
|
|
215
284
|
};
|
|
216
|
-
return (_jsx("div", { className: "cake-link-popover", ref: popoverRef, style: {
|
|
285
|
+
return (_jsx("div", { className: cx("cake-link-popover", styles?.popover), ref: popoverRef, style: {
|
|
217
286
|
position: "absolute",
|
|
218
287
|
top: state.position.top,
|
|
219
288
|
left: state.position.left,
|
|
220
289
|
pointerEvents: "auto",
|
|
221
|
-
}, onMouseDown: handleMouseDown, onClick: (event) => event.stopPropagation(), children: state.isEditing ? (_jsxs("form", { className: "cake-link-editor", onSubmit: (event) => {
|
|
290
|
+
}, onMouseDown: handleMouseDown, onClick: (event) => event.stopPropagation(), children: state.isEditing ? (_jsxs("form", { className: cx("cake-link-editor", styles?.editor), onSubmit: (event) => {
|
|
222
291
|
event.preventDefault();
|
|
223
292
|
handleSave();
|
|
224
|
-
}, children: [_jsx("input", { className: "cake-link-input", type: "text", value: state.draftUrl, ref: inputRef, onChange: (event) => {
|
|
293
|
+
}, children: [_jsx("input", { className: cx("cake-link-input", styles?.input), type: "text", value: state.draftUrl, ref: inputRef, onChange: (event) => {
|
|
225
294
|
setState((current) => {
|
|
226
295
|
if (current.status !== "open") {
|
|
227
296
|
return current;
|
|
228
297
|
}
|
|
229
298
|
return { ...current, draftUrl: event.target.value };
|
|
230
299
|
});
|
|
231
|
-
}, onKeyDown: handleInputKeyDown, placeholder: "https://" }), _jsx("button", { type: "submit", className: "cake-link-save", children: "Save" }), _jsx("button", { type: "button", className: "cake-link-cancel", onClick: handleCancel, children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: "cake-link-url", title: displayUrl, children: displayUrl }), _jsxs("div", { className: "cake-link-actions", children: [_jsx("button", { type: "button", className: "cake-link-icon-action", onClick: handleEdit, title: "Edit link", "aria-label": "Edit link", children: _jsx(Pencil, { className: "cake-link-icon" }) }), _jsx("button", { type: "button", className: "cake-link-icon-action", onClick: handleOpen, title: "Open link", "aria-label": "Open link", children: _jsx(ExternalLink, { className: "cake-link-icon" }) }), _jsx("button", { type: "button", className: "cake-link-icon-action", onClick: handleUnlink, title: "Remove link", "aria-label": "Remove link", children: _jsx(Unlink, { className: "cake-link-icon" }) })] })] })) }));
|
|
300
|
+
}, onKeyDown: handleInputKeyDown, placeholder: "https://" }), _jsx("button", { type: "submit", className: cx("cake-link-save", styles?.saveButton), children: "Save" }), _jsx("button", { type: "button", className: cx("cake-link-cancel", styles?.cancelButton), onClick: handleCancel, children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [_jsx("div", { className: cx("cake-link-url", styles?.url), title: displayUrl, children: displayUrl }), _jsxs("div", { className: cx("cake-link-actions", styles?.actions), children: [_jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleEdit, title: "Edit link", "aria-label": "Edit link", children: _jsx(Pencil, { className: cx("cake-link-icon", styles?.icon) }) }), _jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleOpen, title: "Open link", "aria-label": "Open link", children: _jsx(ExternalLink, { className: cx("cake-link-icon", styles?.icon) }) }), _jsx("button", { type: "button", className: cx("cake-link-icon-action", styles?.iconButton), onClick: handleUnlink, title: "Remove link", "aria-label": "Remove link", children: _jsx(Unlink, { className: cx("cake-link-icon", styles?.icon) }) })] })] })) }));
|
|
232
301
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type CakeExtension } from "../../core/runtime";
|
|
2
|
+
import type { CakeEditor } from "../../editor/cake-editor";
|
|
2
3
|
/** Command to wrap selected text in a link */
|
|
3
4
|
export type WrapLinkCommand = {
|
|
4
5
|
type: "wrap-link";
|
|
@@ -13,5 +14,25 @@ export type UnlinkCommand = {
|
|
|
13
14
|
};
|
|
14
15
|
/** All link extension commands */
|
|
15
16
|
export type LinkCommand = WrapLinkCommand | UnlinkCommand;
|
|
16
|
-
export
|
|
17
|
+
export type OnRequestLinkInput = (editor: CakeEditor) => Promise<{
|
|
18
|
+
url: string;
|
|
19
|
+
text: string;
|
|
20
|
+
} | null>;
|
|
21
|
+
export type LinkExtensionStyles = {
|
|
22
|
+
popover?: string;
|
|
23
|
+
editor?: string;
|
|
24
|
+
input?: string;
|
|
25
|
+
saveButton?: string;
|
|
26
|
+
cancelButton?: string;
|
|
27
|
+
url?: string;
|
|
28
|
+
actions?: string;
|
|
29
|
+
iconButton?: string;
|
|
30
|
+
icon?: string;
|
|
31
|
+
};
|
|
32
|
+
export type LinkExtensionOptions = {
|
|
33
|
+
onRequestLinkInput?: OnRequestLinkInput;
|
|
34
|
+
styles?: LinkExtensionStyles;
|
|
35
|
+
};
|
|
36
|
+
export declare function linkExtension(editor: CakeEditor): void | (() => void);
|
|
37
|
+
export declare function linkExtension(options?: LinkExtensionOptions): CakeExtension;
|
|
17
38
|
//# sourceMappingURL=link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../src/cake/extensions/link/link.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAGnB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D,8CAA8C;AAC9C,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wCAAwC;AACxC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,kCAAkC;AAClC,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC;AAE1D,MAAM,MAAM,kBAAkB,GAAG,CAC/B,MAAM,EAAE,UAAU,KACf,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAAC;AAEnD,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAqVF,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;AACvE,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC"}
|
|
@@ -1,10 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
2
|
import { CursorSourceBuilder } from "../../core/mapping/cursor-source-map";
|
|
2
3
|
import { CakeLinkPopover } from "./link-popover";
|
|
3
4
|
import { getDocLines } from "../../editor/selection/selection-layout";
|
|
4
5
|
import { cursorOffsetToVisibleOffset, getVisibleText, } from "../../editor/selection/visible-text";
|
|
5
6
|
import { ensureHttpsProtocol, isUrl } from "../../shared/url";
|
|
6
7
|
const LINK_KIND = "link";
|
|
7
|
-
|
|
8
|
+
function isDomSelectionInsideLink(editor) {
|
|
9
|
+
if (typeof window === "undefined") {
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
const contentRoot = editor.getContentRoot();
|
|
13
|
+
if (!contentRoot) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
const selection = window.getSelection();
|
|
17
|
+
const focusNode = selection?.focusNode ?? null;
|
|
18
|
+
const focusElement = focusNode instanceof Element ? focusNode : focusNode?.parentElement ?? null;
|
|
19
|
+
if (!focusElement || !contentRoot.contains(focusElement)) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
const link = focusElement.closest("a.cake-link");
|
|
23
|
+
return link instanceof HTMLAnchorElement;
|
|
24
|
+
}
|
|
25
|
+
function installLinkExtension(editor, options) {
|
|
8
26
|
const disposers = [];
|
|
9
27
|
disposers.push(editor.registerInlineWrapperAffinity([
|
|
10
28
|
{ kind: LINK_KIND, inclusive: false },
|
|
@@ -15,10 +33,27 @@ export const linkExtension = (editor) => {
|
|
|
15
33
|
meta: true,
|
|
16
34
|
shift: true,
|
|
17
35
|
command: (state) => {
|
|
18
|
-
if (state.selection.start
|
|
36
|
+
if (state.selection.start !== state.selection.end) {
|
|
37
|
+
return { type: "wrap-link", openPopover: true };
|
|
38
|
+
}
|
|
39
|
+
if (isDomSelectionInsideLink(editor)) {
|
|
40
|
+
return { type: "noop" };
|
|
41
|
+
}
|
|
42
|
+
if (!options.onRequestLinkInput) {
|
|
19
43
|
return null;
|
|
20
44
|
}
|
|
21
|
-
|
|
45
|
+
options
|
|
46
|
+
.onRequestLinkInput(editor)
|
|
47
|
+
.then((result) => {
|
|
48
|
+
if (!result) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
editor.executeCommand({ type: "insert", text: `[${result.text}](${result.url})` }, { restoreFocus: true });
|
|
52
|
+
})
|
|
53
|
+
.catch(() => {
|
|
54
|
+
// Treat as cancel.
|
|
55
|
+
});
|
|
56
|
+
return { type: "noop" };
|
|
22
57
|
},
|
|
23
58
|
},
|
|
24
59
|
{
|
|
@@ -26,10 +61,27 @@ export const linkExtension = (editor) => {
|
|
|
26
61
|
ctrl: true,
|
|
27
62
|
shift: true,
|
|
28
63
|
command: (state) => {
|
|
29
|
-
if (state.selection.start
|
|
64
|
+
if (state.selection.start !== state.selection.end) {
|
|
65
|
+
return { type: "wrap-link", openPopover: true };
|
|
66
|
+
}
|
|
67
|
+
if (isDomSelectionInsideLink(editor)) {
|
|
68
|
+
return { type: "noop" };
|
|
69
|
+
}
|
|
70
|
+
if (!options.onRequestLinkInput) {
|
|
30
71
|
return null;
|
|
31
72
|
}
|
|
32
|
-
|
|
73
|
+
options
|
|
74
|
+
.onRequestLinkInput(editor)
|
|
75
|
+
.then((result) => {
|
|
76
|
+
if (!result) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
editor.executeCommand({ type: "insert", text: `[${result.text}](${result.url})` }, { restoreFocus: true });
|
|
80
|
+
})
|
|
81
|
+
.catch(() => {
|
|
82
|
+
// Treat as cancel.
|
|
83
|
+
});
|
|
84
|
+
return { type: "noop" };
|
|
33
85
|
},
|
|
34
86
|
},
|
|
35
87
|
]));
|
|
@@ -81,6 +133,20 @@ export const linkExtension = (editor) => {
|
|
|
81
133
|
const cursorStart = Math.min(selection.start, selection.end);
|
|
82
134
|
const cursorEnd = Math.max(selection.start, selection.end);
|
|
83
135
|
if (cursorStart === cursorEnd) {
|
|
136
|
+
// Collapsed selection - trigger callback if available
|
|
137
|
+
if (options.onRequestLinkInput && !isDomSelectionInsideLink(editor)) {
|
|
138
|
+
options
|
|
139
|
+
.onRequestLinkInput(editor)
|
|
140
|
+
.then((result) => {
|
|
141
|
+
if (!result) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
editor.executeCommand({ type: "insert", text: `[${result.text}](${result.url})` }, { restoreFocus: true });
|
|
145
|
+
})
|
|
146
|
+
.catch(() => {
|
|
147
|
+
// Treat as cancel.
|
|
148
|
+
});
|
|
149
|
+
}
|
|
84
150
|
return null;
|
|
85
151
|
}
|
|
86
152
|
const from = state.map.cursorToSource(cursorStart, "forward");
|
|
@@ -193,9 +259,18 @@ export const linkExtension = (editor) => {
|
|
|
193
259
|
}
|
|
194
260
|
return element;
|
|
195
261
|
}));
|
|
196
|
-
|
|
262
|
+
const LinkPopoverUI = ({ editor }) => (_jsx(CakeLinkPopover, { editor: editor, styles: options.styles }));
|
|
263
|
+
disposers.push(editor.registerUI(LinkPopoverUI));
|
|
197
264
|
return () => disposers
|
|
198
265
|
.splice(0)
|
|
199
266
|
.reverse()
|
|
200
267
|
.forEach((d) => d());
|
|
201
|
-
}
|
|
268
|
+
}
|
|
269
|
+
;
|
|
270
|
+
export function linkExtension(arg) {
|
|
271
|
+
if (arg && typeof arg === "object" && "registerKeybindings" in arg) {
|
|
272
|
+
return installLinkExtension(arg, {});
|
|
273
|
+
}
|
|
274
|
+
const options = (arg ?? {});
|
|
275
|
+
return (editor) => installLinkExtension(editor, options);
|
|
276
|
+
}
|