@milkdown/plugin-tooltip 5.2.0 → 5.2.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.
Files changed (44) hide show
  1. package/lib/index.cjs.js +102 -0
  2. package/lib/index.cjs.js.map +1 -0
  3. package/lib/index.es.js +581 -0
  4. package/lib/index.es.js.map +1 -0
  5. package/package.json +18 -8
  6. package/src/utility/input.ts +1 -1
  7. package/lib/button-manager/calc-button-pos.js +0 -17
  8. package/lib/button-manager/calc-button-pos.js.map +0 -1
  9. package/lib/button-manager/create-tooltip.js +0 -20
  10. package/lib/button-manager/create-tooltip.js.map +0 -1
  11. package/lib/button-manager/filter-button.js +0 -22
  12. package/lib/button-manager/filter-button.js.map +0 -1
  13. package/lib/button-manager/index.js +0 -35
  14. package/lib/button-manager/index.js.map +0 -1
  15. package/lib/button-manager/no-active.js +0 -6
  16. package/lib/button-manager/no-active.js.map +0 -1
  17. package/lib/button-manager/style.js +0 -50
  18. package/lib/button-manager/style.js.map +0 -1
  19. package/lib/index.js +0 -45
  20. package/lib/index.js.map +0 -1
  21. package/lib/input-manager/calc-input-pos.js +0 -13
  22. package/lib/input-manager/calc-input-pos.js.map +0 -1
  23. package/lib/input-manager/create-input.js +0 -30
  24. package/lib/input-manager/create-input.js.map +0 -1
  25. package/lib/input-manager/filter-input.js +0 -19
  26. package/lib/input-manager/filter-input.js.map +0 -1
  27. package/lib/input-manager/index.js +0 -49
  28. package/lib/input-manager/index.js.map +0 -1
  29. package/lib/input-manager/style.js +0 -66
  30. package/lib/input-manager/style.js.map +0 -1
  31. package/lib/item.js +0 -36
  32. package/lib/item.js.map +0 -1
  33. package/lib/selection-marks-tooltip.js +0 -39
  34. package/lib/selection-marks-tooltip.js.map +0 -1
  35. package/lib/utility/element.js +0 -3
  36. package/lib/utility/element.js.map +0 -1
  37. package/lib/utility/index.js +0 -6
  38. package/lib/utility/index.js.map +0 -1
  39. package/lib/utility/input.js +0 -121
  40. package/lib/utility/input.js.map +0 -1
  41. package/lib/utility/prosemirror.js +0 -22
  42. package/lib/utility/prosemirror.js.map +0 -1
  43. package/lib/utility/toggle.js +0 -11
  44. package/lib/utility/toggle.js.map +0 -1
