@milkdown/plugin-tooltip 7.4.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.es.js CHANGED
@@ -1,90 +1,81 @@
1
- var k = (o, t, e) => {
1
+ var w = (o, t, e) => {
2
2
  if (!t.has(o))
3
3
  throw TypeError("Cannot " + e);
4
4
  };
5
- var a = (o, t, e) => (k(o, t, "read from private field"), e ? e.call(o) : t.get(o)), l = (o, t, e) => {
5
+ var n = (o, t, e) => (w(o, t, "read from private field"), e ? e.call(o) : t.get(o)), l = (o, t, e) => {
6
6
  if (t.has(o))
7
7
  throw TypeError("Cannot add the same private member more than once");
8
8
  t instanceof WeakSet ? t.add(o) : t.set(o, e);
9
- }, c = (o, t, e, s) => (k(o, t, "write to private field"), s ? s.call(o, e) : t.set(o, e), e);
10
- var T = (o, t, e) => (k(o, t, "access private method"), e);
11
- import { TextSelection as F, Plugin as H, PluginKey as M } from "@milkdown/prose/state";
12
- import R from "lodash.debounce";
13
- import { computePosition as S, flip as b, platform as y, offset as j } from "@floating-ui/dom";
14
- import { posToDOMRect as q } from "@milkdown/prose";
15
- import { offsetParent as C } from "composed-offset-position";
16
- import { $ctx as I, $prose as K } from "@milkdown/utils";
17
- var p, m, h, f, d, P, E;
18
- class Q {
9
+ }, c = (o, t, e, s) => (w(o, t, "write to private field"), s ? s.call(o, e) : t.set(o, e), e);
10
+ var T = (o, t, e) => (w(o, t, "access private method"), e);
11
+ import { TextSelection as B, Plugin as F, PluginKey as H } from "@milkdown/prose/state";
12
+ import M from "lodash.debounce";
13
+ import { computePosition as O, flip as S, offset as b } from "@floating-ui/dom";
14
+ import { posToDOMRect as R } from "@milkdown/prose";
15
+ import { $ctx as j, $prose as q } from "@milkdown/utils";
16
+ var r, d, h, a, u, y, C;
17
+ class A {
19
18
  constructor(t) {
20
19
  /// @internal
21
- l(this, P);
20
+ l(this, y);
22
21
  /// @internal
23
- l(this, p, void 0);
22
+ l(this, r, void 0);
24
23
  /// @internal
25
- l(this, m, void 0);
24
+ l(this, d, void 0);
26
25
  l(this, h, void 0);
27
26
  /// @internal
28
- l(this, f, void 0);
29
- l(this, d, void 0);
27
+ l(this, a, void 0);
28
+ l(this, u, void 0);
30
29
  c(this, h, !1), this.onShow = () => {
31
30
  }, this.onHide = () => {
32
- }, c(this, d, (e, s) => {
33
- var w;
34
- const { state: n, composing: r } = e, { selection: u, doc: $ } = n, { ranges: g } = u, x = Math.min(...g.map((i) => i.$from.pos)), O = Math.max(...g.map((i) => i.$to.pos)), _ = s && s.doc.eq($) && s.selection.eq(u);
35
- if (a(this, h) || ((w = e.dom.parentElement) == null || w.appendChild(this.element), c(this, h, !0)), r || _)
31
+ }, c(this, u, (e, s) => {
32
+ var P;
33
+ const { state: i, composing: p } = e, { selection: f, doc: $ } = i, { ranges: g } = f, x = Math.min(...g.map((m) => m.$from.pos)), k = Math.max(...g.map((m) => m.$to.pos)), E = s && s.doc.eq($) && s.selection.eq(f);
34
+ if (n(this, h) || ((P = e.dom.parentElement) == null || P.appendChild(this.element), c(this, h, !0)), p || E)
36
35
  return;
37
- if (!a(this, m).call(this, e, s)) {
36
+ if (!n(this, d).call(this, e, s)) {
38
37
  this.hide();
39
38
  return;
40
39
  }
41
- S({
42
- getBoundingClientRect: () => q(e, x, O)
40
+ O({
41
+ getBoundingClientRect: () => R(e, x, k)
43
42
  }, this.element, {
44
43
  placement: "top",
45
- middleware: [b()],
46
- platform: {
47
- ...y,
48
- getOffsetParent: (i) => y.getOffsetParent(i, C)
49
- }
50
- }).then(({ x: i, y: B }) => {
44
+ middleware: [S(), b(n(this, a))]
45
+ }).then(({ x: m, y: _ }) => {
51
46
  Object.assign(this.element.style, {
52
- left: `${i}px`,
53
- top: `${B}px`
47
+ left: `${m}px`,
48
+ top: `${_}px`
54
49
  });
55
50
  }), this.show();
56
51
  }), this.update = (e, s) => {
57
- R(a(this, d), a(this, p))(e, s);
52
+ M(n(this, u), n(this, r))(e, s);
58
53
  }, this.destroy = () => {
59
54
  }, this.show = (e) => {
60
- this.element.dataset.show = "true", e && S(e, this.element, {
55
+ this.element.dataset.show = "true", e && O(e, this.element, {
61
56
  placement: "top",
62
- middleware: [b(), j(a(this, f))],
63
- platform: {
64
- ...y,
65
- getOffsetParent: (s) => y.getOffsetParent(s, C)
66
- }
67
- }).then(({ x: s, y: n }) => {
57
+ middleware: [S(), b(n(this, a))]
58
+ }).then(({ x: s, y: i }) => {
68
59
  Object.assign(this.element.style, {
69
60
  left: `${s}px`,
70
- top: `${n}px`
61
+ top: `${i}px`
71
62
  });
72
63
  }), this.onShow();
73
64
  }, this.hide = () => {
74
65
  this.element.dataset.show = "false", this.onHide();
75
- }, this.element = t.content, c(this, p, t.debounce ?? 200), c(this, m, t.shouldShow ?? T(this, P, E)), c(this, f, t.offset);
66
+ }, this.element = t.content, c(this, r, t.debounce ?? 200), c(this, d, t.shouldShow ?? T(this, y, C)), c(this, a, t.offset);
76
67
  }
77
68
  }
78
- p = new WeakMap(), m = new WeakMap(), h = new WeakMap(), f = new WeakMap(), d = new WeakMap(), P = new WeakSet(), E = function(t) {
79
- const { doc: e, selection: s } = t.state, { empty: n, from: r, to: u } = s, $ = !e.textBetween(r, u).length && t.state.selection instanceof F, g = this.element.contains(document.activeElement), x = !t.hasFocus() && !g, O = !t.editable;
80
- return !(x || n || $ || O);
69
+ r = new WeakMap(), d = new WeakMap(), h = new WeakMap(), a = new WeakMap(), u = new WeakMap(), y = new WeakSet(), C = function(t) {
70
+ const { doc: e, selection: s } = t.state, { empty: i, from: p, to: f } = s, $ = !e.textBetween(p, f).length && t.state.selection instanceof B, g = this.element.contains(document.activeElement), x = !t.hasFocus() && !g, k = !t.editable;
71
+ return !(x || i || $ || k);
81
72
  };
82
- function V(o) {
83
- const t = I({}, `${o}_TOOLTIP_SPEC`), e = K((n) => {
84
- const r = n.get(t.key);
85
- return new H({
86
- key: new M(`${o}_TOOLTIP`),
87
- ...r
73
+ function G(o) {
74
+ const t = j({}, `${o}_TOOLTIP_SPEC`), e = q((i) => {
75
+ const p = i.get(t.key);
76
+ return new F({
77
+ key: new H(`${o}_TOOLTIP`),
78
+ ...p
88
79
  });
89
80
  }), s = [t, e];
90
81
  return s.key = t.key, s.pluginKey = e.key, t.meta = {
@@ -96,7 +87,7 @@ function V(o) {
96
87
  }, s;
97
88
  }
98
89
  export {
99
- Q as TooltipProvider,
100
- V as tooltipFactory
90
+ A as TooltipProvider,
91
+ G as tooltipFactory
101
92
  };
102
93
  //# sourceMappingURL=index.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/tooltip-provider.ts","../src/tooltip-plugin.ts"],"sourcesContent":["import type { EditorState } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport debounce from 'lodash.debounce'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport { computePosition, flip, offset, platform } from '@floating-ui/dom'\nimport { posToDOMRect } from '@milkdown/prose'\nimport { offsetParent } from 'composed-offset-position'\n\n/// Options for tooltip provider.\nexport interface TooltipProviderOptions {\n /// The tooltip content.\n content: HTMLElement\n /// The debounce time for updating tooltip, 200ms by default.\n debounce?: number\n /// The function to determine whether the tooltip should be shown.\n shouldShow?: (view: EditorView, prevState?: EditorState) => boolean\n /// The offset to get the block. Default is 0.\n offset?: number | {\n mainAxis?: number\n crossAxis?: number\n alignmentAxis?: number | null\n }\n}\n\n/// A provider for creating tooltip.\nexport class TooltipProvider {\n /// @internal\n readonly #debounce: number\n\n /// @internal\n readonly #shouldShow: (view: EditorView, prevState?: EditorState) => boolean\n\n /// @internal\n #initialized = false\n\n /// @internal\n readonly #offset?: number | {\n mainAxis?: number\n crossAxis?: number\n alignmentAxis?: number | null\n }\n\n /// The root element of the tooltip.\n element: HTMLElement\n\n /// On show callback.\n onShow = () => {}\n\n /// On hide callback.\n onHide = () => {}\n\n constructor(options: TooltipProviderOptions) {\n this.element = options.content\n this.#debounce = options.debounce ?? 200\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow\n this.#offset = options.offset\n }\n\n /// @internal\n #onUpdate = (view: EditorView, prevState?: EditorState): void => {\n const { state, composing } = view\n const { selection, doc } = state\n const { ranges } = selection\n const from = Math.min(...ranges.map(range => range.$from.pos))\n const to = Math.max(...ranges.map(range => range.$to.pos))\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection)\n\n if (!this.#initialized) {\n view.dom.parentElement?.appendChild(this.element)\n this.#initialized = true\n }\n\n if (composing || isSame)\n return\n\n if (!this.#shouldShow(view, prevState)) {\n this.hide()\n return\n }\n\n const virtualEl: VirtualElement = {\n getBoundingClientRect: () => posToDOMRect(view, from, to),\n }\n computePosition(virtualEl, this.element, {\n placement: 'top',\n middleware: [flip()],\n platform: {\n ...platform,\n getOffsetParent: element =>\n platform.getOffsetParent(element, offsetParent),\n },\n })\n .then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n\n this.show()\n }\n\n /// Update provider state by editor view.\n update = (view: EditorView, prevState?: EditorState): void => {\n const updater = debounce(this.#onUpdate, this.#debounce)\n\n updater(view, prevState)\n }\n\n /// @internal\n #_shouldShow(view: EditorView): boolean {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock = !doc.textBetween(from, to).length && view.state.selection instanceof TextSelection\n\n const isTooltipChildren = this.element.contains(document.activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus\n || empty\n || isEmptyTextBlock\n || isReadonly\n )\n return false\n\n return true\n }\n\n /// Destroy the tooltip.\n destroy = () => {}\n\n /// Show the tooltip.\n show = (virtualElement?: VirtualElement) => {\n this.element.dataset.show = 'true'\n\n if (virtualElement) {\n computePosition(virtualElement, this.element, {\n placement: 'top',\n middleware: [flip(), offset(this.#offset)],\n platform: {\n ...platform,\n getOffsetParent: element =>\n platform.getOffsetParent(element, offsetParent),\n },\n })\n .then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n }\n\n this.onShow()\n }\n\n /// Hide the tooltip.\n hide = () => {\n this.element.dataset.show = 'false'\n\n this.onHide()\n }\n}\n","import type { SliceType } from '@milkdown/ctx'\nimport type { PluginSpec } from '@milkdown/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { $Ctx, $Prose } from '@milkdown/utils'\nimport { $ctx, $prose } from '@milkdown/utils'\n\n/// @internal\nexport type TooltipSpecId<Id extends string> = `${Id}_TOOLTIP_SPEC`\n\n/// @internal\nexport type TooltipPlugin<Id extends string, State = any> = [$Ctx<PluginSpec<State>, TooltipSpecId<Id>>, $Prose] & {\n key: SliceType<PluginSpec<State>, TooltipSpecId<Id>>\n pluginKey: $Prose['key']\n}\n\n/// Create a tooltip plugin with a unique id.\nexport function tooltipFactory<Id extends string, State = any>(id: Id) {\n const tooltipSpec = $ctx<PluginSpec<State>, TooltipSpecId<Id>>({}, `${id}_TOOLTIP_SPEC`)\n const tooltipPlugin = $prose((ctx) => {\n const spec = ctx.get(tooltipSpec.key)\n return new Plugin({\n key: new PluginKey(`${id}_TOOLTIP`),\n ...spec,\n })\n })\n const result = [tooltipSpec, tooltipPlugin] as TooltipPlugin<Id>\n result.key = tooltipSpec.key\n result.pluginKey = tooltipPlugin.key\n tooltipSpec.meta = {\n package: '@milkdown/plugin-tooltip',\n displayName: `Ctx<tooltipSpec>|${id}`,\n }\n tooltipPlugin.meta = {\n package: '@milkdown/plugin-tooltip',\n displayName: `Prose<tooltip>|${id}`,\n }\n\n return result\n}\n"],"names":["TooltipProvider","options","__privateAdd","__shouldShow","_debounce","_shouldShow","_initialized","_offset","_onUpdate","__privateSet","view","prevState","state","composing","selection","doc","ranges","from","range","to","isSame","__privateGet","_a","computePosition","posToDOMRect","flip","platform","element","offsetParent","x","y","debounce","virtualElement","offset","__privateMethod","_shouldShow_fn","empty","isEmptyTextBlock","TextSelection","isTooltipChildren","notHasFocus","isReadonly","tooltipFactory","id","tooltipSpec","$ctx","tooltipPlugin","$prose","ctx","spec","Plugin","PluginKey","result"],"mappings":";;;;;;;;;;;;;;;;;AA0BO,MAAMA,EAAgB;AAAA,EA0B3B,YAAYC,GAAiC;AA2D7C;AAAA,IAAAC,EAAA,MAAAC;AAnFS;AAAA,IAAAD,EAAA,MAAAE,GAAA;AAGA;AAAA,IAAAF,EAAA,MAAAG,GAAA;AAGT,IAAAH,EAAA,MAAAI,GAAA;AAGS;AAAA,IAAAJ,EAAA,MAAAK,GAAA;AAuBT,IAAAL,EAAA,MAAAM,GAAA;AA1Be,IAAAC,EAAA,MAAAH,GAAA,KAaf,KAAA,SAAS,MAAM;AAAA,IAAA,GAGf,KAAA,SAAS,MAAM;AAAA,IAAA,GAUHG,EAAA,MAAAD,GAAA,CAACE,GAAkBC,MAAkC;;AACzD,YAAA,EAAE,OAAAC,GAAO,WAAAC,EAAc,IAAAH,GACvB,EAAE,WAAAI,GAAW,KAAAC,EAAQ,IAAAH,GACrB,EAAE,QAAAI,EAAW,IAAAF,GACbG,IAAO,KAAK,IAAI,GAAGD,EAAO,IAAI,CAASE,MAAAA,EAAM,MAAM,GAAG,CAAC,GACvDC,IAAK,KAAK,IAAI,GAAGH,EAAO,IAAI,CAASE,MAAAA,EAAM,IAAI,GAAG,CAAC,GACnDE,IAAST,KAAaA,EAAU,IAAI,GAAGI,CAAG,KAAKJ,EAAU,UAAU,GAAGG,CAAS;AAOrF,UALKO,EAAA,MAAKf,QACRgB,IAAAZ,EAAK,IAAI,kBAAT,QAAAY,EAAwB,YAAY,KAAK,UACzCb,EAAA,MAAKH,GAAe,MAGlBO,KAAaO;AACf;AAEF,UAAI,CAACC,EAAA,MAAKhB,GAAL,WAAiBK,GAAMC,IAAY;AACtC,aAAK,KAAK;AACV;AAAA,MACF;AAKgB,MAAAY,EAHkB;AAAA,QAChC,uBAAuB,MAAMC,EAAad,GAAMO,GAAME,CAAE;AAAA,MAAA,GAE/B,KAAK,SAAS;AAAA,QACvC,WAAW;AAAA,QACX,YAAY,CAACM,GAAM;AAAA,QACnB,UAAU;AAAA,UACR,GAAGC;AAAA,UACH,iBAAiB,CAAAC,MACfD,EAAS,gBAAgBC,GAASC,CAAY;AAAA,QAClD;AAAA,MACD,CAAA,EACE,KAAK,CAAC,EAAE,GAAAC,GAAG,GAAAC,QAAQ;AACX,eAAA,OAAO,KAAK,QAAQ,OAAO;AAAA,UAChC,MAAM,GAAGD,CAAC;AAAA,UACV,KAAK,GAAGC,CAAC;AAAA,QAAA,CACV;AAAA,MAAA,CACF,GAEH,KAAK,KAAK;AAAA,IAAA,IAIH,KAAA,SAAA,CAACpB,GAAkBC,MAAkC;AAG5D,MAFgBoB,EAASV,EAAA,MAAKb,IAAWa,EAAA,MAAKjB,EAAS,EAE/CM,GAAMC,CAAS;AAAA,IAAA,GA4BzB,KAAA,UAAU,MAAM;AAAA,IAAA,GAGhB,KAAA,OAAO,CAACqB,MAAoC;AACrC,WAAA,QAAQ,QAAQ,OAAO,QAExBA,KACcT,EAAAS,GAAgB,KAAK,SAAS;AAAA,QAC5C,WAAW;AAAA,QACX,YAAY,CAACP,KAAQQ,EAAOZ,EAAA,MAAKd,EAAO,CAAC;AAAA,QACzC,UAAU;AAAA,UACR,GAAGmB;AAAA,UACH,iBAAiB,CAAAC,MACfD,EAAS,gBAAgBC,GAASC,CAAY;AAAA,QAClD;AAAA,MACD,CAAA,EACE,KAAK,CAAC,EAAE,GAAAC,GAAG,GAAAC,QAAQ;AACX,eAAA,OAAO,KAAK,QAAQ,OAAO;AAAA,UAChC,MAAM,GAAGD,CAAC;AAAA,UACV,KAAK,GAAGC,CAAC;AAAA,QAAA,CACV;AAAA,MAAA,CACF,GAGL,KAAK,OAAO;AAAA,IAAA,GAId,KAAA,OAAO,MAAM;AACN,WAAA,QAAQ,QAAQ,OAAO,SAE5B,KAAK,OAAO;AAAA,IAAA,GAjHZ,KAAK,UAAU7B,EAAQ,SAClBQ,EAAA,MAAAL,GAAYH,EAAQ,YAAY,MAChCQ,EAAA,MAAAJ,GAAcJ,EAAQ,cAAciC,EAAA,MAAK/B,GAAAgC,KAC9C1B,EAAA,MAAKF,GAAUN,EAAQ;AAAA,EACzB;AA+GF;AA5IWG,IAAA,eAGAC,IAAA,eAGTC,IAAA,eAGSC,IAAA,eAuBTC,IAAA,eAmDAL,IAAA,eAAAgC,aAAazB,GAA2B;AACtC,QAAM,EAAE,KAAAK,GAAK,WAAAD,MAAcJ,EAAK,OAC1B,EAAE,OAAA0B,GAAO,MAAAnB,GAAM,IAAAE,EAAA,IAAOL,GAEtBuB,IAAmB,CAACtB,EAAI,YAAYE,GAAME,CAAE,EAAE,UAAUT,EAAK,MAAM,qBAAqB4B,GAExFC,IAAoB,KAAK,QAAQ,SAAS,SAAS,aAAa,GAEhEC,IAAc,CAAC9B,EAAK,cAAc,CAAC6B,GAEnCE,IAAa,CAAC/B,EAAK;AAGvB,SAAA,EAAA8B,KACGJ,KACAC,KACAI;AAKP;ACpHK,SAASC,EAA+CC,GAAQ;AACrE,QAAMC,IAAcC,EAA2C,CAAI,GAAA,GAAGF,CAAE,eAAe,GACjFG,IAAgBC,EAAO,CAACC,MAAQ;AACpC,UAAMC,IAAOD,EAAI,IAAIJ,EAAY,GAAG;AACpC,WAAO,IAAIM,EAAO;AAAA,MAChB,KAAK,IAAIC,EAAU,GAAGR,CAAE,UAAU;AAAA,MAClC,GAAGM;AAAA,IAAA,CACJ;AAAA,EAAA,CACF,GACKG,IAAS,CAACR,GAAaE,CAAa;AAC1C,SAAAM,EAAO,MAAMR,EAAY,KACzBQ,EAAO,YAAYN,EAAc,KACjCF,EAAY,OAAO;AAAA,IACjB,SAAS;AAAA,IACT,aAAa,oBAAoBD,CAAE;AAAA,EAAA,GAErCG,EAAc,OAAO;AAAA,IACnB,SAAS;AAAA,IACT,aAAa,kBAAkBH,CAAE;AAAA,EAAA,GAG5BS;AACT;"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/tooltip-provider.ts","../src/tooltip-plugin.ts"],"sourcesContent":["import type { EditorState } from '@milkdown/prose/state'\nimport { TextSelection } from '@milkdown/prose/state'\nimport type { EditorView } from '@milkdown/prose/view'\nimport debounce from 'lodash.debounce'\nimport type { VirtualElement } from '@floating-ui/dom'\nimport { computePosition, flip, offset } from '@floating-ui/dom'\nimport { posToDOMRect } from '@milkdown/prose'\n\n/// Options for tooltip provider.\nexport interface TooltipProviderOptions {\n /// The tooltip content.\n content: HTMLElement\n /// The debounce time for updating tooltip, 200ms by default.\n debounce?: number\n /// The function to determine whether the tooltip should be shown.\n shouldShow?: (view: EditorView, prevState?: EditorState) => boolean\n /// The offset to get the block. Default is 0.\n offset?: number | {\n mainAxis?: number\n crossAxis?: number\n alignmentAxis?: number | null\n }\n}\n\n/// A provider for creating tooltip.\nexport class TooltipProvider {\n /// @internal\n readonly #debounce: number\n\n /// @internal\n readonly #shouldShow: (view: EditorView, prevState?: EditorState) => boolean\n\n /// @internal\n #initialized = false\n\n /// @internal\n readonly #offset?: number | {\n mainAxis?: number\n crossAxis?: number\n alignmentAxis?: number | null\n }\n\n /// The root element of the tooltip.\n element: HTMLElement\n\n /// On show callback.\n onShow = () => {}\n\n /// On hide callback.\n onHide = () => {}\n\n constructor(options: TooltipProviderOptions) {\n this.element = options.content\n this.#debounce = options.debounce ?? 200\n this.#shouldShow = options.shouldShow ?? this.#_shouldShow\n this.#offset = options.offset\n }\n\n /// @internal\n #onUpdate = (view: EditorView, prevState?: EditorState): void => {\n const { state, composing } = view\n const { selection, doc } = state\n const { ranges } = selection\n const from = Math.min(...ranges.map(range => range.$from.pos))\n const to = Math.max(...ranges.map(range => range.$to.pos))\n const isSame = prevState && prevState.doc.eq(doc) && prevState.selection.eq(selection)\n\n if (!this.#initialized) {\n view.dom.parentElement?.appendChild(this.element)\n this.#initialized = true\n }\n\n if (composing || isSame)\n return\n\n if (!this.#shouldShow(view, prevState)) {\n this.hide()\n return\n }\n\n const virtualEl: VirtualElement = {\n getBoundingClientRect: () => posToDOMRect(view, from, to),\n }\n computePosition(virtualEl, this.element, {\n placement: 'top',\n middleware: [flip(), offset(this.#offset)],\n })\n .then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n\n this.show()\n }\n\n /// Update provider state by editor view.\n update = (view: EditorView, prevState?: EditorState): void => {\n const updater = debounce(this.#onUpdate, this.#debounce)\n\n updater(view, prevState)\n }\n\n /// @internal\n #_shouldShow(view: EditorView): boolean {\n const { doc, selection } = view.state\n const { empty, from, to } = selection\n\n const isEmptyTextBlock = !doc.textBetween(from, to).length && view.state.selection instanceof TextSelection\n\n const isTooltipChildren = this.element.contains(document.activeElement)\n\n const notHasFocus = !view.hasFocus() && !isTooltipChildren\n\n const isReadonly = !view.editable\n\n if (\n notHasFocus\n || empty\n || isEmptyTextBlock\n || isReadonly\n )\n return false\n\n return true\n }\n\n /// Destroy the tooltip.\n destroy = () => {}\n\n /// Show the tooltip.\n show = (virtualElement?: VirtualElement) => {\n this.element.dataset.show = 'true'\n\n if (virtualElement) {\n computePosition(virtualElement, this.element, {\n placement: 'top',\n middleware: [flip(), offset(this.#offset)],\n })\n .then(({ x, y }) => {\n Object.assign(this.element.style, {\n left: `${x}px`,\n top: `${y}px`,\n })\n })\n }\n\n this.onShow()\n }\n\n /// Hide the tooltip.\n hide = () => {\n this.element.dataset.show = 'false'\n\n this.onHide()\n }\n}\n","import type { SliceType } from '@milkdown/ctx'\nimport type { PluginSpec } from '@milkdown/prose/state'\nimport { Plugin, PluginKey } from '@milkdown/prose/state'\nimport type { $Ctx, $Prose } from '@milkdown/utils'\nimport { $ctx, $prose } from '@milkdown/utils'\n\n/// @internal\nexport type TooltipSpecId<Id extends string> = `${Id}_TOOLTIP_SPEC`\n\n/// @internal\nexport type TooltipPlugin<Id extends string, State = any> = [$Ctx<PluginSpec<State>, TooltipSpecId<Id>>, $Prose] & {\n key: SliceType<PluginSpec<State>, TooltipSpecId<Id>>\n pluginKey: $Prose['key']\n}\n\n/// Create a tooltip plugin with a unique id.\nexport function tooltipFactory<Id extends string, State = any>(id: Id) {\n const tooltipSpec = $ctx<PluginSpec<State>, TooltipSpecId<Id>>({}, `${id}_TOOLTIP_SPEC`)\n const tooltipPlugin = $prose((ctx) => {\n const spec = ctx.get(tooltipSpec.key)\n return new Plugin({\n key: new PluginKey(`${id}_TOOLTIP`),\n ...spec,\n })\n })\n const result = [tooltipSpec, tooltipPlugin] as TooltipPlugin<Id>\n result.key = tooltipSpec.key\n result.pluginKey = tooltipPlugin.key\n tooltipSpec.meta = {\n package: '@milkdown/plugin-tooltip',\n displayName: `Ctx<tooltipSpec>|${id}`,\n }\n tooltipPlugin.meta = {\n package: '@milkdown/plugin-tooltip',\n displayName: `Prose<tooltip>|${id}`,\n }\n\n return result\n}\n"],"names":["TooltipProvider","options","__privateAdd","__shouldShow","_debounce","_shouldShow","_initialized","_offset","_onUpdate","__privateSet","view","prevState","state","composing","selection","doc","ranges","from","range","to","isSame","__privateGet","_a","computePosition","posToDOMRect","flip","offset","x","y","debounce","virtualElement","__privateMethod","_shouldShow_fn","empty","isEmptyTextBlock","TextSelection","isTooltipChildren","notHasFocus","isReadonly","tooltipFactory","id","tooltipSpec","$ctx","tooltipPlugin","$prose","ctx","spec","Plugin","PluginKey","result"],"mappings":";;;;;;;;;;;;;;;;AAyBO,MAAMA,EAAgB;AAAA,EA0B3B,YAAYC,GAAiC;AAsD7C;AAAA,IAAAC,EAAA,MAAAC;AA9ES;AAAA,IAAAD,EAAA,MAAAE,GAAA;AAGA;AAAA,IAAAF,EAAA,MAAAG,GAAA;AAGT,IAAAH,EAAA,MAAAI,GAAA;AAGS;AAAA,IAAAJ,EAAA,MAAAK,GAAA;AAuBT,IAAAL,EAAA,MAAAM,GAAA;AA1Be,IAAAC,EAAA,MAAAH,GAAA,KAaf,KAAA,SAAS,MAAM;AAAA,IAAA,GAGf,KAAA,SAAS,MAAM;AAAA,IAAA,GAUHG,EAAA,MAAAD,GAAA,CAACE,GAAkBC,MAAkC;;AACzD,YAAA,EAAE,OAAAC,GAAO,WAAAC,EAAc,IAAAH,GACvB,EAAE,WAAAI,GAAW,KAAAC,EAAQ,IAAAH,GACrB,EAAE,QAAAI,EAAW,IAAAF,GACbG,IAAO,KAAK,IAAI,GAAGD,EAAO,IAAI,CAASE,MAAAA,EAAM,MAAM,GAAG,CAAC,GACvDC,IAAK,KAAK,IAAI,GAAGH,EAAO,IAAI,CAASE,MAAAA,EAAM,IAAI,GAAG,CAAC,GACnDE,IAAST,KAAaA,EAAU,IAAI,GAAGI,CAAG,KAAKJ,EAAU,UAAU,GAAGG,CAAS;AAOrF,UALKO,EAAA,MAAKf,QACRgB,IAAAZ,EAAK,IAAI,kBAAT,QAAAY,EAAwB,YAAY,KAAK,UACzCb,EAAA,MAAKH,GAAe,MAGlBO,KAAaO;AACf;AAEF,UAAI,CAACC,EAAA,MAAKhB,GAAL,WAAiBK,GAAMC,IAAY;AACtC,aAAK,KAAK;AACV;AAAA,MACF;AAKgB,MAAAY,EAHkB;AAAA,QAChC,uBAAuB,MAAMC,EAAad,GAAMO,GAAME,CAAE;AAAA,MAAA,GAE/B,KAAK,SAAS;AAAA,QACvC,WAAW;AAAA,QACX,YAAY,CAACM,KAAQC,EAAOL,EAAA,MAAKd,EAAO,CAAC;AAAA,MAC1C,CAAA,EACE,KAAK,CAAC,EAAE,GAAAoB,GAAG,GAAAC,QAAQ;AACX,eAAA,OAAO,KAAK,QAAQ,OAAO;AAAA,UAChC,MAAM,GAAGD,CAAC;AAAA,UACV,KAAK,GAAGC,CAAC;AAAA,QAAA,CACV;AAAA,MAAA,CACF,GAEH,KAAK,KAAK;AAAA,IAAA,IAIH,KAAA,SAAA,CAAClB,GAAkBC,MAAkC;AAG5D,MAFgBkB,EAASR,EAAA,MAAKb,IAAWa,EAAA,MAAKjB,EAAS,EAE/CM,GAAMC,CAAS;AAAA,IAAA,GA4BzB,KAAA,UAAU,MAAM;AAAA,IAAA,GAGhB,KAAA,OAAO,CAACmB,MAAoC;AACrC,WAAA,QAAQ,QAAQ,OAAO,QAExBA,KACcP,EAAAO,GAAgB,KAAK,SAAS;AAAA,QAC5C,WAAW;AAAA,QACX,YAAY,CAACL,KAAQC,EAAOL,EAAA,MAAKd,EAAO,CAAC;AAAA,MAC1C,CAAA,EACE,KAAK,CAAC,EAAE,GAAAoB,GAAG,GAAAC,QAAQ;AACX,eAAA,OAAO,KAAK,QAAQ,OAAO;AAAA,UAChC,MAAM,GAAGD,CAAC;AAAA,UACV,KAAK,GAAGC,CAAC;AAAA,QAAA,CACV;AAAA,MAAA,CACF,GAGL,KAAK,OAAO;AAAA,IAAA,GAId,KAAA,OAAO,MAAM;AACN,WAAA,QAAQ,QAAQ,OAAO,SAE5B,KAAK,OAAO;AAAA,IAAA,GAvGZ,KAAK,UAAU3B,EAAQ,SAClBQ,EAAA,MAAAL,GAAYH,EAAQ,YAAY,MAChCQ,EAAA,MAAAJ,GAAcJ,EAAQ,cAAc8B,EAAA,MAAK5B,GAAA6B,KAC9CvB,EAAA,MAAKF,GAAUN,EAAQ;AAAA,EACzB;AAqGF;AAlIWG,IAAA,eAGAC,IAAA,eAGTC,IAAA,eAGSC,IAAA,eAuBTC,IAAA,eA8CAL,IAAA,eAAA6B,aAAatB,GAA2B;AACtC,QAAM,EAAE,KAAAK,GAAK,WAAAD,MAAcJ,EAAK,OAC1B,EAAE,OAAAuB,GAAO,MAAAhB,GAAM,IAAAE,EAAA,IAAOL,GAEtBoB,IAAmB,CAACnB,EAAI,YAAYE,GAAME,CAAE,EAAE,UAAUT,EAAK,MAAM,qBAAqByB,GAExFC,IAAoB,KAAK,QAAQ,SAAS,SAAS,aAAa,GAEhEC,IAAc,CAAC3B,EAAK,cAAc,CAAC0B,GAEnCE,IAAa,CAAC5B,EAAK;AAGvB,SAAA,EAAA2B,KACGJ,KACAC,KACAI;AAKP;AC9GK,SAASC,EAA+CC,GAAQ;AACrE,QAAMC,IAAcC,EAA2C,CAAI,GAAA,GAAGF,CAAE,eAAe,GACjFG,IAAgBC,EAAO,CAACC,MAAQ;AACpC,UAAMC,IAAOD,EAAI,IAAIJ,EAAY,GAAG;AACpC,WAAO,IAAIM,EAAO;AAAA,MAChB,KAAK,IAAIC,EAAU,GAAGR,CAAE,UAAU;AAAA,MAClC,GAAGM;AAAA,IAAA,CACJ;AAAA,EAAA,CACF,GACKG,IAAS,CAACR,GAAaE,CAAa;AAC1C,SAAAM,EAAO,MAAMR,EAAY,KACzBQ,EAAO,YAAYN,EAAc,KACjCF,EAAY,OAAO;AAAA,IACjB,SAAS;AAAA,IACT,aAAa,oBAAoBD,CAAE;AAAA,EAAA,GAErCG,EAAc,OAAO;AAAA,IACnB,SAAS;AAAA,IACT,aAAa,kBAAkBH,CAAE;AAAA,EAAA,GAG5BS;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-provider.d.ts","sourceRoot":"","sources":["../src/tooltip-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMtD,MAAM,WAAW,sBAAsB;IAErC,OAAO,EAAE,WAAW,CAAA;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,WAAW,KAAK,OAAO,CAAA;IAEnE,MAAM,CAAC,EAAE,MAAM,GAAG;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC9B,CAAA;CACF;AAGD,qBAAa,eAAe;;IAkB1B,OAAO,EAAE,WAAW,CAAA;IAGpB,MAAM,aAAW;IAGjB,MAAM,aAAW;gBAEL,OAAO,EAAE,sBAAsB;IAoD3C,MAAM,SAAU,UAAU,cAAc,WAAW,KAAG,IAAI,CAIzD;IA2BD,OAAO,aAAW;IAGlB,IAAI,oBAAqB,cAAc,UAsBtC;IAGD,IAAI,aAIH;CACF"}
1
+ {"version":3,"file":"tooltip-provider.d.ts","sourceRoot":"","sources":["../src/tooltip-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAKtD,MAAM,WAAW,sBAAsB;IAErC,OAAO,EAAE,WAAW,CAAA;IAEpB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,WAAW,KAAK,OAAO,CAAA;IAEnE,MAAM,CAAC,EAAE,MAAM,GAAG;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAC9B,CAAA;CACF;AAGD,qBAAa,eAAe;;IAkB1B,OAAO,EAAE,WAAW,CAAA;IAGpB,MAAM,aAAW;IAGjB,MAAM,aAAW;gBAEL,OAAO,EAAE,sBAAsB;IA+C3C,MAAM,SAAU,UAAU,cAAc,WAAW,KAAG,IAAI,CAIzD;IA2BD,OAAO,aAAW;IAGlB,IAAI,oBAAqB,cAAc,UAiBtC;IAGD,IAAI,aAIH;CACF"}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@milkdown/plugin-tooltip",
3
3
  "type": "module",
4
- "version": "7.4.0",
4
+ "version": "7.5.0",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
8
  "url": "git+https://github.com/Milkdown/milkdown.git",
9
- "directory": "packages/plugin-tooltip"
9
+ "directory": "packages/plugins/plugin-tooltip"
10
10
  },
11
11
  "keywords": [
12
12
  "milkdown",
@@ -32,17 +32,16 @@
32
32
  "dependencies": {
33
33
  "@floating-ui/dom": "^1.5.1",
34
34
  "@types/lodash.debounce": "^4.0.7",
35
- "composed-offset-position": "^0.0.4",
36
35
  "lodash.debounce": "^4.0.8",
37
36
  "tippy.js": "^6.3.7",
38
37
  "tslib": "^2.5.0",
39
- "@milkdown/exception": "7.4.0",
40
- "@milkdown/utils": "7.4.0"
38
+ "@milkdown/exception": "7.5.0",
39
+ "@milkdown/utils": "7.5.0"
41
40
  },
42
41
  "devDependencies": {
43
- "@milkdown/core": "7.4.0",
44
- "@milkdown/ctx": "7.4.0",
45
- "@milkdown/prose": "7.4.0"
42
+ "@milkdown/core": "7.5.0",
43
+ "@milkdown/ctx": "7.5.0",
44
+ "@milkdown/prose": "7.5.0"
46
45
  },
47
46
  "nx": {
48
47
  "targets": {
@@ -51,19 +50,13 @@
51
50
  "{projectRoot}/lib"
52
51
  ],
53
52
  "dependsOn": [
54
- {
55
- "target": "build",
56
- "projects": "dependencies"
57
- }
53
+ "build"
58
54
  ]
59
55
  },
60
56
  "tsc": {
61
57
  "outputs": [],
62
58
  "dependsOn": [
63
- {
64
- "target": "build",
65
- "projects": "dependencies"
66
- }
59
+ "build"
67
60
  ]
68
61
  }
69
62
  }
@@ -3,9 +3,8 @@ import { TextSelection } from '@milkdown/prose/state'
3
3
  import type { EditorView } from '@milkdown/prose/view'
4
4
  import debounce from 'lodash.debounce'
5
5
  import type { VirtualElement } from '@floating-ui/dom'
6
- import { computePosition, flip, offset, platform } from '@floating-ui/dom'
6
+ import { computePosition, flip, offset } from '@floating-ui/dom'
7
7
  import { posToDOMRect } from '@milkdown/prose'
8
- import { offsetParent } from 'composed-offset-position'
9
8
 
10
9
  /// Options for tooltip provider.
11
10
  export interface TooltipProviderOptions {
@@ -84,12 +83,7 @@ export class TooltipProvider {
84
83
  }
85
84
  computePosition(virtualEl, this.element, {
86
85
  placement: 'top',
87
- middleware: [flip()],
88
- platform: {
89
- ...platform,
90
- getOffsetParent: element =>
91
- platform.getOffsetParent(element, offsetParent),
92
- },
86
+ middleware: [flip(), offset(this.#offset)],
93
87
  })
94
88
  .then(({ x, y }) => {
95
89
  Object.assign(this.element.style, {
@@ -143,11 +137,6 @@ export class TooltipProvider {
143
137
  computePosition(virtualElement, this.element, {
144
138
  placement: 'top',
145
139
  middleware: [flip(), offset(this.#offset)],
146
- platform: {
147
- ...platform,
148
- getOffsetParent: element =>
149
- platform.getOffsetParent(element, offsetParent),
150
- },
151
140
  })
152
141
  .then(({ x, y }) => {
153
142
  Object.assign(this.element.style, {