@milkdown/plugin-tooltip 5.3.3 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.es.js +11 -13
- package/lib/index.es.js.map +1 -1
- package/lib/src/item.d.ts.map +1 -1
- package/lib/src/utility/input.d.ts.map +1 -1
- package/lib/src/utility/toggle.d.ts +2 -2
- package/lib/src/utility/toggle.d.ts.map +1 -1
- package/package.json +11 -7
- package/src/item.ts +5 -6
- package/src/utility/input.ts +4 -6
- package/src/utility/toggle.ts +4 -4
package/lib/index.es.js
CHANGED
|
@@ -17,8 +17,6 @@ var __spreadValues = (a, b) => {
|
|
|
17
17
|
import { commandsCtx, themeToolCtx, schemaCtx } from "@milkdown/core";
|
|
18
18
|
import { findSelectedNodeOfType, findParentNode, TextSelection, calculateTextPosition, PluginKey, Plugin } from "@milkdown/prose";
|
|
19
19
|
import { createPlugin as createPlugin$1, AtomList } from "@milkdown/utils";
|
|
20
|
-
import { ModifyLink, ModifyImage, ToggleBold, ToggleItalic, ToggleStrikeThrough, ToggleInlineCode, ToggleLink } from "@milkdown/preset-gfm";
|
|
21
|
-
import { ModifyInlineMath } from "@milkdown/plugin-math";
|
|
22
20
|
const elementIsTag = (element, tagName) => element.tagName === tagName.toUpperCase();
|
|
23
21
|
const modifyLink = (ctx) => (e) => {
|
|
24
22
|
const { target } = e;
|
|
@@ -35,7 +33,7 @@ const modifyLink = (ctx) => (e) => {
|
|
|
35
33
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === "INPUT");
|
|
36
34
|
if (!(inputEl instanceof HTMLInputElement))
|
|
37
35
|
return () => false;
|
|
38
|
-
return ctx.get(commandsCtx).
|
|
36
|
+
return ctx.get(commandsCtx).callByName("ModifyLink", inputEl.value);
|
|
39
37
|
};
|
|
40
38
|
const modifyInlineMath = (ctx) => (e) => {
|
|
41
39
|
const { target } = e;
|
|
@@ -48,7 +46,7 @@ const modifyInlineMath = (ctx) => (e) => {
|
|
|
48
46
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === "INPUT");
|
|
49
47
|
if (!(inputEl instanceof HTMLInputElement))
|
|
50
48
|
return () => false;
|
|
51
|
-
return ctx.get(commandsCtx).
|
|
49
|
+
return ctx.get(commandsCtx).callByName("ModifyInlineMath", inputEl.value);
|
|
52
50
|
};
|
|
53
51
|
const modifyImage = (ctx) => (e) => {
|
|
54
52
|
const { target } = e;
|
|
@@ -65,7 +63,7 @@ const modifyImage = (ctx) => (e) => {
|
|
|
65
63
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === "INPUT");
|
|
66
64
|
if (!(inputEl instanceof HTMLInputElement))
|
|
67
65
|
return () => false;
|
|
68
|
-
return ctx.get(commandsCtx).
|
|
66
|
+
return ctx.get(commandsCtx).callByName("ModifyImage", inputEl.value);
|
|
69
67
|
};
|
|
70
68
|
const updateLinkView = (view, $) => {
|
|
71
69
|
const { marks } = view.state.schema;
|
|
@@ -125,7 +123,7 @@ const updateImageView = (view, $) => {
|
|
|
125
123
|
return;
|
|
126
124
|
const { node } = result;
|
|
127
125
|
const value = node.attrs.src;
|
|
128
|
-
firstChild.value = value;
|
|
126
|
+
firstChild.value = value.length > 50 ? "Url is too long to display." : value;
|
|
129
127
|
if (!value) {
|
|
130
128
|
lastElementChild.classList.add("disable");
|
|
131
129
|
return;
|
|
@@ -150,9 +148,9 @@ const isTextSelection = (editorState) => {
|
|
|
150
148
|
};
|
|
151
149
|
const isInCodeFence = (editorState) => Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));
|
|
152
150
|
const isTextAndNotHasMark = (editorState, mark) => !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);
|
|
153
|
-
const createToggleIcon = (ctx, iconName,
|
|
151
|
+
const createToggleIcon = (ctx, iconName, key2, mark, disableForMark) => ({
|
|
154
152
|
$: ctx.get(themeToolCtx).slots.icon(iconName),
|
|
155
|
-
command: () => ctx.get(commandsCtx).
|
|
153
|
+
command: () => ctx.get(commandsCtx).callByName(key2),
|
|
156
154
|
active: (view) => hasMark(view.state, mark),
|
|
157
155
|
disable: (view) => isTextAndNotHasMark(view.state, disableForMark),
|
|
158
156
|
enable: (view) => !!mark && !!view.state.schema.marks[mark.name]
|
|
@@ -195,11 +193,11 @@ const inputMap = (schema, ctx, inputOptions) => {
|
|
|
195
193
|
const buttonMap = (schema, ctx) => {
|
|
196
194
|
const { marks } = schema;
|
|
197
195
|
return {
|
|
198
|
-
[0]: createToggleIcon(ctx, "bold", ToggleBold, marks.strong, marks.code_inline),
|
|
199
|
-
[1]: createToggleIcon(ctx, "italic", ToggleItalic, marks.em, marks.code_inline),
|
|
200
|
-
[2]: createToggleIcon(ctx, "strikeThrough", ToggleStrikeThrough, marks.strike_through, marks.code_inline),
|
|
201
|
-
[3]: createToggleIcon(ctx, "code", ToggleInlineCode, marks.code_inline, marks.link),
|
|
202
|
-
[4]: createToggleIcon(ctx, "link", ToggleLink, marks.link, marks.code_inline)
|
|
196
|
+
[0]: createToggleIcon(ctx, "bold", "ToggleBold", marks.strong, marks.code_inline),
|
|
197
|
+
[1]: createToggleIcon(ctx, "italic", "ToggleItalic", marks.em, marks.code_inline),
|
|
198
|
+
[2]: createToggleIcon(ctx, "strikeThrough", "ToggleStrikeThrough", marks.strike_through, marks.code_inline),
|
|
199
|
+
[3]: createToggleIcon(ctx, "code", "ToggleInlineCode", marks.code_inline, marks.link),
|
|
200
|
+
[4]: createToggleIcon(ctx, "link", "ToggleLink", marks.link, marks.code_inline)
|
|
203
201
|
};
|
|
204
202
|
};
|
|
205
203
|
const calcButtonPos = (buttons, view) => {
|
package/lib/index.es.js.map
CHANGED
|
@@ -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, 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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"}
|
|
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 { 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).callByName('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).callByName('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).callByName('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.length > 50 ? 'Url is too long to display.' : 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 { 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 = (\n ctx: Ctx,\n iconName: Icon,\n key: string,\n mark: MarkType,\n disableForMark: MarkType,\n): ButtonItem => ({\n $: ctx.get(themeToolCtx).slots.icon(iconName),\n command: () => ctx.get(commandsCtx).callByName(key),\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 { 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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"}
|
package/lib/src/item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["item.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["input.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["input.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAGlD,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,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Ctx } from '@milkdown/core';
|
|
2
2
|
import type { Icon } from '@milkdown/design-system';
|
|
3
3
|
import type { MarkType } from '@milkdown/prose';
|
|
4
4
|
import type { ButtonItem } from '../item';
|
|
5
|
-
export declare const createToggleIcon:
|
|
5
|
+
export declare const createToggleIcon: (ctx: Ctx, iconName: Icon, key: string, mark: MarkType, disableForMark: MarkType) => ButtonItem;
|
|
6
6
|
//# sourceMappingURL=toggle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["toggle.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["toggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAAgB,MAAM,gBAAgB,CAAC;AAChE,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,QACpB,GAAG,YACE,IAAI,OACT,MAAM,QACL,QAAQ,kBACE,QAAQ,KACzB,UAMD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/plugin-tooltip",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.es.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -14,13 +14,17 @@
|
|
|
14
14
|
"milkdown",
|
|
15
15
|
"milkdown plugin"
|
|
16
16
|
],
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@milkdown/core": "5.4.1",
|
|
19
|
+
"@milkdown/prose": "5.4.1",
|
|
20
|
+
"@milkdown/design-system": "5.4.1"
|
|
21
|
+
},
|
|
22
|
+
"peerDependencies": {
|
|
23
|
+
"@milkdown/core": "^5.4.0",
|
|
24
|
+
"@milkdown/prose": "^5.4.0"
|
|
25
|
+
},
|
|
17
26
|
"dependencies": {
|
|
18
|
-
"@milkdown/
|
|
19
|
-
"@milkdown/prose": "5.3.3",
|
|
20
|
-
"@milkdown/preset-gfm": "5.3.3",
|
|
21
|
-
"@milkdown/design-system": "5.3.3",
|
|
22
|
-
"@milkdown/plugin-math": "5.3.3",
|
|
23
|
-
"@milkdown/utils": "5.3.3",
|
|
27
|
+
"@milkdown/utils": "5.4.1",
|
|
24
28
|
"tslib": "^2.3.1"
|
|
25
29
|
},
|
|
26
30
|
"scripts": {
|
package/src/item.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { Ctx } from '@milkdown/core';
|
|
3
|
-
import { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';
|
|
4
3
|
import { EditorView, findSelectedNodeOfType, Schema, TextSelection } from '@milkdown/prose';
|
|
5
4
|
|
|
6
5
|
import {
|
|
@@ -103,16 +102,16 @@ export const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions):
|
|
|
103
102
|
export const buttonMap = (schema: Schema, ctx: Ctx): ButtonMap => {
|
|
104
103
|
const { marks } = schema;
|
|
105
104
|
return {
|
|
106
|
-
[ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', ToggleBold, marks.strong, marks.code_inline),
|
|
107
|
-
[ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', ToggleItalic, marks.em, marks.code_inline),
|
|
105
|
+
[ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', 'ToggleBold', marks.strong, marks.code_inline),
|
|
106
|
+
[ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', 'ToggleItalic', marks.em, marks.code_inline),
|
|
108
107
|
[ButtonAction.ToggleStrike]: createToggleIcon(
|
|
109
108
|
ctx,
|
|
110
109
|
'strikeThrough',
|
|
111
|
-
ToggleStrikeThrough,
|
|
110
|
+
'ToggleStrikeThrough',
|
|
112
111
|
marks.strike_through,
|
|
113
112
|
marks.code_inline,
|
|
114
113
|
),
|
|
115
|
-
[ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', ToggleInlineCode, marks.code_inline, marks.link),
|
|
116
|
-
[ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', ToggleLink, marks.link, marks.code_inline),
|
|
114
|
+
[ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', 'ToggleInlineCode', marks.code_inline, marks.link),
|
|
115
|
+
[ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', 'ToggleLink', marks.link, marks.code_inline),
|
|
117
116
|
};
|
|
118
117
|
};
|
package/src/utility/input.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { commandsCtx, Ctx } from '@milkdown/core';
|
|
3
|
-
import { ModifyInlineMath } from '@milkdown/plugin-math';
|
|
4
|
-
import { ModifyImage, ModifyLink } from '@milkdown/preset-gfm';
|
|
5
3
|
import { findSelectedNodeOfType, Node as ProseNode } from '@milkdown/prose';
|
|
6
4
|
|
|
7
5
|
import { Event2Command, Updater } from '../item';
|
|
@@ -24,7 +22,7 @@ export const modifyLink =
|
|
|
24
22
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');
|
|
25
23
|
if (!(inputEl instanceof HTMLInputElement)) return () => false;
|
|
26
24
|
|
|
27
|
-
return ctx.get(commandsCtx).
|
|
25
|
+
return ctx.get(commandsCtx).callByName('ModifyLink', inputEl.value);
|
|
28
26
|
};
|
|
29
27
|
|
|
30
28
|
export const modifyInlineMath =
|
|
@@ -40,7 +38,7 @@ export const modifyInlineMath =
|
|
|
40
38
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');
|
|
41
39
|
if (!(inputEl instanceof HTMLInputElement)) return () => false;
|
|
42
40
|
|
|
43
|
-
return ctx.get(commandsCtx).
|
|
41
|
+
return ctx.get(commandsCtx).callByName('ModifyInlineMath', inputEl.value);
|
|
44
42
|
};
|
|
45
43
|
|
|
46
44
|
export const modifyImage =
|
|
@@ -60,7 +58,7 @@ export const modifyImage =
|
|
|
60
58
|
const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');
|
|
61
59
|
if (!(inputEl instanceof HTMLInputElement)) return () => false;
|
|
62
60
|
|
|
63
|
-
return ctx.get(commandsCtx).
|
|
61
|
+
return ctx.get(commandsCtx).callByName('ModifyImage', inputEl.value);
|
|
64
62
|
};
|
|
65
63
|
|
|
66
64
|
export const updateLinkView: Updater = (view, $) => {
|
|
@@ -123,7 +121,7 @@ export const updateImageView: Updater = (view, $) => {
|
|
|
123
121
|
const { node } = result;
|
|
124
122
|
|
|
125
123
|
const value = node.attrs.src;
|
|
126
|
-
firstChild.value = value;
|
|
124
|
+
firstChild.value = value.length > 50 ? 'Url is too long to display.' : value;
|
|
127
125
|
if (!value) {
|
|
128
126
|
lastElementChild.classList.add('disable');
|
|
129
127
|
return;
|
package/src/utility/toggle.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
|
-
import {
|
|
2
|
+
import { commandsCtx, Ctx, themeToolCtx } from '@milkdown/core';
|
|
3
3
|
import type { Icon } from '@milkdown/design-system';
|
|
4
4
|
import type { MarkType } from '@milkdown/prose';
|
|
5
5
|
|
|
6
6
|
import type { ButtonItem } from '../item';
|
|
7
7
|
import { hasMark, isTextAndNotHasMark } from './prosemirror';
|
|
8
8
|
|
|
9
|
-
export const createToggleIcon =
|
|
9
|
+
export const createToggleIcon = (
|
|
10
10
|
ctx: Ctx,
|
|
11
11
|
iconName: Icon,
|
|
12
|
-
|
|
12
|
+
key: string,
|
|
13
13
|
mark: MarkType,
|
|
14
14
|
disableForMark: MarkType,
|
|
15
15
|
): ButtonItem => ({
|
|
16
16
|
$: ctx.get(themeToolCtx).slots.icon(iconName),
|
|
17
|
-
command: () => ctx.get(commandsCtx).
|
|
17
|
+
command: () => ctx.get(commandsCtx).callByName(key),
|
|
18
18
|
active: (view) => hasMark(view.state, mark),
|
|
19
19
|
disable: (view) => isTextAndNotHasMark(view.state, disableForMark),
|
|
20
20
|
enable: (view) => !!mark && !!view.state.schema.marks[mark.name],
|