@@ -0,0 +1,102 @@
1
+ "use strict";var $=Object.defineProperty;var b=Object.getOwnPropertySymbols;var P=Object.prototype.hasOwnProperty,N=Object.prototype.propertyIsEnumerable;var y=(n,t,e)=>t in n?$(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e,m=(n,t)=>{for(var e in t||(t={}))P.call(t,e)&&y(n,e,t[e]);if(b)for(var e of b(t))N.call(t,e)&&y(n,e,t[e]);return n};Object.defineProperty(exports,"__esModule",{value:!0});exports[Symbol.toStringTag]="Module";var g=require("@milkdown/core"),u=require("@milkdown/prose"),v=require("@milkdown/utils"),p=require("@milkdown/preset-gfm"),H=require("@milkdown/plugin-math"),T=require("@emotion/css");const k=(n,t)=>n.tagName===t.toUpperCase(),w=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;if(k(e,"input"))return e.focus(),()=>!1;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(p.ModifyLink,o.value):()=>!1},_=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(H.ModifyInlineMath,o.value):()=>!1},x=n=>t=>{const{target:e}=t;if(!(e instanceof HTMLElement))return()=>!0;if(k(e,"input"))return e.focus(),()=>!1;const i=e.parentNode;if(!i)return()=>!1;const o=Array.from(i.children).find(s=>s.tagName==="INPUT");return o instanceof HTMLInputElement?n.get(g.commandsCtx).call(p.ModifyImage,o.value):()=>!1},O=(n,t)=>{const{marks:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const{selection:s}=n.state;let a;if(n.state.doc.nodesBetween(s.from,s.to,d=>{if(e.link.isInSet(d.marks))return a=d,!1}),!a)return;const r=a.marks.find(d=>d.type===e.link);if(!r)return;const l=r.attrs.href;if(i.value=l,!l){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},j=(n,t)=>{const{nodes:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const s=u.findSelectedNodeOfType(n.state.selection,e.math_inline);if(!s)return;const{node:a}=s,r=a.attrs.value;if(i.value=r,!r){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},q=(n,t)=>{const{nodes:e}=n.state.schema,{firstChild:i,lastElementChild:o}=t;if(!(i instanceof HTMLInputElement)||!(o instanceof HTMLButtonElement))return;const s=u.findSelectedNodeOfType(n.state.selection,e.image);if(!s)return;const{node:a}=s,r=a.attrs.src;if(i.value=r,!r){o.classList.add("disable");return}o.classList.contains("disable")&&o.classList.remove("disable")},L=(n,t)=>{const{from:e,to:i}=n.selection;return n.doc.rangeHasMark(e,e===i?i+1:i,t)},S=n=>{const{selection:t}=n;return t instanceof u.TextSelection?!!n.doc.textBetween(t.from,t.to):!1},z=n=>Boolean(u.findParentNode(t=>!!t.type.spec.code)(n.selection)),B=(n,t)=>!S(n)||z(n)||L(n,t),h=(n,t,e,i,o)=>({$:n.get(g.themeToolCtx).slots.icon(t),command:()=>n.get(g.commandsCtx).call(e),active:s=>L(s.state,i),disable:s=>B(s.state,o),enable:s=>!!i&&!!s.state.schema.marks[i.name]});var M;(function(n){n[n.ToggleBold=0]="ToggleBold",n[n.ToggleItalic=1]="ToggleItalic",n[n.ToggleStrike=2]="ToggleStrike",n[n.ToggleCode=3]="ToggleCode",n[n.ToggleLink=4]="ToggleLink"})(M||(M={}));var E;(function(n){n[n.ModifyLink=0]="ModifyLink",n[n.ModifyImage=1]="ModifyImage",n[n.ModifyInlineMath=2]="ModifyInlineMath"})(E||(E={}));const W=(n,t,e)=>{const{marks:i,nodes:o}=n;return{[0]:m({display:s=>s.state.selection.empty&&L(s.state,i.link),command:w(t),update:O},e.link),[2]:m({display:s=>Boolean(u.findSelectedNodeOfType(s.state.selection,o.math_inline)),command:_(t),update:j,bind:!0},e.inlineMath),[1]:m({display:s=>Boolean(u.findSelectedNodeOfType(s.state.selection,o.image)),command:x(t),update:q},e.image)}},U=(n,t)=>{const{marks:e}=n;return{[0]:h(t,"bold",p.ToggleBold,e.strong,e.code_inline),[1]:h(t,"italic",p.ToggleItalic,e.em,e.code_inline),[2]:h(t,"strikeThrough",p.ToggleStrikeThrough,e.strike_through,e.code_inline),[3]:h(t,"code",p.ToggleInlineCode,e.code_inline,e.link),[4]:h(t,"link",p.ToggleLink,e.link,e.code_inline)}},D=(n,t)=>{n.classList.remove("hide"),u.calculateTextPosition(t,n,(e,i,o,s)=>{const a=i.left-e.left;let r=e.left-s.left-(o.width-a)/2,l=e.top-s.top-o.height-14;return r<0&&(r=0),e.top<o.height&&(l=e.bottom-s.top+14),[l,r]})},K=n=>{var o,s;const{palette:t,mixin:e,size:i}=n;return T.css`
2
+ display: inline-flex;
3
+ cursor: pointer;
4
+ justify-content: space-evenly;
5
+ position: absolute;
6
+ border-radius: ${i.radius};
7
+ z-index: 2;
8
+
9
+ ${(o=e.border)==null?void 0:o.call(e)};
10
+ ${(s=e.shadow)==null?void 0:s.call(e)};
11
+
12
+ overflow: hidden;
13
+ background: ${t("surface")};
14
+
15
+ .icon {
16
+ position: relative;
17
+ color: ${t("solid",.87)};
18
+
19
+ width: 3rem;
20
+ line-height: 3rem;
21
+ text-align: center;
22
+ transition: all 0.4s ease-in-out;
23
+ &:hover {
24
+ background-color: ${t("secondary",.12)};
25
+ }
26
+ &.active {
27
+ color: ${t("primary")};
28
+ }
29
+ &:not(:last-child)::after {
30
+ content: '';
31
+ position: absolute;
32
+ top: 0;
33
+ right: calc(-0.5 * ${i.lineWidth});
34
+ width: ${i.lineWidth};
35
+ bottom: 0;
36
+ background: ${t("line")};
37
+ }
38
+ }
39
+ &.hide,
40
+ .hide {
41
+ display: none;
42
+ }
43
+ `},G=(n,t)=>{const e=document.createElement("div"),i=t.getStyle(K)||"";return i&&e.classList.add(i),e.classList.add("tooltip"),{dom:e,render:o=>{var s;Object.values(n).filter(a=>a.enable(o)).forEach(({$:a})=>e.appendChild(a)),(s=o.dom.parentNode)==null||s.appendChild(e)}}},Y=(n,t)=>Object.values(n).filter(e=>e.enable(t)).every(({$:e})=>e.classList.contains("hide")),F=(n,t)=>(Object.values(n).filter(e=>e.enable(t)).forEach(e=>{var s;if((s=e.disable)==null?void 0:s.call(e,t)){e.$.classList.add("hide");return}if(e.$.classList.remove("hide"),e.active(t)){e.$.classList.add("active");return}e.$.classList.remove("active")}),Y(n,t)),J=(n,t)=>{const{dom:e,render:i}=G(n,t),o=a=>{const r=Object.values(n).find(({$:l})=>a.target instanceof Element&&l.contains(a.target));!r||(a.stopPropagation(),a.preventDefault(),r.command())},s=()=>{e.classList.add("hide")};return e.addEventListener("mousedown",o),{destroy:()=>{e.removeEventListener("mousedown",o),e.remove()},hide:s,update:a=>{if(F(n,a)){s();return}D(e,a)},render:i}},Q=(n,t)=>{u.calculateTextPosition(n,t,(e,i,o,s)=>{const a=i.left-e.left;let r=e.left-s.left-(o.width-a)/2;const l=e.bottom-s.top+14;return r<0&&(r=0),[l,r]})},R=n=>{var o,s;const{palette:t,mixin:e,size:i}=n;return T.css`
44
+ ${(o=e.border)==null?void 0:o.call(e)};
45
+ ${(s=e.shadow)==null?void 0:s.call(e)};
46
+
47
+ display: inline-flex;
48
+ justify-content: space-between;
49
+ align-items: center;
50
+ position: absolute;
51
+ background: ${t("surface")};
52
+ border-radius: ${i.radius};
53
+ font-size: 1rem;
54
+
55
+ height: 3.5rem;
56
+ box-sizing: border-box;
57
+ width: 25.5rem;
58
+ padding: 0 1rem;
59
+ gap: 1rem;
60
+ z-index: 2;
61
+
62
+ input,
63
+ button {
64
+ all: unset;
65
+ }
66
+
67
+ input {
68
+ flex-grow: 1;
69
+ caret-color: ${t("primary")};
70
+ &::placeholder {
71
+ color: ${t("neutral",.6)};
72
+ }
73
+ }
74
+
75
+ button {
76
+ cursor: pointer;
77
+ height: 2.25rem;
78
+ color: ${t("primary")};
79
+ font-size: 0.875rem;
80
+ padding: 0 0.5rem;
81
+ font-weight: 500;
82
+ letter-spacing: 1.25px;
83
+ &:hover {
84
+ background-color: ${t("secondary",.12)};
85
+ }
86
+ &.disable {
87
+ color: ${t("neutral",.38)};
88
+ cursor: not-allowed;
89
+ &:hover {
90
+ background: transparent;
91
+ }
92
+ }
93
+ &.hide {
94
+ display: none;
95
+ }
96
+ }
97
+
98
+ &.hide {
99
+ display: none;
100
+ }
101
+ `},X=n=>{const t=document.createElement("div"),e=n.getStyle(R);e&&t.classList.add(e),t.classList.add("tooltip-input");const i=document.createElement("input");t.appendChild(i);const o=document.createElement("button");return t.appendChild(o),i.addEventListener("input",s=>{const{target:a}=s;if(a instanceof HTMLInputElement){if(!a.value){o.classList.add("disable");return}o.classList.remove("disable")}}),{div:t,input:i,button:o}},Z=(n,t,e,i,o)=>{const s=Object.values(t).find(a=>a.display(n));if(!s){e.classList.add("hide");return}return e.classList.remove("hide"),s.bind?o.classList.add("hide"):(o.classList.remove("hide"),o.textContent=s.buttonText),i.placeholder=s.placeholder,s.update(n,e),s},A=(n,t)=>{let e,i=!1;const o=c=>e=c,{div:s,button:a,input:r}=X(t),l=c=>{!e||a.classList.contains("disable")||(c.stopPropagation(),e(c),s.classList.add("hide"))},d=c=>{!i||!e||e(c)};return r.addEventListener("input",d),a.addEventListener("mousedown",l),{destroy:()=>{r.removeEventListener("input",d),s.removeEventListener("mousedown",l),s.remove()},hide:()=>{s.classList.add("hide"),o()},update:c=>{const f=Z(c,n,s,r,a);!f||(i=!!f.bind,o(f.command),Q(c,s))},render:c=>{const f=c.dom.parentNode;if(!f)throw new Error;f.appendChild(s)}}},V=(n,t,e)=>{const i=J(n,e),o=A(t,e);let s=!1;const a=()=>{i.hide(),o.hide()},r=(l,d)=>{const{state:c}=l;if(!l.editable||s){a();return}(d==null?void 0:d.doc.eq(c.doc))&&d.selection.eq(c.selection)||(i.update(l),o.update(l))};return{update:r,destroy:()=>{i.destroy(),o.destroy()},render:l=>{i.render(l),o.render(l),r(l)},setHide:l=>{s=l}}},I=new u.PluginKey("MILKDOWN_PLUGIN_TOOLTIP"),C=v.createPlugin((n,t)=>({id:"tooltip",prosePlugins:(e,i)=>{var r,l,d;const o=i.get(g.schemaCtx),s=V(U(o,i),W(o,i,{link:m({placeholder:"Input Web Link",buttonText:"APPLY"},(r=t==null?void 0:t.link)!=null?r:{}),image:m({placeholder:"Input Image Link",buttonText:"APPLY"},(l=t==null?void 0:t.image)!=null?l:{}),inlineMath:m({placeholder:"Input Math"},(d=t==null?void 0:t.inlineMath)!=null?d:{})}),n);return[new u.Plugin({key:I,props:{handleKeyDown:()=>(s.setHide(!0),!1),handleClick:c=>(s.setHide(!1),s.update(c),!1)},view:c=>(s.render(c),{update:s.update,destroy:s.destroy})})]}})),ee=v.AtomList.create([C()]);exports.key=I;exports.tooltip=ee;exports.tooltipPlugin=C;
102
+ //# sourceMappingURL=index.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs.js","sources":["../src/utility/element.ts","../src/utility/input.ts","../src/utility/prosemirror.ts","../src/utility/toggle.ts","../src/item.ts","../src/button-manager/calc-button-pos.ts","../src/button-manager/style.ts","../src/button-manager/create-tooltip.ts","../src/button-manager/no-active.ts","../src/button-manager/filter-button.ts","../src/button-manager/index.ts","../src/input-manager/calc-input-pos.ts","../src/input-manager/style.ts","../src/input-manager/create-input.ts","../src/input-manager/filter-input.ts","../src/input-manager/index.ts","../src/selection-marks-tooltip.ts","../src/index.ts"],"sourcesContent":["/* Copyright 2021, Milkdown by Mirone. */\nexport const elementIsTag = (element: HTMLElement, tagName: string): boolean =>\n element.tagName === tagName.toUpperCase();\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { commandsCtx, Ctx } from '@milkdown/core';\nimport { ModifyInlineMath } from '@milkdown/plugin-math';\nimport { ModifyImage, ModifyLink } from '@milkdown/preset-gfm';\nimport { findSelectedNodeOfType, Node as ProseNode } from '@milkdown/prose';\n\nimport { Event2Command, Updater } from '../item';\nimport { elementIsTag } from './element';\n\nexport const modifyLink =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyLink, inputEl.value);\n };\n\nexport const modifyInlineMath =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyInlineMath, inputEl.value);\n };\n\nexport const modifyImage =\n (ctx: Ctx): Event2Command =>\n (e) => {\n const { target } = e;\n if (!(target instanceof HTMLElement)) {\n return () => true;\n }\n if (elementIsTag(target, 'input')) {\n target.focus();\n return () => false;\n }\n const parent = target.parentNode;\n if (!parent) return () => false;\n\n const inputEl = Array.from(parent.children).find((el) => el.tagName === 'INPUT');\n if (!(inputEl instanceof HTMLInputElement)) return () => false;\n\n return ctx.get(commandsCtx).call(ModifyImage, inputEl.value);\n };\n\nexport const updateLinkView: Updater = (view, $) => {\n const { marks } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const { selection } = view.state;\n let node: ProseNode | undefined;\n view.state.doc.nodesBetween(selection.from, selection.to, (n) => {\n if (marks.link.isInSet(n.marks)) {\n node = n;\n return false;\n }\n return;\n });\n if (!node) return;\n\n const mark = node.marks.find((m) => m.type === marks.link);\n if (!mark) return;\n\n const value = mark.attrs.href;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateInlineMathView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.math_inline);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.value;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n\nexport const updateImageView: Updater = (view, $) => {\n const { nodes } = view.state.schema;\n const { firstChild, lastElementChild } = $;\n if (!(firstChild instanceof HTMLInputElement) || !(lastElementChild instanceof HTMLButtonElement)) return;\n\n const result = findSelectedNodeOfType(view.state.selection, nodes.image);\n if (!result) return;\n const { node } = result;\n\n const value = node.attrs.src;\n firstChild.value = value;\n if (!value) {\n lastElementChild.classList.add('disable');\n return;\n }\n if (lastElementChild.classList.contains('disable')) {\n lastElementChild.classList.remove('disable');\n }\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorState, findParentNode, MarkType, Node, NodeType, TextSelection } from '@milkdown/prose';\n\nexport type Position = {\n start: number;\n end: number;\n};\n\nexport const hasMark = (editorState: EditorState, type: MarkType): boolean => {\n const { from, to } = editorState.selection;\n\n return editorState.doc.rangeHasMark(from, from === to ? to + 1 : to, type);\n};\n\nexport const isTextSelection = (editorState: EditorState): boolean => {\n const { selection } = editorState;\n if (selection instanceof TextSelection) {\n const text = editorState.doc.textBetween(selection.from, selection.to);\n\n if (!text) return false;\n\n return true;\n }\n return false;\n};\n\nexport const isInCodeFence = (editorState: EditorState): boolean =>\n Boolean(findParentNode((node) => !!node.type.spec.code)(editorState.selection));\n\nexport const isTextAndNotHasMark = (editorState: EditorState, mark: MarkType): boolean =>\n !isTextSelection(editorState) || isInCodeFence(editorState) || hasMark(editorState, mark);\n\nexport const equalNodeType = (nodeType: NodeType, node: Node) => {\n return (Array.isArray(nodeType) && nodeType.indexOf(node.type) > -1) || node.type === nodeType;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { CmdKey, commandsCtx, Ctx, themeToolCtx } from '@milkdown/core';\nimport type { Icon } from '@milkdown/design-system';\nimport type { MarkType } from '@milkdown/prose';\n\nimport type { ButtonItem } from '../item';\nimport { hasMark, isTextAndNotHasMark } from './prosemirror';\n\nexport const createToggleIcon = <T>(\n ctx: Ctx,\n iconName: Icon,\n commandKey: CmdKey<T>,\n mark: MarkType,\n disableForMark: MarkType,\n): ButtonItem => ({\n $: ctx.get(themeToolCtx).slots.icon(iconName),\n command: () => ctx.get(commandsCtx).call(commandKey),\n active: (view) => hasMark(view.state, mark),\n disable: (view) => isTextAndNotHasMark(view.state, disableForMark),\n enable: (view) => !!mark && !!view.state.schema.marks[mark.name],\n});\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { Ctx } from '@milkdown/core';\nimport { ToggleBold, ToggleInlineCode, ToggleItalic, ToggleLink, ToggleStrikeThrough } from '@milkdown/preset-gfm';\nimport { EditorView, findSelectedNodeOfType, Schema } from '@milkdown/prose';\n\nimport {\n createToggleIcon,\n hasMark,\n modifyImage,\n modifyInlineMath,\n modifyLink,\n updateImageView,\n updateInlineMathView,\n updateLinkView,\n} from './utility';\n\nexport type Pred = (view: EditorView) => boolean;\nexport type Updater = (view: EditorView, $: HTMLElement) => void;\nexport type Event2Command = (e: Event) => void;\n\nexport type ButtonItem = {\n $: HTMLElement;\n command: () => void;\n active: Pred;\n disable?: Pred;\n enable: Pred;\n};\n\nexport type InputItem = {\n command: Event2Command;\n display: Pred;\n update: Updater;\n placeholder: string;\n} & (\n | {\n bind: true;\n }\n | {\n bind?: false;\n buttonText: string;\n }\n);\n\nexport enum ButtonAction {\n ToggleBold,\n ToggleItalic,\n ToggleStrike,\n ToggleCode,\n ToggleLink,\n}\n\nexport enum InputAction {\n ModifyLink,\n ModifyImage,\n ModifyInlineMath,\n}\n\nexport type ButtonMap = Record<ButtonAction, ButtonItem>;\nexport type InputMap = Record<InputAction, InputItem>;\n\nexport type InputOptions = {\n link: {\n placeholder: string;\n buttonText: string;\n };\n image: {\n placeholder: string;\n buttonText: string;\n };\n inlineMath: {\n placeholder: string;\n };\n};\n\nexport const inputMap = (schema: Schema, ctx: Ctx, inputOptions: InputOptions): InputMap => {\n const { marks, nodes } = schema;\n return {\n [InputAction.ModifyLink]: {\n display: (view) => view.state.selection.empty && hasMark(view.state, marks.link),\n command: modifyLink(ctx),\n update: updateLinkView,\n ...inputOptions.link,\n },\n [InputAction.ModifyInlineMath]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.math_inline)),\n command: modifyInlineMath(ctx),\n update: updateInlineMathView,\n bind: true,\n ...inputOptions.inlineMath,\n },\n [InputAction.ModifyImage]: {\n display: (view) => Boolean(findSelectedNodeOfType(view.state.selection, nodes.image)),\n command: modifyImage(ctx),\n update: updateImageView,\n ...inputOptions.image,\n },\n };\n};\n\nexport const buttonMap = (schema: Schema, ctx: Ctx): ButtonMap => {\n const { marks } = schema;\n return {\n [ButtonAction.ToggleBold]: createToggleIcon(ctx, 'bold', ToggleBold, marks.strong, marks.code_inline),\n [ButtonAction.ToggleItalic]: createToggleIcon(ctx, 'italic', ToggleItalic, marks.em, marks.code_inline),\n [ButtonAction.ToggleStrike]: createToggleIcon(\n ctx,\n 'strikeThrough',\n ToggleStrikeThrough,\n marks.strike_through,\n marks.code_inline,\n ),\n [ButtonAction.ToggleCode]: createToggleIcon(ctx, 'code', ToggleInlineCode, marks.code_inline, marks.link),\n [ButtonAction.ToggleLink]: createToggleIcon(ctx, 'link', ToggleLink, marks.link, marks.code_inline),\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcButtonPos = (buttons: HTMLElement, view: EditorView) => {\n buttons.classList.remove('hide');\n calculateTextPosition(view, buttons, (start, end, target, parent) => {\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n let top = start.top - parent.top - target.height - 14;\n\n if (left < 0) left = 0;\n\n if (start.top < target.height) {\n top = start.bottom - parent.top + 14;\n }\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n return css`\n display: inline-flex;\n cursor: pointer;\n justify-content: space-evenly;\n position: absolute;\n border-radius: ${size.radius};\n z-index: 2;\n\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n overflow: hidden;\n background: ${palette('surface')};\n\n .icon {\n position: relative;\n color: ${palette('solid', 0.87)};\n\n width: 3rem;\n line-height: 3rem;\n text-align: center;\n transition: all 0.4s ease-in-out;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.active {\n color: ${palette('primary')};\n }\n &:not(:last-child)::after {\n content: '';\n position: absolute;\n top: 0;\n right: calc(-0.5 * ${size.lineWidth});\n width: ${size.lineWidth};\n bottom: 0;\n background: ${palette('line')};\n }\n }\n &.hide,\n .hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { injectStyle } from './style';\n\ntype Tooltip = {\n dom: HTMLDivElement;\n render: (editorView: EditorView) => void;\n};\n\nexport const createTooltip = (buttonMap: ButtonMap, utils: Utils): Tooltip => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle) || '';\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip');\n\n return {\n dom: div,\n render: (editorView: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(editorView))\n .forEach(({ $ }) => div.appendChild($));\n\n editorView.dom.parentNode?.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\n\nexport const noActive = (buttonMap: ButtonMap, view: EditorView) => {\n return Object.values(buttonMap)\n .filter((item) => item.enable(view))\n .every(({ $ }) => $.classList.contains('hide'));\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { EditorView } from '@milkdown/prose';\n\nimport { ButtonMap } from '../item';\nimport { noActive } from './no-active';\n\nexport const filterButton = (buttonMap: ButtonMap, view: EditorView) => {\n Object.values(buttonMap)\n .filter((item) => item.enable(view))\n .forEach((item) => {\n const disable = item.disable?.(view);\n if (disable) {\n item.$.classList.add('hide');\n return;\n }\n\n item.$.classList.remove('hide');\n\n const active = item.active(view);\n if (active) {\n item.$.classList.add('active');\n return;\n }\n item.$.classList.remove('active');\n });\n\n return noActive(buttonMap, view);\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport type { Utils } from '@milkdown/utils';\n\nimport type { ButtonMap } from '../item';\nimport { calcButtonPos } from './calc-button-pos';\nimport { createTooltip } from './create-tooltip';\nimport { filterButton } from './filter-button';\n\nexport const createButtonManager = (buttonMap: ButtonMap, utils: Utils) => {\n const { dom: buttons, render } = createTooltip(buttonMap, utils);\n\n const onClick = (e: Event) => {\n const target = Object.values(buttonMap).find(({ $ }) => e.target instanceof Element && $.contains(e.target));\n if (!target) return;\n\n e.stopPropagation();\n e.preventDefault();\n target.command();\n };\n\n const hide = () => {\n buttons.classList.add('hide');\n };\n\n buttons.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n buttons.removeEventListener('mousedown', onClick);\n buttons.remove();\n },\n hide,\n update: (editorView: EditorView) => {\n const noActive = filterButton(buttonMap, editorView);\n if (noActive) {\n hide();\n return;\n }\n calcButtonPos(buttons, editorView);\n },\n render,\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { calculateTextPosition, EditorView } from '@milkdown/prose';\n\nexport const calcInputPos = (view: EditorView, input: HTMLDivElement) => {\n calculateTextPosition(view, input, (start, end, target, parent) => {\n const selectionWidth = end.left - start.left;\n let left = start.left - parent.left - (target.width - selectionWidth) / 2;\n const top = start.bottom - parent.top + 14;\n\n if (left < 0) left = 0;\n\n return [top, left];\n });\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { css } from '@emotion/css';\nimport { ThemeTool } from '@milkdown/core';\n\nexport const injectStyle = (themeTool: ThemeTool) => {\n const { palette, mixin, size } = themeTool;\n\n return css`\n ${mixin.border?.()};\n ${mixin.shadow?.()};\n\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n position: absolute;\n background: ${palette('surface')};\n border-radius: ${size.radius};\n font-size: 1rem;\n\n height: 3.5rem;\n box-sizing: border-box;\n width: 25.5rem;\n padding: 0 1rem;\n gap: 1rem;\n z-index: 2;\n\n input,\n button {\n all: unset;\n }\n\n input {\n flex-grow: 1;\n caret-color: ${palette('primary')};\n &::placeholder {\n color: ${palette('neutral', 0.6)};\n }\n }\n\n button {\n cursor: pointer;\n height: 2.25rem;\n color: ${palette('primary')};\n font-size: 0.875rem;\n padding: 0 0.5rem;\n font-weight: 500;\n letter-spacing: 1.25px;\n &:hover {\n background-color: ${palette('secondary', 0.12)};\n }\n &.disable {\n color: ${palette('neutral', 0.38)};\n cursor: not-allowed;\n &:hover {\n background: transparent;\n }\n }\n &.hide {\n display: none;\n }\n }\n\n &.hide {\n display: none;\n }\n `;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { Utils } from '@milkdown/utils';\n\nimport { injectStyle } from './style';\n\nexport const createInput = (utils: Utils) => {\n const div = document.createElement('div');\n const style = utils.getStyle(injectStyle);\n if (style) {\n div.classList.add(style);\n }\n\n div.classList.add('tooltip-input');\n\n const input = document.createElement('input');\n div.appendChild(input);\n const button = document.createElement('button');\n div.appendChild(button);\n\n input.addEventListener('input', (e) => {\n const { target } = e;\n if (!(target instanceof HTMLInputElement)) {\n return;\n }\n\n if (!target.value) {\n button.classList.add('disable');\n return;\n }\n\n button.classList.remove('disable');\n });\n\n return {\n div,\n input,\n button,\n } as const;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\n\nimport type { InputMap } from '../item';\n\nexport const filterInput = (\n currentView: EditorView,\n inputMap: InputMap,\n div: HTMLDivElement,\n input: HTMLInputElement,\n button: HTMLButtonElement,\n) => {\n const target = Object.values(inputMap).find((input) => input.display(currentView));\n\n if (!target) {\n div.classList.add('hide');\n return;\n }\n\n div.classList.remove('hide');\n\n if (target.bind) {\n button.classList.add('hide');\n } else {\n button.classList.remove('hide');\n button.textContent = target.buttonText;\n }\n\n input.placeholder = target.placeholder;\n target.update(currentView, div);\n\n return target;\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport type { Event2Command, InputMap } from '../item';\nimport { calcInputPos } from './calc-input-pos';\nimport { createInput } from './create-input';\nimport { filterInput } from './filter-input';\n\nexport const createInputManager = (inputMap: InputMap, utils: Utils) => {\n let inputCommand: Event2Command | undefined;\n let binding = false;\n const setCommand = (x?: Event2Command) => (inputCommand = x);\n\n const { div, button, input } = createInput(utils);\n\n const onClick = (e: Event) => {\n if (!inputCommand || button.classList.contains('disable')) return;\n\n e.stopPropagation();\n inputCommand(e);\n div.classList.add('hide');\n };\n const onInput = (e: Event) => {\n if (!binding || !inputCommand) return;\n inputCommand(e);\n };\n\n input.addEventListener('input', onInput);\n button.addEventListener('mousedown', onClick);\n\n return {\n destroy: () => {\n input.removeEventListener('input', onInput);\n div.removeEventListener('mousedown', onClick);\n div.remove();\n },\n hide: () => {\n div.classList.add('hide');\n setCommand();\n },\n update: (editorView: EditorView) => {\n const result = filterInput(editorView, inputMap, div, input, button);\n if (!result) return;\n binding = !!result.bind;\n setCommand(result.command);\n calcInputPos(editorView, div);\n },\n render: (editorView: EditorView) => {\n const wrapper = editorView.dom.parentNode;\n if (!wrapper) throw new Error();\n wrapper.appendChild(div);\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport type { EditorState, EditorView } from '@milkdown/prose';\nimport { Utils } from '@milkdown/utils';\n\nimport { createButtonManager } from './button-manager';\nimport { createInputManager } from './input-manager';\nimport type { ButtonMap, InputMap } from './item';\n\nexport const createPlugin = (buttonMap: ButtonMap, inputMap: InputMap, utils: Utils) => {\n const buttonManager = createButtonManager(buttonMap, utils);\n const inputManager = createInputManager(inputMap, utils);\n let shouldHide = false;\n\n const hide = () => {\n buttonManager.hide();\n inputManager.hide();\n };\n\n const update = (view: EditorView, prevState?: EditorState) => {\n const { state } = view;\n\n if (!view.editable || shouldHide) {\n hide();\n return;\n }\n\n const isEqualSelection = prevState?.doc.eq(state.doc) && prevState.selection.eq(state.selection);\n if (isEqualSelection) return;\n\n buttonManager.update(view);\n inputManager.update(view);\n };\n\n return {\n update,\n destroy: () => {\n buttonManager.destroy();\n inputManager.destroy();\n },\n render: (editorView: EditorView) => {\n buttonManager.render(editorView);\n inputManager.render(editorView);\n update(editorView);\n },\n setHide: (isTyping: boolean) => {\n shouldHide = isTyping;\n },\n };\n};\n","/* Copyright 2021, Milkdown by Mirone. */\nimport { schemaCtx } from '@milkdown/core';\nimport { Plugin, PluginKey } from '@milkdown/prose';\nimport { AtomList, createPlugin as create } from '@milkdown/utils';\n\nimport { buttonMap, inputMap, InputOptions } from './item';\nimport { createPlugin } from './selection-marks-tooltip';\n\nexport const key = new PluginKey('MILKDOWN_PLUGIN_TOOLTIP');\n\nexport const tooltipPlugin = create<string, InputOptions>((utils, options) => {\n return {\n id: 'tooltip',\n prosePlugins: (_, ctx) => {\n const schema = ctx.get(schemaCtx);\n const manager = createPlugin(\n buttonMap(schema, ctx),\n inputMap(schema, ctx, {\n link: {\n placeholder: 'Input Web Link',\n buttonText: 'APPLY',\n ...(options?.link ?? {}),\n },\n image: {\n placeholder: 'Input Image Link',\n buttonText: 'APPLY',\n ...(options?.image ?? {}),\n },\n inlineMath: {\n placeholder: 'Input Math',\n ...(options?.inlineMath ?? {}),\n },\n }),\n utils,\n );\n const plugin = new Plugin({\n key,\n props: {\n handleKeyDown: () => {\n manager.setHide(true);\n return false;\n },\n handleClick: (view) => {\n manager.setHide(false);\n manager.update(view);\n return false;\n },\n },\n view: (editorView) => {\n manager.render(editorView);\n return {\n update: manager.update,\n destroy: manager.destroy,\n };\n },\n });\n return [plugin];\n },\n };\n});\n\nexport const tooltip = AtomList.create([tooltipPlugin()]);\n"],"names":["commandsCtx","ModifyLink","ModifyInlineMath","ModifyImage","findSelectedNodeOfType","TextSelection","findParentNode","themeToolCtx","ToggleBold","ToggleItalic","ToggleStrikeThrough","ToggleInlineCode","ToggleLink","injectStyle","css","PluginKey","create","schemaCtx","Plugin","AtomList"],"mappings":"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"}