@cocoar/vue-markdown-editor 1.13.0-beta.6 → 1.13.0
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/CoarMarkdownEditor.vue.d.ts +6 -6
- package/dist/CoarMarkdownEditor.vue.d.ts.map +1 -1
- package/dist/code-block-view/CodeBlockNodeView.d.ts +64 -0
- package/dist/code-block-view/CodeBlockNodeView.d.ts.map +1 -0
- package/dist/code-block-view/CodeBlockShell.vue.d.ts +21 -0
- package/dist/code-block-view/CodeBlockShell.vue.d.ts.map +1 -0
- package/dist/code-block-view/index.d.ts +16 -0
- package/dist/code-block-view/index.d.ts.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.js +364 -228
- package/dist/toolbar-helpers.d.ts.map +1 -1
- package/package.json +4 -2
|
@@ -118,16 +118,16 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
|
|
|
118
118
|
}>> & Readonly<{
|
|
119
119
|
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
120
120
|
}>, {
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
name: string;
|
|
122
|
+
modelValue: string;
|
|
123
123
|
disabled: boolean;
|
|
124
|
+
readonly: boolean;
|
|
125
|
+
error: boolean;
|
|
126
|
+
id: string;
|
|
127
|
+
required: boolean;
|
|
124
128
|
toolbarMode: CoarMarkdownEditorToolbarMode;
|
|
125
129
|
toolbarPosition: CoarMarkdownEditorToolbarPosition;
|
|
126
130
|
tools: CoarMarkdownEditorTool[];
|
|
127
|
-
name: string;
|
|
128
|
-
error: boolean;
|
|
129
|
-
id: string;
|
|
130
|
-
modelValue: string;
|
|
131
131
|
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
132
132
|
export default _default;
|
|
133
133
|
//# sourceMappingURL=CoarMarkdownEditor.vue.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CoarMarkdownEditor.vue.d.ts","sourceRoot":"","sources":["../src/CoarMarkdownEditor.vue"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"CoarMarkdownEditor.vue.d.ts","sourceRoot":"","sources":["../src/CoarMarkdownEditor.vue"],"names":[],"mappings":"AA6tCA,OAAO,EAGL,KAAK,QAAQ,EACd,MAAM,KAAK,CAAC;AA8Bb,MAAM,MAAM,6BAA6B,GAAG,UAAU,GAAG,OAAO,GAAG,MAAM,CAAC;AAC1E,MAAM,MAAM,iCAAiC,GAAG,MAAM,GAAG,OAAO,CAAC;AAEjE;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAC9B,MAAM,GAAG,QAAQ,GAAG,eAAe,GAAG,YAAY,GAClD,UAAU,GACV,YAAY,GAAG,aAAa,GAAG,UAAU,GACzC,QAAQ,GAAG,SAAS,GACpB,YAAY,GAAG,gBAAgB,GAC/B,WAAW,GAAG,OAAO,GAAG,UAAU,GAClC,iBAAiB,GACjB,MAAM,GAAG,MAAM,CAAC;AAEpB;iFACiF;AACjF,eAAO,MAAM,8BAA8B,EAAE,SAAS,sBAAsB,EAS3E,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,yFAAyF;IACzF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,6BAA6B,CAAC;IAC5C,eAAe,CAAC,EAAE,iCAAiC,CAAC;IACpD;;;;OAIG;IACH,KAAK,CAAC,EAAE,sBAAsB,EAAE,CAAC;CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAu0BkC,QAAQ,CAAC,6BAA6B,CAAC;;;;cACnC,QAAQ,CAAC,iCAAiC,CAAC;;;;cACtD,QAAQ,CAAC,sBAAsB,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAF3B,QAAQ,CAAC,6BAA6B,CAAC;;;;cACnC,QAAQ,CAAC,iCAAiC,CAAC;;;;cACtD,QAAQ,CAAC,sBAAsB,EAAE,CAAC;;;;;;;;;;;;;;;;;AAZ9D,wBAmDG"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Node as ProseNode } from '@milkdown/prose/model';
|
|
2
|
+
import { EditorView, NodeView, ViewMutationRecord } from '@milkdown/prose/view';
|
|
3
|
+
/**
|
|
4
|
+
* Module-scope registry of currently-mounted CodeBlockViews. Populated by
|
|
5
|
+
* each instance's constructor and pruned by `destroy()`. The companion plugin
|
|
6
|
+
* (`codeBlockSelectionWatcherPlugin`) iterates this set on every PM
|
|
7
|
+
* transaction to keep the `editing` ref in sync with the cursor position.
|
|
8
|
+
*
|
|
9
|
+
* Lives at module scope rather than in a ctx slice because the lifecycle is
|
|
10
|
+
* trivially constructor/destructor-bound and there's no per-editor state to
|
|
11
|
+
* isolate — multiple editors on the same page share the registry but each
|
|
12
|
+
* NodeView only ever reacts to its own `view` reference.
|
|
13
|
+
*/
|
|
14
|
+
export declare const activeCodeBlockViews: Set<CodeBlockView>;
|
|
15
|
+
export declare class CodeBlockView implements NodeView {
|
|
16
|
+
node: ProseNode;
|
|
17
|
+
view: EditorView;
|
|
18
|
+
getPos: () => number | undefined;
|
|
19
|
+
/** Outer container PM mounts into the document. */
|
|
20
|
+
dom: HTMLElement;
|
|
21
|
+
/** Editable `<code>` element PM writes into. Lives inside the edit-mode slot. */
|
|
22
|
+
contentDOM: HTMLElement;
|
|
23
|
+
private readonly app;
|
|
24
|
+
private readonly text;
|
|
25
|
+
private readonly language;
|
|
26
|
+
private readonly editing;
|
|
27
|
+
constructor(node: ProseNode, view: EditorView, getPos: () => number | undefined);
|
|
28
|
+
/**
|
|
29
|
+
* PM calls this when the node attrs or content changed. Returning `true`
|
|
30
|
+
* keeps the existing NodeView instance; `false` would force PM to throw
|
|
31
|
+
* away this view and create a new one.
|
|
32
|
+
*/
|
|
33
|
+
update(node: ProseNode): boolean;
|
|
34
|
+
/** PM marks this node as the active selection — switch to edit mode. */
|
|
35
|
+
selectNode(): void;
|
|
36
|
+
/** PM moved selection elsewhere — switch back to render mode. */
|
|
37
|
+
deselectNode(): void;
|
|
38
|
+
destroy(): void;
|
|
39
|
+
/**
|
|
40
|
+
* Called by the editor-level selection watcher whenever PM's selection
|
|
41
|
+
* changes. Recomputes `editing` based on whether the new selection lands
|
|
42
|
+
* inside this node's range. PM's own `selectNode`/`deselectNode` only fire
|
|
43
|
+
* for NodeSelections, not TextSelections — and the user's natural cursor
|
|
44
|
+
* placement (clicking into the code block, arrow keys) is a TextSelection,
|
|
45
|
+
* so we can't rely on those alone.
|
|
46
|
+
*/
|
|
47
|
+
notifySelectionChanged(): void;
|
|
48
|
+
/**
|
|
49
|
+
* PM asks "should I ignore this DOM event?". For code-block child events
|
|
50
|
+
* (typing, paste, etc.) we want PM to handle them, so return false.
|
|
51
|
+
* Returning true would block PM from seeing the event.
|
|
52
|
+
*/
|
|
53
|
+
stopEvent(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* PM asks "should I ignore this DOM mutation?". Mutations inside our
|
|
56
|
+
* Vue chrome (re-renders, hover state changes) are not interesting to PM
|
|
57
|
+
* — return true to skip them. Mutations inside contentDOM are PM's
|
|
58
|
+
* business; we let them through (PM checks the target itself).
|
|
59
|
+
*/
|
|
60
|
+
ignoreMutation(mutation: ViewMutationRecord): boolean;
|
|
61
|
+
private handleEnterEdit;
|
|
62
|
+
private handleLanguageChange;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=CodeBlockNodeView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockNodeView.d.ts","sourceRoot":"","sources":["../../src/code-block-view/CodeBlockNodeView.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAI9B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,oBAA2B,CAAC;AAE7D,qBAAa,aAAc,YAAW,QAAQ;IAYnC,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAbzC,mDAAmD;IACnD,GAAG,EAAE,WAAW,CAAC;IACjB,iFAAiF;IACjF,UAAU,EAAE,WAAW,CAAC;IAExB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;gBAG7B,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAuCzC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAQhC,wEAAwE;IACxE,UAAU,IAAI,IAAI;IAQlB,iEAAiE;IACjE,YAAY,IAAI,IAAI;IAIpB,OAAO,IAAI,IAAI;IAKf;;;;;;;OAOG;IACH,sBAAsB,IAAI,IAAI;IAc9B;;;;OAIG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;OAKG;IACH,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO;IASrD,OAAO,CAAC,eAAe,CAWrB;IAEF,OAAO,CAAC,oBAAoB,CAM1B;CACH"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
type __VLS_Props = {
|
|
2
|
+
/** Current code text (live-mirrored from the PM node). */
|
|
3
|
+
text: string;
|
|
4
|
+
/** Current language attribute (live-mirrored from the PM node). */
|
|
5
|
+
language: string;
|
|
6
|
+
/** True when the cursor is inside this code block. */
|
|
7
|
+
editing: boolean;
|
|
8
|
+
/** PM's `contentDOM` element — the NodeView creates it; the shell adopts it. */
|
|
9
|
+
contentDOM: HTMLElement | null;
|
|
10
|
+
};
|
|
11
|
+
declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
|
|
12
|
+
enterEdit: () => any;
|
|
13
|
+
languageChange: (args_0: string) => any;
|
|
14
|
+
}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
15
|
+
onEnterEdit?: (() => any) | undefined;
|
|
16
|
+
onLanguageChange?: ((args_0: string) => any) | undefined;
|
|
17
|
+
}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {
|
|
18
|
+
contentMount: HTMLDivElement;
|
|
19
|
+
}, HTMLDivElement>;
|
|
20
|
+
export default _default;
|
|
21
|
+
//# sourceMappingURL=CodeBlockShell.vue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeBlockShell.vue.d.ts","sourceRoot":"","sources":["../../src/code-block-view/CodeBlockShell.vue"],"names":[],"mappings":"AAiOA,KAAK,WAAW,GAAG;IACjB,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,UAAU,EAAE,WAAW,GAAG,IAAI,CAAC;CAChC,CAAC;;;;;;;;;;AAsKF,wBASG"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CodeBlockView } from './CodeBlockNodeView';
|
|
2
|
+
export declare const codeBlockNodeViewPlugin: import('@milkdown/utils').$View<import('@milkdown/utils').$Node, (node: import('@milkdown/prose/model').Node, view: import('@milkdown/prose/view').EditorView, getPos: () => number | undefined) => CodeBlockView>;
|
|
3
|
+
/**
|
|
4
|
+
* Editor-level PM plugin: on every transaction whose selection actually
|
|
5
|
+
* changed, ping each mounted `CodeBlockView` so it can recompute its
|
|
6
|
+
* `editing` flag. The pre-flight selection comparison keeps work down to
|
|
7
|
+
* the strict minimum — no DOM walks, no allocations on text-only edits.
|
|
8
|
+
*/
|
|
9
|
+
export declare const codeBlockSelectionWatcherPlugin: import('@milkdown/utils').$Prose;
|
|
10
|
+
/**
|
|
11
|
+
* Combined bundle — register both with one `.use(codeBlockNodeView)` call.
|
|
12
|
+
*/
|
|
13
|
+
export declare const codeBlockNodeView: (import('@milkdown/utils').$View<import('@milkdown/utils').$Node, (node: import('@milkdown/prose/model').Node, view: import('@milkdown/prose/view').EditorView, getPos: () => number | undefined) => CodeBlockView> | import('@milkdown/utils').$Prose)[];
|
|
14
|
+
export { CodeBlockView, activeCodeBlockViews } from './CodeBlockNodeView';
|
|
15
|
+
export { default as CodeBlockShell } from './CodeBlockShell.vue';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/code-block-view/index.ts"],"names":[],"mappings":"AAaA,OAAO,EAAwB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAE1E,eAAO,MAAM,uBAAuB,oNAGnC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B,kCAc3C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,2PAGtB,CAAC;AAET,OAAO,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/index.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.coar-md-root{background:var(--coar-background-neutral-primary);height:100%;color:var(--coar-text-neutral-primary);flex-direction:row;display:flex;overflow:hidden}.coar-md-root--disabled{opacity:.55;cursor:not-allowed}.coar-md-root--disabled .coar-md-area .milkdown{pointer-events:none}.coar-md-root--error{outline:1px solid var(--coar-text-semantic-error-bold,#b91c1c);outline-offset:-1px}.coar-md-sidebar-wrap{border-right:1px solid var(--coar-border-neutral);--coar-sidebar-collapsed-width:2.25rem;--coar-sidebar-item-padding:.25rem .375rem;flex-shrink:0}.coar-md-root>.coar-md-area~.coar-md-sidebar-wrap{border-right:none;border-left:1px solid var(--coar-border-neutral)}.coar-md-area{padding:var(--coar-spacing-s) var(--coar-spacing-m);cursor:text;flex:1;overflow:auto}.coar-md-area .milkdown,.coar-md-area .milkdown .editor,.coar-md-area .milkdown [contenteditable]{outline:none}.coar-md-area .milkdown h1{margin:.5em 0 .3em;font-size:1.75em;font-weight:700;line-height:1.2}.coar-md-area .milkdown h2{margin:.5em 0 .3em;font-size:1.35em;font-weight:600;line-height:1.3}.coar-md-area .milkdown h3{margin:.4em 0 .2em;font-size:1.1em;font-weight:600}.coar-md-area .milkdown p{margin:.4em 0;line-height:1.5}.coar-md-area .milkdown ul,.coar-md-area .milkdown ol{margin:.4em 0;padding-left:1.5em}.coar-md-area .milkdown li{margin:.15em 0}.coar-md-area .milkdown blockquote{padding:.25em var(--coar-spacing-m);border-left:3px solid var(--coar-border-neutral);color:var(--coar-text-neutral-secondary);margin:.5em 0}.coar-md-area .milkdown code{background:var(--coar-background-neutral-secondary);border-radius:var(--coar-radius-s);padding:.15em .4em;font-size:.9em}.coar-md-area .milkdown pre{background:var(--coar-background-neutral-secondary);padding:var(--coar-spacing-s) var(--coar-spacing-m);border-radius:var(--coar-radius-xl);margin:.5em 0;overflow-x:auto}.coar-md-area .milkdown pre code{background:0 0;padding:0}.coar-md-area .milkdown table{border-collapse:collapse;width:100%;margin:.5em 0}.coar-md-area .milkdown th,.coar-md-area .milkdown td{border:1px solid var(--coar-border-neutral);padding:var(--coar-spacing-xs) var(--coar-spacing-s);text-align:left}.coar-md-area .milkdown th{background:var(--coar-background-neutral-secondary);font-weight:600}.coar-md-area .milkdown hr{border:none;border-top:1px solid var(--coar-border-neutral);margin:1em 0}.coar-md-area .milkdown a{color:var(--coar-text-accent-primary);text-decoration:underline}.coar-md-area .milkdown strong{font-weight:600}.coar-md-area .milkdown del{text-decoration:line-through}.coar-md-area .milkdown li[data-item-type=task]{margin-left:-1.25em;padding-left:1.5em;list-style:none;position:relative}.coar-md-area .milkdown li[data-item-type=task]:before{content:"";border:1.5px solid var(--coar-border-neutral-secondary,var(--coar-border-neutral));border-radius:var(--coar-radius-xs,2px);background:var(--coar-background-neutral-primary);cursor:pointer;box-sizing:border-box;width:14px;height:14px;transition:background-color .1s,border-color .1s;position:absolute;top:.45em;left:0}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]:before{background:var(--coar-background-accent-primary);border-color:var(--coar-background-accent-primary)}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]:after{content:"";border-left:2px solid var(--coar-text-on-bold,#fff);border-bottom:2px solid var(--coar-text-on-bold,#fff);pointer-events:none;width:8px;height:5px;position:absolute;top:calc(.45em + 2px);left:3px;transform:rotate(-45deg)}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]>p{color:var(--coar-text-neutral-tertiary);text-decoration:line-through}.coar-md-area .milkdown li[data-item-type=task] input[type=checkbox]{display:none}.coar-md-floating-toolbar{padding:var(--coar-spacing-xs) 6px;background:var(--coar-background-neutral-primary);border:1px solid var(--coar-border-neutral);border-radius:var(--coar-radius-xl);box-shadow:var(--coar-shadow-m,0 4px 12px #0000001f);z-index:10000;gap:2px;animation:.12s ease-out coar-md-float-in;display:flex;position:fixed;transform:translate(-50%,-100%)}.coar-md-float-btn{border-radius:var(--coar-radius-s);width:30px;height:30px;color:var(--coar-text-neutral-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex}.coar-md-float-btn:hover{background:var(--coar-background-neutral-tertiary);color:var(--coar-text-neutral-primary)}.coar-md-float-btn:active,.coar-md-float-btn--active{background:var(--coar-background-accent-tertiary);color:var(--coar-text-accent-primary)}.coar-md-float-btn--disabled,.coar-md-float-btn:disabled{opacity:.4;cursor:not-allowed}.coar-md-float-btn--disabled:hover,.coar-md-float-btn:disabled:hover{color:var(--coar-text-neutral-secondary);background:0 0}.coar-md-float-sep{background:var(--coar-border-neutral);align-self:center;width:1px;height:18px;margin:0 2px}.coar-md-float-dropdown{position:relative}.coar-md-float-submenu{padding:var(--coar-spacing-xs);background:var(--coar-background-neutral-primary);border:1px solid var(--coar-border-neutral);border-radius:var(--coar-radius-xl);box-shadow:var(--coar-shadow-m,0 4px 12px #0000001f);z-index:10001;flex-direction:column;min-width:140px;animation:.1s ease-out coar-md-float-in;display:flex;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.coar-md-float-submenu-item{align-items:center;gap:var(--coar-spacing-s);border-radius:var(--coar-radius-m);width:100%;color:var(--coar-text-neutral-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;text-align:left;background:0 0;border:none;padding:6px 10px;font-size:13px;display:flex}.coar-md-float-submenu-item:hover{background:var(--coar-background-neutral-tertiary);color:var(--coar-text-neutral-primary)}.coar-md-float-submenu-item:active,.coar-md-float-submenu-item--active{background:var(--coar-background-accent-tertiary);color:var(--coar-text-accent-primary)}@keyframes coar-md-float-in{0%{opacity:0;transform:translate(-50%,-100%)translateY(4px)}to{opacity:1;transform:translate(-50%,-100%)translateY(0)}}
|
|
1
|
+
.coar-md-code-host{border-radius:var(--coar-radius-s);border:1px solid var(--coar-code-block-border,var(--coar-border-neutral));background:var(--coar-code-block-bg,var(--coar-background-neutral-secondary));margin:.75em 0;position:relative;overflow:hidden}.coar-md-code-host--editing{border-color:var(--coar-background-accent-primary)}.coar-md-code-render{position:relative}.coar-md-code-edit-btn{color:var(--coar-text-neutral-secondary);background:var(--coar-background-neutral-primary);border:1px solid var(--coar-border-neutral);border-radius:var(--coar-radius-s);cursor:pointer;opacity:0;z-index:1;align-items:center;gap:.25rem;padding:.25rem .5rem;font-size:.75rem;font-weight:500;transition:opacity .12s ease-out;display:inline-flex;position:absolute;top:.5rem;right:.5rem}.coar-md-code-render:hover .coar-md-code-edit-btn,.coar-md-code-edit-btn:focus-visible{opacity:1}.coar-md-code-edit-btn:hover{background:var(--coar-background-neutral-tertiary);color:var(--coar-text-neutral-primary)}.coar-md-code-lang-row{align-items:center;gap:var(--coar-spacing-s);padding:var(--coar-spacing-s) .75rem;border-bottom:1px solid var(--coar-code-block-border,var(--coar-border-neutral));background:var(--coar-code-block-header-bg,var(--coar-background-neutral-tertiary));min-height:36px;display:flex}.coar-md-code-lang-select{--coar-select-bg:transparent;--coar-select-border:transparent}.coar-md-code-content{padding:var(--coar-spacing-s) .75rem;font-family:var(--coar-font-family-code,"Cascadia Code", Consolas, Monaco, monospace);font-size:var(--coar-component-s-font-size,.85em);line-height:1.5}.coar-md-code-content>pre{white-space:pre-wrap;font-family:inherit;font-size:inherit;background:0 0;margin:0;padding:0}.coar-md-code-content>pre>code{white-space:inherit;outline:none;font-family:inherit;display:block}.coar-markdown{--coar-markdown-text:var(--coar-text-neutral-primary);--coar-markdown-link:var(--coar-text-brand-primary,var(--coar-text-neutral-primary));--coar-markdown-muted-text:var(--coar-text-neutral-tertiary);--coar-markdown-border:var(--coar-border-neutral-tertiary);--coar-markdown-surface:var(--coar-background-neutral-primary);--coar-markdown-surface-muted:var(--coar-background-neutral-tertiary,var(--coar-background-neutral-primary));--coar-markdown-radius:var(--coar-radius-xs);--coar-markdown-space-1:var(--coar-spacing-s,.5rem);--coar-markdown-space-2:var(--coar-spacing-m,1rem);--coar-markdown-heading-block-start:var(--coar-spacing-xxxl,4rem);color:var(--coar-markdown-text);display:block}.coar-markdown :where(h1,h2,h3,h4,h5,h6){font-family:var(--coar-font-family-title,inherit);color:var(--coar-markdown-text)}.coar-markdown h1{font-size:var(--coar-font-size-xl);font-weight:var(--coar-font-weight-bold);line-height:var(--coar-line-height-tight)}.coar-markdown h2{font-size:var(--coar-font-size-l);font-weight:var(--coar-font-weight-bold);line-height:1.25}.coar-markdown h3{font-size:var(--coar-font-size-m);font-weight:var(--coar-font-weight-semi-bold);line-height:var(--coar-line-height-snug)}.coar-markdown h4{font-size:var(--coar-font-size-s);font-weight:var(--coar-font-weight-semi-bold);line-height:1.35}.coar-markdown h5{font-size:var(--coar-font-size-xs);font-weight:var(--coar-font-weight-semi-bold);line-height:var(--coar-line-height-normal)}.coar-markdown h6{font-size:var(--coar-font-size-xxs);font-weight:var(--coar-font-weight-medium);line-height:1.45}.coar-markdown-heading,.coar-markdown-paragraph,.coar-markdown-blockquote,.coar-markdown-list,.coar-markdown-code-block,.coar-markdown-table,.coar-markdown-hr{margin:0}.coar-markdown>:where(h1,h2,h3,h4,h5,h6,p,blockquote,ul,ol,pre,table,hr,.coar-code-block-host,.coar-table-host){margin-block:0 var(--coar-markdown-space-2)}.coar-markdown>:where(h1,h2,h3,h4,h5,h6){margin-block-start:var(--coar-markdown-heading-block-start)}.coar-markdown>:where(h1,h2,h3,h4,h5,h6)+:where(h1,h2,h3,h4,h5,h6){margin-block-start:var(--coar-markdown-space-1)}.coar-markdown>:where(h1,h2,h3,h4,h5,h6):first-child{margin-block-start:0}.coar-markdown-blockquote{padding-inline:var(--coar-markdown-space-2);border-left:2px solid var(--coar-markdown-border)}.coar-markdown-list{padding-inline-start:var(--coar-spacing-l,1.5rem);list-style-position:outside}.coar-markdown-list--unordered{list-style-type:disc}.coar-markdown-list--ordered{list-style-type:decimal}.coar-markdown-list-item{margin-block:.25em;display:list-item}.coar-markdown-list-item--task{align-items:flex-start;gap:var(--coar-spacing-s,.5rem);list-style:none;display:flex}.coar-markdown-list-item-content{min-width:0}.coar-markdown-task-checkbox{margin-top:.15em}.coar-markdown-code-block,.coar-markdown-code{display:block}.coar-markdown-inline-code{color:var(--coar-text-accent-secondary,var(--coar-markdown-link));background:0 0;border:0;border-radius:0;padding:0}.coar-markdown-link{color:var(--coar-markdown-link);text-decoration:underline}.coar-markdown-image{vertical-align:middle;max-width:100%;height:auto}.coar-markdown :where(table),.coar-markdown-table{border-collapse:collapse;border-spacing:0;width:100%;font-size:var(--coar-body-small-base-size,.9rem);line-height:var(--coar-line-height-relaxed,1.5);display:table}.coar-markdown :where(table thead),.coar-markdown-table>thead{background:var(--coar-markdown-surface-muted)}.coar-markdown :where(table th),.coar-markdown-table>thead th{padding:.625rem var(--coar-markdown-space-2);text-align:left;vertical-align:top;font-weight:var(--coar-font-weight-semi-bold,600);font-size:var(--coar-component-s-font-size,.85em);color:var(--coar-markdown-text);border-bottom:1px solid var(--coar-markdown-border);text-transform:uppercase;letter-spacing:.025em}.coar-markdown :where(table td),.coar-markdown-table>tbody td{padding:.625rem var(--coar-markdown-space-2);text-align:left;vertical-align:top;color:var(--coar-text-neutral-secondary,var(--coar-markdown-text));border-bottom:1px solid var(--coar-markdown-border)}.coar-markdown :where(table tbody tr:nth-child(odd)),.coar-markdown-table>tbody tr:nth-child(odd){background:var(--coar-markdown-surface)}.coar-markdown :where(table tbody tr:nth-child(2n)),.coar-markdown-table>tbody tr:nth-child(2n){background:var(--coar-markdown-surface-muted)}.coar-markdown :where(table tbody tr:last-child td),.coar-markdown-table>tbody tr:last-child td{border-bottom:0}.coar-markdown-table-cell{padding:var(--coar-markdown-space-1);vertical-align:top;border-right:1px solid var(--coar-markdown-border);border-bottom:1px solid var(--coar-markdown-border)}.coar-markdown-hr{border:0;border-top:1px solid var(--coar-markdown-border)}.coar-markdown-unsupported,.coar-markdown-unsupported-inline{color:var(--coar-markdown-muted-text);font-style:italic}.coar-markdown-unsupported{padding:var(--coar-markdown-space-1);border:1px dashed var(--coar-markdown-border);border-radius:var(--coar-markdown-radius);background:var(--coar-markdown-surface)}.coar-md-root{background:var(--coar-background-neutral-primary);height:100%;color:var(--coar-text-neutral-primary);flex-direction:row;display:flex;overflow:hidden}.coar-md-root--disabled{opacity:.55;cursor:not-allowed}.coar-md-root--disabled .coar-md-area .milkdown{pointer-events:none}.coar-md-root--error{outline:1px solid var(--coar-text-semantic-error-bold,#b91c1c);outline-offset:-1px}.coar-md-sidebar-wrap{border-right:1px solid var(--coar-border-neutral);--coar-sidebar-collapsed-width:2.25rem;--coar-sidebar-item-padding:.25rem .375rem;flex-shrink:0}.coar-md-root>.coar-md-area~.coar-md-sidebar-wrap{border-right:none;border-left:1px solid var(--coar-border-neutral)}.coar-md-area{padding:var(--coar-spacing-s) var(--coar-spacing-m);cursor:text;flex:1;overflow:auto}.coar-md-area .milkdown,.coar-md-area .milkdown .editor,.coar-md-area .milkdown [contenteditable]{outline:none}.coar-md-area .milkdown h1{margin:.5em 0 .3em;font-size:1.75em;font-weight:700;line-height:1.2}.coar-md-area .milkdown h2{margin:.5em 0 .3em;font-size:1.35em;font-weight:600;line-height:1.3}.coar-md-area .milkdown h3{margin:.4em 0 .2em;font-size:1.1em;font-weight:600}.coar-md-area .milkdown p{margin:.4em 0;line-height:1.5}.coar-md-area .milkdown ul,.coar-md-area .milkdown ol{margin:.4em 0;padding-left:1.5em}.coar-md-area .milkdown li{margin:.15em 0}.coar-md-area .milkdown blockquote{padding:.25em var(--coar-spacing-m);border-left:3px solid var(--coar-border-neutral);color:var(--coar-text-neutral-secondary);margin:.5em 0}.coar-md-area .milkdown code{background:var(--coar-background-neutral-secondary);border-radius:var(--coar-radius-s);padding:.15em .4em;font-size:.9em}.coar-md-area .milkdown pre{background:var(--coar-background-neutral-secondary);padding:var(--coar-spacing-s) var(--coar-spacing-m);border-radius:var(--coar-radius-xl);margin:.5em 0;overflow-x:auto}.coar-md-area .milkdown pre code{background:0 0;padding:0}.coar-md-area .milkdown table{border-collapse:collapse;width:100%;margin:.5em 0}.coar-md-area .milkdown th,.coar-md-area .milkdown td{border:1px solid var(--coar-border-neutral);padding:var(--coar-spacing-xs) var(--coar-spacing-s);text-align:left}.coar-md-area .milkdown th{background:var(--coar-background-neutral-secondary);font-weight:600}.coar-md-area .milkdown hr{border:none;border-top:1px solid var(--coar-border-neutral);margin:1em 0}.coar-md-area .milkdown a{color:var(--coar-text-accent-primary);text-decoration:underline}.coar-md-area .milkdown strong{font-weight:600}.coar-md-area .milkdown del{text-decoration:line-through}.coar-md-area .milkdown li[data-item-type=task]{margin-left:-1.25em;padding-left:1.5em;list-style:none;position:relative}.coar-md-area .milkdown li[data-item-type=task]:before{content:"";border:1.5px solid var(--coar-border-neutral-secondary,var(--coar-border-neutral));border-radius:var(--coar-radius-xs,2px);background:var(--coar-background-neutral-primary);cursor:pointer;box-sizing:border-box;width:14px;height:14px;transition:background-color .1s,border-color .1s;position:absolute;top:.45em;left:0}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]:before{background:var(--coar-background-accent-primary);border-color:var(--coar-background-accent-primary)}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]:after{content:"";border-left:2px solid var(--coar-text-on-bold,#fff);border-bottom:2px solid var(--coar-text-on-bold,#fff);pointer-events:none;width:8px;height:5px;position:absolute;top:calc(.45em + 2px);left:3px;transform:rotate(-45deg)}.coar-md-area .milkdown li[data-item-type=task][data-checked=true]>p{color:var(--coar-text-neutral-tertiary);text-decoration:line-through}.coar-md-area .milkdown li[data-item-type=task] input[type=checkbox]{display:none}.coar-md-floating-toolbar{padding:var(--coar-spacing-xs) 6px;background:var(--coar-background-neutral-primary);border:1px solid var(--coar-border-neutral);border-radius:var(--coar-radius-xl);box-shadow:var(--coar-shadow-m,0 4px 12px #0000001f);z-index:10000;gap:2px;animation:.12s ease-out coar-md-float-in;display:flex;position:fixed;transform:translate(-50%,-100%)}.coar-md-float-btn{border-radius:var(--coar-radius-s);width:30px;height:30px;color:var(--coar-text-neutral-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;justify-content:center;align-items:center;padding:0;display:flex}.coar-md-float-btn:hover{background:var(--coar-background-neutral-tertiary);color:var(--coar-text-neutral-primary)}.coar-md-float-btn:active,.coar-md-float-btn--active{background:var(--coar-background-accent-tertiary);color:var(--coar-text-accent-primary)}.coar-md-float-btn--disabled,.coar-md-float-btn:disabled{opacity:.4;cursor:not-allowed}.coar-md-float-btn--disabled:hover,.coar-md-float-btn:disabled:hover{color:var(--coar-text-neutral-secondary);background:0 0}.coar-md-float-sep{background:var(--coar-border-neutral);align-self:center;width:1px;height:18px;margin:0 2px}.coar-md-float-dropdown{position:relative}.coar-md-float-submenu{padding:var(--coar-spacing-xs);background:var(--coar-background-neutral-primary);border:1px solid var(--coar-border-neutral);border-radius:var(--coar-radius-xl);box-shadow:var(--coar-shadow-m,0 4px 12px #0000001f);z-index:10001;flex-direction:column;min-width:140px;animation:.1s ease-out coar-md-float-in;display:flex;position:absolute;top:calc(100% + 6px);left:50%;transform:translate(-50%)}.coar-md-float-submenu-item{align-items:center;gap:var(--coar-spacing-s);border-radius:var(--coar-radius-m);width:100%;color:var(--coar-text-neutral-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap;text-align:left;background:0 0;border:none;padding:6px 10px;font-size:13px;display:flex}.coar-md-float-submenu-item:hover{background:var(--coar-background-neutral-tertiary);color:var(--coar-text-neutral-primary)}.coar-md-float-submenu-item:active,.coar-md-float-submenu-item--active{background:var(--coar-background-accent-tertiary);color:var(--coar-text-accent-primary)}@keyframes coar-md-float-in{0%{opacity:0;transform:translate(-50%,-100%)translateY(4px)}to{opacity:1;transform:translate(-50%,-100%)translateY(0)}}
|
|
2
2
|
/*$vite$:1*/
|
package/dist/index.js
CHANGED
|
@@ -1,25 +1,161 @@
|
|
|
1
|
-
import { Teleport as e, computed as t,
|
|
2
|
-
import { Editor as
|
|
3
|
-
import { Milkdown as
|
|
4
|
-
import { CoarIcon as
|
|
5
|
-
import { commonmark as
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
1
|
+
import { Teleport as e, computed as t, createApp as n, createElementBlock as r, createElementVNode as i, createVNode as a, defineComponent as o, h as s, inject as c, normalizeClass as l, onBeforeUnmount as u, onMounted as d, openBlock as f, ref as p, shallowRef as m, unref as h, useId as g, useTemplateRef as _, vShow as v, watch as y, withDirectives as b, withModifiers as x } from "vue";
|
|
2
|
+
import { Editor as S, commandsCtx as C, defaultValueCtx as w, editorViewCtx as T, editorViewOptionsCtx as E, rootCtx as D } from "@milkdown/core";
|
|
3
|
+
import { Milkdown as ee, MilkdownProvider as O, useEditor as k, useInstance as A } from "@milkdown/vue";
|
|
4
|
+
import { CoarCodeBlock as j, CoarIcon as M, CoarSelect as N, CoarSidebar as te, CoarSidebarDivider as P, CoarSidebarGroup as F, CoarSidebarItem as I, FORM_FIELD_INJECTION_KEY as L } from "@cocoar/vue-ui";
|
|
5
|
+
import { codeBlockSchema as R, commonmark as z, createCodeBlockCommand as B, insertHrCommand as V, liftListItemCommand as H, sinkListItemCommand as ne, toggleEmphasisCommand as re, toggleInlineCodeCommand as ie, toggleStrongCommand as ae, turnIntoTextCommand as U, wrapInBlockquoteCommand as W, wrapInBulletListCommand as G, wrapInHeadingCommand as K, wrapInOrderedListCommand as q } from "@milkdown/preset-commonmark";
|
|
6
|
+
import { Plugin as J, TextSelection as Y } from "@milkdown/prose/state";
|
|
7
|
+
import { $prose as X, $view as oe, replaceAll as se } from "@milkdown/utils";
|
|
8
|
+
import { addColAfterCommand as ce, addColBeforeCommand as le, addRowAfterCommand as ue, addRowBeforeCommand as de, deleteSelectedCellsCommand as fe, gfm as pe, insertTableCommand as me, toggleStrikethroughCommand as he } from "@milkdown/preset-gfm";
|
|
9
|
+
import { history as ge, redoCommand as _e, undoCommand as ve } from "@milkdown/plugin-history";
|
|
10
|
+
import { clipboard as ye } from "@milkdown/plugin-clipboard";
|
|
11
|
+
import { listener as be, listenerCtx as Z } from "@milkdown/plugin-listener";
|
|
12
12
|
//#region src/toolbar-helpers.ts
|
|
13
|
-
function
|
|
14
|
-
return t === void 0 ? !0 :
|
|
13
|
+
function xe(e, t) {
|
|
14
|
+
return t === void 0 ? !0 : "has" in t ? t.has(e) : t.includes(e);
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function Se(e) {
|
|
17
17
|
let { target: t, inBulletList: n, inOrderedList: r } = e;
|
|
18
18
|
return (t === "bullet_list" ? n : r) ? "lift" : (t === "bullet_list" ? r : n) ? "switch" : "wrap";
|
|
19
19
|
}
|
|
20
20
|
//#endregion
|
|
21
|
-
//#region src/
|
|
22
|
-
var
|
|
21
|
+
//#region src/code-block-view/CodeBlockShell.vue?vue&type=script&setup=true&lang.ts
|
|
22
|
+
var Ce = { class: "coar-md-code-render" }, we = { class: "coar-md-code-edit" }, Te = { class: "coar-md-code-lang-row" }, Ee = /* @__PURE__ */ o({
|
|
23
|
+
__name: "CodeBlockShell",
|
|
24
|
+
props: {
|
|
25
|
+
text: {},
|
|
26
|
+
language: {},
|
|
27
|
+
editing: { type: Boolean },
|
|
28
|
+
contentDOM: {}
|
|
29
|
+
},
|
|
30
|
+
emits: ["enterEdit", "languageChange"],
|
|
31
|
+
setup(e, { emit: t }) {
|
|
32
|
+
let n = e, o = t, s = [
|
|
33
|
+
{
|
|
34
|
+
value: "",
|
|
35
|
+
label: "Plain text"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: "typescript",
|
|
39
|
+
label: "TypeScript"
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
value: "javascript",
|
|
43
|
+
label: "JavaScript"
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
value: "json",
|
|
47
|
+
label: "JSON"
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
value: "css",
|
|
51
|
+
label: "CSS"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
value: "scss",
|
|
55
|
+
label: "SCSS"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
value: "html",
|
|
59
|
+
label: "HTML"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
value: "bash",
|
|
63
|
+
label: "Bash"
|
|
64
|
+
}
|
|
65
|
+
], c = _("contentMount");
|
|
66
|
+
return y([c, () => n.contentDOM], ([e, t]) => {
|
|
67
|
+
e && t && t.parentElement !== e && e.appendChild(t);
|
|
68
|
+
}, {
|
|
69
|
+
immediate: !0,
|
|
70
|
+
flush: "post"
|
|
71
|
+
}), (t, n) => (f(), r("div", { class: l(["coar-md-code-host", { "coar-md-code-host--editing": e.editing }]) }, [b(i("div", Ce, [a(h(j), {
|
|
72
|
+
code: e.text,
|
|
73
|
+
language: e.language || "text",
|
|
74
|
+
collapsible: !1,
|
|
75
|
+
"show-copy": !1
|
|
76
|
+
}, null, 8, ["code", "language"]), i("button", {
|
|
77
|
+
class: "coar-md-code-edit-btn",
|
|
78
|
+
type: "button",
|
|
79
|
+
title: "Edit code block",
|
|
80
|
+
onMousedown: n[0] ||= x((e) => o("enterEdit"), ["prevent"])
|
|
81
|
+
}, [a(h(M), {
|
|
82
|
+
name: "pencil",
|
|
83
|
+
size: "xs"
|
|
84
|
+
}), n[2] ||= i("span", null, "Edit", -1)], 32)], 512), [[v, !e.editing]]), b(i("div", we, [i("div", Te, [a(h(N), {
|
|
85
|
+
class: "coar-md-code-lang-select",
|
|
86
|
+
"model-value": e.language,
|
|
87
|
+
options: s,
|
|
88
|
+
size: "s",
|
|
89
|
+
"onUpdate:modelValue": n[1] ||= (e) => o("languageChange", String(e))
|
|
90
|
+
}, null, 8, ["model-value"])]), i("div", {
|
|
91
|
+
ref_key: "contentMount",
|
|
92
|
+
ref: c,
|
|
93
|
+
class: "coar-md-code-content"
|
|
94
|
+
}, null, 512)], 512), [[v, e.editing]])], 2));
|
|
95
|
+
}
|
|
96
|
+
}), Q = /* @__PURE__ */ new Set(), De = class {
|
|
97
|
+
dom;
|
|
98
|
+
contentDOM;
|
|
99
|
+
app;
|
|
100
|
+
text = p("");
|
|
101
|
+
language = p("");
|
|
102
|
+
editing = p(!1);
|
|
103
|
+
constructor(e, t, r) {
|
|
104
|
+
this.node = e, this.view = t, this.getPos = r, Q.add(this), this.dom = document.createElement("div"), this.dom.className = "coar-md-code-host-mount";
|
|
105
|
+
let i = document.createElement("pre"), a = document.createElement("code");
|
|
106
|
+
i.appendChild(a), this.contentDOM = a, this.text.value = e.textContent, this.language.value = e.attrs.language ?? "", this.app = n({
|
|
107
|
+
name: "CodeBlockShellRoot",
|
|
108
|
+
setup: () => () => s(Ee, {
|
|
109
|
+
text: this.text.value,
|
|
110
|
+
language: this.language.value,
|
|
111
|
+
editing: this.editing.value,
|
|
112
|
+
contentDOM: i,
|
|
113
|
+
onEnterEdit: this.handleEnterEdit,
|
|
114
|
+
onLanguageChange: this.handleLanguageChange
|
|
115
|
+
})
|
|
116
|
+
}), this.app.mount(this.dom);
|
|
117
|
+
}
|
|
118
|
+
update(e) {
|
|
119
|
+
return e.type === this.node.type ? (this.node = e, this.text.value = e.textContent, this.language.value = e.attrs.language ?? "", !0) : !1;
|
|
120
|
+
}
|
|
121
|
+
selectNode() {
|
|
122
|
+
this.editing.value = !0, queueMicrotask(() => {
|
|
123
|
+
this.contentDOM.focus();
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
deselectNode() {
|
|
127
|
+
this.editing.value = !1;
|
|
128
|
+
}
|
|
129
|
+
destroy() {
|
|
130
|
+
Q.delete(this), this.app.unmount();
|
|
131
|
+
}
|
|
132
|
+
notifySelectionChanged() {
|
|
133
|
+
let e = this.getPos();
|
|
134
|
+
if (e == null) return;
|
|
135
|
+
let t = this.view.state.selection, n = e, r = e + this.node.nodeSize, i = t.from >= n && t.to <= r;
|
|
136
|
+
this.editing.value !== i && (this.editing.value = i);
|
|
137
|
+
}
|
|
138
|
+
stopEvent() {
|
|
139
|
+
return !1;
|
|
140
|
+
}
|
|
141
|
+
ignoreMutation(e) {
|
|
142
|
+
return !this.contentDOM.contains(e.target);
|
|
143
|
+
}
|
|
144
|
+
handleEnterEdit = () => {
|
|
145
|
+
let e = this.getPos();
|
|
146
|
+
if (e == null) return;
|
|
147
|
+
let { tr: t } = this.view.state;
|
|
148
|
+
t.setSelection(Y.create(this.view.state.doc, e + 1)), this.view.dispatch(t), this.view.focus();
|
|
149
|
+
};
|
|
150
|
+
handleLanguageChange = (e) => {
|
|
151
|
+
let t = this.getPos();
|
|
152
|
+
t != null && this.view.dispatch(this.view.state.tr.setNodeAttribute(t, "language", e));
|
|
153
|
+
};
|
|
154
|
+
}, Oe = [oe(R.node, () => (e, t, n) => new De(e, t, n)), X(() => new J({ view: () => ({ update(e, t) {
|
|
155
|
+
e.state.selection.eq(t.selection) || Q.forEach((t) => {
|
|
156
|
+
t.view === e && t.notifySelectionChanged();
|
|
157
|
+
});
|
|
158
|
+
} }) }))].flat(), ke = [
|
|
23
159
|
"bold",
|
|
24
160
|
"italic",
|
|
25
161
|
"strikethrough",
|
|
@@ -39,51 +175,51 @@ var ae = [
|
|
|
39
175
|
"undo",
|
|
40
176
|
"redo"
|
|
41
177
|
], $ = {
|
|
42
|
-
bold: { command:
|
|
43
|
-
italic: { command:
|
|
44
|
-
strike: { command:
|
|
45
|
-
code: { command:
|
|
46
|
-
bulletList: { command:
|
|
47
|
-
orderedList: { command:
|
|
48
|
-
blockquote: { command:
|
|
49
|
-
hr: { command:
|
|
50
|
-
codeBlock: { command:
|
|
51
|
-
table: { command:
|
|
52
|
-
undo: { command:
|
|
53
|
-
redo: { command:
|
|
54
|
-
paragraph: { command:
|
|
55
|
-
addRowBefore: { command:
|
|
56
|
-
addRowAfter: { command:
|
|
57
|
-
addColBefore: { command:
|
|
58
|
-
addColAfter: { command:
|
|
59
|
-
deleteCell: { command:
|
|
60
|
-
indent: { command:
|
|
61
|
-
outdent: { command:
|
|
178
|
+
bold: { command: ae },
|
|
179
|
+
italic: { command: re },
|
|
180
|
+
strike: { command: he },
|
|
181
|
+
code: { command: ie },
|
|
182
|
+
bulletList: { command: G },
|
|
183
|
+
orderedList: { command: q },
|
|
184
|
+
blockquote: { command: W },
|
|
185
|
+
hr: { command: V },
|
|
186
|
+
codeBlock: { command: B },
|
|
187
|
+
table: { command: me },
|
|
188
|
+
undo: { command: ve },
|
|
189
|
+
redo: { command: _e },
|
|
190
|
+
paragraph: { command: U },
|
|
191
|
+
addRowBefore: { command: de },
|
|
192
|
+
addRowAfter: { command: ue },
|
|
193
|
+
addColBefore: { command: le },
|
|
194
|
+
addColAfter: { command: ce },
|
|
195
|
+
deleteCell: { command: fe },
|
|
196
|
+
indent: { command: ne },
|
|
197
|
+
outdent: { command: H },
|
|
62
198
|
h1: {
|
|
63
|
-
command:
|
|
199
|
+
command: K,
|
|
64
200
|
payload: 1
|
|
65
201
|
},
|
|
66
202
|
h2: {
|
|
67
|
-
command:
|
|
203
|
+
command: K,
|
|
68
204
|
payload: 2
|
|
69
205
|
},
|
|
70
206
|
h3: {
|
|
71
|
-
command:
|
|
207
|
+
command: K,
|
|
72
208
|
payload: 3
|
|
73
209
|
},
|
|
74
210
|
h4: {
|
|
75
|
-
command:
|
|
211
|
+
command: K,
|
|
76
212
|
payload: 4
|
|
77
213
|
},
|
|
78
214
|
h5: {
|
|
79
|
-
command:
|
|
215
|
+
command: K,
|
|
80
216
|
payload: 5
|
|
81
217
|
},
|
|
82
218
|
h6: {
|
|
83
|
-
command:
|
|
219
|
+
command: K,
|
|
84
220
|
payload: 6
|
|
85
221
|
}
|
|
86
|
-
},
|
|
222
|
+
}, Ae = o({
|
|
87
223
|
props: {
|
|
88
224
|
initialValue: {
|
|
89
225
|
type: String,
|
|
@@ -139,29 +275,29 @@ var ae = [
|
|
|
139
275
|
}
|
|
140
276
|
},
|
|
141
277
|
setup(e) {
|
|
142
|
-
let t =
|
|
143
|
-
|
|
144
|
-
r.set(
|
|
278
|
+
let t = p(e.initialValue);
|
|
279
|
+
k((n) => S.make().config((r) => {
|
|
280
|
+
r.set(D, n), r.set(w, e.initialValue), r.update(E, (t) => ({
|
|
145
281
|
...t,
|
|
146
282
|
editable: () => !e.readonly
|
|
147
283
|
})), r.get(Z).markdownUpdated((n, r) => {
|
|
148
284
|
r !== t.value && (t.value = r, e.onMarkdownChange(r));
|
|
149
285
|
});
|
|
150
|
-
}).use(
|
|
151
|
-
let [, n] =
|
|
152
|
-
return
|
|
286
|
+
}).use(z).use(pe).use(ge).use(ye).use(be).use(Oe));
|
|
287
|
+
let [, n] = A();
|
|
288
|
+
return y(() => e.externalValue.value, (e) => {
|
|
153
289
|
if (e === t.value) return;
|
|
154
290
|
let r = n();
|
|
155
|
-
r && (t.value = e, r.action(
|
|
156
|
-
}),
|
|
291
|
+
r && (t.value = e, r.action(se(e)));
|
|
292
|
+
}), y(() => e.readonly, () => {
|
|
157
293
|
let t = n();
|
|
158
294
|
t && t.action((t) => {
|
|
159
|
-
t.update(
|
|
295
|
+
t.update(E, (t) => ({
|
|
160
296
|
...t,
|
|
161
297
|
editable: () => !e.readonly
|
|
162
|
-
})), t.get(
|
|
298
|
+
})), t.get(T).update(t.get(T).props);
|
|
163
299
|
});
|
|
164
|
-
}), () =>
|
|
300
|
+
}), () => s(je, {
|
|
165
301
|
readonly: e.readonly,
|
|
166
302
|
disabled: e.disabled,
|
|
167
303
|
toolbarMode: e.toolbarMode,
|
|
@@ -174,7 +310,7 @@ var ae = [
|
|
|
174
310
|
required: e.required
|
|
175
311
|
});
|
|
176
312
|
}
|
|
177
|
-
}),
|
|
313
|
+
}), je = o({
|
|
178
314
|
props: {
|
|
179
315
|
readonly: {
|
|
180
316
|
type: Boolean,
|
|
@@ -218,10 +354,10 @@ var ae = [
|
|
|
218
354
|
}
|
|
219
355
|
},
|
|
220
356
|
setup(n) {
|
|
221
|
-
let [,
|
|
357
|
+
let [, r] = A(), i = p(null), a = p(!1), o = p({
|
|
222
358
|
left: "0px",
|
|
223
359
|
top: "0px"
|
|
224
|
-
}),
|
|
360
|
+
}), c = p("text"), l = p(!1), f = {
|
|
225
361
|
strong: !1,
|
|
226
362
|
emphasis: !1,
|
|
227
363
|
strike_through: !1,
|
|
@@ -234,46 +370,46 @@ var ae = [
|
|
|
234
370
|
table: !1,
|
|
235
371
|
code_block: !1,
|
|
236
372
|
list_item_depth: 0
|
|
237
|
-
},
|
|
238
|
-
function
|
|
373
|
+
}, m = p({ ...f });
|
|
374
|
+
function h(e) {
|
|
239
375
|
if (n.readonly) return;
|
|
240
|
-
let t =
|
|
376
|
+
let t = r();
|
|
241
377
|
t && (t.action((t) => {
|
|
242
|
-
t.get(
|
|
243
|
-
}),
|
|
378
|
+
t.get(C).call(e.command.key, e.payload);
|
|
379
|
+
}), x());
|
|
244
380
|
}
|
|
245
|
-
function
|
|
381
|
+
function g(e) {
|
|
246
382
|
if (n.readonly) return;
|
|
247
|
-
let t = e === "bullet_list" ? $.bulletList : $.orderedList, r =
|
|
383
|
+
let t = e === "bullet_list" ? $.bulletList : $.orderedList, r = Se({
|
|
248
384
|
target: e,
|
|
249
|
-
inBulletList:
|
|
250
|
-
inOrderedList:
|
|
385
|
+
inBulletList: m.value.bullet_list,
|
|
386
|
+
inOrderedList: m.value.ordered_list
|
|
251
387
|
});
|
|
252
388
|
if (r === "lift") {
|
|
253
|
-
|
|
389
|
+
h({ command: H });
|
|
254
390
|
return;
|
|
255
391
|
}
|
|
256
|
-
r === "switch" &&
|
|
392
|
+
r === "switch" && h({ command: H }), h(t);
|
|
257
393
|
}
|
|
258
|
-
let
|
|
259
|
-
function
|
|
260
|
-
return
|
|
394
|
+
let _ = t(() => n.tools ? new Set(n.tools) : void 0);
|
|
395
|
+
function v(e) {
|
|
396
|
+
return xe(e, _.value);
|
|
261
397
|
}
|
|
262
|
-
function
|
|
398
|
+
function y() {
|
|
263
399
|
if (n.readonly) return;
|
|
264
|
-
let e =
|
|
400
|
+
let e = r();
|
|
265
401
|
e && e.action((e) => {
|
|
266
|
-
let t = e.get(
|
|
402
|
+
let t = e.get(T), { state: n } = t, r = n.tr, { from: i, to: a, empty: o } = n.selection;
|
|
267
403
|
o ? r = r.setStoredMarks([]) : Object.values(n.schema.marks).forEach((e) => {
|
|
268
404
|
r = r.removeMark(i, a, e);
|
|
269
|
-
}), t.dispatch(r), e.get(
|
|
405
|
+
}), t.dispatch(r), e.get(C).call(U.key);
|
|
270
406
|
});
|
|
271
407
|
}
|
|
272
|
-
function
|
|
408
|
+
function b() {
|
|
273
409
|
if (n.readonly) return;
|
|
274
|
-
let e =
|
|
410
|
+
let e = r();
|
|
275
411
|
e && e.action((t) => {
|
|
276
|
-
let n = t.get(
|
|
412
|
+
let n = t.get(T), { $from: r } = n.state.selection;
|
|
277
413
|
for (let e = r.depth; e > 0; e--) {
|
|
278
414
|
let t = r.node(e);
|
|
279
415
|
if (t.type.name === "list_item") {
|
|
@@ -282,9 +418,9 @@ var ae = [
|
|
|
282
418
|
return;
|
|
283
419
|
}
|
|
284
420
|
}
|
|
285
|
-
t.get(
|
|
421
|
+
t.get(C).call(G.key), queueMicrotask(() => {
|
|
286
422
|
e.action((e) => {
|
|
287
|
-
let t = e.get(
|
|
423
|
+
let t = e.get(T), { $from: n } = t.state.selection;
|
|
288
424
|
for (let e = n.depth; e > 0; e--) if (n.node(e).type.name === "list_item") {
|
|
289
425
|
t.dispatch(t.state.tr.setNodeAttribute(n.before(e), "checked", !1));
|
|
290
426
|
return;
|
|
@@ -293,11 +429,11 @@ var ae = [
|
|
|
293
429
|
});
|
|
294
430
|
});
|
|
295
431
|
}
|
|
296
|
-
function
|
|
297
|
-
let e =
|
|
432
|
+
function x() {
|
|
433
|
+
let e = r();
|
|
298
434
|
if (e) try {
|
|
299
435
|
e.action((e) => {
|
|
300
|
-
let t = e.get(
|
|
436
|
+
let t = e.get(T).state, { from: n, to: r, empty: i, $from: a } = t.selection, o = t.storedMarks, s = { ...f }, c = (e) => {
|
|
301
437
|
let s = t.schema.marks[e];
|
|
302
438
|
if (!s) return !1;
|
|
303
439
|
if (i) {
|
|
@@ -311,35 +447,35 @@ var ae = [
|
|
|
311
447
|
let t = a.node(e), n = t.type.name;
|
|
312
448
|
n === "bullet_list" ? s.bullet_list = !0 : n === "ordered_list" ? s.ordered_list = !0 : n === "blockquote" ? s.blockquote = !0 : n === "heading" ? s.heading = t.attrs.level ?? null : n === "table" ? s.table = !0 : n === "code_block" ? s.code_block = !0 : n === "list_item" && (s.list_item_depth += 1, t.attrs.checked != null && (s.task_list = !0));
|
|
313
449
|
}
|
|
314
|
-
|
|
450
|
+
m.value = s;
|
|
315
451
|
});
|
|
316
452
|
} catch {
|
|
317
|
-
|
|
453
|
+
m.value = { ...f };
|
|
318
454
|
}
|
|
319
455
|
}
|
|
320
|
-
function
|
|
456
|
+
function S(e) {
|
|
321
457
|
if (n.readonly) return;
|
|
322
|
-
let t = e.target,
|
|
323
|
-
if (
|
|
324
|
-
let t =
|
|
458
|
+
let t = e.target, i = t.closest("li[data-item-type=\"task\"]");
|
|
459
|
+
if (i) {
|
|
460
|
+
let t = i.getBoundingClientRect();
|
|
325
461
|
if (e.clientX - t.left < 18) {
|
|
326
|
-
e.preventDefault(),
|
|
462
|
+
e.preventDefault(), w(i);
|
|
327
463
|
return;
|
|
328
464
|
}
|
|
329
465
|
}
|
|
330
466
|
if (t.closest(".ProseMirror")) return;
|
|
331
|
-
let a =
|
|
467
|
+
let a = r();
|
|
332
468
|
a && (e.preventDefault(), a.action((e) => {
|
|
333
|
-
let t = e.get(
|
|
469
|
+
let t = e.get(T);
|
|
334
470
|
t.focus();
|
|
335
|
-
let n = t.state.tr.setSelection(
|
|
471
|
+
let n = t.state.tr.setSelection(Y.atEnd(t.state.doc));
|
|
336
472
|
t.dispatch(n);
|
|
337
473
|
}));
|
|
338
474
|
}
|
|
339
|
-
function
|
|
340
|
-
let t =
|
|
475
|
+
function w(e) {
|
|
476
|
+
let t = r();
|
|
341
477
|
t && t.action((t) => {
|
|
342
|
-
let n = t.get(
|
|
478
|
+
let n = t.get(T), r = n.posAtDOM(e, 0);
|
|
343
479
|
if (r < 0) return;
|
|
344
480
|
let i = n.state.doc.resolve(r);
|
|
345
481
|
for (let e = i.depth; e >= 0; e--) {
|
|
@@ -352,13 +488,13 @@ var ae = [
|
|
|
352
488
|
}
|
|
353
489
|
});
|
|
354
490
|
}
|
|
355
|
-
function
|
|
356
|
-
let e =
|
|
491
|
+
function E() {
|
|
492
|
+
let e = r();
|
|
357
493
|
if (!e) return "text";
|
|
358
494
|
try {
|
|
359
495
|
let t = "text";
|
|
360
496
|
return e.action((e) => {
|
|
361
|
-
let { $from: n } = e.get(
|
|
497
|
+
let { $from: n } = e.get(T).state.selection;
|
|
362
498
|
for (let e = n.depth; e > 0; e--) if (n.node(e).type.name === "table") {
|
|
363
499
|
t = "table";
|
|
364
500
|
break;
|
|
@@ -368,190 +504,190 @@ var ae = [
|
|
|
368
504
|
return "text";
|
|
369
505
|
}
|
|
370
506
|
}
|
|
371
|
-
function
|
|
507
|
+
function D(e) {
|
|
372
508
|
let t = e.left + e.width / 2, n = e.top - 8;
|
|
373
|
-
t = Math.max(108, Math.min(t, window.innerWidth - 108)), n < 50 && (n = e.bottom + 8),
|
|
509
|
+
t = Math.max(108, Math.min(t, window.innerWidth - 108)), n < 50 && (n = e.bottom + 8), o.value = {
|
|
374
510
|
left: `${t}px`,
|
|
375
511
|
top: `${n}px`
|
|
376
512
|
};
|
|
377
513
|
}
|
|
378
|
-
function
|
|
514
|
+
function O() {
|
|
379
515
|
if (n.readonly || n.toolbarMode === "fixed") {
|
|
380
|
-
|
|
516
|
+
a.value = !1;
|
|
381
517
|
return;
|
|
382
518
|
}
|
|
383
519
|
let e = window.getSelection();
|
|
384
520
|
if (!e || e.isCollapsed || !e.rangeCount) {
|
|
385
|
-
|
|
521
|
+
a.value = !1, l.value = !1;
|
|
386
522
|
return;
|
|
387
523
|
}
|
|
388
|
-
let t = e.getRangeAt(0), r =
|
|
524
|
+
let t = e.getRangeAt(0), r = i.value?.querySelector(".coar-md-area .milkdown");
|
|
389
525
|
if (!r || !r.contains(t.commonAncestorContainer)) {
|
|
390
|
-
|
|
526
|
+
a.value = !1, l.value = !1;
|
|
391
527
|
return;
|
|
392
528
|
}
|
|
393
|
-
|
|
529
|
+
D(t.getBoundingClientRect()), c.value = E(), a.value = !0, l.value = !1;
|
|
394
530
|
}
|
|
395
|
-
function
|
|
531
|
+
function k(e) {
|
|
396
532
|
let t = e.target;
|
|
397
|
-
t.closest(".coar-md-floating-toolbar") || t.closest(".coar-md-float-submenu") || (!
|
|
533
|
+
t.closest(".coar-md-floating-toolbar") || t.closest(".coar-md-float-submenu") || (!i.value || !i.value.contains(t)) && (a.value = !1, l.value = !1);
|
|
398
534
|
}
|
|
399
|
-
let
|
|
400
|
-
function
|
|
401
|
-
let t =
|
|
535
|
+
let j = null;
|
|
536
|
+
function N(e = 20) {
|
|
537
|
+
let t = r();
|
|
402
538
|
if (!t) {
|
|
403
|
-
e > 0 && setTimeout(() =>
|
|
539
|
+
e > 0 && setTimeout(() => N(e - 1), 50);
|
|
404
540
|
return;
|
|
405
541
|
}
|
|
406
542
|
try {
|
|
407
543
|
t.action((e) => {
|
|
408
544
|
let t = e.get(Z);
|
|
409
|
-
|
|
545
|
+
j = () => queueMicrotask(x), t.selectionUpdated(j);
|
|
410
546
|
});
|
|
411
547
|
} catch {
|
|
412
|
-
e > 0 && setTimeout(() =>
|
|
548
|
+
e > 0 && setTimeout(() => N(e - 1), 50);
|
|
413
549
|
}
|
|
414
550
|
}
|
|
415
|
-
function
|
|
416
|
-
if (!
|
|
417
|
-
let e =
|
|
551
|
+
function L() {
|
|
552
|
+
if (!j) return;
|
|
553
|
+
let e = r();
|
|
418
554
|
if (e) {
|
|
419
555
|
try {
|
|
420
556
|
e.action((e) => {
|
|
421
|
-
let t = e.get(Z).listeners.selectionUpdated, n = t.indexOf(
|
|
557
|
+
let t = e.get(Z).listeners.selectionUpdated, n = t.indexOf(j);
|
|
422
558
|
n >= 0 && t.splice(n, 1);
|
|
423
559
|
});
|
|
424
560
|
} catch {}
|
|
425
|
-
|
|
561
|
+
j = null;
|
|
426
562
|
}
|
|
427
563
|
}
|
|
428
|
-
|
|
429
|
-
document.addEventListener("selectionchange",
|
|
430
|
-
}),
|
|
431
|
-
document.removeEventListener("selectionchange",
|
|
564
|
+
d(() => {
|
|
565
|
+
document.addEventListener("selectionchange", O), document.addEventListener("mousedown", k, !0), N();
|
|
566
|
+
}), u(() => {
|
|
567
|
+
document.removeEventListener("selectionchange", O), document.removeEventListener("mousedown", k, !0), L();
|
|
432
568
|
});
|
|
433
|
-
function
|
|
434
|
-
return
|
|
569
|
+
function R(e, t, n, r = {}) {
|
|
570
|
+
return s(I, {
|
|
435
571
|
icon: e,
|
|
436
572
|
label: t,
|
|
437
|
-
active:
|
|
438
|
-
disabled:
|
|
439
|
-
onClick:
|
|
573
|
+
active: r.active ?? !1,
|
|
574
|
+
disabled: r.disabled ?? !1,
|
|
575
|
+
onClick: r.disabled ? () => {} : r.onClick ?? (() => h(n))
|
|
440
576
|
});
|
|
441
577
|
}
|
|
442
|
-
function
|
|
443
|
-
let e =
|
|
444
|
-
function
|
|
445
|
-
|
|
578
|
+
function z() {
|
|
579
|
+
let e = m.value, t = e.heading != null;
|
|
580
|
+
function r(e, t, n) {
|
|
581
|
+
v(t) && e.push(n);
|
|
446
582
|
}
|
|
447
|
-
function
|
|
448
|
-
e.length !== 0 && e[e.length - 1]?.type !==
|
|
583
|
+
function i(e) {
|
|
584
|
+
e.length !== 0 && e[e.length - 1]?.type !== P && e.push(s(P));
|
|
449
585
|
}
|
|
450
|
-
let
|
|
451
|
-
return
|
|
586
|
+
let a = [];
|
|
587
|
+
return r(a, "bold", R("bold", "Bold", $.bold, { active: e.strong })), r(a, "italic", R("italic", "Italic", $.italic, { active: e.emphasis })), r(a, "strikethrough", R("strikethrough", "Strikethrough", $.strike, { active: e.strike_through })), r(a, "inlineCode", R("code", "Inline Code", $.code, { active: e.inlineCode })), r(a, "headings", s(F, {
|
|
452
588
|
icon: "hash",
|
|
453
589
|
label: t ? `Heading ${e.heading}` : "Headings",
|
|
454
590
|
mode: "flyout",
|
|
455
591
|
openOnHover: !0
|
|
456
592
|
}, { default: () => [
|
|
457
|
-
|
|
593
|
+
s(I, {
|
|
458
594
|
icon: "pilcrow",
|
|
459
595
|
label: "Paragraph",
|
|
460
596
|
active: !t,
|
|
461
|
-
onClick: () =>
|
|
597
|
+
onClick: () => h($.paragraph)
|
|
462
598
|
}),
|
|
463
|
-
|
|
599
|
+
s(I, {
|
|
464
600
|
icon: "heading",
|
|
465
601
|
label: "Heading 1",
|
|
466
602
|
active: e.heading === 1,
|
|
467
|
-
onClick: () =>
|
|
603
|
+
onClick: () => h($.h1)
|
|
468
604
|
}),
|
|
469
|
-
|
|
605
|
+
s(I, {
|
|
470
606
|
icon: "heading",
|
|
471
607
|
label: "Heading 2",
|
|
472
608
|
active: e.heading === 2,
|
|
473
|
-
onClick: () =>
|
|
609
|
+
onClick: () => h($.h2)
|
|
474
610
|
}),
|
|
475
|
-
|
|
611
|
+
s(I, {
|
|
476
612
|
icon: "heading",
|
|
477
613
|
label: "Heading 3",
|
|
478
614
|
active: e.heading === 3,
|
|
479
|
-
onClick: () =>
|
|
615
|
+
onClick: () => h($.h3)
|
|
480
616
|
}),
|
|
481
|
-
|
|
617
|
+
s(I, {
|
|
482
618
|
icon: "heading",
|
|
483
619
|
label: "Heading 4",
|
|
484
620
|
active: e.heading === 4,
|
|
485
|
-
onClick: () =>
|
|
621
|
+
onClick: () => h($.h4)
|
|
486
622
|
}),
|
|
487
|
-
|
|
623
|
+
s(I, {
|
|
488
624
|
icon: "heading",
|
|
489
625
|
label: "Heading 5",
|
|
490
626
|
active: e.heading === 5,
|
|
491
|
-
onClick: () =>
|
|
627
|
+
onClick: () => h($.h5)
|
|
492
628
|
}),
|
|
493
|
-
|
|
629
|
+
s(I, {
|
|
494
630
|
icon: "heading",
|
|
495
631
|
label: "Heading 6",
|
|
496
632
|
active: e.heading === 6,
|
|
497
|
-
onClick: () =>
|
|
633
|
+
onClick: () => h($.h6)
|
|
498
634
|
})
|
|
499
|
-
] })), a
|
|
635
|
+
] })), i(a), r(a, "bulletList", R("list", "Bullet List", $.bulletList, {
|
|
500
636
|
active: e.bullet_list,
|
|
501
|
-
onClick: () =>
|
|
502
|
-
})),
|
|
637
|
+
onClick: () => g("bullet_list")
|
|
638
|
+
})), r(a, "orderedList", R("list-ordered", "Ordered List", $.orderedList, {
|
|
503
639
|
active: e.ordered_list,
|
|
504
|
-
onClick: () =>
|
|
505
|
-
})),
|
|
640
|
+
onClick: () => g("ordered_list")
|
|
641
|
+
})), r(a, "taskList", R("clipboard-check", "Task List", $.bulletList, {
|
|
506
642
|
active: e.task_list,
|
|
507
|
-
onClick:
|
|
508
|
-
})),
|
|
643
|
+
onClick: b
|
|
644
|
+
})), r(a, "outdent", R("indent-decrease", "Outdent", $.outdent, { disabled: e.list_item_depth < 2 })), r(a, "indent", R("indent-increase", "Indent", $.indent, { disabled: e.list_item_depth < 1 })), r(a, "blockquote", R("text-quote", "Blockquote", $.blockquote, { active: e.blockquote })), r(a, "horizontalRule", R("minus", "Horizontal Rule", $.hr)), i(a), r(a, "codeBlock", R("square-code", "Code Block", $.codeBlock, { active: e.code_block })), r(a, "table", R("table", "Insert Table", $.table, { active: e.table })), e.table && v("tableOps") && (i(a), a.push(R("between-vertical-start", "Insert Row Above", $.addRowBefore)), a.push(R("between-vertical-end", "Insert Row Below", $.addRowAfter)), a.push(R("between-horizontal-start", "Insert Column Left", $.addColBefore)), a.push(R("between-horizontal-end", "Insert Column Right", $.addColAfter)), a.push(R("trash-2", "Delete Cell", $.deleteCell))), v("clearFormatting") && (i(a), a.push(R("eraser", "Clear Formatting", $.bold, { onClick: y }))), i(a), r(a, "undo", R("undo-2", "Undo", $.undo)), r(a, "redo", R("redo-2", "Redo", $.redo)), a[a.length - 1]?.type === P && a.pop(), s("div", {
|
|
509
645
|
key: "sidebar",
|
|
510
646
|
class: "coar-md-sidebar-wrap",
|
|
511
647
|
onMousedown: (e) => e.preventDefault()
|
|
512
|
-
}, [
|
|
648
|
+
}, [s(te, {
|
|
513
649
|
collapsed: !0,
|
|
514
650
|
position: n.toolbarPosition,
|
|
515
651
|
size: "s",
|
|
516
652
|
variant: "primary",
|
|
517
653
|
borderless: !0
|
|
518
|
-
}, { default: () =>
|
|
654
|
+
}, { default: () => a })]);
|
|
519
655
|
}
|
|
520
|
-
function
|
|
521
|
-
let t = (e, t, n,
|
|
656
|
+
function B() {
|
|
657
|
+
let t = (e, t, n, r = {}) => s("button", {
|
|
522
658
|
class: [
|
|
523
659
|
"coar-md-float-btn",
|
|
524
|
-
|
|
525
|
-
|
|
660
|
+
r.isActive ? "coar-md-float-btn--active" : "",
|
|
661
|
+
r.disabled ? "coar-md-float-btn--disabled" : ""
|
|
526
662
|
],
|
|
527
663
|
title: t,
|
|
528
664
|
type: "button",
|
|
529
|
-
disabled:
|
|
665
|
+
disabled: r.disabled ?? !1,
|
|
530
666
|
onMousedown: (e) => {
|
|
531
|
-
e.preventDefault(), !
|
|
667
|
+
e.preventDefault(), !r.disabled && (r.onClick ?? (() => h(n)))();
|
|
532
668
|
}
|
|
533
|
-
}, [
|
|
669
|
+
}, [s(M, {
|
|
534
670
|
name: e,
|
|
535
671
|
size: "s"
|
|
536
|
-
})]), n = () =>
|
|
537
|
-
function
|
|
538
|
-
|
|
672
|
+
})]), n = () => s("div", { class: "coar-md-float-sep" }), r = m.value;
|
|
673
|
+
function i(e, t, n) {
|
|
674
|
+
v(t) && e.push(n);
|
|
539
675
|
}
|
|
540
|
-
function
|
|
676
|
+
function a(e) {
|
|
541
677
|
e.length !== 0 && e[e.length - 1]?.props?.class !== "coar-md-float-sep" && e.push(n());
|
|
542
678
|
}
|
|
543
|
-
let
|
|
544
|
-
|
|
545
|
-
class: ["coar-md-float-btn",
|
|
546
|
-
title:
|
|
679
|
+
let u = [];
|
|
680
|
+
i(u, "bold", t("bold", "Bold", $.bold, { isActive: r.strong })), i(u, "italic", t("italic", "Italic", $.italic, { isActive: r.emphasis })), i(u, "strikethrough", t("strikethrough", "Strikethrough", $.strike, { isActive: r.strike_through })), i(u, "inlineCode", t("code", "Inline Code", $.code, { isActive: r.inlineCode })), v("headings") && (a(u), u.push(s("div", { class: "coar-md-float-dropdown" }, [s("button", {
|
|
681
|
+
class: ["coar-md-float-btn", l.value || r.heading != null ? "coar-md-float-btn--active" : ""],
|
|
682
|
+
title: r.heading == null ? "Headings" : `Heading ${r.heading}`,
|
|
547
683
|
type: "button",
|
|
548
684
|
onMousedown: (e) => {
|
|
549
|
-
e.preventDefault(),
|
|
685
|
+
e.preventDefault(), l.value = !l.value;
|
|
550
686
|
}
|
|
551
|
-
}, [
|
|
687
|
+
}, [s(M, {
|
|
552
688
|
name: "heading",
|
|
553
689
|
size: "s"
|
|
554
|
-
})]),
|
|
690
|
+
})]), l.value ? s("div", { class: "coar-md-float-submenu" }, [
|
|
555
691
|
{
|
|
556
692
|
label: "Paragraph",
|
|
557
693
|
cmd: $.paragraph,
|
|
@@ -594,28 +730,28 @@ var ae = [
|
|
|
594
730
|
icon: "heading",
|
|
595
731
|
activeLevel: 6
|
|
596
732
|
}
|
|
597
|
-
].map(({ label: e, cmd: t, icon: n, activeLevel:
|
|
598
|
-
class: ["coar-md-float-submenu-item", (
|
|
733
|
+
].map(({ label: e, cmd: t, icon: n, activeLevel: i }) => s("button", {
|
|
734
|
+
class: ["coar-md-float-submenu-item", (i === 0 ? r.heading == null : r.heading === i) ? "coar-md-float-submenu-item--active" : ""],
|
|
599
735
|
type: "button",
|
|
600
736
|
onMousedown: (e) => {
|
|
601
|
-
e.preventDefault(),
|
|
737
|
+
e.preventDefault(), h(t), l.value = !1;
|
|
602
738
|
}
|
|
603
|
-
}, [
|
|
739
|
+
}, [s(M, {
|
|
604
740
|
name: n,
|
|
605
741
|
size: "xs"
|
|
606
|
-
}),
|
|
607
|
-
isActive:
|
|
608
|
-
onClick: () =>
|
|
609
|
-
})),
|
|
610
|
-
isActive:
|
|
611
|
-
onClick: () =>
|
|
612
|
-
})),
|
|
613
|
-
isActive:
|
|
614
|
-
onClick:
|
|
615
|
-
})),
|
|
616
|
-
let
|
|
617
|
-
text:
|
|
618
|
-
table:
|
|
742
|
+
}), s("span", null, e)]))) : null]))), a(u), i(u, "bulletList", t("list", "Bullet List", $.bulletList, {
|
|
743
|
+
isActive: r.bullet_list,
|
|
744
|
+
onClick: () => g("bullet_list")
|
|
745
|
+
})), i(u, "orderedList", t("list-ordered", "Ordered List", $.orderedList, {
|
|
746
|
+
isActive: r.ordered_list,
|
|
747
|
+
onClick: () => g("ordered_list")
|
|
748
|
+
})), i(u, "taskList", t("clipboard-check", "Task List", $.bulletList, {
|
|
749
|
+
isActive: r.task_list,
|
|
750
|
+
onClick: b
|
|
751
|
+
})), i(u, "outdent", t("indent-decrease", "Outdent", $.outdent, { disabled: r.list_item_depth < 2 })), i(u, "indent", t("indent-increase", "Indent", $.indent, { disabled: r.list_item_depth < 1 })), a(u), i(u, "blockquote", t("text-quote", "Blockquote", $.blockquote, { isActive: r.blockquote })), v("clearFormatting") && (a(u), u.push(t("eraser", "Clear Formatting", $.bold, { onClick: y }))), u[u.length - 1]?.props?.class === "coar-md-float-sep" && u.pop();
|
|
752
|
+
let d = {
|
|
753
|
+
text: u,
|
|
754
|
+
table: v("tableOps") ? [
|
|
619
755
|
t("between-vertical-start", "Insert Row Above", $.addRowBefore),
|
|
620
756
|
t("between-vertical-end", "Insert Row Below", $.addRowAfter),
|
|
621
757
|
n(),
|
|
@@ -623,43 +759,43 @@ var ae = [
|
|
|
623
759
|
t("between-horizontal-end", "Insert Column Right", $.addColAfter),
|
|
624
760
|
n(),
|
|
625
761
|
t("trash-2", "Delete", $.deleteCell),
|
|
626
|
-
...
|
|
627
|
-
...
|
|
628
|
-
...
|
|
629
|
-
...
|
|
630
|
-
] :
|
|
631
|
-
"col-selection":
|
|
762
|
+
...v("bold") || v("italic") || v("inlineCode") ? [n()] : [],
|
|
763
|
+
...v("bold") ? [t("bold", "Bold", $.bold)] : [],
|
|
764
|
+
...v("italic") ? [t("italic", "Italic", $.italic)] : [],
|
|
765
|
+
...v("inlineCode") ? [t("code", "Code", $.code)] : []
|
|
766
|
+
] : u,
|
|
767
|
+
"col-selection": v("tableOps") ? [
|
|
632
768
|
t("between-horizontal-start", "Insert Column Left", $.addColBefore),
|
|
633
769
|
t("between-horizontal-end", "Insert Column Right", $.addColAfter),
|
|
634
770
|
n(),
|
|
635
771
|
t("trash-2", "Delete Column", $.deleteCell)
|
|
636
|
-
] :
|
|
637
|
-
"row-selection":
|
|
772
|
+
] : u,
|
|
773
|
+
"row-selection": v("tableOps") ? [
|
|
638
774
|
t("between-vertical-start", "Insert Row Above", $.addRowBefore),
|
|
639
775
|
t("between-vertical-end", "Insert Row Below", $.addRowAfter),
|
|
640
776
|
n(),
|
|
641
777
|
t("trash-2", "Delete Row", $.deleteCell)
|
|
642
|
-
] :
|
|
778
|
+
] : u
|
|
643
779
|
};
|
|
644
|
-
return
|
|
780
|
+
return s(e, { to: "body" }, s("div", {
|
|
645
781
|
class: "coar-md-floating-toolbar",
|
|
646
|
-
style: `left:${
|
|
647
|
-
}, c
|
|
782
|
+
style: `left:${o.value.left};top:${o.value.top};`
|
|
783
|
+
}, d[c.value] || u));
|
|
648
784
|
}
|
|
649
785
|
return () => {
|
|
650
|
-
let e = n.toolbarMode === "fixed" || n.toolbarMode === "both", t = !n.readonly && (n.toolbarMode === "floating" || n.toolbarMode === "both"),
|
|
651
|
-
return e && n.toolbarPosition === "left" &&
|
|
786
|
+
let e = n.toolbarMode === "fixed" || n.toolbarMode === "both", t = !n.readonly && (n.toolbarMode === "floating" || n.toolbarMode === "both"), r = [];
|
|
787
|
+
return e && n.toolbarPosition === "left" && r.push(z()), r.push(s("div", {
|
|
652
788
|
key: "area",
|
|
653
|
-
class: "coar-md-area",
|
|
654
|
-
onMousedown:
|
|
655
|
-
}, [
|
|
789
|
+
class: ["coar-md-area", "coar-markdown"],
|
|
790
|
+
onMousedown: S
|
|
791
|
+
}, [s(ee)])), e && n.toolbarPosition === "right" && r.push(z()), a.value && t && r.push(B()), s("div", {
|
|
656
792
|
class: {
|
|
657
793
|
"coar-md-root": !0,
|
|
658
794
|
"coar-md-root--disabled": n.disabled,
|
|
659
795
|
"coar-md-root--readonly": n.readonly && !n.disabled,
|
|
660
796
|
"coar-md-root--error": n.hasError
|
|
661
797
|
},
|
|
662
|
-
ref:
|
|
798
|
+
ref: i,
|
|
663
799
|
id: n.inputId,
|
|
664
800
|
"aria-invalid": n.hasError ? "true" : void 0,
|
|
665
801
|
"aria-describedby": n.describedBy,
|
|
@@ -667,10 +803,10 @@ var ae = [
|
|
|
667
803
|
"aria-readonly": n.readonly && !n.disabled ? "true" : void 0,
|
|
668
804
|
"aria-required": n.required ? "true" : void 0,
|
|
669
805
|
"data-name": n.name
|
|
670
|
-
},
|
|
806
|
+
}, r);
|
|
671
807
|
};
|
|
672
808
|
}
|
|
673
|
-
}),
|
|
809
|
+
}), Me = o({
|
|
674
810
|
name: "CoarMarkdownEditor",
|
|
675
811
|
props: {
|
|
676
812
|
modelValue: {
|
|
@@ -716,22 +852,22 @@ var ae = [
|
|
|
716
852
|
},
|
|
717
853
|
emits: ["update:modelValue"],
|
|
718
854
|
setup(e, { emit: n }) {
|
|
719
|
-
let
|
|
720
|
-
|
|
721
|
-
|
|
855
|
+
let r = e.modelValue, i = m({ value: e.modelValue });
|
|
856
|
+
y(() => e.modelValue, (e) => {
|
|
857
|
+
i.value = { value: e };
|
|
722
858
|
});
|
|
723
|
-
let
|
|
724
|
-
return () =>
|
|
725
|
-
initialValue:
|
|
726
|
-
externalValue:
|
|
727
|
-
readonly:
|
|
728
|
-
disabled:
|
|
859
|
+
let a = c(L, void 0), o = `coar-markdown-editor-${g()}`, l = t(() => e.id || a?.inputId.value || o), u = t(() => e.error || (a?.hasError.value ?? !1)), d = t(() => a?.messageId.value), f = t(() => e.disabled || (a?.disabled.value ?? !1)), p = t(() => e.readonly || f.value);
|
|
860
|
+
return () => s(O, null, () => s(Ae, {
|
|
861
|
+
initialValue: r,
|
|
862
|
+
externalValue: i.value,
|
|
863
|
+
readonly: p.value,
|
|
864
|
+
disabled: f.value,
|
|
729
865
|
toolbarMode: e.toolbarMode,
|
|
730
866
|
toolbarPosition: e.toolbarPosition,
|
|
731
867
|
tools: e.tools,
|
|
732
|
-
inputId:
|
|
733
|
-
hasError:
|
|
734
|
-
describedBy:
|
|
868
|
+
inputId: l.value,
|
|
869
|
+
hasError: u.value,
|
|
870
|
+
describedBy: d.value,
|
|
735
871
|
name: e.name,
|
|
736
872
|
required: e.required,
|
|
737
873
|
onMarkdownChange: (e) => n("update:modelValue", e)
|
|
@@ -739,4 +875,4 @@ var ae = [
|
|
|
739
875
|
}
|
|
740
876
|
});
|
|
741
877
|
//#endregion
|
|
742
|
-
export {
|
|
878
|
+
export { ke as COAR_MARKDOWN_EDITOR_ALL_TOOLS, Me as CoarMarkdownEditor };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-helpers.d.ts","sourceRoot":"","sources":["../src/toolbar-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,GAAG,SAAS,sBAAsB,EAAE,GAAG,SAAS,GAC7F,OAAO,
|
|
1
|
+
{"version":3,"file":"toolbar-helpers.d.ts","sourceRoot":"","sources":["../src/toolbar-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAEvE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,sBAAsB,EAC5B,SAAS,EAAE,WAAW,CAAC,sBAAsB,CAAC,GAAG,SAAS,sBAAsB,EAAE,GAAG,SAAS,GAC7F,OAAO,CAST;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,MAAM,EAAE,aAAa,GAAG,cAAc,CAAC;IACvC,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,gBAAgB,CAOnB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cocoar/vue-markdown-editor",
|
|
3
|
-
"version": "1.13.0
|
|
3
|
+
"version": "1.13.0",
|
|
4
4
|
"description": "WYSIWYG Markdown editor for Vue 3 based on Milkdown, with Cocoar Design System styling",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -42,7 +42,8 @@
|
|
|
42
42
|
"lint": "eslint src/"
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
|
-
"@cocoar/vue-
|
|
45
|
+
"@cocoar/vue-markdown": "1.13.0",
|
|
46
|
+
"@cocoar/vue-ui": "1.13.0",
|
|
46
47
|
"vue": "^3.5.0"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
@@ -59,6 +60,7 @@
|
|
|
59
60
|
"@milkdown/vue": "^7.20.0"
|
|
60
61
|
},
|
|
61
62
|
"devDependencies": {
|
|
63
|
+
"@cocoar/vue-markdown": "workspace:*",
|
|
62
64
|
"@cocoar/vue-ui": "workspace:*",
|
|
63
65
|
"vue": "^3.5.32"
|
|
64
66
|
}
|