@milkdown/plugin-tooltip 6.3.2 → 6.4.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.
@@ -1,10 +1,10 @@
1
1
  import type { EditorView } from '@milkdown/prose/view';
2
- import type { Utils } from '@milkdown/utils';
2
+ import type { ThemeUtils } from '@milkdown/utils';
3
3
  import type { ButtonList } from '../item';
4
4
  declare type Tooltip = {
5
5
  dom: HTMLDivElement;
6
6
  render: (editorView: EditorView) => void;
7
7
  };
8
- export declare const createTooltip: (buttonMap: ButtonList, utils: Utils, className: string) => Tooltip;
8
+ export declare const createTooltip: (buttonMap: ButtonList, utils: ThemeUtils, className: string) => Tooltip;
9
9
  export {};
10
10
  //# sourceMappingURL=create-tooltip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-tooltip.d.ts","sourceRoot":"","sources":["../../src/button-manager/create-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,aAAK,OAAO,GAAG;IACX,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,aAAa,iCAAkC,KAAK,aAAa,MAAM,KAAG,OAqBtF,CAAC"}
1
+ {"version":3,"file":"create-tooltip.d.ts","sourceRoot":"","sources":["../../src/button-manager/create-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,aAAK,OAAO,GAAG;IACX,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,aAAa,iCAAkC,UAAU,aAAa,MAAM,KAAG,OAqB3F,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { EditorView } from '@milkdown/prose/view';
2
- import type { Utils } from '@milkdown/utils';
2
+ import type { ThemeUtils } from '@milkdown/utils';
3
3
  import type { ButtonList } from '../item';
4
- export declare const createButtonManager: (buttons: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {
4
+ export declare const createButtonManager: (buttons: ButtonList, utils: ThemeUtils, bottom: boolean, containerClassName: string) => {
5
5
  destroy: () => void;
6
6
  hide: () => void;
7
7
  update: (editorView: EditorView) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK1C,eAAO,MAAM,mBAAmB,+BAAgC,KAAK,UAAU,OAAO,sBAAsB,MAAM;;;yBAwBrF,UAAU;;CAUtC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK1C,eAAO,MAAM,mBAAmB,+BAErB,UAAU,UACT,OAAO,sBACK,MAAM;;;yBAyBD,UAAU;;CAUtC,CAAC"}
package/lib/index.es.js CHANGED
@@ -1,64 +1,64 @@
1
1
  import { TextSelection as m, PluginKey as p, Plugin as T } from "@milkdown/prose/state";
2
2
  import { createPlugin as v, AtomList as $ } from "@milkdown/utils";
3
- import { schemaCtx as y, themeManagerCtx as b, ThemeIcon as k, commandsCtx as L, ThemeSize as f, ThemeBorder as P, ThemeShadow as E, ThemeColor as x } from "@milkdown/core";
3
+ import { schemaCtx as y, themeManagerCtx as b, ThemeIcon as L, commandsCtx as k, ThemeSize as f, ThemeBorder as P, ThemeShadow as E, ThemeColor as x } from "@milkdown/core";
4
4
  import { findParentNode as B, calculateTextPosition as C } from "@milkdown/prose";
5
5
  import { missingRootElement as M } from "@milkdown/exception";
6
- const h = (t, e) => {
7
- if (!e)
6
+ const h = (e, t) => {
7
+ if (!t)
8
8
  return !1;
9
- const { from: o, to: s } = t.selection;
10
- return t.doc.rangeHasMark(o, o === s ? s + 1 : s, e);
11
- }, _ = (t) => {
12
- const { selection: e } = t;
13
- return e instanceof m ? !!t.doc.textBetween(e.from, e.to) : !1;
14
- }, A = (t) => Boolean(B((e) => !!e.type.spec.code)(t.selection)), H = (t, e) => !_(t) || A(t) || h(t, e), u = (t, e, o, s) => ({
15
- icon: t,
16
- onClick: e,
17
- isHidden: () => (n) => H(n.state, s),
9
+ const { from: o, to: s } = e.selection;
10
+ return e.doc.rangeHasMark(o, o === s ? s + 1 : s, t);
11
+ }, A = (e) => {
12
+ const { selection: t } = e;
13
+ return t instanceof m ? !!e.doc.textBetween(t.from, t.to) : !1;
14
+ }, H = (e) => Boolean(B((t) => !!t.type.spec.code)(e.selection)), I = (e, t) => !A(e) || H(e) || h(e, t), u = (e, t, o, s) => ({
15
+ icon: e,
16
+ onClick: t,
17
+ isHidden: () => (n) => I(n.state, s),
18
18
  isActive: () => (n) => h(n.state, o),
19
19
  canAddToDOM: () => (n) => !!o && !!n.state.schema.marks[o.name]
20
- }), I = (t) => {
21
- const e = t.get(y).marks;
20
+ }), O = (e) => {
21
+ const t = e.get(y).marks;
22
22
  return [
23
- u("bold", "ToggleBold", e.strong, e.code_inline),
24
- u("italic", "ToggleItalic", e.em, e.code_inline),
25
- u("strikeThrough", "ToggleStrikeThrough", e.strike_through, e.code_inline),
26
- u("code", "ToggleInlineCode", e.code_inline, e.link),
27
- u("link", "ToggleLink", e.link, e.code_inline)
23
+ u("bold", "ToggleBold", t.strong),
24
+ u("italic", "ToggleItalic", t.em),
25
+ u("strikeThrough", "ToggleStrikeThrough", t.strike_through),
26
+ u("code", "ToggleInlineCode", t.code_inline),
27
+ u("link", "ToggleLink", t.link)
28
28
  ];
29
- }, O = (t, e = I) => {
30
- const o = ({ icon: s, onClick: n, isHidden: i, isActive: r, canAddToDOM: c }) => {
31
- var l;
29
+ }, D = (e, t = O) => {
30
+ const o = ({ icon: s, onClick: n, isHidden: l, isActive: i, canAddToDOM: c }) => {
31
+ var r;
32
32
  return {
33
- $: typeof s == "function" ? s(t) : (l = t.get(b).get(k, s)) == null ? void 0 : l.dom,
34
- command: typeof n == "string" ? () => t.get(L).call(n) : n(t),
35
- disable: i(t),
36
- active: r(t),
37
- enable: c(t)
33
+ $: typeof s == "function" ? s(e) : (r = e.get(b).get(L, s)) == null ? void 0 : r.dom,
34
+ command: typeof n == "string" ? () => e.get(k).call(n) : n(e),
35
+ disable: l(e),
36
+ active: i(e),
37
+ enable: c(e)
38
38
  };
39
39
  };
40
- return e(t).map(o);
41
- }, D = (t, e, o) => {
42
- t.classList.remove("hide"), C(e, t, (s, n, i, r) => {
43
- const c = t.parentElement;
40
+ return t(e).map(o);
41
+ }, q = (e, t, o) => {
42
+ e.classList.remove("hide"), C(t, e, (s, n, l, i) => {
43
+ const c = e.parentElement;
44
44
  if (!c)
45
45
  throw M();
46
- const l = n.left - s.left;
47
- let a = s.left - r.left - (i.width - l) / 2, d = s.top - r.top - i.height - 14 + c.scrollTop;
48
- return a < 0 && (a = 0), (s.top - r.top < i.height || o && r.bottom - s.bottom > i.height) && (d = s.bottom - r.top + 14 + c.scrollTop), [d, a];
46
+ const r = n.left - s.left;
47
+ let a = s.left - i.left - (l.width - r) / 2, d = s.top - i.top - l.height - 14 + c.scrollTop;
48
+ return a < 0 && (a = 0), (s.top - i.top < l.height || o && i.bottom - s.bottom > l.height) && (d = s.bottom - i.top + 14 + c.scrollTop), [d, a];
49
49
  });
50
- }, q = (t, { css: e }) => {
51
- const o = (n, i = 1) => t.get(x, [n, i]), s = t.get(f, "lineWidth");
52
- return e`
50
+ }, w = (e, { css: t }) => {
51
+ const o = (n, l = 1) => e.get(x, [n, l]), s = e.get(f, "lineWidth");
52
+ return t`
53
53
  display: inline-flex;
54
54
  cursor: pointer;
55
55
  justify-content: space-evenly;
56
56
  position: absolute;
57
- border-radius: ${t.get(f, "radius")};
57
+ border-radius: ${e.get(f, "radius")};
58
58
  z-index: 2;
59
59
 
60
- ${t.get(P, void 0)}
61
- ${t.get(E, void 0)}
60
+ ${e.get(P, void 0)}
61
+ ${e.get(E, void 0)}
62
62
 
63
63
  overflow: hidden;
64
64
  background: ${o("surface")};
@@ -92,82 +92,82 @@ const h = (t, e) => {
92
92
  display: none;
93
93
  }
94
94
  `;
95
- }, w = (t, e, o) => {
95
+ }, N = (e, t, o) => {
96
96
  const s = document.createElement("div");
97
- return e.themeManager.onFlush(() => {
98
- const n = e.getStyle((i) => q(e.themeManager, i)) || "";
97
+ return t.themeManager.onFlush(() => {
98
+ const n = t.getStyle((l) => w(t.themeManager, l)) || "";
99
99
  n && s.classList.add(n);
100
- }), s.classList.add(e.getClassName({}, o)), {
100
+ }), s.classList.add(t.getClassName({}, o)), {
101
101
  dom: s,
102
102
  render: (n) => {
103
- var i;
104
- t.filter((r) => r.enable(n) && r.$ != null).forEach(({ $: r }) => s.appendChild(r)), (i = n.dom.parentNode) == null || i.appendChild(s);
103
+ var l;
104
+ e.filter((i) => i.enable(n) && i.$ != null).forEach(({ $: i }) => s.appendChild(i)), (l = n.dom.parentNode) == null || l.appendChild(s);
105
105
  }
106
106
  };
107
- }, N = (t, e) => Object.values(t).filter((o) => o.enable(e) && o.$ != null).every(({ $: o }) => o.classList.contains("hide")), W = (t, e) => (t.filter((o) => o.enable(e) && o.$ != null).forEach((o) => {
108
- var i;
109
- if ((i = o.disable) == null ? void 0 : i.call(o, e)) {
107
+ }, W = (e, t) => Object.values(e).filter((o) => o.enable(t) && o.$ != null).every(({ $: o }) => o.classList.contains("hide")), _ = (e, t) => (e.filter((o) => o.enable(t) && o.$ != null).forEach((o) => {
108
+ var l;
109
+ if ((l = o.disable) == null ? void 0 : l.call(o, t)) {
110
110
  o.$.classList.add("hide");
111
111
  return;
112
112
  }
113
- if (o.$.classList.remove("hide"), o.active(e)) {
113
+ if (o.$.classList.remove("hide"), o.active(t)) {
114
114
  o.$.classList.add("active");
115
115
  return;
116
116
  }
117
117
  o.$.classList.remove("active");
118
- }), N(t, e)), g = (t, e, o, s) => {
119
- const { dom: n, render: i } = w(t, e, s), r = (l) => {
120
- const a = t.find(({ $: d }) => l.target instanceof Element && d.contains(l.target));
121
- !a || (l.stopPropagation(), l.preventDefault(), a.command());
118
+ }), W(e, t)), g = (e, t, o, s) => {
119
+ const { dom: n, render: l } = N(e, t, s), i = (r) => {
120
+ const a = e.find(({ $: d }) => r.target instanceof Element && d.contains(r.target));
121
+ !a || (r.stopPropagation(), r.preventDefault(), a.command());
122
122
  }, c = () => {
123
123
  n.classList.add("hide");
124
124
  };
125
- return n.addEventListener("mousedown", r), {
125
+ return n.addEventListener("mousedown", i), {
126
126
  destroy: () => {
127
- n.removeEventListener("mousedown", r), n.remove();
127
+ n.removeEventListener("mousedown", i), n.remove();
128
128
  },
129
129
  hide: c,
130
- update: (l) => {
131
- if (W(t, l)) {
130
+ update: (r) => {
131
+ if (_(e, r)) {
132
132
  c();
133
133
  return;
134
134
  }
135
- D(n, l, o);
135
+ q(n, r, o);
136
136
  },
137
- render: i
137
+ render: l
138
138
  };
139
- }, j = (t, e, o, s) => {
140
- let n = g(t, e, o, s), i = !1;
141
- const r = () => {
139
+ }, j = (e, t, o, s) => {
140
+ let n = g(e, t, o, s), l = !1;
141
+ const i = () => {
142
142
  n.hide();
143
- }, c = (l, a) => {
144
- const { state: d } = l;
145
- if (!l.editable || i) {
146
- r();
143
+ }, c = (r, a) => {
144
+ const { state: d } = r;
145
+ if (!r.editable || l) {
146
+ i();
147
147
  return;
148
148
  }
149
- (a == null ? void 0 : a.doc.eq(d.doc)) && a.selection.eq(d.selection) || n.update(l);
149
+ (a == null ? void 0 : a.doc.eq(d.doc)) && a.selection.eq(d.selection) || n.update(r);
150
150
  };
151
151
  return {
152
- recreate: (l) => {
153
- n = g(t, e, o, s), n.render(l), c(l);
152
+ recreate: (r) => {
153
+ n = g(e, t, o, s), n.render(r), c(r);
154
154
  },
155
155
  update: c,
156
156
  destroy: () => {
157
157
  n.destroy();
158
158
  },
159
- render: (l) => {
160
- n.render(l), c(l);
159
+ render: (r) => {
160
+ n.render(r), c(r);
161
161
  },
162
- setHide: (l) => {
163
- i = l;
162
+ setHide: (r) => {
163
+ l = r;
164
164
  }
165
165
  };
166
- }, z = new p("MILKDOWN_TOOLTIP"), F = v((t, e) => ({
166
+ }, z = new p("MILKDOWN_TOOLTIP"), F = v((e, t) => ({
167
167
  id: "tooltip",
168
168
  prosePlugins: (o, s) => {
169
- var r;
170
- const n = j(O(s, e == null ? void 0 : e.items), t, (r = e == null ? void 0 : e.bottom) != null ? r : !1, "tooltip");
169
+ var i;
170
+ const n = j(D(s, t == null ? void 0 : t.items), e, (i = t == null ? void 0 : t.bottom) != null ? i : !1, "tooltip");
171
171
  return [new T({
172
172
  key: z,
173
173
  props: {
@@ -184,9 +184,9 @@ const h = (t, e) => {
184
184
  }
185
185
  })), U = $.create([F()]);
186
186
  export {
187
- O as buttonMap,
187
+ D as buttonMap,
188
188
  u as createToggleIcon,
189
- I as defaultButtons,
189
+ O as defaultButtons,
190
190
  z as key,
191
191
  U as tooltip,
192
192
  F as tooltipPlugin
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/utility/prosemirror.ts","../src/item.ts","../src/button-manager/calc-button-pos.ts","../src/button-manager/style.ts","../src/button-manager/create-tooltip.ts","../src/button-manager/no-active.ts","../src/button-manager/filter-button.ts","../src/button-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { findParentNode } from '@milkdown/prose';\nimport { MarkType, Node, NodeType } from '@milkdown/prose/model';\nimport { EditorState, TextSelection } from '@milkdown/prose/state';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type?: MarkType): boolean => {\n if (!type) {\n return false;\n }\n const { from, to } = editorState.selection;\n\n return editorState.doc.rangeHasMark(from, from === to ? to + 1 : to, type);\n};\n\nexport const isTextSelection = (editorState: EditorState): boolean => {\n const { selection } = editorState;\n if (selection instanceof TextSelection) {\n const text = editorState.doc.textBetween(selection.from, selection.to);\n\n if (!text) return false;\n\n return true;\n }\n return false;\n};\n\nexport const isInCodeFence = (editorState: EditorState): boolean =>\n Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));\n\nexport const isTextAndNotHasMark = (editorState: EditorState, mark?: MarkType): boolean =>\n !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);\n\nexport const equalNodeType = (nodeType: NodeType, node: Node) => {\n return (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) || node.type === nodeType;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, schemaCtx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose/model';\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { hasMark, isTextAndNotHasMark } from './utility';\n\nexport type Pred = (view: EditorView) => boolean;\nexport type Updater = (view: EditorView, $: HTMLElement) => void;\nexport type Event2Command = (e: Event) => void;\n\nexport type OnClick = (ctx: Ctx) => void;\n\nexport type Item = {\n icon: Icon | ((ctx: Ctx) => HTMLElement);\n onClick: string | ((ctx: Ctx) => () => void);\n isHidden: (ctx: Ctx) => Pred;\n isActive: (ctx: Ctx) => Pred;\n canAddToDOM: (ctx: Ctx) => Pred;\n};\n\nexport type ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport const createToggleIcon = (\n icon: Icon,\n onClick: string,\n mark: MarkType | undefined,\n disableForMark: MarkType | undefined,\n): Item => ({\n icon,\n onClick,\n isHidden: () => (view: EditorView) => isTextAndNotHasMark(view.state, disableForMark),\n isActive: () => (view: EditorView) => hasMark(view.state, mark),\n canAddToDOM: () => (view: EditorView) => !!mark && !!view.state.schema.marks[mark.name],\n});\n\nexport const defaultButtons = (ctx: Ctx) => {\n const marks = ctx.get(schemaCtx).marks;\n return [\n createToggleIcon('bold', 'ToggleBold', marks['strong'], marks['code_inline']),\n createToggleIcon('italic', 'ToggleItalic', marks['em'], marks['code_inline']),\n createToggleIcon('strikeThrough', 'ToggleStrikeThrough', marks['strike_through'], marks['code_inline']),\n createToggleIcon('code', 'ToggleInlineCode', marks['code_inline'], marks['link']),\n createToggleIcon('link', 'ToggleLink', marks['link'], marks['code_inline']),\n ];\n};\n\nexport type ButtonList = ButtonItem[];\n\nexport type TooltipOptions = {\n bottom: boolean;\n items: (ctx: Ctx) => Array<Item>;\n};\n\nexport const buttonMap = (ctx: Ctx, items: (ctx: Ctx) => Array<Item> = defaultButtons): ButtonList => {\n const toButton = ({ icon, onClick, isHidden, isActive, canAddToDOM }: Item): ButtonItem => ({\n $: typeof icon === 'function' ? icon(ctx) : (ctx.get(themeManagerCtx).get(ThemeIcon, icon)?.dom as HTMLElement),\n command: typeof onClick === 'string' ? () => ctx.get(commandsCtx).call(onClick) : onClick(ctx),\n disable: isHidden(ctx),\n active: isActive(ctx),\n enable: canAddToDOM(ctx),\n });\n return items(ctx).map(toButton);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { missingRootElement } from '@milkdown/exception';\nimport { calculateTextPosition } from '@milkdown/prose';\nimport { EditorView } from '@milkdown/prose/view';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView, isBottom: boolean) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const $editor = buttons.parentElement;\n if (!$editor) {\n throw missingRootElement();\n }\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n let top = start.top - parent.top - target.height - 14 + $editor.scrollTop;\n\n if (left < 0) left = 0;\n\n if (start.top - parent.top < target.height || (isBottom && parent.bottom - start.bottom > target.height)) {\n top = start.bottom - parent.top + 14 + $editor.scrollTop;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeBorder, ThemeColor, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n z-index: 2;\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 48px;\n line-height: 48px;\n text-align: center;\n transition: all 0.4s ease-in-out;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.active {\n color: ${palette('primary')};\n }\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 0;\n right: calc(-0.5 * ${lineWidth});\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonList } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonList, utils: Utils, className: string): Tooltip => {\n const div = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion)) || '';\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className));\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n buttonMap\n .filter((item) => item.enable(editorView) && item.$ != null)\n .forEach(({ $ }) => div.appendChild($));\n\n editorView.dom.parentNode?.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { ButtonList } from '../item';\n\nexport const noActive = (buttonMap: ButtonList, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view) && item.$ != null)\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { ButtonList } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttons: ButtonList, view: EditorView) => {\n buttons\n .filter((item) => item.enable(view) && item.$ != null)\n .forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n\n item.$.classList.remove('hide');\n\n const active = item.active(view);\n if (active) {\n item.$.classList.add('active');\n return;\n }\n item.$.classList.remove('active');\n });\n\n return noActive(buttons, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonList } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (buttons: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {\n const { dom: buttonDOM, render } = createTooltip(buttons, utils, containerClassName);\n\n const onClick = (e: Event) => {\n const target = buttons.find(({ $ }) => e.target instanceof Element && $.contains(e.target));\n if (!target) return;\n\n e.stopPropagation();\n e.preventDefault();\n target.command();\n };\n\n const hide = () => {\n buttonDOM.classList.add('hide');\n };\n\n buttonDOM.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttonDOM.removeEventListener('mousedown', onClick);\n buttonDOM.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttons, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttonDOM, editorView, bottom);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState } from '@milkdown/prose/state';\nimport type { EditorView } from '@milkdown/prose/view';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport type { ButtonList } from './item';\n\nexport const createPlugin = (buttonMap: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {\n let buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n };\n\n const update = (view: EditorView, prevState?: EditorState) => {\n const { state } = view;\n\n if (!view.editable || shouldHide) {\n hide();\n return;\n }\n\n const isEqualSelection = prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection);\n if (isEqualSelection) return;\n\n buttonManager.update(view);\n };\n\n return {\n recreate: (editorView: EditorView) => {\n buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n buttonManager.render(editorView);\n update(editorView);\n },\n update,\n destroy: () => {\n buttonManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, TooltipOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_TOOLTIP');\nexport * from './item';\n\nexport const tooltipPlugin = create<string, TooltipOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const manager = createPlugin(buttonMap(ctx, options?.items), utils, options?.bottom ?? false, 'tooltip');\n const plugin = new Plugin({\n key,\n props: {\n handleClick: (view) => {\n manager.setHide(false);\n manager.update(view);\n return false;\n },\n handleDOMEvents: {\n mousedown: () => {\n manager.setHide(false);\n return false;\n },\n },\n },\n view: (editorView) => {\n manager.recreate(editorView);\n return {\n update: manager.update,\n destroy: manager.destroy,\n };\n },\n });\n return [plugin];\n },\n };\n});\n\nexport const tooltip = AtomList.create([tooltipPlugin()]);\n"],"names":["create"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/utility/prosemirror.ts","../src/item.ts","../src/button-manager/calc-button-pos.ts","../src/button-manager/style.ts","../src/button-manager/create-tooltip.ts","../src/button-manager/no-active.ts","../src/button-manager/filter-button.ts","../src/button-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { findParentNode } from '@milkdown/prose';\nimport { MarkType, Node, NodeType } from '@milkdown/prose/model';\nimport { EditorState, TextSelection } from '@milkdown/prose/state';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type?: MarkType): boolean => {\n if (!type) {\n return false;\n }\n const { from, to } = editorState.selection;\n\n return editorState.doc.rangeHasMark(from, from === to ? to + 1 : to, type);\n};\n\nexport const isTextSelection = (editorState: EditorState): boolean => {\n const { selection } = editorState;\n if (selection instanceof TextSelection) {\n const text = editorState.doc.textBetween(selection.from, selection.to);\n\n if (!text) return false;\n\n return true;\n }\n return false;\n};\n\nexport const isInCodeFence = (editorState: EditorState): boolean =>\n Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));\n\nexport const isTextAndNotHasMark = (editorState: EditorState, mark?: MarkType): boolean =>\n !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);\n\nexport const equalNodeType = (nodeType: NodeType, node: Node) => {\n return (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) || node.type === nodeType;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, schemaCtx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose/model';\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { hasMark, isTextAndNotHasMark } from './utility';\n\nexport type Pred = (view: EditorView) => boolean;\nexport type Updater = (view: EditorView, $: HTMLElement) => void;\nexport type Event2Command = (e: Event) => void;\n\nexport type OnClick = (ctx: Ctx) => void;\n\nexport type Item = {\n icon: Icon | ((ctx: Ctx) => HTMLElement);\n onClick: string | ((ctx: Ctx) => () => void);\n isHidden: (ctx: Ctx) => Pred;\n isActive: (ctx: Ctx) => Pred;\n canAddToDOM: (ctx: Ctx) => Pred;\n};\n\nexport type ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport const createToggleIcon = (icon: Icon, onClick: string, mark?: MarkType, disableForMark?: MarkType): Item => ({\n icon,\n onClick,\n isHidden: () => (view: EditorView) => isTextAndNotHasMark(view.state, disableForMark),\n isActive: () => (view: EditorView) => hasMark(view.state, mark),\n canAddToDOM: () => (view: EditorView) => !!mark && !!view.state.schema.marks[mark.name],\n});\n\nexport const defaultButtons = (ctx: Ctx) => {\n const marks = ctx.get(schemaCtx).marks;\n return [\n createToggleIcon('bold', 'ToggleBold', marks['strong']),\n createToggleIcon('italic', 'ToggleItalic', marks['em']),\n createToggleIcon('strikeThrough', 'ToggleStrikeThrough', marks['strike_through']),\n createToggleIcon('code', 'ToggleInlineCode', marks['code_inline']),\n createToggleIcon('link', 'ToggleLink', marks['link']),\n ];\n};\n\nexport type ButtonList = ButtonItem[];\n\nexport type TooltipOptions = {\n bottom: boolean;\n items: (ctx: Ctx) => Array<Item>;\n};\n\nexport const buttonMap = (ctx: Ctx, items: (ctx: Ctx) => Array<Item> = defaultButtons): ButtonList => {\n const toButton = ({ icon, onClick, isHidden, isActive, canAddToDOM }: Item): ButtonItem => ({\n $: typeof icon === 'function' ? icon(ctx) : (ctx.get(themeManagerCtx).get(ThemeIcon, icon)?.dom as HTMLElement),\n command: typeof onClick === 'string' ? () => ctx.get(commandsCtx).call(onClick) : onClick(ctx),\n disable: isHidden(ctx),\n active: isActive(ctx),\n enable: canAddToDOM(ctx),\n });\n return items(ctx).map(toButton);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { missingRootElement } from '@milkdown/exception';\nimport { calculateTextPosition } from '@milkdown/prose';\nimport { EditorView } from '@milkdown/prose/view';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView, isBottom: boolean) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const $editor = buttons.parentElement;\n if (!$editor) {\n throw missingRootElement();\n }\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n let top = start.top - parent.top - target.height - 14 + $editor.scrollTop;\n\n if (left < 0) left = 0;\n\n if (start.top - parent.top < target.height || (isBottom && parent.bottom - start.bottom > target.height)) {\n top = start.bottom - parent.top + 14 + $editor.scrollTop;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeBorder, ThemeColor, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n z-index: 2;\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 48px;\n line-height: 48px;\n text-align: center;\n transition: all 0.4s ease-in-out;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.active {\n color: ${palette('primary')};\n }\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 0;\n right: calc(-0.5 * ${lineWidth});\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\nimport type { ThemeUtils } from '@milkdown/utils';\n\nimport type { ButtonList } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonList, utils: ThemeUtils, className: string): Tooltip => {\n const div = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion)) || '';\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className));\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n buttonMap\n .filter((item) => item.enable(editorView) && item.$ != null)\n .forEach(({ $ }) => div.appendChild($));\n\n editorView.dom.parentNode?.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { ButtonList } from '../item';\n\nexport const noActive = (buttonMap: ButtonList, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view) && item.$ != null)\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { ButtonList } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttons: ButtonList, view: EditorView) => {\n buttons\n .filter((item) => item.enable(view) && item.$ != null)\n .forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n\n item.$.classList.remove('hide');\n\n const active = item.active(view);\n if (active) {\n item.$.classList.add('active');\n return;\n }\n item.$.classList.remove('active');\n });\n\n return noActive(buttons, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\nimport type { ThemeUtils } from '@milkdown/utils';\n\nimport type { ButtonList } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (\n buttons: ButtonList,\n utils: ThemeUtils,\n bottom: boolean,\n containerClassName: string,\n) => {\n const { dom: buttonDOM, render } = createTooltip(buttons, utils, containerClassName);\n\n const onClick = (e: Event) => {\n const target = buttons.find(({ $ }) => e.target instanceof Element && $.contains(e.target));\n if (!target) return;\n\n e.stopPropagation();\n e.preventDefault();\n target.command();\n };\n\n const hide = () => {\n buttonDOM.classList.add('hide');\n };\n\n buttonDOM.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttonDOM.removeEventListener('mousedown', onClick);\n buttonDOM.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttons, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttonDOM, editorView, bottom);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState } from '@milkdown/prose/state';\nimport type { EditorView } from '@milkdown/prose/view';\nimport { ThemeUtils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport type { ButtonList } from './item';\n\nexport const createPlugin = (buttonMap: ButtonList, utils: ThemeUtils, bottom: boolean, containerClassName: string) => {\n let buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n };\n\n const update = (view: EditorView, prevState?: EditorState) => {\n const { state } = view;\n\n if (!view.editable || shouldHide) {\n hide();\n return;\n }\n\n const isEqualSelection = prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection);\n if (isEqualSelection) return;\n\n buttonManager.update(view);\n };\n\n return {\n recreate: (editorView: EditorView) => {\n buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n buttonManager.render(editorView);\n update(editorView);\n },\n update,\n destroy: () => {\n buttonManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, TooltipOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_TOOLTIP');\nexport * from './item';\n\nexport const tooltipPlugin = create<string, TooltipOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const manager = createPlugin(buttonMap(ctx, options?.items), utils, options?.bottom ?? false, 'tooltip');\n const plugin = new Plugin({\n key,\n props: {\n handleClick: (view) => {\n manager.setHide(false);\n manager.update(view);\n return false;\n },\n handleDOMEvents: {\n mousedown: () => {\n manager.setHide(false);\n return false;\n },\n },\n },\n view: (editorView) => {\n manager.recreate(editorView);\n return {\n update: manager.update,\n destroy: manager.destroy,\n };\n },\n });\n return [plugin];\n },\n };\n});\n\nexport const tooltip = AtomList.create([tooltipPlugin()]);\n"],"names":["create"],"mappings":"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"}
package/lib/item.d.ts CHANGED
@@ -20,7 +20,7 @@ export declare type ButtonItem = {
20
20
  disable?: Pred;
21
21
  enable: Pred;
22
22
  };
23
- export declare const createToggleIcon: (icon: Icon, onClick: string, mark: MarkType | undefined, disableForMark: MarkType | undefined) => Item;
23
+ export declare const createToggleIcon: (icon: Icon, onClick: string, mark?: MarkType, disableForMark?: MarkType) => Item;
24
24
  export declare const defaultButtons: (ctx: Ctx) => Item[];
25
25
  export declare type ButtonList = ButtonItem[];
26
26
  export declare type TooltipOptions = {
package/lib/item.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAyC,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,oBAAY,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;AACjD,oBAAY,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AACjE,oBAAY,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAE/C,oBAAY,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;AAEzC,oBAAY,IAAI,GAAG;IACf,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,oBAAY,UAAU,GAAG;IACrB,CAAC,EAAE,WAAW,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,SACnB,IAAI,WACD,MAAM,QACT,QAAQ,GAAG,SAAS,kBACV,QAAQ,GAAG,SAAS,KACrC,IAMD,CAAC;AAEH,eAAO,MAAM,cAAc,QAAS,GAAG,WAStC,CAAC;AAEF,oBAAY,UAAU,GAAG,UAAU,EAAE,CAAC;AAEtC,oBAAY,cAAc,GAAG;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,GAAG,gBAAe,GAAG,KAAK,MAAM,IAAI,CAAC,eASnE,CAAC"}
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAyC,MAAM,gBAAgB,CAAC;AACzF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,oBAAY,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;AACjD,oBAAY,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AACjE,oBAAY,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAE/C,oBAAY,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;AAEzC,oBAAY,IAAI,GAAG;IACf,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IACzC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC;IAC7C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAC7B,WAAW,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CACnC,CAAC;AAEF,oBAAY,UAAU,GAAG;IACrB,CAAC,EAAE,WAAW,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,gBAAgB,SAAU,IAAI,WAAW,MAAM,SAAS,QAAQ,mBAAmB,QAAQ,KAAG,IAMzG,CAAC;AAEH,eAAO,MAAM,cAAc,QAAS,GAAG,WAStC,CAAC;AAEF,oBAAY,UAAU,GAAG,UAAU,EAAE,CAAC;AAEtC,oBAAY,cAAc,GAAG;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,SAAS,QAAS,GAAG,gBAAe,GAAG,KAAK,MAAM,IAAI,CAAC,eASnE,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { EditorState } from '@milkdown/prose/state';
2
2
  import type { EditorView } from '@milkdown/prose/view';
3
- import { Utils } from '@milkdown/utils';
3
+ import { ThemeUtils } from '@milkdown/utils';
4
4
  import type { ButtonList } from './item';
5
- export declare const createPlugin: (buttonMap: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {
5
+ export declare const createPlugin: (buttonMap: ButtonList, utils: ThemeUtils, bottom: boolean, containerClassName: string) => {
6
6
  recreate: (editorView: EditorView) => void;
7
7
  update: (view: EditorView, prevState?: EditorState) => void;
8
8
  destroy: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["../src/selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,eAAO,MAAM,YAAY,iCAAkC,KAAK,UAAU,OAAO,sBAAsB,MAAM;2BAuB9E,UAAU;mBAff,UAAU,cAAc,WAAW;;yBAwBhC,UAAU;wBAIX,OAAO;CAIlC,CAAC"}
1
+ {"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["../src/selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEzC,eAAO,MAAM,YAAY,iCAAkC,UAAU,UAAU,OAAO,sBAAsB,MAAM;2BAuBnF,UAAU;mBAff,UAAU,cAAc,WAAW;;yBAwBhC,UAAU;wBAIX,OAAO;CAIlC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@milkdown/plugin-tooltip",
3
- "version": "6.3.2",
3
+ "version": "6.4.0",
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.3.2",
19
- "@milkdown/prose": "6.3.2",
20
- "@milkdown/design-system": "6.3.2"
18
+ "@milkdown/core": "6.4.0",
19
+ "@milkdown/prose": "6.4.0",
20
+ "@milkdown/design-system": "6.4.0"
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.3.2",
28
- "@milkdown/exception": "6.3.2",
27
+ "@milkdown/utils": "6.4.0",
28
+ "@milkdown/exception": "6.4.0",
29
29
  "tslib": "^2.4.0"
30
30
  },
31
31
  "nx": {
@@ -1,6 +1,6 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import type { EditorView } from '@milkdown/prose/view';
3
- import type { Utils } from '@milkdown/utils';
3
+ import type { ThemeUtils } from '@milkdown/utils';
4
4
 
5
5
  import type { ButtonList } from '../item';
6
6
  import { injectStyle } from './style';
@@ -10,7 +10,7 @@ type Tooltip = {
10
10
  render: (editorView: EditorView) => void;
11
11
  };
12
12
 
13
- export const createTooltip = (buttonMap: ButtonList, utils: Utils, className: string): Tooltip => {
13
+ export const createTooltip = (buttonMap: ButtonList, utils: ThemeUtils, className: string): Tooltip => {
14
14
  const div = document.createElement('div');
15
15
  utils.themeManager.onFlush(() => {
16
16
  const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion)) || '';
@@ -1,13 +1,18 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import type { EditorView } from '@milkdown/prose/view';
3
- import type { Utils } from '@milkdown/utils';
3
+ import type { ThemeUtils } from '@milkdown/utils';
4
4
 
5
5
  import type { ButtonList } from '../item';
6
6
  import { calcButtonPos } from './calc-button-pos';
7
7
  import { createTooltip } from './create-tooltip';
8
8
  import { filterButton } from './filter-button';
9
9
 
10
- export const createButtonManager = (buttons: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {
10
+ export const createButtonManager = (
11
+ buttons: ButtonList,
12
+ utils: ThemeUtils,
13
+ bottom: boolean,
14
+ containerClassName: string,
15
+ ) => {
11
16
  const { dom: buttonDOM, render } = createTooltip(buttons, utils, containerClassName);
12
17
 
13
18
  const onClick = (e: Event) => {
package/src/item.ts CHANGED
@@ -28,12 +28,7 @@ export type ButtonItem = {
28
28
  enable: Pred;
29
29
  };
30
30
 
31
- export const createToggleIcon = (
32
- icon: Icon,
33
- onClick: string,
34
- mark: MarkType | undefined,
35
- disableForMark: MarkType | undefined,
36
- ): Item => ({
31
+ export const createToggleIcon = (icon: Icon, onClick: string, mark?: MarkType, disableForMark?: MarkType): Item => ({
37
32
  icon,
38
33
  onClick,
39
34
  isHidden: () => (view: EditorView) => isTextAndNotHasMark(view.state, disableForMark),
@@ -44,11 +39,11 @@ export const createToggleIcon = (
44
39
  export const defaultButtons = (ctx: Ctx) => {
45
40
  const marks = ctx.get(schemaCtx).marks;
46
41
  return [
47
- createToggleIcon('bold', 'ToggleBold', marks['strong'], marks['code_inline']),
48
- createToggleIcon('italic', 'ToggleItalic', marks['em'], marks['code_inline']),
49
- createToggleIcon('strikeThrough', 'ToggleStrikeThrough', marks['strike_through'], marks['code_inline']),
50
- createToggleIcon('code', 'ToggleInlineCode', marks['code_inline'], marks['link']),
51
- createToggleIcon('link', 'ToggleLink', marks['link'], marks['code_inline']),
42
+ createToggleIcon('bold', 'ToggleBold', marks['strong']),
43
+ createToggleIcon('italic', 'ToggleItalic', marks['em']),
44
+ createToggleIcon('strikeThrough', 'ToggleStrikeThrough', marks['strike_through']),
45
+ createToggleIcon('code', 'ToggleInlineCode', marks['code_inline']),
46
+ createToggleIcon('link', 'ToggleLink', marks['link']),
52
47
  ];
53
48
  };
54
49
 
@@ -1,12 +1,12 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { EditorState } from '@milkdown/prose/state';
3
3
  import type { EditorView } from '@milkdown/prose/view';
4
- import { Utils } from '@milkdown/utils';
4
+ import { ThemeUtils } from '@milkdown/utils';
5
5
 
6
6
  import { createButtonManager } from './button-manager';
7
7
  import type { ButtonList } from './item';
8
8
 
9
- export const createPlugin = (buttonMap: ButtonList, utils: Utils, bottom: boolean, containerClassName: string) => {
9
+ export const createPlugin = (buttonMap: ButtonList, utils: ThemeUtils, bottom: boolean, containerClassName: string) => {
10
10
  let buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);
11
11
  let shouldHide = false;
12
12