@omegagrid/markdown 0.10.87 → 0.10.89

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.
@@ -0,0 +1,31 @@
1
+ import { LitElement } from "lit";
2
+ import { Input } from "@omegagrid/core";
3
+ import type { EditorView } from "@omegagrid/milkdown-kit/dist/prose/view";
4
+ import type { Node } from "@omegagrid/milkdown-kit/dist/prose/model";
5
+ import type { PluginView } from "@omegagrid/milkdown-kit/dist/prose/state";
6
+ import type * as milkdown from '@omegagrid/milkdown-kit';
7
+ export declare class ImageEdit extends LitElement {
8
+ #private;
9
+ static styles: import("lit").CSSResult;
10
+ value: string;
11
+ input: Input;
12
+ constructor();
13
+ render: () => import("lit").TemplateResult<1>;
14
+ }
15
+ export declare class ImageEditView implements PluginView {
16
+ #private;
17
+ readonly ctx: milkdown.ctx.Ctx;
18
+ readonly md: typeof milkdown;
19
+ constructor(ctx: milkdown.ctx.Ctx, md: typeof milkdown, view: EditorView);
20
+ isImage: (node: Node) => boolean;
21
+ hasUrlToShow: (node: Node) => boolean;
22
+ show: (view: EditorView, node: Node, pos: number) => void;
23
+ hide: () => void;
24
+ update: (view: EditorView) => void;
25
+ destroy: () => void;
26
+ }
27
+ export declare function createImageEdit(md: typeof milkdown): {
28
+ configure: (ctx: milkdown.ctx.Ctx) => void;
29
+ plugins: import("@milkdown/plugin-tooltip").TooltipPlugin<"MARKDOWN_IMAGE_EDIT", any>;
30
+ };
31
+ //# sourceMappingURL=imageEdit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageEdit.d.ts","sourceRoot":"","sources":["../../../src/components/features/imageEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,EAAE,KAAK,EAAe,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,qBACa,SAAU,SAAQ,UAAU;;IAExC,MAAM,CAAC,MAAM,0BA+BX;IAGF,KAAK,SAAM;IAGX,KAAK,EAAE,KAAK,CAAC;;IAcb,MAAM,wCAaJ;CACF;AAWD,qBAAa,aAAc,YAAW,UAAU;;IAS9C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG;IAC9B,QAAQ,CAAC,EAAE,EAAE,OAAO,QAAQ;gBADnB,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EACrB,EAAE,EAAE,OAAO,QAAQ,EAC5B,IAAI,EAAE,UAAU;IAcjB,OAAO,GAAI,MAAM,IAAI,aAGC;IAEtB,YAAY,GAAI,MAAM,IAAI,aAAqE;IAE/F,IAAI,GAAI,MAAM,UAAU,EAAE,MAAM,IAAI,EAAE,KAAK,MAAM,UAehD;IAED,IAAI,aAMH;IAQD,MAAM,GAAI,MAAM,UAAU,UAKzB;IAED,OAAO,aAIN;CAcD;AAED,wBAAgB,eAAe,CAAC,EAAE,EAAE,OAAO,QAAQ;qBAI1B,QAAQ,CAAC,GAAG,CAAC,GAAG;;EAoBxC"}
@@ -0,0 +1,45 @@
1
+ var _ImageEdit_confirm,_ImageEdit_copy,_ImageEditView_instances,_ImageEditView_provider,_ImageEditView_content,_ImageEditView_target,_ImageEditView_scroller,_ImageEditView_scrollFrame,_ImageEditView_stopListeningToScroll,_ImageEditView_onChange,__decorate=this&&this.__decorate||function(e,t,i,a){var s,o=arguments.length,r=o<3?t:null===a?a=Object.getOwnPropertyDescriptor(t,i):a;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,i,a);else for(var n=e.length-1;n>=0;n--)(s=e[n])&&(r=(o<3?s(r):o>3?s(t,i,r):s(t,i))||r);return o>3&&r&&Object.defineProperty(t,i,r),r},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,t,i,a){if("a"===i&&!a)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?a:"a"===i?a.call(e):a?a.value:t.get(e)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,t,i,a,s){if("m"===a)throw new TypeError("Private method is not writable");if("a"===a&&!s)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===a?s.call(e,i):s?s.value=i:t.set(e,i),i};import{LitElement,css,html}from"lit";import{customElement,property,query}from"lit/decorators.js";import{dom,events}from"@omegagrid/core";let ImageEdit=class extends LitElement{constructor(){super(),this.value="",_ImageEdit_confirm.set(this,(()=>this.dispatchEvent(new events.ChangeEvent({value:this.input.value})))),_ImageEdit_copy.set(this,(()=>navigator.clipboard?.writeText(this.value))),this.render=()=>html`
2
+ <div class="inner">
3
+ <og-icon icon="image"></og-icon>
4
+
5
+ <og-input
6
+ placeholder="URL"
7
+ .value="${this.value}"
8
+ @change="${__classPrivateFieldGet(this,_ImageEdit_confirm,"f")}">
9
+ </og-input>
10
+
11
+ <og-button icon="copy" title="${this.value}" @click="${__classPrivateFieldGet(this,_ImageEdit_copy,"f")}"></og-button>
12
+ <og-button icon="check" @click="${__classPrivateFieldGet(this,_ImageEdit_confirm,"f")}"></og-button>
13
+ </div>
14
+ `,this.addEventListener("click",(e=>e.stopPropagation())),this.addEventListener("mousedown",(e=>e.stopPropagation())),this.addEventListener("mouseup",(e=>e.stopPropagation()))}};_ImageEdit_confirm=new WeakMap,_ImageEdit_copy=new WeakMap,ImageEdit.styles=css`
15
+ * {
16
+ box-sizing: border-box;
17
+ }
18
+
19
+ :host {
20
+ display: none;
21
+ position: absolute;
22
+ background-color: var(--og-background-color);
23
+ border: 1px solid var(--og-accent-color);
24
+ max-width: 100%;
25
+ }
26
+
27
+ .inner {
28
+ display: flex;
29
+ height: 22px;
30
+ line-height: 22px;
31
+ }
32
+
33
+ .inner > og-icon {
34
+ flex: 0 0 20px;
35
+ text-align: center;
36
+ }
37
+
38
+ .inner > og-input {
39
+ flex: 0 0 260px;
40
+ }
41
+
42
+ .inner > og-button {
43
+ flex: 0 0 22px;
44
+ }
45
+ `,__decorate([property({type:String})],ImageEdit.prototype,"value",void 0),__decorate([query("og-input")],ImageEdit.prototype,"input",void 0),ImageEdit=__decorate([customElement("og-markdown-imageedit")],ImageEdit);export{ImageEdit};const TRANSIENT_URL=/^(blob|data):/i;export class ImageEditView{constructor(e,t,i){_ImageEditView_instances.add(this),this.ctx=e,this.md=t,_ImageEditView_provider.set(this,void 0),_ImageEditView_content.set(this,void 0),_ImageEditView_target.set(this,null),_ImageEditView_scroller.set(this,void 0),_ImageEditView_scrollFrame.set(this,0),this.isImage=e=>!!e&&[this.md.components.imageBlock.imageBlockSchema.type(this.ctx),this.md.presets.commonmark.imageSchema.type(this.ctx)].includes(e.type),this.hasUrlToShow=e=>this.isImage(e)&&!TRANSIENT_URL.test(e.attrs.src??""),this.show=(e,t,i)=>{__classPrivateFieldSet(this,_ImageEditView_target,{pos:i,node:t},"f"),__classPrivateFieldGet(this,_ImageEditView_content,"f").value=t.attrs.src??"";const a=this.md.prose.posToDOMRect(e,i,i+t.nodeSize);__classPrivateFieldGet(this,_ImageEditView_provider,"f").show({getBoundingClientRect:()=>a}),dom.showElement(__classPrivateFieldGet(this,_ImageEditView_content,"f")),__classPrivateFieldSet(this,_ImageEditView_scroller,e.dom.parentElement,"f"),cancelAnimationFrame(__classPrivateFieldGet(this,_ImageEditView_scrollFrame,"f")),__classPrivateFieldSet(this,_ImageEditView_scrollFrame,requestAnimationFrame((()=>{__classPrivateFieldGet(this,_ImageEditView_scroller,"f")?.addEventListener("scroll",this.hide,{once:!0})})),"f")},this.hide=()=>{__classPrivateFieldGet(this,_ImageEditView_target,"f")&&(__classPrivateFieldSet(this,_ImageEditView_target,null,"f"),__classPrivateFieldGet(this,_ImageEditView_instances,"m",_ImageEditView_stopListeningToScroll).call(this),dom.hideElement(__classPrivateFieldGet(this,_ImageEditView_content,"f")),__classPrivateFieldGet(this,_ImageEditView_provider,"f").hide())},this.update=e=>{if(!__classPrivateFieldGet(this,_ImageEditView_target,"f"))return;const t=e.state.doc.nodeAt(__classPrivateFieldGet(this,_ImageEditView_target,"f").pos);t?.type===__classPrivateFieldGet(this,_ImageEditView_target,"f").node.type&&t.attrs.src===__classPrivateFieldGet(this,_ImageEditView_target,"f").node.attrs.src||this.hide()},this.destroy=()=>{__classPrivateFieldGet(this,_ImageEditView_instances,"m",_ImageEditView_stopListeningToScroll).call(this),__classPrivateFieldGet(this,_ImageEditView_provider,"f").destroy(),__classPrivateFieldGet(this,_ImageEditView_content,"f").remove()},_ImageEditView_onChange.set(this,(e=>{const t=__classPrivateFieldGet(this,_ImageEditView_target,"f");if(this.hide(),!t)return;const i=this.ctx.get(this.md.core.editorViewCtx);if(!i.editable)return;const a=i.state.doc.nodeAt(t.pos);this.isImage(a)&&a.attrs.src!==e.value&&i.dispatch(i.state.tr.setNodeAttribute(t.pos,"src",e.value??""))}));const a=dom.createElement("og-markdown-imageedit");a.addEventListener("change",__classPrivateFieldGet(this,_ImageEditView_onChange,"f")),__classPrivateFieldSet(this,_ImageEditView_content,a,"f"),__classPrivateFieldSet(this,_ImageEditView_provider,new t.plugins.tooltip.TooltipProvider({content:a,offset:10,debounce:0,shouldShow:()=>!1}),"f"),__classPrivateFieldGet(this,_ImageEditView_provider,"f").update(i)}}_ImageEditView_provider=new WeakMap,_ImageEditView_content=new WeakMap,_ImageEditView_target=new WeakMap,_ImageEditView_scroller=new WeakMap,_ImageEditView_scrollFrame=new WeakMap,_ImageEditView_onChange=new WeakMap,_ImageEditView_instances=new WeakSet,_ImageEditView_stopListeningToScroll=function(){cancelAnimationFrame(__classPrivateFieldGet(this,_ImageEditView_scrollFrame,"f")),__classPrivateFieldGet(this,_ImageEditView_scroller,"f")?.removeEventListener("scroll",this.hide),__classPrivateFieldSet(this,_ImageEditView_scroller,null,"f")};export function createImageEdit(e){const t=e.plugins.tooltip.tooltipFactory("MARKDOWN_IMAGE_EDIT");let i;return{configure:a=>{a.set(t.key,{props:{handleDOMEvents:{mousedown:()=>{i?.hide()}},handleClickOn:(e,t,a,s,o,r)=>!!(r&&e.editable&&i?.hasUrlToShow(a))&&(i.show(e,a,s),!1)},view:t=>i=new ImageEditView(a,e,t)})},plugins:t}}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageEdit.js","sourceRoot":"","sources":["../../../src/components/features/imageEdit.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property, query } from \"lit/decorators.js\";\nimport { Input, dom, events } from \"@omegagrid/core\";\nimport type { EditorView } from \"@omegagrid/milkdown-kit/dist/prose/view\";\nimport type { Node } from \"@omegagrid/milkdown-kit/dist/prose/model\";\nimport type { PluginView } from \"@omegagrid/milkdown-kit/dist/prose/state\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\n\n@customElement('og-markdown-imageedit')\nexport class ImageEdit extends LitElement {\n\n\tstatic styles = css`\n\t\t* {\n\t\t\tbox-sizing: border-box;\n\t\t}\n\n\t\t:host {\n\t\t\tdisplay: none;\n\t\t\tposition: absolute;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tborder: 1px solid var(--og-accent-color);\n\t\t\tmax-width: 100%;\n\t\t}\n\n\t\t.inner {\n\t\t\tdisplay: flex;\n\t\t\theight: 22px;\n\t\t\tline-height: 22px;\n\t\t}\n\n\t\t.inner > og-icon {\n\t\t\tflex: 0 0 20px;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.inner > og-input {\n\t\t\tflex: 0 0 260px;\n\t\t}\n\n\t\t.inner > og-button {\n\t\t\tflex: 0 0 22px;\n\t\t}\n\t`;\n\n\t@property({type: String})\n\tvalue = '';\n\n\t@query('og-input')\n\tinput: Input;\n\n\tconstructor() {\n\t\tsuper();\n\t\t// the tooltip sits inside the editor, keep its own interactions to itself\n\t\tthis.addEventListener('click', (e) => e.stopPropagation());\n\t\tthis.addEventListener('mousedown', (e) => e.stopPropagation());\n\t\tthis.addEventListener('mouseup', (e) => e.stopPropagation());\n\t}\n\n\t#confirm = () => this.dispatchEvent(new events.ChangeEvent({value: this.input.value}));\n\n\t#copy = () => navigator.clipboard?.writeText(this.value);\n\n\trender = () => html`\n\t\t<div class=\"inner\">\n\t\t\t<og-icon icon=\"image\"></og-icon>\n\n\t\t\t<og-input\n\t\t\t\tplaceholder=\"URL\"\n\t\t\t\t.value=\"${this.value}\"\n\t\t\t\t@change=\"${this.#confirm}\">\n\t\t\t</og-input>\n\n\t\t\t<og-button icon=\"copy\" title=\"${this.value}\" @click=\"${this.#copy}\"></og-button>\n\t\t\t<og-button icon=\"check\" @click=\"${this.#confirm}\"></og-button>\n\t\t</div>\n\t`;\n}\n\n\ntype ImageTarget = {\n\tpos: number,\n\tnode: Node\n}\n\n// a pasted image carries a blob/data url - there is nothing useful to show or edit\nconst TRANSIENT_URL = /^(blob|data):/i;\n\nexport class ImageEditView implements PluginView {\n\n\t#provider: InstanceType<typeof milkdown.plugins.tooltip.TooltipProvider>;\n\t#content: ImageEdit;\n\t#target: ImageTarget = null;\n\t#scroller: HTMLElement;\n\t#scrollFrame = 0;\n\n\tconstructor(\n\t\treadonly ctx: milkdown.ctx.Ctx,\n\t\treadonly md: typeof milkdown,\n\t\tview: EditorView\n\t) {\n\t\tconst content = dom.createElement<ImageEdit>('og-markdown-imageedit');\n\t\tcontent.addEventListener('change', this.#onChange);\n\t\tthis.#content = content;\n\t\tthis.#provider = new md.plugins.tooltip.TooltipProvider({\n\t\t\tcontent,\n\t\t\toffset: 10,\n\t\t\tdebounce: 0,\n\t\t\tshouldShow: () => false // shown on demand, when an image gets clicked\n\t\t});\n\t\tthis.#provider.update(view);\n\t}\n\n\tisImage = (node: Node) => !!node && [\n\t\tthis.md.components.imageBlock.imageBlockSchema.type(this.ctx),\n\t\tthis.md.presets.commonmark.imageSchema.type(this.ctx)\n\t].includes(node.type);\n\n\thasUrlToShow = (node: Node) => this.isImage(node) && !TRANSIENT_URL.test(node.attrs.src ?? '');\n\n\tshow = (view: EditorView, node: Node, pos: number) => {\n\t\tthis.#target = {pos, node};\n\t\tthis.#content.value = node.attrs.src ?? '';\n\t\tconst rect = this.md.prose.posToDOMRect(view, pos, pos + node.nodeSize);\n\t\tthis.#provider.show({getBoundingClientRect: () => rect});\n\t\tdom.showElement(this.#content);\n\n\t\t// The tooltip is a child of the scrolled content, so close it on scroll\n\t\t// rather than dragging it along. The listener waits a frame - selecting the\n\t\t// clicked node can scroll the editor on its own.\n\t\tthis.#scroller = view.dom.parentElement;\n\t\tcancelAnimationFrame(this.#scrollFrame);\n\t\tthis.#scrollFrame = requestAnimationFrame(() => {\n\t\t\tthis.#scroller?.addEventListener('scroll', this.hide, {once: true});\n\t\t});\n\t}\n\n\thide = () => {\n\t\tif (!this.#target) return;\n\t\tthis.#target = null;\n\t\tthis.#stopListeningToScroll();\n\t\tdom.hideElement(this.#content);\n\t\tthis.#provider.hide();\n\t}\n\n\t#stopListeningToScroll() {\n\t\tcancelAnimationFrame(this.#scrollFrame);\n\t\tthis.#scroller?.removeEventListener('scroll', this.hide);\n\t\tthis.#scroller = null;\n\t}\n\n\tupdate = (view: EditorView) => {\n\t\tif (!this.#target) return;\n\t\tconst node = view.state.doc.nodeAt(this.#target.pos);\n\t\t// the image the tooltip was opened for is gone or changed\n\t\tif (node?.type !== this.#target.node.type || node.attrs.src !== this.#target.node.attrs.src) this.hide();\n\t}\n\n\tdestroy = () => {\n\t\tthis.#stopListeningToScroll();\n\t\tthis.#provider.destroy();\n\t\tthis.#content.remove();\n\t}\n\n\t#onChange = (e: events.ChangeEvent<string>) => {\n\t\tconst target = this.#target;\n\t\tthis.hide();\n\t\tif (!target) return;\n\n\t\tconst view = this.ctx.get(this.md.core.editorViewCtx);\n\t\tif (!view.editable) return;\n\n\t\tconst node = view.state.doc.nodeAt(target.pos);\n\t\tif (!this.isImage(node) || node.attrs.src === e.value) return;\n\t\tview.dispatch(view.state.tr.setNodeAttribute(target.pos, 'src', e.value ?? ''));\n\t}\n}\n\nexport function createImageEdit(md: typeof milkdown) {\n\tconst tooltip = md.plugins.tooltip.tooltipFactory('MARKDOWN_IMAGE_EDIT');\n\tlet imageEditView: ImageEditView;\n\n\tconst configure = (ctx: milkdown.ctx.Ctx) => {\n\t\tctx.set(tooltip.key, {\n\t\t\tprops: {\n\t\t\t\t// any click closes the tooltip - one that lands on an image reopens\n\t\t\t\t// it below, as clicks are handled on mouseup\n\t\t\t\thandleDOMEvents: {\n\t\t\t\t\tmousedown: () => { imageEditView?.hide() }\n\t\t\t\t},\n\t\t\t\thandleClickOn: (view, _pos, node, nodePos, _event, direct) => {\n\t\t\t\t\t// the url is an editing affordance, a read only view shows nothing\n\t\t\t\t\tif (!direct || !view.editable || !imageEditView?.hasUrlToShow(node)) return false;\n\t\t\t\t\timageEditView.show(view, node, nodePos);\n\t\t\t\t\treturn false; // let the editor select the node as usual\n\t\t\t\t}\n\t\t\t},\n\t\t\tview: (view) => (imageEditView = new ImageEditView(ctx, md, view))\n\t\t});\n\t};\n\n\treturn {configure, plugins: tooltip};\n}\n"]}
@@ -4,6 +4,7 @@ export * from './htmlBlock';
4
4
  export * from './calloutBlock';
