@omegagrid/markdown 0.10.2 → 0.10.5

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 (137) hide show
  1. package/dist/components/features/blockEdit.d.ts +23 -0
  2. package/dist/components/features/blockEdit.d.ts.map +1 -0
  3. package/dist/components/features/blockEdit.js +38 -0
  4. package/dist/components/features/blockEdit.js.map +1 -0
  5. package/dist/components/features/blockEditMenu.d.ts +16 -0
  6. package/dist/components/features/blockEditMenu.d.ts.map +1 -0
  7. package/dist/components/features/blockEditMenu.js +25 -0
  8. package/dist/components/features/blockEditMenu.js.map +1 -0
  9. package/dist/components/features/codeBlock.d.ts +31 -0
  10. package/dist/components/features/codeBlock.d.ts.map +1 -0
  11. package/dist/components/features/codeBlock.js +1 -0
  12. package/dist/components/features/codeBlock.js.map +1 -0
  13. package/dist/components/features/htmlBlock.d.ts +39 -0
  14. package/dist/components/features/htmlBlock.d.ts.map +1 -0
  15. package/dist/components/features/htmlBlock.js +52 -0
  16. package/dist/components/features/htmlBlock.js.map +1 -0
  17. package/dist/components/features/index.d.ts +28 -0
  18. package/dist/components/features/index.d.ts.map +1 -0
  19. package/dist/components/features/index.js +1 -0
  20. package/dist/components/features/index.js.map +1 -0
  21. package/dist/components/features/linkEdit/component.d.ts +12 -0
  22. package/dist/components/features/linkEdit/component.d.ts.map +1 -0
  23. package/dist/components/features/linkEdit/component.js +46 -0
  24. package/dist/components/features/linkEdit/component.js.map +1 -0
  25. package/dist/components/features/linkEdit/config.d.ts +4 -0
  26. package/dist/components/features/linkEdit/config.d.ts.map +1 -0
  27. package/dist/components/features/linkEdit/config.js +1 -0
  28. package/dist/components/features/linkEdit/config.js.map +1 -0
  29. package/dist/components/features/linkEdit/index.d.ts +10 -0
  30. package/dist/components/features/linkEdit/index.d.ts.map +1 -0
  31. package/dist/components/features/linkEdit/index.js +1 -0
  32. package/dist/components/features/linkEdit/index.js.map +1 -0
  33. package/dist/components/features/linkEdit/slices.d.ts +20 -0
  34. package/dist/components/features/linkEdit/slices.d.ts.map +1 -0
  35. package/dist/components/features/linkEdit/slices.js +1 -0
  36. package/dist/components/features/linkEdit/slices.js.map +1 -0
  37. package/dist/components/features/linkEdit/utils.d.ts +14 -0
  38. package/dist/components/features/linkEdit/utils.d.ts.map +1 -0
  39. package/dist/components/features/linkEdit/utils.js +1 -0
  40. package/dist/components/features/linkEdit/utils.js.map +1 -0
  41. package/dist/components/features/linkEdit/view.d.ts +19 -0
  42. package/dist/components/features/linkEdit/view.d.ts.map +1 -0
  43. package/dist/components/features/linkEdit/view.js +1 -0
  44. package/dist/components/features/linkEdit/view.js.map +1 -0
  45. package/dist/components/features/placeholder.d.ts +13 -0
  46. package/dist/components/features/placeholder.d.ts.map +1 -0
  47. package/dist/components/features/placeholder.js +1 -0
  48. package/dist/components/features/placeholder.js.map +1 -0
  49. package/dist/components/features/tocBlock.d.ts +21 -0
  50. package/dist/components/features/tocBlock.d.ts.map +1 -0
  51. package/dist/components/features/tocBlock.js +46 -0
  52. package/dist/components/features/tocBlock.js.map +1 -0
  53. package/dist/components/features/toolbar.d.ts +24 -0
  54. package/dist/components/features/toolbar.d.ts.map +1 -0
  55. package/dist/components/features/toolbar.js +67 -0
  56. package/dist/components/features/toolbar.js.map +1 -0
  57. package/dist/components/features/utils.d.ts +12 -0
  58. package/dist/components/features/utils.d.ts.map +1 -0
  59. package/dist/components/features/utils.js +1 -0
  60. package/dist/components/features/utils.js.map +1 -0
  61. package/dist/components/index.d.ts +4 -0
  62. package/dist/components/index.d.ts.map +1 -0
  63. package/dist/components/index.js +1 -0
  64. package/dist/components/index.js.map +1 -0
  65. package/dist/components/markdownEditor.d.ts +36 -0
  66. package/dist/components/markdownEditor.d.ts.map +1 -0
  67. package/dist/components/markdownEditor.js +7 -0
  68. package/dist/components/markdownEditor.js.map +1 -0
  69. package/dist/components/markdownEditor.style.d.ts +2 -0
  70. package/dist/components/markdownEditor.style.d.ts.map +1 -0
  71. package/dist/components/markdownEditor.style.js +230 -0
  72. package/dist/components/markdownEditor.style.js.map +1 -0
  73. package/dist/components/markdownView.d.ts +5 -0
  74. package/dist/components/markdownView.d.ts.map +1 -0
  75. package/dist/components/markdownView.js +1 -0
  76. package/dist/components/markdownView.js.map +1 -0
  77. package/dist/components/markdownView.style.d.ts +2 -0
  78. package/dist/components/markdownView.style.d.ts.map +1 -0
  79. package/dist/components/markdownView.style.js +44 -0
  80. package/dist/components/markdownView.style.js.map +1 -0
  81. package/dist/components/styles/block-edit.d.ts +2 -0
  82. package/dist/components/styles/block-edit.d.ts.map +1 -0
  83. package/dist/components/styles/block-edit.js +132 -0
  84. package/dist/components/styles/block-edit.js.map +1 -0
  85. package/dist/components/styles/cursor.d.ts +2 -0
  86. package/dist/components/styles/cursor.d.ts.map +1 -0
  87. package/dist/components/styles/cursor.js +12 -0
  88. package/dist/components/styles/cursor.js.map +1 -0
  89. package/dist/components/styles/emoji.d.ts +2 -0
  90. package/dist/components/styles/emoji.d.ts.map +1 -0
  91. package/dist/components/styles/emoji.js +14 -0
  92. package/dist/components/styles/emoji.js.map +1 -0
  93. package/dist/components/styles/image-block.d.ts +2 -0
  94. package/dist/components/styles/image-block.d.ts.map +1 -0
  95. package/dist/components/styles/image-block.js +395 -0
  96. package/dist/components/styles/image-block.js.map +1 -0
  97. package/dist/components/styles/index.d.ts +3 -0
  98. package/dist/components/styles/index.d.ts.map +1 -0
  99. package/dist/components/styles/index.js +1 -0
  100. package/dist/components/styles/index.js.map +1 -0
  101. package/dist/components/styles/link-tooltip.d.ts +2 -0
  102. package/dist/components/styles/link-tooltip.d.ts.map +1 -0
  103. package/dist/components/styles/link-tooltip.js +110 -0
  104. package/dist/components/styles/link-tooltip.js.map +1 -0
  105. package/dist/components/styles/list-item.d.ts +2 -0
  106. package/dist/components/styles/list-item.d.ts.map +1 -0
  107. package/dist/components/styles/list-item.js +40 -0
  108. package/dist/components/styles/list-item.js.map +1 -0
  109. package/dist/components/styles/placeholder.d.ts +2 -0
  110. package/dist/components/styles/placeholder.d.ts.map +1 -0
  111. package/dist/components/styles/placeholder.js +9 -0
  112. package/dist/components/styles/placeholder.js.map +1 -0
  113. package/dist/components/styles/prosemirror.d.ts +2 -0
  114. package/dist/components/styles/prosemirror.d.ts.map +1 -0
  115. package/dist/components/styles/prosemirror.js +56 -0
  116. package/dist/components/styles/prosemirror.js.map +1 -0
  117. package/dist/components/styles/table.d.ts +2 -0
  118. package/dist/components/styles/table.d.ts.map +1 -0
  119. package/dist/components/styles/table.js +283 -0
  120. package/dist/components/styles/table.js.map +1 -0
  121. package/dist/constants.d.ts +47 -0
  122. package/dist/constants.d.ts.map +1 -0
  123. package/dist/constants.js +1 -0
  124. package/dist/constants.js.map +1 -0
  125. package/dist/index.d.ts +4 -0
  126. package/dist/index.d.ts.map +1 -0
  127. package/dist/index.js +1 -0
  128. package/dist/index.js.map +1 -0
  129. package/dist/loader.d.ts +16 -0
  130. package/dist/loader.d.ts.map +1 -0
  131. package/dist/loader.js +1 -0
  132. package/dist/loader.js.map +1 -0
  133. package/dist/utils.d.ts +11 -0
  134. package/dist/utils.d.ts.map +1 -0
  135. package/dist/utils.js +1 -0
  136. package/dist/utils.js.map +1 -0
  137. package/package.json +6 -6
