xt-plugin-editor 1.3.2 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"xt-plugin-editor.mjs","sources":["../../../projects/editor/src/lib/prose-mirror/basic-setup.ts","../../../projects/editor/src/lib/markdown/markdown-pipe.ts","../../../projects/editor/src/lib/markdown/inline-markdown-pipe.ts","../../../projects/editor/src/lib/editor/editor.component.ts","../../../projects/editor/src/lib/editor/editor.component.html","../../../projects/editor/src/lib/register.ts","../../../projects/editor/src/public-api.ts","../../../projects/editor/src/xt-plugin-editor.ts"],"sourcesContent":["\n\n\n/// Given a blockquote node type, returns an input rule that turns `\"> \"`\n/// at the start of a textblock into a blockquote.\n\nimport {\n wrapItem, blockTypeItem, Dropdown, DropdownSubmenu, joinUpItem, liftItem,\n selectParentNodeItem, undoItem, redoItem, icons, MenuItem, MenuElement, MenuItemSpec, menuBar\n} from 'prosemirror-menu';\nimport {NodeSelection, EditorState, Command} from \"prosemirror-state\"\nimport {Schema, NodeType, MarkType} from \"prosemirror-model\"\n\nimport {Attrs} from \"prosemirror-model\"\n\nconst prefix = \"ProseMirror-prompt\"\n\nimport {\n wrapIn, setBlockType, chainCommands, toggleMark, exitCode,\n joinUp, joinDown, lift, selectParentNode, baseKeymap\n} from 'prosemirror-commands';\nimport {wrapInList, splitListItem, liftListItem, sinkListItem} from \"prosemirror-schema-list\"\nimport { undo, redo, history } from 'prosemirror-history';\nimport {\n ellipsis, emDash,\n inputRules,\n smartQuotes,\n textblockTypeInputRule,\n undoInputRule,\n wrappingInputRule\n} from 'prosemirror-inputrules';\nimport { keymap } from 'prosemirror-keymap';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\n\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false\n\n/// Inspect the given schema looking for marks and nodes from the\n/// basic schema, and if found, add key bindings related to them.\n/// This will add:\n///\n/// * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n/// * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n/// * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n/// * **Ctrl-Shift-0** for making the current textblock a paragraph\n/// * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n/// textblock a heading of the corresponding level\n/// * **Ctrl-Shift-Backslash** to make the current textblock a code block\n/// * **Ctrl-Shift-8** to wrap the selection in an ordered list\n/// * **Ctrl-Shift-9** to wrap the selection in a bullet list\n/// * **Ctrl->** to wrap the selection in a block quote\n/// * **Enter** to split a non-empty textblock in a list item while at\n/// the same time splitting the list item\n/// * **Mod-Enter** to insert a hard break\n/// * **Mod-_** to insert a horizontal rule\n/// * **Backspace** to undo an input rule\n/// * **Alt-ArrowUp** to `joinUp`\n/// * **Alt-ArrowDown** to `joinDown`\n/// * **Mod-BracketLeft** to `lift`\n/// * **Escape** to `selectParentNode`\n///\n/// You can suppress or map these bindings by passing a `mapKeys`\n/// argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n/// remove the binding, or a new key name string.\nexport function buildKeymap(schema: Schema, mapKeys?: {[key: string]: false | string}) {\n let keys: {[key: string]: Command} = {}, type\n function bind(key: string, cmd: Command) {\n if (mapKeys) {\n let mapped = mapKeys[key]\n if (mapped === false) return\n if (mapped) key = mapped\n }\n keys[key] = cmd\n }\n\n bind(\"Mod-z\", undo)\n bind(\"Shift-Mod-z\", redo)\n bind(\"Backspace\", undoInputRule)\n if (!mac) bind(\"Mod-y\", redo)\n\n bind(\"Alt-ArrowUp\", joinUp)\n bind(\"Alt-ArrowDown\", joinDown)\n bind(\"Mod-BracketLeft\", lift)\n bind(\"Escape\", selectParentNode)\n\n if (type = schema.marks[\"strong\"]) {\n bind(\"Mod-b\", toggleMark(type))\n bind(\"Mod-B\", toggleMark(type))\n }\n if (type = schema.marks[\"em\"]) {\n bind(\"Mod-i\", toggleMark(type))\n bind(\"Mod-I\", toggleMark(type))\n }\n if (type = schema.marks[\"code\"])\n bind(\"Mod-`\", toggleMark(type))\n\n if (type = schema.nodes[\"bullet_list\"])\n bind(\"Shift-Ctrl-8\", wrapInList(type))\n if (type = schema.nodes[\"ordered_list\"])\n bind(\"Shift-Ctrl-9\", wrapInList(type))\n if (type = schema.nodes[\"blockquote\"])\n bind(\"Ctrl->\", wrapIn(type))\n if (type = schema.nodes[\"hard_break\"]) {\n let br = type as any, cmd = chainCommands(exitCode, (state, dispatch) => {\n if (dispatch) dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView())\n return true\n })\n bind(\"Mod-Enter\", cmd)\n bind(\"Shift-Enter\", cmd)\n if (mac) bind(\"Ctrl-Enter\", cmd)\n }\n if (type = schema.nodes[\"list_item\"]) {\n bind(\"Enter\", splitListItem(type))\n bind(\"Mod-[\", liftListItem(type))\n bind(\"Mod-]\", sinkListItem(type))\n }\n if (type = schema.nodes[\"paragraph\"])\n bind(\"Shift-Ctrl-0\", setBlockType(type))\n if (type = schema.nodes[\"code_block\"])\n bind(\"Shift-Ctrl-\\\\\", setBlockType(type))\n if (type = schema.nodes[\"heading\"])\n for (let i = 1; i <= 6; i++) bind(\"Shift-Ctrl-\" + i, setBlockType(type, {level: i}))\n if (type = schema.nodes[\"horizontal_rule\"]) {\n let hr = type as any\n bind(\"Mod-_\", (state, dispatch) => {\n if (dispatch) dispatch(state.tr.replaceSelectionWith(hr.create()).scrollIntoView())\n return true\n })\n }\n\n return keys\n}\n\n\nexport function openPrompt(options: {\n title: string,\n fields: {[name: string]: Field},\n callback: (attrs: Attrs) => void\n}) {\n let wrapper = document.body.appendChild(document.createElement(\"div\"))\n wrapper.className = prefix\n\n let mouseOutside = (e: MouseEvent) => { if (!wrapper.contains(e.target as HTMLElement)) close() }\n setTimeout(() => window.addEventListener(\"mousedown\", mouseOutside), 50)\n let close = () => {\n window.removeEventListener(\"mousedown\", mouseOutside)\n if (wrapper.parentNode) wrapper.parentNode.removeChild(wrapper)\n }\n\n let domFields: HTMLElement[] = []\n for (let name in options.fields) domFields.push(options.fields[name].render())\n\n let submitButton = document.createElement(\"button\")\n submitButton.type = \"submit\"\n submitButton.className = prefix + \"-submit\"\n submitButton.textContent = \"OK\"\n let cancelButton = document.createElement(\"button\")\n cancelButton.type = \"button\"\n cancelButton.className = prefix + \"-cancel\"\n cancelButton.textContent = \"Cancel\"\n cancelButton.addEventListener(\"click\", close)\n\n let form = wrapper.appendChild(document.createElement(\"form\"))\n if (options.title) form.appendChild(document.createElement(\"h5\")).textContent = options.title\n domFields.forEach(field => {\n form.appendChild(document.createElement(\"div\")).appendChild(field)\n })\n let buttons = form.appendChild(document.createElement(\"div\"))\n buttons.className = prefix + \"-buttons\"\n buttons.appendChild(submitButton)\n buttons.appendChild(document.createTextNode(\" \"))\n buttons.appendChild(cancelButton)\n\n let box = wrapper.getBoundingClientRect()\n wrapper.style.top = ((window.innerHeight - box.height) / 2) + \"px\"\n wrapper.style.left = ((window.innerWidth - box.width) / 2) + \"px\"\n\n let submit = () => {\n let params = getValues(options.fields, domFields)\n if (params) {\n close()\n options.callback(params)\n }\n }\n\n form.addEventListener(\"submit\", e => {\n e.preventDefault()\n submit()\n })\n\n form.addEventListener(\"keydown\", e => {\n if (e.keyCode == 27) {\n e.preventDefault()\n close()\n } else if (e.keyCode == 13 && !(e.ctrlKey || e.metaKey || e.shiftKey)) {\n e.preventDefault()\n submit()\n } else if (e.keyCode == 9) {\n window.setTimeout(() => {\n if (!wrapper.contains(document.activeElement)) close()\n }, 500)\n }\n })\n\n let input = form.elements[0] as HTMLElement\n if (input) input.focus()\n}\n\nfunction getValues(fields: {[name: string]: Field}, domFields: readonly HTMLElement[]) {\n let result = Object.create(null), i = 0\n for (let name in fields) {\n let field = fields[name], dom = domFields[i++]\n let value = field.read(dom), bad = field.validate(value)\n if (bad) {\n reportInvalid(dom, bad)\n return null\n }\n result[name] = field.clean(value)\n }\n return result\n}\n\nfunction reportInvalid(dom: HTMLElement, message: string) {\n // FIXME this is awful and needs a lot more work\n let parent = dom.parentNode!\n let msg = parent.appendChild(document.createElement(\"div\"))\n msg.style.left = (dom.offsetLeft + dom.offsetWidth + 2) + \"px\"\n msg.style.top = (dom.offsetTop - 5) + \"px\"\n msg.className = \"ProseMirror-invalid\"\n msg.textContent = message\n setTimeout(() => parent.removeChild(msg), 1500)\n}\n\n/// The type of field that `openPrompt` expects to be passed to it.\nexport abstract class Field {\n /// Create a field with the given options. Options support by all\n /// field types are:\n constructor(\n /// @internal\n readonly options: {\n /// The starting value for the field.\n value?: any\n\n /// The label for the field.\n label: string\n\n /// Whether the field is required.\n required?: boolean\n\n /// A function to validate the given value. Should return an\n /// error message if it is not valid.\n validate?: (value: any) => string | null\n\n /// A cleanup function for field values.\n clean?: (value: any) => any\n }\n ) {}\n\n /// Render the field to the DOM. Should be implemented by all subclasses.\n abstract render(): HTMLElement\n\n /// Read the field's value from its DOM node.\n read(dom: HTMLElement) { return (dom as any).value }\n\n /// A field-type-specific validation function.\n validateType(value: any): string | null { return null }\n\n /// @internal\n validate(value: any): string | null {\n if (!value && this.options.required)\n return \"Required field\"\n return this.validateType(value) || (this.options.validate ? this.options.validate(value) : null)\n }\n\n clean(value: any): any {\n return this.options.clean ? this.options.clean(value) : value\n }\n}\n\n/// A field class for single-line text fields.\nexport class TextField extends Field {\n render() {\n let input = document.createElement(\"input\")\n input.type = \"text\"\n input.placeholder = this.options.label\n input.value = this.options.value || \"\"\n input.autocomplete = \"off\"\n return input\n }\n}\n\n\n/// A field class for dropdown fields based on a plain `<select>`\n/// tag. Expects an option `options`, which should be an array of\n/// `{value: string, label: string}` objects, or a function taking a\n/// `ProseMirror` instance and returning such an array.\nexport class SelectField extends Field {\n render() {\n let select = document.createElement(\"select\")\n ;((this.options as any).options as {value: string, label: string}[]).forEach(o => {\n let opt = select.appendChild(document.createElement(\"option\"))\n opt.value = o.value\n opt.selected = o.value == this.options.value\n opt.label = o.label\n })\n return select\n }\n}\n\n// Helpers to create specific types of items\n\nexport function canInsert(state: EditorState, nodeType: NodeType) {\n let $from = state.selection.$from\n for (let d = $from.depth; d >= 0; d--) {\n let index = $from.index(d)\n if ($from.node(d).canReplaceWith(index, index, nodeType)) return true\n }\n return false\n}\n\nfunction insertImageItem(nodeType: NodeType) {\n return new MenuItem({\n title: \"Insert image\",\n label: \"Image\",\n enable(state) { return canInsert(state, nodeType) },\n run(state, _, view) {\n let {from, to} = state.selection, attrs = null\n if (state.selection instanceof NodeSelection && state.selection.node.type == nodeType)\n attrs = state.selection.node.attrs\n openPrompt({\n title: \"Insert image\",\n fields: {\n src: new TextField({label: \"Location\", required: true, value: attrs && attrs[\"src\"]}),\n title: new TextField({label: \"Title\", value: attrs && attrs[\"title\"]}),\n alt: new TextField({label: \"Description\",\n value: attrs ? attrs[\"alt\"] : state.doc.textBetween(from, to, \" \")})\n },\n callback(attrs) {\n view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(attrs)!))\n view.focus()\n }\n })\n }\n })\n}\n\nfunction cmdItem(cmd: Command, options: Partial<MenuItemSpec>) {\n let passedOptions: MenuItemSpec = {\n label: options.title as string | undefined,\n run: cmd\n }\n for (let prop in options) (passedOptions as any)[prop] = (options as any)[prop]\n if (!options.enable && !options.select)\n passedOptions[options.enable ? \"enable\" : \"select\"] = state => cmd(state)\n\n return new MenuItem(passedOptions)\n}\n\nexport function markActive(state: EditorState, type: MarkType) {\n let {from, $from, to, empty} = state.selection\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks())\n else return state.doc.rangeHasMark(from, to, type)\n}\n\nfunction markItem(markType: MarkType, options: Partial<MenuItemSpec>) {\n let passedOptions: Partial<MenuItemSpec> = {\n active(state) { return markActive(state, markType) }\n }\n for (let prop in options) (passedOptions as any)[prop] = (options as any)[prop]\n return cmdItem(toggleMark(markType), passedOptions)\n}\n\nfunction linkItem(markType: MarkType) {\n return new MenuItem({\n title: \"Add or remove link\",\n icon: icons[\"link\"],\n active(state) { return markActive(state, markType) },\n enable(state) { return !state.selection.empty },\n run(state, dispatch, view) {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch)\n return true\n }\n openPrompt({\n title: \"Create a link\",\n fields: {\n href: new TextField({\n label: \"Link target\",\n required: true\n }),\n title: new TextField({label: \"Title\"})\n },\n callback(attrs) {\n toggleMark(markType, attrs)(view.state, view.dispatch)\n view.focus()\n }\n })\n return true\n }\n })\n}\n\nfunction wrapListItem(nodeType: NodeType, options: Partial<MenuItemSpec>) {\n return cmdItem(wrapInList(nodeType, (options as any).attrs), options)\n}\n\ntype MenuItemResult = {\n /// A menu item to toggle the [strong mark](#schema-basic.StrongMark).\n toggleStrong?: MenuElement\n\n /// A menu item to toggle the [emphasis mark](#schema-basic.EmMark).\n toggleEm?: MenuElement\n\n /// A menu item to toggle the [code font mark](#schema-basic.CodeMark).\n toggleCode?: MenuElement\n\n /// A menu item to toggle the [link mark](#schema-basic.LinkMark).\n toggleLink?: MenuElement\n\n /// A menu item to insert an [image](#schema-basic.Image).\n insertImage?: MenuElement\n\n /// A menu item to wrap the selection in a [bullet list](#schema-list.BulletList).\n wrapBulletList?: MenuElement\n\n /// A menu item to wrap the selection in an [ordered list](#schema-list.OrderedList).\n wrapOrderedList?: MenuElement\n\n /// A menu item to wrap the selection in a [block quote](#schema-basic.BlockQuote).\n wrapBlockQuote?: MenuElement\n\n /// A menu item to set the current textblock to be a normal\n /// [paragraph](#schema-basic.Paragraph).\n makeParagraph?: MenuElement\n\n /// A menu item to set the current textblock to be a\n /// [code block](#schema-basic.CodeBlock).\n makeCodeBlock?: MenuElement\n\n /// Menu items to set the current textblock to be a\n /// [heading](#schema-basic.Heading) of level _N_.\n makeHead1?: MenuElement\n makeHead2?: MenuElement\n makeHead3?: MenuElement\n makeHead4?: MenuElement\n makeHead5?: MenuElement\n makeHead6?: MenuElement\n\n /// A menu item to insert a horizontal rule.\n insertHorizontalRule?: MenuElement\n\n /// A dropdown containing the `insertImage` and\n /// `insertHorizontalRule` items.\n insertMenu: Dropdown\n\n /// A dropdown containing the items for making the current\n /// textblock a paragraph, code block, or heading.\n typeMenu: Dropdown\n\n /// Array of block-related menu items.\n blockMenu: MenuElement[][]\n\n /// Inline-markup related menu items.\n inlineMenu: MenuElement[][]\n\n /// An array of arrays of menu elements for use as the full menu\n /// for, for example the [menu\n /// bar](https://code.haverbeke.berlin/prosemirror/prosemirror-menu).\n fullMenu: MenuElement[][]\n}\n\n/// Given a schema, look for default mark and node types in it and\n/// return an object with relevant menu items relating to those marks.\nexport function buildMenuItems(schema: Schema, override?:{[itemName:string]:MenuElement}): MenuItemResult {\n let r: MenuItemResult = {} as any\n let mark: MarkType | undefined;\n override=override||{};\n if (mark = schema.marks[\"strong\"])\n r.toggleStrong = override[\"strong\"]||markItem(mark, {title: \"Toggle strong style\", icon: icons[\"strong\"]})\n if (mark = schema.marks[\"em\"])\n r.toggleEm = override[\"em\"]|| markItem(mark, {title: \"Toggle emphasis\", icon: icons[\"em\"]})\n if (mark = schema.marks[\"code\"])\n r.toggleCode = override[\"code\"]||markItem(mark, {title: \"Toggle code font\", icon: icons[\"code\"]})\n if (mark = schema.marks[\"link\"])\n r.toggleLink = override[\"link\"]||linkItem(mark)\n\n let node: NodeType | undefined\n if (node = schema.nodes[\"image\"])\n r.insertImage = override[\"image\"]||insertImageItem(node)\n if (node = schema.nodes[\"bullet_list\"])\n r.wrapBulletList = override[\"bullet_list\"]||wrapListItem(node, {\n title: \"Wrap in bullet list\",\n icon: icons[\"bulletList\"]\n })\n if (node = schema.nodes[\"ordered_list\"])\n r.wrapOrderedList = override[\"ordered_list\"]||wrapListItem(node, {\n title: \"Wrap in ordered list\",\n icon: icons[\"orderedList\"]\n })\n if (node = schema.nodes[\"blockquote\"])\n r.wrapBlockQuote = override[\"blockquote\"]||wrapItem(node, {\n title: \"Wrap in block quote\",\n icon: icons[\"blockquote\"]\n })\n if (node = schema.nodes[\"paragraph\"])\n r.makeParagraph = override[\"paragraph\"]||blockTypeItem(node, {\n title: \"Change to paragraph\",\n label: \"Plain\"\n })\n if (node = schema.nodes[\"code_block\"])\n r.makeCodeBlock = override[\"code_block\"]||blockTypeItem(node, {\n title: \"Change to code block\",\n label: \"Code\"\n })\n if (node = schema.nodes[\"heading\"])\n for (let i = 1; i <= 10; i++)\n (r as any)[\"makeHead\" + i] = override[\"makeHead\"+i]||blockTypeItem(node, {\n title: \"Change to heading \" + i,\n label: \"Level \" + i,\n attrs: {level: i}\n })\n if (node = schema.nodes[\"horizontal_rule\"]) {\n let hr = node\n r.insertHorizontalRule = override[\"horizontal_rule\"]||new MenuItem({\n title: \"Insert horizontal rule\",\n label: \"Horizontal rule\",\n enable(state) { return canInsert(state, hr) },\n run(state, dispatch) { dispatch(state.tr.replaceSelectionWith(hr.create())) }\n })\n }\n\n let cut = <T>(arr: T[]) => arr.filter(x => x) as NonNullable<T>[]\n r.insertMenu = new Dropdown(cut([r.insertImage, r.insertHorizontalRule]), {label: \"Insert\"})\n r.typeMenu = new Dropdown(cut([r.makeParagraph, r.makeCodeBlock, r.makeHead1 && new DropdownSubmenu(cut([\n r.makeHead1, r.makeHead2, r.makeHead3, r.makeHead4, r.makeHead5, r.makeHead6\n ]), {label: \"Heading\"})]), {label: \"Type...\"})\n\n r.inlineMenu = [cut([r.toggleStrong, r.toggleEm, r.toggleCode, r.toggleLink])]\n r.blockMenu = [cut([r.wrapBulletList, r.wrapOrderedList, r.wrapBlockQuote, joinUpItem,\n liftItem, selectParentNodeItem])]\n r.fullMenu = r.inlineMenu.concat([[r.insertMenu, r.typeMenu]], [[undoItem, redoItem]], r.blockMenu)\n\n return r\n}\n\nexport function blockQuoteRule(nodeType: NodeType) {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType)\n}\n\n/// Given a list node type, returns an input rule that turns a number\n/// followed by a dot at the start of a textblock into an ordered list.\nexport function orderedListRule(nodeType: NodeType) {\n return wrappingInputRule(/^(\\d+)\\.\\s$/, nodeType, match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs[\"order\"] == +match[1])\n}\n\n/// Given a list node type, returns an input rule that turns a bullet\n/// (dash, plush, or asterisk) at the start of a textblock into a\n/// bullet list.\nexport function bulletListRule(nodeType: NodeType) {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n}\n\n/// Given a code block node type, returns an input rule that turns a\n/// textblock starting with three backticks into a code block.\nexport function codeBlockRule(nodeType: NodeType) {\n return textblockTypeInputRule(/^```$/, nodeType)\n}\n\n/// Given a node type and a maximum level, creates an input rule that\n/// turns up to that number of `#` characters followed by a space at\n/// the start of a textblock into a heading whose level corresponds to\n/// the number of `#` signs.\nexport function headingRule(nodeType: NodeType, maxLevel: number) {\n return textblockTypeInputRule(new RegExp(\"^(#{1,\" + maxLevel + \"})\\\\s$\"),\n nodeType, match => ({level: match[1].length}))\n}\n\n/// A set of input rules for creating the basic block quotes, lists,\n/// code blocks, and heading.\nexport function buildInputRules(schema: Schema) {\n let rules = smartQuotes.concat(ellipsis, emDash), type\n if (type = schema.nodes[\"blockquote\"]) rules.push(blockQuoteRule(type))\n if (type = schema.nodes[\"ordered_list\"]) rules.push(orderedListRule(type))\n if (type = schema.nodes[\"bullet_list\"]) rules.push(bulletListRule(type))\n if (type = schema.nodes[\"code_block\"]) rules.push(codeBlockRule(type))\n if (type = schema.nodes[\"heading\"]) rules.push(headingRule(type, 6))\n return inputRules({rules})\n}\n\n/// Create an array of plugins pre-configured for the given schema.\n/// The resulting array will include the following plugins:\n///\n/// * Input rules for smart quotes and creating the block types in the\n/// schema using markdown conventions (say `\"> \"` to create a\n/// blockquote)\n///\n/// * A keymap that defines keys to create and manipulate the nodes in the\n/// schema\n///\n/// * A keymap binding the default keys provided by the\n/// prosemirror-commands module\n///\n/// * The undo history plugin\n///\n/// * The drop cursor plugin\n///\n/// * The gap cursor plugin\n///\n/// * A custom plugin that adds a `menuContent` prop for the\n/// prosemirror-menu wrapper, and a CSS class that enables the\n/// additional styling defined in `style/style.css` in this package\n///\n/// Probably only useful for quickly setting up a passable\n/// editor—you'll need more control over your settings in most\n/// real-world situations.\nexport function basicSetup(options: {\n /// The schema to generate key bindings and menu items for.\n schema: Schema\n\n /// Can be used to [adjust](#example-setup.buildKeymap) the key bindings created.\n mapKeys?: {[key: string]: string | false}\n\n /// Set to false to disable the menu bar.\n menuBar?: boolean\n\n /// Set to false to disable the history plugin.\n history?: boolean\n\n /// Set to false to make the menu bar non-floating.\n floatingMenu?: boolean\n\n /// Can be used to override any menu content.\n menuContent?: { [itemName:string]:MenuElement }\n}) {\n let plugins = [\n buildInputRules(options.schema),\n keymap(buildKeymap(options.schema, options.mapKeys)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor()\n ]\n if (options.menuBar !== false)\n plugins.push(menuBar({floating: options.floatingMenu !== false,\n content: buildMenuItems(options.schema, options.menuContent).fullMenu}))\n if (options.history !== false)\n plugins.push(history())\n\n return plugins;/*.concat(new Plugin({\n props: {\n attributes: {class: \"ProseMirror-example-setup-style\"}\n }\n }))*/\n}\n\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { marked } from 'marked';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'markdown',\n})\nexport class MarkdownPipe implements PipeTransform {\n constructor(protected sanitizer: DomSanitizer) {\n }\n transform(value: unknown, ...args: unknown[]): unknown {\n if( typeof value === 'string' ) {\n const html= marked.parse(value.replace(/^[\\u200B\\u200C\\u200D\\u200E\\u200F\\uFEFF]/,\"\"),\n {\n async:false\n });\n return this.sanitizer.sanitize(SecurityContext.HTML, html);\n }\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inlineMarkdown',\n})\nexport class InlineMarkdownPipe implements PipeTransform {\n transform(value: unknown, ...args: unknown[]): unknown {\n if( typeof value === 'string' ) {\n let text = value as string;\n if (text.length>100)\n text=text.substring(0,100); // For inline text, we don't want all the text, just the start\n text = text.replace(/!\\[[^\\]]*\\]\\([^)]*\\)/g, ''); // images\n text = text.replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1');// links -> visible text\n text = text.replace(/^#{1,6}\\s*/gm, ''); // headers\n text = text.replace(/^\\s*[-*+]\\s+/gm, ''); // bullet lists\n text = text.replace(/^\\s*\\d+[.)]\\s+/gm, ''); // numbered lists\n text = text.replace(/^\\s*[-*]\\s+/gm, ''); // bullets that were bold markers\n text = text.replace(/\\*\\*([^*]*)\\*\\*/g, '$1'); // bold\n text = text.replace(/\\*([^*]*)\\*/g, '$1'); // italic *\n text = text.replace(/(?<!\\w)_([^_\\n]+)_(?!\\w)/g, '$1'); // italic _text_\n text = text.replace(/\\s*\\n\\s*/g, ' '); // newlines -> spaces\n text = text.replace(/\\s{2,}/g, ' ').trim(); // collapse\n if (text.length>57) {\n return text.substring(0,57)+'...';\n }\n return text;\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef, inject,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { updateFormGroupWithValue, XtContext, XtRenderComponent, XtResolverService, XtSimpleComponent } from 'xt-components';\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { EditorState, NodeSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { MarkType, Node, NodeType, Schema } from 'prosemirror-model';\nimport { defaultMarkdownParser, defaultMarkdownSerializer, schema } from 'prosemirror-markdown';\nimport { basicSetup, canInsert, markActive, openPrompt, TextField } from '../prose-mirror/basic-setup';\nimport { MarkdownPipe } from '../markdown/markdown-pipe';\nimport { InlineMarkdownPipe } from '../markdown/inline-markdown-pipe';\nimport { Tooltip } from 'primeng/tooltip';\nimport { Dialog } from 'primeng/dialog';\nimport { icons, MenuElement, MenuItem } from 'prosemirror-menu';\nimport { type } from '@ngrx/signals';\nimport { ButtonDirective } from 'primeng/button';\nimport { toggleMark } from 'prosemirror-commands';\n\n@Component({\n selector: 'xt-editor-editor',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MarkdownPipe, InlineMarkdownPipe, Tooltip, Dialog,\n XtRenderComponent, ButtonDirective\n ],\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditorComponent extends XtSimpleComponent<any> implements AfterViewInit{\n override context = input.required<XtContext<any>>();\n\n protected resolver = inject(XtResolverService);\n\n protected editor = viewChild<ElementRef<HTMLDivElement>>('editor');\n\n protected sampleJson={ \"type\": \"doc\", \"content\": [ { \"type\": \"heading\", \"attrs\": { \"level\": 1 }, \"content\": [ { \"type\": \"text\", \"text\": \"Example Text\" } ] }, { \"type\": \"paragraph\", \"content\": [ { \"type\": \"text\", \"text\": \"s it working ?\" } ] } ] };\n protected emptyJson={ \"type\": \"doc\", \"content\": [ { \"type\": \"paragraph\"} ] };\n// Mix the nodes from prosemirror-schema-list into the basic schema to create a schema with list support.\n /** mySchema: Schema = new Schema({\n nodes: addListNodes(schema.spec.nodes, \"paragraph block*\", \"block\"),\n marks: schema.spec.marks\n });*/\n // Creates the markdown schema\n mySchema = schema;\n\n protected view: EditorView|null=null;\n\n /**\n * Enable dialog box for image or link editing\n * @protected\n */\n protected displayAttrDialog = signal<boolean>(false);\n protected editAttrForm = new FormGroup({});\n protected editAttrNodeType:NodeType|MarkType=(this.mySchema as any)['image'];\n protected editAttrValueType: string = \"editorImageType\";\n\n constructor() {\n super();\n const imageType=this.resolver.typeResolver.findType('image');\n const linkType=this.resolver.typeResolver.findType('link');\n // Register the type with the image type if supported\n this.resolver.registerTypes({\n editorImageType: {\n children: {\n src: (imageType==null)?\"string\":\"image\",\n title: \"string\",\n alt: \"string\"\n }\n },\n editorLinkType: {\n children: {\n href: (linkType==null)?\"string\":\"link\",\n title: \"string\"\n }\n }\n });\n\n updateFormGroupWithValue (this.editAttrForm, {}, 'editorImageType', this.resolver.typeResolver);\n\n // Setup the editor once the divs are available\n effect(() => {\n const editor=this.editor();\n if( (editor!=null) && (this.view==null)) {\n const value=this.context().formControlValue();\n\n const doc = this.toProseMirrorDoc (value);\n this.view = new EditorView(editor.nativeElement, {\n state: EditorState.create({\n doc: doc,\n plugins: basicSetup({schema: this.mySchema, menuContent: {\n image: this.imageMenu(this.mySchema.nodes['image'], this),\n link: this.linkMenu (this.mySchema.marks['link'], this)\n }})\n }),\n dispatchTransaction: this.handleTransactions.bind(this)\n })\n }\n\n })\n }\n\n ngAfterViewInit() {\n /* this.editor.valueChanges.pipe(takeUntil(this.unsubscribe)).subscribe((jsonDoc) => {\n this.handleChange(jsonDoc);\n });*/\n }\n\n protected imageMenu(imageNodeType:NodeType, that: EditorComponent):MenuElement {\n return new MenuItem({\n title: \"Insert image\",\n label: \"Image\",\n enable(state) {\n return canInsert(state, imageNodeType)\n },\n run(state, _, view) {\n let { from, to } = state.selection, attrs: {src?:string, title?:string, alt?:string} = { };\n if (state.selection instanceof NodeSelection && state.selection.node.type == imageNodeType)\n attrs = state.selection.node.attrs||{};\n if (attrs.alt==null)\n attrs.alt= state.doc.textBetween(from, to, \" \");\n that.editAttrValueType=\"editorImageType\";\n updateFormGroupWithValue(that.editAttrForm, attrs, that.editAttrValueType, that.resolver.typeResolver);\n that.editAttrNodeType=imageNodeType;\n that.displayAttrDialog.set(true);\n }\n });\n }\n\n protected updateAttrsFromForm() {\n if (this.view != null) {\n if (this.editAttrValueType == \"editorImageType\"){\n this.view.dispatch(this.view.state.tr.replaceSelectionWith((this.mySchema.nodes['image']).createAndFill(this.editAttrForm.value)!))\n } else if (this.editAttrValueType == \"editorLinkType\"){\n toggleMark(this.editAttrNodeType as MarkType, this.editAttrForm.value)(this.view.state, this.view.dispatch)\n }\n this.view.focus()\n }\n this.displayAttrDialog.set(false);\n }\n\n protected linkMenu(linkMarkType:MarkType, that: EditorComponent):MenuElement {\n return new MenuItem({\n title: \"Add or Remove link\",\n icon: icons[\"link\"],\n active(state) { return markActive(state, linkMarkType) },\n enable(state) { return !state.selection.empty },\n run(state, _, view) {\n let { from, to } = state.selection, attrs: {href?:string, title?:string} = { };\n if (markActive(state, linkMarkType)) {\n toggleMark(linkMarkType)(state, view.dispatch)\n return true\n }\n that.editAttrValueType=\"editorLinkType\";\n updateFormGroupWithValue(that.editAttrForm, attrs, that.editAttrValueType, that.resolver.typeResolver);\n that.editAttrNodeType=linkMarkType;\n that.displayAttrDialog.set(true);\n return true;\n }\n });\n }\n\n protected handleTransactions(tr: Transaction): void {\n if (this.view!=null) {\n const state = this.view.state.apply(tr);\n this.view.updateState(state);\n\n if (tr.docChanged) {\n const markdown = defaultMarkdownSerializer.serialize(state.doc);\n this.context().setFormValue(markdown, true);\n }\n } else {\n console.error(\"Editor: View transaction received while no view defined.\",tr.doc.toJSON());\n }\n }\n\n\n private toProseMirrorDoc(value: any): Node {\n if (value == null) {\n return this.mySchema.nodeFromJSON ( this.emptyJson);\n }\n if (typeof value === 'string') {\n // This is a markdown text,\n return defaultMarkdownParser.parse(value);\n }\n return this.mySchema.nodeFromJSON (value);\n }\n\n protected textJson (text:string){\n return { \"type\": \"doc\", \"content\": [ { \"type\": \"paragraph\", \"content\": [ { \"type\": \"text\", \"text\": text } ] } ] }\n };\n\n}\n","@if (isInForm() ) {\n <div class=\"editorContainer\">\n <div #editor [formGroup]=\"formGroup()\">\n </div>\n </div>\n <p-dialog [visible]=\"displayAttrDialog()\" [modal]=\"true\" header=\"Edit\">\n <form [formGroup]=\"editAttrForm\">\n <xt-render [valueType]=\"editAttrValueType\" [formGroup]=\"editAttrForm\" displayMode=\"FULL_EDITABLE\" ></xt-render>\n </form>\n <ng-template #footer>\n <button type=\"button\" pButton severity=\"secondary\" variant=\"outlined\" (click)=\"displayAttrDialog.set(false)\">Cancel</button>\n <button type=\"button\" pButton (click)=\"updateAttrsFromForm()\">Save</button>\n </ng-template>\n </p-dialog>\n} @else {\n @let toDisplay=displayValue();\n @if (toDisplay!=null) {\n @if (context().displayMode=='FULL_VIEW') {\n <div class=\"displayForm\" [innerHTML]=\"displayValue() | markdown\">\n </div>\n } @else {\n <span [pTooltip]=\"fullText\">{{ toDisplay | inlineMarkdown}}</span>\n <ng-template #fullText>\n <div class=\"toolTip\" [innerHTML]=\"displayValue() | markdown\">\n </div>\n </ng-template>\n }\n }\n}\n","import { XtResolverService } from 'xt-components';\nimport { EditorComponent } from './editor/editor.component';\n\nexport function registerEditorPlugin (resolverService:XtResolverService):string {\n const pluginName = \"Plugin Editor\";\n console.info ('Registering ' +pluginName);\n resolverService.registerPlugin ({\n name:pluginName,\n uriLogo:'pluginicon.png',\n cssUrls: [\n 'prosemirror-view/style/prosemirror.css',\n 'prosemirror-menu/style/menu.css',\n 'prosemirror-gapcursor/style/gapcursor.css'\n ],\n components: [\n {\n componentName:'Editor',\n componentClass:EditorComponent,\n typesHandled: ['markdown','rich-text','description'],\n }\n ],\n types: {\n 'markdown':'string',\n 'rich-text':'string',\n 'description':'string'\n }\n });\n return pluginName;\n}\n\nexport function registerPlugin (resolverService:XtResolverService):string {\n return registerEditorPlugin(resolverService);\n}\n","/*\n * Public API Surface of web plugin\n */\n\nexport * from './lib/editor/editor.component';\nexport * from './lib/register';\nexport * from './lib/markdown/markdown-pipe'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1"],"mappings":"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"}
1
+ {"version":3,"file":"xt-plugin-editor.mjs","names":["i1"],"sources":["../../../projects/editor/src/lib/prose-mirror/basic-setup.ts","../../../projects/editor/src/lib/markdown/markdown-pipe.ts","../../../projects/editor/src/lib/markdown/inline-markdown-pipe.ts","../../../projects/editor/src/lib/editor/editor.component.ts","../../../projects/editor/src/lib/editor/editor.component.html","../../../projects/editor/src/lib/register.ts"],"sourcesContent":["\n\n\n/// Given a blockquote node type, returns an input rule that turns `\"> \"`\n/// at the start of a textblock into a blockquote.\n\nimport {\n wrapItem, blockTypeItem, Dropdown, DropdownSubmenu, joinUpItem, liftItem,\n selectParentNodeItem, undoItem, redoItem, icons, MenuItem, MenuElement, MenuItemSpec, menuBar\n} from 'prosemirror-menu';\nimport {NodeSelection, EditorState, Command} from \"prosemirror-state\"\nimport {Schema, NodeType, MarkType} from \"prosemirror-model\"\n\nimport {Attrs} from \"prosemirror-model\"\n\nconst prefix = \"ProseMirror-prompt\"\n\nimport {\n wrapIn, setBlockType, chainCommands, toggleMark, exitCode,\n joinUp, joinDown, lift, selectParentNode, baseKeymap\n} from 'prosemirror-commands';\nimport {wrapInList, splitListItem, liftListItem, sinkListItem} from \"prosemirror-schema-list\"\nimport { undo, redo, history } from 'prosemirror-history';\nimport {\n ellipsis, emDash,\n inputRules,\n smartQuotes,\n textblockTypeInputRule,\n undoInputRule,\n wrappingInputRule\n} from 'prosemirror-inputrules';\nimport { keymap } from 'prosemirror-keymap';\nimport { dropCursor } from 'prosemirror-dropcursor';\nimport { gapCursor } from 'prosemirror-gapcursor';\n\nconst mac = typeof navigator != \"undefined\" ? /Mac|iP(hone|[oa]d)/.test(navigator.platform) : false\n\n/// Inspect the given schema looking for marks and nodes from the\n/// basic schema, and if found, add key bindings related to them.\n/// This will add:\n///\n/// * **Mod-b** for toggling [strong](#schema-basic.StrongMark)\n/// * **Mod-i** for toggling [emphasis](#schema-basic.EmMark)\n/// * **Mod-`** for toggling [code font](#schema-basic.CodeMark)\n/// * **Ctrl-Shift-0** for making the current textblock a paragraph\n/// * **Ctrl-Shift-1** to **Ctrl-Shift-Digit6** for making the current\n/// textblock a heading of the corresponding level\n/// * **Ctrl-Shift-Backslash** to make the current textblock a code block\n/// * **Ctrl-Shift-8** to wrap the selection in an ordered list\n/// * **Ctrl-Shift-9** to wrap the selection in a bullet list\n/// * **Ctrl->** to wrap the selection in a block quote\n/// * **Enter** to split a non-empty textblock in a list item while at\n/// the same time splitting the list item\n/// * **Mod-Enter** to insert a hard break\n/// * **Mod-_** to insert a horizontal rule\n/// * **Backspace** to undo an input rule\n/// * **Alt-ArrowUp** to `joinUp`\n/// * **Alt-ArrowDown** to `joinDown`\n/// * **Mod-BracketLeft** to `lift`\n/// * **Escape** to `selectParentNode`\n///\n/// You can suppress or map these bindings by passing a `mapKeys`\n/// argument, which maps key names (say `\"Mod-B\"` to either `false`, to\n/// remove the binding, or a new key name string.\nexport function buildKeymap(schema: Schema, mapKeys?: {[key: string]: false | string}) {\n let keys: {[key: string]: Command} = {}, type\n function bind(key: string, cmd: Command) {\n if (mapKeys) {\n let mapped = mapKeys[key]\n if (mapped === false) return\n if (mapped) key = mapped\n }\n keys[key] = cmd\n }\n\n bind(\"Mod-z\", undo)\n bind(\"Shift-Mod-z\", redo)\n bind(\"Backspace\", undoInputRule)\n if (!mac) bind(\"Mod-y\", redo)\n\n bind(\"Alt-ArrowUp\", joinUp)\n bind(\"Alt-ArrowDown\", joinDown)\n bind(\"Mod-BracketLeft\", lift)\n bind(\"Escape\", selectParentNode)\n\n if (type = schema.marks[\"strong\"]) {\n bind(\"Mod-b\", toggleMark(type))\n bind(\"Mod-B\", toggleMark(type))\n }\n if (type = schema.marks[\"em\"]) {\n bind(\"Mod-i\", toggleMark(type))\n bind(\"Mod-I\", toggleMark(type))\n }\n if (type = schema.marks[\"code\"])\n bind(\"Mod-`\", toggleMark(type))\n\n if (type = schema.nodes[\"bullet_list\"])\n bind(\"Shift-Ctrl-8\", wrapInList(type))\n if (type = schema.nodes[\"ordered_list\"])\n bind(\"Shift-Ctrl-9\", wrapInList(type))\n if (type = schema.nodes[\"blockquote\"])\n bind(\"Ctrl->\", wrapIn(type))\n if (type = schema.nodes[\"hard_break\"]) {\n let br = type as any, cmd = chainCommands(exitCode, (state, dispatch) => {\n if (dispatch) dispatch(state.tr.replaceSelectionWith(br.create()).scrollIntoView())\n return true\n })\n bind(\"Mod-Enter\", cmd)\n bind(\"Shift-Enter\", cmd)\n if (mac) bind(\"Ctrl-Enter\", cmd)\n }\n if (type = schema.nodes[\"list_item\"]) {\n bind(\"Enter\", splitListItem(type))\n bind(\"Mod-[\", liftListItem(type))\n bind(\"Mod-]\", sinkListItem(type))\n }\n if (type = schema.nodes[\"paragraph\"])\n bind(\"Shift-Ctrl-0\", setBlockType(type))\n if (type = schema.nodes[\"code_block\"])\n bind(\"Shift-Ctrl-\\\\\", setBlockType(type))\n if (type = schema.nodes[\"heading\"])\n for (let i = 1; i <= 6; i++) bind(\"Shift-Ctrl-\" + i, setBlockType(type, {level: i}))\n if (type = schema.nodes[\"horizontal_rule\"]) {\n let hr = type as any\n bind(\"Mod-_\", (state, dispatch) => {\n if (dispatch) dispatch(state.tr.replaceSelectionWith(hr.create()).scrollIntoView())\n return true\n })\n }\n\n return keys\n}\n\n\nexport function openPrompt(options: {\n title: string,\n fields: {[name: string]: Field},\n callback: (attrs: Attrs) => void\n}) {\n let wrapper = document.body.appendChild(document.createElement(\"div\"))\n wrapper.className = prefix\n\n let mouseOutside = (e: MouseEvent) => { if (!wrapper.contains(e.target as HTMLElement)) close() }\n setTimeout(() => window.addEventListener(\"mousedown\", mouseOutside), 50)\n let close = () => {\n window.removeEventListener(\"mousedown\", mouseOutside)\n if (wrapper.parentNode) wrapper.parentNode.removeChild(wrapper)\n }\n\n let domFields: HTMLElement[] = []\n for (let name in options.fields) domFields.push(options.fields[name].render())\n\n let submitButton = document.createElement(\"button\")\n submitButton.type = \"submit\"\n submitButton.className = prefix + \"-submit\"\n submitButton.textContent = \"OK\"\n let cancelButton = document.createElement(\"button\")\n cancelButton.type = \"button\"\n cancelButton.className = prefix + \"-cancel\"\n cancelButton.textContent = \"Cancel\"\n cancelButton.addEventListener(\"click\", close)\n\n let form = wrapper.appendChild(document.createElement(\"form\"))\n if (options.title) form.appendChild(document.createElement(\"h5\")).textContent = options.title\n domFields.forEach(field => {\n form.appendChild(document.createElement(\"div\")).appendChild(field)\n })\n let buttons = form.appendChild(document.createElement(\"div\"))\n buttons.className = prefix + \"-buttons\"\n buttons.appendChild(submitButton)\n buttons.appendChild(document.createTextNode(\" \"))\n buttons.appendChild(cancelButton)\n\n let box = wrapper.getBoundingClientRect()\n wrapper.style.top = ((window.innerHeight - box.height) / 2) + \"px\"\n wrapper.style.left = ((window.innerWidth - box.width) / 2) + \"px\"\n\n let submit = () => {\n let params = getValues(options.fields, domFields)\n if (params) {\n close()\n options.callback(params)\n }\n }\n\n form.addEventListener(\"submit\", e => {\n e.preventDefault()\n submit()\n })\n\n form.addEventListener(\"keydown\", e => {\n if (e.keyCode == 27) {\n e.preventDefault()\n close()\n } else if (e.keyCode == 13 && !(e.ctrlKey || e.metaKey || e.shiftKey)) {\n e.preventDefault()\n submit()\n } else if (e.keyCode == 9) {\n window.setTimeout(() => {\n if (!wrapper.contains(document.activeElement)) close()\n }, 500)\n }\n })\n\n let input = form.elements[0] as HTMLElement\n if (input) input.focus()\n}\n\nfunction getValues(fields: {[name: string]: Field}, domFields: readonly HTMLElement[]) {\n let result = Object.create(null), i = 0\n for (let name in fields) {\n let field = fields[name], dom = domFields[i++]\n let value = field.read(dom), bad = field.validate(value)\n if (bad) {\n reportInvalid(dom, bad)\n return null\n }\n result[name] = field.clean(value)\n }\n return result\n}\n\nfunction reportInvalid(dom: HTMLElement, message: string) {\n // FIXME this is awful and needs a lot more work\n let parent = dom.parentNode!\n let msg = parent.appendChild(document.createElement(\"div\"))\n msg.style.left = (dom.offsetLeft + dom.offsetWidth + 2) + \"px\"\n msg.style.top = (dom.offsetTop - 5) + \"px\"\n msg.className = \"ProseMirror-invalid\"\n msg.textContent = message\n setTimeout(() => parent.removeChild(msg), 1500)\n}\n\n/// The type of field that `openPrompt` expects to be passed to it.\nexport abstract class Field {\n /// Create a field with the given options. Options support by all\n /// field types are:\n constructor(\n /// @internal\n readonly options: {\n /// The starting value for the field.\n value?: any\n\n /// The label for the field.\n label: string\n\n /// Whether the field is required.\n required?: boolean\n\n /// A function to validate the given value. Should return an\n /// error message if it is not valid.\n validate?: (value: any) => string | null\n\n /// A cleanup function for field values.\n clean?: (value: any) => any\n }\n ) {}\n\n /// Render the field to the DOM. Should be implemented by all subclasses.\n abstract render(): HTMLElement\n\n /// Read the field's value from its DOM node.\n read(dom: HTMLElement) { return (dom as any).value }\n\n /// A field-type-specific validation function.\n validateType(value: any): string | null { return null }\n\n /// @internal\n validate(value: any): string | null {\n if (!value && this.options.required)\n return \"Required field\"\n return this.validateType(value) || (this.options.validate ? this.options.validate(value) : null)\n }\n\n clean(value: any): any {\n return this.options.clean ? this.options.clean(value) : value\n }\n}\n\n/// A field class for single-line text fields.\nexport class TextField extends Field {\n render() {\n let input = document.createElement(\"input\")\n input.type = \"text\"\n input.placeholder = this.options.label\n input.value = this.options.value || \"\"\n input.autocomplete = \"off\"\n return input\n }\n}\n\n\n/// A field class for dropdown fields based on a plain `<select>`\n/// tag. Expects an option `options`, which should be an array of\n/// `{value: string, label: string}` objects, or a function taking a\n/// `ProseMirror` instance and returning such an array.\nexport class SelectField extends Field {\n render() {\n let select = document.createElement(\"select\")\n ;((this.options as any).options as {value: string, label: string}[]).forEach(o => {\n let opt = select.appendChild(document.createElement(\"option\"))\n opt.value = o.value\n opt.selected = o.value == this.options.value\n opt.label = o.label\n })\n return select\n }\n}\n\n// Helpers to create specific types of items\n\nexport function canInsert(state: EditorState, nodeType: NodeType) {\n let $from = state.selection.$from\n for (let d = $from.depth; d >= 0; d--) {\n let index = $from.index(d)\n if ($from.node(d).canReplaceWith(index, index, nodeType)) return true\n }\n return false\n}\n\nfunction insertImageItem(nodeType: NodeType) {\n return new MenuItem({\n title: \"Insert image\",\n label: \"Image\",\n enable(state) { return canInsert(state, nodeType) },\n run(state, _, view) {\n let {from, to} = state.selection, attrs = null\n if (state.selection instanceof NodeSelection && state.selection.node.type == nodeType)\n attrs = state.selection.node.attrs\n openPrompt({\n title: \"Insert image\",\n fields: {\n src: new TextField({label: \"Location\", required: true, value: attrs && attrs[\"src\"]}),\n title: new TextField({label: \"Title\", value: attrs && attrs[\"title\"]}),\n alt: new TextField({label: \"Description\",\n value: attrs ? attrs[\"alt\"] : state.doc.textBetween(from, to, \" \")})\n },\n callback(attrs) {\n view.dispatch(view.state.tr.replaceSelectionWith(nodeType.createAndFill(attrs)!))\n view.focus()\n }\n })\n }\n })\n}\n\nfunction cmdItem(cmd: Command, options: Partial<MenuItemSpec>) {\n let passedOptions: MenuItemSpec = {\n label: options.title as string | undefined,\n run: cmd\n }\n for (let prop in options) (passedOptions as any)[prop] = (options as any)[prop]\n if (!options.enable && !options.select)\n passedOptions[options.enable ? \"enable\" : \"select\"] = state => cmd(state)\n\n return new MenuItem(passedOptions)\n}\n\nexport function markActive(state: EditorState, type: MarkType) {\n let {from, $from, to, empty} = state.selection\n if (empty) return !!type.isInSet(state.storedMarks || $from.marks())\n else return state.doc.rangeHasMark(from, to, type)\n}\n\nfunction markItem(markType: MarkType, options: Partial<MenuItemSpec>) {\n let passedOptions: Partial<MenuItemSpec> = {\n active(state) { return markActive(state, markType) }\n }\n for (let prop in options) (passedOptions as any)[prop] = (options as any)[prop]\n return cmdItem(toggleMark(markType), passedOptions)\n}\n\nfunction linkItem(markType: MarkType) {\n return new MenuItem({\n title: \"Add or remove link\",\n icon: icons[\"link\"],\n active(state) { return markActive(state, markType) },\n enable(state) { return !state.selection.empty },\n run(state, dispatch, view) {\n if (markActive(state, markType)) {\n toggleMark(markType)(state, dispatch)\n return true\n }\n openPrompt({\n title: \"Create a link\",\n fields: {\n href: new TextField({\n label: \"Link target\",\n required: true\n }),\n title: new TextField({label: \"Title\"})\n },\n callback(attrs) {\n toggleMark(markType, attrs)(view.state, view.dispatch)\n view.focus()\n }\n })\n return true\n }\n })\n}\n\nfunction wrapListItem(nodeType: NodeType, options: Partial<MenuItemSpec>) {\n return cmdItem(wrapInList(nodeType, (options as any).attrs), options)\n}\n\ntype MenuItemResult = {\n /// A menu item to toggle the [strong mark](#schema-basic.StrongMark).\n toggleStrong?: MenuElement\n\n /// A menu item to toggle the [emphasis mark](#schema-basic.EmMark).\n toggleEm?: MenuElement\n\n /// A menu item to toggle the [code font mark](#schema-basic.CodeMark).\n toggleCode?: MenuElement\n\n /// A menu item to toggle the [link mark](#schema-basic.LinkMark).\n toggleLink?: MenuElement\n\n /// A menu item to insert an [image](#schema-basic.Image).\n insertImage?: MenuElement\n\n /// A menu item to wrap the selection in a [bullet list](#schema-list.BulletList).\n wrapBulletList?: MenuElement\n\n /// A menu item to wrap the selection in an [ordered list](#schema-list.OrderedList).\n wrapOrderedList?: MenuElement\n\n /// A menu item to wrap the selection in a [block quote](#schema-basic.BlockQuote).\n wrapBlockQuote?: MenuElement\n\n /// A menu item to set the current textblock to be a normal\n /// [paragraph](#schema-basic.Paragraph).\n makeParagraph?: MenuElement\n\n /// A menu item to set the current textblock to be a\n /// [code block](#schema-basic.CodeBlock).\n makeCodeBlock?: MenuElement\n\n /// Menu items to set the current textblock to be a\n /// [heading](#schema-basic.Heading) of level _N_.\n makeHead1?: MenuElement\n makeHead2?: MenuElement\n makeHead3?: MenuElement\n makeHead4?: MenuElement\n makeHead5?: MenuElement\n makeHead6?: MenuElement\n\n /// A menu item to insert a horizontal rule.\n insertHorizontalRule?: MenuElement\n\n /// A dropdown containing the `insertImage` and\n /// `insertHorizontalRule` items.\n insertMenu: Dropdown\n\n /// A dropdown containing the items for making the current\n /// textblock a paragraph, code block, or heading.\n typeMenu: Dropdown\n\n /// Array of block-related menu items.\n blockMenu: MenuElement[][]\n\n /// Inline-markup related menu items.\n inlineMenu: MenuElement[][]\n\n /// An array of arrays of menu elements for use as the full menu\n /// for, for example the [menu\n /// bar](https://code.haverbeke.berlin/prosemirror/prosemirror-menu).\n fullMenu: MenuElement[][]\n}\n\n/// Given a schema, look for default mark and node types in it and\n/// return an object with relevant menu items relating to those marks.\nexport function buildMenuItems(schema: Schema, override?:{[itemName:string]:MenuElement}): MenuItemResult {\n let r: MenuItemResult = {} as any\n let mark: MarkType | undefined;\n override=override||{};\n if (mark = schema.marks[\"strong\"])\n r.toggleStrong = override[\"strong\"]||markItem(mark, {title: \"Toggle strong style\", icon: icons[\"strong\"]})\n if (mark = schema.marks[\"em\"])\n r.toggleEm = override[\"em\"]|| markItem(mark, {title: \"Toggle emphasis\", icon: icons[\"em\"]})\n if (mark = schema.marks[\"code\"])\n r.toggleCode = override[\"code\"]||markItem(mark, {title: \"Toggle code font\", icon: icons[\"code\"]})\n if (mark = schema.marks[\"link\"])\n r.toggleLink = override[\"link\"]||linkItem(mark)\n\n let node: NodeType | undefined\n if (node = schema.nodes[\"image\"])\n r.insertImage = override[\"image\"]||insertImageItem(node)\n if (node = schema.nodes[\"bullet_list\"])\n r.wrapBulletList = override[\"bullet_list\"]||wrapListItem(node, {\n title: \"Wrap in bullet list\",\n icon: icons[\"bulletList\"]\n })\n if (node = schema.nodes[\"ordered_list\"])\n r.wrapOrderedList = override[\"ordered_list\"]||wrapListItem(node, {\n title: \"Wrap in ordered list\",\n icon: icons[\"orderedList\"]\n })\n if (node = schema.nodes[\"blockquote\"])\n r.wrapBlockQuote = override[\"blockquote\"]||wrapItem(node, {\n title: \"Wrap in block quote\",\n icon: icons[\"blockquote\"]\n })\n if (node = schema.nodes[\"paragraph\"])\n r.makeParagraph = override[\"paragraph\"]||blockTypeItem(node, {\n title: \"Change to paragraph\",\n label: \"Plain\"\n })\n if (node = schema.nodes[\"code_block\"])\n r.makeCodeBlock = override[\"code_block\"]||blockTypeItem(node, {\n title: \"Change to code block\",\n label: \"Code\"\n })\n if (node = schema.nodes[\"heading\"])\n for (let i = 1; i <= 10; i++)\n (r as any)[\"makeHead\" + i] = override[\"makeHead\"+i]||blockTypeItem(node, {\n title: \"Change to heading \" + i,\n label: \"Level \" + i,\n attrs: {level: i}\n })\n if (node = schema.nodes[\"horizontal_rule\"]) {\n let hr = node\n r.insertHorizontalRule = override[\"horizontal_rule\"]||new MenuItem({\n title: \"Insert horizontal rule\",\n label: \"Horizontal rule\",\n enable(state) { return canInsert(state, hr) },\n run(state, dispatch) { dispatch(state.tr.replaceSelectionWith(hr.create())) }\n })\n }\n\n let cut = <T>(arr: T[]) => arr.filter(x => x) as NonNullable<T>[]\n r.insertMenu = new Dropdown(cut([r.insertImage, r.insertHorizontalRule]), {label: \"Insert\"})\n r.typeMenu = new Dropdown(cut([r.makeParagraph, r.makeCodeBlock, r.makeHead1 && new DropdownSubmenu(cut([\n r.makeHead1, r.makeHead2, r.makeHead3, r.makeHead4, r.makeHead5, r.makeHead6\n ]), {label: \"Heading\"})]), {label: \"Type...\"})\n\n r.inlineMenu = [cut([r.toggleStrong, r.toggleEm, r.toggleCode, r.toggleLink])]\n r.blockMenu = [cut([r.wrapBulletList, r.wrapOrderedList, r.wrapBlockQuote, joinUpItem,\n liftItem, selectParentNodeItem])]\n r.fullMenu = r.inlineMenu.concat([[r.insertMenu, r.typeMenu]], [[undoItem, redoItem]], r.blockMenu)\n\n return r\n}\n\nexport function blockQuoteRule(nodeType: NodeType) {\n return wrappingInputRule(/^\\s*>\\s$/, nodeType)\n}\n\n/// Given a list node type, returns an input rule that turns a number\n/// followed by a dot at the start of a textblock into an ordered list.\nexport function orderedListRule(nodeType: NodeType) {\n return wrappingInputRule(/^(\\d+)\\.\\s$/, nodeType, match => ({order: +match[1]}),\n (match, node) => node.childCount + node.attrs[\"order\"] == +match[1])\n}\n\n/// Given a list node type, returns an input rule that turns a bullet\n/// (dash, plush, or asterisk) at the start of a textblock into a\n/// bullet list.\nexport function bulletListRule(nodeType: NodeType) {\n return wrappingInputRule(/^\\s*([-+*])\\s$/, nodeType)\n}\n\n/// Given a code block node type, returns an input rule that turns a\n/// textblock starting with three backticks into a code block.\nexport function codeBlockRule(nodeType: NodeType) {\n return textblockTypeInputRule(/^```$/, nodeType)\n}\n\n/// Given a node type and a maximum level, creates an input rule that\n/// turns up to that number of `#` characters followed by a space at\n/// the start of a textblock into a heading whose level corresponds to\n/// the number of `#` signs.\nexport function headingRule(nodeType: NodeType, maxLevel: number) {\n return textblockTypeInputRule(new RegExp(\"^(#{1,\" + maxLevel + \"})\\\\s$\"),\n nodeType, match => ({level: match[1].length}))\n}\n\n/// A set of input rules for creating the basic block quotes, lists,\n/// code blocks, and heading.\nexport function buildInputRules(schema: Schema) {\n let rules = smartQuotes.concat(ellipsis, emDash), type\n if (type = schema.nodes[\"blockquote\"]) rules.push(blockQuoteRule(type))\n if (type = schema.nodes[\"ordered_list\"]) rules.push(orderedListRule(type))\n if (type = schema.nodes[\"bullet_list\"]) rules.push(bulletListRule(type))\n if (type = schema.nodes[\"code_block\"]) rules.push(codeBlockRule(type))\n if (type = schema.nodes[\"heading\"]) rules.push(headingRule(type, 6))\n return inputRules({rules})\n}\n\n/// Create an array of plugins pre-configured for the given schema.\n/// The resulting array will include the following plugins:\n///\n/// * Input rules for smart quotes and creating the block types in the\n/// schema using markdown conventions (say `\"> \"` to create a\n/// blockquote)\n///\n/// * A keymap that defines keys to create and manipulate the nodes in the\n/// schema\n///\n/// * A keymap binding the default keys provided by the\n/// prosemirror-commands module\n///\n/// * The undo history plugin\n///\n/// * The drop cursor plugin\n///\n/// * The gap cursor plugin\n///\n/// * A custom plugin that adds a `menuContent` prop for the\n/// prosemirror-menu wrapper, and a CSS class that enables the\n/// additional styling defined in `style/style.css` in this package\n///\n/// Probably only useful for quickly setting up a passable\n/// editor—you'll need more control over your settings in most\n/// real-world situations.\nexport function basicSetup(options: {\n /// The schema to generate key bindings and menu items for.\n schema: Schema\n\n /// Can be used to [adjust](#example-setup.buildKeymap) the key bindings created.\n mapKeys?: {[key: string]: string | false}\n\n /// Set to false to disable the menu bar.\n menuBar?: boolean\n\n /// Set to false to disable the history plugin.\n history?: boolean\n\n /// Set to false to make the menu bar non-floating.\n floatingMenu?: boolean\n\n /// Can be used to override any menu content.\n menuContent?: { [itemName:string]:MenuElement }\n}) {\n let plugins = [\n buildInputRules(options.schema),\n keymap(buildKeymap(options.schema, options.mapKeys)),\n keymap(baseKeymap),\n dropCursor(),\n gapCursor()\n ]\n if (options.menuBar !== false)\n plugins.push(menuBar({floating: options.floatingMenu !== false,\n content: buildMenuItems(options.schema, options.menuContent).fullMenu}))\n if (options.history !== false)\n plugins.push(history())\n\n return plugins;/*.concat(new Plugin({\n props: {\n attributes: {class: \"ProseMirror-example-setup-style\"}\n }\n }))*/\n}\n\n","import { Pipe, PipeTransform, SecurityContext } from '@angular/core';\nimport { marked } from 'marked';\nimport { DomSanitizer } from '@angular/platform-browser';\n\n@Pipe({\n name: 'markdown',\n})\nexport class MarkdownPipe implements PipeTransform {\n constructor(protected sanitizer: DomSanitizer) {\n }\n transform(value: unknown, ...args: unknown[]): unknown {\n if( typeof value === 'string' ) {\n const html= marked.parse(value.replace(/^[\\u200B\\u200C\\u200D\\u200E\\u200F\\uFEFF]/,\"\"),\n {\n async:false\n });\n return this.sanitizer.sanitize(SecurityContext.HTML, html);\n }\n return null;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'inlineMarkdown',\n})\nexport class InlineMarkdownPipe implements PipeTransform {\n transform(value: unknown, ...args: unknown[]): unknown {\n if( typeof value === 'string' ) {\n let text = value as string;\n if (text.length>100)\n text=text.substring(0,100); // For inline text, we don't want all the text, just the start\n text = text.replace(/!\\[[^\\]]*\\]\\([^)]*\\)/g, ''); // images\n text = text.replace(/\\[([^\\]]*)\\]\\([^)]*\\)/g, '$1');// links -> visible text\n text = text.replace(/^#{1,6}\\s*/gm, ''); // headers\n text = text.replace(/^\\s*[-*+]\\s+/gm, ''); // bullet lists\n text = text.replace(/^\\s*\\d+[.)]\\s+/gm, ''); // numbered lists\n text = text.replace(/^\\s*[-*]\\s+/gm, ''); // bullets that were bold markers\n text = text.replace(/\\*\\*([^*]*)\\*\\*/g, '$1'); // bold\n text = text.replace(/\\*([^*]*)\\*/g, '$1'); // italic *\n text = text.replace(/(?<!\\w)_([^_\\n]+)_(?!\\w)/g, '$1'); // italic _text_\n text = text.replace(/\\s*\\n\\s*/g, ' '); // newlines -> spaces\n text = text.replace(/\\s{2,}/g, ' ').trim(); // collapse\n if (text.length>57) {\n return text.substring(0,57)+'...';\n }\n return text;\n }\n return null;\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef, inject,\n input,\n signal,\n viewChild\n} from '@angular/core';\nimport { updateFormGroupWithValue, XtContext, XtRenderComponent, XtResolverService, XtSimpleComponent } from 'xt-components';\nimport { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { EditorState, NodeSelection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { MarkType, Node, NodeType, Schema } from 'prosemirror-model';\nimport { defaultMarkdownParser, defaultMarkdownSerializer, schema } from 'prosemirror-markdown';\nimport { basicSetup, canInsert, markActive, openPrompt, TextField } from '../prose-mirror/basic-setup';\nimport { MarkdownPipe } from '../markdown/markdown-pipe';\nimport { InlineMarkdownPipe } from '../markdown/inline-markdown-pipe';\nimport { Tooltip } from '@openng/optimus-ui/tooltip';\nimport { Dialog } from '@openng/optimus-ui/dialog';\nimport { icons, MenuElement, MenuItem } from 'prosemirror-menu';\nimport { type } from '@ngrx/signals';\nimport { ButtonDirective } from '@openng/optimus-ui/button';\nimport { toggleMark } from 'prosemirror-commands';\n\n@Component({\n selector: 'xt-editor-editor',\n imports: [\n ReactiveFormsModule,\n FormsModule,\n MarkdownPipe, InlineMarkdownPipe, Tooltip, Dialog,\n XtRenderComponent, ButtonDirective\n ],\n templateUrl: './editor.component.html',\n styleUrl: './editor.component.css',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditorComponent extends XtSimpleComponent<any> implements AfterViewInit{\n override context = input.required<XtContext<any>>();\n\n protected resolver = inject(XtResolverService);\n\n protected editor = viewChild<ElementRef<HTMLDivElement>>('editor');\n\n protected sampleJson={ \"type\": \"doc\", \"content\": [ { \"type\": \"heading\", \"attrs\": { \"level\": 1 }, \"content\": [ { \"type\": \"text\", \"text\": \"Example Text\" } ] }, { \"type\": \"paragraph\", \"content\": [ { \"type\": \"text\", \"text\": \"s it working ?\" } ] } ] };\n protected emptyJson={ \"type\": \"doc\", \"content\": [ { \"type\": \"paragraph\"} ] };\n// Mix the nodes from prosemirror-schema-list into the basic schema to create a schema with list support.\n /** mySchema: Schema = new Schema({\n nodes: addListNodes(schema.spec.nodes, \"paragraph block*\", \"block\"),\n marks: schema.spec.marks\n });*/\n // Creates the markdown schema\n mySchema = schema;\n\n protected view: EditorView|null=null;\n\n /**\n * Enable dialog box for image or link editing\n * @protected\n */\n protected displayAttrDialog = signal<boolean>(false);\n protected editAttrForm = new FormGroup({});\n protected editAttrNodeType:NodeType|MarkType=(this.mySchema as any)['image'];\n protected editAttrValueType: string = \"editorImageType\";\n\n constructor() {\n super();\n const imageType=this.resolver.typeResolver.findType('image');\n const linkType=this.resolver.typeResolver.findType('link');\n // Register the type with the image type if supported\n this.resolver.registerTypes({\n editorImageType: {\n children: {\n src: (imageType==null)?\"string\":\"image\",\n title: \"string\",\n alt: \"string\"\n }\n },\n editorLinkType: {\n children: {\n href: (linkType==null)?\"string\":\"link\",\n title: \"string\"\n }\n }\n });\n\n updateFormGroupWithValue (this.editAttrForm, {}, 'editorImageType', this.resolver.typeResolver);\n\n // Setup the editor once the divs are available\n effect(() => {\n const editor=this.editor();\n if( (editor!=null) && (this.view==null)) {\n const value=this.context().formControlValue();\n\n const doc = this.toProseMirrorDoc (value);\n this.view = new EditorView(editor.nativeElement, {\n state: EditorState.create({\n doc: doc,\n plugins: basicSetup({schema: this.mySchema, menuContent: {\n image: this.imageMenu(this.mySchema.nodes['image'], this),\n link: this.linkMenu (this.mySchema.marks['link'], this)\n }})\n }),\n dispatchTransaction: this.handleTransactions.bind(this)\n })\n }\n\n })\n }\n\n ngAfterViewInit() {\n /* this.editor.valueChanges.pipe(takeUntil(this.unsubscribe)).subscribe((jsonDoc) => {\n this.handleChange(jsonDoc);\n });*/\n }\n\n protected imageMenu(imageNodeType:NodeType, that: EditorComponent):MenuElement {\n return new MenuItem({\n title: \"Insert image\",\n label: \"Image\",\n enable(state) {\n return canInsert(state, imageNodeType)\n },\n run(state, _, view) {\n let { from, to } = state.selection, attrs: {src?:string, title?:string, alt?:string} = { };\n if (state.selection instanceof NodeSelection && state.selection.node.type == imageNodeType)\n attrs = state.selection.node.attrs||{};\n if (attrs.alt==null)\n attrs.alt= state.doc.textBetween(from, to, \" \");\n that.editAttrValueType=\"editorImageType\";\n updateFormGroupWithValue(that.editAttrForm, attrs, that.editAttrValueType, that.resolver.typeResolver);\n that.editAttrNodeType=imageNodeType;\n that.displayAttrDialog.set(true);\n }\n });\n }\n\n protected updateAttrsFromForm() {\n if (this.view != null) {\n if (this.editAttrValueType == \"editorImageType\"){\n this.view.dispatch(this.view.state.tr.replaceSelectionWith((this.mySchema.nodes['image']).createAndFill(this.editAttrForm.value)!))\n } else if (this.editAttrValueType == \"editorLinkType\"){\n toggleMark(this.editAttrNodeType as MarkType, this.editAttrForm.value)(this.view.state, this.view.dispatch)\n }\n this.view.focus()\n }\n this.displayAttrDialog.set(false);\n }\n\n protected linkMenu(linkMarkType:MarkType, that: EditorComponent):MenuElement {\n return new MenuItem({\n title: \"Add or Remove link\",\n icon: icons[\"link\"],\n active(state) { return markActive(state, linkMarkType) },\n enable(state) { return !state.selection.empty },\n run(state, _, view) {\n let { from, to } = state.selection, attrs: {href?:string, title?:string} = { };\n if (markActive(state, linkMarkType)) {\n toggleMark(linkMarkType)(state, view.dispatch)\n return true\n }\n that.editAttrValueType=\"editorLinkType\";\n updateFormGroupWithValue(that.editAttrForm, attrs, that.editAttrValueType, that.resolver.typeResolver);\n that.editAttrNodeType=linkMarkType;\n that.displayAttrDialog.set(true);\n return true;\n }\n });\n }\n\n protected handleTransactions(tr: Transaction): void {\n if (this.view!=null) {\n const state = this.view.state.apply(tr);\n this.view.updateState(state);\n\n if (tr.docChanged) {\n const markdown = defaultMarkdownSerializer.serialize(state.doc);\n this.context().setFormValue(markdown, true);\n }\n } else {\n console.error(\"Editor: View transaction received while no view defined.\",tr.doc.toJSON());\n }\n }\n\n\n private toProseMirrorDoc(value: any): Node {\n if (value == null) {\n return this.mySchema.nodeFromJSON ( this.emptyJson);\n }\n if (typeof value === 'string') {\n // This is a markdown text,\n return defaultMarkdownParser.parse(value);\n }\n return this.mySchema.nodeFromJSON (value);\n }\n\n protected textJson (text:string){\n return { \"type\": \"doc\", \"content\": [ { \"type\": \"paragraph\", \"content\": [ { \"type\": \"text\", \"text\": text } ] } ] }\n };\n\n}\n","@if (isInForm() ) {\n <div class=\"editorContainer\">\n <div #editor [formGroup]=\"formGroup()\">\n </div>\n </div>\n <p-dialog [visible]=\"displayAttrDialog()\" [modal]=\"true\" header=\"Edit\">\n <form [formGroup]=\"editAttrForm\">\n <xt-render [valueType]=\"editAttrValueType\" [formGroup]=\"editAttrForm\" displayMode=\"FULL_EDITABLE\" ></xt-render>\n </form>\n <ng-template #footer>\n <button type=\"button\" pButton severity=\"secondary\" variant=\"outlined\" (click)=\"displayAttrDialog.set(false)\">Cancel</button>\n <button type=\"button\" pButton (click)=\"updateAttrsFromForm()\">Save</button>\n </ng-template>\n </p-dialog>\n} @else {\n @let toDisplay=displayValue();\n @if (toDisplay!=null) {\n @if (context().displayMode=='FULL_VIEW') {\n <div class=\"displayForm\" [innerHTML]=\"displayValue() | markdown\">\n </div>\n } @else {\n <span [pTooltip]=\"fullText\">{{ toDisplay | inlineMarkdown}}</span>\n <ng-template #fullText>\n <div class=\"toolTip\" [innerHTML]=\"displayValue() | markdown\">\n </div>\n </ng-template>\n }\n }\n}\n","import { XtResolverService } from 'xt-components';\nimport { EditorComponent } from './editor/editor.component';\n\nexport function registerEditorPlugin (resolverService:XtResolverService):string {\n const pluginName = \"Plugin Editor\";\n console.info ('Registering ' +pluginName);\n resolverService.registerPlugin ({\n name:pluginName,\n uriLogo:'pluginicon.png',\n cssUrls: [\n 'prosemirror-view/style/prosemirror.css',\n 'prosemirror-menu/style/menu.css',\n 'prosemirror-gapcursor/style/gapcursor.css'\n ],\n components: [\n {\n componentName:'Editor',\n componentClass:EditorComponent,\n typesHandled: ['markdown','rich-text','description'],\n }\n ],\n types: {\n 'markdown':'string',\n 'rich-text':'string',\n 'description':'string'\n }\n });\n return pluginName;\n}\n\nexport function registerPlugin (resolverService:XtResolverService):string {\n return registerEditorPlugin(resolverService);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
1
  {
2
2
  "name": "xt-plugin-editor",
3
- "version": "1.3.2",
3
+ "version": "1.5.0",
4
4
  "repository": {
5
5
  "url": "https://github.com/dont-code/ng-xtend.git"
6
6
  },
7
7
  "peerDependencies": {
8
- "@angular/animations": "^21.0.0",
9
- "@angular/common": "^21.0.0",
10
- "@angular/compiler": "^21.0.0",
11
- "@angular/core": "^21.0.0",
12
- "@angular/forms": "^21.0.0",
13
- "@angular/platform-browser": "^21.0.0",
14
- "@angular/platform-browser-dynamic": "^21.0.0",
15
- "@angular/router": "^21.0.0",
8
+ "@angular/animations": "^22.0.0",
9
+ "@angular/common": "^22.0.0",
10
+ "@angular/compiler": "^22.0.0",
11
+ "@angular/core": "^22.0.0",
12
+ "@angular/forms": "^22.0.0",
13
+ "@angular/platform-browser": "^22.0.0",
14
+ "@angular/platform-browser-dynamic": "^22.0.0",
15
+ "@angular/router": "^22.0.0",
16
16
  "xt-components": "^1.0.0",
17
17
  "rxjs": "^7.8.2",
18
- "primeng": "^21.0.0",
19
- "primeicons": "^7.0.0",
18
+ "@openng/optimus-ui": "^2.0.2",
19
+ "primeicons": "7.0.0",
20
20
  "prosemirror-model": "^1.25.11",
21
21
  "prosemirror-transform": "^1.12.0",
22
22
  "prosemirror-state": "^1.4.4",
@@ -1,88 +1,88 @@
1
- import * as i0 from '@angular/core';
2
- import { AfterViewInit, ElementRef, PipeTransform } from '@angular/core';
3
- import { XtSimpleComponent, XtContext, XtResolverService } from 'xt-components';
4
- import { FormGroup } from '@angular/forms';
5
- import { Transaction } from 'prosemirror-state';
6
- import { EditorView } from 'prosemirror-view';
7
- import { Schema, NodeType, MarkType } from 'prosemirror-model';
8
- import { MenuElement } from 'prosemirror-menu';
9
- import { DomSanitizer } from '@angular/platform-browser';
10
-
11
- declare class EditorComponent extends XtSimpleComponent<any> implements AfterViewInit {
12
- context: i0.InputSignal<XtContext<any>>;
13
- protected resolver: XtResolverService;
14
- protected editor: i0.Signal<ElementRef<HTMLDivElement> | undefined>;
15
- protected sampleJson: {
1
+ import * as i0 from "@angular/core";
2
+ import { AfterViewInit, ElementRef, PipeTransform } from "@angular/core";
3
+ import { XtContext, XtResolverService, XtSimpleComponent } from "xt-components";
4
+ import { FormGroup } from "@angular/forms";
5
+ import { Transaction } from "prosemirror-state";
6
+ import { EditorView } from "prosemirror-view";
7
+ import { MarkType, NodeType, Schema } from "prosemirror-model";
8
+ import { MenuElement } from "prosemirror-menu";
9
+ import { DomSanitizer } from "@angular/platform-browser";
10
+ export declare class EditorComponent extends XtSimpleComponent<any> implements AfterViewInit {
11
+ context: import("@angular/core").InputSignal<XtContext<any>>;
12
+ protected resolver: XtResolverService;
13
+ protected editor: import("@angular/core").Signal<ElementRef<HTMLDivElement> | undefined>;
14
+ protected sampleJson: {
15
+ type: string;
16
+ content: ({
17
+ type: string;
18
+ attrs: {
19
+ level: number;
20
+ };
21
+ content: {
16
22
  type: string;
17
- content: ({
18
- type: string;
19
- attrs: {
20
- level: number;
21
- };
22
- content: {
23
- type: string;
24
- text: string;
25
- }[];
26
- } | {
27
- type: string;
28
- content: {
29
- type: string;
30
- text: string;
31
- }[];
32
- attrs?: undefined;
33
- })[];
34
- };
35
- protected emptyJson: {
23
+ text: string;
24
+ }[];
25
+ } | {
26
+ type: string;
27
+ content: {
36
28
  type: string;
37
- content: {
38
- type: string;
39
- }[];
40
- };
41
- /** mySchema: Schema = new Schema({
29
+ text: string;
30
+ }[];
31
+ attrs?: undefined;
32
+ })[];
33
+ };
34
+ protected emptyJson: {
35
+ type: string;
36
+ content: {
37
+ type: string;
38
+ }[];
39
+ };
40
+ /** mySchema: Schema = new Schema({
42
41
  nodes: addListNodes(schema.spec.nodes, "paragraph block*", "block"),
43
42
  marks: schema.spec.marks
44
43
  });*/
45
- mySchema: Schema<"bullet_list" | "ordered_list" | "blockquote" | "hard_break" | "list_item" | "paragraph" | "code_block" | "heading" | "horizontal_rule" | "text" | "image" | "doc", "strong" | "em" | "code" | "link">;
46
- protected view: EditorView | null;
47
- /**
48
- * Enable dialog box for image or link editing
49
- * @protected
50
- */
51
- protected displayAttrDialog: i0.WritableSignal<boolean>;
52
- protected editAttrForm: FormGroup<{}>;
53
- protected editAttrNodeType: NodeType | MarkType;
54
- protected editAttrValueType: string;
55
- constructor();
56
- ngAfterViewInit(): void;
57
- protected imageMenu(imageNodeType: NodeType, that: EditorComponent): MenuElement;
58
- protected updateAttrsFromForm(): void;
59
- protected linkMenu(linkMarkType: MarkType, that: EditorComponent): MenuElement;
60
- protected handleTransactions(tr: Transaction): void;
61
- private toProseMirrorDoc;
62
- protected textJson(text: string): {
44
+ mySchema: Schema<"bullet_list" | "ordered_list" | "blockquote" | "hard_break" | "list_item" | "paragraph" | "code_block" | "heading" | "horizontal_rule" | "text" | "image" | "doc", "strong" | "em" | "code" | "link">;
45
+ protected view: EditorView | null;
46
+ /**
47
+ * Enable dialog box for image or link editing
48
+ * @protected
49
+ */
50
+ protected displayAttrDialog: import("@angular/core").WritableSignal<boolean>;
51
+ protected editAttrForm: FormGroup<{}>;
52
+ protected editAttrNodeType: NodeType | MarkType;
53
+ protected editAttrValueType: string;
54
+ constructor();
55
+ ngAfterViewInit(): void;
56
+ protected imageMenu(imageNodeType: NodeType, that: EditorComponent): MenuElement;
57
+ protected updateAttrsFromForm(): void;
58
+ protected linkMenu(linkMarkType: MarkType, that: EditorComponent): MenuElement;
59
+ protected handleTransactions(tr: Transaction): void;
60
+ private toProseMirrorDoc;
61
+ protected textJson(text: string): {
62
+ type: string;
63
+ content: {
64
+ type: string;
65
+ content: {
63
66
  type: string;
64
- content: {
65
- type: string;
66
- content: {
67
- type: string;
68
- text: string;
69
- }[];
70
- }[];
67
+ text: string;
68
+ }[];
69
+ }[];
70
+ };
71
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditorComponent, never>;
72
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditorComponent, "xt-editor-editor", never, {
73
+ "context": {
74
+ "alias": "context";
75
+ "required": true;
76
+ "isSignal": true;
71
77
  };
72
- static ɵfac: i0.ɵɵFactoryDeclaration<EditorComponent, never>;
73
- static ɵcmp: i0.ɵɵComponentDeclaration<EditorComponent, "xt-editor-editor", never, { "context": { "alias": "context"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
74
- }
75
-
76
- declare function registerEditorPlugin(resolverService: XtResolverService): string;
77
- declare function registerPlugin(resolverService: XtResolverService): string;
78
-
79
- declare class MarkdownPipe implements PipeTransform {
80
- protected sanitizer: DomSanitizer;
81
- constructor(sanitizer: DomSanitizer);
82
- transform(value: unknown, ...args: unknown[]): unknown;
83
- static ɵfac: i0.ɵɵFactoryDeclaration<MarkdownPipe, never>;
84
- static ɵpipe: i0.ɵɵPipeDeclaration<MarkdownPipe, "markdown", true>;
78
+ }, {}, never, never, true, never>;
85
79
  }
86
-
87
- export { EditorComponent, MarkdownPipe, registerEditorPlugin, registerPlugin };
88
- //# sourceMappingURL=xt-plugin-editor.d.ts.map
80
+ export declare function registerEditorPlugin(resolverService: XtResolverService): string;
81
+ export declare function registerPlugin(resolverService: XtResolverService): string;
82
+ export declare class MarkdownPipe implements PipeTransform {
83
+ protected sanitizer: DomSanitizer;
84
+ constructor(sanitizer: DomSanitizer);
85
+ transform(value: unknown, ...args: unknown[]): unknown;
86
+ static ɵfac: i0.ɵɵFactoryDeclaration<MarkdownPipe, never>;
87
+ static ɵpipe: i0.ɵɵPipeDeclaration<MarkdownPipe, "markdown", true>;
88
+ }
@@ -1 +0,0 @@
1
- {"version":3,"file":"xt-plugin-editor.d.ts","sources":["../../../projects/editor/src/lib/editor/editor.component.ts","../../../projects/editor/src/lib/register.ts","../../../projects/editor/src/lib/markdown/markdown-pipe.ts"],"mappings":";;;;;;;;;;AA0BA,cAYa,eAAgB,SAAQ,iBAAiB,iBAAiB,aAAa;AACzE,aAAOA,EAAA,CAAA,WAAA,CAAA,SAAA;wBAEE,iBAAA;sBAEFA,EAAA,CAAA,MAAA,CAAA,UAAA,CAAA,cAAA;AAEhB;;;;;;;;;;;;;;;;;;;AAAuP;AACvP;;;;;AAA6E;AAE7E;;;AAGK;AAEL,cAAQ,MAAA;AAER,oBAAgB,UAAU;AAE1B;;;AAGG;iCACwBA,EAAA,CAAA,cAAA;4BACL,SAAA;AACtB,gCAA2B,QAAQ,GAAC,QAAQ;AAC5C;;;uCAqDkC,QAAQ,QAAQ,eAAe,GAAE,WAAW;AAqB9E;qCAYgC,QAAQ,QAAQ,eAAe,GAAE,WAAW;AAqB5E,qCAAiC,WAAW;AAe5C;AAWA;;;;;;;;;;yCA/JW,eAAe;2CAAf,eAAe;AAmK3B;;ACtMD,iBAAgB,oBAAoB,kBAAkB,iBAAiB;AA2BvE,iBAAgB,cAAc,kBAAkB,iBAAiB;;AC1BjE,cAGa,YAAa,YAAW,aAAa;yBACf,YAAY;AAAvB,2BAAW,YAAY;;yCADlC,YAAY;uCAAZ,YAAY;AAaxB;;","names":["_angular_core"]}