@omegagrid/markdown 0.10.2 → 0.10.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/features/blockEdit.d.ts +23 -0
- package/dist/components/features/blockEdit.d.ts.map +1 -0
- package/dist/components/features/blockEdit.js +38 -0
- package/dist/components/features/blockEdit.js.map +1 -0
- package/dist/components/features/blockEditMenu.d.ts +16 -0
- package/dist/components/features/blockEditMenu.d.ts.map +1 -0
- package/dist/components/features/blockEditMenu.js +25 -0
- package/dist/components/features/blockEditMenu.js.map +1 -0
- package/dist/components/features/codeBlock.d.ts +31 -0
- package/dist/components/features/codeBlock.d.ts.map +1 -0
- package/dist/components/features/codeBlock.js +1 -0
- package/dist/components/features/codeBlock.js.map +1 -0
- package/dist/components/features/htmlBlock.d.ts +39 -0
- package/dist/components/features/htmlBlock.d.ts.map +1 -0
- package/dist/components/features/htmlBlock.js +52 -0
- package/dist/components/features/htmlBlock.js.map +1 -0
- package/dist/components/features/index.d.ts +28 -0
- package/dist/components/features/index.d.ts.map +1 -0
- package/dist/components/features/index.js +1 -0
- package/dist/components/features/index.js.map +1 -0
- package/dist/components/features/linkEdit/component.d.ts +12 -0
- package/dist/components/features/linkEdit/component.d.ts.map +1 -0
- package/dist/components/features/linkEdit/component.js +46 -0
- package/dist/components/features/linkEdit/component.js.map +1 -0
- package/dist/components/features/linkEdit/config.d.ts +4 -0
- package/dist/components/features/linkEdit/config.d.ts.map +1 -0
- package/dist/components/features/linkEdit/config.js +1 -0
- package/dist/components/features/linkEdit/config.js.map +1 -0
- package/dist/components/features/linkEdit/index.d.ts +10 -0
- package/dist/components/features/linkEdit/index.d.ts.map +1 -0
- package/dist/components/features/linkEdit/index.js +1 -0
- package/dist/components/features/linkEdit/index.js.map +1 -0
- package/dist/components/features/linkEdit/slices.d.ts +20 -0
- package/dist/components/features/linkEdit/slices.d.ts.map +1 -0
- package/dist/components/features/linkEdit/slices.js +1 -0
- package/dist/components/features/linkEdit/slices.js.map +1 -0
- package/dist/components/features/linkEdit/utils.d.ts +14 -0
- package/dist/components/features/linkEdit/utils.d.ts.map +1 -0
- package/dist/components/features/linkEdit/utils.js +1 -0
- package/dist/components/features/linkEdit/utils.js.map +1 -0
- package/dist/components/features/linkEdit/view.d.ts +19 -0
- package/dist/components/features/linkEdit/view.d.ts.map +1 -0
- package/dist/components/features/linkEdit/view.js +1 -0
- package/dist/components/features/linkEdit/view.js.map +1 -0
- package/dist/components/features/placeholder.d.ts +13 -0
- package/dist/components/features/placeholder.d.ts.map +1 -0
- package/dist/components/features/placeholder.js +1 -0
- package/dist/components/features/placeholder.js.map +1 -0
- package/dist/components/features/tocBlock.d.ts +21 -0
- package/dist/components/features/tocBlock.d.ts.map +1 -0
- package/dist/components/features/tocBlock.js +46 -0
- package/dist/components/features/tocBlock.js.map +1 -0
- package/dist/components/features/toolbar.d.ts +24 -0
- package/dist/components/features/toolbar.d.ts.map +1 -0
- package/dist/components/features/toolbar.js +67 -0
- package/dist/components/features/toolbar.js.map +1 -0
- package/dist/components/features/utils.d.ts +12 -0
- package/dist/components/features/utils.d.ts.map +1 -0
- package/dist/components/features/utils.js +1 -0
- package/dist/components/features/utils.js.map +1 -0
- package/dist/components/index.d.ts +4 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/markdownEditor.d.ts +36 -0
- package/dist/components/markdownEditor.d.ts.map +1 -0
- package/dist/components/markdownEditor.js +7 -0
- package/dist/components/markdownEditor.js.map +1 -0
- package/dist/components/markdownEditor.style.d.ts +2 -0
- package/dist/components/markdownEditor.style.d.ts.map +1 -0
- package/dist/components/markdownEditor.style.js +230 -0
- package/dist/components/markdownEditor.style.js.map +1 -0
- package/dist/components/markdownView.d.ts +5 -0
- package/dist/components/markdownView.d.ts.map +1 -0
- package/dist/components/markdownView.js +1 -0
- package/dist/components/markdownView.js.map +1 -0
- package/dist/components/markdownView.style.d.ts +2 -0
- package/dist/components/markdownView.style.d.ts.map +1 -0
- package/dist/components/markdownView.style.js +44 -0
- package/dist/components/markdownView.style.js.map +1 -0
- package/dist/components/styles/block-edit.d.ts +2 -0
- package/dist/components/styles/block-edit.d.ts.map +1 -0
- package/dist/components/styles/block-edit.js +132 -0
- package/dist/components/styles/block-edit.js.map +1 -0
- package/dist/components/styles/cursor.d.ts +2 -0
- package/dist/components/styles/cursor.d.ts.map +1 -0
- package/dist/components/styles/cursor.js +12 -0
- package/dist/components/styles/cursor.js.map +1 -0
- package/dist/components/styles/emoji.d.ts +2 -0
- package/dist/components/styles/emoji.d.ts.map +1 -0
- package/dist/components/styles/emoji.js +14 -0
- package/dist/components/styles/emoji.js.map +1 -0
- package/dist/components/styles/image-block.d.ts +2 -0
- package/dist/components/styles/image-block.d.ts.map +1 -0
- package/dist/components/styles/image-block.js +395 -0
- package/dist/components/styles/image-block.js.map +1 -0
- package/dist/components/styles/index.d.ts +3 -0
- package/dist/components/styles/index.d.ts.map +1 -0
- package/dist/components/styles/index.js +1 -0
- package/dist/components/styles/index.js.map +1 -0
- package/dist/components/styles/link-tooltip.d.ts +2 -0
- package/dist/components/styles/link-tooltip.d.ts.map +1 -0
- package/dist/components/styles/link-tooltip.js +110 -0
- package/dist/components/styles/link-tooltip.js.map +1 -0
- package/dist/components/styles/list-item.d.ts +2 -0
- package/dist/components/styles/list-item.d.ts.map +1 -0
- package/dist/components/styles/list-item.js +40 -0
- package/dist/components/styles/list-item.js.map +1 -0
- package/dist/components/styles/placeholder.d.ts +2 -0
- package/dist/components/styles/placeholder.d.ts.map +1 -0
- package/dist/components/styles/placeholder.js +9 -0
- package/dist/components/styles/placeholder.js.map +1 -0
- package/dist/components/styles/prosemirror.d.ts +2 -0
- package/dist/components/styles/prosemirror.d.ts.map +1 -0
- package/dist/components/styles/prosemirror.js +56 -0
- package/dist/components/styles/prosemirror.js.map +1 -0
- package/dist/components/styles/table.d.ts +2 -0
- package/dist/components/styles/table.d.ts.map +1 -0
- package/dist/components/styles/table.js +283 -0
- package/dist/components/styles/table.js.map +1 -0
- package/dist/constants.d.ts +47 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/loader.d.ts +16 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +1 -0
- package/dist/loader.js.map +1 -0
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { configureLinkEdit } from './config';
|
|
2
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
3
|
+
export * from './component';
|
|
4
|
+
declare const _default: {
|
|
5
|
+
configure: typeof configureLinkEdit;
|
|
6
|
+
getState: () => milkdown.utils.$Ctx<import("./slices").LinkEditState, string>;
|
|
7
|
+
getPlugin: () => milkdown.ctx.MilkdownPlugin[];
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAc,MAAM,UAAU,CAAC;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,cAAc,aAAa,CAAC;;;;qBAKZ,QAAQ,CAAC,GAAG,CAAC,cAAc,EAAE;;AAH7C,wBASC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{configureLinkEdit,getTooltip}from"./config";import{getLinkEditAPI,getLinkEditConfig,getLinkEditState}from"./slices";export*from"./component";export default{configure:configureLinkEdit,getState:getLinkEditState,getPlugin:()=>[getLinkEditState(),getLinkEditAPI(),getLinkEditConfig(),getTooltip()].flat()};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC/E,cAAc,aAAa,CAAC;AAE5B,eAAe;IACd,SAAS,EAAE,iBAAiB;IAC5B,QAAQ,EAAE,gBAAgB;IAC1B,SAAS,EAAE,GAAkC,EAAE,CAAC,CAAC;QAChD,gBAAgB,EAAE;QAClB,cAAc,EAAE;QAChB,iBAAiB,EAAE;QACnB,UAAU,EAAE;KACZ,CAAC,IAAI,EAAE,CAAC;CACT,CAAA","sourcesContent":["import { configureLinkEdit, getTooltip } from './config';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { getLinkEditAPI, getLinkEditConfig, getLinkEditState } from './slices';\nexport * from './component';\n\nexport default {\n\tconfigure: configureLinkEdit,\n\tgetState: getLinkEditState,\n\tgetPlugin: (): milkdown.ctx.MilkdownPlugin[] => ([\n\t\tgetLinkEditState(),\n\t\tgetLinkEditAPI(),\n\t\tgetLinkEditConfig(),\n\t\tgetTooltip()\n\t].flat())\n}"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
2
|
+
import type { Mark } from "@omegagrid/milkdown-kit/dist/prose/model";
|
|
3
|
+
export interface LinkEditState {
|
|
4
|
+
mode?: 'preview' | 'edit';
|
|
5
|
+
props?: any;
|
|
6
|
+
view?: any;
|
|
7
|
+
}
|
|
8
|
+
export declare const getLinkEditState: () => milkdown.utils.$Ctx<LinkEditState, string>;
|
|
9
|
+
export interface LinkEditAPI {
|
|
10
|
+
addLink: (from: number, to: number) => void;
|
|
11
|
+
editLink: (mark: Mark, from: number, to: number) => void;
|
|
12
|
+
removeLink: (from: number, to: number) => void;
|
|
13
|
+
}
|
|
14
|
+
export declare const getLinkEditAPI: () => milkdown.utils.$Ctx<LinkEditAPI, string>;
|
|
15
|
+
export interface LinkEditConfig {
|
|
16
|
+
onCopyLink: (link: string) => void;
|
|
17
|
+
inputPlaceholder: string;
|
|
18
|
+
}
|
|
19
|
+
export declare const getLinkEditConfig: () => milkdown.utils.$Ctx<LinkEditConfig, string>;
|
|
20
|
+
//# sourceMappingURL=slices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slices.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/slices.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAEzD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAErE,MAAM,WAAW,aAAa;IAC7B,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAA;CACV;AAKD,eAAO,MAAM,gBAAgB,kDAG5B,CAAA;AAED,MAAM,WAAW,WAAW;IAC3B,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACxD,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9C;AASD,eAAO,MAAM,cAAc,gDAGzB,CAAC;AAEH,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,gBAAgB,EAAE,MAAM,CAAA;CACxB;AAQD,eAAO,MAAM,iBAAiB,mDAG5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{md}from"../../../loader";const defaultState={mode:"preview"};let linkEditState;export const getLinkEditState=()=>(linkEditState||(linkEditState=md.utils.$ctx({...defaultState},"linkEditStateCtx")),linkEditState);const defaultAPI={addLink:()=>{},editLink:()=>{},removeLink:()=>{}};let api;export const getLinkEditAPI=()=>api??(api=md.utils.$ctx({...defaultAPI},"linkEditAPICtx"));const defaultConfig={onCopyLink:()=>{},inputPlaceholder:"Paste link..."};let config;export const getLinkEditConfig=()=>config??(config=md.utils.$ctx({...defaultConfig},"linkEditConfigCtx"));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slices.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/slices.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAGvD,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AASrC,MAAM,YAAY,GAAkB,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;AAEtD,IAAI,aAAyD,CAAC;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,EAAE;IACpC,IAAI,CAAC,aAAa;QAAE,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAC,GAAG,YAAY,EAAC,EAAE,kBAAkB,CAAC,CAAC;IACzF,OAAO,aAAa,CAAC;AACtB,CAAC,CAAA;AAQD,MAAM,UAAU,GAAgB;IAC/B,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;IACjB,QAAQ,EAAE,GAAG,EAAE,GAAE,CAAC;IAClB,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;CACpB,CAAA;AAED,IAAI,GAA0D,CAAC;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAC9D,EAAC,GAAG,UAAU,EAAC,EACf,gBAAgB,CAChB,CAAC,CAAC;AAOH,MAAM,aAAa,GAAmB;IACrC,UAAU,EAAE,GAAG,EAAE,GAAE,CAAC;IACpB,gBAAgB,EAAE,eAAe;CACjC,CAAA;AAED,IAAI,MAAgE,CAAC;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,MAAM,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CACvE,EAAC,GAAG,aAAa,EAAC,EAClB,mBAAmB,CACnB,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { md } from \"../../../loader\";\nimport type { Mark } from \"@omegagrid/milkdown-kit/dist/prose/model\";\n\nexport interface LinkEditState {\n\tmode?: 'preview' | 'edit',\n\tprops?: any,\n\tview?: any\n}\n\nconst defaultState: LinkEditState = {mode: 'preview'};\n\nlet linkEditState: milkdown.utils.$Ctx<LinkEditState, string>;\nexport const getLinkEditState = () => {\n\tif (!linkEditState) linkEditState = md.utils.$ctx({...defaultState}, 'linkEditStateCtx');\n\treturn linkEditState;\n}\n\nexport interface LinkEditAPI {\n\taddLink: (from: number, to: number) => void\n\teditLink: (mark: Mark, from: number, to: number) => void\n\tremoveLink: (from: number, to: number) => void\n}\n\nconst defaultAPI: LinkEditAPI = {\n\taddLink: () => {},\n\teditLink: () => {},\n\tremoveLink: () => {},\n}\n\nlet api: ReturnType<typeof md.utils.$ctx<LinkEditAPI, string>>;\nexport const getLinkEditAPI = () => api ?? (api = md.utils.$ctx(\n\t{...defaultAPI},\n\t'linkEditAPICtx'\n));\n\nexport interface LinkEditConfig {\n\tonCopyLink: (link: string) => void\n\tinputPlaceholder: string\n}\n\nconst defaultConfig: LinkEditConfig = {\n\tonCopyLink: () => {},\n\tinputPlaceholder: 'Paste link...',\n}\n\nlet config: ReturnType<typeof md.utils.$ctx<LinkEditConfig, string>>;\nexport const getLinkEditConfig = () => config ?? (config = md.utils.$ctx(\n\t{...defaultConfig},\n\t'linkEditConfigCtx'\n));"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { EditorView } from "@omegagrid/milkdown-kit/dist/prose/view";
|
|
2
|
+
import type { Mark, Node } from "@omegagrid/milkdown-kit/dist/prose/model";
|
|
3
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
4
|
+
export declare function findMarkPosition(mark: Mark, node: Node, doc: Node, from: number, to: number): {
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function shouldShowPreviewWhenHover(ctx: milkdown.ctx.Ctx, view: EditorView, event: MouseEvent): {
|
|
9
|
+
show: boolean;
|
|
10
|
+
pos: number;
|
|
11
|
+
node: Node;
|
|
12
|
+
mark: Mark;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGzD,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM;;;EAgBV;AAED,wBAAgB,0BAA0B,CACzC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EACrB,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,UAAU;;;;;EAejB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{md}from"../../../loader";export function findMarkPosition(t,e,n,o,r){let s={start:-1,end:-1};return n.nodesBetween(o,r,((n,o)=>{if(s.start>-1)return!1;-1===s.start&&t.isInSet(n.marks)&&e===n&&(s={start:o,end:o+Math.max(n.textContent.length,1)})})),s}export function shouldShowPreviewWhenHover(t,e,n){const o=e.posAtCoords({left:n.clientX,top:n.clientY});if(!o)return;const{pos:r}=o,s=e.state.doc.nodeAt(r);if(!s)return;const i=s.marks.find((e=>e.type===md.presets.commonmark.linkSchema.mark.type(t)));return i?{show:!0,pos:r,node:s,mark:i}:void 0}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,UAAU,gBAAgB,CAC/B,IAAU,EACV,IAAU,EACV,GAAS,EACT,IAAY,EACZ,EAAU;IAEV,IAAI,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;IACrC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAO,EAAE,GAAW,EAAE,EAAE;QACnD,4CAA4C;QAC5C,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACrC,IAAI,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;YACjE,OAAO,GAAG;gBACT,KAAK,EAAE,GAAG;gBACV,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;aAC5C,CAAA;QACF,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC,CAAA;IAEF,OAAO,OAAO,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACzC,GAAqB,EACrB,IAAgB,EAChB,KAAiB;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;IAC1E,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IACpB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAEvC,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;QACrC,OAAO,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,IAAI;QAAE,OAAO;IAClB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC","sourcesContent":["import type { EditorView } from \"@omegagrid/milkdown-kit/dist/prose/view\";\nimport type { Mark, Node } from \"@omegagrid/milkdown-kit/dist/prose/model\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { md } from \"../../../loader\";\n\nexport function findMarkPosition(\n\tmark: Mark,\n\tnode: Node,\n\tdoc: Node,\n\tfrom: number,\n\tto: number\n) {\n\tlet markPos = { start: -1, end: -1 };\n\tdoc.nodesBetween(from, to, (n: Node, pos: number) => {\n\t\t// stop recursive finding if result is found\n\t\tif (markPos.start > -1) return false;\n\t\tif (markPos.start === -1 && mark.isInSet(n.marks) && node === n) {\n\t\t\tmarkPos = {\n\t\t\t\tstart: pos,\n\t\t\t\tend: pos + Math.max(n.textContent.length, 1),\n\t\t\t}\n\t\t}\n\t\treturn undefined;\n\t})\n\n\treturn markPos;\n}\n\nexport function shouldShowPreviewWhenHover(\n\tctx: milkdown.ctx.Ctx,\n\tview: EditorView,\n\tevent: MouseEvent\n) {\n\tconst $pos = view.posAtCoords({ left: event.clientX, top: event.clientY })\n\tif (!$pos) return\n\n\tconst { pos } = $pos\n\tconst node = view.state.doc.nodeAt(pos)\n\n\tif (!node) return\n\n\tconst mark = node.marks.find((mark) => {\n\t\treturn mark.type === md.presets.commonmark.linkSchema.mark.type(ctx);\n\t});\n\tif (!mark) return;\n\treturn { show: true, pos, node, mark };\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { events } from "@omegagrid/core";
|
|
2
|
+
import type { EditorView } from "@omegagrid/milkdown-kit/dist/prose/view";
|
|
3
|
+
import type { Mark } from "@omegagrid/milkdown-kit/dist/prose/model";
|
|
4
|
+
import type { PluginView } from "@omegagrid/milkdown-kit/dist/prose/state";
|
|
5
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
6
|
+
export declare class LinkEditView implements PluginView {
|
|
7
|
+
#private;
|
|
8
|
+
readonly ctx: milkdown.ctx.Ctx;
|
|
9
|
+
_onChange: (e: events.ChangeEvent) => void;
|
|
10
|
+
constructor(ctx: milkdown.ctx.Ctx, view: EditorView);
|
|
11
|
+
update: (view: EditorView) => void;
|
|
12
|
+
destroy: () => void;
|
|
13
|
+
show: (mark: Mark, from: number, to: number, rect: DOMRect) => void;
|
|
14
|
+
hide: () => void;
|
|
15
|
+
addLink: (from: number, to: number) => void;
|
|
16
|
+
editLink: (mark: Mark, from: number, to: number) => void;
|
|
17
|
+
removeLink: (from: number, to: number) => void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAC9C,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;AAiBzD,qBAAa,YAAa,YAAW,UAAU;;IA+B7C,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG;IAvB/B,SAAS,GAAI,GAAG,MAAM,CAAC,WAAW,UAoBjC;gBAGS,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAC9B,IAAI,EAAE,UAAU;IAiBjB,MAAM,GAAI,MAAM,UAAU,UAOzB;IAED,OAAO,aAGN;IAED,IAAI,GAAI,MAAM,IAAI,EAAE,MAAM,MAAM,EAAE,IAAI,MAAM,EAAE,MAAM,OAAO,UAW1D;IAED,IAAI,aAGH;IA8BD,OAAO,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,UAIlC;IAED,QAAQ,GAAI,MAAM,IAAI,EAAE,MAAM,MAAM,EAAE,IAAI,MAAM,UAG/C;IAED,UAAU,GAAI,MAAM,MAAM,EAAE,IAAI,MAAM,UAMrC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var _LinkEditView_provider,_LinkEditView_slice,_LinkEditView_content,_LinkEditView_hovering,_LinkEditView_data,_LinkEditView_hide,_LinkEditView_onMouseEnter,_LinkEditView_onMouseLeave,_LinkEditView_enterEditMode,_LinkEditView_reset,__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(e,i,t,s,a){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!a)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof i?e!==i||!a:!i.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?a.call(e,t):a?a.value=t:i.set(e,t),t},__classPrivateFieldGet=this&&this.__classPrivateFieldGet||function(e,i,t,s){if("a"===t&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof i?e!==i||!s:!i.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===t?s:"a"===t?s.call(e):s?s.value:i.get(e)};import{dom}from"@omegagrid/core";import{md}from"../../../loader";import{getLinkEditAPI,getLinkEditState}from"./slices";const defaultData={from:-1,to:-1,mark:null};export class LinkEditView{constructor(e,i){this.ctx=e,_LinkEditView_provider.set(this,void 0),_LinkEditView_slice.set(this,void 0),_LinkEditView_content.set(this,void 0),_LinkEditView_hovering.set(this,!1),_LinkEditView_data.set(this,{...defaultData}),this._onChange=e=>{const{from:i,to:t,mark:s}=__classPrivateFieldGet(this,_LinkEditView_data,"f");if(null==e.value||""===e.value)this.ctx.get(getLinkEditAPI().key).removeLink(i,t);else{const a=this.ctx.get(md.core.editorViewCtx),_=md.presets.commonmark.linkSchema.type(this.ctx);if(s&&s.attrs.href===e.value)return void __classPrivateFieldGet(this,_LinkEditView_reset,"f").call(this);const d=a.state.tr;s&&d.removeMark(i,t,s),d.addMark(i,t,_.create({href:e.value})),a.dispatch(d),__classPrivateFieldGet(this,_LinkEditView_reset,"f").call(this)}__classPrivateFieldGet(this,_LinkEditView_hide,"f").call(this)},this.update=e=>{const{state:i}=e,{selection:t}=i;if(!(t instanceof md.prose.state.TextSelection))return;const{from:s,to:a}=t;s===__classPrivateFieldGet(this,_LinkEditView_data,"f").from&&a===__classPrivateFieldGet(this,_LinkEditView_data,"f").to||__classPrivateFieldGet(this,_LinkEditView_reset,"f").call(this)},this.destroy=()=>{__classPrivateFieldGet(this,_LinkEditView_provider,"f").destroy(),__classPrivateFieldGet(this,_LinkEditView_content,"f").remove()},this.show=(e,i,t,s)=>{__classPrivateFieldSet(this,_LinkEditView_data,{from:i,to:t,mark:e},"f"),s.height=__classPrivateFieldGet(this,_LinkEditView_content,"f").offsetHeight||20,s.width=__classPrivateFieldGet(this,_LinkEditView_content,"f").offsetWidth||150,__classPrivateFieldGet(this,_LinkEditView_provider,"f").show({getBoundingClientRect:()=>s}),__classPrivateFieldGet(this,_LinkEditView_provider,"f").element.addEventListener("mouseenter",__classPrivateFieldGet(this,_LinkEditView_onMouseEnter,"f")),__classPrivateFieldGet(this,_LinkEditView_provider,"f").element.addEventListener("mouseleave",__classPrivateFieldGet(this,_LinkEditView_onMouseLeave,"f")),__classPrivateFieldGet(this,_LinkEditView_content,"f").value=e?.attrs.href??"",dom.showElement(__classPrivateFieldGet(this,_LinkEditView_content,"f"))},this.hide=()=>{__classPrivateFieldGet(this,_LinkEditView_hovering,"f")||__classPrivateFieldGet(this,_LinkEditView_hide,"f").call(this)},_LinkEditView_hide.set(this,(()=>{dom.hideElement(__classPrivateFieldGet(this,_LinkEditView_content,"f")),__classPrivateFieldGet(this,_LinkEditView_provider,"f").hide(),__classPrivateFieldGet(this,_LinkEditView_provider,"f").element.removeEventListener("mouseenter",__classPrivateFieldGet(this,_LinkEditView_onMouseEnter,"f")),__classPrivateFieldGet(this,_LinkEditView_provider,"f").element.removeEventListener("mouseleave",__classPrivateFieldGet(this,_LinkEditView_onMouseLeave,"f"))})),_LinkEditView_onMouseEnter.set(this,(()=>{__classPrivateFieldSet(this,_LinkEditView_hovering,!0,"f")})),_LinkEditView_onMouseLeave.set(this,(()=>{__classPrivateFieldSet(this,_LinkEditView_hovering,!1,"f")})),_LinkEditView_enterEditMode.set(this,((e,i,t)=>{__classPrivateFieldGet(this,_LinkEditView_content,"f").value=e;const s=this.ctx.get(md.core.editorViewCtx);this.show(null,i,t,md.prose.posToDOMRect(s,i,t));const a=s.state.tr;s.dispatch(a.setSelection(md.prose.state.TextSelection.create(s.state.doc,i,t)))})),_LinkEditView_reset.set(this,(()=>{__classPrivateFieldGet(this,_LinkEditView_provider,"f").hide(),__classPrivateFieldSet(this,_LinkEditView_data,{...defaultData},"f")})),this.addLink=(e,i)=>{__classPrivateFieldSet(this,_LinkEditView_data,{from:e,to:i,mark:null},"f"),console.log(this),__classPrivateFieldGet(this,_LinkEditView_enterEditMode,"f").call(this,"",e,i)},this.editLink=(e,i,t)=>{__classPrivateFieldSet(this,_LinkEditView_data,{from:i,to:t,mark:e},"f"),__classPrivateFieldGet(this,_LinkEditView_enterEditMode,"f").call(this,e.attrs.href,i,t)},this.removeLink=(e,i)=>{const t=this.ctx.get(md.core.editorViewCtx),s=t.state.tr;s.removeMark(e,i,md.presets.commonmark.linkSchema.type(this.ctx)),t.dispatch(s),__classPrivateFieldGet(this,_LinkEditView_reset,"f").call(this)};const t=dom.createElement("og-markdown-linkedit");t.addEventListener("change",this._onChange),t.ctx=e,__classPrivateFieldSet(this,_LinkEditView_content,t,"f"),__classPrivateFieldSet(this,_LinkEditView_provider,new md.plugins.tooltip.TooltipProvider({content:__classPrivateFieldGet(this,_LinkEditView_content,"f"),offset:10,debounce:0,shouldShow:()=>!1}),"f"),__classPrivateFieldGet(this,_LinkEditView_provider,"f").update(i),__classPrivateFieldSet(this,_LinkEditView_slice,e.use(getLinkEditState().key),"f")}}_LinkEditView_provider=new WeakMap,_LinkEditView_slice=new WeakMap,_LinkEditView_content=new WeakMap,_LinkEditView_hovering=new WeakMap,_LinkEditView_data=new WeakMap,_LinkEditView_hide=new WeakMap,_LinkEditView_onMouseEnter=new WeakMap,_LinkEditView_onMouseLeave=new WeakMap,_LinkEditView_enterEditMode=new WeakMap,_LinkEditView_reset=new WeakMap;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../src/components/features/linkEdit/view.ts"],"names":[],"mappings":"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","sourcesContent":["import { dom, events } from \"@omegagrid/core\";\nimport type { EditorView } from \"@omegagrid/milkdown-kit/dist/prose/view\";\nimport type { Mark } 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';\nimport { LinkEdit } from \"./component\";\nimport { md } from \"../../../loader\";\nimport { LinkEditState, getLinkEditAPI, getLinkEditState } from \"./slices\";\n\ninterface Data {\n\tfrom: number\n\tto: number\n\tmark: Mark | null\n}\n \nconst defaultData: Data = {\n\tfrom: -1,\n\tto: -1,\n\tmark: null,\n}\n\nexport class LinkEditView implements PluginView {\n\t\n\t#provider: InstanceType<typeof milkdown.plugins.tooltip.TooltipProvider>;\n\t#slice: milkdown.ctx.Slice<LinkEditState>;\n\t#content: LinkEdit;\n\t#hovering = false;\n\t#data: Data = { ...defaultData };\n\n\t_onChange = (e: events.ChangeEvent) => {\n\t\tconst { from, to, mark } = this.#data;\n\t\tif (e.value == null || e.value === '') {\n\t\t\tthis.ctx.get(getLinkEditAPI().key).removeLink(from, to);\n\t\t} else {\n\t\t\tconst view = this.ctx.get(md.core.editorViewCtx);\n\t\t\tconst type = md.presets.commonmark.linkSchema.type(this.ctx);\n\t\t\tif (mark && mark.attrs.href === e.value) {\n\t\t\t\tthis.#reset();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\n\t\t\tconst tr = view.state.tr;\n\t\t\tif (mark) tr.removeMark(from, to, mark);\n\t\t\n\t\t\ttr.addMark(from, to, type.create({href: e.value}));\n\t\t\tview.dispatch(tr);\n\t\t\tthis.#reset();\n\t\t}\n\t\tthis.#hide();\n\t}\n\t\n\tconstructor(\n\t\treadonly ctx: milkdown.ctx.Ctx, \n\t\tview: EditorView\n\t) {\n\t\tconst content = dom.createElement<LinkEdit>('og-markdown-linkedit');\n\t\tcontent.addEventListener('change', this._onChange);\n\t\tcontent.ctx = ctx;\n\n\t\tthis.#content = content;\n\t\tthis.#provider = new md.plugins.tooltip.TooltipProvider({\n\t\t\tcontent: this.#content,\n\t\t\toffset: 10,\n\t\t\tdebounce: 0,\n\t\t\tshouldShow: () => false\n\t\t});\n\t\tthis.#provider.update(view)\n\t\tthis.#slice = ctx.use(getLinkEditState().key);\n\t}\n\t\n\tupdate = (view: EditorView) => {\n\t\tconst { state } = view;\n\t\tconst { selection } = state;\n\t\tif (!(selection instanceof md.prose.state.TextSelection)) return;\n\t\tconst { from, to } = selection;\n\t\tif (from === this.#data.from && to === this.#data.to) return;\n\t\tthis.#reset();\n\t}\n\t\n\tdestroy = () => {\n\t\tthis.#provider.destroy();\n\t\tthis.#content.remove();\n\t}\n\n\tshow = (mark: Mark, from: number, to: number, rect: DOMRect) => {\n\t\tthis.#data = { from, to, mark };\n\t\trect.height = this.#content.offsetHeight || 20;\n\t\trect.width = this.#content.offsetWidth || 150;\n\t\tthis.#provider.show({\n\t\t\tgetBoundingClientRect: () => rect,\n\t\t})\n\t\tthis.#provider.element.addEventListener('mouseenter', this.#onMouseEnter)\n\t\tthis.#provider.element.addEventListener('mouseleave', this.#onMouseLeave)\n\t\tthis.#content.value = mark?.attrs.href ?? '';\n\t\tdom.showElement(this.#content);\n\t}\n\n\thide = () => {\n\t\tif (this.#hovering) return;\n\t\tthis.#hide();\n\t}\n\t\n\t#hide = () => {\n\t\tdom.hideElement(this.#content);\n\t\tthis.#provider.hide();\n\t\tthis.#provider.element.removeEventListener('mouseenter', this.#onMouseEnter);\n\t\tthis.#provider.element.removeEventListener('mouseleave', this.#onMouseLeave);\n\t}\n\n\t#onMouseEnter = () => {\n\t\tthis.#hovering = true;\n\t}\n\t\n\t#onMouseLeave = () => {\n\t\tthis.#hovering = false;\n\t}\n\n\t#enterEditMode = (value: string, from: number, to: number) => {\n\t\tthis.#content.value = value;\n\t\tconst view = this.ctx.get(md.core.editorViewCtx);\n\t\tthis.show(null, from, to, md.prose.posToDOMRect(view, from, to));\n\t\tconst tr = view.state.tr;\n\t\tview.dispatch(tr.setSelection(md.prose.state.TextSelection.create(view.state.doc, from, to)));\n\t}\n\n\t#reset = () => {\n\t\tthis.#provider.hide();\n\t\tthis.#data = { ...defaultData };\n\t}\n\n\taddLink = (from: number, to: number) => {\n\t\tthis.#data = { from, to, mark: null };\n\t\tconsole.log(this);\n\t\tthis.#enterEditMode('', from, to)\n\t}\n\t\n\teditLink = (mark: Mark, from: number, to: number) => {\n\t\tthis.#data = { from, to, mark };\n\t\tthis.#enterEditMode(mark.attrs.href, from, to)\n\t}\n\t\n\tremoveLink = (from: number, to: number) => {\n\t\tconst view = this.ctx.get(md.core.editorViewCtx);\n\t\tconst tr = view.state.tr;\n\t\ttr.removeMark(from, to, md.presets.commonmark.linkSchema.type(this.ctx));\n\t\tview.dispatch(tr);\n\t\tthis.#reset();\n\t}\n}"]}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
2
|
+
interface PlaceholderConfig {
|
|
3
|
+
text: string;
|
|
4
|
+
mode: 'doc' | 'block';
|
|
5
|
+
}
|
|
6
|
+
export type PlaceHolderFeatureConfig = Partial<PlaceholderConfig>;
|
|
7
|
+
export declare const defaultPlaceholderConfig: PlaceholderConfig;
|
|
8
|
+
export declare const createPlaceHolder: (md: typeof milkdown) => {
|
|
9
|
+
plugin: milkdown.utils.$Prose;
|
|
10
|
+
config: milkdown.utils.$Ctx<PlaceholderConfig, "placeholderConfigCtx">;
|
|
11
|
+
};
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=placeholder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../src/components/features/placeholder.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAyBzD,UAAU,iBAAiB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,wBAAwB,EAGhC,iBAAiB,CAAC;AAEvB,eAAO,MAAM,iBAAiB,GAAI,IAAI,OAAO,QAAQ;;;CAwBpD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{isInCodeBlock,isInList}from"./utils";function isDocEmpty(e){return e.childCount<=1&&!e.firstChild?.content.size}function createPlaceholderDecoration(e,t,o){const{selection:n}=t;if(!n.empty)return null;const r=n.$anchor,l=r.parent;if(l.content.size>0)return null;const c=e.prose.findParent((e=>"table"===e.type.name))(r);if(c)return null;const i=r.before();return e.prose.view.Decoration.node(i,i+l.nodeSize,{class:"crepe-placeholder","data-placeholder":o})}export const defaultPlaceholderConfig={text:"Please enter...",mode:"block"};export const createPlaceHolder=e=>{const t=e.utils.$ctx(defaultPlaceholderConfig,"placeholderConfigCtx");return{plugin:e.utils.$prose((o=>new e.prose.state.Plugin({key:new e.prose.state.PluginKey("MARKDOWN_PLACEHOLDER"),props:{decorations:n=>{const r=o.get(t.key);if("doc"===r.mode&&!isDocEmpty(n.doc))return null;if(isInCodeBlock(n.selection)||isInList(n.selection))return null;const l=r.text??"Please enter...",c=createPlaceholderDecoration(e,n,l);return c?e.prose.view.DecorationSet.create(n.doc,[c]):null}}}))),config:t}};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placeholder.js","sourceRoot":"","sources":["../../../src/components/features/placeholder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGlD,SAAS,UAAU,CAAC,GAAS;IAC5B,OAAO,GAAG,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,SAAS,2BAA2B,CAAC,EAAmB,EAAE,KAAkB,EAAE,eAAuB;IACpG,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACzB,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAChF,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAE7B,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE;QACpE,KAAK,EAAE,mBAAmB;QAC1B,kBAAkB,EAAE,eAAe;KACnC,CAAC,CAAC;AACJ,CAAC;AASD,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACvC,IAAI,EAAE,iBAAiB;IACvB,IAAI,EAAE,OAAO;CACQ,CAAC;AAEvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAmB,EAAE,EAAE;IACxD,MAAM,iBAAiB,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,EAAE,sBAAsB,CAAC,CAAC;IAC1F,MAAM,iBAAiB,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QAC1E,GAAG,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,sBAAsB,CAAC;QACzD,KAAK,EAAE;YACN,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE;gBACtB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBAC9C,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAEjE,IAAI,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC;oBAAE,OAAO,IAAI,CAAC;gBAE7E,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,IAAI,iBAAiB,CAAC;gBACzD,MAAM,IAAI,GAAG,2BAA2B,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;gBACrE,IAAI,CAAC,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAEvB,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;YAC9D,CAAC;SACD;KACD,CAAC,CAAC,CAAC;IAEJ,OAAO;QACN,MAAM,EAAE,iBAAiB;QACzB,MAAM,EAAE,iBAAiB;KACzB,CAAA;AACF,CAAC,CAAC","sourcesContent":["import type { Node } from '@omegagrid/milkdown-kit/dist/prose/model';\nimport type { EditorState } from '@omegagrid/milkdown-kit/dist/prose/state';\nimport { isInCodeBlock, isInList } from './utils';\nimport type * as milkdown from '@omegagrid/milkdown-kit';\n\nfunction isDocEmpty(doc: Node) {\n\treturn doc.childCount <= 1 && !doc.firstChild?.content.size;\n}\n\nfunction createPlaceholderDecoration(md: typeof milkdown, state: EditorState, placeholderText: string) {\n\tconst { selection } = state;\n\tif (!selection.empty) return null;\n\n\tconst $pos = selection.$anchor;\n\tconst node = $pos.parent;\n\tif (node.content.size > 0) return null;\n\n\tconst inTable = md.prose.findParent((node) => node.type.name === 'table')($pos);\n\tif (inTable) return null;\n\n\tconst before = $pos.before();\n\n\treturn md.prose.view.Decoration.node(before, before + node.nodeSize, {\n\t\tclass: 'crepe-placeholder',\n\t\t'data-placeholder': placeholderText,\n\t});\n}\n\ninterface PlaceholderConfig {\n\ttext: string;\n\tmode: 'doc' | 'block';\n}\n\nexport type PlaceHolderFeatureConfig = Partial<PlaceholderConfig>;\n\nexport const defaultPlaceholderConfig = {\n\ttext: 'Please enter...',\n\tmode: 'block',\n} as PlaceholderConfig;\n\nexport const createPlaceHolder = (md: typeof milkdown) => {\n\tconst placeholderConfig = md.utils.$ctx(defaultPlaceholderConfig, 'placeholderConfigCtx');\n\tconst placeholderPlugin = md.utils.$prose(ctx => new md.prose.state.Plugin({\n\t\tkey: new md.prose.state.PluginKey('MARKDOWN_PLACEHOLDER'),\n\t\tprops: {\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst config = ctx.get(placeholderConfig.key);\n\t\t\t\tif (config.mode === 'doc' && !isDocEmpty(state.doc)) return null;\n\t\t\n\t\t\t\tif (isInCodeBlock(state.selection) || isInList(state.selection)) return null;\n\t\t\n\t\t\t\tconst placeholderText = config.text ?? 'Please enter...';\n\t\t\t\tconst deco = createPlaceholderDecoration(md, state, placeholderText);\n\t\t\t\tif (!deco) return null;\n\t\t\n\t\t\t\treturn md.prose.view.DecorationSet.create(state.doc, [deco]);\n\t\t\t},\n\t\t}\n\t}));\n\n\treturn {\n\t\tplugin: placeholderPlugin,\n\t\tconfig: placeholderConfig,\n\t}\n};\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
interface TocHeading {
|
|
4
|
+
level: number;
|
|
5
|
+
text: string;
|
|
6
|
+
pos: number;
|
|
7
|
+
number: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class TocBlockComponent extends LitElement {
|
|
10
|
+
static styles: import("lit").CSSResult;
|
|
11
|
+
headings: TocHeading[];
|
|
12
|
+
onHeadingClick?: (pos: number) => void;
|
|
13
|
+
render(): import("lit").TemplateResult<1>;
|
|
14
|
+
}
|
|
15
|
+
export type TocConfig = Record<string, never>;
|
|
16
|
+
export declare function createTocBlock(md: typeof milkdown): {
|
|
17
|
+
tocConfig: milkdown.utils.$Ctx<TocConfig, "tocBlockConfigCtx">;
|
|
18
|
+
plugins: milkdown.ctx.MilkdownPlugin[];
|
|
19
|
+
};
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=tocBlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tocBlock.d.ts","sourceRoot":"","sources":["../../../src/components/features/tocBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAIzD,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,UAAU,UAAU;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CACf;AAgBD,qBACa,iBAAkB,SAAQ,UAAU;IAEhD,MAAM,CAAC,MAAM,0BA6CX;IAGF,QAAQ,EAAE,UAAU,EAAE,CAAM;IAG5B,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAEvC,MAAM;CAON;AA2DD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAY9C,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,QAAQ;;;EAuFjD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __decorate=this&&this.__decorate||function(e,t,o,n){var r,i=arguments.length,c=i<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--)(r=e[a])&&(c=(i<3?r(c):i>3?r(t,o,c):r(t,o))||c);return i>3&&c&&Object.defineProperty(t,o,c),c};import{dom}from"@omegagrid/core";import{LitElement,css,html}from"lit";import{customElement,property}from"lit/decorators.js";function generateHeadingNumbers(e){const t=[];return e.map((e=>{const o=e.level-1;for(;t.length<=o;)t.push(0);return t[o]++,t.length=o+1,t.join(".")}))}let TocBlockComponent=class extends LitElement{constructor(){super(...arguments),this.headings=[]}render(){return this.headings.length?html`<ul>${this.headings.map((e=>html`<li style="padding-left: ${16*(e.level-1)}px"><a @click=${()=>this.onHeadingClick?.(e.pos)}><span class="num">${e.number}</span>${e.text}</a></li>`))}</ul>`:html`<div class="empty">No headings found</div>`}};TocBlockComponent.styles=css`
|
|
2
|
+
:host {
|
|
3
|
+
display: block;
|
|
4
|
+
border-left: 3px solid var(--og-accent-color, #4a9eff);
|
|
5
|
+
padding: 4px 12px;
|
|
6
|
+
margin: 8px 0;
|
|
7
|
+
border-radius: 0 4px 4px 0;
|
|
8
|
+
font-size: 0.85em;
|
|
9
|
+
line-height: 1.4;
|
|
10
|
+
}
|
|
11
|
+
.toc-title {
|
|
12
|
+
font-weight: 600;
|
|
13
|
+
margin-bottom: 2px;
|
|
14
|
+
color: var(--og-accent-color, #4a9eff);
|
|
15
|
+
}
|
|
16
|
+
ul {
|
|
17
|
+
list-style: none;
|
|
18
|
+
padding: 0;
|
|
19
|
+
margin: 0;
|
|
20
|
+
line-height: 1.4;
|
|
21
|
+
}
|
|
22
|
+
li {
|
|
23
|
+
display: block;
|
|
24
|
+
padding: 0;
|
|
25
|
+
margin: 0;
|
|
26
|
+
line-height: 1.4;
|
|
27
|
+
color: var(--og-text-color, inherit);
|
|
28
|
+
}
|
|
29
|
+
a {
|
|
30
|
+
color: inherit;
|
|
31
|
+
text-decoration: none;
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
}
|
|
34
|
+
a:hover {
|
|
35
|
+
text-decoration: underline;
|
|
36
|
+
color: var(--og-accent-color, #4a9eff);
|
|
37
|
+
}
|
|
38
|
+
.num {
|
|
39
|
+
color: var(--og-text-secondary-color, #999);
|
|
40
|
+
margin-right: 6px;
|
|
41
|
+
}
|
|
42
|
+
.empty {
|
|
43
|
+
color: var(--og-text-secondary-color, #999);
|
|
44
|
+
font-style: italic;
|
|
45
|
+
}
|
|
46
|
+
`,__decorate([property({attribute:!1})],TocBlockComponent.prototype,"headings",void 0),__decorate([property({attribute:!1})],TocBlockComponent.prototype,"onHeadingClick",void 0),TocBlockComponent=__decorate([customElement("og-markdown-toc")],TocBlockComponent);export{TocBlockComponent};class TocBlock{constructor(e,t,o,n,r){this.md=e,this.node=t,this.view=o,this.getPos=n,this.tocViews=r,this.dom=dom.createElement("og-markdown-toc"),this.updateHeadings(),this.tocViews.add(this)}updateHeadings(){const e=[];this.view.state.doc.descendants(((t,o)=>{"heading"===t.type.name&&t.textContent.trim().length>0&&e.push({level:t.attrs.level,text:t.textContent,pos:o,number:""})}));const t=generateHeadingNumbers(e);return e.forEach(((e,o)=>e.number=t[o])),this.dom.headings=e,this.dom.onHeadingClick=e=>{const t=this.view.nodeDOM(e);if(!t)return;const o=this.view.dom.parentElement;o&&(o.scrollTop=t.offsetTop)},e}update(e){return e.type===this.node.type&&(this.node=e,!0)}selectNode(){}deselectNode(){}stopEvent(){return!0}ignoreMutation(){return!0}destroy(){this.tocViews.delete(this)}}function walkTree(e,t){if(e.children)for(let o=e.children.length-1;o>=0;o--)t(e.children[o],o,e),walkTree(e.children[o],t)}export function createTocBlock(e){const t=new Set,o=e.utils.$ctx({},"tocBlockConfigCtx"),n=e.utils.$remark("remarkTocPlugin",(()=>()=>e=>{walkTree(e,((e,t,o)=>{"paragraph"===e.type&&1===e.children?.length&&"text"===e.children[0].type&&"[toc]"===e.children[0].value?.trim().toLowerCase()&&(o.children[t]={type:"toc"})}))})),r=e.utils.$nodeSchema("toc",(()=>({atom:!0,group:"block",selectable:!0,draggable:!1,isolating:!0,attrs:{},toDOM:()=>["div",{"data-type":"toc"}],parseDOM:[{tag:'div[data-type="toc"]'}],parseMarkdown:{match:e=>"toc"===e.type,runner:(e,t,o)=>{e.addNode(o)}},toMarkdown:{match:e=>"toc"===e.type.name,runner:e=>{e.openNode("paragraph"),e.addNode("text",void 0,"[toc]"),e.closeNode()}}}))),i=e.utils.$view(r.node,(()=>(o,n,r)=>new TocBlock(e,o,n,r,t))),c=e.utils.$prose((()=>new e.prose.state.Plugin({key:new e.prose.state.PluginKey("MARKDOWN_TOC_SYNC"),props:{decorations:t=>{const o=[];if(t.doc.descendants(((e,t)=>{"heading"===e.type.name&&e.textContent.trim().length>0&&o.push({pos:t,level:e.attrs.level,size:e.nodeSize})})),!o.length)return e.prose.view.DecorationSet.empty;const n=generateHeadingNumbers(o),r=o.map(((t,o)=>e.prose.view.Decoration.widget(t.pos+1,(()=>{const e=document.createElement("span");return e.className="toc-heading-number",e.textContent=n[o]+" ",e.style.cssText="color: var(--og-text-secondary-color, #999); margin-right: 4px;",e}),{side:-1})));return e.prose.view.DecorationSet.create(t.doc,r)}},view:()=>({update:(e,o)=>{if(!e.state.doc.eq(o.doc))for(const e of t)e.updateHeadings()}})}))),a=[...n,...r,i,c,o].flat();return{tocConfig:o,plugins:a}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tocBlock.js","sourceRoot":"","sources":["../../../src/components/features/tocBlock.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 } from '@omegagrid/core';\nimport { LitElement, css, html } from 'lit';\nimport { customElement, property } from 'lit/decorators.js';\n\ninterface TocHeading {\n\tlevel: number;\n\ttext: string;\n\tpos: number;\n\tnumber: string;\n}\n\nfunction generateHeadingNumbers(headings: { level: number }[]): string[] {\n\tconst counters: number[] = [];\n\treturn headings.map(h => {\n\t\tconst depth = h.level - 1;\n\t\t// Extend counters if needed\n\t\twhile (counters.length <= depth) counters.push(0);\n\t\t// Increment current level\n\t\tcounters[depth]++;\n\t\t// Reset deeper levels\n\t\tcounters.length = depth + 1;\n\t\treturn counters.join('.');\n\t});\n}\n\n@customElement('og-markdown-toc')\nexport class TocBlockComponent extends LitElement {\n\n\tstatic styles = css`\n\t\t:host {\n\t\t\tdisplay: block;\n\t\t\tborder-left: 3px solid var(--og-accent-color, #4a9eff);\n\t\t\tpadding: 4px 12px;\n\t\t\tmargin: 8px 0;\n\t\t\tborder-radius: 0 4px 4px 0;\n\t\t\tfont-size: 0.85em;\n\t\t\tline-height: 1.4;\n\t\t}\n\t\t.toc-title {\n\t\t\tfont-weight: 600;\n\t\t\tmargin-bottom: 2px;\n\t\t\tcolor: var(--og-accent-color, #4a9eff);\n\t\t}\n\t\tul {\n\t\t\tlist-style: none;\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.4;\n\t\t}\n\t\tli {\n\t\t\tdisplay: block;\n\t\t\tpadding: 0;\n\t\t\tmargin: 0;\n\t\t\tline-height: 1.4;\n\t\t\tcolor: var(--og-text-color, inherit);\n\t\t}\n\t\ta {\n\t\t\tcolor: inherit;\n\t\t\ttext-decoration: none;\n\t\t\tcursor: pointer;\n\t\t}\n\t\ta:hover {\n\t\t\ttext-decoration: underline;\n\t\t\tcolor: var(--og-accent-color, #4a9eff);\n\t\t}\n\t\t.num {\n\t\t\tcolor: var(--og-text-secondary-color, #999);\n\t\t\tmargin-right: 6px;\n\t\t}\n\t\t.empty {\n\t\t\tcolor: var(--og-text-secondary-color, #999);\n\t\t\tfont-style: italic;\n\t\t}\n\t`;\n\n\t@property({ attribute: false })\n\theadings: TocHeading[] = [];\n\n\t@property({ attribute: false })\n\tonHeadingClick?: (pos: number) => void;\n\n\trender() {\n\t\tif (!this.headings.length) {\n\t\t\treturn html`<div class=\"empty\">No headings found</div>`;\n\t\t}\n\n\t\treturn html`<ul>${this.headings.map(h => html`<li style=\"padding-left: ${(h.level - 1) * 16}px\"><a @click=${() => this.onHeadingClick?.(h.pos)}><span class=\"num\">${h.number}</span>${h.text}</a></li>`)}</ul>`;\n\t}\n}\n\nclass TocBlock implements NodeView {\n\tdom: TocBlockComponent;\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\tprivate tocViews: Set<TocBlock>\n\t) {\n\t\tthis.dom = dom.createElement<TocBlockComponent>('og-markdown-toc');\n\t\tthis.updateHeadings();\n\t\tthis.tocViews.add(this);\n\t}\n\n\tupdateHeadings(): TocHeading[] {\n\t\tconst headings: TocHeading[] = [];\n\t\tthis.view.state.doc.descendants((node, pos) => {\n\t\t\tif (node.type.name === 'heading' && node.textContent.trim().length > 0) {\n\t\t\t\theadings.push({\n\t\t\t\t\tlevel: node.attrs.level,\n\t\t\t\t\ttext: node.textContent,\n\t\t\t\t\tpos,\n\t\t\t\t\tnumber: '',\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\tconst numbers = generateHeadingNumbers(headings);\n\t\theadings.forEach((h, i) => h.number = numbers[i]);\n\t\tthis.dom.headings = headings;\n\t\tthis.dom.onHeadingClick = (pos: number) => {\n\t\t\tconst heading = this.view.nodeDOM(pos) as HTMLElement;\n\t\t\tif (!heading) return;\n\t\t\tconst milkdownElm = this.view.dom.parentElement;\n\t\t\tif (milkdownElm) {\n\t\t\t\tmilkdownElm.scrollTop = heading.offsetTop;\n\t\t\t}\n\t\t};\n\t\treturn headings;\n\t}\n\n\tupdate(node: Node) {\n\t\tif (node.type !== this.node.type) return false;\n\t\tthis.node = node;\n\t\treturn true;\n\t}\n\n\tselectNode() {}\n\tdeselectNode() {}\n\tstopEvent() { return true; }\n\tignoreMutation() { return true; }\n\n\tdestroy() {\n\t\tthis.tocViews.delete(this);\n\t}\n}\n\nexport type TocConfig = Record<string, never>;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction walkTree(tree: any, callback: (node: any, index: number, parent: any) => void) {\n\tif (tree.children) {\n\t\tfor (let i = tree.children.length - 1; i >= 0; i--) {\n\t\t\tcallback(tree.children[i], i, tree);\n\t\t\twalkTree(tree.children[i], callback);\n\t\t}\n\t}\n}\n\nexport function createTocBlock(md: typeof milkdown) {\n\tconst tocViews = new Set<TocBlock>();\n\n\tconst tocConfig = md.utils.$ctx({} as TocConfig, 'tocBlockConfigCtx');\n\n\tconst remarkPlugin = md.utils.$remark('remarkTocPlugin', () => () => (tree: unknown) => {\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\twalkTree(tree, (node: any, index: number, parent: any) => {\n\t\t\tif (node.type === 'paragraph'\n\t\t\t\t&& node.children?.length === 1\n\t\t\t\t&& node.children[0].type === 'text'\n\t\t\t\t&& node.children[0].value?.trim().toLowerCase() === '[toc]') {\n\t\t\t\tparent.children[index] = { type: 'toc' };\n\t\t\t}\n\t\t});\n\t});\n\n\tconst nodeSchema = md.utils.$nodeSchema('toc', () => ({\n\t\tatom: true,\n\t\tgroup: 'block',\n\t\tselectable: true,\n\t\tdraggable: false,\n\t\tisolating: true,\n\t\tattrs: {},\n\t\ttoDOM: () => ['div', { 'data-type': 'toc' }] as const,\n\t\tparseDOM: [{ tag: 'div[data-type=\"toc\"]' }],\n\t\tparseMarkdown: {\n\t\t\tmatch: (mdNode: { type: string }) => mdNode.type === 'toc',\n\t\t\trunner: (state: any, _node: unknown, type: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any\n\t\t\t\tstate.addNode(type);\n\t\t\t},\n\t\t},\n\t\ttoMarkdown: {\n\t\t\tmatch: (node: Node) => node.type.name === 'toc',\n\t\t\trunner: (state: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any\n\t\t\t\tstate.openNode('paragraph');\n\t\t\t\tstate.addNode('text', undefined, '[toc]');\n\t\t\t\tstate.closeNode();\n\t\t\t},\n\t\t},\n\t}));\n\n\tconst nodeView = md.utils.$view(nodeSchema.node, () => {\n\t\treturn (node: Node, view: EditorView, getPos: () => number | undefined) => {\n\t\t\treturn new TocBlock(md, node, view, getPos, tocViews);\n\t\t};\n\t});\n\n\tconst syncPlugin = md.utils.$prose(() => new md.prose.state.Plugin({\n\t\tkey: new md.prose.state.PluginKey('MARKDOWN_TOC_SYNC'),\n\t\tprops: {\n\t\t\tdecorations: (state) => {\n\t\t\t\t// Collect headings and their numbers\n\t\t\t\tconst headings: { pos: number; level: number; size: number }[] = [];\n\t\t\t\tstate.doc.descendants((node, pos) => {\n\t\t\t\t\tif (node.type.name === 'heading' && node.textContent.trim().length > 0) {\n\t\t\t\t\t\theadings.push({ pos, level: node.attrs.level, size: node.nodeSize });\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif (!headings.length) return md.prose.view.DecorationSet.empty;\n\n\t\t\t\tconst numbers = generateHeadingNumbers(headings);\n\t\t\t\tconst decos = headings.map((h, i) =>\n\t\t\t\t\tmd.prose.view.Decoration.widget(h.pos + 1, () => {\n\t\t\t\t\t\tconst span = document.createElement('span');\n\t\t\t\t\t\tspan.className = 'toc-heading-number';\n\t\t\t\t\t\tspan.textContent = numbers[i] + ' ';\n\t\t\t\t\t\tspan.style.cssText = 'color: var(--og-text-secondary-color, #999); margin-right: 4px;';\n\t\t\t\t\t\treturn span;\n\t\t\t\t\t}, { side: -1 })\n\t\t\t\t);\n\t\t\t\treturn md.prose.view.DecorationSet.create(state.doc, decos);\n\t\t\t},\n\t\t},\n\t\tview: () => ({\n\t\t\tupdate: (view: EditorView, prevState: any) => { // eslint-disable-line @typescript-eslint/no-explicit-any\n\t\t\t\tif (view.state.doc.eq(prevState.doc)) return;\n\t\t\t\tfor (const tv of tocViews) {\n\t\t\t\t\ttv.updateHeadings();\n\t\t\t\t}\n\t\t\t},\n\t\t}),\n\t}));\n\n\tconst plugins = [...remarkPlugin, ...nodeSchema, nodeView, syncPlugin, tocConfig].flat();\n\n\treturn { tocConfig, plugins };\n}\n"]}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { LitElement } from "lit";
|
|
2
|
+
import type { EditorView } from "@omegagrid/milkdown-kit/dist/prose/view";
|
|
3
|
+
import type { PluginView, EditorState } from "@omegagrid/milkdown-kit/dist/prose/state";
|
|
4
|
+
import type { MarkType } from "@omegagrid/milkdown-kit/dist/prose/model";
|
|
5
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
6
|
+
export declare class Toolbar extends LitElement {
|
|
7
|
+
static styles: import("lit").CSSResult;
|
|
8
|
+
ctx: milkdown.ctx.Ctx;
|
|
9
|
+
md: typeof milkdown;
|
|
10
|
+
get commonmark(): typeof import("@milkdown/preset-commonmark");
|
|
11
|
+
get gfm(): typeof import("@milkdown/preset-gfm");
|
|
12
|
+
isActive: (mark: MarkType) => boolean;
|
|
13
|
+
constructor();
|
|
14
|
+
command(key: milkdown.core.CmdKey<unknown>): void;
|
|
15
|
+
render: () => import("lit").TemplateResult<1>;
|
|
16
|
+
}
|
|
17
|
+
export declare class ToolbarView implements PluginView {
|
|
18
|
+
#private;
|
|
19
|
+
constructor(ctx: milkdown.ctx.Ctx, view: EditorView, md: typeof milkdown);
|
|
20
|
+
update: (view: EditorView, prevState?: EditorState) => void;
|
|
21
|
+
destroy: () => void;
|
|
22
|
+
hide: () => void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/features/toolbar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AACxF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,KAAK,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AAGzD,qBACa,OAAQ,SAAQ,UAAU;IAEtC,MAAM,CAAC,MAAM,0BA6BX;IAEF,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;IACtB,EAAE,EAAE,OAAO,QAAQ,CAAC;IAEpB,IAAI,UAAU,iDAAwC;IACtD,IAAI,GAAG,0CAAiC;IAExC,QAAQ,GAAI,MAAM,QAAQ,aAKzB;;IAkBD,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;IAI1C,MAAM,wCAiDJ;CACF;AAGD,qBAAa,WAAY,YAAW,UAAU;;gBAKjC,GAAG,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,OAAO,QAAQ;IAgCxE,MAAM,GAAI,MAAM,UAAU,EAAE,YAAY,WAAW,UAElD;IAED,OAAO,aAGN;IAED,IAAI,aAEH;CAED"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
var _ToolbarView_provider,_ToolbarView_ctx,_ToolbarView_content,__decorate=this&&this.__decorate||function(t,e,o,i){var r,s=arguments.length,a=s<3?e:null===i?i=Object.getOwnPropertyDescriptor(e,o):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,o,i);else for(var n=t.length-1;n>=0;n--)(r=t[n])&&(a=(s<3?r(a):s>3?r(e,o,a):r(e,o))||a);return s>3&&a&&Object.defineProperty(e,o,a),a},__classPrivateFieldSet=this&&this.__classPrivateFieldSet||function(t,e,o,i,r){if("m"===i)throw new TypeError("Private method is not writable");if("a"===i&&!r)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!r:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===i?r.call(t,o):r?r.value=o:e.set(t,o),o},__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)};import{LitElement,css,html}from"lit";import{customElement}from"lit/decorators.js";import{dom}from"@omegagrid/core";import{getLinkEditAPI}from"./linkEdit/slices";let Toolbar=class extends LitElement{get commonmark(){return this.md.presets.commonmark}get gfm(){return this.md.presets.gfm}constructor(){super(),this.isActive=t=>{if(!this.ctx)return!1;const e=this.ctx.get(this.md.core.editorViewCtx),{state:{doc:o,selection:i}}=e;return o.rangeHasMark(i.from,i.to,t)},this.render=()=>html`
|
|
2
|
+
<div>
|
|
3
|
+
<og-button
|
|
4
|
+
.state="${this.isActive(this.commonmark.strongSchema.type(this.ctx))?"checked":"unchecked"}"
|
|
5
|
+
type="toggle"
|
|
6
|
+
icon="bold"
|
|
7
|
+
@click="${()=>this.command(this.commonmark.toggleStrongCommand.key)}">
|
|
8
|
+
</og-button>
|
|
9
|
+
|
|
10
|
+
<og-button
|
|
11
|
+
.state="${this.isActive(this.commonmark.emphasisSchema.type(this.ctx))?"checked":"unchecked"}"
|
|
12
|
+
type="toggle"
|
|
13
|
+
icon="italic"
|
|
14
|
+
@click="${()=>this.command(this.commonmark.toggleEmphasisCommand.key)}">
|
|
15
|
+
</og-button>
|
|
16
|
+
|
|
17
|
+
<og-button
|
|
18
|
+
.state="${this.isActive(this.gfm.strikethroughSchema.type(this.ctx))?"checked":"unchecked"}"
|
|
19
|
+
type="toggle"
|
|
20
|
+
icon="strikethrough"
|
|
21
|
+
@click="${()=>this.command(this.gfm.toggleStrikethroughCommand.key)}">
|
|
22
|
+
</og-button>
|
|
23
|
+
|
|
24
|
+
<og-button
|
|
25
|
+
.state="${this.isActive(this.commonmark.inlineCodeSchema.type(this.ctx))?"checked":"unchecked"}"
|
|
26
|
+
type="toggle"
|
|
27
|
+
icon="code"
|
|
28
|
+
@click="${()=>this.command(this.commonmark.toggleInlineCodeCommand.key)}">
|
|
29
|
+
</og-button>
|
|
30
|
+
|
|
31
|
+
<og-button
|
|
32
|
+
.state="${this.isActive(this.commonmark.linkSchema.type(this.ctx))?"checked":"unchecked"}"
|
|
33
|
+
type="toggle"
|
|
34
|
+
icon="link"
|
|
35
|
+
@click="${()=>{const t=this.ctx.get(this.md.core.editorViewCtx),{selection:e}=t.state;this.isActive(this.commonmark.linkSchema.type(this.ctx))?this.ctx.get(getLinkEditAPI().key).removeLink(e.from,e.to):(this.ctx.get(getLinkEditAPI().key).addLink(e.from,e.to),this.dispatchEvent(new Event("hide")))}}">
|
|
36
|
+
</og-button>
|
|
37
|
+
</div>
|
|
38
|
+
`,this.addEventListener("click",(t=>{t.stopPropagation(),t.preventDefault()})),this.addEventListener("mousedown",(t=>{t.stopPropagation(),t.preventDefault()})),this.addEventListener("mouseup",(t=>{t.stopPropagation(),t.preventDefault()}))}command(t){this.ctx.get(this.md.core.commandsCtx).call(t)}};Toolbar.styles=css`
|
|
39
|
+
* {
|
|
40
|
+
box-sizing: border-box;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
:host {
|
|
44
|
+
display: none;
|
|
45
|
+
position: absolute;
|
|
46
|
+
transition: top .2s;
|
|
47
|
+
background-color: var(--og-background-color);
|
|
48
|
+
border: 1px solid var(--og-accent-color);
|
|
49
|
+
user-select: none;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:host > div {
|
|
53
|
+
display: flex;
|
|
54
|
+
flex-direction: row;
|
|
55
|
+
gap: 2px;
|
|
56
|
+
justify-content: center;
|
|
57
|
+
align-items: center;
|
|
58
|
+
padding: 2px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
og-dropdown, og-button {
|
|
62
|
+
min-width: 20px;
|
|
63
|
+
height: 20px;
|
|
64
|
+
flex: 0;
|
|
65
|
+
text-align: center;
|
|
66
|
+
}
|
|
67
|
+
`,Toolbar=__decorate([customElement("og-markdown-toolbar")],Toolbar);export{Toolbar};export class ToolbarView{constructor(t,e,o){_ToolbarView_provider.set(this,void 0),_ToolbarView_ctx.set(this,void 0),_ToolbarView_content.set(this,void 0),this.update=(t,e)=>{__classPrivateFieldGet(this,_ToolbarView_provider,"f").update(t,e)},this.destroy=()=>{__classPrivateFieldGet(this,_ToolbarView_provider,"f").destroy(),__classPrivateFieldGet(this,_ToolbarView_content,"f").remove()},this.hide=()=>{__classPrivateFieldGet(this,_ToolbarView_provider,"f").hide()},__classPrivateFieldSet(this,_ToolbarView_ctx,t,"f");const i=dom.createElement("og-markdown-toolbar");i.addEventListener("hide",(()=>__classPrivateFieldGet(this,_ToolbarView_provider,"f").hide())),i.ctx=t,i.md=o,__classPrivateFieldSet(this,_ToolbarView_content,i,"f"),__classPrivateFieldSet(this,_ToolbarView_provider,new o.plugins.tooltip.TooltipProvider({content:__classPrivateFieldGet(this,_ToolbarView_content,"f"),offset:10,debounce:20,shouldShow(t){const{doc:e,selection:r}=t.state,{empty:s,from:a,to:n}=r,c=!e.textBetween(a,n).length&&r instanceof o.prose.state.TextSelection,l=!(r instanceof o.prose.state.TextSelection),d=t.dom.getRootNode().activeElement,h=i.contains(d),m=!t.hasFocus()&&!h,_=!t.editable;return!(m||l||s||c||_)}}),"f"),__classPrivateFieldGet(this,_ToolbarView_provider,"f").onShow=()=>{dom.showElement(__classPrivateFieldGet(this,_ToolbarView_content,"f")),__classPrivateFieldGet(this,_ToolbarView_content,"f").requestUpdate()},__classPrivateFieldGet(this,_ToolbarView_provider,"f").onHide=()=>dom.hideElement(__classPrivateFieldGet(this,_ToolbarView_content,"f")),this.update(e)}}_ToolbarView_provider=new WeakMap,_ToolbarView_ctx=new WeakMap,_ToolbarView_content=new WeakMap;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../src/components/features/toolbar.ts"],"names":[],"mappings":"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","sourcesContent":["import { LitElement, css, html } from \"lit\";\nimport { customElement } from \"lit/decorators.js\";\nimport { dom } from \"@omegagrid/core\";\nimport type { EditorView } from \"@omegagrid/milkdown-kit/dist/prose/view\";\nimport type { PluginView, EditorState } from \"@omegagrid/milkdown-kit/dist/prose/state\";\nimport type { MarkType } from \"@omegagrid/milkdown-kit/dist/prose/model\";\nimport type * as milkdown from '@omegagrid/milkdown-kit';\nimport { getLinkEditAPI } from \"./linkEdit/slices\";\n\n@customElement('og-markdown-toolbar')\nexport class Toolbar 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\ttransition: top .2s;\n\t\t\tbackground-color: var(--og-background-color);\n\t\t\tborder: 1px solid var(--og-accent-color);\n\t\t\tuser-select: none;\n\t\t}\n\n\t\t:host > div {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: row;\n\t\t\tgap: 2px;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tpadding: 2px;\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\tctx: milkdown.ctx.Ctx;\n\tmd: typeof milkdown;\n\n\tget commonmark() { return this.md.presets.commonmark }\n\tget gfm() { return this.md.presets.gfm }\n\n\tisActive = (mark: MarkType) => {\n\t\tif (!this.ctx) return false;\n\t\tconst view = this.ctx.get(this.md.core.editorViewCtx);\n\t\tconst { state: { doc, selection }} = view;\n\t\treturn doc.rangeHasMark(selection.from, selection.to, mark);\n\t}\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.addEventListener('click', (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t});\n\t\tthis.addEventListener('mousedown', (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t});\n\t\tthis.addEventListener('mouseup', (e) => {\n\t\t\te.stopPropagation();\n\t\t\te.preventDefault();\n\t\t});\n\t}\n\n\tcommand(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>\n\t\t\t<og-button \n\t\t\t\t.state=\"${this.isActive(this.commonmark.strongSchema.type(this.ctx)) ? 'checked' : 'unchecked'}\"\n\t\t\t\ttype=\"toggle\"\n\t\t\t\ticon=\"bold\" \n\t\t\t\t@click=\"${() => this.command(this.commonmark.toggleStrongCommand.key)}\">\n\t\t\t</og-button>\n\n\t\t\t<og-button \n\t\t\t\t.state=\"${this.isActive(this.commonmark.emphasisSchema.type(this.ctx)) ? 'checked' : 'unchecked'}\"\n\t\t\t\ttype=\"toggle\"\n\t\t\t\ticon=\"italic\" \n\t\t\t\t@click=\"${() => this.command(this.commonmark.toggleEmphasisCommand.key)}\">\n\t\t\t</og-button>\n\n\t\t\t<og-button \n\t\t\t\t.state=\"${this.isActive(this.gfm.strikethroughSchema.type(this.ctx)) ? 'checked' : 'unchecked'}\"\n\t\t\t\ttype=\"toggle\"\n\t\t\t\ticon=\"strikethrough\" \n\t\t\t\t@click=\"${() => this.command(this.gfm.toggleStrikethroughCommand.key)}\">\n\t\t\t</og-button>\n\t\t\t\n\t\t\t<og-button \n\t\t\t\t.state=\"${this.isActive(this.commonmark.inlineCodeSchema.type(this.ctx)) ? 'checked' : 'unchecked'}\"\n\t\t\t\ttype=\"toggle\"\n\t\t\t\ticon=\"code\" \n\t\t\t\t@click=\"${() => this.command(this.commonmark.toggleInlineCodeCommand.key)}\">\n\t\t\t</og-button>\n\n\t\t\t<og-button \n\t\t\t\t.state=\"${this.isActive(this.commonmark.linkSchema.type(this.ctx)) ? 'checked' : 'unchecked'}\"\n\t\t\t\ttype=\"toggle\"\n\t\t\t\ticon=\"link\" \n\t\t\t\t@click=\"${() => {\n\t\t\t\t\tconst view = this.ctx.get(this.md.core.editorViewCtx);\n\t\t\t\t\tconst { selection } = view.state;\n\n\t\t\t\t\tif (this.isActive(this.commonmark.linkSchema.type(this.ctx))) {\n\t\t\t\t\t\tthis.ctx.get(getLinkEditAPI().key).removeLink(selection.from, selection.to);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.ctx.get(getLinkEditAPI().key).addLink(selection.from, selection.to);\n\n\t\t\t\t\tthis.dispatchEvent(new Event('hide'));\n\t\t\t\t}}\">\n\t\t\t</og-button>\n\t\t</div>\n\t`;\n}\n\n\nexport class ToolbarView implements PluginView {\n\treadonly #provider: InstanceType<typeof milkdown.plugins.tooltip.TooltipProvider>;\n\treadonly #ctx: milkdown.ctx.Ctx;\n\t#content: Toolbar;\n\t\n\tconstructor(ctx: milkdown.ctx.Ctx, view: EditorView, md: typeof milkdown) {\n\t\tthis.#ctx = ctx;\n\t\tconst content = dom.createElement<Toolbar>('og-markdown-toolbar');\n\t\tcontent.addEventListener('hide', () => this.#provider.hide());\n\t\tcontent.ctx = ctx;\n\t\tcontent.md = md;\n\t\tthis.#content = content;\n\t\tthis.#provider = new md.plugins.tooltip.TooltipProvider({\n\t\t\tcontent: this.#content,\n\t\t\toffset: 10,\n\t\t\tdebounce: 20,\n\t\t\tshouldShow(view: EditorView) {\n\t\t\t\tconst { doc, selection } = view.state;\n\t\t\t\tconst { empty, from, to } = selection;\n\t\t\t\tconst isEmptyTextBlock = !doc.textBetween(from, to).length && selection instanceof md.prose.state.TextSelection;\n\t\t\t\tconst isNotTextBlock = !(selection instanceof md.prose.state.TextSelection);\n\t\t\t\tconst activeElement = (view.dom.getRootNode() as ShadowRoot | Document).activeElement;\n\t\t\t\tconst isTooltipChildren = content.contains(activeElement);\n\t\t\t\tconst notHasFocus = !view.hasFocus() && !isTooltipChildren;\n\t\t\t\tconst isReadonly = !view.editable;\n\t\t\t\tif (notHasFocus || isNotTextBlock || empty || isEmptyTextBlock || isReadonly) return false\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t\tthis.#provider.onShow = () => {\n\t\t\tdom.showElement(this.#content);\n\t\t\tthis.#content.requestUpdate();\n\t\t};\n\t\tthis.#provider.onHide = () => dom.hideElement(this.#content);\n\t\tthis.update(view);\n\t}\n\t\n\tupdate = (view: EditorView, prevState?: EditorState) => {\n\t\tthis.#provider.update(view, prevState)\n\t}\n\t\n\tdestroy = () => {\n\t\tthis.#provider.destroy();\n\t\tthis.#content.remove();\n\t}\n\n\thide = () => {\n\t\tthis.#provider.hide();\n\t}\n\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Attrs, NodeType } from '@omegagrid/milkdown-kit/dist/prose/model';
|
|
2
|
+
import type { Command, Transaction, Selection } from "@omegagrid/milkdown-kit/dist/prose/state";
|
|
3
|
+
export declare function clearRange(tr: Transaction): Transaction;
|
|
4
|
+
export declare function setBlockType(tr: Transaction, nodeType: NodeType, attrs?: Attrs | null): Transaction;
|
|
5
|
+
export declare function wrapInBlockType(tr: Transaction, nodeType: NodeType, attrs?: Attrs | null): Transaction;
|
|
6
|
+
export declare function addBlockType(tr: Transaction, nodeType: NodeType, attrs?: Attrs | null): Transaction;
|
|
7
|
+
export declare function clearContentAndSetBlockType(nodeType: NodeType, attrs?: Attrs | null): Command;
|
|
8
|
+
export declare function clearContentAndWrapInBlockType(nodeType: NodeType, attrs?: Attrs | null): Command;
|
|
9
|
+
export declare function clearContentAndAddBlockType(nodeType: NodeType, attrs?: Attrs | null): Command;
|
|
10
|
+
export declare function isInCodeBlock(selection: Selection): boolean;
|
|
11
|
+
export declare function isInList(selection: Selection): boolean;
|
|
12
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/features/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAC;AAGhG,wBAAgB,UAAU,CAAC,EAAE,EAAE,WAAW,eAKzC;AAED,wBAAgB,YAAY,CAC3B,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,eAI1B;AAED,wBAAgB,eAAe,CAC9B,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,eAO1B;AAED,wBAAgB,YAAY,CAC3B,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,eAK1B;AAED,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,GACxB,OAAO,CAQT;AAED,wBAAgB,8BAA8B,CAC7C,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,GACxB,OAAO,CAOT;AAGD,wBAAgB,2BAA2B,CAC1C,QAAQ,EAAE,QAAQ,EAClB,KAAK,GAAE,KAAK,GAAG,IAAW,GACxB,OAAO,CAOT;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,WAGjD;AAED,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,WAG5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{MilkdownLoader}from"../../loader";export function clearRange(e){const{$from:n,$to:o}=e.selection,t=n.pos-n.node().content.size;return t>=0&&(e=e.deleteRange(t,o.pos)),e}export function setBlockType(e,n,o=null){const{from:t,to:r}=e.selection;return e.setBlockType(t,r,n,o)}export function wrapInBlockType(e,n,o=null){const{$from:t,$to:r}=e.selection,l=t.blockRange(r),c=l&&MilkdownLoader.getSync().prose.transform.findWrapping(l,n,o);return c?e.wrap(l,c):null}export function addBlockType(e,n,o=null){const t=n.createAndFill(o);return t?e.replaceSelectionWith(t):null}export function clearContentAndSetBlockType(e,n=null){return(o,t)=>(t&&t(setBlockType(clearRange(o.tr),e,n).scrollIntoView()),!0)}export function clearContentAndWrapInBlockType(e,n=null){return(o,t)=>{const r=wrapInBlockType(clearRange(o.tr),e,n);return!!r&&(t&&t(r.scrollIntoView()),!0)}}export function clearContentAndAddBlockType(e,n=null){return(o,t)=>{const r=addBlockType(clearRange(o.tr),e,n);return!!r&&(t&&t(r.scrollIntoView()),!0)}}export function isInCodeBlock(e){return"code_block"===e.$from.parent.type.name}export function isInList(e){const n=e.$from.node(e.$from.depth-1)?.type;return"list_item"===n?.name}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/components/features/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Attrs, NodeType } from '@omegagrid/milkdown-kit/dist/prose/model'\nimport type { Command, Transaction, Selection } from \"@omegagrid/milkdown-kit/dist/prose/state\";\nimport { MilkdownLoader } from \"../../loader\";\n\nexport function clearRange(tr: Transaction) {\n\tconst { $from, $to } = tr.selection;\n\tconst from = $from.pos - $from.node().content.size;\n\tif (from >= 0) tr = tr.deleteRange(from, $to.pos);\n\treturn tr\n}\n\nexport function setBlockType(\n\ttr: Transaction,\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n) {\n\tconst { from, to } = tr.selection\n\treturn tr.setBlockType(from, to, nodeType, attrs)\n}\n\nexport function wrapInBlockType(\n\ttr: Transaction,\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n) {\n\tconst { $from, $to } = tr.selection;\n\tconst range = $from.blockRange($to)\n\tconst wrapping = range && (MilkdownLoader.getSync()).prose.transform.findWrapping(range, nodeType, attrs)\n\tif (!wrapping) return null\n\treturn tr.wrap(range, wrapping)\n}\n\nexport function addBlockType(\n\ttr: Transaction,\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n) {\n\tconst node = nodeType.createAndFill(attrs)\n\tif (!node) return null\n\treturn tr.replaceSelectionWith(node)\n}\n\nexport function clearContentAndSetBlockType(\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n): Command {\n\treturn (state, dispatch) => {\n\t\tif (dispatch) {\n\t\t\tconst tr = setBlockType(clearRange(state.tr), nodeType, attrs)\n\t\t\tdispatch(tr.scrollIntoView())\n\t\t}\n\t\treturn true\n\t}\n}\n\nexport function clearContentAndWrapInBlockType(\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n): Command {\n\treturn (state, dispatch) => {\n\t\tconst tr = wrapInBlockType(clearRange(state.tr), nodeType, attrs)\n\t\tif (!tr) return false\n\t\tif (dispatch) dispatch(tr.scrollIntoView())\n\t\treturn true\n\t}\n}\n\n\nexport function clearContentAndAddBlockType(\n\tnodeType: NodeType,\n\tattrs: Attrs | null = null\n): Command {\n\treturn (state, dispatch) => {\n\t\tconst tr = addBlockType(clearRange(state.tr), nodeType, attrs)\n\t\tif (!tr) return false;\n\t\tif (dispatch) dispatch(tr.scrollIntoView())\n\t\treturn true\n\t}\n}\n\nexport function isInCodeBlock(selection: Selection) {\n\tconst type = selection.$from.parent.type;\n\treturn type.name === 'code_block';\n}\n\nexport function isInList(selection: Selection) {\n\tconst type = selection.$from.node(selection.$from.depth - 1)?.type;\n\treturn type?.name === 'list_item';\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./markdownView";export*from"./markdownEditor";export*from"./features";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC","sourcesContent":["export * from './markdownView';\nexport * from './markdownEditor';\nexport * from './features';"]}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { HorizontalPosition, Layout, Slider } from '@omegagrid/core';
|
|
2
|
+
import { LitElement } from 'lit';
|
|
3
|
+
import type * as milkdown from '@omegagrid/milkdown-kit';
|
|
4
|
+
export declare class MarkdownLinkEvent extends Event {
|
|
5
|
+
readonly href: string;
|
|
6
|
+
readonly a: HTMLAnchorElement;
|
|
7
|
+
readonly origEvent: PointerEvent;
|
|
8
|
+
constructor(args: Partial<MarkdownLinkEvent>);
|
|
9
|
+
}
|
|
10
|
+
export declare class MarkdownEditor extends LitElement implements Layout {
|
|
11
|
+
#private;
|
|
12
|
+
static styles: import("lit").CSSResult[];
|
|
13
|
+
get content(): string;
|
|
14
|
+
set content(val: string);
|
|
15
|
+
maxContentWidth: number;
|
|
16
|
+
contentAlignment: HorizontalPosition;
|
|
17
|
+
readOnly: boolean;
|
|
18
|
+
container: HTMLDivElement;
|
|
19
|
+
slider: Slider;
|
|
20
|
+
onUpload: (file: File) => Promise<string>;
|
|
21
|
+
modifyImageUrl: (file: string) => Promise<string> | string;
|
|
22
|
+
get milkdownElm(): HTMLElement;
|
|
23
|
+
get editor(): milkdown.core.Editor;
|
|
24
|
+
constructor();
|
|
25
|
+
scrollToSelector(selector: string): void;
|
|
26
|
+
connectedCallback(): void;
|
|
27
|
+
updateWidth(): void;
|
|
28
|
+
_onChange: (markdown: string, prevMarkdown: string) => void;
|
|
29
|
+
firstUpdated(): void;
|
|
30
|
+
updated(): Promise<void>;
|
|
31
|
+
updateSlider(): void;
|
|
32
|
+
disconnectedCallback(): void;
|
|
33
|
+
render: () => import("lit").TemplateResult<1>;
|
|
34
|
+
layout(): void;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=markdownEditor.d.ts.map
|
|
@@ -0,0 +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,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;IAab,YAAY;IAUZ,oBAAoB;IAOpB,MAAM,wCAMJ;IAEF,MAAM;CAEN"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var _MarkdownEditor_content,_MarkdownEditor_mouseIn,_MarkdownEditor_editor,__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_content.set(this,void 0),this.maxContentWidth=800,this.contentAlignment="left",this.readOnly=!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`
|
|
2
|
+
<style>
|
|
3
|
+
.ProseMirror.editor { max-width: ${this.maxContentWidth}px; }
|
|
4
|
+
</style>
|
|
5
|
+
<div id="container" spellcheck="false"></div>
|
|
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(){__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"),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.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([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};
|