5
5
  export * from './emojiPicker';
6
6
  export * from './linkEdit';
7
+ export * from './imageEdit';
7
8
  export type DefineFeature<TConfig = unknown> = (editor: milkdown.core.Editor, config?: TConfig) => void | Promise<void>;
8
9
  export declare function configureFeatures(features: EditorFeature[], md: typeof milkdown): (ctx: milkdown.ctx.Ctx) => void;
9
10
  export declare enum EditorFeature {
@@ -12,6 +13,7 @@ export declare enum EditorFeature {
12
13
  CodeEditor = "code-editor",
13
14
  LinkTooltip = "link-tooltip",
14
15
  ImageBlock = "image-block",
16
+ ImageEdit = "image-edit",
15
17
  Toolbar = "toolbar",
16
18
  Placeholder = "placeholder",
17
19
  Table = "table",
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAWzD,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAE3B,MAAM,MAAM,aAAa,CAAC,OAAO,GAAG,OAAO,IAAI,CAC9C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAC5B,MAAM,CAAC,EAAE,OAAO,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,OAAO,QAAQ,IACvE,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,UAG7B;AAGD,oBAAY,aAAa;IACxB,SAAS,eAAe;IACxB,MAAM,WAAW;IACjB,UAAU,gBAAgB;IAE1B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,OAAO,YAAY;CACnB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CAChB,CAAC;AASF,wBAAgB,WAAW,CAC1B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAC5B,EAAE,EAAE,OAAO,QAAQ,EACnB,OAAO,EAAE;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAC,MAAM,CAAC;CAC1D,yCA8JD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAYzD,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAE5B,MAAM,MAAM,aAAa,CAAC,OAAO,GAAG,OAAO,IAAI,CAC9C,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAC5B,MAAM,CAAC,EAAE,OAAO,KACZ,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEzB,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,EAAE,EAAE,OAAO,QAAQ,IACvE,KAAK,QAAQ,CAAC,GAAG,CAAC,GAAG,UAG7B;AAGD,oBAAY,aAAa;IACxB,SAAS,eAAe;IACxB,MAAM,WAAW;IACjB,UAAU,gBAAgB;IAE1B,WAAW,iBAAiB;IAC5B,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,KAAK,UAAU;IACf,IAAI,SAAS;IACb,KAAK,UAAU;IACf,GAAG,QAAQ;IACX,OAAO,YAAY;CACnB;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CAChB,CAAC;AASF,wBAAgB,WAAW,CAC1B,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,EAC5B,EAAE,EAAE,OAAO,QAAQ,EACnB,OAAO,EAAE;IACR,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAC,MAAM,CAAC;CAC1D,yCAoKD"}
@@ -1 +1 @@
1
- import{BlockHandleView}from"./blockEdit";import{msg}from"@omegagrid/localize";import{ToolbarView}from"./toolbar";import{createPlaceHolder}from"./placeholder";import{createCodeBlockConfig,createCodeBlockView}from"./codeBlock";import{createHtmlBlockConfig,createHtmlBlockView}from"./htmlBlock";import{createTocBlock}from"./tocBlock";import{createCalloutBlock}from"./calloutBlock";import{iconSvg}from"./utils";import linkEdit from"./linkEdit";export*from"./blockEditMenu";export*from"./htmlBlock";export*from"./calloutBlock";export*from"./emojiPicker";export*from"./linkEdit";export function configureFeatures(o,e){return t=>{t.inject(e.ctx.createSlice([],"FeaturesCtx"),o)}}export var EditorFeature;!function(o){o.BlockEdit="block-edit",o.Cursor="cursor",o.CodeEditor="code-editor",o.LinkTooltip="link-tooltip",o.ImageBlock="image-block",o.Toolbar="toolbar",o.Placeholder="placeholder",o.Table="table",o.Html="html",o.Emoji="emoji",o.Toc="toc",o.Callout="callout"}(EditorFeature||(EditorFeature={}));const createModifyImageUrl=o=>e=>e?o(e):e;export function getFeatures(o,e,t){const i=t.modifyImageUrl?createModifyImageUrl(t.modifyImageUrl):null;return new Map([[EditorFeature.BlockEdit,{default:!0,init:()=>{o.config((o=>{o.set(e.plugins.block.blockConfig.key,{filterNodes:o=>!e.prose.findParent((o=>["table","blockquote"].includes(o.type.name)))(o)}),o.set(e.plugins.block.block.key,{view:()=>new BlockHandleView(o,e)})})).use(e.plugins.block.block)}}],[EditorFeature.Cursor,{default:!0,init:()=>{o.config((o=>{o.update(e.plugins.cursor.dropCursorConfig.key,(()=>({class:"md-editor-drop-cursor",width:4})))})).use(e.plugins.cursor.cursor)}}],[EditorFeature.ImageBlock,{default:!0,init:()=>{o.config((o=>{o.update(e.components.imageInline.inlineImageConfig.key,(o=>({uploadButton:iconSvg("upload","1em"),uploadPlaceholderText:msg("or paste link"),imageIcon:iconSvg("image","20px"),confirmButton:msg("Confirm"),onUpload:t.onUpload,proxyDomURL:i}))),o.update(e.components.imageBlock.imageBlockConfig.key,(o=>({uploadButton:iconSvg("upload","1em"),uploadPlaceholderText:msg("or paste link"),imageIcon:iconSvg("image","20px"),confirmButton:msg("Confirm"),captionIcon:iconSvg("comment","24px"),captionPlaceholderText:msg("Write Image Caption"),onUpload:t.onUpload,proxyDomURL:i})))})).use(e.components.imageBlock.imageBlockComponent).use(e.components.imageInline.imageInlineComponent)}}],[EditorFeature.LinkTooltip,{default:!0,init:()=>{const e=linkEdit.getPlugin();o.config(linkEdit.configure).use(e)}}],[EditorFeature.Toolbar,{default:!0,init:()=>{const t=e.plugins.tooltip.tooltipFactory("MARKDOWN_TOOLBAR");o.config((o=>{o.set(t.key,{view:t=>new ToolbarView(o,t,e)})})).use(t)}}],[EditorFeature.Placeholder,{default:!0,init:()=>{const{config:t,plugin:i}=createPlaceHolder(e);o.config((o=>{o.update(t.key,(o=>({...o})))})).use(i).use(t)}}],[EditorFeature.Table,{default:!0,init:()=>{o.config((o=>{o.update(e.components.tableBlock.tableBlockConfig.key,(o=>({renderButton:o=>{switch(o){case"add_row":case"add_col":return iconSvg("plus","16px");case"delete_row":case"delete_col":return iconSvg("trash","16px");case"align_col_left":return iconSvg("align-left","16px");case"align_col_center":return iconSvg("align-center","16px");case"align_col_right":return iconSvg("align-right","16px");case"col_drag_handle":return iconSvg("grip-lines-vertical","16px");case"row_drag_handle":return iconSvg("grip-lines","16px")}}})))})).use(e.components.tableBlock.tableBlock)}}],[EditorFeature.CodeEditor,{default:!0,init:()=>{const t=createCodeBlockConfig(e),i=createCodeBlockView(e);o.config((o=>{o.update(t.key,(o=>({})))})).use([i,t])}}],[EditorFeature.Html,{default:!0,init:()=>{const t=createHtmlBlockConfig(e),i=createHtmlBlockView(e);o.config((o=>{o.update(t.key,(o=>({})))})).use([i,t])}}],[EditorFeature.Emoji,{default:!0,init:()=>{e.plugins.emoji&&o.use(e.plugins.emoji.emoji)}}],[EditorFeature.Toc,{default:!0,init:()=>{const t=createTocBlock(e);o.config((o=>{o.update(t.tocConfig.key,(o=>({})))})).use(t.plugins)}}],[EditorFeature.Callout,{default:!0,init:()=>{o.use(createCalloutBlock(e).plugins)}}]])}
1
+ import{BlockHandleView}from"./blockEdit";import{msg}from"@omegagrid/localize";import{ToolbarView}from"./toolbar";import{createPlaceHolder}from"./placeholder";import{createCodeBlockConfig,createCodeBlockView}from"./codeBlock";import{createHtmlBlockConfig,createHtmlBlockView}from"./htmlBlock";import{createTocBlock}from"./tocBlock";import{createCalloutBlock}from"./calloutBlock";import{iconSvg}from"./utils";import linkEdit from"./linkEdit";import{createImageEdit}from"./imageEdit";export*from"./blockEditMenu";export*from"./htmlBlock";export*from"./calloutBlock";export*from"./emojiPicker";export*from"./linkEdit";export*from"./imageEdit";export function configureFeatures(e,o){return t=>{t.inject(o.ctx.createSlice([],"FeaturesCtx"),e)}}export var EditorFeature;!function(e){e.BlockEdit="block-edit",e.Cursor="cursor",e.CodeEditor="code-editor",e.LinkTooltip="link-tooltip",e.ImageBlock="image-block",e.ImageEdit="image-edit",e.Toolbar="toolbar",e.Placeholder="placeholder",e.Table="table",e.Html="html",e.Emoji="emoji",e.Toc="toc",e.Callout="callout"}(EditorFeature||(EditorFeature={}));const createModifyImageUrl=e=>o=>o?e(o):o;export function getFeatures(e,o,t){const i=t.modifyImageUrl?createModifyImageUrl(t.modifyImageUrl):null;return new Map([[EditorFeature.BlockEdit,{default:!0,init:()=>{e.config((e=>{e.set(o.plugins.block.blockConfig.key,{filterNodes:e=>!o.prose.findParent((e=>["table","blockquote"].includes(e.type.name)))(e)}),e.set(o.plugins.block.block.key,{view:()=>new BlockHandleView(e,o)})})).use(o.plugins.block.block)}}],[EditorFeature.Cursor,{default:!0,init:()=>{e.config((e=>{e.update(o.plugins.cursor.dropCursorConfig.key,(()=>({class:"md-editor-drop-cursor",width:4})))})).use(o.plugins.cursor.cursor)}}],[EditorFeature.ImageBlock,{default:!0,init:()=>{e.config((e=>{e.update(o.components.imageInline.inlineImageConfig.key,(e=>({uploadButton:iconSvg("upload","1em"),uploadPlaceholderText:msg("or paste link"),imageIcon:iconSvg("image","20px"),confirmButton:msg("Confirm"),onUpload:t.onUpload,proxyDomURL:i}))),e.update(o.components.imageBlock.imageBlockConfig.key,(e=>({uploadButton:iconSvg("upload","1em"),uploadPlaceholderText:msg("or paste link"),imageIcon:iconSvg("image","20px"),confirmButton:msg("Confirm"),captionIcon:iconSvg("comment","24px"),captionPlaceholderText:msg("Write Image Caption"),onUpload:t.onUpload,proxyDomURL:i})))})).use(o.components.imageBlock.imageBlockComponent).use(o.components.imageInline.imageInlineComponent)}}],[EditorFeature.ImageEdit,{default:!0,init:()=>{const t=createImageEdit(o);e.config(t.configure).use(t.plugins)}}],[EditorFeature.LinkTooltip,{default:!0,init:()=>{const o=linkEdit.getPlugin();e.config(linkEdit.configure).use(o)}}],[EditorFeature.Toolbar,{default:!0,init:()=>{const t=o.plugins.tooltip.tooltipFactory("MARKDOWN_TOOLBAR");e.config((e=>{e.set(t.key,{view:t=>new ToolbarView(e,t,o)})})).use(t)}}],[EditorFeature.Placeholder,{default:!0,init:()=>{const{config:t,plugin:i}=createPlaceHolder(o);e.config((e=>{e.update(t.key,(e=>({...e})))})).use(i).use(t)}}],[EditorFeature.Table,{default:!0,init:()=>{e.config((e=>{e.update(o.components.tableBlock.tableBlockConfig.key,(e=>({renderButton:e=>{switch(e){case"add_row":case"add_col":return iconSvg("plus","16px");case"delete_row":case"delete_col":return iconSvg("trash","16px");case"align_col_left":return iconSvg("align-left","16px");case"align_col_center":return iconSvg("align-center","16px");case"align_col_right":return iconSvg("align-right","16px");case"col_drag_handle":return iconSvg("grip-lines-vertical","16px");case"row_drag_handle":return iconSvg("grip-lines","16px")}}})))})).use(o.components.tableBlock.tableBlock)}}],[EditorFeature.CodeEditor,{default:!0,init:()=>{const t=createCodeBlockConfig(o),i=createCodeBlockView(o);e.config((e=>{e.update(t.key,(e=>({})))})).use([i,t])}}],[EditorFeature.Html,{default:!0,init:()=>{const t=createHtmlBlockConfig(o),i=createHtmlBlockView(o);e.config((e=>{e.update(t.key,(e=>({})))})).use([i,t])}}],[EditorFeature.Emoji,{default:!0,init:()=>{o.plugins.emoji&&e.use(o.plugins.emoji.emoji)}}],[EditorFeature.Toc,{default:!0,init:()=>{const t=createTocBlock(o);e.config((e=>{e.update(t.tocConfig.key,(e=>({})))})).use(t.plugins)}}],[EditorFeature.Callout,{default:!0,init:()=>{e.use(createCalloutBlock(o).plugins)}}]])}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// import { Editor } from '@milkdown/kit/core';\n// import { createSlice } from '@milkdown/kit/ctx';\n// import { BlockProvider, block, blockConfig } from '@milkdown/kit/plugin/block'\nimport { BlockHandleView } from './blockEdit';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { msg } from '@omegagrid/localize';\nimport { ToolbarView } from './toolbar';\nimport { createPlaceHolder } from './placeholder';\nimport { createCodeBlockConfig, createCodeBlockView } from './codeBlock';\nimport { createHtmlBlockConfig, createHtmlBlockView } from './htmlBlock';\nimport { createTocBlock } from './tocBlock';\nimport { createCalloutBlock } from './calloutBlock';\nimport { iconSvg } from './utils';\nimport linkEdit from './linkEdit';\n\nexport * from './blockEditMenu';\nexport * from './htmlBlock';\nexport * from './calloutBlock';\nexport * from './emojiPicker';\nexport * from './linkEdit';\n\nexport type DefineFeature<TConfig = unknown> = (\n\teditor: milkdown.core.Editor,\n\tconfig?: TConfig\n) => void | Promise<void>\n\nexport function configureFeatures(features: EditorFeature[], md: typeof milkdown) {\n\treturn (ctx: milkdown.ctx.Ctx) => {\n\t\tctx.inject(md.ctx.createSlice([] as EditorFeature[], 'FeaturesCtx'), features)\n\t}\n}\n\n\nexport enum EditorFeature {\n\tBlockEdit = 'block-edit',\n\tCursor = 'cursor',\n\tCodeEditor = 'code-editor',\n\t// ListItem = 'list-item',\n\tLinkTooltip = 'link-tooltip',\n\tImageBlock = 'image-block',\n\tToolbar = 'toolbar',\n\tPlaceholder = 'placeholder',\n\tTable = 'table',\n\tHtml = 'html',\n\tEmoji = 'emoji',\n\tToc = 'toc',\n\tCallout = 'callout'\n}\n\nexport type FeatureDefinition = {\n\tdefault: boolean,\n\tinit: () => void\n};\n\nconst createModifyImageUrl = (fn: (url: string) => Promise<string>|string) => {\n\treturn (url: string): Promise<string> | string => {\n\t\tif (!url) return url;\n\t\treturn fn(url);\n\t};\n};\n\nexport function getFeatures(\n\teditor: milkdown.core.Editor,\n\tmd: typeof milkdown,\n\toptions: {\n\t\tonUpload?: (file: File) => Promise<string>,\n\t\tmodifyImageUrl?: (file: string) => Promise<string>|string,\n\t}\n) {\n\tconst modifyImageUrl = options.modifyImageUrl ? createModifyImageUrl(options.modifyImageUrl) : null;\n\treturn new Map<EditorFeature, FeatureDefinition>([\n\t\t[EditorFeature.BlockEdit, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.set(md.plugins.block.blockConfig.key, {\n\t\t\t\t\t\tfilterNodes: (pos) => {\n\t\t\t\t\t\tconst filter = md.prose.findParent((node) =>\n\t\t\t\t\t\t\t['table', 'blockquote'].includes(node.type.name)\n\t\t\t\t\t\t)(pos)\n\t\t\t\t\t\tif (filter) return false\n\t\t\t\t\t\n\t\t\t\t\t\treturn true\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tctx.set(md.plugins.block.block.key, {\n\t\t\t\t\t\tview: () => new BlockHandleView(ctx, md),\n\t\t\t\t\t})\n\t\t\t\t}).use(md.plugins.block.block);\n\t\t\t\t// .config((ctx) => configureMenu(ctx, config))\n\t\t\t\t// .use(menuAPI)\n\t\t\t\t// .use(menu)\n\t\t\t}\n\t\t}], [EditorFeature.Cursor, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.plugins.cursor.dropCursorConfig.key, () => ({\n\t\t\t\t\t\tclass: 'md-editor-drop-cursor',\n\t\t\t\t\t\twidth: 4,\n\t\t\t\t\t\t// color: '#ff0000',\n\t\t\t\t\t}))\n\t\t\t\t}).use(md.plugins.cursor.cursor)\n\t\t\t}\n\t\t}], [EditorFeature.ImageBlock, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.components.imageInline.inlineImageConfig.key, (_value) => ({\n\t\t\t\t\t\tuploadButton: iconSvg('upload', '1em'),\n\t\t\t\t\t\tuploadPlaceholderText: msg('or paste link'),\n\t\t\t\t\t\timageIcon: iconSvg('image', '20px'),\n\t\t\t\t\t\tconfirmButton: msg('Confirm'),\n\t\t\t\t\t\tonUpload: options.onUpload,\n\t\t\t\t\t\tproxyDomURL: modifyImageUrl,\n\t\t\t\t\t} as any))\n\t\t\t\t\tctx.update(md.components.imageBlock.imageBlockConfig.key, (_value) => ({\n\t\t\t\t\t\tuploadButton: iconSvg('upload', '1em'),\n\t\t\t\t\t\tuploadPlaceholderText: msg('or paste link'),\n\t\t\t\t\t\timageIcon: iconSvg('image', '20px'),\n\t\t\t\t\t\tconfirmButton: msg('Confirm'),\n\t\t\t\t\t\tcaptionIcon: iconSvg('comment', '24px'),\n\t\t\t\t\t\tcaptionPlaceholderText: msg('Write Image Caption'),\n\t\t\t\t\t\tonUpload: options.onUpload,\n\t\t\t\t\t\tproxyDomURL: modifyImageUrl,\n\t\t\t\t\t} as any))\n\t\t\t\t})\n\t\t\t\t.use(md.components.imageBlock.imageBlockComponent)\n\t\t\t\t.use(md.components.imageInline.imageInlineComponent)\n\t\t\t}\n\t\t}], [EditorFeature.LinkTooltip, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\t// const toolbar = md.plugins.tooltip.tooltipFactory('MARKDOWN_LINK_EDIT_TOOLBAR');\n\t\t\t\tconst plugin = linkEdit.getPlugin();\n\t\t\t\teditor.config(linkEdit.configure)\n\t\t\t\t/*.config((ctx) => {\n\t\t\t\t\tctx.update(linkEdit.getState().key, (prev) => ({...prev}));\n\t\t\t\t})*/\n\t\t\t\t.use(plugin);\n\t\t\t}\n\t\t}], [EditorFeature.Toolbar, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst toolbar = md.plugins.tooltip.tooltipFactory('MARKDOWN_TOOLBAR');\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.set(toolbar.key, {\n\t\t\t\t\t\tview: (view) => new ToolbarView(ctx, view, md),\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.use(toolbar)\n\t\t\t}\n\t\t}], [EditorFeature.Placeholder, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst { config, plugin } = createPlaceHolder(md);\n\t\t\t\t\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(config.key, (prev) => {\n\t\t\t\t\t\treturn {...prev};\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.use(plugin)\n\t\t\t\t.use(config)\n\t\t\t}\n\t\t}], [EditorFeature.Table, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.components.tableBlock.tableBlockConfig.key, (_prev) => ({\n\t\t\t\t\t\trenderButton: (renderType) => {\n\t\t\t\t\t\t\tswitch (renderType) {\n\t\t\t\t\t\t\t\tcase 'add_row': return iconSvg('plus', '16px');\n\t\t\t\t\t\t\t\tcase 'add_col': return iconSvg('plus', '16px');\n\t\t\t\t\t\t\t\tcase 'delete_row': return iconSvg('trash', '16px');\n\t\t\t\t\t\t\t\tcase 'delete_col': return iconSvg('trash', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_left': return iconSvg('align-left', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_center': return iconSvg('align-center', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_right': return iconSvg('align-right', '16px');\n\t\t\t\t\t\t\t\tcase 'col_drag_handle': return iconSvg('grip-lines-vertical', '16px');\n\t\t\t\t\t\t\t\tcase 'row_drag_handle': return iconSvg('grip-lines', '16px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t})\n\t\t\t\t.use(md.components.tableBlock.tableBlock)\n\t\t\t}\n\t\t}], [EditorFeature.CodeEditor, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst codeBlockConfig = createCodeBlockConfig(md);\n\t\t\t\tconst codeBlockView = createCodeBlockView(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(codeBlockConfig.key, (_defaultConfig) => ({}));\n\t\t\t\t}).use([codeBlockView, codeBlockConfig]);\n\t\t\t}\n\t\t}], [EditorFeature.Html, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst htmlBlockConfig = createHtmlBlockConfig(md);\n\t\t\t\tconst htmlBlockView = createHtmlBlockView(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(htmlBlockConfig.key, (_defaultConfig) => ({}));\n\t\t\t\t}).use([htmlBlockView, htmlBlockConfig]);\n\t\t\t}\n\t\t}], [EditorFeature.Emoji, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tif (md.plugins.emoji) editor.use(md.plugins.emoji.emoji);\n\t\t\t}\n\t\t}], [EditorFeature.Toc, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst toc = createTocBlock(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(toc.tocConfig.key, (_d) => ({}));\n\t\t\t\t}).use(toc.plugins);\n\t\t\t}\n\t\t}], [EditorFeature.Callout, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.use(createCalloutBlock(md).plugins);\n\t\t\t}\n\t\t}]\n\t]);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/features/index.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// import { Editor } from '@milkdown/kit/core';\n// import { createSlice } from '@milkdown/kit/ctx';\n// import { BlockProvider, block, blockConfig } from '@milkdown/kit/plugin/block'\nimport { BlockHandleView } from './blockEdit';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { msg } from '@omegagrid/localize';\nimport { ToolbarView } from './toolbar';\nimport { createPlaceHolder } from './placeholder';\nimport { createCodeBlockConfig, createCodeBlockView } from './codeBlock';\nimport { createHtmlBlockConfig, createHtmlBlockView } from './htmlBlock';\nimport { createTocBlock } from './tocBlock';\nimport { createCalloutBlock } from './calloutBlock';\nimport { iconSvg } from './utils';\nimport linkEdit from './linkEdit';\nimport { createImageEdit } from './imageEdit';\n\nexport * from './blockEditMenu';\nexport * from './htmlBlock';\nexport * from './calloutBlock';\nexport * from './emojiPicker';\nexport * from './linkEdit';\nexport * from './imageEdit';\n\nexport type DefineFeature<TConfig = unknown> = (\n\teditor: milkdown.core.Editor,\n\tconfig?: TConfig\n) => void | Promise<void>\n\nexport function configureFeatures(features: EditorFeature[], md: typeof milkdown) {\n\treturn (ctx: milkdown.ctx.Ctx) => {\n\t\tctx.inject(md.ctx.createSlice([] as EditorFeature[], 'FeaturesCtx'), features)\n\t}\n}\n\n\nexport enum EditorFeature {\n\tBlockEdit = 'block-edit',\n\tCursor = 'cursor',\n\tCodeEditor = 'code-editor',\n\t// ListItem = 'list-item',\n\tLinkTooltip = 'link-tooltip',\n\tImageBlock = 'image-block',\n\tImageEdit = 'image-edit',\n\tToolbar = 'toolbar',\n\tPlaceholder = 'placeholder',\n\tTable = 'table',\n\tHtml = 'html',\n\tEmoji = 'emoji',\n\tToc = 'toc',\n\tCallout = 'callout'\n}\n\nexport type FeatureDefinition = {\n\tdefault: boolean,\n\tinit: () => void\n};\n\nconst createModifyImageUrl = (fn: (url: string) => Promise<string>|string) => {\n\treturn (url: string): Promise<string> | string => {\n\t\tif (!url) return url;\n\t\treturn fn(url);\n\t};\n};\n\nexport function getFeatures(\n\teditor: milkdown.core.Editor,\n\tmd: typeof milkdown,\n\toptions: {\n\t\tonUpload?: (file: File) => Promise<string>,\n\t\tmodifyImageUrl?: (file: string) => Promise<string>|string,\n\t}\n) {\n\tconst modifyImageUrl = options.modifyImageUrl ? createModifyImageUrl(options.modifyImageUrl) : null;\n\treturn new Map<EditorFeature, FeatureDefinition>([\n\t\t[EditorFeature.BlockEdit, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.set(md.plugins.block.blockConfig.key, {\n\t\t\t\t\t\tfilterNodes: (pos) => {\n\t\t\t\t\t\tconst filter = md.prose.findParent((node) =>\n\t\t\t\t\t\t\t['table', 'blockquote'].includes(node.type.name)\n\t\t\t\t\t\t)(pos)\n\t\t\t\t\t\tif (filter) return false\n\t\t\t\t\t\n\t\t\t\t\t\treturn true\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tctx.set(md.plugins.block.block.key, {\n\t\t\t\t\t\tview: () => new BlockHandleView(ctx, md),\n\t\t\t\t\t})\n\t\t\t\t}).use(md.plugins.block.block);\n\t\t\t\t// .config((ctx) => configureMenu(ctx, config))\n\t\t\t\t// .use(menuAPI)\n\t\t\t\t// .use(menu)\n\t\t\t}\n\t\t}], [EditorFeature.Cursor, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.plugins.cursor.dropCursorConfig.key, () => ({\n\t\t\t\t\t\tclass: 'md-editor-drop-cursor',\n\t\t\t\t\t\twidth: 4,\n\t\t\t\t\t\t// color: '#ff0000',\n\t\t\t\t\t}))\n\t\t\t\t}).use(md.plugins.cursor.cursor)\n\t\t\t}\n\t\t}], [EditorFeature.ImageBlock, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.components.imageInline.inlineImageConfig.key, (_value) => ({\n\t\t\t\t\t\tuploadButton: iconSvg('upload', '1em'),\n\t\t\t\t\t\tuploadPlaceholderText: msg('or paste link'),\n\t\t\t\t\t\timageIcon: iconSvg('image', '20px'),\n\t\t\t\t\t\tconfirmButton: msg('Confirm'),\n\t\t\t\t\t\tonUpload: options.onUpload,\n\t\t\t\t\t\tproxyDomURL: modifyImageUrl,\n\t\t\t\t\t} as any))\n\t\t\t\t\tctx.update(md.components.imageBlock.imageBlockConfig.key, (_value) => ({\n\t\t\t\t\t\tuploadButton: iconSvg('upload', '1em'),\n\t\t\t\t\t\tuploadPlaceholderText: msg('or paste link'),\n\t\t\t\t\t\timageIcon: iconSvg('image', '20px'),\n\t\t\t\t\t\tconfirmButton: msg('Confirm'),\n\t\t\t\t\t\tcaptionIcon: iconSvg('comment', '24px'),\n\t\t\t\t\t\tcaptionPlaceholderText: msg('Write Image Caption'),\n\t\t\t\t\t\tonUpload: options.onUpload,\n\t\t\t\t\t\tproxyDomURL: modifyImageUrl,\n\t\t\t\t\t} as any))\n\t\t\t\t})\n\t\t\t\t.use(md.components.imageBlock.imageBlockComponent)\n\t\t\t\t.use(md.components.imageInline.imageInlineComponent)\n\t\t\t}\n\t\t}], [EditorFeature.ImageEdit, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst imageEdit = createImageEdit(md);\n\t\t\t\teditor.config(imageEdit.configure).use(imageEdit.plugins);\n\t\t\t}\n\t\t}], [EditorFeature.LinkTooltip, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\t// const toolbar = md.plugins.tooltip.tooltipFactory('MARKDOWN_LINK_EDIT_TOOLBAR');\n\t\t\t\tconst plugin = linkEdit.getPlugin();\n\t\t\t\teditor.config(linkEdit.configure)\n\t\t\t\t/*.config((ctx) => {\n\t\t\t\t\tctx.update(linkEdit.getState().key, (prev) => ({...prev}));\n\t\t\t\t})*/\n\t\t\t\t.use(plugin);\n\t\t\t}\n\t\t}], [EditorFeature.Toolbar, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst toolbar = md.plugins.tooltip.tooltipFactory('MARKDOWN_TOOLBAR');\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.set(toolbar.key, {\n\t\t\t\t\t\tview: (view) => new ToolbarView(ctx, view, md),\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.use(toolbar)\n\t\t\t}\n\t\t}], [EditorFeature.Placeholder, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst { config, plugin } = createPlaceHolder(md);\n\t\t\t\t\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(config.key, (prev) => {\n\t\t\t\t\t\treturn {...prev};\n\t\t\t\t\t});\n\t\t\t\t})\n\t\t\t\t.use(plugin)\n\t\t\t\t.use(config)\n\t\t\t}\n\t\t}], [EditorFeature.Table, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(md.components.tableBlock.tableBlockConfig.key, (_prev) => ({\n\t\t\t\t\t\trenderButton: (renderType) => {\n\t\t\t\t\t\t\tswitch (renderType) {\n\t\t\t\t\t\t\t\tcase 'add_row': return iconSvg('plus', '16px');\n\t\t\t\t\t\t\t\tcase 'add_col': return iconSvg('plus', '16px');\n\t\t\t\t\t\t\t\tcase 'delete_row': return iconSvg('trash', '16px');\n\t\t\t\t\t\t\t\tcase 'delete_col': return iconSvg('trash', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_left': return iconSvg('align-left', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_center': return iconSvg('align-center', '16px');\n\t\t\t\t\t\t\t\tcase 'align_col_right': return iconSvg('align-right', '16px');\n\t\t\t\t\t\t\t\tcase 'col_drag_handle': return iconSvg('grip-lines-vertical', '16px');\n\t\t\t\t\t\t\t\tcase 'row_drag_handle': return iconSvg('grip-lines', '16px');\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}));\n\t\t\t\t})\n\t\t\t\t.use(md.components.tableBlock.tableBlock)\n\t\t\t}\n\t\t}], [EditorFeature.CodeEditor, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst codeBlockConfig = createCodeBlockConfig(md);\n\t\t\t\tconst codeBlockView = createCodeBlockView(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(codeBlockConfig.key, (_defaultConfig) => ({}));\n\t\t\t\t}).use([codeBlockView, codeBlockConfig]);\n\t\t\t}\n\t\t}], [EditorFeature.Html, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst htmlBlockConfig = createHtmlBlockConfig(md);\n\t\t\t\tconst htmlBlockView = createHtmlBlockView(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(htmlBlockConfig.key, (_defaultConfig) => ({}));\n\t\t\t\t}).use([htmlBlockView, htmlBlockConfig]);\n\t\t\t}\n\t\t}], [EditorFeature.Emoji, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tif (md.plugins.emoji) editor.use(md.plugins.emoji.emoji);\n\t\t\t}\n\t\t}], [EditorFeature.Toc, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\tconst toc = createTocBlock(md);\n\t\t\t\teditor.config((ctx) => {\n\t\t\t\t\tctx.update(toc.tocConfig.key, (_d) => ({}));\n\t\t\t\t}).use(toc.plugins);\n\t\t\t}\n\t\t}], [EditorFeature.Callout, {\n\t\t\tdefault: true,\n\t\t\tinit: () => {\n\t\t\t\teditor.use(createCalloutBlock(md).plugins);\n\t\t\t}\n\t\t}]\n\t]);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"markdownEditor.d.ts","sourceRoot":"","sources":["../../src/components/markdownEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAClF,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAKvC,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;gBAErB,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC;CAI5C;AAED,qBACa,cAAe,SAAQ,UAAW,YAAW,MAAM;;IAE/D,MAAM,CAAC,MAAM,4BAAsB;IAGnC,IACI,OAAO,IACM,MAAM,CADe;IACtC,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAKtB;IAGD,eAAe,SAAO;IAGtB,gBAAgB,EAAE,kBAAkB,CAAU;IAG9C,QAAQ,UAAS;IAGjB,UAAU,UAAS;IAGnB,SAAS,EAAE,cAAc,CAAC;IAG1B,MAAM,EAAE,MAAM,CAAC;IAKf,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAG1C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAC,MAAM,CAAC;IAIzD,IAAI,WAAW,IAAiD,WAAW,CAAE;IAC7E,IAAI,MAAM,yBAA0B;;IAwBpC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAOjC,iBAAiB;IAKjB,WAAW;IAKX,SAAS,GAAI,UAAU,MAAM,EAAE,cAAc,MAAM,UAGlD;IAED,YAAY;IAkBN,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IAqBhD,YAAY;IAUZ,oBAAoB;IAOpB,MAAM,wCAMJ;IAEF,MAAM;CAEN"}
1
+ {"version":3,"file":"markdownEditor.d.ts","sourceRoot":"","sources":["../../src/components/markdownEditor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,kBAAkB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAElF,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAMvC,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAKzD,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,CAAC,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,YAAY,CAAC;gBAErB,IAAI,EAAE,OAAO,CAAC,iBAAiB,CAAC;CAI5C;AAED,qBACa,cAAe,SAAQ,UAAW,YAAW,MAAM;;IAE/D,MAAM,CAAC,MAAM,4BAAsB;IAGnC,IACI,OAAO,IACM,MAAM,CADe;IACtC,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAMtB;IAGD,eAAe,SAAO;IAGtB,gBAAgB,EAAE,kBAAkB,CAAU;IAG9C,QAAQ,UAAS;IAGjB,UAAU,UAAS;IAGnB,SAAS,EAAE,cAAc,CAAC;IAG1B,MAAM,EAAE,MAAM,CAAC;IAMf,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAG1C,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,GAAC,MAAM,CAAC;IAIzD,IAAI,WAAW,IAAiD,WAAW,CAAE;IAC7E,IAAI,MAAM,yBAA0B;;IAqFpC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;IAOjC,iBAAiB;IAKjB,WAAW;IAKX,SAAS,GAAI,UAAU,MAAM,EAAE,cAAc,MAAM,UAGlD;IAED,YAAY;IAkBN,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC;IAuBhD,YAAY;IAUZ,oBAAoB;IAOpB,MAAM,wCAMJ;IAEF,MAAM;CAEN"}
@@ -1,7 +1,7 @@
1
- var _MarkdownEditor_instances,_MarkdownEditor_content,_MarkdownEditor_mouseIn,_MarkdownEditor_editor,_MarkdownEditor_applySpellcheck,__decorate=this&&this.__decorate||function(t,e,r,o){var i,d=arguments.length,n=d<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,r):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,r,o);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(n=(d<3?i(n):d>3?i(e,r,n):i(e,r))||n);return d>3&&n&&Object.defineProperty(e,r,n),n},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(t,e,r,o){if("a"===r&&!o)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!o:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===r?o:"a"===r?o.call(t):o?o.value:e.get(t)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(t,e,r,o,i){if("m"===o)throw new TypeError("Private method is not writable");if("a"===o&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===o?i.call(t,r):i?i.value=r:e.set(t,r),r};import{dom,events}from"@omegagrid/core";import{LitElement,html}from"lit";import{customElement,query,property}from"lit/decorators.js";import{style}from"./markdownEditor.style";import styles from"./styles";import{createEditor}from"../utils";export class MarkdownLinkEvent extends Event{constructor(t){super("markdown.link",{bubbles:!0,composed:!0,cancelable:!0}),Object.assign(this,t)}}let MarkdownEditor=class extends LitElement{get content(){return __classPrivateFieldGet(this,_MarkdownEditor_content,"f")}set content(t){__classPrivateFieldSet(this,_MarkdownEditor_content,t,"f"),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")?.destroy(),__classPrivateFieldSet(this,_MarkdownEditor_editor,null,"f"),this.requestUpdate()}get milkdownElm(){return this.container.firstElementChild}get editor(){return __classPrivateFieldGet(this,_MarkdownEditor_editor,"f")}constructor(){super(),_MarkdownEditor_instances.add(this),_MarkdownEditor_content.set(this,void 0),this.maxContentWidth=800,this.contentAlignment="left",this.readOnly=!1,this.spellcheck=!1,_MarkdownEditor_mouseIn.set(this,!1),_MarkdownEditor_editor.set(this,void 0),this._onChange=(t,e)=>{__classPrivateFieldSet(this,_MarkdownEditor_content,t,"f"),this.dispatchEvent(new events.ChangeEvent({value:t,oldValue:e}))},this.render=()=>html`
1
+ var _MarkdownEditor_instances,_MarkdownEditor_content,_MarkdownEditor_mouseIn,_MarkdownEditor_scrollTop,_MarkdownEditor_editor,_MarkdownEditor_onScroll,_MarkdownEditor_closeCodeEditing,_MarkdownEditor_restoreScroll,_MarkdownEditor_applySpellcheck,__decorate=this&&this.__decorate||function(t,e,o,r){var i,d=arguments.length,n=d<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(t,e,o,r);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(n=(d<3?i(n):d>3?i(e,o,n):i(e,o))||n);return d>3&&n&&Object.defineProperty(e,o,n),n},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(t,e,o,r){if("a"===o&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?r:"a"===o?r.call(t):r?r.value:e.get(t)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(t,e,o,r,i){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?i.call(t,o):i?i.value=o:e.set(t,o),o};import{dom,events}from"@omegagrid/core";import{LitElement,html}from"lit";import{customElement,query,property}from"lit/decorators.js";import{style}from"./markdownEditor.style";import styles from"./styles";import{createEditor}from"../utils";const SCROLL_SETTLE_TIMEOUT=2e3;export class MarkdownLinkEvent extends Event{constructor(t){super("markdown.link",{bubbles:!0,composed:!0,cancelable:!0}),Object.assign(this,t)}}let MarkdownEditor=class extends LitElement{get content(){return __classPrivateFieldGet(this,_MarkdownEditor_content,"f")}set content(t){t!==__classPrivateFieldGet(this,_MarkdownEditor_content,"f")&&__classPrivateFieldSet(this,_MarkdownEditor_scrollTop,0,"f"),__classPrivateFieldSet(this,_MarkdownEditor_content,t,"f"),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")?.destroy(),__classPrivateFieldSet(this,_MarkdownEditor_editor,null,"f"),this.requestUpdate()}get milkdownElm(){return this.container.firstElementChild}get editor(){return __classPrivateFieldGet(this,_MarkdownEditor_editor,"f")}constructor(){super(),_MarkdownEditor_instances.add(this),_MarkdownEditor_content.set(this,void 0),this.maxContentWidth=800,this.contentAlignment="left",this.readOnly=!1,this.spellcheck=!1,_MarkdownEditor_mouseIn.set(this,!1),_MarkdownEditor_scrollTop.set(this,0),_MarkdownEditor_editor.set(this,void 0),_MarkdownEditor_onScroll.set(this,(()=>{__classPrivateFieldSet(this,_MarkdownEditor_scrollTop,this.milkdownElm?.scrollTop??0,"f"),__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_closeCodeEditing).call(this)})),this._onChange=(t,e)=>{__classPrivateFieldSet(this,_MarkdownEditor_content,t,"f"),this.dispatchEvent(new events.ChangeEvent({value:t,oldValue:e}))},this.render=()=>html`
2
2
  <style>
3
3
  .ProseMirror.editor { max-width: ${this.maxContentWidth}px; }
4
4
  </style>
5
5
  <div id="container" spellcheck="${this.spellcheck}"></div>
6
6
  <og-slider direction="vertical" hidden></og-slider>
7
- `,dom.on(this,"click","a",((t,e)=>{if(!this.dispatchEvent(new MarkdownLinkEvent({href:e.getAttribute("href"),a:e,origEvent:t})))return void t.preventDefault();const r=e.getAttribute("href");r&&r.startsWith("#")&&(t.preventDefault(),this.scrollToSelector(r))}))}scrollToSelector(t){const e=this.milkdownElm.querySelector(t);e&&(this.milkdownElm.scrollTop=e.offsetTop,this.slider.updatePosition())}connectedCallback(){super.connectedCallback(),this.requestUpdate()}updateWidth(){const t=Math.min(this.maxContentWidth,this.clientWidth);this.milkdownElm.style.width=`${t}px`}firstUpdated(){this.slider.hide(),this.addEventListener("mouseenter",(()=>{__classPrivateFieldSet(this,_MarkdownEditor_mouseIn,!0,"f"),this.updateSlider()})),this.addEventListener("mouseleave",(()=>{__classPrivateFieldSet(this,_MarkdownEditor_mouseIn,!1,"f"),this.updateSlider()})),this.slider.addEventListener("slideEnd",(()=>{this.updateSlider()}))}async updated(t){t.has("spellcheck")&&__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_applySpellcheck).call(this),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")||(__classPrivateFieldSet(this,_MarkdownEditor_editor,await createEditor({container:this.container,content:this.content,readOnly:this.readOnly,onUpload:this.onUpload,onChange:this._onChange,modifyImageUrl:this.modifyImageUrl}),"f"),__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_applySpellcheck).call(this),this.slider.attachElement(this.milkdownElm))}updateSlider(){this.slider&&this.milkdownElm&&(this.milkdownElm.scrollHeight>this.milkdownElm.clientHeight&&(__classPrivateFieldGet(this,_MarkdownEditor_mouseIn,"f")||this.slider.sliding)?this.slider.show():this.slider.hide())}disconnectedCallback(){super.disconnectedCallback(),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")?.destroy(),__classPrivateFieldSet(this,_MarkdownEditor_editor,null,"f"),dom.empty(this.container)}layout(){}};_MarkdownEditor_content=new WeakMap,_MarkdownEditor_mouseIn=new WeakMap,_MarkdownEditor_editor=new WeakMap,_MarkdownEditor_instances=new WeakSet,_MarkdownEditor_applySpellcheck=function(){this.milkdownElm?.setAttribute("spellcheck",String(this.spellcheck))},MarkdownEditor.styles=[style,...styles],__decorate([property({type:String})],MarkdownEditor.prototype,"content",null),__decorate([property({type:Number})],MarkdownEditor.prototype,"maxContentWidth",void 0),__decorate([property({type:String,reflect:!0})],MarkdownEditor.prototype,"contentAlignment",void 0),__decorate([property({type:Boolean,reflect:!0})],MarkdownEditor.prototype,"readOnly",void 0),__decorate([property({type:Boolean})],MarkdownEditor.prototype,"spellcheck",void 0),__decorate([query("#container")],MarkdownEditor.prototype,"container",void 0),__decorate([query("og-slider")],MarkdownEditor.prototype,"slider",void 0),__decorate([property({type:Object})],MarkdownEditor.prototype,"onUpload",void 0),__decorate([property({type:Object})],MarkdownEditor.prototype,"modifyImageUrl",void 0),MarkdownEditor=__decorate([customElement("og-markdown-editor")],MarkdownEditor);export{MarkdownEditor};
7
+ `,dom.on(this,"click","a",((t,e)=>{if(!this.dispatchEvent(new MarkdownLinkEvent({href:e.getAttribute("href"),a:e,origEvent:t})))return void t.preventDefault();const o=e.getAttribute("href");o&&o.startsWith("#")&&(t.preventDefault(),this.scrollToSelector(o))}))}scrollToSelector(t){const e=this.milkdownElm.querySelector(t);e&&(this.milkdownElm.scrollTop=e.offsetTop,this.slider.updatePosition())}connectedCallback(){super.connectedCallback(),this.requestUpdate()}updateWidth(){const t=Math.min(this.maxContentWidth,this.clientWidth);this.milkdownElm.style.width=`${t}px`}firstUpdated(){this.slider.hide(),this.addEventListener("mouseenter",(()=>{__classPrivateFieldSet(this,_MarkdownEditor_mouseIn,!0,"f"),this.updateSlider()})),this.addEventListener("mouseleave",(()=>{__classPrivateFieldSet(this,_MarkdownEditor_mouseIn,!1,"f"),this.updateSlider()})),this.slider.addEventListener("slideEnd",(()=>{this.updateSlider()}))}async updated(t){t.has("spellcheck")&&__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_applySpellcheck).call(this),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")||(__classPrivateFieldSet(this,_MarkdownEditor_editor,await createEditor({container:this.container,content:this.content,readOnly:this.readOnly,onUpload:this.onUpload,onChange:this._onChange,modifyImageUrl:this.modifyImageUrl}),"f"),__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_applySpellcheck).call(this),this.slider.attachElement(this.milkdownElm),this.milkdownElm.addEventListener("scroll",__classPrivateFieldGet(this,_MarkdownEditor_onScroll,"f")),__classPrivateFieldGet(this,_MarkdownEditor_instances,"m",_MarkdownEditor_restoreScroll).call(this))}updateSlider(){this.slider&&this.milkdownElm&&(this.milkdownElm.scrollHeight>this.milkdownElm.clientHeight&&(__classPrivateFieldGet(this,_MarkdownEditor_mouseIn,"f")||this.slider.sliding)?this.slider.show():this.slider.hide())}disconnectedCallback(){super.disconnectedCallback(),__classPrivateFieldGet(this,_MarkdownEditor_editor,"f")?.destroy(),__classPrivateFieldSet(this,_MarkdownEditor_editor,null,"f"),dom.empty(this.container)}layout(){}};_MarkdownEditor_content=new WeakMap,_MarkdownEditor_mouseIn=new WeakMap,_MarkdownEditor_scrollTop=new WeakMap,_MarkdownEditor_editor=new WeakMap,_MarkdownEditor_onScroll=new WeakMap,_MarkdownEditor_instances=new WeakSet,_MarkdownEditor_closeCodeEditing=function(){const t=this.milkdownElm;t&&(t.querySelectorAll("og-code-block").forEach((t=>t.endEdit())),t.querySelectorAll("og-markdown-html-block").forEach((t=>{t.editing&&(t.editor?.model&&t.commit(),t.editor?.endEdit())})))},_MarkdownEditor_restoreScroll=function(){const t=this.milkdownElm,e=t?.firstElementChild,o=__classPrivateFieldGet(this,_MarkdownEditor_scrollTop,"f");if(!e||!o)return;let r=-1;const i=()=>!(!e.isConnected||r>-1&&Math.abs(t.scrollTop-r)>1||(r=Math.max(0,Math.min(o,t.scrollHeight-t.clientHeight)),t.scrollTop=r,this.slider.value=r,this.slider.updatePosition(),0));t.style.overflowAnchor="none",e.style.overflowAnchor="none";const d=new ResizeObserver((()=>{i()||n()})),n=()=>{clearTimeout(s),d.disconnect(),t.style.overflowAnchor="",e.style.overflowAnchor=""},s=setTimeout(n,2e3);i(),d.observe(e)},_MarkdownEditor_applySpellcheck=function(){this.milkdownElm?.setAttribute("spellcheck",String(this.spellcheck))},MarkdownEditor.styles=[style,...styles],__decorate([property({type:String})],MarkdownEditor.prototype,"content",null),__decorate([property({type:Number})],MarkdownEditor.prototype,"maxContentWidth",void 0),__decorate([property({type:String,reflect:!0})],MarkdownEditor.prototype,"contentAlignment",void 0),__decorate([property({type:Boolean,reflect:!0})],MarkdownEditor.prototype,"readOnly",void 0),__decorate([property({type:Boolean})],MarkdownEditor.prototype,"spellcheck",void 0),__decorate([query("#container")],MarkdownEditor.prototype,"container",void 0),__decorate([query("og-slider")],MarkdownEditor.prototype,"slider",void 0),__decorate([property({type:Object})],MarkdownEditor.prototype,"onUpload",void 0),__decorate([property({type:Object})],MarkdownEditor.prototype,"modifyImageUrl",void 0),MarkdownEditor=__decorate([customElement("og-markdown-editor")],MarkdownEditor);export{MarkdownEditor};
@@ -1 +1 @@
1
- {"version":3,"file":"markdownEditor.js","sourceRoot":"","sources":["../../src/components/markdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { dom, events, HorizontalPosition, Layout, Slider } from '@omegagrid/core';\nimport { LitElement, html } from 'lit';\nimport { customElement, query, property } from 'lit/decorators.js';\nimport { style } from './markdownEditor.style';\nimport styles from './styles';\nimport { createEditor } from '../utils';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\n\nexport class MarkdownLinkEvent extends Event {\n\treadonly href: string;\n\treadonly a: HTMLAnchorElement;\n\treadonly origEvent: PointerEvent;\n\n\tconstructor(args: Partial<MarkdownLinkEvent>) {\n\t\tsuper(`markdown.link`, {bubbles: true, composed: true, cancelable: true});\n\t\tObject.assign(this, args);\n\t}\n}\n\n@customElement('og-markdown-editor')\nexport class MarkdownEditor extends LitElement implements Layout {\n\n\tstatic styles = [style, ...styles];\n\n\t#content: string\n\t@property({type: String})\n\tget content() { return this.#content }\n\tset content(val: string) {\n\t\tthis.#content = val;\n\t\tthis.#editor?.destroy();\n\t\tthis.#editor = null;\n\t\tthis.requestUpdate();\n\t}\n\n\t@property({type: Number})\n\tmaxContentWidth = 800;\n\n\t@property({type: String, reflect: true})\n\tcontentAlignment: HorizontalPosition = 'left';\n\n\t@property({type: Boolean, reflect: true})\n\treadOnly = false;\n\n\t@property({type: Boolean})\n\tspellcheck = false;\n\n\t@query('#container')\n\tcontainer: HTMLDivElement;\n\n\t@query('og-slider')\n\tslider: Slider;\n\n\t#mouseIn = false;\n\n\t@property({type: Object})\n\tonUpload: (file: File) => Promise<string>;\n\n\t@property({type: Object})\n\tmodifyImageUrl: (file: string) => Promise<string>|string;\n\n\t#editor: milkdown.core.Editor;\n\n\tget milkdownElm () { return this.container.firstElementChild as HTMLElement }\n\tget editor() { return this.#editor }\n\n\tconstructor() {\n\t\tsuper();\n\t\tdom.on(this, 'click', 'a', (e: PointerEvent, a) => {\n\t\t\tconst canceled = !this.dispatchEvent(new MarkdownLinkEvent({\n\t\t\t\thref: a.getAttribute('href'), \n\t\t\t\ta: a as HTMLAnchorElement,\n\t\t\t\torigEvent: e\n\t\t\t}));\n\n\t\t\tif (canceled) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst href = a.getAttribute('href');\n\t\t\tif (href && href.startsWith('#')) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.scrollToSelector(href);\n\t\t\t}\n\t\t});\n\t}\n\n\tscrollToSelector(selector: string) {\n\t\tconst elm = this.milkdownElm.querySelector(selector) as HTMLElement;\n\t\tif (!elm) return;\n\t\tthis.milkdownElm.scrollTop = elm.offsetTop;\n\t\tthis.slider.updatePosition();\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.requestUpdate();\n\t}\n\n\tupdateWidth() {\n\t\tconst width = Math.min(this.maxContentWidth, this.clientWidth);\n\t\tthis.milkdownElm.style.width = `${width}px`;\n\t}\n\n\t_onChange = (markdown: string, prevMarkdown: string) => {\n\t\tthis.#content = markdown;\n\t\tthis.dispatchEvent(new events.ChangeEvent({value: markdown, oldValue: prevMarkdown}));\n\t}\n\n\tfirstUpdated() {\n\t\tthis.slider.hide();\n\n\t\tthis.addEventListener('mouseenter', () => {\n\t\t\tthis.#mouseIn = true;\n\t\t\tthis.updateSlider();\n\t\t});\n\n\t\tthis.addEventListener('mouseleave', () => {\n\t\t\tthis.#mouseIn = false;\n\t\t\tthis.updateSlider();\n\t\t});\n\n\t\tthis.slider.addEventListener('slideEnd', () => {\n\t\t\tthis.updateSlider();\n\t\t});\n\t}\n\n\tasync updated(changed: Map<PropertyKey, unknown>) {\n\t\tif (changed.has('spellcheck')) this.#applySpellcheck();\n\t\tif (this.#editor) return;\n\t\tthis.#editor = await createEditor({\n\t\t\tcontainer: this.container,\n\t\t\tcontent: this.content,\n\t\t\treadOnly: this.readOnly,\n\t\t\tonUpload: this.onUpload,\n\t\t\tonChange: this._onChange,\n\t\t\tmodifyImageUrl: this.modifyImageUrl\n\t\t});\n\t\tthis.#applySpellcheck();\n\t\tthis.slider.attachElement(this.milkdownElm);\n\t}\n\n\t// The browser only re-checks spelling on the element it edits, so set the\n\t// attribute on the ProseMirror editable itself (not just the container).\n\t#applySpellcheck() {\n\t\tthis.milkdownElm?.setAttribute('spellcheck', String(this.spellcheck));\n\t}\n\n\tupdateSlider() {\n\t\tif (!this.slider || !this.milkdownElm) return;\n\t\tconst needsScroll = this.milkdownElm.scrollHeight > this.milkdownElm.clientHeight;\n\t\tif (needsScroll && (this.#mouseIn || this.slider.sliding)) {\n\t\t\tthis.slider.show();\n\t\t} else {\n\t\t\tthis.slider.hide();\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.#editor?.destroy();\n\t\tthis.#editor = null;\n\t\tdom.empty(this.container);\n\t}\n\n\trender = () => html`\n\t\t<style>\n\t\t\t.ProseMirror.editor { max-width: ${this.maxContentWidth}px; }\n\t\t</style>\n\t\t<div id=\"container\" spellcheck=\"${this.spellcheck}\"></div>\n\t\t<og-slider direction=\"vertical\" hidden></og-slider>\n\t`;\n\n\tlayout() { }\n\n}"]}
1
+ {"version":3,"file":"markdownEditor.js","sourceRoot":"","sources":["../../src/components/markdownEditor.ts"],"names":[],"mappings":"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","sourcesContent":["import { dom, events, HorizontalPosition, Layout, Slider } from '@omegagrid/core';\nimport { CodeBlock } from '@omegagrid/code';\nimport { LitElement, html } from 'lit';\nimport { customElement, query, property } from 'lit/decorators.js';\nimport { style } from './markdownEditor.style';\nimport styles from './styles';\nimport { createEditor } from '../utils';\nimport { HtmlBlockComponent } from './features/htmlBlock';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\n\n// how long the restored scroll offset is held while the content renders\nconst SCROLL_SETTLE_TIMEOUT = 2000;\n\nexport class MarkdownLinkEvent extends Event {\n\treadonly href: string;\n\treadonly a: HTMLAnchorElement;\n\treadonly origEvent: PointerEvent;\n\n\tconstructor(args: Partial<MarkdownLinkEvent>) {\n\t\tsuper(`markdown.link`, {bubbles: true, composed: true, cancelable: true});\n\t\tObject.assign(this, args);\n\t}\n}\n\n@customElement('og-markdown-editor')\nexport class MarkdownEditor extends LitElement implements Layout {\n\n\tstatic styles = [style, ...styles];\n\n\t#content: string\n\t@property({type: String})\n\tget content() { return this.#content }\n\tset content(val: string) {\n\t\tif (val !== this.#content) this.#scrollTop = 0; // another document starts at the top\n\t\tthis.#content = val;\n\t\tthis.#editor?.destroy();\n\t\tthis.#editor = null;\n\t\tthis.requestUpdate();\n\t}\n\n\t@property({type: Number})\n\tmaxContentWidth = 800;\n\n\t@property({type: String, reflect: true})\n\tcontentAlignment: HorizontalPosition = 'left';\n\n\t@property({type: Boolean, reflect: true})\n\treadOnly = false;\n\n\t@property({type: Boolean})\n\tspellcheck = false;\n\n\t@query('#container')\n\tcontainer: HTMLDivElement;\n\n\t@query('og-slider')\n\tslider: Slider;\n\n\t#mouseIn = false;\n\t#scrollTop = 0;\n\n\t@property({type: Object})\n\tonUpload: (file: File) => Promise<string>;\n\n\t@property({type: Object})\n\tmodifyImageUrl: (file: string) => Promise<string>|string;\n\n\t#editor: milkdown.core.Editor;\n\n\tget milkdownElm () { return this.container.firstElementChild as HTMLElement }\n\tget editor() { return this.#editor }\n\n\tconstructor() {\n\t\tsuper();\n\t\tdom.on(this, 'click', 'a', (e: PointerEvent, a) => {\n\t\t\tconst canceled = !this.dispatchEvent(new MarkdownLinkEvent({\n\t\t\t\thref: a.getAttribute('href'), \n\t\t\t\ta: a as HTMLAnchorElement,\n\t\t\t\torigEvent: e\n\t\t\t}));\n\n\t\t\tif (canceled) {\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst href = a.getAttribute('href');\n\t\t\tif (href && href.startsWith('#')) {\n\t\t\t\te.preventDefault();\n\t\t\t\tthis.scrollToSelector(href);\n\t\t\t}\n\t\t});\n\t}\n\n\t#onScroll = () => {\n\t\tthis.#scrollTop = this.milkdownElm?.scrollTop ?? 0;\n\t\tthis.#closeCodeEditing();\n\t}\n\n\t// Monaco renders into an overlay pinned to the document, so an open code editor\n\t// cannot travel with the scrolled content - close it instead of leaving it\n\t// standing over the rest of the document.\n\t#closeCodeEditing() {\n\t\tconst elm = this.milkdownElm;\n\t\tif (!elm) return;\n\n\t\telm.querySelectorAll<CodeBlock>('og-code-block').forEach(block => block.endEdit());\n\n\t\telm.querySelectorAll<HtmlBlockComponent>('og-markdown-html-block').forEach(block => {\n\t\t\tif (!block.editing) return;\n\t\t\t// the html block keeps its value in the code editor, let it save first\n\t\t\tif (block.editor?.model) block.commit();\n\t\t\tblock.editor?.endEdit();\n\t\t});\n\t}\n\n\t// The editor is destroyed on disconnect and rebuilt on reconnect (switching\n\t// tabs takes the component out of the DOM), which puts the fresh content back\n\t// to the top - put it back where the user left off.\n\t#restoreScroll() {\n\t\tconst elm = this.milkdownElm;\n\t\tconst content = elm?.firstElementChild as HTMLElement;\n\t\tconst target = this.#scrollTop;\n\t\tif (!content || !target) return;\n\n\t\tlet applied = -1;\n\t\tconst apply = () => {\n\t\t\tif (!content.isConnected) return false; // the editor is gone\n\t\t\tif (applied > -1 && Math.abs(elm.scrollTop - applied) > 1) return false; // the user took over\n\t\t\tapplied = Math.max(0, Math.min(target, elm.scrollHeight - elm.clientHeight));\n\t\t\telm.scrollTop = applied;\n\t\t\tthis.slider.value = applied;\n\t\t\tthis.slider.updatePosition();\n\t\t\treturn true;\n\t\t};\n\n\t\t// Images, code blocks and the like render asynchronously and keep growing\n\t\t// the content, so hold the offset until it settles. Scroll anchoring would\n\t\t// shift it along with the growing content, so turn it off while we do.\n\t\telm.style.overflowAnchor = 'none';\n\t\tcontent.style.overflowAnchor = 'none';\n\n\t\tconst observer = new ResizeObserver(() => { if (!apply()) stop() });\n\t\tconst stop = () => {\n\t\t\tclearTimeout(timer);\n\t\t\tobserver.disconnect();\n\t\t\telm.style.overflowAnchor = '';\n\t\t\tcontent.style.overflowAnchor = '';\n\t\t};\n\t\tconst timer = setTimeout(stop, SCROLL_SETTLE_TIMEOUT);\n\n\t\tapply();\n\t\tobserver.observe(content);\n\t}\n\n\tscrollToSelector(selector: string) {\n\t\tconst elm = this.milkdownElm.querySelector(selector) as HTMLElement;\n\t\tif (!elm) return;\n\t\tthis.milkdownElm.scrollTop = elm.offsetTop;\n\t\tthis.slider.updatePosition();\n\t}\n\n\tconnectedCallback() {\n\t\tsuper.connectedCallback();\n\t\tthis.requestUpdate();\n\t}\n\n\tupdateWidth() {\n\t\tconst width = Math.min(this.maxContentWidth, this.clientWidth);\n\t\tthis.milkdownElm.style.width = `${width}px`;\n\t}\n\n\t_onChange = (markdown: string, prevMarkdown: string) => {\n\t\tthis.#content = markdown;\n\t\tthis.dispatchEvent(new events.ChangeEvent({value: markdown, oldValue: prevMarkdown}));\n\t}\n\n\tfirstUpdated() {\n\t\tthis.slider.hide();\n\n\t\tthis.addEventListener('mouseenter', () => {\n\t\t\tthis.#mouseIn = true;\n\t\t\tthis.updateSlider();\n\t\t});\n\n\t\tthis.addEventListener('mouseleave', () => {\n\t\t\tthis.#mouseIn = false;\n\t\t\tthis.updateSlider();\n\t\t});\n\n\t\tthis.slider.addEventListener('slideEnd', () => {\n\t\t\tthis.updateSlider();\n\t\t});\n\t}\n\n\tasync updated(changed: Map<PropertyKey, unknown>) {\n\t\tif (changed.has('spellcheck')) this.#applySpellcheck();\n\t\tif (this.#editor) return;\n\t\tthis.#editor = await createEditor({\n\t\t\tcontainer: this.container,\n\t\t\tcontent: this.content,\n\t\t\treadOnly: this.readOnly,\n\t\t\tonUpload: this.onUpload,\n\t\t\tonChange: this._onChange,\n\t\t\tmodifyImageUrl: this.modifyImageUrl\n\t\t});\n\t\tthis.#applySpellcheck();\n\t\tthis.slider.attachElement(this.milkdownElm);\n\t\tthis.milkdownElm.addEventListener('scroll', this.#onScroll);\n\t\tthis.#restoreScroll();\n\t}\n\n\t// The browser only re-checks spelling on the element it edits, so set the\n\t// attribute on the ProseMirror editable itself (not just the container).\n\t#applySpellcheck() {\n\t\tthis.milkdownElm?.setAttribute('spellcheck', String(this.spellcheck));\n\t}\n\n\tupdateSlider() {\n\t\tif (!this.slider || !this.milkdownElm) return;\n\t\tconst needsScroll = this.milkdownElm.scrollHeight > this.milkdownElm.clientHeight;\n\t\tif (needsScroll && (this.#mouseIn || this.slider.sliding)) {\n\t\t\tthis.slider.show();\n\t\t} else {\n\t\t\tthis.slider.hide();\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tsuper.disconnectedCallback();\n\t\tthis.#editor?.destroy();\n\t\tthis.#editor = null;\n\t\tdom.empty(this.container);\n\t}\n\n\trender = () => html`\n\t\t<style>\n\t\t\t.ProseMirror.editor { max-width: ${this.maxContentWidth}px; }\n\t\t</style>\n\t\t<div id=\"container\" spellcheck=\"${this.spellcheck}\"></div>\n\t\t<og-slider direction=\"vertical\" hidden></og-slider>\n\t`;\n\n\tlayout() { }\n\n}"]}
@@ -18,7 +18,7 @@ import{css}from"lit";export const style=css`
18
18
  }
19
19
 
20
20
  :host([readonly]) og-markdown-block-edit,
21
- :host([readonly]) .operation-item
21
+ :host([readonly]) .operation-item,
22
22
  :host([readonly]) .image-resize-handle {
23
23
  display: none !important;
24
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"markdownEditor.style.js","sourceRoot":"","sources":["../../src/components/markdownEditor.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,0BAA0B;AAC1B,iCAAiC;AACjC,8BAA8B;AAC9B,4BAA4B;AAC5B,2BAA2B;AAC3B,wBAAwB;AACxB,+BAA+B;AAC/B,+BAA+B;AAC/B,uBAAuB;AACvB,yBAAyB;AACzB,sBAAsB;AACtB,8BAA8B;AAC9B,2BAA2B;AAC3B,2BAA2B;AAC3B,8BAA8B;AAC9B,2BAA2B;AAC3B,gCAAgC;AAChC,6BAA6B;AAG7B,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6OvB,CAAC","sourcesContent":["import { css } from \"lit\";\n\n// --markdown-font-default\n// --markdown-color-on-background\n// --markdown-color-background\n// --markdown-color-selected\n// --markdown-color-primary\n// --markdown-font-title\n// --markdown-color-inline-code\n// --markdown-color-inline-area\n// --markdown-font-code\n// --markdown-color-hover\n// --markdown-shadow-1\n// --markdown-color-on-surface\n// --markdown-color-surface\n// --markdown-color-outline\n// --markdown-color-on-inverse\n// --markdown-color-inverse\n// --markdown-color-on-secondary\n// --markdown-color-secondary\n\n\nexport const style = css`\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tcolor: var(--og-text-color);\n\t\tfont-size: var(--og-font-size);\n\t\tuser-select: text;\n\t\tbackground-color: var(--og-background-color);\n\n\t\t--markdown-color-selected: var(--og-accent-color);\n\t\t--markdown-color-outline: var(--og-accent-color);\n\t\t--markdown-color-surface: var(--og-background-color);\n\t}\n\n\t:host([readonly]) og-markdown-block-edit, \n\t:host([readonly]) .operation-item \n\t:host([readonly]) .image-resize-handle {\n\t\tdisplay: none !important;\n\t}\n\n\tog-code-block, og-code-view {\n\t\tborder: 1px solid var(--og-accent-color);\n\t\twhite-space: normal;\n\t}\n\n\t.md-editor-drop-cursor {\n\t\tbackground-color: var(--og-accent-color) !important;\n\t}\n\n\t#container {\n\t\theight: 100%;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\n\t.milkdown {\n\t\theight: 100%;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tflex-direction: row;\n\t}\n\n\tog-markdown-html-block {\n\t\tborder-width: 0;\n\t}\n\n\tdiv[contenteditable=\"true\"] og-markdown-html-block {\n\t\tborder-width: 1px;\n\t}\n\n\t:host([contentAlignment='center']) .ProseMirror {\n\t\tmargin: 0 auto;\n\t}\n\n\t:host([contentAlignment='left']) .ProseMirror {\n\t\tmargin: 0 auto 0 0;\n\t}\n\n\t:host([contentAlignment='right']) .ProseMirror {\n\t\tmargin: 0 0 0 auto;\n\t}\n\n\tbutton, input {\n\t\tborder: none;\n\t\tbackground: none;\n\t\tbox-shadow: none;\n\t}\n\t\n\tbutton:focus, input:focus {\n\t\toutline: none;\n\t}\n\t\t\n\t:focus-visible {\n\t\toutline: none;\n\t}\n\t\t\t\n\t.ProseMirror-focused {\n\t\toutline: none;\n\t}\n\t\t\n\t.ProseMirror {\n\t\tpadding: 0px 60px 60px;\n\t}\n\t\t\n\t.ProseMirror *::selection {\n\t\tbackground: var(--markdown-color-selected);\n\t\tcolor: var(--og-text-color-2);\n\t}\n\t\t\n\tli.ProseMirror-selectednode {\n\t\tbackground: var(--markdown-color-selected);\n\t\toutline: none;\n\t}\n\t\n\tli.ProseMirror-selectednode::selection {\n\t\tbackground: transparent;\n\t}\n\t\n\tli.ProseMirror-selectednode:after {\n\t\tall: unset;\n\t}\n\t\t\n\t.ProseMirror-selectednode {\n\t\tbackground: var(--markdown-color-selected);\n\t\toutline: none;\n\t\tbackground: color-mix(in srgb, var(--markdown-color-selected), transparent 60%);\n\t}\n\t\n\t.ProseMirror-selectednode::selection {\n\t\tbackground: transparent;\n\t}\n\t\t\n\t.ProseMirror[data-dragging='true'] .ProseMirror-selectednode,\n\t.ProseMirror[data-dragging='true']::selection,\n\t.ProseMirror[data-dragging='true'] *::selection {\n\t\tbackground: transparent;\n\t}\n\t\t\n\t.ProseMirror[data-dragging='true'] input::selection {\n\t\tbackground: var(--markdown-color-selected);\n\t}\n\t\t\n\timg {\n\t\tvertical-align: bottom;\n\t\tmax-width: 100%;\n\t}\n\t\t\n\timg.ProseMirror-selectednode {\n\t\tbackground: none;\n\t\toutline: 2px solid var(--markdown-color-primary);\n\t}\n\t\t\n\th1 {\n\t\tfont-size: 2em;\n\t}\n\n\th2 {\n\t\tfont-size: 1.7em;\n\t}\n\n\th3 {\n\t\tfont-size: 1.4em;\n\t}\n\n\th4 {\n\t\tfont-size: 1.2em;\n\t}\n\n\th5 {\n\t\tfont-size: 1.1em;\n\t}\n\n\th6 {\n\t\tfont-size: 1em;\n\t}\n\n\ta {\n\t\tcolor: #688DC8;\n\t\ttext-decoration: underline;\n\t}\n\t\t\n\tp {\n\t\tfont-size: var(--og-font-size);\n\t\tmargin-block-start: 0.2em;\n\t\tmargin-block-end: 0.2em;\n\t\tpadding: 0px 0;\n\t}\n\n\tcode {\n\t\tpadding: 2px 4px;\n\t\tfont-size: 90%;\n\t\tcolor: #c7254e;\n\t\tbackground-color: var(--og-background-color-3);\n\t\tborder-radius: 0;\n\t}\n\t\t\n\tpre {\n\t\tbackground: color-mix(in srgb, var(--markdown-color-inline-area), transparent 40%);\n\t\tpadding: 10px;\n\t\tborder-radius: 4px;\n\t}\n\t\n\tpre code {\n\t\tpadding: 0;\n\t\tbackground: transparent;\n\t}\n\t\t\n\tblockquote {\n\t\tposition: relative;\n\t\tpadding-left: 40px;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t\tbox-sizing: content-box;\n\t\tmargin: 4px 0;\n\t}\n\t\n\tblockquote::before {\n\t\tcontent: '';\n\t\twidth: 4px;\n\t\tleft: 0;\n\t\ttop: 4px;\n\t\tbottom: 4px;\n\t\tposition: absolute;\n\t\tbackground: var(--markdown-color-selected);\n\t\tborder-radius: 100px;\n\t}\n\t\t\n\thr {\n\t\tborder: none;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 80%);\n\t\tbackground-clip: content-box;\n\t\tpadding: 6px 0;\n\t\theight: 13px;\n\t\tposition: relative;\n\t}\n\t\n\thr.ProseMirror-selectednode {\n\t\toutline: none;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 20%);\n\t\tbackground-clip: content-box;\n\t}\n\t\n\thr.ProseMirror-selectednode::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 80%);\n\t\tpointer-events: none;\n\t}\n`;\n"]}
1
+ {"version":3,"file":"markdownEditor.style.js","sourceRoot":"","sources":["../../src/components/markdownEditor.style.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,0BAA0B;AAC1B,iCAAiC;AACjC,8BAA8B;AAC9B,4BAA4B;AAC5B,2BAA2B;AAC3B,wBAAwB;AACxB,+BAA+B;AAC/B,+BAA+B;AAC/B,uBAAuB;AACvB,yBAAyB;AACzB,sBAAsB;AACtB,8BAA8B;AAC9B,2BAA2B;AAC3B,2BAA2B;AAC3B,8BAA8B;AAC9B,2BAA2B;AAC3B,gCAAgC;AAChC,6BAA6B;AAG7B,MAAM,CAAC,MAAM,KAAK,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6OvB,CAAC","sourcesContent":["import { css } from \"lit\";\n\n// --markdown-font-default\n// --markdown-color-on-background\n// --markdown-color-background\n// --markdown-color-selected\n// --markdown-color-primary\n// --markdown-font-title\n// --markdown-color-inline-code\n// --markdown-color-inline-area\n// --markdown-font-code\n// --markdown-color-hover\n// --markdown-shadow-1\n// --markdown-color-on-surface\n// --markdown-color-surface\n// --markdown-color-outline\n// --markdown-color-on-inverse\n// --markdown-color-inverse\n// --markdown-color-on-secondary\n// --markdown-color-secondary\n\n\nexport const style = css`\n\t* {\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t:host {\n\t\tdisplay: block;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tcolor: var(--og-text-color);\n\t\tfont-size: var(--og-font-size);\n\t\tuser-select: text;\n\t\tbackground-color: var(--og-background-color);\n\n\t\t--markdown-color-selected: var(--og-accent-color);\n\t\t--markdown-color-outline: var(--og-accent-color);\n\t\t--markdown-color-surface: var(--og-background-color);\n\t}\n\n\t:host([readonly]) og-markdown-block-edit, \n\t:host([readonly]) .operation-item, \n\t:host([readonly]) .image-resize-handle {\n\t\tdisplay: none !important;\n\t}\n\n\tog-code-block, og-code-view {\n\t\tborder: 1px solid var(--og-accent-color);\n\t\twhite-space: normal;\n\t}\n\n\t.md-editor-drop-cursor {\n\t\tbackground-color: var(--og-accent-color) !important;\n\t}\n\n\t#container {\n\t\theight: 100%;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t}\n\n\t.milkdown {\n\t\theight: 100%;\n\t\tposition: relative;\n\t\toverflow: hidden;\n\t\tflex-direction: row;\n\t}\n\n\tog-markdown-html-block {\n\t\tborder-width: 0;\n\t}\n\n\tdiv[contenteditable=\"true\"] og-markdown-html-block {\n\t\tborder-width: 1px;\n\t}\n\n\t:host([contentAlignment='center']) .ProseMirror {\n\t\tmargin: 0 auto;\n\t}\n\n\t:host([contentAlignment='left']) .ProseMirror {\n\t\tmargin: 0 auto 0 0;\n\t}\n\n\t:host([contentAlignment='right']) .ProseMirror {\n\t\tmargin: 0 0 0 auto;\n\t}\n\n\tbutton, input {\n\t\tborder: none;\n\t\tbackground: none;\n\t\tbox-shadow: none;\n\t}\n\t\n\tbutton:focus, input:focus {\n\t\toutline: none;\n\t}\n\t\t\n\t:focus-visible {\n\t\toutline: none;\n\t}\n\t\t\t\n\t.ProseMirror-focused {\n\t\toutline: none;\n\t}\n\t\t\n\t.ProseMirror {\n\t\tpadding: 0px 60px 60px;\n\t}\n\t\t\n\t.ProseMirror *::selection {\n\t\tbackground: var(--markdown-color-selected);\n\t\tcolor: var(--og-text-color-2);\n\t}\n\t\t\n\tli.ProseMirror-selectednode {\n\t\tbackground: var(--markdown-color-selected);\n\t\toutline: none;\n\t}\n\t\n\tli.ProseMirror-selectednode::selection {\n\t\tbackground: transparent;\n\t}\n\t\n\tli.ProseMirror-selectednode:after {\n\t\tall: unset;\n\t}\n\t\t\n\t.ProseMirror-selectednode {\n\t\tbackground: var(--markdown-color-selected);\n\t\toutline: none;\n\t\tbackground: color-mix(in srgb, var(--markdown-color-selected), transparent 60%);\n\t}\n\t\n\t.ProseMirror-selectednode::selection {\n\t\tbackground: transparent;\n\t}\n\t\t\n\t.ProseMirror[data-dragging='true'] .ProseMirror-selectednode,\n\t.ProseMirror[data-dragging='true']::selection,\n\t.ProseMirror[data-dragging='true'] *::selection {\n\t\tbackground: transparent;\n\t}\n\t\t\n\t.ProseMirror[data-dragging='true'] input::selection {\n\t\tbackground: var(--markdown-color-selected);\n\t}\n\t\t\n\timg {\n\t\tvertical-align: bottom;\n\t\tmax-width: 100%;\n\t}\n\t\t\n\timg.ProseMirror-selectednode {\n\t\tbackground: none;\n\t\toutline: 2px solid var(--markdown-color-primary);\n\t}\n\t\t\n\th1 {\n\t\tfont-size: 2em;\n\t}\n\n\th2 {\n\t\tfont-size: 1.7em;\n\t}\n\n\th3 {\n\t\tfont-size: 1.4em;\n\t}\n\n\th4 {\n\t\tfont-size: 1.2em;\n\t}\n\n\th5 {\n\t\tfont-size: 1.1em;\n\t}\n\n\th6 {\n\t\tfont-size: 1em;\n\t}\n\n\ta {\n\t\tcolor: #688DC8;\n\t\ttext-decoration: underline;\n\t}\n\t\t\n\tp {\n\t\tfont-size: var(--og-font-size);\n\t\tmargin-block-start: 0.2em;\n\t\tmargin-block-end: 0.2em;\n\t\tpadding: 0px 0;\n\t}\n\n\tcode {\n\t\tpadding: 2px 4px;\n\t\tfont-size: 90%;\n\t\tcolor: #c7254e;\n\t\tbackground-color: var(--og-background-color-3);\n\t\tborder-radius: 0;\n\t}\n\t\t\n\tpre {\n\t\tbackground: color-mix(in srgb, var(--markdown-color-inline-area), transparent 40%);\n\t\tpadding: 10px;\n\t\tborder-radius: 4px;\n\t}\n\t\n\tpre code {\n\t\tpadding: 0;\n\t\tbackground: transparent;\n\t}\n\t\t\n\tblockquote {\n\t\tposition: relative;\n\t\tpadding-left: 40px;\n\t\tpadding-top: 0;\n\t\tpadding-bottom: 0;\n\t\tbox-sizing: content-box;\n\t\tmargin: 4px 0;\n\t}\n\t\n\tblockquote::before {\n\t\tcontent: '';\n\t\twidth: 4px;\n\t\tleft: 0;\n\t\ttop: 4px;\n\t\tbottom: 4px;\n\t\tposition: absolute;\n\t\tbackground: var(--markdown-color-selected);\n\t\tborder-radius: 100px;\n\t}\n\t\t\n\thr {\n\t\tborder: none;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 80%);\n\t\tbackground-clip: content-box;\n\t\tpadding: 6px 0;\n\t\theight: 13px;\n\t\tposition: relative;\n\t}\n\t\n\thr.ProseMirror-selectednode {\n\t\toutline: none;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 20%);\n\t\tbackground-clip: content-box;\n\t}\n\t\n\thr.ProseMirror-selectednode::before {\n\t\tcontent: '';\n\t\tposition: absolute;\n\t\tleft: 0;\n\t\ttop: 0;\n\t\tbottom: 0;\n\t\tright: 0;\n\t\tbackground-color: color-mix(in srgb, var(--markdown-color-outline), transparent 80%);\n\t\tpointer-events: none;\n\t}\n`;\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omegagrid/markdown",
3
- "version": "0.10.87",
3
+ "version": "0.10.89",
4
4
  "license": "UNLICENSED",
5
5
  "description": "Markdown view webcomponent",
6
6
  "main": "./dist/index.js",
@@ -28,11 +28,11 @@
28
28
  },
29
29
  "dependencies": {
30
30
  "@fortawesome/fontawesome-svg-core": "^7.0.1",
31
- "@omegagrid/code": "^0.10.87",
32
- "@omegagrid/core": "^0.10.87",
33
- "@omegagrid/localize": "^0.10.87",
34
- "@omegagrid/milkdown-kit": "^0.10.87",
35
- "@omegagrid/tabs": "^0.10.87",
31
+ "@omegagrid/code": "^0.10.89",
32
+ "@omegagrid/core": "^0.10.89",
33
+ "@omegagrid/localize": "^0.10.89",
34
+ "@omegagrid/milkdown-kit": "^0.10.89",
35
+ "@omegagrid/tabs": "^0.10.89",
36
36
  "lit": "^3.1.1",
37
37
  "markdown-it": "^14.1.0",
38
38
  "ts-debounce": "^4.0.0"