@milkdown/plugin-tooltip 6.0.2 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -28
- package/lib/button-manager/calc-button-pos.d.ts +1 -1
- package/lib/button-manager/calc-button-pos.d.ts.map +1 -1
- package/lib/button-manager/create-tooltip.d.ts +1 -1
- package/lib/button-manager/create-tooltip.d.ts.map +1 -1
- package/lib/button-manager/filter-button.d.ts +1 -1
- package/lib/button-manager/filter-button.d.ts.map +1 -1
- package/lib/button-manager/index.d.ts +1 -1
- package/lib/button-manager/index.d.ts.map +1 -1
- package/lib/button-manager/no-active.d.ts +1 -1
- package/lib/button-manager/no-active.d.ts.map +1 -1
- package/lib/index.d.ts +3 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.es.js +2 -1
- package/lib/index.es.js.map +1 -1
- package/lib/item.d.ts +2 -1
- package/lib/item.d.ts.map +1 -1
- package/lib/selection-marks-tooltip.d.ts +2 -1
- package/lib/selection-marks-tooltip.d.ts.map +1 -1
- package/lib/utility/prosemirror.d.ts +2 -1
- package/lib/utility/prosemirror.d.ts.map +1 -1
- package/lib/utility/toggle.d.ts +1 -1
- package/lib/utility/toggle.d.ts.map +1 -1
- package/package.json +8 -9
- package/src/button-manager/calc-button-pos.ts +2 -1
- package/src/button-manager/create-tooltip.ts +1 -1
- package/src/button-manager/filter-button.ts +1 -1
- package/src/button-manager/index.ts +1 -1
- package/src/button-manager/no-active.ts +1 -1
- package/src/index.ts +1 -1
- package/src/item.ts +2 -1
- package/src/selection-marks-tooltip.ts +2 -1
- package/src/utility/prosemirror.ts +3 -1
- package/src/utility/toggle.ts +1 -1
package/README.md
CHANGED
|
@@ -1,35 +1,10 @@
|
|
|
1
1
|
# @milkdown/plugin-tooltip
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
Add support for tooltip commands.
|
|
3
|
+
The tooltip plugin of [milkdown](https://milkdown.dev/).
|
|
5
4
|
|
|
6
|
-
#
|
|
5
|
+
# Official Documentation
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
import { Editor } from '@milkdown/core';
|
|
10
|
-
import { commonmark } from '@milkdown/preset-commonmark';
|
|
11
|
-
import { nord } from '@milkdown/theme-nord';
|
|
12
|
-
|
|
13
|
-
import { tooltip } from '@milkdown/plugin-tooltip';
|
|
14
|
-
|
|
15
|
-
Editor.make().use(nord).use(commonmark).use(tooltip).create();
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
# Position
|
|
19
|
-
|
|
20
|
-
Modify the tooltip widget's position, to show on the top or the bottom
|
|
21
|
-
|
|
22
|
-
Example:
|
|
23
|
-
|
|
24
|
-
```typescript
|
|
25
|
-
import { tooltipPlugin, tooltip } from '@milkdown/plugin-tooltip';
|
|
26
|
-
|
|
27
|
-
Editor.make().use(
|
|
28
|
-
tooltip.configure(tooltipPlugin, {
|
|
29
|
-
bottom: true,
|
|
30
|
-
}),
|
|
31
|
-
);
|
|
32
|
-
```
|
|
7
|
+
Documentation can be found on the [Milkdown website](https://milkdown.dev/plugin-tooltip).
|
|
33
8
|
|
|
34
9
|
# License
|
|
35
10
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calc-button-pos.d.ts","sourceRoot":"","sources":["../../src/button-manager/calc-button-pos.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"calc-button-pos.d.ts","sourceRoot":"","sources":["../../src/button-manager/calc-button-pos.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,eAAO,MAAM,aAAa,YAAa,WAAW,QAAQ,UAAU,YAAY,OAAO,SAkBtF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-tooltip.d.ts","sourceRoot":"","sources":["../../src/button-manager/create-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"create-tooltip.d.ts","sourceRoot":"","sources":["../../src/button-manager/create-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,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,aAAa,MAAM,KAAG,OAqBrF,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EditorView } from '@milkdown/prose';
|
|
1
|
+
import { EditorView } from '@milkdown/prose/view';
|
|
2
2
|
import { ButtonMap } from '../item';
|
|
3
3
|
export declare const filterButton: (buttonMap: ButtonMap, view: EditorView) => boolean;
|
|
4
4
|
//# sourceMappingURL=filter-button.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-button.d.ts","sourceRoot":"","sources":["../../src/button-manager/filter-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"filter-button.d.ts","sourceRoot":"","sources":["../../src/button-manager/filter-button.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,YAAY,cAAe,SAAS,QAAQ,UAAU,YAqBlE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EditorView } from '@milkdown/prose';
|
|
1
|
+
import type { EditorView } from '@milkdown/prose/view';
|
|
2
2
|
import type { Utils } from '@milkdown/utils';
|
|
3
3
|
import type { ButtonMap } from '../item';
|
|
4
4
|
export declare const createButtonManager: (buttonMap: ButtonMap, utils: Utils, bottom: boolean, containerClassName: string) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/button-manager/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAKzC,eAAO,MAAM,mBAAmB,cACjB,SAAS,SACb,KAAK,UACJ,OAAO,sBACK,MAAM;;;yBAyBD,UAAU;;CAUtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"no-active.d.ts","sourceRoot":"","sources":["../../src/button-manager/no-active.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"no-active.d.ts","sourceRoot":"","sources":["../../src/button-manager/no-active.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEpC,eAAO,MAAM,QAAQ,cAAe,SAAS,QAAQ,UAAU,YAI9D,CAAC"}
|
package/lib/index.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { PluginKey } from '@milkdown/prose';
|
|
1
|
+
import { PluginKey } from '@milkdown/prose/state';
|
|
2
2
|
import { AtomList } from '@milkdown/utils';
|
|
3
3
|
import { TooltipOptions } from './item';
|
|
4
4
|
export declare const key: PluginKey<any, any>;
|
|
5
5
|
export declare const tooltipPlugin: import("@milkdown/utils/lib/types").WithExtend<string, TooltipOptions, {
|
|
6
|
-
[x: string]: import("
|
|
6
|
+
[x: string]: import("@milkdown/prose/model").NodeType<any>;
|
|
7
7
|
} & {
|
|
8
|
-
[x: string]: import("
|
|
8
|
+
[x: string]: import("@milkdown/prose/model").MarkType<any>;
|
|
9
9
|
}, {
|
|
10
10
|
schema?: ((ctx: import("@milkdown/core").Ctx) => {
|
|
11
11
|
node?: Record<string, import("@milkdown/core").NodeSchema> | undefined;
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAU,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAA0B,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAa,cAAc,EAAE,MAAM,QAAQ,CAAC;AAGnD,eAAO,MAAM,GAAG,qBAA2C,CAAC;AAE5D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;EAyCxB,CAAC;AAEH,eAAO,MAAM,OAAO,yKAAqC,CAAC"}
|
package/lib/index.es.js
CHANGED
|
@@ -15,8 +15,9 @@ var __spreadValues = (a, b) => {
|
|
|
15
15
|
return a;
|
|
16
16
|
};
|
|
17
17
|
import { themeManagerCtx, ThemeIcon, commandsCtx, ThemeSize, ThemeBorder, ThemeShadow, ThemeColor, schemaCtx } from "@milkdown/core";
|
|
18
|
-
import {
|
|
18
|
+
import { TextSelection, PluginKey, Plugin } from "@milkdown/prose/state";
|
|
19
19
|
import { createPlugin as createPlugin$1, AtomList } from "@milkdown/utils";
|
|
20
|
+
import { findParentNode, calculateTextPosition } from "@milkdown/prose";
|
|
20
21
|
const hasMark = (editorState, type) => {
|
|
21
22
|
if (!type) {
|
|
22
23
|
return false;
|
package/lib/index.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../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/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* 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 if (!type) {\n return false;\n }\n const { from, to } = editorState.selection;\n\n return editorState.doc.rangeHasMark(from, from === to ? to + 1 : to, type);\n};\n\nexport const isTextSelection = (editorState: EditorState): boolean => {\n const { selection } = editorState;\n if (selection instanceof TextSelection) {\n const text = editorState.doc.textBetween(selection.from, selection.to);\n\n if (!text) return false;\n\n return true;\n }\n return false;\n};\n\nexport const isInCodeFence = (editorState: EditorState): boolean =>\n Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));\n\nexport const isTextAndNotHasMark = (editorState: EditorState, mark?: MarkType): boolean =>\n !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);\n\nexport const equalNodeType = (nodeType: NodeType, node: Node) => {\n return (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) || node.type === nodeType;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } 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 | undefined,\n disableForMark: MarkType | undefined,\n): ButtonItem => ({\n $: ctx.get(themeManagerCtx).get(ThemeIcon, iconName)?.dom as HTMLElement,\n command: () => ctx.get(commandsCtx).call(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 { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport { EditorView, Schema } from '@milkdown/prose';\n\nimport { createToggleIcon } from './utility';\n\nexport type Pred = (view: EditorView) => boolean;\nexport type Updater = (view: EditorView, $: HTMLElement) => void;\nexport type Event2Command = (e: Event) => void;\n\nexport type OnClick = (ctx: Ctx) => void;\n\nexport type Item = {\n icon: Icon | ((ctx: Ctx) => HTMLElement);\n\n onClick: string | ((ctx: Ctx) => () => void);\n\n isHidden: (ctx: Ctx) => Pred;\n\n isActive: (ctx: Ctx) => Pred;\n};\n\nexport type ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nconst Buttonize = ({ icon, onClick, isHidden, isActive }: Item, ctx: Ctx): ButtonItem => ({\n $: typeof icon === 'function' ? icon(ctx) : (ctx.get(themeManagerCtx).get(ThemeIcon, icon)?.dom as HTMLElement),\n command: typeof onClick === 'string' ? () => ctx.get(commandsCtx).call(onClick) : onClick(ctx),\n disable: isHidden(ctx),\n active: isActive(ctx),\n enable: (view: EditorView) => !isHidden(ctx)(view),\n});\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\n\nexport type TooltipOptions = {\n bottom: boolean;\n items: Array<Item> | undefined;\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx, items: Array<Item> | undefined): ButtonMap => {\n const { marks } = schema;\n const ButtonItems = Array<ButtonItem>();\n if (typeof items !== 'undefined') {\n (items as Array<Item>).forEach((item) => {\n ButtonItems.push(Buttonize(item, ctx));\n });\n }\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(\n ctx,\n 'code',\n 'ToggleInlineCode',\n marks['code_inline'],\n marks['link'],\n ),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', 'ToggleLink', marks['link'], marks['code_inline']),\n ...ButtonItems,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView, isBottom: boolean) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const $editor = buttons.parentElement;\n if (!$editor) {\n throw 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 - parent.top < target.height || (isBottom && parent.bottom - start.bottom > target.height)) {\n top = start.bottom - parent.top + 14 + $editor.scrollTop;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeBorder, ThemeColor, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n z-index: 2;\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.active {\n color: ${palette('primary')};\n }\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 0;\n right: calc(-0.5 * ${lineWidth});\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\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, className: string): Tooltip => {\n const div = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion)) || '';\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className));\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView) && item.$ != null)\n .forEach(({ $ }) => div.appendChild($));\n\n editorView.dom.parentNode?.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view) && item.$ != null)\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\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) && item.$ != null)\n .forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n\n item.$.classList.remove('hide');\n\n const active = item.active(view);\n if (active) {\n item.$.classList.add('active');\n return;\n }\n item.$.classList.remove('active');\n });\n\n return noActive(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 = (\n buttonMap: ButtonMap,\n utils: Utils,\n bottom: boolean,\n containerClassName: string,\n) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils, containerClassName);\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, bottom);\n },\n render,\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 type { ButtonMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, utils: Utils, bottom: boolean, containerClassName: string) => {\n let buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n };\n\n const update = (view: EditorView, prevState?: EditorState) => {\n const { state } = view;\n\n if (!view.editable || shouldHide) {\n hide();\n return;\n }\n\n const isEqualSelection = prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection);\n if (isEqualSelection) return;\n\n buttonManager.update(view);\n };\n\n return {\n recreate: (editorView: EditorView) => {\n buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n buttonManager.render(editorView);\n update(editorView);\n },\n update,\n destroy: () => {\n buttonManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, TooltipOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, TooltipOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx, options?.items),\n utils,\n options?.bottom ?? false,\n 'tooltip',\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.recreate(editorView);\n return {\n update: manager.update,\n destroy: manager.destroy,\n };\n },\n });\n return [plugin];\n },\n };\n});\n\nexport const tooltip = AtomList.create([tooltipPlugin()]);\n"],"names":["create"],"mappings":";;;;;;;;;;;;;;;;;;;MAQa,UAAU,CAAC,aAA0B,SAA6B;MACvE,CAAC,MAAM;WACA;AAAA;QAEL,EAAE,MAAM,OAAO,YAAY;SAE1B,YAAY,IAAI,aAAa,MAAM,SAAS,KAAK,KAAK,IAAI,IAAI;AAAA;MAG5D,kBAAkB,CAAC,gBAAsC;QAC5D,EAAE,cAAc;MAClB,qBAAqB,eAAe;UAC9B,OAAO,YAAY,IAAI,YAAY,UAAU,MAAM,UAAU;QAE/D,CAAC;aAAa;WAEX;AAAA;SAEJ;AAAA;MAGE,gBAAgB,CAAC,gBAC1B,QAAQ,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,KAAK,KAAK,MAAM,YAAY;MAE3D,sBAAsB,CAAC,aAA0B,SAC1D,CAAC,gBAAgB,gBAAgB,cAAc,gBAAgB,QAAQ,aAAa;MCzB3E,mBAAmB,CAC5B,KACA,UACA,MACA,MACA;;;IAEA,GAAG,UAAI,IAAI,iBAAiB,IAAI,WAAW,cAAxC,mBAAmD;AAAA,IACtD,SAAS,MAAM,IAAI,IAAI,aAAa,KAAK;AAAA,IACzC,QAAQ,CAAC,SAAS,QAAQ,KAAK,OAAO;AAAA,IACtC,SAAS,CAAC,SAAS,oBAAoB,KAAK,OAAO;AAAA,IACnD,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,MAAM,OAAO,MAAM,KAAK;AAAA;AAAA;ACY/D,MAAM,YAAY,CAAC,EAAE,MAAM,SAAS,UAAU,YAAkB;;;IAC5D,GAAG,OAAO,SAAS,aAAa,KAAK,OAAQ,UAAI,IAAI,iBAAiB,IAAI,WAAW,UAAxC,mBAA+C;AAAA,IAC5F,SAAS,OAAO,YAAY,WAAW,MAAM,IAAI,IAAI,aAAa,KAAK,WAAW,QAAQ;AAAA,IAC1F,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,IACjB,QAAQ,CAAC,SAAqB,CAAC,SAAS,KAAK;AAAA;AAAA;MAkBpC,YAAY,CAAC,QAAgB,KAAU,UAA8C;QACxF,EAAE,UAAU;QACZ,cAAc;MAChB,OAAO,UAAU,aAAa;AAC7B,UAAsB,QAAQ,CAAC,SAAS;kBACzB,KAAK,UAAU,MAAM;AAAA;AAAA;SAGlC;AAAA,KACF,IAA0B,iBAAiB,KAAK,QAAQ,cAAc,MAAM,WAAW,MAAM;AAAA,KAC7F,IAA4B,iBAAiB,KAAK,UAAU,gBAAgB,MAAM,OAAO,MAAM;AAAA,KAC/F,IAA4B,iBACzB,KACA,iBACA,uBACA,MAAM,mBACN,MAAM;AAAA,KAET,IAA0B,iBACvB,KACA,QACA,oBACA,MAAM,gBACN,MAAM;AAAA,KAET,IAA0B,iBAAiB,KAAK,QAAQ,cAAc,MAAM,SAAS,MAAM;AAAA,KACzF;AAAA;MC7EE,gBAAgB,CAAC,SAAsB,MAAkB,aAAsB;UAChF,UAAU,OAAO;wBACH,MAAM,SAAS,CAAC,OAAO,KAAK,QAAQ,WAAW;UAC3D,UAAU,QAAQ;QACpB,CAAC,SAAS;YACJ,IAAI;AAAA;UAER,iBAAiB,IAAI,OAAO,MAAM;QACpC,OAAO,MAAM,OAAO,OAAO,eAAe,QAAQ,kBAAkB;QACpE,MAAM,MAAM,MAAM,OAAO,MAAM,OAAO,SAAS,KAAK,QAAQ;QAE5D,OAAO;aAAU;QAEjB,MAAM,MAAM,OAAO,MAAM,OAAO,UAAW,YAAY,OAAO,SAAS,MAAM,SAAS,OAAO,QAAS;YAChG,MAAM,SAAS,OAAO,MAAM,KAAK,QAAQ;AAAA;WAE5C,CAAC,KAAK;AAAA;AAAA;MChBR,cAAc,CAAC,cAA4B,EAAE,UAAmB;QACnE,UAAU,CAAC,OAAc,UAAU,MAAM,aAAa,IAAI,YAAY,CAAC,OAAO;QAC9E,YAAY,aAAa,IAAI,WAAW;SACvC;AAAA;AAAA;AAAA;AAAA;AAAA,yBAKc,aAAa,IAAI,WAAW;AAAA;AAAA;AAAA,UAG3C,aAAa,IAAI,aAAa;AAAA,UAC9B,aAAa,IAAI,aAAa;AAAA;AAAA;AAAA,sBAGlB,QAAQ;AAAA;AAAA;AAAA;AAAA,qBAIT,QAAQ,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oCAOF,QAAQ,aAAa;AAAA;AAAA;AAAA,yBAGhC,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qCAMI;AAAA,yBACZ;AAAA;AAAA,8BAEK,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;MC7BzB,gBAAgB,CAAC,YAAsB,OAAc,cAA+B;QACvF,MAAM,SAAS,cAAc;QAC7B,aAAa,QAAQ,MAAM;UACvB,QAAQ,MAAM,SAAS,CAAC,YAAY,YAAY,MAAM,cAAc,aAAa;QACnF,OAAO;UACH,UAAU,IAAI;AAAA;AAAA;MAItB,UAAU,IAAI,MAAM,aAAa,IAAI;SAElC;AAAA,IACH,KAAK;AAAA,IACL,QAAQ,CAAC,eAA2B;;aACzB,OAAO,YACT,OAAO,CAAC,SAAS,KAAK,OAAO,eAAe,KAAK,KAAK,MACtD,QAAQ,CAAC,EAAE,QAAQ,IAAI,YAAY;uBAE7B,IAAI,kCAAY,YAAY;AAAA;AAAA;AAAA;MCzBtC,WAAW,CAAC,YAAsB,SAAqB;SACzD,OAAO,OAAO,YAChB,OAAO,CAAC,SAAS,KAAK,OAAO,SAAS,KAAK,KAAK,MAChD,MAAM,CAAC,EAAE,QAAQ,EAAE,UAAU,SAAS;AAAA;MCFlC,eAAe,CAAC,YAAsB,SAAqB;SAC7D,OAAO,YACT,OAAO,CAAC,SAAS,KAAK,OAAO,SAAS,KAAK,KAAK,MAChD,QAAQ,CAAC,SAAS;;UACT,UAAU,WAAK,YAAL,8BAAe;QAC3B,SAAS;WACJ,EAAE,UAAU,IAAI;;;SAIpB,EAAE,UAAU,OAAO;UAElB,SAAS,KAAK,OAAO;QACvB,QAAQ;WACH,EAAE,UAAU,IAAI;;;SAGpB,EAAE,UAAU,OAAO;AAAA;SAGzB,SAAS,YAAW;AAAA;MCjBlB,sBAAsB,CAC/B,YACA,OACA,QACA,uBACC;QACK,EAAE,KAAK,SAAS,WAAW,cAAc,YAAW,OAAO;QAE3D,UAAU,CAAC,MAAa;UACpB,SAAS,OAAO,OAAO,YAAW,KAAK,CAAC,EAAE,QAAQ,EAAE,kBAAkB,WAAW,EAAE,SAAS,EAAE;QAChG,CAAC;;MAEH;MACA;WACK;AAAA;QAGL,OAAO,MAAM;YACP,UAAU,IAAI;AAAA;UAGlB,iBAAiB,aAAa;SAE/B;AAAA,IACH,SAAS,MAAM;cACH,oBAAoB,aAAa;cACjC;AAAA;AAAA,IAEZ;AAAA,IACA,QAAQ,CAAC,eAA2B;YAC1B,YAAW,aAAa,YAAW;UACrC,WAAU;;;;oBAIA,SAAS,YAAY;AAAA;AAAA,IAEvC;AAAA;AAAA;MCvCK,eAAe,CAAC,YAAsB,OAAc,QAAiB,uBAA+B;MACzG,gBAAgB,oBAAoB,YAAW,OAAO,QAAQ;MAC9D,aAAa;QAEX,OAAO,MAAM;kBACD;AAAA;QAGZ,SAAS,CAAC,MAAkB,cAA4B;UACpD,EAAE,UAAU;QAEd,CAAC,KAAK,YAAY,YAAY;;;;UAK5B,mBAAmB,wCAAW,IAAI,GAAG,MAAM,SAAQ,UAAU,UAAU,GAAG,MAAM;QAClF;;kBAEU,OAAO;AAAA;SAGlB;AAAA,IACH,UAAU,CAAC,eAA2B;sBAClB,oBAAoB,YAAW,OAAO,QAAQ;oBAChD,OAAO;aACd;AAAA;AAAA,IAEX;AAAA,IACA,SAAS,MAAM;oBACG;AAAA;AAAA,IAElB,QAAQ,CAAC,eAA2B;oBAClB,OAAO;aACd;AAAA;AAAA,IAEX,SAAS,CAAC,aAAsB;mBACf;AAAA;AAAA;AAAA;MCpCZ,MAAM,IAAI,UAAU;MAEpB,gBAAgBA,eAA+B,CAAC,OAAO,YAAY;SACrE;AAAA,IACH,IAAI;AAAA,IACJ,cAAc,CAAC,GAAG,QAAQ;;YAChB,SAAS,IAAI,IAAI;YACjB,UAAU,aACZ,UAAU,QAAQ,KAAK,mCAAS,QAChC,OACA,yCAAS,WAAT,YAAmB,OACnB;YAEE,SAAS,IAAI,OAAO;AAAA,QACtB;AAAA,QACA,OAAO;AAAA,UACH,eAAe,MAAM;oBACT,QAAQ;mBACT;AAAA;AAAA,UAEX,aAAa,CAAC,SAAS;oBACX,QAAQ;oBACR,OAAO;mBACR;AAAA;AAAA,UAEX,iBAAiB;AAAA,YACb,WAAW,MAAM;sBACL,QAAQ;qBACT;AAAA;AAAA;AAAA;AAAA,QAInB,MAAM,CAAC,eAAe;kBACV,SAAS;iBACV;AAAA,YACH,QAAQ,QAAQ;AAAA,YAChB,SAAS,QAAQ;AAAA;AAAA;AAAA;aAItB,CAAC;AAAA;AAAA;AAAA;MAKP,UAAU,SAAS,OAAO,CAAC;;"}
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../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/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nimport { findParentNode } from '@milkdown/prose';\nimport { MarkType, Node, NodeType } from '@milkdown/prose/model';\nimport { EditorState, TextSelection } from '@milkdown/prose/state';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type?: MarkType): boolean => {\n if (!type) {\n return false;\n }\n const { from, to } = editorState.selection;\n\n return editorState.doc.rangeHasMark(from, from === to ? to + 1 : to, type);\n};\n\nexport const isTextSelection = (editorState: EditorState): boolean => {\n const { selection } = editorState;\n if (selection instanceof TextSelection) {\n const text = editorState.doc.textBetween(selection.from, selection.to);\n\n if (!text) return false;\n\n return true;\n }\n return false;\n};\n\nexport const isInCodeFence = (editorState: EditorState): boolean =>\n Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));\n\nexport const isTextAndNotHasMark = (editorState: EditorState, mark?: MarkType): boolean =>\n !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);\n\nexport const equalNodeType = (nodeType: NodeType, node: Node) => {\n return (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) || node.type === nodeType;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose/model';\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 | undefined,\n disableForMark: MarkType | undefined,\n): ButtonItem => ({\n $: ctx.get(themeManagerCtx).get(ThemeIcon, iconName)?.dom as HTMLElement,\n command: () => ctx.get(commandsCtx).call(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 { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport { Schema } from '@milkdown/prose/model';\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { createToggleIcon } from './utility';\n\nexport type Pred = (view: EditorView) => boolean;\nexport type Updater = (view: EditorView, $: HTMLElement) => void;\nexport type Event2Command = (e: Event) => void;\n\nexport type OnClick = (ctx: Ctx) => void;\n\nexport type Item = {\n icon: Icon | ((ctx: Ctx) => HTMLElement);\n\n onClick: string | ((ctx: Ctx) => () => void);\n\n isHidden: (ctx: Ctx) => Pred;\n\n isActive: (ctx: Ctx) => Pred;\n};\n\nexport type ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nconst Buttonize = ({ icon, onClick, isHidden, isActive }: Item, ctx: Ctx): ButtonItem => ({\n $: typeof icon === 'function' ? icon(ctx) : (ctx.get(themeManagerCtx).get(ThemeIcon, icon)?.dom as HTMLElement),\n command: typeof onClick === 'string' ? () => ctx.get(commandsCtx).call(onClick) : onClick(ctx),\n disable: isHidden(ctx),\n active: isActive(ctx),\n enable: (view: EditorView) => !isHidden(ctx)(view),\n});\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\n\nexport type TooltipOptions = {\n bottom: boolean;\n items: Array<Item> | undefined;\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx, items: Array<Item> | undefined): ButtonMap => {\n const { marks } = schema;\n const ButtonItems = Array<ButtonItem>();\n if (typeof items !== 'undefined') {\n (items as Array<Item>).forEach((item) => {\n ButtonItems.push(Buttonize(item, ctx));\n });\n }\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(\n ctx,\n 'code',\n 'ToggleInlineCode',\n marks['code_inline'],\n marks['link'],\n ),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', 'ToggleLink', marks['link'], marks['code_inline']),\n ...ButtonItems,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition } from '@milkdown/prose';\nimport { EditorView } from '@milkdown/prose/view';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView, isBottom: boolean) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const $editor = buttons.parentElement;\n if (!$editor) {\n throw 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 - parent.top < target.height || (isBottom && parent.bottom - start.bottom > target.height)) {\n top = start.bottom - parent.top + 14 + $editor.scrollTop;\n }\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Color, Emotion, ThemeBorder, ThemeColor, ThemeManager, ThemeShadow, ThemeSize } from '@milkdown/core';\n\nexport const injectStyle = (themeManager: ThemeManager, { css }: Emotion) => {\n const palette = (color: Color, opacity = 1) => themeManager.get(ThemeColor, [color, opacity]);\n const lineWidth = themeManager.get(ThemeSize, 'lineWidth');\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${themeManager.get(ThemeSize, 'radius')};\n z-index: 2;\n\n ${themeManager.get(ThemeBorder, undefined)}\n ${themeManager.get(ThemeShadow, undefined)}\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 2em;\n line-height: 2em;\n text-align: center;\n transition: all 0.4s ease-in-out;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.active {\n color: ${palette('primary')};\n }\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 0;\n right: calc(-0.5 * ${lineWidth});\n width: ${lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { 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, className: string): Tooltip => {\n const div = document.createElement('div');\n utils.themeManager.onFlush(() => {\n const style = utils.getStyle((emotion) => injectStyle(utils.themeManager, emotion)) || '';\n if (style) {\n div.classList.add(style);\n }\n });\n\n div.classList.add(utils.getClassName({}, className));\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView) && item.$ != null)\n .forEach(({ $ }) => div.appendChild($));\n\n editorView.dom.parentNode?.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view) && item.$ != null)\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose/view';\n\nimport { 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) && item.$ != null)\n .forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n\n item.$.classList.remove('hide');\n\n const active = item.active(view);\n if (active) {\n item.$.classList.add('active');\n return;\n }\n item.$.classList.remove('active');\n });\n\n return noActive(buttonMap, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose/view';\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 = (\n buttonMap: ButtonMap,\n utils: Utils,\n bottom: boolean,\n containerClassName: string,\n) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils, containerClassName);\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, bottom);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState } from '@milkdown/prose/state';\nimport type { EditorView } from '@milkdown/prose/view';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport type { ButtonMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, utils: Utils, bottom: boolean, containerClassName: string) => {\n let buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n };\n\n const update = (view: EditorView, prevState?: EditorState) => {\n const { state } = view;\n\n if (!view.editable || shouldHide) {\n hide();\n return;\n }\n\n const isEqualSelection = prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection);\n if (isEqualSelection) return;\n\n buttonManager.update(view);\n };\n\n return {\n recreate: (editorView: EditorView) => {\n buttonManager = createButtonManager(buttonMap, utils, bottom, containerClassName);\n buttonManager.render(editorView);\n update(editorView);\n },\n update,\n destroy: () => {\n buttonManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose/state';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, TooltipOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, TooltipOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx, options?.items),\n utils,\n options?.bottom ?? false,\n 'tooltip',\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.recreate(editorView);\n return {\n update: manager.update,\n destroy: manager.destroy,\n };\n },\n });\n return [plugin];\n },\n };\n});\n\nexport const tooltip = AtomList.create([tooltipPlugin()]);\n"],"names":["create"],"mappings":"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"}
|
package/lib/item.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Ctx } from '@milkdown/core';
|
|
2
2
|
import type { Icon } from '@milkdown/design-system';
|
|
3
|
-
import {
|
|
3
|
+
import { Schema } from '@milkdown/prose/model';
|
|
4
|
+
import { EditorView } from '@milkdown/prose/view';
|
|
4
5
|
export declare type Pred = (view: EditorView) => boolean;
|
|
5
6
|
export declare type Updater = (view: EditorView, $: HTMLElement) => void;
|
|
6
7
|
export declare type Event2Command = (e: Event) => void;
|
package/lib/item.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../src/item.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAIlD,oBAAY,IAAI,GAAG,CAAC,IAAI,EAAE,UAAU,KAAK,OAAO,CAAC;AACjD,oBAAY,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC;AACjE,oBAAY,aAAa,GAAG,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;AAE/C,oBAAY,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;AAEzC,oBAAY,IAAI,GAAG;IACf,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;IAEzC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC;IAE7C,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAE7B,QAAQ,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC,CAAC;AAEF,oBAAY,UAAU,GAAG;IACrB,CAAC,EAAE,WAAW,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,IAAI,CAAC;CAChB,CAAC;AAUF,oBAAY,YAAY;IACpB,UAAU,IAAA;IACV,YAAY,IAAA;IACZ,YAAY,IAAA;IACZ,UAAU,IAAA;IACV,UAAU,IAAA;CACb;AAED,oBAAY,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEzD,oBAAY,cAAc,GAAG;IACzB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,SAAS,WAAY,MAAM,OAAO,GAAG,SAAS,MAAM,IAAI,CAAC,GAAG,SAAS,KAAG,SA4BpF,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EditorState } from '@milkdown/prose/state';
|
|
2
|
+
import type { EditorView } from '@milkdown/prose/view';
|
|
2
3
|
import { Utils } from '@milkdown/utils';
|
|
3
4
|
import type { ButtonMap } from './item';
|
|
4
5
|
export declare const createPlugin: (buttonMap: ButtonMap, utils: Utils, bottom: boolean, containerClassName: string) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["../src/selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"selection-marks-tooltip.d.ts","sourceRoot":"","sources":["../src/selection-marks-tooltip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAGxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,eAAO,MAAM,YAAY,cAAe,SAAS,SAAS,KAAK,UAAU,OAAO,sBAAsB,MAAM;2BAuB7E,UAAU;mBAff,UAAU;;yBAwBP,UAAU;wBAIX,OAAO;CAIlC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prosemirror.d.ts","sourceRoot":"","sources":["../../src/utility/prosemirror.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"prosemirror.d.ts","sourceRoot":"","sources":["../../src/utility/prosemirror.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAiB,MAAM,uBAAuB,CAAC;AAEnE,oBAAY,QAAQ,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,OAAO,gBAAiB,WAAW,uCAAoB,OAOnE,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,uCAAoB,OACa,CAAC;AAE9F,eAAO,MAAM,aAAa,aAAc,QAAQ,QAAQ,IAAI,YAE3D,CAAC"}
|
package/lib/utility/toggle.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Ctx } from '@milkdown/core';
|
|
2
2
|
import type { Icon } from '@milkdown/design-system';
|
|
3
|
-
import type { MarkType } from '@milkdown/prose';
|
|
3
|
+
import type { MarkType } from '@milkdown/prose/model';
|
|
4
4
|
import type { ButtonItem } from '../item';
|
|
5
5
|
export declare const createToggleIcon: (ctx: Ctx, iconName: Icon, key: string, mark: MarkType | undefined, disableForMark: MarkType | undefined) => ButtonItem;
|
|
6
6
|
//# sourceMappingURL=toggle.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/utility/toggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/utility/toggle.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,GAAG,EAA8B,MAAM,gBAAgB,CAAC;AAC9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAG1C,eAAO,MAAM,gBAAgB,QACpB,GAAG,YACE,IAAI,OACT,MAAM,QACL,QAAQ,GAAG,SAAS,kBACV,QAAQ,GAAG,SAAS,KACrC,UAMD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milkdown/plugin-tooltip",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./lib/index.es.js",
|
|
6
6
|
"types": "./lib/index.d.ts",
|
|
@@ -15,16 +15,16 @@
|
|
|
15
15
|
"milkdown plugin"
|
|
16
16
|
],
|
|
17
17
|
"devDependencies": {
|
|
18
|
-
"@milkdown/core": "6.0
|
|
19
|
-
"@milkdown/prose": "6.0
|
|
20
|
-
"@milkdown/design-system": "6.0
|
|
18
|
+
"@milkdown/core": "6.1.0",
|
|
19
|
+
"@milkdown/prose": "6.1.0",
|
|
20
|
+
"@milkdown/design-system": "6.1.0"
|
|
21
21
|
},
|
|
22
22
|
"peerDependencies": {
|
|
23
23
|
"@milkdown/core": "^6.0.1",
|
|
24
24
|
"@milkdown/prose": "^6.0.1"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@milkdown/utils": "6.0
|
|
27
|
+
"@milkdown/utils": "6.1.0",
|
|
28
28
|
"tslib": "^2.3.1"
|
|
29
29
|
},
|
|
30
30
|
"nx": {
|
|
@@ -54,8 +54,7 @@
|
|
|
54
54
|
"scripts": {
|
|
55
55
|
"start": "concurrently -n es,dts \"vite build --watch\" \"tsc --emitDeclarationOnly --watch\"",
|
|
56
56
|
"test": "vitest",
|
|
57
|
-
"tsc": "tsc --noEmit",
|
|
58
|
-
"build": "
|
|
59
|
-
}
|
|
60
|
-
"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# Position\n\nModify the tooltip widget's position, to show on the top or the bottom\n\nExample:\n\n```typescript\nimport { tooltipPlugin, tooltip } from '@milkdown/plugin-tooltip';\n\nEditor.make().use(\n tooltip.configure(tooltipPlugin, {\n bottom: true,\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"
|
|
57
|
+
"tsc": "tsc --noEmit && echo",
|
|
58
|
+
"build": "tsc --emitDeclarationOnly && vite build"
|
|
59
|
+
}
|
|
61
60
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
|
-
import { calculateTextPosition
|
|
2
|
+
import { calculateTextPosition } from '@milkdown/prose';
|
|
3
|
+
import { EditorView } from '@milkdown/prose/view';
|
|
3
4
|
|
|
4
5
|
export const calcButtonPos = (buttons: HTMLElement, view: EditorView, isBottom: boolean) => {
|
|
5
6
|
buttons.classList.remove('hide');
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { schemaCtx } from '@milkdown/core';
|
|
3
|
-
import { Plugin, PluginKey } from '@milkdown/prose';
|
|
3
|
+
import { Plugin, PluginKey } from '@milkdown/prose/state';
|
|
4
4
|
import { AtomList, createPlugin as create } from '@milkdown/utils';
|
|
5
5
|
|
|
6
6
|
import { buttonMap, TooltipOptions } from './item';
|
package/src/item.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';
|
|
3
3
|
import type { Icon } from '@milkdown/design-system';
|
|
4
|
-
import {
|
|
4
|
+
import { Schema } from '@milkdown/prose/model';
|
|
5
|
+
import { EditorView } from '@milkdown/prose/view';
|
|
5
6
|
|
|
6
7
|
import { createToggleIcon } from './utility';
|
|
7
8
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
|
-
import
|
|
2
|
+
import { EditorState } from '@milkdown/prose/state';
|
|
3
|
+
import type { EditorView } from '@milkdown/prose/view';
|
|
3
4
|
import { Utils } from '@milkdown/utils';
|
|
4
5
|
|
|
5
6
|
import { createButtonManager } from './button-manager';
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
|
-
import {
|
|
2
|
+
import { findParentNode } from '@milkdown/prose';
|
|
3
|
+
import { MarkType, Node, NodeType } from '@milkdown/prose/model';
|
|
4
|
+
import { EditorState, TextSelection } from '@milkdown/prose/state';
|
|
3
5
|
|
|
4
6
|
export type Position = {
|
|
5
7
|
start: number;
|
package/src/utility/toggle.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/* Copyright 2021, Milkdown by Mirone. */
|
|
2
2
|
import { commandsCtx, Ctx, ThemeIcon, themeManagerCtx } from '@milkdown/core';
|
|
3
3
|
import type { Icon } from '@milkdown/design-system';
|
|
4
|
-
import type { MarkType } from '@milkdown/prose';
|
|
4
|
+
import type { MarkType } from '@milkdown/prose/model';
|
|
5
5
|
|
|
6
6
|
import type { ButtonItem } from '../item';
|
|
7
7
|
import { hasMark, isTextAndNotHasMark } from './prosemirror';
|