@milkdown/plugin-tooltip 5.3.0 → 5.3.4

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.
Files changed (71) hide show
  1. package/lib/index.d.ts +1 -21
  2. package/lib/index.es.js +20 -7
  3. package/lib/index.es.js.map +1 -1
  4. package/lib/{button-manager → src/button-manager}/calc-button-pos.d.ts +0 -0
  5. package/lib/src/button-manager/calc-button-pos.d.ts.map +1 -0
  6. package/lib/{button-manager → src/button-manager}/create-tooltip.d.ts +0 -0
  7. package/lib/src/button-manager/create-tooltip.d.ts.map +1 -0
  8. package/lib/{button-manager → src/button-manager}/filter-button.d.ts +0 -0
  9. package/lib/src/button-manager/filter-button.d.ts.map +1 -0
  10. package/lib/{button-manager → src/button-manager}/index.d.ts +0 -0
  11. package/lib/src/button-manager/index.d.ts.map +1 -0
  12. package/lib/{button-manager → src/button-manager}/no-active.d.ts +0 -0
  13. package/lib/src/button-manager/no-active.d.ts.map +1 -0
  14. package/lib/src/button-manager/style.d.ts +3 -0
  15. package/lib/src/button-manager/style.d.ts.map +1 -0
  16. package/lib/src/index.d.ts +21 -0
  17. package/lib/src/index.d.ts.map +1 -0
  18. package/lib/{input-manager → src/input-manager}/calc-input-pos.d.ts +0 -0
  19. package/lib/src/input-manager/calc-input-pos.d.ts.map +1 -0
  20. package/lib/{input-manager → src/input-manager}/create-input.d.ts +0 -0
  21. package/lib/src/input-manager/create-input.d.ts.map +1 -0
  22. package/lib/{input-manager → src/input-manager}/filter-input.d.ts +0 -0
  23. package/lib/src/input-manager/filter-input.d.ts.map +1 -0
  24. package/lib/{input-manager → src/input-manager}/index.d.ts +0 -0
  25. package/lib/src/input-manager/index.d.ts.map +1 -0
  26. package/lib/src/input-manager/style.d.ts +3 -0
  27. package/lib/src/input-manager/style.d.ts.map +1 -0
  28. package/lib/{item.d.ts → src/item.d.ts} +0 -0
  29. package/lib/src/item.d.ts.map +1 -0
  30. package/lib/{selection-marks-tooltip.d.ts → src/selection-marks-tooltip.d.ts} +0 -0
  31. package/lib/src/selection-marks-tooltip.d.ts.map +1 -0
  32. package/lib/{utility → src/utility}/element.d.ts +0 -0
  33. package/lib/src/utility/element.d.ts.map +1 -0
  34. package/lib/{utility → src/utility}/index.d.ts +0 -0
  35. package/lib/src/utility/index.d.ts.map +1 -0
  36. package/lib/{utility → src/utility}/input.d.ts +0 -0
  37. package/lib/src/utility/input.d.ts.map +1 -0
  38. package/lib/{utility → src/utility}/prosemirror.d.ts +0 -0
  39. package/lib/src/utility/prosemirror.d.ts.map +1 -0
  40. package/lib/{utility → src/utility}/toggle.d.ts +0 -0
  41. package/lib/src/utility/toggle.d.ts.map +1 -0
  42. package/package.json +12 -27
  43. package/src/button-manager/calc-button-pos.ts +6 -2
  44. package/src/button-manager/style.ts +2 -3
  45. package/src/index.ts +6 -0
  46. package/src/input-manager/calc-input-pos.ts +6 -1
  47. package/src/input-manager/style.ts +2 -3
  48. package/src/item.ts +5 -2
  49. package/lib/button-manager/calc-button-pos.d.ts.map +0 -1
  50. package/lib/button-manager/create-tooltip.d.ts.map +0 -1
  51. package/lib/button-manager/filter-button.d.ts.map +0 -1
  52. package/lib/button-manager/index.d.ts.map +0 -1
  53. package/lib/button-manager/no-active.d.ts.map +0 -1
  54. package/lib/button-manager/style.d.ts +0 -3
  55. package/lib/button-manager/style.d.ts.map +0 -1
  56. package/lib/index.cjs.js +0 -102
  57. package/lib/index.cjs.js.map +0 -1
  58. package/lib/index.d.ts.map +0 -1
  59. package/lib/input-manager/calc-input-pos.d.ts.map +0 -1
  60. package/lib/input-manager/create-input.d.ts.map +0 -1
  61. package/lib/input-manager/filter-input.d.ts.map +0 -1
  62. package/lib/input-manager/index.d.ts.map +0 -1
  63. package/lib/input-manager/style.d.ts +0 -3
  64. package/lib/input-manager/style.d.ts.map +0 -1
  65. package/lib/item.d.ts.map +0 -1
  66. package/lib/selection-marks-tooltip.d.ts.map +0 -1
  67. package/lib/utility/element.d.ts.map +0 -1
  68. package/lib/utility/index.d.ts.map +0 -1
  69. package/lib/utility/input.d.ts.map +0 -1
  70. package/lib/utility/prosemirror.d.ts.map +0 -1
  71. package/lib/utility/toggle.d.ts.map +0 -1