@@ -0,0 +1,23 @@
1
+ import { LitElement } from "lit";
2
+ import type * as milkdown from '@omegagrid/milkdown-kit';
3
+ import { BlockEditMenu } from ".";
4
+ export declare class BlockEdit extends LitElement {
5
+ #private;
6
+ static styles: import("lit").CSSResult;
7
+ ctx: milkdown.ctx.Ctx;
8
+ md: typeof milkdown;
9
+ get menu(): BlockEditMenu;
10
+ updated(): void;
11
+ disconnectedCallback(): void;
12
+ render: () => import("lit").TemplateResult<1>;
13
+ hideMenu: () => HTMLElement;
14
+ showMenu: (elm: HTMLElement) => void;
15
+ }
16
+ export declare class BlockHandleView {
17
+ #private;
18
+ md: typeof milkdown;
19
+ constructor(ctx: milkdown.ctx.Ctx, md: typeof milkdown);
20
+ update: () => void;
21
+ destroy: () => void;
22
+ }
23
+ //# sourceMappingURL=blockEdit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockEdit.d.ts","sourceRoot":"","sources":["../../../src/components/features/blockEdit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAGlC,qBACa,SAAU,SAAQ,UAAU;;IAExC,MAAM,CAAC,MAAM,0BAqBX;IAGF,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAGtB,EAAE,EAAE,OAAO,QAAQ,CAAC;IAGpB,IAAI,IAAI,kBAA+B;IAEvC,OAAO;IAMP,oBAAoB;IAIpB,MAAM,wCAkBJ;IAEF,QAAQ,oBAAoC;IAE5C,QAAQ,GAAI,KAAK,WAAW,UAW3B;CACD;AAED,qBAAa,eAAe;;IAG3B,EAAE,EAAE,OAAO,QAAQ,CAAC;gBAGR,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,QAAQ;IAqBtD,MAAM,aAEL;IAED,OAAO,aAEN;CAyBD"}
@@ -0,0 +1,38 @@
1
+ var _BlockEdit_menu,_BlockHandleView_provider,_BlockHandleView_ctx,_BlockHandleView_content,_BlockHandleView_onAdd,__decorate=this&&this.__decorate||function(e,t,o,i){var n,s=arguments.length,r=s<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)r=Reflect.decorate(e,t,o,i);else for(var l=e.length-1;l>=0;l--)(n=e[l])&&(r=(s<3?n(r):s>3?n(t,o,r):n(t,o))||r);return s>3&&r&&Object.defineProperty(t,o,r),r},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,t,o,i){if("a"===o&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?i:"a"===o?i.call(e):i?i.value:t.get(e)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,t,o,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(e,o):n?n.value=o:t.set(e,o),o};import{LitElement,css,html}from"lit";import{customElement,property}from"lit/decorators.js";import{dom}from"@omegagrid/core";import{createRef,ref}from"lit/directives/ref.js";let BlockEdit=class extends LitElement{constructor(){super(...arguments),_BlockEdit_menu.set(this,createRef()),this.render=()=>html`
2
+ <og-button
3
+ icon="plus"
4
+ color="transparent"
5
+ @click=${()=>{this.dispatchEvent(new Event("add"))}}>
6
+ </og-button>
7
+
8
+ <og-button icon="grip-vertical" color="transparent"></og-button>
9
+
10
+ <og-markdown-block-edit-menu ${ref(__classPrivateFieldGet(this,_BlockEdit_menu,"f"))}
11
+ @mousedown=${e=>e.stopPropagation()}
12
+ style="display: none"
13
+ @run=${()=>this.hideMenu()}
14
+ .ctx="${this.ctx}"
15
+ .md="${this.md}">
16
+ </og-markdown-block-edit-menu>
17
+ `,this.hideMenu=()=>dom.hideElement(this.menu),this.showMenu=e=>{if(!this.menu)return;const t=this.menu.parentElement,o=dom.getElementOffset(e,t);dom.showElement(this.menu);let i=o.top+e.offsetHeight+4;i+this.menu.offsetHeight>t.clientHeight&&(i=o.top-this.menu.offsetHeight-4),dom.setPosition(this.menu,{t:i,l:o.left}),document.addEventListener("mousedown",(()=>dom.hideElement(this.menu)),{once:!0})}}get menu(){return __classPrivateFieldGet(this,_BlockEdit_menu,"f")?.value}updated(){this.menu.parentNode==this.shadowRoot&&document.body.appendChild(this.menu)}disconnectedCallback(){this.menu&&this.shadowRoot.appendChild(this.menu)}};_BlockEdit_menu=new WeakMap,BlockEdit.styles=css`
18
+ * {
19
+ box-sizing: border-box;
20
+ }
21
+
22
+ :host {
23
+ display: flex;
24
+ flex-direction: row;
25
+ position: absolute;
26
+ transition: top .2s;
27
+ gap: 2px;
28
+ justify-content: center;
29
+ align-items: center;
30
+ }
31
+
32
+ og-dropdown, og-button {
33
+ min-width: 20px;
34
+ height: 20px;
35
+ flex: 0;
36
+ text-align: center;
37
+ }
38
+ `,__decorate([property({type:Object})],BlockEdit.prototype,"ctx",void 0),__decorate([property({type:Object})],BlockEdit.prototype,"md",void 0),BlockEdit=__decorate([customElement("og-markdown-block-edit")],BlockEdit);export{BlockEdit};export class BlockHandleView{constructor(e,t){_BlockHandleView_provider.set(this,void 0),_BlockHandleView_ctx.set(this,void 0),_BlockHandleView_content.set(this,void 0),this.update=()=>{__classPrivateFieldGet(this,_BlockHandleView_provider,"f").update()},this.destroy=()=>{__classPrivateFieldGet(this,_BlockHandleView_provider,"f").destroy()},_BlockHandleView_onAdd.set(this,(()=>{const e=__classPrivateFieldGet(this,_BlockHandleView_ctx,"f"),t=e.get(this.md.core.editorViewCtx);t.hasFocus()||t.focus();const{state:o,dispatch:i}=t,n=__classPrivateFieldGet(this,_BlockHandleView_provider,"f").active;if(!n)return;const s=n.$pos.pos+n.node.nodeSize;let r=o.tr.insert(s,this.md.presets.commonmark.paragraphSchema.type(e).create());if(r=r.setSelection(this.md.prose.state.TextSelection.near(r.doc.resolve(s))),i(r.scrollIntoView()),__classPrivateFieldGet(this,_BlockHandleView_provider,"f").hide(),__classPrivateFieldGet(this,_BlockHandleView_content,"f").menu){const e=n.el.nextElementSibling;e&&__classPrivateFieldGet(this,_BlockHandleView_content,"f").showMenu(e)}})),this.md=t,__classPrivateFieldSet(this,_BlockHandleView_ctx,e,"f");const o=dom.createElement("og-markdown-block-edit");o.ctx=e,o.md=t,o.addEventListener("add",__classPrivateFieldGet(this,_BlockHandleView_onAdd,"f")),__classPrivateFieldSet(this,_BlockHandleView_content,o,"f"),__classPrivateFieldSet(this,_BlockHandleView_provider,new t.plugins.block.BlockProvider({ctx:e,content:o,getOffset:()=>10,getPlacement:({active:e,blockDom:t})=>(dom.setPosition(t,{l:0}),dom.setSize(t,{h:e.el.offsetHeight,w:40}),"left")}),"f"),this.update()}}_BlockHandleView_provider=new WeakMap,_BlockHandleView_ctx=new WeakMap,_BlockHandleView_content=new WeakMap,_BlockHandleView_onAdd=new WeakMap;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockEdit.js","sourceRoot":"","sources":["../../../src/components/features/blockEdit.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { dom } from \"@omegagrid/core\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { BlockEditMenu } from \".\";\nimport { createRef, ref } from \"lit/directives/ref.js\";\n\n@customElement('og-markdown-block-edit')\nexport class BlockEdit 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: flex;\n\t\t\tflex-direction: row;\n\t\t\tposition: absolute;\n\t\t\ttransition: top .2s;\n\t\t\tgap: 2px;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t}\n\n\t\tog-dropdown, og-button {\n\t\t\tmin-width: 20px;\n\t\t\theight: 20px;\n\t\t\tflex: 0;\n\t\t\ttext-align: center;\n\t\t}\n\t`;\n\n\t@property({type: Object})\n\tctx: milkdown.ctx.Ctx;\n\n\t@property({type: Object})\n\tmd: typeof milkdown;\n\n\t#menu = createRef<BlockEditMenu>();\n\tget menu() { return this.#menu?.value }\n\n\tupdated() {\n\t\tif (this.menu.parentNode == this.shadowRoot) {\n\t\t\tdocument.body.appendChild(this.menu);\n\t\t}\n\t}\n\n\tdisconnectedCallback() {\n\t\tif (this.menu) this.shadowRoot.appendChild(this.menu);\n\t}\n\n\trender = () => html`\n\t\t<og-button\n\t\t\ticon=\"plus\"\n\t\t\tcolor=\"transparent\"\n\t\t\t@click=${() => {\n\t\t\t\tthis.dispatchEvent(new Event('add'));\n\t\t\t}}>\n\t\t</og-button>\n\n\t\t<og-button icon=\"grip-vertical\" color=\"transparent\"></og-button>\n\n\t\t<og-markdown-block-edit-menu ${ref(this.#menu)}\n\t\t\t@mousedown=${(e: MouseEvent) => e.stopPropagation()}\n\t\t\tstyle=\"display: none\"\n\t\t\t@run=${() => this.hideMenu()}\n\t\t\t.ctx=\"${this.ctx}\"\n\t\t\t.md=\"${this.md}\">\n\t\t</og-markdown-block-edit-menu>\n\t`;\n\n\thideMenu = () => dom.hideElement(this.menu);\n\n\tshowMenu = (elm: HTMLElement) => {\n\t\tif (!this.menu) return;\n\t\tconst container = this.menu.parentElement;\n\t\tconst offset = dom.getElementOffset(elm, container);\n\t\tdom.showElement(this.menu);\n\t\tlet top = offset.top + elm.offsetHeight + 4;\n\t\tif (top + this.menu.offsetHeight > container.clientHeight) {\n\t\t\ttop = offset.top - this.menu.offsetHeight - 4;\n\t\t}\n\t\tdom.setPosition(this.menu, {t: top, l: offset.left});\n\t\tdocument.addEventListener('mousedown', () => dom.hideElement(this.menu), {once: true});\n\t}\n}\n\nexport class BlockHandleView { // implements milkdown.prose.state.PluginView {\n\t#provider: InstanceType<typeof milkdown.plugins.block.BlockProvider>;\n\t#ctx: milkdown.ctx.Ctx;\n\tmd: typeof milkdown;\n\t#content: BlockEdit;\n\t\n\tconstructor(ctx: milkdown.ctx.Ctx, md: typeof milkdown) {\n\t\tthis.md = md;\n\t\tthis.#ctx = ctx;\n\t\tconst content = dom.createElement<BlockEdit>('og-markdown-block-edit');\n\t\tcontent.ctx = ctx;\n\t\tcontent.md = md;\n\t\tcontent.addEventListener('add', this.#onAdd);\n\t\tthis.#content = content;\n\t\tthis.#provider = new md.plugins.block.BlockProvider({\n\t\t\tctx,\n\t\t\tcontent,\n\t\t\tgetOffset: () => 10,\n\t\t\tgetPlacement: ({ active, blockDom }) => {\n\t\t\t\tdom.setPosition(blockDom, {l: 0});\n\t\t\t\tdom.setSize(blockDom, {h: active.el.offsetHeight, w: 40});\n\t\t\t\treturn 'left';\n\t\t\t}\n\t\t});\n\t\tthis.update()\n\t}\n\t\n\tupdate = () => {\n\t\tthis.#provider.update();\n\t}\n\t\n\tdestroy = () => {\n\t\tthis.#provider.destroy();\n\t}\n\t\n\t#onAdd = () => {\n\t\tconst ctx = this.#ctx;\n\t\tconst view = ctx.get(this.md.core.editorViewCtx);\n\t\tif (!view.hasFocus()) view.focus();\n\t\t\n\t\tconst { state, dispatch } = view;\n\t\tconst active = this.#provider.active;\n\t\tif (!active) return;\n\n\t\tconst $pos = active.$pos;\n\t\tconst pos = $pos.pos + active.node.nodeSize;\n\t\tlet tr = state.tr.insert(pos, this.md.presets.commonmark.paragraphSchema.type(ctx).create());\n\t\ttr = tr.setSelection(this.md.prose.state.TextSelection.near(tr.doc.resolve(pos)));\n\t\t\n\t\tdispatch(tr.scrollIntoView());\n\t\t\n\t\tthis.#provider.hide();\n\t\tif (this.#content.menu) {\n\t\t\tconst el = active.el.nextElementSibling as HTMLElement;\n\t\t\tif (el) this.#content.showMenu(el);\n\t\t}\n\t\t// ctx.get(menuAPI.key).show(tr.selection.from);\n\t}\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { LitElement } from "lit";
2
+ import { MenuItem } from "@omegagrid/core";
3
+ import type * as milkdown from '@omegagrid/milkdown-kit';
4
+ type BlockMenuItem = MenuItem & {
5
+ onRun?: (ctx: milkdown.ctx.Ctx) => void;
6
+ };
7
+ export declare class BlockEditMenu extends LitElement {
8
+ #private;
9
+ static styles: import("lit").CSSResult;
10
+ ctx: milkdown.ctx.Ctx;
11
+ md: typeof milkdown;
12
+ get menuItems(): BlockMenuItem[];
13
+ render: () => import("lit").TemplateResult<1>;
14
+ }
15
+ export {};
16
+ //# sourceMappingURL=blockEditMenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockEditMenu.d.ts","sourceRoot":"","sources":["../../../src/components/features/blockEditMenu.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAI5C,OAAO,EAAkD,QAAQ,EAAO,MAAM,iBAAiB,CAAC;AAChG,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAWzD,KAAK,aAAa,GAAG,QAAQ,GAAG;IAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,CAAA;CAAC,CAAC;AA8I1E,qBACa,aAAc,SAAQ,UAAU;;IAE5C,MAAM,CAAC,MAAM,0BAkBX;IAKF,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAGtB,EAAE,EAAE,OAAO,QAAQ,CAAC;IAGpB,IAAI,SAAS,oBAA6E;IAmC1F,MAAM,wCAMJ;CACF"}
@@ -0,0 +1,25 @@
1
+ var _BlockEditMenu_menu,_BlockEditMenu_menuItems,_BlockEditMenu_createComponent,_BlockEditMenu_onTabSelect,__decorate=this&&this.__decorate||function(e,t,o,n){var i,s=arguments.length,c=s<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,o,n);else for(var a=e.length-1;a>=0;a--)(i=e[a])&&(c=(s<3?i(c):s>3?i(t,o,c):i(t,o))||c);return s>3&&c&&Object.defineProperty(t,o,c),c},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,t,o,n){if("a"===o&&!n)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?n:"a"===o?n.call(e):n?n.value:t.get(e)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,t,o,n,i){if("m"===n)throw new TypeError("Private method is not writable");if("a"===n&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!i:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===n?i.call(e,o):i?i.value=o:t.set(e,o),o};import{LitElement,css,html}from"lit";import{customElement,property}from"lit/decorators.js";import{msg}from"@omegagrid/localize";import{dom}from"@omegagrid/core";import{addBlockType,clearContentAndAddBlockType,clearContentAndSetBlockType,clearContentAndWrapInBlockType,clearRange}from"./utils";const items=[{id:"sectionText",title:msg("Text")},{id:"sectionList",title:msg("List")},{id:"sectionAdvanced",title:msg("Advanced")}],createMenuItems=e=>[{key:"sectionText",value:msg("Text"),divider:!0,type:"label"},{key:"text",value:msg("Text"),icon:"text",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndSetBlockType(e.presets.commonmark.paragraphSchema.type(t))(i,n)}},...new Array(6).fill(0).map(((t,o)=>({key:`square${o+1}`,value:msg("Heading")+(o+1),icon:`square-${o+1}`,onRun:t=>{const n=t.get(e.core.editorViewCtx),{dispatch:i,state:s}=n;clearContentAndSetBlockType(e.presets.commonmark.headingSchema.type(t),{level:o+1})(s,i)}}))),{key:"quote",value:msg("Quote"),icon:"quote-right",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndWrapInBlockType(e.presets.commonmark.blockquoteSchema.type(t))(i,n)}},{key:"divider",value:msg("Divider"),icon:"horizontal-rule",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndAddBlockType(e.presets.commonmark.hrSchema.type(t))(i,n)}},{key:"sectionList",value:msg("List"),divider:!0,type:"label"},{key:"bulletList",value:msg("Bullet List"),icon:"list",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndWrapInBlockType(e.presets.commonmark.bulletListSchema.type(t))(i,n)}},{key:"orderedList",value:msg("Ordered List"),icon:"list-ol",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndWrapInBlockType(e.presets.commonmark.orderedListSchema.type(t))(i,n)}},{key:"todoList",value:msg("Todo List"),icon:"list-check",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndWrapInBlockType(e.presets.commonmark.listItemSchema.type(t),{checked:!1})(i,n)}},{key:"sectionAdvanced",value:msg("Advanced"),divider:!0,type:"label"},{key:"image",value:msg("Image"),icon:"image",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndAddBlockType(e.components.imageBlock.imageBlockSchema.type(t))(i,n)}},{key:"html",value:msg("Raw HTML"),icon:"code",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o,s=addBlockType(clearRange(i.tr),e.presets.commonmark.htmlSchema.type(t),null);n(s.scrollIntoView()),requestAnimationFrame((()=>{const e=o.domAtPos(s.selection.$anchor.pos)?.node;if(e){const t=e.querySelector("og-markdown-html-block");t?.startEdit()}}))}},{key:"code",value:msg("Code"),icon:"code",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o;clearContentAndAddBlockType(e.presets.commonmark.codeBlockSchema.type(t))(i,n)}},{key:"table",value:msg("Table"),icon:"table",onRun:t=>{const o=t.get(e.core.editorViewCtx),{dispatch:n,state:i}=o,s=clearRange(i.tr),c=e.presets.gfm.createTable(t,3,3);s.replaceSelectionWith(c);const{from:a}=s.selection,r=a-c.nodeSize+2;n(s),requestAnimationFrame((()=>{const t=e.prose.state.NodeSelection.create(o.state.tr.doc,r);n(o.state.tr.setSelection(t).scrollIntoView())}))}}];let BlockEditMenu=class extends LitElement{constructor(){super(...arguments),_BlockEditMenu_menu.set(this,void 0),_BlockEditMenu_menuItems.set(this,void 0),_BlockEditMenu_createComponent.set(this,(e=>{if(!__classPrivateFieldGet(this,_BlockEditMenu_menu,"f")){const e=this.menuItems;__classPrivateFieldSet(this,_BlockEditMenu_menu,dom.createElement("og-menu"),"f"),__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").dynamicWidth=!1,__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").disabledFocus=!0,__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").style.width="100%",__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").style.height="100%",__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").style.border="none",__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").items=e,__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").addEventListener("menu.select",(t=>{const o=e.find((e=>e.key===t.item.key));o?.onRun&&(o.onRun(this.ctx),this.dispatchEvent(new Event("run")))})),__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").addEventListener("mousedown",(e=>{e.stopPropagation(),e.preventDefault()}))}return __classPrivateFieldGet(this,_BlockEditMenu_menu,"f")})),_BlockEditMenu_onTabSelect.set(this,(e=>{if(__classPrivateFieldGet(this,_BlockEditMenu_menu,"f")?.list){const t=this.menuItems.findIndex((t=>t.key===e.tab.id));t>-1&&__classPrivateFieldGet(this,_BlockEditMenu_menu,"f").list.scrollToIndex(t)}})),this.render=()=>html`
2
+ <og-tabcontainer
3
+ .createComponent="${__classPrivateFieldGet(this,_BlockEditMenu_createComponent,"f")}"
4
+ .items="${items}"
5
+ @tab.select="${__classPrivateFieldGet(this,_BlockEditMenu_onTabSelect,"f")}">
6
+ </og-tabcontainer>
7
+ `}get menuItems(){return __classPrivateFieldGet(this,_BlockEditMenu_menuItems,"f")??__classPrivateFieldSet(this,_BlockEditMenu_menuItems,createMenuItems(this.md),"f")}};_BlockEditMenu_menu=new WeakMap,_BlockEditMenu_menuItems=new WeakMap,_BlockEditMenu_createComponent=new WeakMap,_BlockEditMenu_onTabSelect=new WeakMap,BlockEditMenu.styles=css`
8
+ * {
9
+ box-sizing: border-box;
10
+ }
11
+
12
+ :host {
13
+ display: block;
14
+ width: 170px;
15
+ height: 230px;
16
+ user-select: none;
17
+ border: 1px solid var(--og-accent-color);
18
+ position: absolute;
19
+ }
20
+
21
+ og-tabcontainer {
22
+ width: 100%;
23
+ height: 100%;
24
+ }
25
+ `,__decorate([property({type:Object})],BlockEditMenu.prototype,"ctx",void 0),__decorate([property({type:Object})],BlockEditMenu.prototype,"md",void 0),BlockEditMenu=__decorate([customElement("og-markdown-block-edit-menu")],BlockEditMenu);export{BlockEditMenu};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blockEditMenu.js","sourceRoot":"","sources":["../../../src/components/features/blockEditMenu.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property } from \"lit/decorators.js\";\nimport { TabItem, TabEvent } from \"@omegagrid/tabs\";\nimport { msg } from \"@omegagrid/localize\";\nimport { ComponentFactory, ComponentId, Menu, MenuEvent, MenuItem, dom } from \"@omegagrid/core\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { addBlockType, clearContentAndAddBlockType, clearContentAndSetBlockType, clearContentAndWrapInBlockType, clearRange } from \"./utils\";\nimport { HtmlBlockComponent } from \"./htmlBlock\";\n\n\nconst items: TabItem[] = [\n\t{id: 'sectionText', title: msg('Text')},\n\t{id: 'sectionList', title: msg('List')},\n\t{id: 'sectionAdvanced', title: msg('Advanced')},\n];\n\ntype BlockMenuItem = MenuItem & {onRun?: (ctx: milkdown.ctx.Ctx) => void};\n\nconst createMenuItems = (md: typeof milkdown): BlockMenuItem[] => [\n\t{key: 'sectionText', value: msg('Text'), divider: true, type: 'label'},\n\t{\n\t\tkey: 'text', \n\t\tvalue: msg('Text'), \n\t\ticon: 'text', onRun: \n\t\tctx => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndSetBlockType(md.presets.commonmark.paragraphSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, ...(new Array(6).fill(0).map((_, i) => ({\n\t\tkey: `square${i + 1}`,\n\t\tvalue: msg('Heading') + (i + 1),\n\t\ticon: `square-${i + 1}`,\n\t\tonRun: (ctx: milkdown.ctx.Ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndSetBlockType(md.presets.commonmark.headingSchema.type(ctx), {level: i + 1});\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}))), {\n\t\tkey: 'quote', \n\t\tvalue: msg('Quote'), \n\t\ticon: 'quote-right', \n\t\tonRun: ctx => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndWrapInBlockType(md.presets.commonmark.blockquoteSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'divider', \n\t\tvalue: msg('Divider'), \n\t\ticon: 'horizontal-rule',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndAddBlockType(md.presets.commonmark.hrSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'sectionList', \n\t\tvalue: msg('List'), \n\t\tdivider: true, \n\t\ttype: 'label'\n\t}, {\n\t\tkey: 'bulletList', \n\t\tvalue: msg('Bullet List'), \n\t\ticon: 'list',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndWrapInBlockType(md.presets.commonmark.bulletListSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'orderedList', \n\t\tvalue: msg('Ordered List'), \n\t\ticon: 'list-ol',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndWrapInBlockType(md.presets.commonmark.orderedListSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'todoList', \n\t\tvalue: msg('Todo List'), \n\t\ticon: 'list-check',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndWrapInBlockType(md.presets.commonmark.listItemSchema.type(ctx), {checked: false});\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'sectionAdvanced', \n\t\tvalue: msg('Advanced'), \n\t\tdivider: true, \n\t\ttype: 'label'\n\t}, {\n\t\tkey: 'image', \n\t\tvalue: msg('Image'), \n\t\ticon: 'image',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndAddBlockType(md.components.imageBlock.imageBlockSchema.type(ctx));\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'html', \n\t\tvalue: msg('Raw HTML'), \n\t\ticon: 'code',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst tr = addBlockType(clearRange(state.tr), md.presets.commonmark.htmlSchema.type(ctx), null);\n\t\t\tdispatch(tr.scrollIntoView());\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst node = view.domAtPos(tr.selection.$anchor.pos)?.node as HTMLElement;\n\t\t\t\tif (node) {\n\t\t\t\t\tconst block = node.querySelector('og-markdown-html-block') as HtmlBlockComponent;\n\t\t\t\t\tblock?.startEdit();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}, {\n\t\tkey: 'code', \n\t\tvalue: msg('Code'), \n\t\ticon: 'code',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst command = clearContentAndAddBlockType(md.presets.commonmark.codeBlockSchema.type(ctx))\n\t\t\tcommand(state, dispatch);\n\t\t}\n\t}, {\n\t\tkey: 'table',\n\t\tvalue: msg('Table'),\n\t\ticon: 'table',\n\t\tonRun: (ctx) => {\n\t\t\tconst view = ctx.get(md.core.editorViewCtx);\n\t\t\tconst { dispatch, state } = view;\n\t\t\tconst tr = clearRange(state.tr);\n\t\t\tconst table = md.presets.gfm.createTable(ctx, 3, 3);\n\t\t\ttr.replaceSelectionWith(table);\n\t\t\tconst { from } = tr.selection;\n\t\t\tconst pos = from - table.nodeSize + 2;\n\t\t\tdispatch(tr);\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\tconst selection = md.prose.state.NodeSelection.create(view.state.tr.doc, pos);\n\t\t\t\tdispatch(view.state.tr.setSelection(selection).scrollIntoView());\n\t\t\t})\n\t\t}\n\t}\n];\n\n@customElement('og-markdown-block-edit-menu')\nexport class BlockEditMenu 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: block;\n\t\t\twidth: 170px;\n\t\t\theight: 230px;\n\t\t\tuser-select: none;\n\t\t\tborder: 1px solid var(--og-accent-color);\n\t\t\tposition: absolute;\n\t\t}\n\n\t\tog-tabcontainer {\n\t\t\twidth: 100%;\n\t\t\theight: 100%;\n\t\t}\n\t`;\n\n\t#menu: Menu;\n\n\t@property({type: Object})\n\tctx: milkdown.ctx.Ctx;\n\n\t@property({type: Object})\n\tmd: typeof milkdown;\n\n\t#menuItems: BlockMenuItem[];\n\tget menuItems() { return this.#menuItems ?? (this.#menuItems = createMenuItems(this.md)) }\n\n\t#createComponent: ComponentFactory = (_id: ComponentId) => {\n\t\tif (!this.#menu) {\n\t\t\tconst menuItems = this.menuItems;\n\t\t\tthis.#menu = dom.createElement<Menu>('og-menu');\n\t\t\tthis.#menu.dynamicWidth = false;\n\t\t\tthis.#menu.disabledFocus = true;\n\t\t\tthis.#menu.style.width = '100%';\n\t\t\tthis.#menu.style.height = '100%';\n\t\t\tthis.#menu.style.border = 'none';\n\t\t\tthis.#menu.items = menuItems;\n\t\t\tthis.#menu.addEventListener('menu.select', (e: MenuEvent) => {\n\t\t\t\tconst item = menuItems.find(item => item.key === e.item.key);\n\t\t\t\tif (item?.onRun) {\n\t\t\t\t\titem.onRun(this.ctx);\n\t\t\t\t\tthis.dispatchEvent(new Event('run'));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.#menu.addEventListener('mousedown', (e) => {\n\t\t\t\te.stopPropagation();\n\t\t\t\te.preventDefault();\n\t\t\t});\n\t\t}\n\t\treturn this.#menu;\n\t}\n\n\t#onTabSelect = (e: TabEvent) => {\n\t\tif (this.#menu?.list) {\n\t\t\tconst index = this.menuItems.findIndex(item => item.key === e.tab.id);\n\t\t\tif (index > -1) this.#menu.list.scrollToIndex(index);\t\n\t\t}\n\t}\n\n\trender = () => html`\n\t\t<og-tabcontainer\n\t\t\t.createComponent=\"${this.#createComponent}\"\n\t\t\t.items=\"${items}\"\n\t\t\t@tab.select=\"${this.#onTabSelect}\">\n\t\t</og-tabcontainer>\n\t`;\n}\n"]}
@@ -0,0 +1,31 @@
1
+ import type * as milkdown from '@omegagrid/milkdown-kit';
2
+ import type { NodeView, EditorView } from '@omegagrid/milkdown-kit/dist/prose/view';
3
+ import type { Node } from '@omegagrid/milkdown-kit/dist/prose/model';
4
+ import { CodeBlock, CodeEvent, CodeView } from '@omegagrid/code';
5
+ export declare class CodeEditorBlock implements NodeView {
6
+ md: typeof milkdown;
7
+ node: Node;
8
+ view: EditorView;
9
+ getPos: () => number | undefined;
10
+ dom: CodeBlock | CodeView;
11
+ private updating;
12
+ private languageName;
13
+ get editor(): import("monaco-editor").editor.IStandaloneCodeEditor;
14
+ get model(): import("monaco-editor").editor.ITextModel;
15
+ constructor(md: typeof milkdown, node: Node, view: EditorView, getPos: () => number | undefined);
16
+ _onChange: (e: CodeEvent) => void;
17
+ private createComponent;
18
+ setSelection(anchor: number, head: number): void;
19
+ update(node: Node): boolean;
20
+ selectNode(): void;
21
+ deselectNode(): void;
22
+ stopEvent(): boolean;
23
+ destroy(): void;
24
+ private updateLanguage;
25
+ setLanguage: (language: string) => void;
26
+ }
27
+ export type CodeEditorConfig = Record<string, never>;
28
+ export declare const defaultCodeEditorConfig: CodeEditorConfig;
29
+ export declare function createCodeBlockConfig(md: typeof milkdown): milkdown.utils.$Ctx<CodeEditorConfig, "codeEditorConfigCtx">;
30
+ export declare function createCodeBlockView(md: typeof milkdown): milkdown.utils.$View<milkdown.utils.$Node, (node: Node, view: EditorView, getPos: () => number | undefined) => CodeEditorBlock>;
31
+ //# sourceMappingURL=codeBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeBlock.d.ts","sourceRoot":"","sources":["../../../src/components/features/codeBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAErE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIjE,qBAAa,eAAgB,YAAW,QAAQ;IASvC,EAAE,EAAE,OAAO,QAAQ;IACnB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAXxC,GAAG,EAAE,SAAS,GAAC,QAAQ,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAuB;IAE3C,IAAI,MAAM,yDAAqD;IAC/D,IAAI,KAAK,8CAAqC;gBAGtC,EAAE,EAAE,OAAO,QAAQ,EACnB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAMxC,SAAS,GAAI,GAAG,SAAS,UA0BxB;IAED,OAAO,CAAC,eAAe;IAuBvB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAkBzC,MAAM,CAAC,IAAI,EAAE,IAAI;IASjB,UAAU;IAKV,YAAY;IAIZ,SAAS;IAIT,OAAO;IAIP,OAAO,CAAC,cAAc;IAKtB,WAAW,GAAI,UAAU,MAAM,UAE9B;CAuED;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,eAAO,MAAM,uBAAuB,EAAS,gBAAgB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,QAAQ,gEAExD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,QAAQ,mIAStD"}
@@ -0,0 +1 @@
1
+ import{dom}from"@omegagrid/core";import{CodeBlock}from"@omegagrid/code";const DEFAULT_LANGUAGE="plaintext";export class CodeEditorBlock{get editor(){return this.dom?.editor?.editor}get model(){return this.editor?.getModel()}constructor(t,e,o,i){this.md=t,this.node=e,this.view=o,this.getPos=i,this.updating=!1,this.languageName="plaintext",this._onChange=t=>{if(this.updating)return;const e=t.editor.getModel(),o=this.view.state.tr;this.view.dispatch(o.setNodeAttribute(this.getPos()??0,"content",e.getValue()))},this.setLanguage=t=>{this.view.dispatch(this.view.state.tr.setNodeAttribute(this.getPos()??0,"language",t))},this.dom=this.createComponent(),this.updateLanguage()}createComponent(){const t=this.view.editable?dom.createElement("og-code-block"):dom.createElement("og-code-view");return t.content=this.node.textContent,t instanceof CodeBlock?(t.dynamicHeight=!0,t.editorOptions={minimap:{enabled:!1},stickyScroll:{enabled:!1}},t.addEventListener("code.change",this._onChange),t.addEventListener("changeLanguage",(t=>this.setLanguage(t.value)))):t.copy=!0,t}setSelection(t,e){if(!this.dom?.isConnected)return;this.dom.focus(),this.updating=!0;const o=this.model;if(o){const i=o.getPositionAt(t),n=o.getPositionAt(e);this.editor.setSelection({startLineNumber:i.lineNumber,startColumn:i.column,endLineNumber:n.lineNumber,endColumn:n.column})}this.updating=!1}update(t){return t.type===this.node.type&&(this.updating||(this.node=t,this.updateLanguage(),this.dom.content=t.textContent),!0)}selectNode(){this.dom.focus()}deselectNode(){}stopEvent(){return!0}destroy(){}updateLanguage(){this.languageName=this.node.attrs.language||"plaintext",this.dom.language=this.languageName}}export const defaultCodeEditorConfig={};export function createCodeBlockConfig(t){return t.utils.$ctx(defaultCodeEditorConfig,"codeEditorConfigCtx")}export function createCodeBlockView(t){return t.utils.$view(t.presets.commonmark.codeBlockSchema.node,(e=>(e,o,i)=>new CodeEditorBlock(t,e,o,i)))}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codeBlock.js","sourceRoot":"","sources":["../../../src/components/features/codeBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as milkdown from '@omegagrid/milkdown-kit';\nimport type { NodeView, EditorView } from '@omegagrid/milkdown-kit/dist/prose/view';\nimport type { Node } from '@omegagrid/milkdown-kit/dist/prose/model';\nimport { dom, events } from '@omegagrid/core';\nimport { CodeBlock, CodeEvent, CodeView } from '@omegagrid/code';\n\nconst DEFAULT_LANGUAGE = 'plaintext';\n\nexport class CodeEditorBlock implements NodeView {\n\tdom: CodeBlock|CodeView;\n\tprivate updating = false;\n\tprivate languageName: string = 'plaintext';\n\n\tget editor() { return (this.dom as CodeBlock)?.editor?.editor }\n\tget model() { return this.editor?.getModel() }\n\n\tconstructor(\n\t\tpublic md: typeof milkdown,\n\t\tpublic node: Node,\n\t\tpublic view: EditorView,\n\t\tpublic getPos: () => number | undefined\n\t) {\n\t\tthis.dom = this.createComponent();\n\t\tthis.updateLanguage();\n\t}\n\n\t_onChange = (e: CodeEvent) => {\n\t\tif (this.updating) return;\n\t\tconst model = e.editor.getModel();\n\t\tconst tr = this.view.state.tr;\n\t\tthis.view.dispatch(tr.setNodeAttribute(this.getPos() ?? 0, 'content', model.getValue()));\n\t\t\n\t\t// const selection = e.editor.getSelection();\n\t\t// const selFrom = offset + model.getOffsetAt(selection.getStartPosition());\n\t\t// const selTo = offset + model.getOffsetAt(selection.getEndPosition());\n\n\t\t// if (e.changes?.length) {\n\t\t// \tconst tr = this.view.state.tr;\t\n\t\t// \te.changes.forEach(change => {\n\t\t// \t\tconst { rangeOffset, rangeLength, text } = change;\n\t\t// \t\tconst from = offset + rangeOffset;\n\t\t// \t\tconst to = from + rangeLength;\n\t\t// \t\tif (text.length) {\n\t\t// \t\t\ttr.replaceWith(from, to, this.view.state.schema.text(text));\n\t\t// \t\t} else {\n\t\t// \t\t\ttr.delete(from, to);\n\t\t// \t\t}\n\t\t// \t\toffset += text.length - rangeLength;\n\t\t// \t});\n\t\t// \ttr.setSelection(this.md.prose.state.TextSelection.create(tr.doc, selFrom, selTo))\n\t\t// \tthis.view.dispatch(tr)\n\t\t// }\n\t}\n\n\tprivate createComponent() {\n\t\tconst component = this.view.editable\n\t\t\t? dom.createElement<CodeBlock>('og-code-block')\n\t\t\t: dom.createElement<CodeView>('og-code-view');\n\n\t\tcomponent.content = this.node.textContent;\n\n\t\tif (component instanceof CodeBlock) {\n\t\t\tcomponent.dynamicHeight = true;\n\t\t\tcomponent.editorOptions = {\n\t\t\t\tminimap: {enabled: false},\n\t\t\t\tstickyScroll: {enabled: false},\n\t\t\t};\n\t\t\t// dom.setSize(component, {h: 500});\n\t\t\tcomponent.addEventListener('code.change', this._onChange);\n\t\t\tcomponent.addEventListener('changeLanguage', (e: events.ChangeEvent) => this.setLanguage(e.value));\n\t\t} else {\n\t\t\tcomponent.copy = true;\n\t\t}\n\n\t\treturn component;\n\t}\n\n\tsetSelection(anchor: number, head: number) {\n\t\tif (!this.dom?.isConnected) return;\n\t\tthis.dom.focus();\n\t\tthis.updating = true;\n\t\tconst model = this.model;\n\t\tif (model) {\n\t\t\tconst start = model.getPositionAt(anchor);\n\t\t\tconst end = model.getPositionAt(head);\n\t\t\tthis.editor.setSelection({\n\t\t\t\tstartLineNumber: start.lineNumber,\n\t\t\t\tstartColumn: start.column,\n\t\t\t\tendLineNumber: end.lineNumber,\n\t\t\t\tendColumn: end.column\n\t\t\t});\n\t\t}\n\t\tthis.updating = false;\n\t}\n\n\tupdate(node: Node) {\n\t\tif (node.type !== this.node.type) return false;\n\t\tif (this.updating) return true;\n\t\tthis.node = node;\n\t\tthis.updateLanguage();\n\t\tthis.dom.content = node.textContent;\n\t\treturn true;\n\t}\n\n\tselectNode() {\n\t\t// this.component.selected = true\n\t\tthis.dom.focus()\n\t}\n\n\tdeselectNode() {\n\t\t// this.component.selected = false\n\t}\n\n\tstopEvent() {\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\t// this.component.destroy()\n\t}\n\n\tprivate updateLanguage() {\n\t\tthis.languageName = this.node.attrs.language || DEFAULT_LANGUAGE;\n\t\tthis.dom.language = this.languageName;\n\t}\n\n\tsetLanguage = (language: string) => {\n\t\tthis.view.dispatch(this.view.state.tr.setNodeAttribute(this.getPos() ?? 0, 'language', language));\n\t}\n\n\t// private codeMirrorKeymap = (): KeyBinding[] => {\n\t// \tconst view = this.view\n\t// \treturn [\n\t// \t\t{ key: 'ArrowUp', run: () => this.maybeEscape('line', -1) },\n\t// \t\t{ key: 'ArrowLeft', run: () => this.maybeEscape('char', -1) },\n\t// \t\t{ key: 'ArrowDown', run: () => this.maybeEscape('line', 1) },\n\t// \t\t{ key: 'ArrowRight', run: () => this.maybeEscape('char', 1) },\n\t// \t\t{\n\t// \t\t\tkey: 'Mod-Enter',\n\t// \t\t\trun: () => {\n\t// \t\t\t\tif (!exitCode(view.state, view.dispatch)) return false\n\n\t// \t\t\t\tview.focus()\n\t// \t\t\t\treturn true\n\t// \t\t\t},\n\t// \t\t},\n\t// \t\t{ key: 'Mod-z', run: () => undo(view.state, view.dispatch) },\n\t// \t\t{ key: 'Shift-Mod-z', run: () => redo(view.state, view.dispatch) },\n\t// \t\t{ key: 'Mod-y', run: () => redo(view.state, view.dispatch) },\n\t// \t\t{\n\t// \t\t\tkey: 'Backspace',\n\t// \t\t\trun: () => {\n\t// \t\t\t\tconst ranges = this.cm.state.selection.ranges\n\n\t// \t\t\t\tif (ranges.length > 1) return false\n\n\t// \t\t\t\tconst selection = ranges[0]\n\n\t// \t\t\t\tif (selection && (!selection.empty || selection.anchor > 0))\n\t// \t\t\t\t\treturn false\n\n\t// \t\t\t\tif (this.cm.state.doc.lines >= 2) return false\n\n\t// \t\t\t\tconst state = this.view.state\n\t// \t\t\t\tconst pos = this.getPos() ?? 0\n\t// \t\t\t\tconst tr = state.tr.replaceWith(\n\t// \t\t\t\t\tpos,\n\t// \t\t\t\t\tpos + this.node.nodeSize,\n\t// \t\t\t\t\tstate.schema.nodes.paragraph!.createChecked({}, this.node.content)\n\t// \t\t\t\t)\n\n\t// \t\t\t\ttr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n\n\t// \t\t\t\tthis.view.dispatch(tr)\n\t// \t\t\t\tthis.view.focus()\n\t// \t\t\t\treturn true\n\t// \t\t\t},\n\t// \t\t},\n\t// \t]\n\t// }\n\n\t// private maybeEscape = (unit: 'line' | 'char', dir: -1 | 1): boolean => {\n\t// \tconst editorSelection = this.editor.getSelection();\n\t// \tlet main: SelectionRange | Line = state.selection.main\n\t// \tif (!main.empty) return false\n\t// \tif (unit === 'line') main = state.doc.lineAt(main.head)\n\t// \tif (dir < 0 ? main.from > 0 : main.to < state.doc.length) return false\n\n\t// \tconst targetPos = (this.getPos() ?? 0) + (dir < 0 ? 0 : this.node.nodeSize)\n\t// \tconst selection = TextSelection.near(\n\t// \t\tthis.view.state.doc.resolve(targetPos),\n\t// \t\tdir\n\t// \t)\n\t// \tconst tr = this.view.state.tr.setSelection(selection).scrollIntoView();\n\t// \tthis.view.dispatch(tr);\n\t// \tthis.view.focus();\n\t// \treturn true;\n\t// }\n\n}\n\nexport type CodeEditorConfig = Record<string, never>;\nexport const defaultCodeEditorConfig = {} as CodeEditorConfig;\n\nexport function createCodeBlockConfig(md: typeof milkdown) {\n\treturn md.utils.$ctx(defaultCodeEditorConfig, 'codeEditorConfigCtx');\n}\n\nexport function createCodeBlockView(md: typeof milkdown) {\n\treturn md.utils.$view(\n\t\tmd.presets.commonmark.codeBlockSchema.node,\n\t\t_ctx => {\n\t\t\t// const config = ctx.get('codeBlockConfigCtx')\n\t\t\t// const languageLoader = new LanguageLoader(config.languages)\n\t\t\treturn (node, view, getPos) => new CodeEditorBlock(md, node, view, getPos);\n\t\t}\n\t);\n}\n\n// function computeChange(oldVal: string, newVal: string): { from: number; to: number; text: string } | null {\n// \tif (oldVal === newVal) return null;\n\n// \tlet start = 0;\n// \tlet oldEnd = oldVal.length;\n// \tlet newEnd = newVal.length;\n\n// \twhile (start < oldEnd && oldVal.charCodeAt(start) === newVal.charCodeAt(start)) ++start;\n// \twhile (oldEnd > start && newEnd > start && oldVal.charCodeAt(oldEnd - 1) === newVal.charCodeAt(newEnd - 1)) {\n// \t\toldEnd--;\n// \t\tnewEnd--;\n// \t}\n\n// \treturn {from: start, to: oldEnd, text: newVal.slice(start, newEnd)};\n// }\n"]}
@@ -0,0 +1,39 @@
1
+ import type * as milkdown from '@omegagrid/milkdown-kit';
2
+ import type { NodeView, EditorView } from '@omegagrid/milkdown-kit/dist/prose/view';
3
+ import type { Node } from '@omegagrid/milkdown-kit/dist/prose/model';
4
+ import { events } from '@omegagrid/core';
5
+ import { CodeBlock } from '@omegagrid/code';
6
+ import { LitElement } from 'lit';
7
+ export declare class HtmlBlockComponent extends LitElement {
8
+ #private;
9
+ static styles: import("lit").CSSResult;
10
+ get content(): string;
11
+ set content(val: string);
12
+ editable: boolean;
13
+ editing: boolean;
14
+ editor: CodeBlock;
15
+ startEdit: () => void;
16
+ constructor();
17
+ commit(): void;
18
+ render: () => import("lit-html/development/directive").DirectiveResult<typeof import("lit/directives/unsafe-html.js").UnsafeHTMLDirective>;
19
+ }
20
+ export declare class HtmlBlock implements NodeView {
21
+ md: typeof milkdown;
22
+ node: Node;
23
+ view: EditorView;
24
+ getPos: () => number | undefined;
25
+ dom: HtmlBlockComponent;
26
+ private updating;
27
+ constructor(md: typeof milkdown, node: Node, view: EditorView, getPos: () => number | undefined);
28
+ _onChange: (e: events.ChangeEvent) => void;
29
+ update(node: Node): boolean;
30
+ selectNode(): void;
31
+ deselectNode(): void;
32
+ stopEvent(): boolean;
33
+ destroy(): void;
34
+ }
35
+ export type CodeEditorConfig = Record<string, never>;
36
+ export declare const defaultCodeEditorConfig: CodeEditorConfig;
37
+ export declare function createHtmlBlockConfig(md: typeof milkdown): milkdown.utils.$Ctx<CodeEditorConfig, "htmlEditorConfigCtx">;
38
+ export declare function createHtmlBlockView(md: typeof milkdown): milkdown.utils.$View<milkdown.utils.$Node, (node: Node, view: EditorView, getPos: () => number | undefined) => HtmlBlock>;
39
+ //# sourceMappingURL=htmlBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlBlock.d.ts","sourceRoot":"","sources":["../../../src/components/features/htmlBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AACrE,OAAO,EAAO,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C,qBACa,kBAAmB,SAAQ,UAAU;;IAEjD,MAAM,CAAC,MAAM,0BA6BX;IAIF,IACI,OAAO,IACM,MAAM,CADe;IACtC,IAAI,OAAO,CAAC,GAAG,EAAE,MAAM,EAGtB;IAGD,QAAQ,UAAS;IAGjB,OAAO,UAAS;IAGhB,MAAM,EAAE,SAAS,CAAC;IAElB,SAAS,aAEP;;IAOF,MAAM;IAMN,MAAM,qIAyBuB;CAE7B;AAGD,qBAAa,SAAU,YAAW,QAAQ;IAOjC,EAAE,EAAE,OAAO,QAAQ;IACnB,IAAI,EAAE,IAAI;IACV,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IATxC,GAAG,EAAE,kBAAkB,CAAC;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAKjB,EAAE,EAAE,OAAO,QAAQ,EACnB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,MAAM,GAAG,SAAS;IAQxC,SAAS,GAAI,GAAG,MAAM,CAAC,WAAW,UAIjC;IAED,MAAM,CAAC,IAAI,EAAE,IAAI;IAQjB,UAAU;IAKV,YAAY;IAIZ,SAAS;IAIT,OAAO;CAyEP;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACrD,eAAO,MAAM,uBAAuB,EAAS,gBAAgB,CAAC;AAE9D,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,OAAO,QAAQ,gEAExD;AAED,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,OAAO,QAAQ,6HAQtD"}
@@ -0,0 +1,52 @@
1
+ var _HtmlBlockComponent_content,__decorate=this&&this.__decorate||function(t,e,o,i){var n,r=arguments.length,s=r<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(t,e,o,i);else for(var l=t.length-1;l>=0;l--)(n=t[l])&&(s=(r<3?n(s):r>3?n(e,o,s):n(e,o))||s);return r>3&&s&&Object.defineProperty(e,o,s),s},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(t,e,o,i){if("a"===o&&!i)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===o?i:"a"===o?i.call(t):i?i.value:e.get(t)},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(t,e,o,i,n){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!n:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?n.call(t,o):n?n.value=o:e.set(t,o),o};import{dom,events}from"@omegagrid/core";import{LitElement,css,html}from"lit";import{customElement,property,query}from"lit/decorators.js";import{unsafeHTML}from"lit/directives/unsafe-html.js";import{msg}from"@omegagrid/localize";let HtmlBlockComponent=class extends LitElement{get content(){return __classPrivateFieldGet(this,_HtmlBlockComponent_content,"f")}set content(t){__classPrivateFieldSet(this,_HtmlBlockComponent_content,t,"f"),this.requestUpdate()}constructor(){super(),_HtmlBlockComponent_content.set(this,""),this.editable=!1,this.editing=!1,this.startEdit=()=>{this.editing=!0},this.render=()=>this.editable?html`
2
+ <div class="title">Raw HTML</div>
3
+ <div class="body">
4
+ ${this.editing?html`
5
+ <og-code-block
6
+ disableToolbar
7
+ dynamicHeight
8
+ language="html"
9
+ .content="${this.content}"
10
+ .editorOptions="${{minimap:{enabled:!1},lineNumbers:{renderType:0}}}"
11
+ @blur="${()=>this.commit()}"
12
+ @code.ready="${()=>this.editor.focus()}">
13
+ </og-code-block>
14
+ `:this.content?html`
15
+ <og-code-view
16
+ language="html"
17
+ .content="${this.content}" >
18
+ </og-code-view>
19
+ `:html`
20
+ <div class="placeholder">${msg("Insert HTML")}</div>
21
+ `}
22
+ </div>
23
+ `:unsafeHTML(this.content),this.addEventListener("click",(()=>this.startEdit()))}commit(){this.editing=!1,__classPrivateFieldSet(this,_HtmlBlockComponent_content,this.editor.model.getValue(),"f"),this.dispatchEvent(new events.ChangeEvent(__classPrivateFieldGet(this,_HtmlBlockComponent_content,"f")))}};_HtmlBlockComponent_content=new WeakMap,HtmlBlockComponent.styles=css`
24
+ * {
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ :host {
29
+ font-size: var(--og-font-size);
30
+ display: block;
31
+ white-space: normal;
32
+ border: 1px solid var(--og-border-color);
33
+ }
34
+
35
+ .title {
36
+ font-size: 10px;
37
+ color: var(--og-accent-color);
38
+ padding: 2px;
39
+ border-bottom: 1px solid var(--og-border-color);
40
+ }
41
+
42
+ .html {
43
+ padding: 2px;
44
+ white-space: pre-wrap;
45
+ word-wrap: break-word;
46
+ cursor: pointer;
47
+ }
48
+
49
+ og-code-view, .placeholder {
50
+ cursor: pointer;
51
+ }
52
+ `,__decorate([property({type:String})],HtmlBlockComponent.prototype,"content",null),__decorate([property({type:Boolean})],HtmlBlockComponent.prototype,"editable",void 0),__decorate([property({type:Boolean})],HtmlBlockComponent.prototype,"editing",void 0),__decorate([query("og-code-block")],HtmlBlockComponent.prototype,"editor",void 0),HtmlBlockComponent=__decorate([customElement("og-markdown-html-block")],HtmlBlockComponent);export{HtmlBlockComponent};export class HtmlBlock{constructor(t,e,o,i){this.md=t,this.node=e,this.view=o,this.getPos=i,this.updating=!1,this._onChange=t=>{if(this.updating)return;const e=this.view.state.tr;this.view.dispatch(e.setNodeAttribute(this.getPos()??0,"value",t.value))},this.dom=dom.createElement("og-markdown-html-block"),this.dom.editable=this.view.editable,this.dom.content=this.node.attrs?.value,this.dom.addEventListener("change",this._onChange)}update(t){return t.type===this.node.type&&(this.updating||(this.node=t,this.dom.content=this.node.attrs?.value),!0)}selectNode(){this.view.editable&&this.dom.startEdit(),this.dom.focus()}deselectNode(){}stopEvent(){return!0}destroy(){}}export const defaultCodeEditorConfig={};export function createHtmlBlockConfig(t){return t.utils.$ctx(defaultCodeEditorConfig,"htmlEditorConfigCtx")}export function createHtmlBlockView(t){return t.utils.$view(t.presets.commonmark.htmlSchema.node,(e=>(e,o,i)=>new HtmlBlock(t,e,o,i)))}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"htmlBlock.js","sourceRoot":"","sources":["../../../src/components/features/htmlBlock.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as milkdown from '@omegagrid/milkdown-kit';\nimport type { NodeView, EditorView } from '@omegagrid/milkdown-kit/dist/prose/view';\nimport type { Node } from '@omegagrid/milkdown-kit/dist/prose/model';\nimport { dom, events } from '@omegagrid/core';\nimport { CodeBlock } from '@omegagrid/code';\nimport { LitElement, css, html } from 'lit';\nimport { customElement, property, query } from 'lit/decorators.js';\nimport { unsafeHTML } from 'lit/directives/unsafe-html.js';\nimport { msg } from '@omegagrid/localize';\n\n@customElement('og-markdown-html-block')\nexport class HtmlBlockComponent 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\tfont-size: var(--og-font-size);\n\t\t\tdisplay: block;\n\t\t\twhite-space: normal;\n\t\t\tborder: 1px solid var(--og-border-color);\n\t\t}\n\n\t\t.title {\n\t\t\tfont-size: 10px;\n\t\t\tcolor: var(--og-accent-color);\n\t\t\tpadding: 2px;\n\t\t\tborder-bottom: 1px solid var(--og-border-color);\n\t\t}\n\t\t\n\t\t.html {\n\t\t\tpadding: 2px;\n\t\t\twhite-space: pre-wrap;\n\t\t\tword-wrap: break-word;\n\t\t\tcursor: pointer;\n\t\t}\n\n\t\tog-code-view, .placeholder {\n\t\t\tcursor: pointer;\n\t\t}\n\t`;\n\n\t#content: string = '';\n\n\t@property({type: String})\n\tget content() { return this.#content }\n\tset content(val: string) {\n\t\tthis.#content = val;\n\t\tthis.requestUpdate();\n\t}\n\n\t@property({type: Boolean})\n\teditable = false;\n\n\t@property({type: Boolean})\n\tediting = false;\n\n\t@query('og-code-block')\n\teditor: CodeBlock;\n\n\tstartEdit = () => {\n\t\tthis.editing = true;\n\t};\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('click', () => this.startEdit());\n\t}\n\n\tcommit() {\n\t\tthis.editing = false;\n\t\tthis.#content = this.editor.model.getValue();\n\t\tthis.dispatchEvent(new events.ChangeEvent(this.#content));\n\t}\n\n\trender = () => this.editable ? html`\n\t\t<div class=\"title\">Raw HTML</div>\n\t\t<div class=\"body\">\n\t\t\t${this.editing ? html`\n\t\t\t\t<og-code-block\n\t\t\t\t\tdisableToolbar\n\t\t\t\t\tdynamicHeight\n\t\t\t\t\tlanguage=\"html\"\n\t\t\t\t\t.content=\"${this.content}\"\n\t\t\t\t\t.editorOptions=\"${{\n\t\t\t\t\t\tminimap: {enabled: false},\n\t\t\t\t\t\tlineNumbers: {renderType: 0}\n\t\t\t\t\t}}\"\n\t\t\t\t\t@blur=\"${() => this.commit()}\"\n\t\t\t\t\t@code.ready=\"${() => this.editor.focus()}\">\n\t\t\t\t</og-code-block>\n\t\t\t` : (this.content ? html`\n\t\t\t\t<og-code-view \n\t\t\t\t\tlanguage=\"html\"\n\t\t\t\t\t.content=\"${this.content}\" >\n\t\t\t\t</og-code-view>\n\t\t\t` : html`\n\t\t\t\t<div class=\"placeholder\">${msg('Insert HTML')}</div>\n\t\t\t`)}\n\t\t</div>\n\t` : unsafeHTML(this.content);\n//<div class=\"html\" @click=\"${() => this.startEdit()}\">${this.content}</div>\n}\n\n\nexport class HtmlBlock implements NodeView {\n\tdom: HtmlBlockComponent;\n\tprivate updating = false;\n\t// private get editor() { return (this.dom as CodeBlock)?.editor?.editor }\n\t// get model() { return this.editor?.getModel() }\n\n\tconstructor(\n\t\tpublic md: typeof milkdown,\n\t\tpublic node: Node,\n\t\tpublic view: EditorView,\n\t\tpublic getPos: () => number | undefined\n\t) {\n\t\tthis.dom = dom.createElement<HtmlBlockComponent>('og-markdown-html-block');\n\t\tthis.dom.editable = this.view.editable;\n\t\tthis.dom.content = this.node.attrs?.value;\n\t\tthis.dom.addEventListener('change', this._onChange);\n\t}\n\n\t_onChange = (e: events.ChangeEvent) => {\n\t\tif (this.updating) return;\n\t\tconst tr = this.view.state.tr;\n\t\tthis.view.dispatch(tr.setNodeAttribute(this.getPos() ?? 0, 'value', e.value));\n\t}\n\n\tupdate(node: Node) {\n\t\tif (node.type !== this.node.type) return false;\n\t\tif (this.updating) return true;\n\t\tthis.node = node;\n\t\tthis.dom.content = this.node.attrs?.value;\n\t\treturn true;\n\t}\n\n\tselectNode() {\n\t\tif (this.view.editable) this.dom.startEdit();\n\t\tthis.dom.focus()\n\t}\n\n\tdeselectNode() {\n\t\t// this.component.selected = false\n\t}\n\n\tstopEvent() {\n\t\treturn true\n\t}\n\n\tdestroy() {\n\t\t// this.component.destroy()\n\t}\n\n\t// private codeMirrorKeymap = (): KeyBinding[] => {\n\t// \tconst view = this.view\n\t// \treturn [\n\t// \t\t{ key: 'ArrowUp', run: () => this.maybeEscape('line', -1) },\n\t// \t\t{ key: 'ArrowLeft', run: () => this.maybeEscape('char', -1) },\n\t// \t\t{ key: 'ArrowDown', run: () => this.maybeEscape('line', 1) },\n\t// \t\t{ key: 'ArrowRight', run: () => this.maybeEscape('char', 1) },\n\t// \t\t{\n\t// \t\t\tkey: 'Mod-Enter',\n\t// \t\t\trun: () => {\n\t// \t\t\t\tif (!exitCode(view.state, view.dispatch)) return false\n\n\t// \t\t\t\tview.focus()\n\t// \t\t\t\treturn true\n\t// \t\t\t},\n\t// \t\t},\n\t// \t\t{ key: 'Mod-z', run: () => undo(view.state, view.dispatch) },\n\t// \t\t{ key: 'Shift-Mod-z', run: () => redo(view.state, view.dispatch) },\n\t// \t\t{ key: 'Mod-y', run: () => redo(view.state, view.dispatch) },\n\t// \t\t{\n\t// \t\t\tkey: 'Backspace',\n\t// \t\t\trun: () => {\n\t// \t\t\t\tconst ranges = this.cm.state.selection.ranges\n\n\t// \t\t\t\tif (ranges.length > 1) return false\n\n\t// \t\t\t\tconst selection = ranges[0]\n\n\t// \t\t\t\tif (selection && (!selection.empty || selection.anchor > 0))\n\t// \t\t\t\t\treturn false\n\n\t// \t\t\t\tif (this.cm.state.doc.lines >= 2) return false\n\n\t// \t\t\t\tconst state = this.view.state\n\t// \t\t\t\tconst pos = this.getPos() ?? 0\n\t// \t\t\t\tconst tr = state.tr.replaceWith(\n\t// \t\t\t\t\tpos,\n\t// \t\t\t\t\tpos + this.node.nodeSize,\n\t// \t\t\t\t\tstate.schema.nodes.paragraph!.createChecked({}, this.node.content)\n\t// \t\t\t\t)\n\n\t// \t\t\t\ttr.setSelection(TextSelection.near(tr.doc.resolve(pos)))\n\n\t// \t\t\t\tthis.view.dispatch(tr)\n\t// \t\t\t\tthis.view.focus()\n\t// \t\t\t\treturn true\n\t// \t\t\t},\n\t// \t\t},\n\t// \t]\n\t// }\n\n\t// private maybeEscape = (unit: 'line' | 'char', dir: -1 | 1): boolean => {\n\t// \tconst editorSelection = this.editor.getSelection();\n\t// \tlet main: SelectionRange | Line = state.selection.main\n\t// \tif (!main.empty) return false\n\t// \tif (unit === 'line') main = state.doc.lineAt(main.head)\n\t// \tif (dir < 0 ? main.from > 0 : main.to < state.doc.length) return false\n\n\t// \tconst targetPos = (this.getPos() ?? 0) + (dir < 0 ? 0 : this.node.nodeSize)\n\t// \tconst selection = TextSelection.near(\n\t// \t\tthis.view.state.doc.resolve(targetPos),\n\t// \t\tdir\n\t// \t)\n\t// \tconst tr = this.view.state.tr.setSelection(selection).scrollIntoView();\n\t// \tthis.view.dispatch(tr);\n\t// \tthis.view.focus();\n\t// \treturn true;\n\t// }\n\n}\n\nexport type CodeEditorConfig = Record<string, never>;\nexport const defaultCodeEditorConfig = {} as CodeEditorConfig;\n\nexport function createHtmlBlockConfig(md: typeof milkdown) {\n\treturn md.utils.$ctx(defaultCodeEditorConfig, 'htmlEditorConfigCtx');\n}\n\nexport function createHtmlBlockView(md: typeof milkdown) {\n\treturn md.utils.$view(\n\t\tmd.presets.commonmark.htmlSchema.node,\n\t\t_ctx => {\n\t\t\t// const config = ctx.get('codeBlockConfigCtx')\n\t\t\treturn (node, view, getPos) => new HtmlBlock(md, node, view, getPos);\n\t\t}\n\t);\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import type * as milkdown from '@omegagrid/milkdown-kit';
2
+ export * from './blockEditMenu';
3
+ export * from './htmlBlock';
4
+ export * from './linkEdit';
5
+ export type DefineFeature<TConfig = unknown> = (editor: milkdown.core.Editor, config?: TConfig) => void | Promise<void>;
6
+ export declare function configureFeatures(features: EditorFeature[], md: typeof milkdown): (ctx: milkdown.ctx.Ctx) => void;
7
+ export declare enum EditorFeature {
8
+ BlockEdit = "block-edit",
9
+ Cursor = "cursor",
10
+ CodeEditor = "code-editor",
11
+ LinkTooltip = "link-tooltip",
12
+ ImageBlock = "image-block",
13
+ Toolbar = "toolbar",
14
+ Placeholder = "placeholder",
15
+ Table = "table",
16
+ Html = "html",
17
+ Emoji = "emoji",
18
+ Toc = "toc"
19
+ }
20
+ export type FeatureDefinition = {
21
+ default: boolean;
22
+ init: () => void;
23
+ };
24
+ export declare function getFeatures(editor: milkdown.core.Editor, md: typeof milkdown, options: {
25
+ onUpload?: (file: File) => Promise<string>;
26
+ modifyImageUrl?: (file: string) => Promise<string> | string;
27
+ }): Map<EditorFeature, FeatureDefinition>;
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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;AAQzD,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,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;CACX;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAA;CAChB,CAAC;AAUF,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,yCAyJD"}
@@ -0,0 +1 @@
1
+ import{BlockHandleView}from"./blockEdit";import{ToolbarView}from"./toolbar";import{createPlaceHolder}from"./placeholder";import{createCodeBlockConfig,createCodeBlockView}from"./codeBlock";import{createHtmlBlockConfig,createHtmlBlockView}from"./htmlBlock";import{createTocBlock}from"./tocBlock";import linkEdit from"./linkEdit";export*from"./blockEditMenu";export*from"./htmlBlock";export*from"./linkEdit";export function configureFeatures(o,e){return i=>{i.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"}(EditorFeature||(EditorFeature={}));const createModifyImageUrl=o=>async e=>{if(!e)return null;const i=o(e);return"string"==typeof e?i:await i};export function getFeatures(o,e,i){const t=i.modifyImageUrl?createModifyImageUrl(i.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:'<og-icon icon="upload"></og-icon>',imageIcon:'<og-icon icon="image"></og-icon>',confirmButton:'<og-icon icon="check"></og-icon>',uploadPlaceholderText:"or paste link",onUpload:i.onUpload,proxyDomURL:t}))),o.update(e.components.imageBlock.imageBlockConfig.key,(o=>({uploadButton:"Upload file",imageIcon:'<og-icon icon="image"></og-icon>',captionIcon:'<og-icon icon="comment"></og-icon>',confirmButton:"Confirm",captionPlaceholderText:"Write Image Caption",uploadPlaceholderText:"or paste link",onUpload:i.onUpload,proxyDomURL:t})))})).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 i=e.plugins.tooltip.tooltipFactory("MARKDOWN_TOOLBAR");o.config((o=>{o.set(i.key,{view:i=>new ToolbarView(o,i,e)})})).use(i)}}],[EditorFeature.Placeholder,{default:!0,init:()=>{const{config:i,plugin:t}=createPlaceHolder(e);o.config((o=>{o.update(i.key,(o=>({...o})))})).use(t).use(i)}}],[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'<og-icon icon="plus"></og-icon>';case"delete_row":case"delete_col":return'<og-icon icon="trash"></og-icon>';case"align_col_left":return'<og-icon icon="align-left"></og-icon>';case"align_col_center":return'<og-icon icon="align-center"></og-icon>';case"align_col_right":return'<og-icon icon="align-right"></og-icon>';case"col_drag_handle":return'<og-icon icon="grip-lines-vertical"></og-icon>';case"row_drag_handle":return'<og-icon icon="grip-lines"></og-icon>'}}})))})).use(e.components.tableBlock.tableBlock)}}],[EditorFeature.CodeEditor,{default:!0,init:()=>{const i=createCodeBlockConfig(e),t=createCodeBlockView(e);o.config((o=>{o.update(i.key,(o=>({})))})).use([t,i])}}],[EditorFeature.Html,{default:!0,init:()=>{const i=createHtmlBlockConfig(e),t=createHtmlBlockView(e);o.config((o=>{o.update(i.key,(o=>({})))})).use([t,i])}}],[EditorFeature.Emoji,{default:!0,init:()=>{e.plugins.emoji&&o.use(e.plugins.emoji.emoji)}}],[EditorFeature.Toc,{default:!0,init:()=>{const i=createTocBlock(e);o.config((o=>{o.update(i.tocConfig.key,(o=>({})))})).use(i.plugins)}}]])}
@@ -0,0 +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 { ToolbarView } from './toolbar';\nimport { createPlaceHolder } from './placeholder';\nimport { createCodeBlockConfig, createCodeBlockView } from './codeBlock';\nimport { createHtmlBlockConfig, createHtmlBlockView } from './htmlBlock';\nimport { createTocBlock } from './tocBlock';\nimport linkEdit from './linkEdit';\n\nexport * from './blockEditMenu';\nexport * from './htmlBlock';\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}\n\nexport type FeatureDefinition = {\n\tdefault: boolean,\n\tinit: () => void\n};\n\nconst createModifyImageUrl = (fn: (url: string) => Promise<string>|string) => {\n\treturn async (url: string) => {\n\t\tif (!url) return null;\n\t\tconst modUrl = fn(url);\n\t\treturn typeof url === 'string' ? modUrl : await modUrl;\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: '<og-icon icon=\"upload\"></og-icon>',\n\t\t\t\t\t\timageIcon: '<og-icon icon=\"image\"></og-icon>',\n\t\t\t\t\t\tconfirmButton: '<og-icon icon=\"check\"></og-icon>',\n\t\t\t\t\t\tuploadPlaceholderText: 'or paste link',\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: 'Upload file',\n\t\t\t\t\t\timageIcon: '<og-icon icon=\"image\"></og-icon>',\n\t\t\t\t\t\tcaptionIcon: '<og-icon icon=\"comment\"></og-icon>',\n\t\t\t\t\t\tconfirmButton: 'Confirm',\n\t\t\t\t\t\tcaptionPlaceholderText: 'Write Image Caption',\n\t\t\t\t\t\tuploadPlaceholderText: 'or paste link',\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 '<og-icon icon=\"plus\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'add_col': return '<og-icon icon=\"plus\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'delete_row': return '<og-icon icon=\"trash\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'delete_col': return '<og-icon icon=\"trash\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'align_col_left': return '<og-icon icon=\"align-left\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'align_col_center': return '<og-icon icon=\"align-center\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'align_col_right': return '<og-icon icon=\"align-right\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'col_drag_handle': return '<og-icon icon=\"grip-lines-vertical\"></og-icon>';\n\t\t\t\t\t\t\t\tcase 'row_drag_handle': return '<og-icon icon=\"grip-lines\"></og-icon>';\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}]\n\t]);\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { LitElement } from "lit";
2
+ import type * as milkdown from '@omegagrid/milkdown-kit';
3
+ import { Input } from "@omegagrid/core";
4
+ export declare class LinkEdit extends LitElement {
5
+ static styles: import("lit").CSSResult;
6
+ ctx: milkdown.ctx.Ctx;
7
+ value: string;
8
+ input: Input;
9
+ constructor();
10
+ render: () => import("lit").TemplateResult<1>;
11
+ }
12
+ //# sourceMappingURL=component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAE5C,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,KAAK,EAAU,MAAM,iBAAiB,CAAC;AAEhD,qBACa,QAAS,SAAQ,UAAU;IAEvC,MAAM,CAAC,MAAM,0BA8BX;IAEF,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IAGtB,KAAK,SAAM;IAGX,KAAK,EAAE,KAAK,CAAC;;IAab,MAAM,wCAmBJ;CACF"}
@@ -0,0 +1,46 @@
1
+ var __decorate=this&&this.__decorate||function(t,e,o,n){var i,r=arguments.length,c=r<3?e:null===n?n=Object.getOwnPropertyDescriptor(e,o):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(t,e,o,n);else for(var s=t.length-1;s>=0;s--)(i=t[s])&&(c=(r<3?i(c):r>3?i(e,o,c):i(e,o))||c);return r>3&&c&&Object.defineProperty(e,o,c),c};import{LitElement,css,html}from"lit";import{customElement,property,query}from"lit/decorators.js";import{events}from"@omegagrid/core";let LinkEdit=class extends LitElement{constructor(){super(),this.value="",this.render=()=>html`
2
+ <div class="inner">
3
+ <og-icon icon="link"></og-icon>
4
+
5
+ <og-input
6
+ placeholder="URL"
7
+ .value="${this.value}">
8
+ </og-input>
9
+
10
+ <og-button icon="check" @click="${()=>this.dispatchEvent(new events.ChangeEvent({value:this.input.value}))}">
11
+ </og-button>
12
+
13
+ <og-button icon="trash" color="red" @click="${()=>this.dispatchEvent(new events.ChangeEvent({value:null}))}">
14
+ </og-button>
15
+ </div>
16
+ `,this.addEventListener("click",(t=>t.stopPropagation())),this.addEventListener("mousedown",(t=>t.stopPropagation())),this.addEventListener("mouseup",(t=>t.stopPropagation()))}};LinkEdit.styles=css`
17
+ * {
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ :host {
22
+ display: none;
23
+ position: absolute;
24
+ background-color: var(--og-background-color);
25
+ border: 1px solid var(--og-accent-color);
26
+ }
27
+
28
+ .inner {
29
+ display: flex;
30
+ height: 22px;
31
+ line-height: 22px;
32
+ }
33
+
34
+ .inner > og-icon {
35
+ flex: 0 20px;
36
+ text-align: center;
37
+ }
38
+
39
+ .inner > og-input {
40
+ flex: 1;
41
+ }
42
+
43
+ .inner > og-button {
44
+ flex: 0 20px;
45
+ }
46
+ `,__decorate([property({type:String})],LinkEdit.prototype,"value",void 0),__decorate([query("og-input")],LinkEdit.prototype,"input",void 0),LinkEdit=__decorate([customElement("og-markdown-linkedit")],LinkEdit);export{LinkEdit};
@@ -0,0 +1 @@
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/component.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAEnE,OAAO,EAAS,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,IAAM,QAAQ,GAAd,MAAM,QAAS,SAAQ,UAAU;IA0CvC;QACC,KAAK,EAAE,CAAC;QANT,UAAK,GAAG,EAAE,CAAC;QAYX,gDAAgD;QAChD,qDAAqD;QACrD,IAAI;QAEJ,WAAM,GAAG,GAAG,EAAE,CAAC,IAAI,CAAA;;;;;;cAMN,IAAI,CAAC,KAAK;;;qCAGa,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC;YACjF,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;SACvB,CAAC,CAAC;;;iDAG2C,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,WAAW,CAAC;YAC7F,KAAK,EAAE,IAAI;SACX,CAAC,CAAC;;;EAGJ,CAAC;QA5BD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,CAAC;;AA7CM,eAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BlB,AA9BY,CA8BX;AAKF;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAC,CAAC;uCACd;AAGX;IADC,KAAK,CAAC,UAAU,CAAC;uCACL;AAxCD,QAAQ;IADpB,aAAa,CAAC,sBAAsB,CAAC;GACzB,QAAQ,CAyEpB","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement, property, query } from \"lit/decorators.js\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { Input, events } from \"@omegagrid/core\";\n\n@customElement('og-markdown-linkedit')\nexport class LinkEdit 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}\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 20px;\n\t\t\ttext-align: center;\n\t\t}\n\n\t\t.inner > og-input {\n\t\t\tflex: 1;\n\t\t}\n\n\t\t.inner > og-button {\n\t\t\tflex: 0 20px;\n\t\t}\n\t`;\n\n\tctx: milkdown.ctx.Ctx;\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\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// command(key: milkdown.core.CmdKey<unknown>) {\n\t// \tthis.ctx.get(this.md.core.commandsCtx).call(key);\n\t// }\n\n\trender = () => html`\n\t\t<div class=\"inner\">\n\t\t\t<og-icon icon=\"link\"></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</og-input>\n\n\t\t\t<og-button icon=\"check\" @click=\"${() => this.dispatchEvent(new events.ChangeEvent({\n\t\t\t\tvalue: this.input.value\n\t\t\t}))}\">\n\t\t\t</og-button>\n\n\t\t\t<og-button icon=\"trash\" color=\"red\" @click=\"${() => this.dispatchEvent(new events.ChangeEvent({\n\t\t\t\tvalue: null\n\t\t\t}))}\">\n\t\t\t</og-button>\n\t\t</div>\n\t`;\n}"]}
@@ -0,0 +1,4 @@
1
+ import type * as milkdown from '@omegagrid/milkdown-kit';
2
+ export declare function getTooltip(): any;
3
+ export declare function configureLinkEdit(ctx: milkdown.ctx.Ctx): void;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAQzD,wBAAgB,UAAU,QAGzB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,QAiEtD"}
@@ -0,0 +1 @@
1
+ import{debounce}from"ts-debounce";import{LinkEditView}from"./view";import{md}from"../../../loader";import{findMarkPosition,shouldShowPreviewWhenHover}from"./utils";import{getLinkEditAPI,getLinkEditState}from"./slices";let tooltip;export function getTooltip(){return tooltip||(tooltip=md.plugins.tooltip.tooltipFactory("MARKDOWN_LINK_EDIT")),tooltip}export function configureLinkEdit(e){const t=getLinkEditState();let o;e.update(getLinkEditAPI().key,(e=>({...e,addLink:(e,t)=>{o?.addLink(e,t)},editLink:(e,t,i)=>{o?.editLink(e,t,i)},removeLink:(e,t)=>{o?.removeLink(e,t)}})));const i=debounce(((i,n)=>{if(!o)return;if(!i.hasFocus())return;if("edit"===e.get(t.key).mode)return;const r=shouldShowPreviewWhenHover(e,i,n);if(r){const e=i.state.doc.resolve(r.pos),t=findMarkPosition(r.mark,r.node,i.state.doc,e.before(),e.after()),n=t.start,d=t.end;o.show(r.mark,n,d,md.prose.posToDOMRect(i,n,d))}else o.hide()}),200);e.set(getTooltip().key,{props:{handleDOMEvents:{mousemove:i,mouseleave:()=>{setTimeout((()=>{o?.hide()}),200)}}},view:t=>(o=new LinkEditView(e,t),o)})}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/config.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type { EditorView } from \"@omegagrid/milkdown-kit/dist/prose/view\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { debounce } from \"ts-debounce\";\nimport { LinkEditView } from \"./view\";\nimport { md } from \"../../../loader\";\nimport { findMarkPosition, shouldShowPreviewWhenHover } from \"./utils\";\nimport { getLinkEditAPI, getLinkEditState } from \"./slices\";\n\nlet tooltip: any;\nexport function getTooltip() {\n\tif (!tooltip) tooltip = md.plugins.tooltip.tooltipFactory('MARKDOWN_LINK_EDIT');\n\treturn tooltip;\n}\n\nexport function configureLinkEdit(ctx: milkdown.ctx.Ctx) {\n\tconst linkEditState = getLinkEditState();\n\tlet linkEditView: LinkEditView | null;\n\n\tctx.update(getLinkEditAPI().key, (api) => ({\n\t\t...api,\n\t\taddLink: (from, to) => {\n\t\t\tlinkEditView?.addLink(from, to)\n\t\t},\n\t\teditLink: (mark, from, to) => {\n\t\t\tlinkEditView?.editLink(mark, from, to)\n\t\t},\n\t\tremoveLink: (from, to) => {\n\t\t\tlinkEditView?.removeLink(from, to)\n\t\t},\n\t}));\n\n\tconst DELAY = 200\n\tconst onMouseMove = debounce((view: EditorView, event: MouseEvent) => {\n\t\tif (!linkEditView) return;\n\t\tif (!view.hasFocus()) return;\n\t\n\t\tconst state = ctx.get(linkEditState.key);\n\t\tif (state.mode === 'edit') return;\n\t\n\t\tconst result = shouldShowPreviewWhenHover(ctx, view, event)\n\t\t\tif (result) {\n\t\t\tconst position = view.state.doc.resolve(result.pos);\n\t\t\tconst markPosition = findMarkPosition(\n\t\t\t\tresult.mark,\n\t\t\t\tresult.node,\n\t\t\t\tview.state.doc,\n\t\t\t\tposition.before(),\n\t\t\t\tposition.after()\n\t\t\t);\n\t\t\tconst from = markPosition.start;\n\t\t\tconst to = markPosition.end;\n\t\t\tlinkEditView.show(\n\t\t\t\tresult.mark,\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t\tmd.prose.posToDOMRect(view, from, to)\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\n\t\tlinkEditView.hide();\n\t}, DELAY)\n\t\n\tconst onMouseLeave = () => {\n\t\tsetTimeout(() => { linkEditView?.hide() }, DELAY);\n\t}\n\t\n\tctx.set(getTooltip().key, {\n\t\tprops: {\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: onMouseMove,\n\t\t\t\tmouseleave: onMouseLeave,\n\t\t\t},\n\t\t},\n\t\tview: (view: EditorView) => {\n\t\t\tlinkEditView = new LinkEditView(ctx, view);\n\t\t\treturn linkEditView;\n\t\t},\n\t})\n}\n"]}