@milkdown/plugin-slash 6.5.0 → 6.5.2
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/lib/index.es.js +107 -103
- package/lib/index.es.js.map +1 -1
- package/lib/prose-plugin/dropdown.d.ts.map +1 -1
- package/lib/prose-plugin/view.d.ts.map +1 -1
- package/lib/style.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/prose-plugin/dropdown.ts +1 -0
- package/src/prose-plugin/view.ts +27 -5
- package/src/style.ts +1 -0
package/lib/index.es.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { createPlugin as b, AtomList as
|
|
2
|
-
import { ThemeSize as
|
|
3
|
-
import { missingIcon as
|
|
4
|
-
import { Plugin as
|
|
1
|
+
import { createPlugin as b, AtomList as $ } from "@milkdown/utils";
|
|
2
|
+
import { ThemeSize as E, ThemeBorder as C, ThemeShadow as T, ThemeScrollbar as N, ThemeFont as k, ThemeColor as y, ThemeIcon as S, schemaCtx as I, themeManagerCtx as u, commandsCtx as p } from "@milkdown/core";
|
|
3
|
+
import { missingIcon as x, missingRootElement as A } from "@milkdown/exception";
|
|
4
|
+
import { Plugin as D, PluginKey as _ } from "@milkdown/prose/state";
|
|
5
5
|
import { findParentNode as M, calculateNodePosition as P } from "@milkdown/prose";
|
|
6
|
-
import { DecorationSet as H, Decoration as
|
|
6
|
+
import { DecorationSet as H, Decoration as q } from "@milkdown/prose/view";
|
|
7
7
|
import w from "smooth-scroll-into-view-if-needed";
|
|
8
|
-
const
|
|
8
|
+
const K = (e, { css: t }) => {
|
|
9
9
|
const o = (n, s = 1) => e.get(y, [n, s]);
|
|
10
10
|
return t`
|
|
11
11
|
.slash-dropdown-item {
|
|
@@ -41,131 +41,132 @@ const q = (e, { css: t }) => {
|
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
43
|
`;
|
|
44
|
-
},
|
|
44
|
+
}, O = (e, t) => {
|
|
45
45
|
const o = (n, s = 1) => e.get(y, [n, s]);
|
|
46
46
|
return t.css`
|
|
47
47
|
width: 320px;
|
|
48
|
+
min-height: 48px;
|
|
48
49
|
max-height: 320px;
|
|
49
50
|
overflow-y: auto;
|
|
50
|
-
border-radius: ${e.get(
|
|
51
|
+
border-radius: ${e.get(E, "radius")};
|
|
51
52
|
position: absolute;
|
|
52
53
|
background: ${o("surface")};
|
|
53
54
|
|
|
54
55
|
${e.get(C, void 0)}
|
|
56
|
+
${e.get(T, void 0)}
|
|
55
57
|
${e.get(N, void 0)}
|
|
56
|
-
${e.get(S, void 0)}
|
|
57
58
|
|
|
58
59
|
&.hide {
|
|
59
60
|
display: none;
|
|
60
61
|
}
|
|
61
62
|
|
|
62
|
-
${
|
|
63
|
+
${K(e, t)}
|
|
63
64
|
`;
|
|
64
65
|
}, U = (e, t) => {
|
|
65
66
|
const o = document.createElement("div");
|
|
66
67
|
return o.setAttribute("role", "listbox"), o.setAttribute("tabindex", "-1"), e.themeManager.onFlush(() => {
|
|
67
|
-
const n = e.getStyle((s) =>
|
|
68
|
+
const n = e.getStyle((s) => O(e.themeManager, s));
|
|
68
69
|
n && o.classList.add(n);
|
|
69
70
|
}), o.classList.add(e.getClassName({}, t), "hide"), o;
|
|
70
|
-
},
|
|
71
|
+
}, f = (e, t, o, n) => {
|
|
71
72
|
var l;
|
|
72
73
|
const s = (l = n == null ? void 0 : n.textClassName) != null ? l : "text", r = document.createElement("div");
|
|
73
74
|
r.setAttribute("role", "option"), r.classList.add("slash-dropdown-item");
|
|
74
|
-
const
|
|
75
|
-
if (!
|
|
76
|
-
throw
|
|
77
|
-
const
|
|
78
|
-
return
|
|
75
|
+
const i = e.get(S, o);
|
|
76
|
+
if (!i)
|
|
77
|
+
throw x(o);
|
|
78
|
+
const a = document.createElement("span");
|
|
79
|
+
return a.textContent = t, a.className = s, r.appendChild(i.dom), r.appendChild(a), r;
|
|
79
80
|
}, W = (e, t) => {
|
|
80
81
|
const { selection: o } = e, { $from: n } = o, s = e.tr.deleteRange(n.start(), n.pos);
|
|
81
82
|
return t == null || t(s), !1;
|
|
82
|
-
},
|
|
83
|
+
}, B = (e) => (t, o, n) => (n && (W(t, o), e()), !0), L = (e, t = "/") => {
|
|
83
84
|
const { nodes: o } = e.get(I), n = [
|
|
84
85
|
{
|
|
85
86
|
id: "h1",
|
|
86
|
-
dom:
|
|
87
|
-
command: () => e.get(
|
|
87
|
+
dom: f(e.get(u), "Large Heading", "h1"),
|
|
88
|
+
command: () => e.get(p).call("TurnIntoHeading", 1),
|
|
88
89
|
keyword: ["h1", "large heading"],
|
|
89
90
|
typeName: "heading"
|
|
90
91
|
},
|
|
91
92
|
{
|
|
92
93
|
id: "h2",
|
|
93
|
-
dom:
|
|
94
|
-
command: () => e.get(
|
|
94
|
+
dom: f(e.get(u), "Medium Heading", "h2"),
|
|
95
|
+
command: () => e.get(p).call("TurnIntoHeading", 2),
|
|
95
96
|
keyword: ["h2", "medium heading"],
|
|
96
97
|
typeName: "heading"
|
|
97
98
|
},
|
|
98
99
|
{
|
|
99
100
|
id: "h3",
|
|
100
|
-
dom:
|
|
101
|
-
command: () => e.get(
|
|
101
|
+
dom: f(e.get(u), "Small Heading", "h3"),
|
|
102
|
+
command: () => e.get(p).call("TurnIntoHeading", 3),
|
|
102
103
|
keyword: ["h3", "small heading"],
|
|
103
104
|
typeName: "heading"
|
|
104
105
|
},
|
|
105
106
|
{
|
|
106
107
|
id: "bulletList",
|
|
107
|
-
dom:
|
|
108
|
-
command: () => e.get(
|
|
108
|
+
dom: f(e.get(u), "Bullet List", "bulletList"),
|
|
109
|
+
command: () => e.get(p).call("WrapInBulletList"),
|
|
109
110
|
keyword: ["bullet list", "ul"],
|
|
110
111
|
typeName: "bullet_list"
|
|
111
112
|
},
|
|
112
113
|
{
|
|
113
114
|
id: "orderedList",
|
|
114
|
-
dom:
|
|
115
|
-
command: () => e.get(
|
|
115
|
+
dom: f(e.get(u), "Ordered List", "orderedList"),
|
|
116
|
+
command: () => e.get(p).call("WrapInOrderedList"),
|
|
116
117
|
keyword: ["ordered list", "ol"],
|
|
117
118
|
typeName: "ordered_list"
|
|
118
119
|
},
|
|
119
120
|
{
|
|
120
121
|
id: "taskList",
|
|
121
|
-
dom:
|
|
122
|
-
command: () => e.get(
|
|
122
|
+
dom: f(e.get(u), "Task List", "taskList"),
|
|
123
|
+
command: () => e.get(p).call("TurnIntoTaskList"),
|
|
123
124
|
keyword: ["task list", "task"],
|
|
124
125
|
typeName: "task_list_item"
|
|
125
126
|
},
|
|
126
127
|
{
|
|
127
128
|
id: "image",
|
|
128
|
-
dom:
|
|
129
|
-
command: () => e.get(
|
|
129
|
+
dom: f(e.get(u), "Image", "image"),
|
|
130
|
+
command: () => e.get(p).call("InsertImage"),
|
|
130
131
|
keyword: ["image"],
|
|
131
132
|
typeName: "image"
|
|
132
133
|
},
|
|
133
134
|
{
|
|
134
135
|
id: "blockquote",
|
|
135
|
-
dom:
|
|
136
|
-
command: () => e.get(
|
|
136
|
+
dom: f(e.get(u), "Quote", "quote"),
|
|
137
|
+
command: () => e.get(p).call("WrapInBlockquote"),
|
|
137
138
|
keyword: ["quote", "blockquote"],
|
|
138
139
|
typeName: "blockquote"
|
|
139
140
|
},
|
|
140
141
|
{
|
|
141
142
|
id: "table",
|
|
142
|
-
dom:
|
|
143
|
-
command: () => e.get(
|
|
143
|
+
dom: f(e.get(u), "Table", "table"),
|
|
144
|
+
command: () => e.get(p).call("InsertTable"),
|
|
144
145
|
keyword: ["table"],
|
|
145
146
|
typeName: "table"
|
|
146
147
|
},
|
|
147
148
|
{
|
|
148
149
|
id: "code",
|
|
149
|
-
dom:
|
|
150
|
-
command: () => e.get(
|
|
150
|
+
dom: f(e.get(u), "Code Fence", "code"),
|
|
151
|
+
command: () => e.get(p).call("TurnIntoCodeFence"),
|
|
151
152
|
keyword: ["code"],
|
|
152
153
|
typeName: "fence"
|
|
153
154
|
},
|
|
154
155
|
{
|
|
155
156
|
id: "divider",
|
|
156
|
-
dom:
|
|
157
|
-
command: () => e.get(
|
|
157
|
+
dom: f(e.get(u), "Divide Line", "divider"),
|
|
158
|
+
command: () => e.get(p).call("InsertHr"),
|
|
158
159
|
keyword: ["divider", "hr"],
|
|
159
160
|
typeName: "hr"
|
|
160
161
|
}
|
|
161
162
|
], s = t.slice(1).toLocaleLowerCase();
|
|
162
|
-
return n.filter((r) => !!o[r.typeName] && r.keyword.some((
|
|
163
|
-
},
|
|
163
|
+
return n.filter((r) => !!o[r.typeName] && r.keyword.some((i) => i.includes(s))).map(({ keyword: r, typeName: i, ...a }) => a);
|
|
164
|
+
}, F = (e) => ({ content: t, isTopLevel: o }) => o ? t ? t.startsWith("/") ? t === "/" ? {
|
|
164
165
|
placeholder: "Type to filter...",
|
|
165
166
|
actions: L(e)
|
|
166
167
|
} : {
|
|
167
168
|
actions: L(e, t)
|
|
168
|
-
} : null : { placeholder: "Type / to use the slash commands..." } : null,
|
|
169
|
+
} : null : { placeholder: "Type / to use the slash commands..." } : null, j = (e, { css: t }) => {
|
|
169
170
|
const o = (s, r = 1) => e.get(y, [s, r]), n = e.get(k, "typography");
|
|
170
171
|
return t`
|
|
171
172
|
position: relative;
|
|
@@ -181,39 +182,41 @@ const q = (e, { css: t }) => {
|
|
|
181
182
|
align-items: center;
|
|
182
183
|
}
|
|
183
184
|
`;
|
|
184
|
-
},
|
|
185
|
+
}, z = (e, { css: t }) => t`
|
|
185
186
|
&::before {
|
|
186
187
|
left: 8px;
|
|
187
188
|
}
|
|
188
189
|
`, R = (e, t) => ({
|
|
189
190
|
handleKeyDown: (o, n) => !(e.isEmpty() || !(n instanceof KeyboardEvent) || !["ArrowUp", "ArrowDown", "Enter"].includes(n.key)),
|
|
190
191
|
decorations: (o) => {
|
|
191
|
-
const n = M(({ type:
|
|
192
|
+
const n = M(({ type: d }) => d.name === "paragraph")(o.selection), s = o.plugins.find(
|
|
193
|
+
(d) => d.key === "MILKDOWN_UPLOAD$"
|
|
194
|
+
), r = s == null ? void 0 : s.getState(o);
|
|
192
195
|
if (r != null && r.find(o.selection.from, o.selection.to).length > 0 || !n || n.node.childCount > 1 || o.selection.$from.parentOffset !== n.node.textContent.length || n.node.firstChild && n.node.firstChild.type.name !== "text")
|
|
193
196
|
return e.clear(), null;
|
|
194
|
-
const { placeholder:
|
|
197
|
+
const { placeholder: i, actions: a } = e.update({
|
|
195
198
|
parentNode: o.selection.$from.node(o.selection.$from.depth - 1),
|
|
196
199
|
isTopLevel: o.selection.$from.depth === 1,
|
|
197
200
|
content: n.node.textContent,
|
|
198
201
|
state: o
|
|
199
202
|
});
|
|
200
|
-
if (!
|
|
203
|
+
if (!i)
|
|
201
204
|
return null;
|
|
202
|
-
const l = (
|
|
203
|
-
const
|
|
205
|
+
const l = (d, h) => {
|
|
206
|
+
const g = n.pos;
|
|
204
207
|
return H.create(o.doc, [
|
|
205
|
-
|
|
206
|
-
class:
|
|
207
|
-
"data-text":
|
|
208
|
+
q.node(g, g + n.node.nodeSize, {
|
|
209
|
+
class: h.filter((v) => v).join(" "),
|
|
210
|
+
"data-text": d
|
|
208
211
|
})
|
|
209
212
|
]);
|
|
210
|
-
},
|
|
211
|
-
return
|
|
213
|
+
}, m = t.getStyle((d) => j(t.themeManager, d)), c = t.getStyle((d) => z(t.themeManager, d));
|
|
214
|
+
return a.length ? l(i, [m, c, "empty-node", "is-slash"]) : l(i, [m, "empty-node"]);
|
|
212
215
|
}
|
|
213
216
|
}), V = (e) => ({
|
|
214
217
|
id: e.id,
|
|
215
218
|
$: e.dom,
|
|
216
|
-
command:
|
|
219
|
+
command: B(e.command)
|
|
217
220
|
}), Q = () => ({
|
|
218
221
|
placeholder: null,
|
|
219
222
|
actions: []
|
|
@@ -241,7 +244,7 @@ const q = (e, { css: t }) => {
|
|
|
241
244
|
t.firstChild.remove();
|
|
242
245
|
n.forEach(({ $: r }) => {
|
|
243
246
|
r.classList.remove("active"), r.addEventListener("mouseenter", o.mouseEnter), r.addEventListener("mouseleave", o.mouseLeave), t.appendChild(r);
|
|
244
|
-
}), t.classList.remove("hide");
|
|
247
|
+
}), t.style.maxHeight = "", t.classList.remove("hide");
|
|
245
248
|
const s = n[0];
|
|
246
249
|
return s && (s.$.classList.add("active"), requestAnimationFrame(() => {
|
|
247
250
|
w(s.$, {
|
|
@@ -266,10 +269,10 @@ const q = (e, { css: t }) => {
|
|
|
266
269
|
}, Z = (e, t) => (o) => {
|
|
267
270
|
if (t.isLock())
|
|
268
271
|
return;
|
|
269
|
-
const { actions: n } = e.get(), s = n.findIndex((
|
|
272
|
+
const { actions: n } = e.get(), s = n.findIndex((a) => a.$.classList.contains("active")), r = n[s];
|
|
270
273
|
r && s >= 0 && r.$.classList.remove("active");
|
|
271
|
-
const { target:
|
|
272
|
-
|
|
274
|
+
const { target: i } = o;
|
|
275
|
+
i instanceof HTMLElement && i.classList.add("active");
|
|
273
276
|
}, ee = () => (e) => {
|
|
274
277
|
const { target: t } = e;
|
|
275
278
|
t instanceof HTMLElement && t.classList.remove("active");
|
|
@@ -279,14 +282,14 @@ const q = (e, { css: t }) => {
|
|
|
279
282
|
return;
|
|
280
283
|
const r = () => {
|
|
281
284
|
n.stopPropagation(), n.preventDefault();
|
|
282
|
-
}, { actions:
|
|
283
|
-
if (!
|
|
285
|
+
}, { actions: i } = e.get(), a = Object.values(i).find(({ $: l }) => l.contains(s));
|
|
286
|
+
if (!a) {
|
|
284
287
|
if (e.isEmpty())
|
|
285
288
|
return;
|
|
286
289
|
e.clear(), o.classList.add("hide"), r();
|
|
287
290
|
return;
|
|
288
291
|
}
|
|
289
|
-
r(),
|
|
292
|
+
r(), a.command(t.state, t.dispatch, t);
|
|
290
293
|
}, oe = (e, t, o, n) => (s) => {
|
|
291
294
|
if (!(s instanceof KeyboardEvent))
|
|
292
295
|
return;
|
|
@@ -294,25 +297,25 @@ const q = (e, { css: t }) => {
|
|
|
294
297
|
const { key: r } = s;
|
|
295
298
|
if (e.isEmpty() || !["ArrowDown", "ArrowUp", "Enter", "Escape"].includes(r))
|
|
296
299
|
return;
|
|
297
|
-
const { actions:
|
|
298
|
-
let
|
|
299
|
-
|
|
300
|
-
const l = (
|
|
301
|
-
const
|
|
302
|
-
!
|
|
300
|
+
const { actions: i } = e.get();
|
|
301
|
+
let a = i.findIndex(({ $: c }) => c.classList.contains("active"));
|
|
302
|
+
a < 0 && (a = 0);
|
|
303
|
+
const l = (c) => {
|
|
304
|
+
const d = i[a], h = i[c];
|
|
305
|
+
!d || !h || (d.$.classList.remove("active"), h.$.classList.add("active"), w(h.$, {
|
|
303
306
|
scrollMode: "if-needed",
|
|
304
307
|
block: "nearest",
|
|
305
308
|
inline: "nearest"
|
|
306
309
|
}));
|
|
307
310
|
};
|
|
308
311
|
if (r === "ArrowDown") {
|
|
309
|
-
const
|
|
310
|
-
l(
|
|
312
|
+
const c = a === i.length - 1 ? 0 : a + 1;
|
|
313
|
+
l(c);
|
|
311
314
|
return;
|
|
312
315
|
}
|
|
313
316
|
if (r === "ArrowUp") {
|
|
314
|
-
const
|
|
315
|
-
l(
|
|
317
|
+
const c = a === 0 ? i.length - 1 : a - 1;
|
|
318
|
+
l(c);
|
|
316
319
|
return;
|
|
317
320
|
}
|
|
318
321
|
if (r === "Escape") {
|
|
@@ -321,60 +324,61 @@ const q = (e, { css: t }) => {
|
|
|
321
324
|
e.clear(), o.classList.add("hide");
|
|
322
325
|
return;
|
|
323
326
|
}
|
|
324
|
-
const
|
|
325
|
-
!
|
|
327
|
+
const m = i[a];
|
|
328
|
+
!m || (m.command(t.state, t.dispatch, t), m.$.classList.remove("active"));
|
|
326
329
|
}, ne = (e, t) => {
|
|
327
330
|
P(e, t, (o, n, s) => {
|
|
328
331
|
const r = t.parentElement;
|
|
329
332
|
if (!r)
|
|
330
|
-
throw
|
|
331
|
-
let
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
333
|
+
throw A();
|
|
334
|
+
let i = o.left - s.left;
|
|
335
|
+
i < 0 && (i = 0);
|
|
336
|
+
let a, l;
|
|
337
|
+
const m = o.top - s.top, c = s.height + s.top - o.bottom;
|
|
338
|
+
c >= n.height + 28 ? a = "bottom" : m >= n.height + 28 ? a = "top" : c >= m ? (a = "bottom", l = c - 28) : (a = "top", l = m - 28), (m < 0 || c < 0) && (l = s.height - o.height - 28, l > n.height && (l = void 0));
|
|
339
|
+
const d = a === "top" ? o.top - s.top - (l != null ? l : n.height) - 14 + r.scrollTop : o.bottom - s.top + 14 + r.scrollTop;
|
|
340
|
+
return t.style.maxHeight = l !== void 0 && l > 0 ? `${l}px` : "", [d, i];
|
|
337
341
|
});
|
|
338
342
|
}, re = (e, t, o, n, s) => {
|
|
339
343
|
const r = t.dom.parentNode;
|
|
340
344
|
if (!r)
|
|
341
345
|
return {};
|
|
342
|
-
const
|
|
343
|
-
r.appendChild(
|
|
344
|
-
const l = Y(
|
|
345
|
-
return r.addEventListener("mousemove", l), r.addEventListener("mousedown",
|
|
346
|
-
update: (
|
|
347
|
-
!J(e,
|
|
348
|
-
mouseEnter:
|
|
349
|
-
mouseLeave:
|
|
350
|
-
}) || s(
|
|
346
|
+
const i = U(o, n), a = X();
|
|
347
|
+
r.appendChild(i);
|
|
348
|
+
const l = Y(a), m = te(e, t, i), c = oe(e, t, i, a), d = Z(e, a), h = ee();
|
|
349
|
+
return r.addEventListener("mousemove", l), r.addEventListener("mousedown", m), r.addEventListener("keydown", c), {
|
|
350
|
+
update: (g) => {
|
|
351
|
+
!J(e, i, {
|
|
352
|
+
mouseEnter: d,
|
|
353
|
+
mouseLeave: h
|
|
354
|
+
}) || s(g, i);
|
|
351
355
|
},
|
|
352
356
|
destroy: () => {
|
|
353
|
-
r.removeEventListener("mousemove", l), r.removeEventListener("mousedown",
|
|
357
|
+
r.removeEventListener("mousemove", l), r.removeEventListener("mousedown", m), r.removeEventListener("keydown", c), i.remove();
|
|
354
358
|
}
|
|
355
359
|
};
|
|
356
|
-
}, se = "MILKDOWN_SLASH",
|
|
360
|
+
}, se = "MILKDOWN_SLASH", ie = (e, t, o, n) => {
|
|
357
361
|
const s = G(t);
|
|
358
|
-
return new
|
|
362
|
+
return new D({
|
|
359
363
|
key: new _(se),
|
|
360
364
|
props: R(s, e),
|
|
361
365
|
view: (r) => re(s, r, e, o, n)
|
|
362
366
|
});
|
|
363
|
-
},
|
|
367
|
+
}, ae = b((e, t) => {
|
|
364
368
|
var s, r;
|
|
365
|
-
const o = (s = t == null ? void 0 : t.config) != null ? s :
|
|
369
|
+
const o = (s = t == null ? void 0 : t.config) != null ? s : F, n = (r = t == null ? void 0 : t.calcPosition) != null ? r : ne;
|
|
366
370
|
return {
|
|
367
|
-
prosePlugins: (
|
|
368
|
-
const l = o(
|
|
369
|
-
return [
|
|
371
|
+
prosePlugins: (i, a) => {
|
|
372
|
+
const l = o(a);
|
|
373
|
+
return [ie(e, l, "slash-dropdown", n)];
|
|
370
374
|
}
|
|
371
375
|
};
|
|
372
|
-
}),
|
|
376
|
+
}), he = $.create([ae()]);
|
|
373
377
|
export {
|
|
374
|
-
|
|
378
|
+
f as createDropdownItem,
|
|
375
379
|
L as defaultActions,
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
380
|
+
F as defaultConfig,
|
|
381
|
+
he as slash,
|
|
382
|
+
ae as slashPlugin
|
|
379
383
|
};
|
|
380
384
|
//# sourceMappingURL=index.es.js.map
|
package/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../src/style.ts","../src/utility.ts","../src/config.ts","../src/prose-plugin/props.ts","../src/item.ts","../src/prose-plugin/status.ts","../src/prose-plugin/dropdown.ts","../src/prose-plugin/input.ts","../src/prose-plugin/view.ts","../src/prose-plugin/index.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport {\n Color,\n Emotion,\n ThemeBorder,\n ThemeColor,\n ThemeFont,\n ThemeManager,\n ThemeScrollbar,\n ThemeShadow,\n ThemeSize,\n} from '@milkdown/core';\n\nconst itemStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n return css`\n .slash-dropdown-item {\n display: flex;\n gap: 32px;\n height: 48px;\n padding: 0 16px;\n align-items: center;\n justify-content: flex-start;\n cursor: pointer;\n line-height: 48px;\n font-family: ${themeManager.get(ThemeFont, 'typography')};\n font-size: 14px;\n\n transition: all 0.2s ease-in-out;\n\n &,\n .icon {\n color: ${palette('neutral', 0.87)};\n transition: all 0.2s ease-in-out;\n }\n\n &.hide {\n display: none;\n }\n\n &.active {\n background: ${palette('secondary', 0.12)};\n &,\n .icon {\n color: ${palette('primary')};\n }\n }\n }\n `;\n};\n\nexport const injectStyle = (themeManager: ThemeManager, emotion: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n\n return emotion.css`\n width: 320px;\n max-height: 320px;\n overflow-y: auto;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n position: absolute;\n background: ${palette('surface')};\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n ${themeManager.get(ThemeScrollbar, undefined)}\n\n &.hide {\n display: none;\n }\n\n ${itemStyle(themeManager, emotion)}\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { ThemeIcon, ThemeManager } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport { missingIcon } from '@milkdown/exception';\nimport type { Node } from '@milkdown/prose/model';\nimport type { Command } from '@milkdown/prose/state';\nimport type { ThemeUtils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createDropdown = (utils: ThemeUtils, className: string) => {\n const div = document.createElement('div');\n div.setAttribute('role', 'listbox');\n div.setAttribute('tabindex', '-1');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className), 'hide');\n\n return div;\n};\n\ntype ItemOptions = {\n textClassName: string;\n};\nexport const createDropdownItem = (\n themeManager: ThemeManager,\n text: string,\n icon: Icon,\n options?: Partial<ItemOptions>,\n) => {\n const textClassName = options?.textClassName ?? 'text';\n\n const div = document.createElement('div');\n div.setAttribute('role', 'option');\n div.classList.add('slash-dropdown-item');\n\n const iconSpan = themeManager.get(ThemeIcon, icon);\n\n if (!iconSpan) {\n throw missingIcon(icon);\n }\n\n const textSpan = document.createElement('span');\n textSpan.textContent = text;\n textSpan.className = textClassName;\n\n div.appendChild(iconSpan.dom);\n div.appendChild(textSpan);\n\n return div;\n};\n\nexport const getDepth = (node: Node) => {\n let cur = node;\n let depth = 0;\n while (cur.childCount) {\n cur = cur.child(0);\n depth += 1;\n }\n\n return depth;\n};\n\nconst cleanUp: Command = (state, dispatch) => {\n const { selection } = state;\n const { $from } = selection;\n const tr = state.tr.deleteRange($from.start(), $from.pos);\n dispatch?.(tr);\n return false;\n};\n\nexport const cleanUpAndCreateNode =\n (createCommand: () => void): Command =>\n (state, dispatch, view) => {\n if (view) {\n cleanUp(state, dispatch, view);\n createCommand();\n }\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, schemaCtx, themeManagerCtx } from '@milkdown/core';\nimport { Node } from '@milkdown/prose/model';\nimport { EditorState } from '@milkdown/prose/state';\n\nimport { WrappedAction } from './item';\nimport { createDropdownItem } from './utility';\n\ntype Nullable<T> = T | null | undefined;\n\nexport type StatusConfig = {\n placeholder?: Nullable<string>;\n actions?: Nullable<WrappedAction[]>;\n};\n\nexport type StatusConfigBuilderParams = {\n content: string;\n isTopLevel: boolean;\n parentNode: Node;\n state: EditorState;\n};\n\nexport type StatusConfigBuilder = (params: StatusConfigBuilderParams) => Nullable<StatusConfig>;\n\nexport type Config = (ctx: Ctx) => StatusConfigBuilder;\n\nexport const defaultActions = (ctx: Ctx, input = '/'): WrappedAction[] => {\n const { nodes } = ctx.get(schemaCtx);\n const actions: Array<WrappedAction & { keyword: string[]; typeName: string }> = [\n {\n id: 'h1',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Large Heading', 'h1'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 1),\n keyword: ['h1', 'large heading'],\n typeName: 'heading',\n },\n {\n id: 'h2',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Medium Heading', 'h2'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 2),\n keyword: ['h2', 'medium heading'],\n typeName: 'heading',\n },\n {\n id: 'h3',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Small Heading', 'h3'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 3),\n keyword: ['h3', 'small heading'],\n typeName: 'heading',\n },\n {\n id: 'bulletList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Bullet List', 'bulletList'),\n command: () => ctx.get(commandsCtx).call('WrapInBulletList'),\n keyword: ['bullet list', 'ul'],\n typeName: 'bullet_list',\n },\n {\n id: 'orderedList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Ordered List', 'orderedList'),\n command: () => ctx.get(commandsCtx).call('WrapInOrderedList'),\n keyword: ['ordered list', 'ol'],\n typeName: 'ordered_list',\n },\n {\n id: 'taskList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Task List', 'taskList'),\n command: () => ctx.get(commandsCtx).call('TurnIntoTaskList'),\n keyword: ['task list', 'task'],\n typeName: 'task_list_item',\n },\n {\n id: 'image',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Image', 'image'),\n command: () => ctx.get(commandsCtx).call('InsertImage'),\n keyword: ['image'],\n typeName: 'image',\n },\n {\n id: 'blockquote',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Quote', 'quote'),\n command: () => ctx.get(commandsCtx).call('WrapInBlockquote'),\n keyword: ['quote', 'blockquote'],\n typeName: 'blockquote',\n },\n {\n id: 'table',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Table', 'table'),\n command: () => ctx.get(commandsCtx).call('InsertTable'),\n keyword: ['table'],\n typeName: 'table',\n },\n {\n id: 'code',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Code Fence', 'code'),\n command: () => ctx.get(commandsCtx).call('TurnIntoCodeFence'),\n keyword: ['code'],\n typeName: 'fence',\n },\n {\n id: 'divider',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Divide Line', 'divider'),\n command: () => ctx.get(commandsCtx).call('InsertHr'),\n keyword: ['divider', 'hr'],\n typeName: 'hr',\n },\n ];\n\n const userInput = input.slice(1).toLocaleLowerCase();\n\n return actions\n .filter((action) => !!nodes[action.typeName] && action.keyword.some((keyword) => keyword.includes(userInput)))\n .map(({ keyword, typeName, ...action }) => action);\n};\n\nexport const defaultConfig: Config = (ctx) => {\n return ({ content, isTopLevel }) => {\n if (!isTopLevel) return null;\n\n if (!content) {\n return { placeholder: 'Type / to use the slash commands...' };\n }\n\n if (content.startsWith('/')) {\n return content === '/'\n ? {\n placeholder: 'Type to filter...',\n actions: defaultActions(ctx),\n }\n : {\n actions: defaultActions(ctx, content),\n };\n }\n\n return null;\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeColor, ThemeFont, ThemeManager } from '@milkdown/core';\nimport { findParentNode } from '@milkdown/prose';\nimport { EditorState } from '@milkdown/prose/state';\nimport { Decoration, DecorationSet, EditorView } from '@milkdown/prose/view';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport type { Status } from './status';\n\nexport type Props = ReturnType<typeof createProps>;\n\nconst createEmptyStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const typography = themeManager.get(ThemeFont, 'typography');\n\n return css`\n position: relative;\n &::before {\n position: absolute;\n cursor: text;\n font-family: ${typography};\n font-size: 14px;\n color: ${palette('neutral', 0.6)};\n content: attr(data-text);\n height: 100%;\n display: flex;\n align-items: center;\n }\n `;\n};\n\nconst createSlashStyle = (_: ThemeManager, { css }: Emotion) => css`\n &::before {\n left: 8px;\n }\n`;\n\nexport const createProps = (status: Status, utils: ThemeUtils) => {\n return {\n handleKeyDown: (_: EditorView, event: Event) => {\n if (status.isEmpty()) {\n return false;\n }\n if (!(event instanceof KeyboardEvent)) {\n return false;\n }\n\n if (!['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key)) {\n return false;\n }\n\n return true;\n },\n decorations: (state: EditorState) => {\n const paragraph = findParentNode(({ type }) => type.name === 'paragraph')(state.selection);\n const uploadPlugin = state.plugins.find(\n (x) => (x as unknown as { key: string }).key === 'MILKDOWN_UPLOAD$',\n );\n const decorations: DecorationSet = uploadPlugin?.getState(state);\n if (decorations != null && decorations.find(state.selection.from, state.selection.to).length > 0) {\n status.clear();\n return null;\n }\n\n if (\n !paragraph ||\n paragraph.node.childCount > 1 ||\n state.selection.$from.parentOffset !== paragraph.node.textContent.length ||\n (paragraph.node.firstChild && paragraph.node.firstChild.type.name !== 'text')\n ) {\n status.clear();\n return null;\n }\n\n const { placeholder, actions } = status.update({\n parentNode: state.selection.$from.node(state.selection.$from.depth - 1),\n isTopLevel: state.selection.$from.depth === 1,\n content: paragraph.node.textContent,\n state,\n });\n\n if (!placeholder) {\n return null;\n }\n\n const createDecoration = (text: string, className: (string | undefined)[]) => {\n const pos = paragraph.pos;\n return DecorationSet.create(state.doc, [\n Decoration.node(pos, pos + paragraph.node.nodeSize, {\n class: className.filter((x) => x).join(' '),\n 'data-text': text,\n }),\n ]);\n };\n\n const emptyStyle = utils.getStyle((emotion) => createEmptyStyle(utils.themeManager, emotion));\n const slashStyle = utils.getStyle((emotion) => createSlashStyle(utils.themeManager, emotion));\n\n if (actions.length) {\n return createDecoration(placeholder, [emptyStyle, slashStyle, 'empty-node', 'is-slash']);\n }\n\n return createDecoration(placeholder, [emptyStyle, 'empty-node']);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Command } from '@milkdown/prose/state';\n\nimport { cleanUpAndCreateNode } from './utility';\n\nexport type Action = {\n id: string;\n $: HTMLElement;\n command: Command;\n};\n\nexport type WrappedAction = Pick<Action, 'id'> & {\n command: () => void;\n dom: HTMLElement;\n};\n\nexport const transformAction = (action: WrappedAction): Action => ({\n id: action.id,\n $: action.dom,\n command: cleanUpAndCreateNode(action.command),\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { StatusConfigBuilder, StatusConfigBuilderParams } from '..';\nimport { Action, transformAction } from '../item';\n\nexport type StatusCtx = {\n placeholder: string | null;\n actions: Action[];\n};\n\nconst createStatusCtx = (): StatusCtx => {\n return {\n placeholder: null,\n actions: [],\n };\n};\n\nexport type Status = ReturnType<typeof createStatus>;\n\nexport const createStatus = (builder: StatusConfigBuilder) => {\n const statusCtx = createStatusCtx();\n\n return {\n get: () => statusCtx,\n clear: () => {\n statusCtx.placeholder = null;\n statusCtx.actions = [];\n },\n update: (builderParams: StatusConfigBuilderParams) => {\n const config = builder(builderParams);\n statusCtx.placeholder = config?.placeholder ?? null;\n statusCtx.actions = (config?.actions ?? []).map(transformAction);\n return statusCtx;\n },\n isEmpty: () => statusCtx.actions.length === 0,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport scrollIntoView from 'smooth-scroll-into-view-if-needed';\n\nimport { Status } from './status';\n\ntype Listeners = {\n mouseEnter: EventListener;\n mouseLeave: EventListener;\n};\n\nexport const renderDropdown = (status: Status, dropdownElement: HTMLElement, listeners: Listeners): boolean => {\n const { actions } = status.get();\n\n if (!actions.length) {\n dropdownElement.classList.add('hide');\n return false;\n }\n\n dropdownElement.childNodes.forEach((child) => {\n child.removeEventListener('mouseenter', listeners.mouseEnter);\n child.removeEventListener('mouseleave', listeners.mouseLeave);\n });\n\n while (dropdownElement.firstChild) {\n dropdownElement.firstChild.remove();\n }\n\n actions.forEach(({ $ }) => {\n $.classList.remove('active');\n $.addEventListener('mouseenter', listeners.mouseEnter);\n $.addEventListener('mouseleave', listeners.mouseLeave);\n dropdownElement.appendChild($);\n });\n\n dropdownElement.classList.remove('hide');\n\n const first$ = actions[0];\n if (first$) {\n first$.$.classList.add('active');\n requestAnimationFrame(() => {\n scrollIntoView(first$.$, {\n scrollMode: 'if-needed',\n block: 'nearest',\n inline: 'nearest',\n });\n });\n }\n\n return true;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { EditorView } from '@milkdown/prose/view';\nimport scrollIntoView from 'smooth-scroll-into-view-if-needed';\n\nimport { Status } from './status';\n\nexport const createMouseManager = () => {\n let mouseLock = false;\n\n return {\n isLock: () => mouseLock,\n lock: () => {\n mouseLock = true;\n },\n unlock: () => {\n mouseLock = false;\n },\n };\n};\nexport type MouseManager = ReturnType<typeof createMouseManager>;\n\nexport const handleMouseMove = (mouseManager: MouseManager) => () => {\n mouseManager.unlock();\n};\n\nexport const handleMouseEnter = (status: Status, mouseManager: MouseManager) => (e: MouseEvent) => {\n if (mouseManager.isLock()) return;\n const { actions } = status.get();\n const active = actions.findIndex((x) => x.$.classList.contains('active'));\n const active$ = actions[active];\n if (active$ && active >= 0) {\n active$.$.classList.remove('active');\n }\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n target.classList.add('active');\n};\n\nexport const handleMouseLeave = () => (e: MouseEvent) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n target.classList.remove('active');\n};\n\nexport const handleClick =\n (status: Status, view: EditorView, dropdownElement: HTMLElement) =>\n (e: Event): void => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n if (!view) return;\n\n const stop = () => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n const { actions } = status.get();\n\n const el = Object.values(actions).find(({ $ }) => $.contains(target));\n if (!el) {\n if (status.isEmpty()) return;\n\n status.clear();\n dropdownElement.classList.add('hide');\n stop();\n\n return;\n }\n\n stop();\n el.command(view.state, view.dispatch, view);\n };\n\nexport const handleKeydown =\n (status: Status, view: EditorView, dropdownElement: HTMLElement, mouseManager: MouseManager) => (e: Event) => {\n if (!(e instanceof KeyboardEvent)) return;\n if (!mouseManager.isLock()) mouseManager.lock();\n\n const { key } = e;\n if (status.isEmpty()) return;\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(key)) return;\n\n const { actions } = status.get();\n\n let active = actions.findIndex(({ $ }) => $.classList.contains('active'));\n if (active < 0) active = 0;\n\n const moveActive = (next: number) => {\n const active$ = actions[active];\n const next$ = actions[next];\n if (!active$ || !next$) return;\n active$.$.classList.remove('active');\n next$.$.classList.add('active');\n scrollIntoView(next$.$, {\n scrollMode: 'if-needed',\n block: 'nearest',\n inline: 'nearest',\n });\n };\n\n if (key === 'ArrowDown') {\n const next = active === actions.length - 1 ? 0 : active + 1;\n\n moveActive(next);\n return;\n }\n\n if (key === 'ArrowUp') {\n const next = active === 0 ? actions.length - 1 : active - 1;\n\n moveActive(next);\n return;\n }\n\n if (key === 'Escape') {\n if (status.isEmpty()) return;\n\n status.clear();\n dropdownElement.classList.add('hide');\n return;\n }\n\n const active$ = actions[active];\n if (!active$) return;\n active$.command(view.state, view.dispatch, view);\n active$.$.classList.remove('active');\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { missingRootElement } from '@milkdown/exception';\nimport { calculateNodePosition } from '@milkdown/prose';\nimport { EditorView } from '@milkdown/prose/view';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport { createDropdown } from '../utility';\nimport { renderDropdown } from './dropdown';\nimport {\n createMouseManager,\n handleClick,\n handleKeydown,\n handleMouseEnter,\n handleMouseLeave,\n handleMouseMove,\n} from './input';\nimport { Status } from './status';\n\nexport const defaultCalcPosition = (view: EditorView, dropdownElement: HTMLElement) => {\n calculateNodePosition(view, dropdownElement, (selected, target, parent) => {\n const $editor = dropdownElement.parentElement;\n if (!$editor) {\n throw missingRootElement();\n }\n\n let left = selected.left - parent.left;\n let top = selected.bottom - parent.top + 14 + $editor.scrollTop;\n\n if (left < 0) {\n left = 0;\n }\n\n if (parent.height + parent.top - selected.bottom < target.height) {\n const topOffset = selected.top - parent.top - target.height - 14 + $editor.scrollTop;\n if (topOffset > 0) {\n top = topOffset;\n }\n }\n return [top, left];\n });\n};\n\nexport type CalcPosition = (view: EditorView, dropdownElement: HTMLElement) => void;\n\nexport const createView = (\n status: Status,\n view: EditorView,\n utils: ThemeUtils,\n className: string,\n calcPosition: CalcPosition,\n) => {\n const wrapper = view.dom.parentNode;\n if (!wrapper) return {};\n\n const dropdownElement = createDropdown(utils, className);\n const mouseManager = createMouseManager();\n wrapper.appendChild(dropdownElement);\n\n const _mouseMove = handleMouseMove(mouseManager);\n const _mouseDown = handleClick(status, view, dropdownElement);\n const _keydown = handleKeydown(status, view, dropdownElement, mouseManager);\n const _mouseEnter = handleMouseEnter(status, mouseManager);\n const _mouseLeave = handleMouseLeave();\n\n wrapper.addEventListener('mousemove', _mouseMove);\n wrapper.addEventListener('mousedown', _mouseDown);\n wrapper.addEventListener('keydown', _keydown);\n\n return {\n update: (view: EditorView) => {\n const show = renderDropdown(status, dropdownElement, {\n mouseEnter: _mouseEnter as EventListener,\n mouseLeave: _mouseLeave as EventListener,\n });\n\n if (!show) return;\n\n calcPosition(view, dropdownElement);\n },\n\n destroy: () => {\n wrapper.removeEventListener('mousemove', _mouseMove);\n wrapper.removeEventListener('mousedown', _mouseDown);\n wrapper.removeEventListener('keydown', _keydown);\n dropdownElement.remove();\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport type { StatusConfigBuilder } from '..';\nimport { createProps } from './props';\nimport { createStatus } from './status';\nimport { CalcPosition, createView } from './view';\n\nexport const key = 'MILKDOWN_SLASH';\n\nexport const createSlashPlugin = (\n utils: ThemeUtils,\n builder: StatusConfigBuilder,\n className: string,\n calcPosition: CalcPosition,\n) => {\n const status = createStatus(builder);\n\n return new Plugin({\n key: new PluginKey(key),\n props: createProps(status, utils),\n view: (view) => createView(status, view, utils, className, calcPosition),\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { AtomList, createPlugin } from '@milkdown/utils';\n\nimport type { Config } from './config';\nimport { defaultConfig } from './config';\nimport { createSlashPlugin } from './prose-plugin';\nimport { CalcPosition, defaultCalcPosition } from './prose-plugin/view';\n\nexport type { Config, StatusConfig, StatusConfigBuilder, StatusConfigBuilderParams } from './config';\nexport { defaultActions, defaultConfig } from './config';\nexport type { Action, WrappedAction } from './item';\nexport { createDropdownItem } from './utility';\n\nexport type Options = {\n config: Config;\n calcPosition: CalcPosition;\n};\n\nexport const slashPlugin = createPlugin<string, Options>((utils, options) => {\n const slashConfig = options?.config ?? defaultConfig;\n const calcPosition = options?.calcPosition ?? defaultCalcPosition;\n\n return {\n prosePlugins: (_, ctx) => {\n const config = slashConfig(ctx);\n\n const plugin = createSlashPlugin(utils, config, 'slash-dropdown', calcPosition);\n\n return [plugin];\n },\n };\n});\n\nexport const slash = AtomList.create([slashPlugin()]);\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../src/style.ts","../src/utility.ts","../src/config.ts","../src/prose-plugin/props.ts","../src/item.ts","../src/prose-plugin/status.ts","../src/prose-plugin/dropdown.ts","../src/prose-plugin/input.ts","../src/prose-plugin/view.ts","../src/prose-plugin/index.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport {\n Color,\n Emotion,\n ThemeBorder,\n ThemeColor,\n ThemeFont,\n ThemeManager,\n ThemeScrollbar,\n ThemeShadow,\n ThemeSize,\n} from '@milkdown/core';\n\nconst itemStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n return css`\n .slash-dropdown-item {\n display: flex;\n gap: 32px;\n height: 48px;\n padding: 0 16px;\n align-items: center;\n justify-content: flex-start;\n cursor: pointer;\n line-height: 48px;\n font-family: ${themeManager.get(ThemeFont, 'typography')};\n font-size: 14px;\n\n transition: all 0.2s ease-in-out;\n\n &,\n .icon {\n color: ${palette('neutral', 0.87)};\n transition: all 0.2s ease-in-out;\n }\n\n &.hide {\n display: none;\n }\n\n &.active {\n background: ${palette('secondary', 0.12)};\n &,\n .icon {\n color: ${palette('primary')};\n }\n }\n }\n `;\n};\n\nexport const injectStyle = (themeManager: ThemeManager, emotion: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n\n return emotion.css`\n width: 320px;\n min-height: 48px;\n max-height: 320px;\n overflow-y: auto;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n position: absolute;\n background: ${palette('surface')};\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n ${themeManager.get(ThemeScrollbar, undefined)}\n\n &.hide {\n display: none;\n }\n\n ${itemStyle(themeManager, emotion)}\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { ThemeIcon, ThemeManager } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport { missingIcon } from '@milkdown/exception';\nimport type { Node } from '@milkdown/prose/model';\nimport type { Command } from '@milkdown/prose/state';\nimport type { ThemeUtils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createDropdown = (utils: ThemeUtils, className: string) => {\n const div = document.createElement('div');\n div.setAttribute('role', 'listbox');\n div.setAttribute('tabindex', '-1');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion));\n\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className), 'hide');\n\n return div;\n};\n\ntype ItemOptions = {\n textClassName: string;\n};\nexport const createDropdownItem = (\n themeManager: ThemeManager,\n text: string,\n icon: Icon,\n options?: Partial<ItemOptions>,\n) => {\n const textClassName = options?.textClassName ?? 'text';\n\n const div = document.createElement('div');\n div.setAttribute('role', 'option');\n div.classList.add('slash-dropdown-item');\n\n const iconSpan = themeManager.get(ThemeIcon, icon);\n\n if (!iconSpan) {\n throw missingIcon(icon);\n }\n\n const textSpan = document.createElement('span');\n textSpan.textContent = text;\n textSpan.className = textClassName;\n\n div.appendChild(iconSpan.dom);\n div.appendChild(textSpan);\n\n return div;\n};\n\nexport const getDepth = (node: Node) => {\n let cur = node;\n let depth = 0;\n while (cur.childCount) {\n cur = cur.child(0);\n depth += 1;\n }\n\n return depth;\n};\n\nconst cleanUp: Command = (state, dispatch) => {\n const { selection } = state;\n const { $from } = selection;\n const tr = state.tr.deleteRange($from.start(), $from.pos);\n dispatch?.(tr);\n return false;\n};\n\nexport const cleanUpAndCreateNode =\n (createCommand: () => void): Command =>\n (state, dispatch, view) => {\n if (view) {\n cleanUp(state, dispatch, view);\n createCommand();\n }\n return true;\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, schemaCtx, themeManagerCtx } from '@milkdown/core';\nimport { Node } from '@milkdown/prose/model';\nimport { EditorState } from '@milkdown/prose/state';\n\nimport { WrappedAction } from './item';\nimport { createDropdownItem } from './utility';\n\ntype Nullable<T> = T | null | undefined;\n\nexport type StatusConfig = {\n placeholder?: Nullable<string>;\n actions?: Nullable<WrappedAction[]>;\n};\n\nexport type StatusConfigBuilderParams = {\n content: string;\n isTopLevel: boolean;\n parentNode: Node;\n state: EditorState;\n};\n\nexport type StatusConfigBuilder = (params: StatusConfigBuilderParams) => Nullable<StatusConfig>;\n\nexport type Config = (ctx: Ctx) => StatusConfigBuilder;\n\nexport const defaultActions = (ctx: Ctx, input = '/'): WrappedAction[] => {\n const { nodes } = ctx.get(schemaCtx);\n const actions: Array<WrappedAction & { keyword: string[]; typeName: string }> = [\n {\n id: 'h1',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Large Heading', 'h1'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 1),\n keyword: ['h1', 'large heading'],\n typeName: 'heading',\n },\n {\n id: 'h2',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Medium Heading', 'h2'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 2),\n keyword: ['h2', 'medium heading'],\n typeName: 'heading',\n },\n {\n id: 'h3',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Small Heading', 'h3'),\n command: () => ctx.get(commandsCtx).call('TurnIntoHeading', 3),\n keyword: ['h3', 'small heading'],\n typeName: 'heading',\n },\n {\n id: 'bulletList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Bullet List', 'bulletList'),\n command: () => ctx.get(commandsCtx).call('WrapInBulletList'),\n keyword: ['bullet list', 'ul'],\n typeName: 'bullet_list',\n },\n {\n id: 'orderedList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Ordered List', 'orderedList'),\n command: () => ctx.get(commandsCtx).call('WrapInOrderedList'),\n keyword: ['ordered list', 'ol'],\n typeName: 'ordered_list',\n },\n {\n id: 'taskList',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Task List', 'taskList'),\n command: () => ctx.get(commandsCtx).call('TurnIntoTaskList'),\n keyword: ['task list', 'task'],\n typeName: 'task_list_item',\n },\n {\n id: 'image',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Image', 'image'),\n command: () => ctx.get(commandsCtx).call('InsertImage'),\n keyword: ['image'],\n typeName: 'image',\n },\n {\n id: 'blockquote',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Quote', 'quote'),\n command: () => ctx.get(commandsCtx).call('WrapInBlockquote'),\n keyword: ['quote', 'blockquote'],\n typeName: 'blockquote',\n },\n {\n id: 'table',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Table', 'table'),\n command: () => ctx.get(commandsCtx).call('InsertTable'),\n keyword: ['table'],\n typeName: 'table',\n },\n {\n id: 'code',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Code Fence', 'code'),\n command: () => ctx.get(commandsCtx).call('TurnIntoCodeFence'),\n keyword: ['code'],\n typeName: 'fence',\n },\n {\n id: 'divider',\n dom: createDropdownItem(ctx.get(themeManagerCtx), 'Divide Line', 'divider'),\n command: () => ctx.get(commandsCtx).call('InsertHr'),\n keyword: ['divider', 'hr'],\n typeName: 'hr',\n },\n ];\n\n const userInput = input.slice(1).toLocaleLowerCase();\n\n return actions\n .filter((action) => !!nodes[action.typeName] && action.keyword.some((keyword) => keyword.includes(userInput)))\n .map(({ keyword, typeName, ...action }) => action);\n};\n\nexport const defaultConfig: Config = (ctx) => {\n return ({ content, isTopLevel }) => {\n if (!isTopLevel) return null;\n\n if (!content) {\n return { placeholder: 'Type / to use the slash commands...' };\n }\n\n if (content.startsWith('/')) {\n return content === '/'\n ? {\n placeholder: 'Type to filter...',\n actions: defaultActions(ctx),\n }\n : {\n actions: defaultActions(ctx, content),\n };\n }\n\n return null;\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeColor, ThemeFont, ThemeManager } from '@milkdown/core';\nimport { findParentNode } from '@milkdown/prose';\nimport { EditorState } from '@milkdown/prose/state';\nimport { Decoration, DecorationSet, EditorView } from '@milkdown/prose/view';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport type { Status } from './status';\n\nexport type Props = ReturnType<typeof createProps>;\n\nconst createEmptyStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const typography = themeManager.get(ThemeFont, 'typography');\n\n return css`\n position: relative;\n &::before {\n position: absolute;\n cursor: text;\n font-family: ${typography};\n font-size: 14px;\n color: ${palette('neutral', 0.6)};\n content: attr(data-text);\n height: 100%;\n display: flex;\n align-items: center;\n }\n `;\n};\n\nconst createSlashStyle = (_: ThemeManager, { css }: Emotion) => css`\n &::before {\n left: 8px;\n }\n`;\n\nexport const createProps = (status: Status, utils: ThemeUtils) => {\n return {\n handleKeyDown: (_: EditorView, event: Event) => {\n if (status.isEmpty()) {\n return false;\n }\n if (!(event instanceof KeyboardEvent)) {\n return false;\n }\n\n if (!['ArrowUp', 'ArrowDown', 'Enter'].includes(event.key)) {\n return false;\n }\n\n return true;\n },\n decorations: (state: EditorState) => {\n const paragraph = findParentNode(({ type }) => type.name === 'paragraph')(state.selection);\n const uploadPlugin = state.plugins.find(\n (x) => (x as unknown as { key: string }).key === 'MILKDOWN_UPLOAD$',\n );\n const decorations: DecorationSet = uploadPlugin?.getState(state);\n if (decorations != null && decorations.find(state.selection.from, state.selection.to).length > 0) {\n status.clear();\n return null;\n }\n\n if (\n !paragraph ||\n paragraph.node.childCount > 1 ||\n state.selection.$from.parentOffset !== paragraph.node.textContent.length ||\n (paragraph.node.firstChild && paragraph.node.firstChild.type.name !== 'text')\n ) {\n status.clear();\n return null;\n }\n\n const { placeholder, actions } = status.update({\n parentNode: state.selection.$from.node(state.selection.$from.depth - 1),\n isTopLevel: state.selection.$from.depth === 1,\n content: paragraph.node.textContent,\n state,\n });\n\n if (!placeholder) {\n return null;\n }\n\n const createDecoration = (text: string, className: (string | undefined)[]) => {\n const pos = paragraph.pos;\n return DecorationSet.create(state.doc, [\n Decoration.node(pos, pos + paragraph.node.nodeSize, {\n class: className.filter((x) => x).join(' '),\n 'data-text': text,\n }),\n ]);\n };\n\n const emptyStyle = utils.getStyle((emotion) => createEmptyStyle(utils.themeManager, emotion));\n const slashStyle = utils.getStyle((emotion) => createSlashStyle(utils.themeManager, emotion));\n\n if (actions.length) {\n return createDecoration(placeholder, [emptyStyle, slashStyle, 'empty-node', 'is-slash']);\n }\n\n return createDecoration(placeholder, [emptyStyle, 'empty-node']);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Command } from '@milkdown/prose/state';\n\nimport { cleanUpAndCreateNode } from './utility';\n\nexport type Action = {\n id: string;\n $: HTMLElement;\n command: Command;\n};\n\nexport type WrappedAction = Pick<Action, 'id'> & {\n command: () => void;\n dom: HTMLElement;\n};\n\nexport const transformAction = (action: WrappedAction): Action => ({\n id: action.id,\n $: action.dom,\n command: cleanUpAndCreateNode(action.command),\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { StatusConfigBuilder, StatusConfigBuilderParams } from '..';\nimport { Action, transformAction } from '../item';\n\nexport type StatusCtx = {\n placeholder: string | null;\n actions: Action[];\n};\n\nconst createStatusCtx = (): StatusCtx => {\n return {\n placeholder: null,\n actions: [],\n };\n};\n\nexport type Status = ReturnType<typeof createStatus>;\n\nexport const createStatus = (builder: StatusConfigBuilder) => {\n const statusCtx = createStatusCtx();\n\n return {\n get: () => statusCtx,\n clear: () => {\n statusCtx.placeholder = null;\n statusCtx.actions = [];\n },\n update: (builderParams: StatusConfigBuilderParams) => {\n const config = builder(builderParams);\n statusCtx.placeholder = config?.placeholder ?? null;\n statusCtx.actions = (config?.actions ?? []).map(transformAction);\n return statusCtx;\n },\n isEmpty: () => statusCtx.actions.length === 0,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport scrollIntoView from 'smooth-scroll-into-view-if-needed';\n\nimport { Status } from './status';\n\ntype Listeners = {\n mouseEnter: EventListener;\n mouseLeave: EventListener;\n};\n\nexport const renderDropdown = (status: Status, dropdownElement: HTMLElement, listeners: Listeners): boolean => {\n const { actions } = status.get();\n\n if (!actions.length) {\n dropdownElement.classList.add('hide');\n return false;\n }\n\n dropdownElement.childNodes.forEach((child) => {\n child.removeEventListener('mouseenter', listeners.mouseEnter);\n child.removeEventListener('mouseleave', listeners.mouseLeave);\n });\n\n while (dropdownElement.firstChild) {\n dropdownElement.firstChild.remove();\n }\n\n actions.forEach(({ $ }) => {\n $.classList.remove('active');\n $.addEventListener('mouseenter', listeners.mouseEnter);\n $.addEventListener('mouseleave', listeners.mouseLeave);\n dropdownElement.appendChild($);\n });\n\n dropdownElement.style.maxHeight = '';\n dropdownElement.classList.remove('hide');\n\n const first$ = actions[0];\n if (first$) {\n first$.$.classList.add('active');\n requestAnimationFrame(() => {\n scrollIntoView(first$.$, {\n scrollMode: 'if-needed',\n block: 'nearest',\n inline: 'nearest',\n });\n });\n }\n\n return true;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\n\nimport { EditorView } from '@milkdown/prose/view';\nimport scrollIntoView from 'smooth-scroll-into-view-if-needed';\n\nimport { Status } from './status';\n\nexport const createMouseManager = () => {\n let mouseLock = false;\n\n return {\n isLock: () => mouseLock,\n lock: () => {\n mouseLock = true;\n },\n unlock: () => {\n mouseLock = false;\n },\n };\n};\nexport type MouseManager = ReturnType<typeof createMouseManager>;\n\nexport const handleMouseMove = (mouseManager: MouseManager) => () => {\n mouseManager.unlock();\n};\n\nexport const handleMouseEnter = (status: Status, mouseManager: MouseManager) => (e: MouseEvent) => {\n if (mouseManager.isLock()) return;\n const { actions } = status.get();\n const active = actions.findIndex((x) => x.$.classList.contains('active'));\n const active$ = actions[active];\n if (active$ && active >= 0) {\n active$.$.classList.remove('active');\n }\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n target.classList.add('active');\n};\n\nexport const handleMouseLeave = () => (e: MouseEvent) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n target.classList.remove('active');\n};\n\nexport const handleClick =\n (status: Status, view: EditorView, dropdownElement: HTMLElement) =>\n (e: Event): void => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) return;\n if (!view) return;\n\n const stop = () => {\n e.stopPropagation();\n e.preventDefault();\n };\n\n const { actions } = status.get();\n\n const el = Object.values(actions).find(({ $ }) => $.contains(target));\n if (!el) {\n if (status.isEmpty()) return;\n\n status.clear();\n dropdownElement.classList.add('hide');\n stop();\n\n return;\n }\n\n stop();\n el.command(view.state, view.dispatch, view);\n };\n\nexport const handleKeydown =\n (status: Status, view: EditorView, dropdownElement: HTMLElement, mouseManager: MouseManager) => (e: Event) => {\n if (!(e instanceof KeyboardEvent)) return;\n if (!mouseManager.isLock()) mouseManager.lock();\n\n const { key } = e;\n if (status.isEmpty()) return;\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(key)) return;\n\n const { actions } = status.get();\n\n let active = actions.findIndex(({ $ }) => $.classList.contains('active'));\n if (active < 0) active = 0;\n\n const moveActive = (next: number) => {\n const active$ = actions[active];\n const next$ = actions[next];\n if (!active$ || !next$) return;\n active$.$.classList.remove('active');\n next$.$.classList.add('active');\n scrollIntoView(next$.$, {\n scrollMode: 'if-needed',\n block: 'nearest',\n inline: 'nearest',\n });\n };\n\n if (key === 'ArrowDown') {\n const next = active === actions.length - 1 ? 0 : active + 1;\n\n moveActive(next);\n return;\n }\n\n if (key === 'ArrowUp') {\n const next = active === 0 ? actions.length - 1 : active - 1;\n\n moveActive(next);\n return;\n }\n\n if (key === 'Escape') {\n if (status.isEmpty()) return;\n\n status.clear();\n dropdownElement.classList.add('hide');\n return;\n }\n\n const active$ = actions[active];\n if (!active$) return;\n active$.command(view.state, view.dispatch, view);\n active$.$.classList.remove('active');\n };\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { missingRootElement } from '@milkdown/exception';\nimport { calculateNodePosition } from '@milkdown/prose';\nimport { EditorView } from '@milkdown/prose/view';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport { createDropdown } from '../utility';\nimport { renderDropdown } from './dropdown';\nimport {\n createMouseManager,\n handleClick,\n handleKeydown,\n handleMouseEnter,\n handleMouseLeave,\n handleMouseMove,\n} from './input';\nimport { Status } from './status';\n\nexport const defaultCalcPosition = (view: EditorView, dropdownElement: HTMLElement) => {\n calculateNodePosition(view, dropdownElement, (selected, target, parent) => {\n const $editor = dropdownElement.parentElement;\n if (!$editor) {\n throw missingRootElement();\n }\n\n let left = selected.left - parent.left;\n\n if (left < 0) {\n left = 0;\n }\n\n let direction: 'top' | 'bottom';\n let maxHeight: number | undefined;\n const selectedToTop = selected.top - parent.top;\n const selectedToBottom = parent.height + parent.top - selected.bottom;\n if (selectedToBottom >= target.height + 28) {\n direction = 'bottom';\n } else if (selectedToTop >= target.height + 28) {\n direction = 'top';\n } else if (selectedToBottom >= selectedToTop) {\n direction = 'bottom';\n maxHeight = selectedToBottom - 28;\n } else {\n direction = 'top';\n maxHeight = selectedToTop - 28;\n }\n if (selectedToTop < 0 || selectedToBottom < 0) {\n maxHeight = parent.height - selected.height - 28;\n if (maxHeight > target.height) {\n maxHeight = undefined;\n }\n }\n\n const top =\n direction === 'top'\n ? selected.top - parent.top - (maxHeight ?? target.height) - 14 + $editor.scrollTop\n : selected.bottom - parent.top + 14 + $editor.scrollTop;\n\n dropdownElement.style.maxHeight = maxHeight !== undefined && maxHeight > 0 ? `${maxHeight}px` : '';\n\n return [top, left];\n });\n};\n\nexport type CalcPosition = (view: EditorView, dropdownElement: HTMLElement) => void;\n\nexport const createView = (\n status: Status,\n view: EditorView,\n utils: ThemeUtils,\n className: string,\n calcPosition: CalcPosition,\n) => {\n const wrapper = view.dom.parentNode;\n if (!wrapper) return {};\n\n const dropdownElement = createDropdown(utils, className);\n const mouseManager = createMouseManager();\n wrapper.appendChild(dropdownElement);\n\n const _mouseMove = handleMouseMove(mouseManager);\n const _mouseDown = handleClick(status, view, dropdownElement);\n const _keydown = handleKeydown(status, view, dropdownElement, mouseManager);\n const _mouseEnter = handleMouseEnter(status, mouseManager);\n const _mouseLeave = handleMouseLeave();\n\n wrapper.addEventListener('mousemove', _mouseMove);\n wrapper.addEventListener('mousedown', _mouseDown);\n wrapper.addEventListener('keydown', _keydown);\n\n return {\n update: (view: EditorView) => {\n const show = renderDropdown(status, dropdownElement, {\n mouseEnter: _mouseEnter as EventListener,\n mouseLeave: _mouseLeave as EventListener,\n });\n\n if (!show) return;\n\n calcPosition(view, dropdownElement);\n },\n\n destroy: () => {\n wrapper.removeEventListener('mousemove', _mouseMove);\n wrapper.removeEventListener('mousedown', _mouseDown);\n wrapper.removeEventListener('keydown', _keydown);\n dropdownElement.remove();\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport type { StatusConfigBuilder } from '..';\nimport { createProps } from './props';\nimport { createStatus } from './status';\nimport { CalcPosition, createView } from './view';\n\nexport const key = 'MILKDOWN_SLASH';\n\nexport const createSlashPlugin = (\n utils: ThemeUtils,\n builder: StatusConfigBuilder,\n className: string,\n calcPosition: CalcPosition,\n) => {\n const status = createStatus(builder);\n\n return new Plugin({\n key: new PluginKey(key),\n props: createProps(status, utils),\n view: (view) => createView(status, view, utils, className, calcPosition),\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { AtomList, createPlugin } from '@milkdown/utils';\n\nimport type { Config } from './config';\nimport { defaultConfig } from './config';\nimport { createSlashPlugin } from './prose-plugin';\nimport { CalcPosition, defaultCalcPosition } from './prose-plugin/view';\n\nexport type { Config, StatusConfig, StatusConfigBuilder, StatusConfigBuilderParams } from './config';\nexport { defaultActions, defaultConfig } from './config';\nexport type { Action, WrappedAction } from './item';\nexport { createDropdownItem } from './utility';\n\nexport type Options = {\n config: Config;\n calcPosition: CalcPosition;\n};\n\nexport const slashPlugin = createPlugin<string, Options>((utils, options) => {\n const slashConfig = options?.config ?? defaultConfig;\n const calcPosition = options?.calcPosition ?? defaultCalcPosition;\n\n return {\n prosePlugins: (_, ctx) => {\n const config = slashConfig(ctx);\n\n const plugin = createSlashPlugin(utils, config, 'slash-dropdown', calcPosition);\n\n return [plugin];\n },\n };\n});\n\nexport const slash = AtomList.create([slashPlugin()]);\n"],"names":["itemStyle","themeManager","css","palette","color","opacity","ThemeColor","ThemeFont","injectStyle","emotion","ThemeSize","ThemeBorder","ThemeShadow","ThemeScrollbar","createDropdown","utils","className","div","style","createDropdownItem","text","icon","options","textClassName","_a","iconSpan","ThemeIcon","missingIcon","textSpan","cleanUp","state","dispatch","selection","$from","tr","cleanUpAndCreateNode","createCommand","view","defaultActions","ctx","input","nodes","schemaCtx","actions","themeManagerCtx","commandsCtx","userInput","action","keyword","typeName","defaultConfig","content","isTopLevel","createEmptyStyle","typography","createSlashStyle","_","createProps","status","event","paragraph","findParentNode","type","uploadPlugin","x","decorations","placeholder","createDecoration","pos","DecorationSet","Decoration","emptyStyle","slashStyle","transformAction","createStatusCtx","createStatus","builder","statusCtx","builderParams","config","_b","renderDropdown","dropdownElement","listeners","child","$","first$","scrollIntoView","createMouseManager","mouseLock","handleMouseMove","mouseManager","handleMouseEnter","e","active","active$","target","handleMouseLeave","handleClick","stop","el","handleKeydown","key","moveActive","next","next$","defaultCalcPosition","calculateNodePosition","selected","parent","$editor","missingRootElement","left","direction","maxHeight","selectedToTop","selectedToBottom","top","createView","calcPosition","wrapper","_mouseMove","_mouseDown","_keydown","_mouseEnter","_mouseLeave","createSlashPlugin","Plugin","PluginKey","slashPlugin","createPlugin","slashConfig","slash","AtomList"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/prose-plugin/dropdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,aAAK,SAAS,GAAG;IACb,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,cAAc,WAAY,MAAM,mBAAmB,WAAW,aAAa,SAAS,KAAG,
|
|
1
|
+
{"version":3,"file":"dropdown.d.ts","sourceRoot":"","sources":["../../src/prose-plugin/dropdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,aAAK,SAAS,GAAG;IACb,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,aAAa,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,cAAc,WAAY,MAAM,mBAAmB,WAAW,aAAa,SAAS,KAAG,OAwCnG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/prose-plugin/view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,mBAAmB,SAAU,UAAU,mBAAmB,WAAW,
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/prose-plugin/view.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAY7C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,mBAAmB,SAAU,UAAU,mBAAmB,WAAW,SA4CjF,CAAC;AAEF,oBAAY,YAAY,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,KAAK,IAAI,CAAC;AAEpF,eAAO,MAAM,UAAU,WACX,MAAM,QACR,UAAU,SACT,UAAU,aACN,MAAM,gBACH,YAAY;;;;mBAoBP,UAAU;;CAkBhC,CAAC"}
|
package/lib/style.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,OAAO,EAIP,YAAY,EAIf,MAAM,gBAAgB,CAAC;AAwCxB,eAAO,MAAM,WAAW,iBAAkB,YAAY,WAAW,OAAO,
|
|
1
|
+
{"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../src/style.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,OAAO,EAIP,YAAY,EAIf,MAAM,gBAAgB,CAAC;AAwCxB,eAAO,MAAM,WAAW,iBAAkB,YAAY,WAAW,OAAO,WAsBvE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/plugin-slash",
|
|
3
|
-
"version": "6.5.
|
|
3
|
+
"version": "6.5.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.es.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -15,17 +15,17 @@
|
|
|
15
15
|
"milkdown plugin"
|
|
16
16
|
],
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@milkdown/core": "6.5.
|
|
19
|
-
"@milkdown/prose": "6.5.
|
|
20
|
-
"@milkdown/design-system": "6.5.
|
|
18
|
+
"@milkdown/core": "6.5.2",
|
|
19
|
+
"@milkdown/prose": "6.5.2",
|
|
20
|
+
"@milkdown/design-system": "6.5.2"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"@milkdown/core": "^6.0.1",
|
|
24
24
|
"@milkdown/prose": "^6.0.1"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@milkdown/utils": "6.5.
|
|
28
|
-
"@milkdown/exception": "6.5.
|
|
27
|
+
"@milkdown/utils": "6.5.2",
|
|
28
|
+
"@milkdown/exception": "6.5.2",
|
|
29
29
|
"smooth-scroll-into-view-if-needed": "^1.1.32",
|
|
30
30
|
"tslib": "^2.4.0"
|
|
31
31
|
},
|
package/src/prose-plugin/view.ts
CHANGED
|
@@ -24,18 +24,40 @@ export const defaultCalcPosition = (view: EditorView, dropdownElement: HTMLEleme
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
let left = selected.left - parent.left;
|
|
27
|
-
let top = selected.bottom - parent.top + 14 + $editor.scrollTop;
|
|
28
27
|
|
|
29
28
|
if (left < 0) {
|
|
30
29
|
left = 0;
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
let direction: 'top' | 'bottom';
|
|
33
|
+
let maxHeight: number | undefined;
|
|
34
|
+
const selectedToTop = selected.top - parent.top;
|
|
35
|
+
const selectedToBottom = parent.height + parent.top - selected.bottom;
|
|
36
|
+
if (selectedToBottom >= target.height + 28) {
|
|
37
|
+
direction = 'bottom';
|
|
38
|
+
} else if (selectedToTop >= target.height + 28) {
|
|
39
|
+
direction = 'top';
|
|
40
|
+
} else if (selectedToBottom >= selectedToTop) {
|
|
41
|
+
direction = 'bottom';
|
|
42
|
+
maxHeight = selectedToBottom - 28;
|
|
43
|
+
} else {
|
|
44
|
+
direction = 'top';
|
|
45
|
+
maxHeight = selectedToTop - 28;
|
|
46
|
+
}
|
|
47
|
+
if (selectedToTop < 0 || selectedToBottom < 0) {
|
|
48
|
+
maxHeight = parent.height - selected.height - 28;
|
|
49
|
+
if (maxHeight > target.height) {
|
|
50
|
+
maxHeight = undefined;
|
|
37
51
|
}
|
|
38
52
|
}
|
|
53
|
+
|
|
54
|
+
const top =
|
|
55
|
+
direction === 'top'
|
|
56
|
+
? selected.top - parent.top - (maxHeight ?? target.height) - 14 + $editor.scrollTop
|
|
57
|
+
: selected.bottom - parent.top + 14 + $editor.scrollTop;
|
|
58
|
+
|
|
59
|
+
dropdownElement.style.maxHeight = maxHeight !== undefined && maxHeight > 0 ? `${maxHeight}px` : '';
|
|
60
|
+
|
|
39
61
|
return [top, left];
|
|
40
62
|
});
|
|
41
63
|
};
|
package/src/style.ts
CHANGED