package/lib/index.d.ts CHANGED
@@ -1,21 +1 @@
1
- import { PluginKey } from '@milkdown/prose';
2
- import { AtomList } from '@milkdown/utils';
3
- import { InputOptions } from './item';
4
- export declare const key: PluginKey<any, any>;
5
- export declare const tooltipPlugin: import("@milkdown/utils/lib/types").WithExtend<string, InputOptions, {
6
- [x: string]: import("prosemirror-model").NodeType<any>;
7
- } & {
8
- [x: string]: import("prosemirror-model").MarkType<any>;
9
- }, {
10
- schema?: ((ctx: import("@milkdown/core").Ctx) => {
11
- node?: Record<string, import("@milkdown/core").NodeSchema> | undefined;
12
- mark?: Record<string, import("@milkdown/core").MarkSchema> | undefined;
13
- }) | undefined;
14
- view?: ((ctx: import("@milkdown/core").Ctx) => Partial<{
15
- [x: string]: import("@milkdown/prose").NodeViewFactory;
16
- } & {
17
- [x: string]: import("@milkdown/prose").MarkViewFactory;
18
- }>) | undefined;
19
- }>;
20
- export declare const tooltip: AtomList<import("@milkdown/utils/lib/types").Metadata<import("@milkdown/utils/lib/types").GetPlugin<string, InputOptions>> & import("@milkdown/core").MilkdownPlugin>;
21
- //# sourceMappingURL=index.d.ts.map
1
+ export * from './src/index'
package/lib/index.es.js CHANGED
@@ -19,7 +19,6 @@ import { findSelectedNodeOfType, findParentNode, TextSelection, calculateTextPos
19
19
  import { createPlugin as createPlugin$1, AtomList } from "@milkdown/utils";
20
20
  import { ModifyLink, ModifyImage, ToggleBold, ToggleItalic, ToggleStrikeThrough, ToggleInlineCode, ToggleLink } from "@milkdown/preset-gfm";
21
21
  import { ModifyInlineMath } from "@milkdown/plugin-math";
22
- import { css } from "@emotion/css";
23
22
  const elementIsTag = (element, tagName) => element.tagName === tagName.toUpperCase();
24
23
  const modifyLink = (ctx) => (e) => {
25
24
  const { target } = e;
@@ -176,7 +175,7 @@ const inputMap = (schema, ctx, inputOptions) => {
176
175
  const { marks, nodes } = schema;
177
176
  return {
178
177
  [0]: __spreadValues({
179
- display: (view) => view.state.selection.empty && hasMark(view.state, marks.link),
178
+ display: (view) => view.state.selection.empty && view.state.selection instanceof TextSelection && hasMark(view.state, marks.link),
180
179
  command: modifyLink(ctx),
181
180
  update: updateLinkView
182
181
  }, inputOptions.link),
@@ -206,18 +205,22 @@ const buttonMap = (schema, ctx) => {
206
205
  const calcButtonPos = (buttons, view) => {
207
206
  buttons.classList.remove("hide");
208
207
  calculateTextPosition(view, buttons, (start, end, target, parent) => {
208
+ const $editor = buttons.parentElement;
209
+ if (!$editor) {
210
+ throw new Error();
211
+ }
209
212
  const selectionWidth = end.left - start.left;
210
213
  let left = start.left - parent.left - (target.width - selectionWidth) / 2;
211
- let top = start.top - parent.top - target.height - 14;
214
+ let top = start.top - parent.top - target.height - 14 + $editor.scrollTop;
212
215
  if (left < 0)
213
216
  left = 0;
214
217
  if (start.top < target.height) {
215
- top = start.bottom - parent.top + 14;
218
+ top = start.bottom - parent.top + 14 + $editor.scrollTop;
216
219
  }
217
220
  return [top, left];
218
221
  });
219
222
  };
220
- const injectStyle$1 = (themeTool) => {
223
+ const injectStyle$1 = (themeTool, { css }) => {
221
224
  var _a, _b;
222
225
  const { palette, mixin, size } = themeTool;
223
226
  return css`
@@ -334,15 +337,19 @@ const createButtonManager = (buttonMap2, utils) => {
334
337
  };
335
338
  const calcInputPos = (view, input) => {
336
339
  calculateTextPosition(view, input, (start, end, target, parent) => {
340
+ const $editor = input.parentElement;
341
+ if (!$editor) {
342
+ throw new Error();
343
+ }
337
344
  const selectionWidth = end.left - start.left;
338
345
  let left = start.left - parent.left - (target.width - selectionWidth) / 2;
339
- const top = start.bottom - parent.top + 14;
346
+ const top = start.bottom - parent.top + 14 + $editor.scrollTop;
340
347
  if (left < 0)
341
348
  left = 0;
342
349
  return [top, left];
343
350
  });
344
351
  };
345
- const injectStyle = (themeTool) => {
352
+ const injectStyle = (themeTool, { css }) => {
346
353
  var _a, _b;
347
354
  const { palette, mixin, size } = themeTool;
348
355
  return css`
@@ -562,6 +569,12 @@ const tooltipPlugin = createPlugin$1((utils, options) => {
562
569
  manager.setHide(false);
563
570
  manager.update(view);
564
571
  return false;
572
+ },
573
+ handleDOMEvents: {
574
+ mousedown: () => {
575
+ manager.setHide(false);
576
+ return false;
577
+ }
565
578
  }
566
579
  },
567
580
  view: (editorView) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/utility/element.ts","../src/utility/input.ts","../src/utility/prosemirror.ts","../src/utility/toggle.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/input-manager/calc-input-pos.ts","../src/input-manager/style.ts","../src/input-manager/create-input.ts","../src/input-manager/filter-input.ts","../src/input-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nexport const elementIsTag = (element: HTMLElement, tagName: string): boolean =>\n element.tagName === tagName.toUpperCase();\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx } from '@milkdown/core';\nimport { ModifyInlineMath } from '@milkdown/plugin-math';\nimport { ModifyImage, ModifyLink } from '@milkdown/preset-gfm';\nimport { findSelectedNodeOfType, Node as ProseNode } from '@milkdown/prose';\n\nimport { Event2Command, Updater } from '../item';\nimport { elementIsTag } from './element';\n\nexport const modifyLink =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyLink, inputEl.value);\n };\n\nexport const modifyInlineMath =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyInlineMath, inputEl.value);\n };\n\nexport const modifyImage =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyImage, inputEl.value);\n };\n\nexport const updateLinkView: Updater = (view, $) => {\n const { marks } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const { selection } = view.state;\n let node: ProseNode | undefined;\n view.state.doc.nodesBetween(selection.from, selection.to, (n) => {\n if (marks.link.isInSet(n.marks)) {\n node = n;\n return false;\n }\n return;\n });\n if (!node) return;\n\n const mark = node.marks.find((m) => m.type === marks.link);\n if (!mark) return;\n\n const value = mark.attrs.href;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateInlineMathView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.math_inline);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.value;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateImageView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.image);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.src;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState, findParentNode, MarkType, Node, NodeType, TextSelection } from '@milkdown/prose';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type: MarkType): boolean => {\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 { CmdKey, commandsCtx, Ctx, themeToolCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose';\n\nimport type { ButtonItem } from '../item';\nimport { hasMark, isTextAndNotHasMark } from './prosemirror';\n\nexport const createToggleIcon = <T>(\n ctx: Ctx,\n iconName: Icon,\n commandKey: CmdKey<T>,\n mark: MarkType,\n disableForMark: MarkType,\n): ButtonItem => ({\n $: ctx.get(themeToolCtx).slots.icon(iconName),\n command: () => ctx.get(commandsCtx).call(commandKey),\n active: (view) => hasMark(view.state, mark),\n disable: (view) => isTextAndNotHasMark(view.state, disableForMark),\n enable: (view) => !!mark && !!view.state.schema.marks[mark.name],\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';\nimport { EditorView, findSelectedNodeOfType, Schema } from '@milkdown/prose';\n\nimport {\n createToggleIcon,\n hasMark,\n modifyImage,\n modifyInlineMath,\n modifyLink,\n updateImageView,\n updateInlineMathView,\n updateLinkView,\n} 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 ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport type InputItem = {\n command: Event2Command;\n display: Pred;\n update: Updater;\n placeholder: string;\n} & (\n | {\n bind: true;\n }\n | {\n bind?: false;\n buttonText: string;\n }\n);\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport enum InputAction {\n ModifyLink,\n ModifyImage,\n ModifyInlineMath,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\nexport type InputMap = Record<InputAction, InputItem>;\n\nexport type InputOptions = {\n link: {\n placeholder: string;\n buttonText: string;\n };\n image: {\n placeholder: string;\n buttonText: string;\n };\n inlineMath: {\n placeholder: string;\n };\n};\n\nexport const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions): InputMap => {\n const { marks, nodes } = schema;\n return {\n [InputAction.ModifyLink]: {\n display: (view) => view.state.selection.empty && hasMark(view.state, marks.link),\n command: modifyLink(ctx),\n update: updateLinkView,\n ...inputOptions.link,\n },\n [InputAction.ModifyInlineMath]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.math_inline)),\n command: modifyInlineMath(ctx),\n update: updateInlineMathView,\n bind: true,\n ...inputOptions.inlineMath,\n },\n [InputAction.ModifyImage]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.image)),\n command: modifyImage(ctx),\n update: updateImageView,\n ...inputOptions.image,\n },\n };\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx): ButtonMap => {\n const { marks } = schema;\n return {\n [ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', ToggleBold, marks.strong, marks.code_inline),\n [ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', ToggleItalic, marks.em, marks.code_inline),\n [ButtonAction.ToggleStrike]: createToggleIcon(\n ctx,\n 'strikeThrough',\n ToggleStrikeThrough,\n marks.strike_through,\n marks.code_inline,\n ),\n [ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', ToggleInlineCode, marks.code_inline, marks.link),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', ToggleLink, marks.link, marks.code_inline),\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\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;\n\n if (left < 0) left = 0;\n\n if (start.top < target.height) {\n top = start.bottom - parent.top + 14;\n }\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${size.radius};\n z-index: 2;\n\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 3rem;\n line-height: 3rem;\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 * ${size.lineWidth});\n width: ${size.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';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonMap, utils: Utils): Tooltip => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle) || '';\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip');\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView))\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';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view))\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttonMap: ButtonMap, view: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(view))\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(buttonMap, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (buttonMap: ButtonMap, utils: Utils) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils);\n\n const onClick = (e: Event) => {\n const target = Object.values(buttonMap).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 buttons.classList.add('hide');\n };\n\n buttons.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttons.removeEventListener('mousedown', onClick);\n buttons.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttonMap, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttons, editorView);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcInputPos = (view: EditorView, input: HTMLDivElement) => {\n calculateTextPosition(view, input, (start, end, target, parent) => {\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n const top = start.bottom - parent.top + 14;\n\n if (left < 0) left = 0;\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n\n return css`\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n background: ${palette('surface')};\n border-radius: ${size.radius};\n font-size: 1rem;\n\n height: 3.5rem;\n box-sizing: border-box;\n width: 25.5rem;\n padding: 0 1rem;\n gap: 1rem;\n z-index: 2;\n\n input,\n button {\n all: unset;\n }\n\n input {\n flex-grow: 1;\n caret-color: ${palette('primary')};\n &::placeholder {\n color: ${palette('neutral', 0.6)};\n }\n }\n\n button {\n cursor: pointer;\n height: 2.25rem;\n color: ${palette('primary')};\n font-size: 0.875rem;\n padding: 0 0.5rem;\n font-weight: 500;\n letter-spacing: 1.25px;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.disable {\n color: ${palette('neutral', 0.38)};\n cursor: not-allowed;\n &:hover {\n background: transparent;\n }\n }\n &.hide {\n display: none;\n }\n }\n\n &.hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Utils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createInput = (utils: Utils) => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle);\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip-input');\n\n const input = document.createElement('input');\n div.appendChild(input);\n const button = document.createElement('button');\n div.appendChild(button);\n\n input.addEventListener('input', (e) => {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (!target.value) {\n button.classList.add('disable');\n return;\n }\n\n button.classList.remove('disable');\n });\n\n return {\n div,\n input,\n button,\n } as const;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\n\nimport type { InputMap } from '../item';\n\nexport const filterInput = (\n currentView: EditorView,\n inputMap: InputMap,\n div: HTMLDivElement,\n input: HTMLInputElement,\n button: HTMLButtonElement,\n) => {\n const target = Object.values(inputMap).find((input) => input.display(currentView));\n\n if (!target) {\n div.classList.add('hide');\n return;\n }\n\n div.classList.remove('hide');\n\n if (target.bind) {\n button.classList.add('hide');\n } else {\n button.classList.remove('hide');\n button.textContent = target.buttonText;\n }\n\n input.placeholder = target.placeholder;\n target.update(currentView, div);\n\n return target;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport type { Event2Command, InputMap } from '../item';\nimport { calcInputPos } from './calc-input-pos';\nimport { createInput } from './create-input';\nimport { filterInput } from './filter-input';\n\nexport const createInputManager = (inputMap: InputMap, utils: Utils) => {\n let inputCommand: Event2Command | undefined;\n let binding = false;\n const setCommand = (x?: Event2Command) => (inputCommand = x);\n\n const { div, button, input } = createInput(utils);\n\n const onClick = (e: Event) => {\n if (!inputCommand || button.classList.contains('disable')) return;\n\n e.stopPropagation();\n inputCommand(e);\n div.classList.add('hide');\n };\n const onInput = (e: Event) => {\n if (!binding || !inputCommand) return;\n inputCommand(e);\n };\n\n input.addEventListener('input', onInput);\n button.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n input.removeEventListener('input', onInput);\n div.removeEventListener('mousedown', onClick);\n div.remove();\n },\n hide: () => {\n div.classList.add('hide');\n setCommand();\n },\n update: (editorView: EditorView) => {\n const result = filterInput(editorView, inputMap, div, input, button);\n if (!result) return;\n binding = !!result.bind;\n setCommand(result.command);\n calcInputPos(editorView, div);\n },\n render: (editorView: EditorView) => {\n const wrapper = editorView.dom.parentNode;\n if (!wrapper) throw new Error();\n wrapper.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorState, EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport { createInputManager } from './input-manager';\nimport type { ButtonMap, InputMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, inputMap: InputMap, utils: Utils) => {\n const buttonManager = createButtonManager(buttonMap, utils);\n const inputManager = createInputManager(inputMap, utils);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n inputManager.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 inputManager.update(view);\n };\n\n return {\n update,\n destroy: () => {\n buttonManager.destroy();\n inputManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n inputManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, inputMap, InputOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, InputOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx),\n inputMap(schema, ctx, {\n link: {\n placeholder: 'Input Web Link',\n buttonText: 'APPLY',\n ...(options?.link ?? {}),\n },\n image: {\n placeholder: 'Input Image Link',\n buttonText: 'APPLY',\n ...(options?.image ?? {}),\n },\n inlineMath: {\n placeholder: 'Input Math',\n ...(options?.inlineMath ?? {}),\n },\n }),\n utils,\n );\n const plugin = new Plugin({\n key,\n props: {\n handleKeyDown: () => {\n manager.setHide(true);\n return false;\n },\n handleClick: (view) => {\n manager.setHide(false);\n manager.update(view);\n return false;\n },\n },\n view: (editorView) => {\n manager.render(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":["injectStyle","create"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/utility/element.ts","../src/utility/input.ts","../src/utility/prosemirror.ts","../src/utility/toggle.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/input-manager/calc-input-pos.ts","../src/input-manager/style.ts","../src/input-manager/create-input.ts","../src/input-manager/filter-input.ts","../src/input-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nexport const elementIsTag = (element: HTMLElement, tagName: string): boolean =>\n element.tagName === tagName.toUpperCase();\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx } from '@milkdown/core';\nimport { ModifyInlineMath } from '@milkdown/plugin-math';\nimport { ModifyImage, ModifyLink } from '@milkdown/preset-gfm';\nimport { findSelectedNodeOfType, Node as ProseNode } from '@milkdown/prose';\n\nimport { Event2Command, Updater } from '../item';\nimport { elementIsTag } from './element';\n\nexport const modifyLink =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyLink, inputEl.value);\n };\n\nexport const modifyInlineMath =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyInlineMath, inputEl.value);\n };\n\nexport const modifyImage =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyImage, inputEl.value);\n };\n\nexport const updateLinkView: Updater = (view, $) => {\n const { marks } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const { selection } = view.state;\n let node: ProseNode | undefined;\n view.state.doc.nodesBetween(selection.from, selection.to, (n) => {\n if (marks.link.isInSet(n.marks)) {\n node = n;\n return false;\n }\n return;\n });\n if (!node) return;\n\n const mark = node.marks.find((m) => m.type === marks.link);\n if (!mark) return;\n\n const value = mark.attrs.href;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateInlineMathView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.math_inline);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.value;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateImageView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.image);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.src;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState, findParentNode, MarkType, Node, NodeType, TextSelection } from '@milkdown/prose';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type: MarkType): boolean => {\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 { CmdKey, commandsCtx, Ctx, themeToolCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose';\n\nimport type { ButtonItem } from '../item';\nimport { hasMark, isTextAndNotHasMark } from './prosemirror';\n\nexport const createToggleIcon = <T>(\n ctx: Ctx,\n iconName: Icon,\n commandKey: CmdKey<T>,\n mark: MarkType,\n disableForMark: MarkType,\n): ButtonItem => ({\n $: ctx.get(themeToolCtx).slots.icon(iconName),\n command: () => ctx.get(commandsCtx).call(commandKey),\n active: (view) => hasMark(view.state, mark),\n disable: (view) => isTextAndNotHasMark(view.state, disableForMark),\n enable: (view) => !!mark && !!view.state.schema.marks[mark.name],\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';\nimport { EditorView, findSelectedNodeOfType, Schema, TextSelection } from '@milkdown/prose';\n\nimport {\n createToggleIcon,\n hasMark,\n modifyImage,\n modifyInlineMath,\n modifyLink,\n updateImageView,\n updateInlineMathView,\n updateLinkView,\n} 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 ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport type InputItem = {\n command: Event2Command;\n display: Pred;\n update: Updater;\n placeholder: string;\n} & (\n | {\n bind: true;\n }\n | {\n bind?: false;\n buttonText: string;\n }\n);\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport enum InputAction {\n ModifyLink,\n ModifyImage,\n ModifyInlineMath,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\nexport type InputMap = Record<InputAction, InputItem>;\n\nexport type InputOptions = {\n link: {\n placeholder: string;\n buttonText: string;\n };\n image: {\n placeholder: string;\n buttonText: string;\n };\n inlineMath: {\n placeholder: string;\n };\n};\n\nexport const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions): InputMap => {\n const { marks, nodes } = schema;\n return {\n [InputAction.ModifyLink]: {\n display: (view) =>\n view.state.selection.empty &&\n view.state.selection instanceof TextSelection &&\n hasMark(view.state, marks.link),\n command: modifyLink(ctx),\n update: updateLinkView,\n ...inputOptions.link,\n },\n [InputAction.ModifyInlineMath]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.math_inline)),\n command: modifyInlineMath(ctx),\n update: updateInlineMathView,\n bind: true,\n ...inputOptions.inlineMath,\n },\n [InputAction.ModifyImage]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.image)),\n command: modifyImage(ctx),\n update: updateImageView,\n ...inputOptions.image,\n },\n };\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx): ButtonMap => {\n const { marks } = schema;\n return {\n [ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', ToggleBold, marks.strong, marks.code_inline),\n [ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', ToggleItalic, marks.em, marks.code_inline),\n [ButtonAction.ToggleStrike]: createToggleIcon(\n ctx,\n 'strikeThrough',\n ToggleStrikeThrough,\n marks.strike_through,\n marks.code_inline,\n ),\n [ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', ToggleInlineCode, marks.code_inline, marks.link),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', ToggleLink, marks.link, marks.code_inline),\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const $editor = buttons.parentElement;\n if (!$editor) {\n throw new Error();\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 < target.height) {\n top = start.bottom - parent.top + 14 + $editor.scrollTop;\n }\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool, { css }: Emotion) => {\n const { palette, mixin, size } = themeTool;\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${size.radius};\n z-index: 2;\n\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 3rem;\n line-height: 3rem;\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 * ${size.lineWidth});\n width: ${size.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';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonMap, utils: Utils): Tooltip => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle) || '';\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip');\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView))\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';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view))\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttonMap: ButtonMap, view: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(view))\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(buttonMap, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (buttonMap: ButtonMap, utils: Utils) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils);\n\n const onClick = (e: Event) => {\n const target = Object.values(buttonMap).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 buttons.classList.add('hide');\n };\n\n buttons.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttons.removeEventListener('mousedown', onClick);\n buttons.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttonMap, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttons, editorView);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcInputPos = (view: EditorView, input: HTMLDivElement) => {\n calculateTextPosition(view, input, (start, end, target, parent) => {\n const $editor = input.parentElement;\n if (!$editor) {\n throw new Error();\n }\n\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n const top = start.bottom - parent.top + 14 + $editor.scrollTop;\n\n if (left < 0) left = 0;\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Emotion, ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool, { css }: Emotion) => {\n const { palette, mixin, size } = themeTool;\n\n return css`\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n background: ${palette('surface')};\n border-radius: ${size.radius};\n font-size: 1rem;\n\n height: 3.5rem;\n box-sizing: border-box;\n width: 25.5rem;\n padding: 0 1rem;\n gap: 1rem;\n z-index: 2;\n\n input,\n button {\n all: unset;\n }\n\n input {\n flex-grow: 1;\n caret-color: ${palette('primary')};\n &::placeholder {\n color: ${palette('neutral', 0.6)};\n }\n }\n\n button {\n cursor: pointer;\n height: 2.25rem;\n color: ${palette('primary')};\n font-size: 0.875rem;\n padding: 0 0.5rem;\n font-weight: 500;\n letter-spacing: 1.25px;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.disable {\n color: ${palette('neutral', 0.38)};\n cursor: not-allowed;\n &:hover {\n background: transparent;\n }\n }\n &.hide {\n display: none;\n }\n }\n\n &.hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Utils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createInput = (utils: Utils) => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle);\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip-input');\n\n const input = document.createElement('input');\n div.appendChild(input);\n const button = document.createElement('button');\n div.appendChild(button);\n\n input.addEventListener('input', (e) => {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (!target.value) {\n button.classList.add('disable');\n return;\n }\n\n button.classList.remove('disable');\n });\n\n return {\n div,\n input,\n button,\n } as const;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\n\nimport type { InputMap } from '../item';\n\nexport const filterInput = (\n currentView: EditorView,\n inputMap: InputMap,\n div: HTMLDivElement,\n input: HTMLInputElement,\n button: HTMLButtonElement,\n) => {\n const target = Object.values(inputMap).find((input) => input.display(currentView));\n\n if (!target) {\n div.classList.add('hide');\n return;\n }\n\n div.classList.remove('hide');\n\n if (target.bind) {\n button.classList.add('hide');\n } else {\n button.classList.remove('hide');\n button.textContent = target.buttonText;\n }\n\n input.placeholder = target.placeholder;\n target.update(currentView, div);\n\n return target;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport type { Event2Command, InputMap } from '../item';\nimport { calcInputPos } from './calc-input-pos';\nimport { createInput } from './create-input';\nimport { filterInput } from './filter-input';\n\nexport const createInputManager = (inputMap: InputMap, utils: Utils) => {\n let inputCommand: Event2Command | undefined;\n let binding = false;\n const setCommand = (x?: Event2Command) => (inputCommand = x);\n\n const { div, button, input } = createInput(utils);\n\n const onClick = (e: Event) => {\n if (!inputCommand || button.classList.contains('disable')) return;\n\n e.stopPropagation();\n inputCommand(e);\n div.classList.add('hide');\n };\n const onInput = (e: Event) => {\n if (!binding || !inputCommand) return;\n inputCommand(e);\n };\n\n input.addEventListener('input', onInput);\n button.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n input.removeEventListener('input', onInput);\n div.removeEventListener('mousedown', onClick);\n div.remove();\n },\n hide: () => {\n div.classList.add('hide');\n setCommand();\n },\n update: (editorView: EditorView) => {\n const result = filterInput(editorView, inputMap, div, input, button);\n if (!result) return;\n binding = !!result.bind;\n setCommand(result.command);\n calcInputPos(editorView, div);\n },\n render: (editorView: EditorView) => {\n const wrapper = editorView.dom.parentNode;\n if (!wrapper) throw new Error();\n wrapper.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorState, EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport { createInputManager } from './input-manager';\nimport type { ButtonMap, InputMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, inputMap: InputMap, utils: Utils) => {\n const buttonManager = createButtonManager(buttonMap, utils);\n const inputManager = createInputManager(inputMap, utils);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n inputManager.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 inputManager.update(view);\n };\n\n return {\n update,\n destroy: () => {\n buttonManager.destroy();\n inputManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n inputManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, inputMap, InputOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, InputOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx),\n inputMap(schema, ctx, {\n link: {\n placeholder: 'Input Web Link',\n buttonText: 'APPLY',\n ...(options?.link ?? {}),\n },\n image: {\n placeholder: 'Input Image Link',\n buttonText: 'APPLY',\n ...(options?.image ?? {}),\n },\n inlineMath: {\n placeholder: 'Input Math',\n ...(options?.inlineMath ?? {}),\n },\n }),\n utils,\n );\n const plugin = new Plugin({\n key,\n props: {\n handleKeyDown: () => {\n manager.setHide(true);\n return false;\n },\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.render(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":["injectStyle","create"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc-button-pos.d.ts","sourceRoot":"","sources":["calc-button-pos.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,aAAa,YAAa,WAAW,QAAQ,UAAU,SAmBnE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-tooltip.d.ts","sourceRoot":"","sources":["create-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,aAAK,OAAO,GAAG;IACX,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,aAAa,cAAe,SAAS,SAAS,KAAK,KAAG,OAmBlE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-button.d.ts","sourceRoot":"","sources":["filter-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,YAAY,cAAe,SAAS,QAAQ,UAAU,YAqBlE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKzC,eAAO,MAAM,mBAAmB,cAAe,SAAS,SAAS,KAAK;;;yBAwBzC,UAAU;;CAUtC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-active.d.ts","sourceRoot":"","sources":["no-active.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,QAAQ,cAAe,SAAS,QAAQ,UAAU,YAI9D,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Emotion, ThemeTool } from '@milkdown/core';
2
+ export declare const injectStyle: (themeTool: ThemeTool, { css }: Emotion) => string;
3
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["style.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpD,eAAO,MAAM,WAAW,cAAe,SAAS,WAAW,OAAO,WA6CjE,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { PluginKey } from '@milkdown/prose';
2
+ import { AtomList } from '@milkdown/utils';
3
+ import { InputOptions } from './item';
4
+ export declare const key: PluginKey<any, any>;
5
+ export declare const tooltipPlugin: import("@milkdown/utils/lib/src/types").WithExtend<string, InputOptions, {
6
+ [x: string]: import("prosemirror-model").NodeType<any>;
7
+ } & {
8
+ [x: string]: import("prosemirror-model").MarkType<any>;
9
+ }, {
10
+ schema?: ((ctx: import("@milkdown/core").Ctx) => {
11
+ node?: Record<string, import("@milkdown/core").NodeSchema> | undefined;
12
+ mark?: Record<string, import("@milkdown/core").MarkSchema> | undefined;
13
+ }) | undefined;
14
+ view?: ((ctx: import("@milkdown/core").Ctx) => Partial<{
15
+ [x: string]: import("@milkdown/prose").NodeViewFactory;
16
+ } & {
17
+ [x: string]: import("@milkdown/prose").MarkViewFactory;
18
+ }>) | undefined;
19
+ }>;
20
+ export declare const tooltip: AtomList<import("@milkdown/utils/lib/src/types").Metadata<import("@milkdown/utils/lib/src/types").GetPlugin<string, InputOptions>> & import("@milkdown/core").MilkdownPlugin>;
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAA0B,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAuB,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3D,eAAO,MAAM,GAAG,qBAA2C,CAAC;AAE5D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;EAuDxB,CAAC;AAEH,eAAO,MAAM,OAAO,+KAAqC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calc-input-pos.d.ts","sourceRoot":"","sources":["calc-input-pos.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,YAAY,SAAU,UAAU,SAAS,cAAc,SAenE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-input.d.ts","sourceRoot":"","sources":["create-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAI7C,eAAO,MAAM,WAAW,UAAW,KAAK;;;;CAiCvC,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filter-input.d.ts","sourceRoot":"","sources":["filter-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,WAAW,gBACP,UAAU,YACb,QAAQ,OACb,cAAc,SACZ,gBAAgB,UACf,iBAAiB;;;;;;;;;;;;;;;cAsB5B,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKvD,eAAO,MAAM,kBAAkB,aAAc,QAAQ,SAAS,KAAK;;;yBAgCtC,UAAU;yBAOV,UAAU;CAMtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Emotion, ThemeTool } from '@milkdown/core';
2
+ export declare const injectStyle: (themeTool: ThemeTool, { css }: Emotion) => string;
3
+ //# sourceMappingURL=style.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["style.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEpD,eAAO,MAAM,WAAW,cAAe,SAAS,WAAW,OAAO,WA8DjE,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,UAAU,EAA0B,MAAM,EAAiB,MAAM,iBAAiB,CAAC;AAa5F,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,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,oBAAY,SAAS,GAAG;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,GAAG,CACE;IACI,IAAI,EAAE,IAAI,CAAC;CACd,GACD;IACI,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB,CACN,CAAC;AAEF,oBAAY,YAAY;IACpB,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,UAAU,IAAA;CACb;AAED,oBAAY,WAAW;IACnB,UAAU,IAAA;IACV,WAAW,IAAA;IACX,gBAAgB,IAAA;CACnB;AAED,oBAAY,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACzD,oBAAY,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEtD,oBAAY,YAAY,GAAG;IACvB,IAAI,EAAE;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC;CACL,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,MAAM,OAAO,GAAG,gBAAgB,YAAY,KAAG,QA0B/E,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,OAAO,GAAG,KAAG,SAepD,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElD,eAAO,MAAM,YAAY,cAAe,SAAS,YAAY,QAAQ,SAAS,KAAK;mBAUzD,UAAU;;yBAqBP,UAAU;wBAKX,OAAO;CAIlC,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["element.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,YAAa,WAAW,WAAW,MAAM,KAAG,OACxB,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["input.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAKlD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGjD,eAAO,MAAM,UAAU,QACb,GAAG,KAAG,aAiBX,CAAC;AAEN,eAAO,MAAM,gBAAgB,QACnB,GAAG,KAAG,aAaX,CAAC;AAEN,eAAO,MAAM,WAAW,QACd,GAAG,KAAG,aAiBX,CAAC;AAEN,eAAO,MAAM,cAAc,EAAE,OA4B5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OAkBlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAkB7B,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prosemirror.d.ts","sourceRoot":"","sources":["prosemirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAkB,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAEvG,oBAAY,QAAQ,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,OAAO,gBAAiB,WAAW,QAAQ,QAAQ,KAAG,OAIlE,CAAC;AAEF,eAAO,MAAM,eAAe,gBAAiB,WAAW,KAAG,OAU1D,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAiB,WAAW,KAAG,OAC0B,CAAC;AAEpF,eAAO,MAAM,mBAAmB,gBAAiB,WAAW,QAAQ,QAAQ,KAAG,OACc,CAAC;AAE9F,eAAO,MAAM,aAAa,aAAc,QAAQ,QAAQ,IAAI,YAE3D,CAAC"}
File without changes
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["toggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,GAAG,EAAgB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,gBAAgB,WACpB,GAAG,YACE,IAAI,+BAER,QAAQ,kBACE,QAAQ,KACzB,UAMD,CAAC"}
package/package.json CHANGED
@@ -1,15 +1,9 @@
1
1
  {
2
2
  "name": "@milkdown/plugin-tooltip",
3
- "version": "5.3.0",
4
- "main": "./lib/index.cjs.js",
5
- "module": "./lib/index.es.js",
3
+ "version": "5.3.4",
4
+ "type": "module",
5
+ "main": "./lib/index.es.js",
6
6
  "types": "./lib/index.d.ts",
7
- "exports": {
8
- ".": {
9
- "import": "./lib/index.es.js",
10
- "require": "./lib/index.cjs.js"
11
- }
12
- },
13
7
  "sideEffects": false,
14
8
  "license": "MIT",
15
9
  "files": [
@@ -20,29 +14,20 @@
20
14
  "milkdown",
21
15
  "milkdown plugin"
22
16
  ],
23
- "peerDependencies": {
24
- "@milkdown/core": "*",
25
- "@milkdown/preset-gfm": "*",
26
- "@milkdown/plugin-math": "*"
27
- },
28
17
  "dependencies": {
29
- "@emotion/css": "^11.1.3",
30
- "@milkdown/utils": "5.3.0",
18
+ "@milkdown/core": "5.3.4",
19
+ "@milkdown/prose": "5.3.4",
20
+ "@milkdown/preset-gfm": "5.3.4",
21
+ "@milkdown/design-system": "5.3.4",
22
+ "@milkdown/plugin-math": "5.3.4",
23
+ "@milkdown/utils": "5.3.4",
31
24
  "tslib": "^2.3.1"
32
25
  },
33
- "devDependencies": {
34
- "@milkdown/core": "5.3.0",
35
- "@milkdown/prose": "5.3.0",
36
- "@milkdown/preset-gfm": "5.3.0",
37
- "@milkdown/design-system": "5.3.0",
38
- "@milkdown/plugin-math": "5.3.0"
39
- },
40
26
  "scripts": {
41
- "start": "vite",
42
- "watch": "vite build --watch",
43
- "test": "jest",
27
+ "start": "vite build --watch",
28
+ "test": "vitest",
44
29
  "tsc": "tsc --noEmit",
45
- "build": "vite build && tsc --emitDeclarationOnly"
30
+ "build": "vite build"
46
31
  },
47
32
  "readme": "# @milkdown/plugin-tooltip\n\nTooltip plugin for [milkdown](https://saul-mirone.github.io/milkdown/).\nAdd support for tooltip commands.\n\n# Example Usage\n\n```typescript\nimport { Editor } from '@milkdown/core';\nimport { commonmark } from '@milkdown/preset-commonmark';\nimport { nord } from '@milkdown/theme-nord';\n\nimport { tooltip } from '@milkdown/plugin-tooltip';\n\nEditor.make().use(nord).use(commonmark).use(tooltip).create();\n```\n\n# Placeholder\n\nModify the input widgets of link and image.\n\nExample:\n\n```typescript\nimport { tooltipPlugin, tooltip } from '@milkdown/plugin-tooltip';\n\nEditor.make().use(\n tooltip.configure(tooltipPlugin, {\n link: {\n placeholder: 'Please input link...',\n buttonText: 'Confirm',\n },\n image: {\n placeholder: 'Please input image link...',\n buttonText: 'OK',\n },\n inlineMath: {\n placeholder: 'Please input inline math...',\n },\n }),\n);\n```\n\n# License\n\nMilkdown is open sourced software licensed under [MIT license](https://github.com/Saul-Mirone/milkdown/blob/main/LICENSE).\n"
48
33
  }
@@ -4,14 +4,18 @@ import { calculateTextPosition, EditorView } from '@milkdown/prose';
4
4
  export const calcButtonPos = (buttons: HTMLElement, view: EditorView) => {
5
5
  buttons.classList.remove('hide');
6
6
  calculateTextPosition(view, buttons, (start, end, target, parent) => {
7
+ const $editor = buttons.parentElement;
8
+ if (!$editor) {
9
+ throw new Error();
10
+ }
7
11
  const selectionWidth = end.left - start.left;
8
12
  let left = start.left - parent.left - (target.width - selectionWidth) / 2;
9
- let top = start.top - parent.top - target.height - 14;
13
+ let top = start.top - parent.top - target.height - 14 + $editor.scrollTop;
10
14
 
11
15
  if (left < 0) left = 0;
12
16
 
13
17
  if (start.top < target.height) {
14
- top = start.bottom - parent.top + 14;
18
+ top = start.bottom - parent.top + 14 + $editor.scrollTop;
15
19
  }
16
20
 
17
21
  return [top, left];
@@ -1,8 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { css } from '@emotion/css';
3
- import { ThemeTool } from '@milkdown/core';
2
+ import { Emotion, ThemeTool } from '@milkdown/core';
4
3
 
5
- export const injectStyle = (themeTool: ThemeTool) => {
4
+ export const injectStyle = (themeTool: ThemeTool, { css }: Emotion) => {
6
5
  const { palette, mixin, size } = themeTool;
7
6
  return css`
8
7
  display: inline-flex;
package/src/index.ts CHANGED
@@ -45,6 +45,12 @@ export const tooltipPlugin = create<string, InputOptions>((utils, options) => {
45
45
  manager.update(view);
46
46
  return false;
47
47
  },
48
+ handleDOMEvents: {
49
+ mousedown: () => {
50
+ manager.setHide(false);
51
+ return false;
52
+ },
53
+ },
48
54
  },
49
55
  view: (editorView) => {
50
56
  manager.render(editorView);
@@ -3,9 +3,14 @@ import { calculateTextPosition, EditorView } from '@milkdown/prose';
3
3
 
4
4
  export const calcInputPos = (view: EditorView, input: HTMLDivElement) => {
5
5
  calculateTextPosition(view, input, (start, end, target, parent) => {
6
+ const $editor = input.parentElement;
7
+ if (!$editor) {
8
+ throw new Error();
9
+ }
10
+
6
11
  const selectionWidth = end.left - start.left;
7
12
  let left = start.left - parent.left - (target.width - selectionWidth) / 2;
8
- const top = start.bottom - parent.top + 14;
13
+ const top = start.bottom - parent.top + 14 + $editor.scrollTop;
9
14
 
10
15
  if (left < 0) left = 0;
11
16
 
@@ -1,8 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
- import { css } from '@emotion/css';
3
- import { ThemeTool } from '@milkdown/core';
2
+ import { Emotion, ThemeTool } from '@milkdown/core';
4
3
 
5
- export const injectStyle = (themeTool: ThemeTool) => {
4
+ export const injectStyle = (themeTool: ThemeTool, { css }: Emotion) => {
6
5
  const { palette, mixin, size } = themeTool;
7
6
 
8
7
  return css`
package/src/item.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /* Copyright 2021, Milkdown by Mirone. */
2
2
  import { Ctx } from '@milkdown/core';
3
3
  import { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';
4
- import { EditorView, findSelectedNodeOfType, Schema } from '@milkdown/prose';
4
+ import { EditorView, findSelectedNodeOfType, Schema, TextSelection } from '@milkdown/prose';
5
5
 
6
6
  import {
7
7
  createToggleIcon,
@@ -76,7 +76,10 @@ export const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions):
76
76
  const { marks, nodes } = schema;
77
77
  return {
78
78
  [InputAction.ModifyLink]: {
79
- display: (view) => view.state.selection.empty && hasMark(view.state, marks.link),
79
+ display: (view) =>
80
+ view.state.selection.empty &&
81
+ view.state.selection instanceof TextSelection &&
82
+ hasMark(view.state, marks.link),
80
83
  command: modifyLink(ctx),
81
84
  update: updateLinkView,
82
85
  ...inputOptions.link,
@@ -1 +0,0 @@
1
- {"version":3,"file":"calc-button-pos.d.ts","sourceRoot":"","sources":["../../src/button-manager/calc-button-pos.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,aAAa,YAAa,WAAW,QAAQ,UAAU,SAenE,CAAC"}
@@ -1 +0,0 @@
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,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGzC,aAAK,OAAO,GAAG;IACX,GAAG,EAAE,cAAc,CAAC;IACpB,MAAM,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,aAAa,cAAe,SAAS,SAAS,KAAK,KAAG,OAmBlE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-button.d.ts","sourceRoot":"","sources":["../../src/button-manager/filter-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,YAAY,cAAe,SAAS,QAAQ,UAAU,YAqBlE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKzC,eAAO,MAAM,mBAAmB,cAAe,SAAS,SAAS,KAAK;;;yBAwBzC,UAAU;;CAUtC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"no-active.d.ts","sourceRoot":"","sources":["../../src/button-manager/no-active.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,QAAQ,cAAe,SAAS,QAAQ,UAAU,YAI9D,CAAC"}
@@ -1,3 +0,0 @@
1
- import { ThemeTool } from '@milkdown/core';
2
- export declare const injectStyle: (themeTool: ThemeTool) => string;
3
- //# sourceMappingURL=style.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/button-manager/style.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,eAAO,MAAM,WAAW,cAAe,SAAS,WA6C/C,CAAC"}
package/lib/index.cjs.js DELETED
@@ -1,102 +0,0 @@
1
- "use strict";var $=Object.defineProperty;var b=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var y=(n,t,e)=>t in n?$(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,m=(n,t)=>{for(var e in t||(t={}))P.call(t,e)&&y(n,e,t[e]);if(b)for(var e of b(t))N.call(t,e)&&y(n,e,t[e]);return n};Object.defineProperty(exports,"__esModule",{value:!0});exports[Symbol.toStringTag]="Module";var g=require("@milkdown/core"),u=require("@milkdown/prose"),v=require("@milkdown/utils"),p=require("@milkdown/preset-gfm"),H=require("@milkdown/plugin-math"),T=require("@emotion/css");const k=(n,t)=>n.tagName===t.toUpperCase(),w=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;if(k(e,"input"))return e.focus(),()=>!1;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(p.ModifyLink,o.value):()=>!1},_=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(H.ModifyInlineMath,o.value):()=>!1},x=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;if(k(e,"input"))return e.focus(),()=>!1;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(p.ModifyImage,o.value):()=>!1},O=(n,t)=>{const{marks:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const{selection:s}=n.state;let a;if(n.state.doc.nodesBetween(s.from,s.to,d=>{if(e.link.isInSet(d.marks))return a=d,!1}),!a)return;const r=a.marks.find(d=>d.type===e.link);if(!r)return;const l=r.attrs.href;if(i.value=l,!l){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},j=(n,t)=>{const{nodes:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const s=u.findSelectedNodeOfType(n.state.selection,e.math_inline);if(!s)return;const{node:a}=s,r=a.attrs.value;if(i.value=r,!r){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},q=(n,t)=>{const{nodes:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const s=u.findSelectedNodeOfType(n.state.selection,e.image);if(!s)return;const{node:a}=s,r=a.attrs.src;if(i.value=r,!r){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},L=(n,t)=>{const{from:e,to:i}=n.selection;return n.doc.rangeHasMark(e,e===i?i+1:i,t)},S=n=>{const{selection:t}=n;return t instanceof u.TextSelection?!!n.doc.textBetween(t.from,t.to):!1},z=n=>Boolean(u.findParentNode(t=>!!t.type.spec.code)(n.selection)),B=(n,t)=>!S(n)||z(n)||L(n,t),h=(n,t,e,i,o)=>({$:n.get(g.themeToolCtx).slots.icon(t),command:()=>n.get(g.commandsCtx).call(e),active:s=>L(s.state,i),disable:s=>B(s.state,o),enable:s=>!!i&&!!s.state.schema.marks[i.name]});var M;(function(n){n[n.ToggleBold=0]="ToggleBold",n[n.ToggleItalic=1]="ToggleItalic",n[n.ToggleStrike=2]="ToggleStrike",n[n.ToggleCode=3]="ToggleCode",n[n.ToggleLink=4]="ToggleLink"})(M||(M={}));var E;(function(n){n[n.ModifyLink=0]="ModifyLink",n[n.ModifyImage=1]="ModifyImage",n[n.ModifyInlineMath=2]="ModifyInlineMath"})(E||(E={}));const W=(n,t,e)=>{const{marks:i,nodes:o}=n;return{[0]:m({display:s=>s.state.selection.empty&&L(s.state,i.link),command:w(t),update:O},e.link),[2]:m({display:s=>Boolean(u.findSelectedNodeOfType(s.state.selection,o.math_inline)),command:_(t),update:j,bind:!0},e.inlineMath),[1]:m({display:s=>Boolean(u.findSelectedNodeOfType(s.state.selection,o.image)),command:x(t),update:q},e.image)}},U=(n,t)=>{const{marks:e}=n;return{[0]:h(t,"bold",p.ToggleBold,e.strong,e.code_inline),[1]:h(t,"italic",p.ToggleItalic,e.em,e.code_inline),[2]:h(t,"strikeThrough",p.ToggleStrikeThrough,e.strike_through,e.code_inline),[3]:h(t,"code",p.ToggleInlineCode,e.code_inline,e.link),[4]:h(t,"link",p.ToggleLink,e.link,e.code_inline)}},D=(n,t)=>{n.classList.remove("hide"),u.calculateTextPosition(t,n,(e,i,o,s)=>{const a=i.left-e.left;let r=e.left-s.left-(o.width-a)/2,l=e.top-s.top-o.height-14;return r<0&&(r=0),e.top<o.height&&(l=e.bottom-s.top+14),[l,r]})},K=n=>{var o,s;const{palette:t,mixin:e,size:i}=n;return T.css`
2
- display: inline-flex;
3
- cursor: pointer;
4
- justify-content: space-evenly;
5
- position: absolute;
6
- border-radius: ${i.radius};
7
- z-index: 2;
8
-
9
- ${(o=e.border)==null?void 0:o.call(e)};
10
- ${(s=e.shadow)==null?void 0:s.call(e)};
11
-
12
- overflow: hidden;
13
- background: ${t("surface")};
14
-
15
- .icon {
16
- position: relative;
17
- color: ${t("solid",.87)};
18
-
19
- width: 3rem;
20
- line-height: 3rem;
21
- text-align: center;
22
- transition: all 0.4s ease-in-out;
23
- &:hover {
24
- background-color: ${t("secondary",.12)};
25
- }
26
- &.active {
27
- color: ${t("primary")};
28
- }
29
- &:not(:last-child)::after {
30
- content: '';
31
- position: absolute;
32
- top: 0;
33
- right: calc(-0.5 * ${i.lineWidth});
34
- width: ${i.lineWidth};
35
- bottom: 0;
36
- background: ${t("line")};
37
- }
38
- }
39
- &.hide,
40
- .hide {
41
- display: none;
42
- }
43
- `},G=(n,t)=>{const e=document.createElement("div"),i=t.getStyle(K)||"";return i&&e.classList.add(i),e.classList.add("tooltip"),{dom:e,render:o=>{var s;Object.values(n).filter(a=>a.enable(o)).forEach(({$:a})=>e.appendChild(a)),(s=o.dom.parentNode)==null||s.appendChild(e)}}},Y=(n,t)=>Object.values(n).filter(e=>e.enable(t)).every(({$:e})=>e.classList.contains("hide")),F=(n,t)=>(Object.values(n).filter(e=>e.enable(t)).forEach(e=>{var s;if((s=e.disable)==null?void 0:s.call(e,t)){e.$.classList.add("hide");return}if(e.$.classList.remove("hide"),e.active(t)){e.$.classList.add("active");return}e.$.classList.remove("active")}),Y(n,t)),J=(n,t)=>{const{dom:e,render:i}=G(n,t),o=a=>{const r=Object.values(n).find(({$:l})=>a.target instanceof Element&&l.contains(a.target));!r||(a.stopPropagation(),a.preventDefault(),r.command())},s=()=>{e.classList.add("hide")};return e.addEventListener("mousedown",o),{destroy:()=>{e.removeEventListener("mousedown",o),e.remove()},hide:s,update:a=>{if(F(n,a)){s();return}D(e,a)},render:i}},Q=(n,t)=>{u.calculateTextPosition(n,t,(e,i,o,s)=>{const a=i.left-e.left;let r=e.left-s.left-(o.width-a)/2;const l=e.bottom-s.top+14;return r<0&&(r=0),[l,r]})},R=n=>{var o,s;const{palette:t,mixin:e,size:i}=n;return T.css`
44
- ${(o=e.border)==null?void 0:o.call(e)};
45
- ${(s=e.shadow)==null?void 0:s.call(e)};
46
-
47
- display: inline-flex;
48
- justify-content: space-between;
49
- align-items: center;
50
- position: absolute;
51
- background: ${t("surface")};
52
- border-radius: ${i.radius};
53
- font-size: 1rem;
54
-
55
- height: 3.5rem;
56
- box-sizing: border-box;
57
- width: 25.5rem;
58
- padding: 0 1rem;
59
- gap: 1rem;
60
- z-index: 2;
61
-
62
- input,
63
- button {
64
- all: unset;
65
- }
66
-
67
- input {
68
- flex-grow: 1;
69
- caret-color: ${t("primary")};
70
- &::placeholder {
71
- color: ${t("neutral",.6)};
72
- }
73
- }
74
-
75
- button {
76
- cursor: pointer;
77
- height: 2.25rem;
78
- color: ${t("primary")};
79
- font-size: 0.875rem;
80
- padding: 0 0.5rem;
81
- font-weight: 500;
82
- letter-spacing: 1.25px;
83
- &:hover {
84
- background-color: ${t("secondary",.12)};
85
- }
86
- &.disable {
87
- color: ${t("neutral",.38)};
88
- cursor: not-allowed;
89
- &:hover {
90
- background: transparent;
91
- }
92
- }
93
- &.hide {
94
- display: none;
95
- }
96
- }
97
-
98
- &.hide {
99
- display: none;
100
- }
101
- `},X=n=>{const t=document.createElement("div"),e=n.getStyle(R);e&&t.classList.add(e),t.classList.add("tooltip-input");const i=document.createElement("input");t.appendChild(i);const o=document.createElement("button");return t.appendChild(o),i.addEventListener("input",s=>{const{target:a}=s;if(a instanceof HTMLInputElement){if(!a.value){o.classList.add("disable");return}o.classList.remove("disable")}}),{div:t,input:i,button:o}},Z=(n,t,e,i,o)=>{const s=Object.values(t).find(a=>a.display(n));if(!s){e.classList.add("hide");return}return e.classList.remove("hide"),s.bind?o.classList.add("hide"):(o.classList.remove("hide"),o.textContent=s.buttonText),i.placeholder=s.placeholder,s.update(n,e),s},A=(n,t)=>{let e,i=!1;const o=c=>e=c,{div:s,button:a,input:r}=X(t),l=c=>{!e||a.classList.contains("disable")||(c.stopPropagation(),e(c),s.classList.add("hide"))},d=c=>{!i||!e||e(c)};return r.addEventListener("input",d),a.addEventListener("mousedown",l),{destroy:()=>{r.removeEventListener("input",d),s.removeEventListener("mousedown",l),s.remove()},hide:()=>{s.classList.add("hide"),o()},update:c=>{const f=Z(c,n,s,r,a);!f||(i=!!f.bind,o(f.command),Q(c,s))},render:c=>{const f=c.dom.parentNode;if(!f)throw new Error;f.appendChild(s)}}},V=(n,t,e)=>{const i=J(n,e),o=A(t,e);let s=!1;const a=()=>{i.hide(),o.hide()},r=(l,d)=>{const{state:c}=l;if(!l.editable||s){a();return}(d==null?void 0:d.doc.eq(c.doc))&&d.selection.eq(c.selection)||(i.update(l),o.update(l))};return{update:r,destroy:()=>{i.destroy(),o.destroy()},render:l=>{i.render(l),o.render(l),r(l)},setHide:l=>{s=l}}},I=new u.PluginKey("MILKDOWN_PLUGIN_TOOLTIP"),C=v.createPlugin((n,t)=>({id:"tooltip",prosePlugins:(e,i)=>{var r,l,d;const o=i.get(g.schemaCtx),s=V(U(o,i),W(o,i,{link:m({placeholder:"Input Web Link",buttonText:"APPLY"},(r=t==null?void 0:t.link)!=null?r:{}),image:m({placeholder:"Input Image Link",buttonText:"APPLY"},(l=t==null?void 0:t.image)!=null?l:{}),inlineMath:m({placeholder:"Input Math"},(d=t==null?void 0:t.inlineMath)!=null?d:{})}),n);return[new u.Plugin({key:I,props:{handleKeyDown:()=>(s.setHide(!0),!1),handleClick:c=>(s.setHide(!1),s.update(c),!1)},view:c=>(s.render(c),{update:s.update,destroy:s.destroy})})]}})),ee=v.AtomList.create([C()]);exports.key=I;exports.tooltip=ee;exports.tooltipPlugin=C;
102
- //# sourceMappingURL=index.cjs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../src/utility/element.ts","../src/utility/input.ts","../src/utility/prosemirror.ts","../src/utility/toggle.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/input-manager/calc-input-pos.ts","../src/input-manager/style.ts","../src/input-manager/create-input.ts","../src/input-manager/filter-input.ts","../src/input-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nexport const elementIsTag = (element: HTMLElement, tagName: string): boolean =>\n element.tagName === tagName.toUpperCase();\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx } from '@milkdown/core';\nimport { ModifyInlineMath } from '@milkdown/plugin-math';\nimport { ModifyImage, ModifyLink } from '@milkdown/preset-gfm';\nimport { findSelectedNodeOfType, Node as ProseNode } from '@milkdown/prose';\n\nimport { Event2Command, Updater } from '../item';\nimport { elementIsTag } from './element';\n\nexport const modifyLink =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyLink, inputEl.value);\n };\n\nexport const modifyInlineMath =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyInlineMath, inputEl.value);\n };\n\nexport const modifyImage =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyImage, inputEl.value);\n };\n\nexport const updateLinkView: Updater = (view, $) => {\n const { marks } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const { selection } = view.state;\n let node: ProseNode | undefined;\n view.state.doc.nodesBetween(selection.from, selection.to, (n) => {\n if (marks.link.isInSet(n.marks)) {\n node = n;\n return false;\n }\n return;\n });\n if (!node) return;\n\n const mark = node.marks.find((m) => m.type === marks.link);\n if (!mark) return;\n\n const value = mark.attrs.href;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateInlineMathView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.math_inline);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.value;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateImageView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.image);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.src;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState, findParentNode, MarkType, Node, NodeType, TextSelection } from '@milkdown/prose';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type: MarkType): boolean => {\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 { CmdKey, commandsCtx, Ctx, themeToolCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose';\n\nimport type { ButtonItem } from '../item';\nimport { hasMark, isTextAndNotHasMark } from './prosemirror';\n\nexport const createToggleIcon = <T>(\n ctx: Ctx,\n iconName: Icon,\n commandKey: CmdKey<T>,\n mark: MarkType,\n disableForMark: MarkType,\n): ButtonItem => ({\n $: ctx.get(themeToolCtx).slots.icon(iconName),\n command: () => ctx.get(commandsCtx).call(commandKey),\n active: (view) => hasMark(view.state, mark),\n disable: (view) => isTextAndNotHasMark(view.state, disableForMark),\n enable: (view) => !!mark && !!view.state.schema.marks[mark.name],\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';\nimport { EditorView, findSelectedNodeOfType, Schema } from '@milkdown/prose';\n\nimport {\n createToggleIcon,\n hasMark,\n modifyImage,\n modifyInlineMath,\n modifyLink,\n updateImageView,\n updateInlineMathView,\n updateLinkView,\n} 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 ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport type InputItem = {\n command: Event2Command;\n display: Pred;\n update: Updater;\n placeholder: string;\n} & (\n | {\n bind: true;\n }\n | {\n bind?: false;\n buttonText: string;\n }\n);\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport enum InputAction {\n ModifyLink,\n ModifyImage,\n ModifyInlineMath,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\nexport type InputMap = Record<InputAction, InputItem>;\n\nexport type InputOptions = {\n link: {\n placeholder: string;\n buttonText: string;\n };\n image: {\n placeholder: string;\n buttonText: string;\n };\n inlineMath: {\n placeholder: string;\n };\n};\n\nexport const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions): InputMap => {\n const { marks, nodes } = schema;\n return {\n [InputAction.ModifyLink]: {\n display: (view) => view.state.selection.empty && hasMark(view.state, marks.link),\n command: modifyLink(ctx),\n update: updateLinkView,\n ...inputOptions.link,\n },\n [InputAction.ModifyInlineMath]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.math_inline)),\n command: modifyInlineMath(ctx),\n update: updateInlineMathView,\n bind: true,\n ...inputOptions.inlineMath,\n },\n [InputAction.ModifyImage]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.image)),\n command: modifyImage(ctx),\n update: updateImageView,\n ...inputOptions.image,\n },\n };\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx): ButtonMap => {\n const { marks } = schema;\n return {\n [ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', ToggleBold, marks.strong, marks.code_inline),\n [ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', ToggleItalic, marks.em, marks.code_inline),\n [ButtonAction.ToggleStrike]: createToggleIcon(\n ctx,\n 'strikeThrough',\n ToggleStrikeThrough,\n marks.strike_through,\n marks.code_inline,\n ),\n [ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', ToggleInlineCode, marks.code_inline, marks.link),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', ToggleLink, marks.link, marks.code_inline),\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\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;\n\n if (left < 0) left = 0;\n\n if (start.top < target.height) {\n top = start.bottom - parent.top + 14;\n }\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${size.radius};\n z-index: 2;\n\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 3rem;\n line-height: 3rem;\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 * ${size.lineWidth});\n width: ${size.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';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonMap, utils: Utils): Tooltip => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle) || '';\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip');\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView))\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';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view))\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttonMap: ButtonMap, view: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(view))\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(buttonMap, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (buttonMap: ButtonMap, utils: Utils) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils);\n\n const onClick = (e: Event) => {\n const target = Object.values(buttonMap).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 buttons.classList.add('hide');\n };\n\n buttons.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttons.removeEventListener('mousedown', onClick);\n buttons.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttonMap, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttons, editorView);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcInputPos = (view: EditorView, input: HTMLDivElement) => {\n calculateTextPosition(view, input, (start, end, target, parent) => {\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n const top = start.bottom - parent.top + 14;\n\n if (left < 0) left = 0;\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n\n return css`\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n background: ${palette('surface')};\n border-radius: ${size.radius};\n font-size: 1rem;\n\n height: 3.5rem;\n box-sizing: border-box;\n width: 25.5rem;\n padding: 0 1rem;\n gap: 1rem;\n z-index: 2;\n\n input,\n button {\n all: unset;\n }\n\n input {\n flex-grow: 1;\n caret-color: ${palette('primary')};\n &::placeholder {\n color: ${palette('neutral', 0.6)};\n }\n }\n\n button {\n cursor: pointer;\n height: 2.25rem;\n color: ${palette('primary')};\n font-size: 0.875rem;\n padding: 0 0.5rem;\n font-weight: 500;\n letter-spacing: 1.25px;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.disable {\n color: ${palette('neutral', 0.38)};\n cursor: not-allowed;\n &:hover {\n background: transparent;\n }\n }\n &.hide {\n display: none;\n }\n }\n\n &.hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Utils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createInput = (utils: Utils) => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle);\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip-input');\n\n const input = document.createElement('input');\n div.appendChild(input);\n const button = document.createElement('button');\n div.appendChild(button);\n\n input.addEventListener('input', (e) => {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (!target.value) {\n button.classList.add('disable');\n return;\n }\n\n button.classList.remove('disable');\n });\n\n return {\n div,\n input,\n button,\n } as const;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\n\nimport type { InputMap } from '../item';\n\nexport const filterInput = (\n currentView: EditorView,\n inputMap: InputMap,\n div: HTMLDivElement,\n input: HTMLInputElement,\n button: HTMLButtonElement,\n) => {\n const target = Object.values(inputMap).find((input) => input.display(currentView));\n\n if (!target) {\n div.classList.add('hide');\n return;\n }\n\n div.classList.remove('hide');\n\n if (target.bind) {\n button.classList.add('hide');\n } else {\n button.classList.remove('hide');\n button.textContent = target.buttonText;\n }\n\n input.placeholder = target.placeholder;\n target.update(currentView, div);\n\n return target;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport type { Event2Command, InputMap } from '../item';\nimport { calcInputPos } from './calc-input-pos';\nimport { createInput } from './create-input';\nimport { filterInput } from './filter-input';\n\nexport const createInputManager = (inputMap: InputMap, utils: Utils) => {\n let inputCommand: Event2Command | undefined;\n let binding = false;\n const setCommand = (x?: Event2Command) => (inputCommand = x);\n\n const { div, button, input } = createInput(utils);\n\n const onClick = (e: Event) => {\n if (!inputCommand || button.classList.contains('disable')) return;\n\n e.stopPropagation();\n inputCommand(e);\n div.classList.add('hide');\n };\n const onInput = (e: Event) => {\n if (!binding || !inputCommand) return;\n inputCommand(e);\n };\n\n input.addEventListener('input', onInput);\n button.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n input.removeEventListener('input', onInput);\n div.removeEventListener('mousedown', onClick);\n div.remove();\n },\n hide: () => {\n div.classList.add('hide');\n setCommand();\n },\n update: (editorView: EditorView) => {\n const result = filterInput(editorView, inputMap, div, input, button);\n if (!result) return;\n binding = !!result.bind;\n setCommand(result.command);\n calcInputPos(editorView, div);\n },\n render: (editorView: EditorView) => {\n const wrapper = editorView.dom.parentNode;\n if (!wrapper) throw new Error();\n wrapper.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorState, EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport { createInputManager } from './input-manager';\nimport type { ButtonMap, InputMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, inputMap: InputMap, utils: Utils) => {\n const buttonManager = createButtonManager(buttonMap, utils);\n const inputManager = createInputManager(inputMap, utils);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n inputManager.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 inputManager.update(view);\n };\n\n return {\n update,\n destroy: () => {\n buttonManager.destroy();\n inputManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n inputManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, inputMap, InputOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, InputOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx),\n inputMap(schema, ctx, {\n link: {\n placeholder: 'Input Web Link',\n buttonText: 'APPLY',\n ...(options?.link ?? {}),\n },\n image: {\n placeholder: 'Input Image Link',\n buttonText: 'APPLY',\n ...(options?.image ?? {}),\n },\n inlineMath: {\n placeholder: 'Input Math',\n ...(options?.inlineMath ?? {}),\n },\n }),\n utils,\n );\n const plugin = new Plugin({\n key,\n props: {\n handleKeyDown: () => {\n manager.setHide(true);\n return false;\n },\n handleClick: (view) => {\n manager.setHide(false);\n manager.update(view);\n return false;\n },\n },\n view: (editorView) => {\n manager.render(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":["commandsCtx","ModifyLink","ModifyInlineMath","ModifyImage","findSelectedNodeOfType","TextSelection","findParentNode","themeToolCtx","ToggleBold","ToggleItalic","ToggleStrikeThrough","ToggleInlineCode","ToggleLink","injectStyle","css","PluginKey","create","schemaCtx","Plugin","AtomList"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAA0B,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAuB,YAAY,EAAE,MAAM,QAAQ,CAAC;AAG3D,eAAO,MAAM,GAAG,qBAA2C,CAAC;AAE5D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;EAiDxB,CAAC;AAEH,eAAO,MAAM,OAAO,uKAAqC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"calc-input-pos.d.ts","sourceRoot":"","sources":["../../src/input-manager/calc-input-pos.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEpE,eAAO,MAAM,YAAY,SAAU,UAAU,SAAS,cAAc,SAUnE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-input.d.ts","sourceRoot":"","sources":["../../src/input-manager/create-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAI7C,eAAO,MAAM,WAAW,UAAW,KAAK;;;;CAiCvC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"filter-input.d.ts","sourceRoot":"","sources":["../../src/input-manager/filter-input.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,eAAO,MAAM,WAAW,gBACP,UAAU,YACb,QAAQ,OACb,cAAc,SACZ,gBAAgB,UACf,iBAAiB;;;;;;;;;;;;;;;cAsB5B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/input-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExC,OAAO,KAAK,EAAiB,QAAQ,EAAE,MAAM,SAAS,CAAC;AAKvD,eAAO,MAAM,kBAAkB,aAAc,QAAQ,SAAS,KAAK;;;yBAgCtC,UAAU;yBAOV,UAAU;CAMtC,CAAC"}
@@ -1,3 +0,0 @@
1
- import { ThemeTool } from '@milkdown/core';
2
- export declare const injectStyle: (themeTool: ThemeTool) => string;
3
- //# sourceMappingURL=style.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style.d.ts","sourceRoot":"","sources":["../../src/input-manager/style.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,eAAO,MAAM,WAAW,cAAe,SAAS,WA8D/C,CAAC"}
package/lib/item.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,UAAU,EAA0B,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAa7E,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,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,oBAAY,SAAS,GAAG;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB,GAAG,CACE;IACI,IAAI,EAAE,IAAI,CAAC;CACd,GACD;IACI,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACtB,CACN,CAAC;AAEF,oBAAY,YAAY;IACpB,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,UAAU,IAAA;CACb;AAED,oBAAY,WAAW;IACnB,UAAU,IAAA;IACV,WAAW,IAAA;IACX,gBAAgB,IAAA;CACnB;AAED,oBAAY,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AACzD,oBAAY,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;AAEtD,oBAAY,YAAY,GAAG;IACvB,IAAI,EAAE;QACF,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,UAAU,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC;CACL,CAAC;AAEF,eAAO,MAAM,QAAQ,WAAY,MAAM,OAAO,GAAG,gBAAgB,YAAY,KAAG,QAuB/E,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,OAAO,GAAG,KAAG,SAepD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["../src/selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElD,eAAO,MAAM,YAAY,cAAe,SAAS,YAAY,QAAQ,SAAS,KAAK;mBAUzD,UAAU;;yBAqBP,UAAU;wBAKX,OAAO;CAIlC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"element.d.ts","sourceRoot":"","sources":["../../src/utility/element.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,YAAY,YAAa,WAAW,WAAW,MAAM,KAAG,OACxB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utility/index.ts"],"names":[],"mappings":"AACA,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/utility/input.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAKlD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGjD,eAAO,MAAM,UAAU,QACb,GAAG,KAAG,aAiBX,CAAC;AAEN,eAAO,MAAM,gBAAgB,QACnB,GAAG,KAAG,aAaX,CAAC;AAEN,eAAO,MAAM,WAAW,QACd,GAAG,KAAG,aAiBX,CAAC;AAEN,eAAO,MAAM,cAAc,EAAE,OA4B5B,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OAkBlC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAkB7B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"prosemirror.d.ts","sourceRoot":"","sources":["../../src/utility/prosemirror.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAkB,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAEvG,oBAAY,QAAQ,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,OAAO,gBAAiB,WAAW,QAAQ,QAAQ,KAAG,OAIlE,CAAC;AAEF,eAAO,MAAM,eAAe,gBAAiB,WAAW,KAAG,OAU1D,CAAC;AAEF,eAAO,MAAM,aAAa,gBAAiB,WAAW,KAAG,OAC0B,CAAC;AAEpF,eAAO,MAAM,mBAAmB,gBAAiB,WAAW,QAAQ,QAAQ,KAAG,OACc,CAAC;AAE9F,eAAO,MAAM,aAAa,aAAc,QAAQ,QAAQ,IAAI,YAE3D,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/utility/toggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAe,GAAG,EAAgB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,gBAAgB,WACpB,GAAG,YACE,IAAI,+BAER,QAAQ,kBACE,QAAQ,KACzB,UAMD,CAAC"}