lakelib 0.3.2 → 0.3.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/README.md +28 -22
- package/dist/lake.min.css +1 -1
- package/dist/lake.min.js +22 -22
- package/dist/lake.min.js.map +1 -1
- package/lib/lake.css +4 -1
- package/lib/lake.d.ts +2148 -0
- package/lib/lake.js +1211 -605
- package/lib/lake.js.map +1 -1
- package/package.json +30 -33
- package/lib/config/element-rules.d.ts +0 -1
- package/lib/config/menu-items.d.ts +0 -9
- package/lib/config/tag-names.d.ts +0 -6
- package/lib/config/toolbar-items.d.ts +0 -2
- package/lib/css/index.d.ts +0 -17
- package/lib/editor.d.ts +0 -93
- package/lib/elements/bookmark.d.ts +0 -2
- package/lib/elements/box.d.ts +0 -2
- package/lib/i18n/en-US/index.d.ts +0 -169
- package/lib/i18n/index.d.ts +0 -2
- package/lib/i18n/ja/index.d.ts +0 -169
- package/lib/i18n/ko/index.d.ts +0 -169
- package/lib/i18n/types.d.ts +0 -1233
- package/lib/i18n/zh-CN/index.d.ts +0 -169
- package/lib/icons/index.d.ts +0 -1
- package/lib/index.d.ts +0 -35
- package/lib/managers/box-manager.d.ts +0 -6
- package/lib/managers/command.d.ts +0 -23
- package/lib/managers/history.d.ts +0 -32
- package/lib/managers/keystroke.d.ts +0 -11
- package/lib/managers/plugin.d.ts +0 -7
- package/lib/managers/selection.d.ts +0 -40
- package/lib/models/box.d.ts +0 -25
- package/lib/models/fragment.d.ts +0 -8
- package/lib/models/nodes.d.ts +0 -98
- package/lib/models/range.d.ts +0 -56
- package/lib/operations/add-mark.d.ts +0 -3
- package/lib/operations/delete-contents.d.ts +0 -2
- package/lib/operations/insert-block.d.ts +0 -3
- package/lib/operations/insert-bookmark.d.ts +0 -6
- package/lib/operations/insert-box.d.ts +0 -4
- package/lib/operations/insert-contents.d.ts +0 -4
- package/lib/operations/remove-box.d.ts +0 -3
- package/lib/operations/remove-mark.d.ts +0 -2
- package/lib/operations/set-blocks.d.ts +0 -3
- package/lib/operations/split-block.d.ts +0 -3
- package/lib/operations/split-marks.d.ts +0 -3
- package/lib/operations/to-bookmark.d.ts +0 -6
- package/lib/parsers/html-parser.d.ts +0 -13
- package/lib/parsers/text-parser.d.ts +0 -6
- package/lib/plugins/align.d.ts +0 -3
- package/lib/plugins/arrow-keys.d.ts +0 -3
- package/lib/plugins/backspace-key.d.ts +0 -3
- package/lib/plugins/block-quote.d.ts +0 -3
- package/lib/plugins/bold.d.ts +0 -3
- package/lib/plugins/code-block/code-block-box.d.ts +0 -4
- package/lib/plugins/code-block/index.d.ts +0 -5
- package/lib/plugins/code.d.ts +0 -3
- package/lib/plugins/copy.d.ts +0 -3
- package/lib/plugins/cut.d.ts +0 -3
- package/lib/plugins/delete-key.d.ts +0 -3
- package/lib/plugins/drop.d.ts +0 -3
- package/lib/plugins/emoji/emoji-box.d.ts +0 -4
- package/lib/plugins/emoji/index.d.ts +0 -5
- package/lib/plugins/enter-key.d.ts +0 -3
- package/lib/plugins/equation/equation-box.d.ts +0 -4
- package/lib/plugins/equation/index.d.ts +0 -5
- package/lib/plugins/escape-key.d.ts +0 -3
- package/lib/plugins/file/file-box.d.ts +0 -4
- package/lib/plugins/file/index.d.ts +0 -5
- package/lib/plugins/font-color.d.ts +0 -3
- package/lib/plugins/font-family.d.ts +0 -3
- package/lib/plugins/font-size.d.ts +0 -3
- package/lib/plugins/format-painter.d.ts +0 -3
- package/lib/plugins/heading.d.ts +0 -3
- package/lib/plugins/highlight.d.ts +0 -3
- package/lib/plugins/hr/hr-box.d.ts +0 -4
- package/lib/plugins/hr/index.d.ts +0 -5
- package/lib/plugins/image/image-box.d.ts +0 -5
- package/lib/plugins/image/index.d.ts +0 -5
- package/lib/plugins/indent.d.ts +0 -3
- package/lib/plugins/italic.d.ts +0 -3
- package/lib/plugins/link/index.d.ts +0 -3
- package/lib/plugins/link/insert-link.d.ts +0 -3
- package/lib/plugins/link/link-popup.d.ts +0 -32
- package/lib/plugins/list.d.ts +0 -3
- package/lib/plugins/markdown.d.ts +0 -3
- package/lib/plugins/mention/index.d.ts +0 -5
- package/lib/plugins/mention/mention-box.d.ts +0 -4
- package/lib/plugins/mention/mention-menu.d.ts +0 -15
- package/lib/plugins/mention/types.d.ts +0 -6
- package/lib/plugins/paste.d.ts +0 -3
- package/lib/plugins/redo.d.ts +0 -3
- package/lib/plugins/remove-format.d.ts +0 -3
- package/lib/plugins/select-all.d.ts +0 -3
- package/lib/plugins/shift-enter-key.d.ts +0 -3
- package/lib/plugins/slash/index.d.ts +0 -3
- package/lib/plugins/slash/slash-items.d.ts +0 -2
- package/lib/plugins/slash/slash-menu.d.ts +0 -19
- package/lib/plugins/slash/types.d.ts +0 -20
- package/lib/plugins/special-character.d.ts +0 -3
- package/lib/plugins/strikethrough.d.ts +0 -3
- package/lib/plugins/subscript.d.ts +0 -3
- package/lib/plugins/superscript.d.ts +0 -3
- package/lib/plugins/tab-key.d.ts +0 -3
- package/lib/plugins/table/delete-column.d.ts +0 -2
- package/lib/plugins/table/delete-row.d.ts +0 -2
- package/lib/plugins/table/delete-table.d.ts +0 -2
- package/lib/plugins/table/index.d.ts +0 -4
- package/lib/plugins/table/insert-column.d.ts +0 -4
- package/lib/plugins/table/insert-row.d.ts +0 -4
- package/lib/plugins/table/insert-table.d.ts +0 -3
- package/lib/plugins/table/merge-cells.d.ts +0 -3
- package/lib/plugins/table/split-cell.d.ts +0 -3
- package/lib/plugins/table/utils.d.ts +0 -6
- package/lib/plugins/underline.d.ts +0 -3
- package/lib/plugins/undo.d.ts +0 -3
- package/lib/plugins/unlink.d.ts +0 -3
- package/lib/plugins/video/index.d.ts +0 -5
- package/lib/plugins/video/video-box.d.ts +0 -4
- package/lib/storage/box-instances.d.ts +0 -2
- package/lib/storage/boxes.d.ts +0 -2
- package/lib/storage/editors.d.ts +0 -2
- package/lib/types/box.d.ts +0 -15
- package/lib/types/corner-toolbar.d.ts +0 -7
- package/lib/types/dropdown.d.ts +0 -23
- package/lib/types/native.d.ts +0 -2
- package/lib/types/node.d.ts +0 -13
- package/lib/types/object.d.ts +0 -3
- package/lib/types/plugin.d.ts +0 -3
- package/lib/types/request.d.ts +0 -20
- package/lib/types/selection.d.ts +0 -14
- package/lib/types/toolbar.d.ts +0 -29
- package/lib/ui/button.d.ts +0 -19
- package/lib/ui/corner-toolbar.d.ts +0 -18
- package/lib/ui/dropdown.d.ts +0 -36
- package/lib/ui/floating-toolbar.d.ts +0 -16
- package/lib/ui/menu.d.ts +0 -33
- package/lib/ui/resizer.d.ts +0 -17
- package/lib/ui/toolbar.d.ts +0 -29
- package/lib/utils/append-break.d.ts +0 -2
- package/lib/utils/camel-case.d.ts +0 -1
- package/lib/utils/change-tag-name.d.ts +0 -2
- package/lib/utils/debug.d.ts +0 -1
- package/lib/utils/denormalize-value.d.ts +0 -1
- package/lib/utils/encode.d.ts +0 -1
- package/lib/utils/file-size.d.ts +0 -1
- package/lib/utils/fix-numbered-list.d.ts +0 -2
- package/lib/utils/from-base64.d.ts +0 -1
- package/lib/utils/get-box.d.ts +0 -3
- package/lib/utils/get-css.d.ts +0 -1
- package/lib/utils/get-deep-element.d.ts +0 -2
- package/lib/utils/in-string.d.ts +0 -1
- package/lib/utils/indent-block.d.ts +0 -2
- package/lib/utils/merge-nodes.d.ts +0 -5
- package/lib/utils/modifier-text.d.ts +0 -1
- package/lib/utils/morph.d.ts +0 -56
- package/lib/utils/normalize-value.d.ts +0 -1
- package/lib/utils/parse-style.d.ts +0 -2
- package/lib/utils/query.d.ts +0 -2
- package/lib/utils/remove-break.d.ts +0 -2
- package/lib/utils/remove-empty-marks.d.ts +0 -2
- package/lib/utils/remove-zws.d.ts +0 -2
- package/lib/utils/request.d.ts +0 -27
- package/lib/utils/scroll-to-node.d.ts +0 -2
- package/lib/utils/split-nodes.d.ts +0 -5
- package/lib/utils/template.d.ts +0 -1
- package/lib/utils/to-base64.d.ts +0 -1
- package/lib/utils/to-hex.d.ts +0 -1
- package/lib/utils/to-node-list.d.ts +0 -1
- package/lib/utils/unsafe-template.d.ts +0 -1
- package/lib/utils/upload-file.d.ts +0 -11
- package/lib/utils/visible-info.d.ts +0 -10
- package/lib/utils/wrap-node-list.d.ts +0 -2
package/lib/lake.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lake.js","sources":["../src/elements/box.ts","../src/elements/bookmark.ts","../src/icons/index.ts","../src/utils/to-node-list.ts","../src/config/tag-names.ts","../src/utils/in-string.ts","../src/utils/camel-case.ts","../src/utils/to-hex.ts","../src/utils/get-css.ts","../src/utils/debug.ts","../src/models/nodes.ts","../src/utils/query.ts","../src/utils/encode.ts","../src/utils/template.ts","../src/models/fragment.ts","../src/models/range.ts","../src/storage/boxes.ts","../src/storage/editors.ts","../src/utils/to-base64.ts","../src/utils/from-base64.ts","../src/utils/visible-info.ts","../src/config/menu-items.ts","../src/config/toolbar-items.ts","../src/utils/request.ts","../src/utils/upload-file.ts","../src/ui/button.ts","../src/utils/unsafe-template.ts","../src/utils/modifier-text.ts","../src/i18n/en-US/index.ts","../src/i18n/zh-CN/index.ts","../src/i18n/ja/index.ts","../src/i18n/ko/index.ts","../src/i18n/index.ts","../src/ui/dropdown.ts","../src/ui/toolbar.ts","../src/ui/floating-toolbar.ts","../src/models/box.ts","../src/config/element-rules.ts","../src/utils/parse-style.ts","../src/parsers/html-parser.ts","../src/parsers/text-parser.ts","../src/operations/insert-bookmark.ts","../src/storage/box-instances.ts","../src/utils/get-box.ts","../src/operations/to-bookmark.ts","../src/utils/remove-break.ts","../src/utils/append-break.ts","../src/utils/merge-nodes.ts","../src/utils/fix-numbered-list.ts","../src/operations/delete-contents.ts","../src/operations/insert-contents.ts","../src/utils/get-deep-element.ts","../src/utils/wrap-node-list.ts","../src/operations/set-blocks.ts","../src/utils/split-nodes.ts","../src/utils/remove-empty-marks.ts","../src/operations/split-block.ts","../src/operations/insert-block.ts","../src/operations/split-marks.ts","../src/operations/add-mark.ts","../src/utils/remove-zws.ts","../src/operations/remove-mark.ts","../src/operations/insert-box.ts","../src/operations/remove-box.ts","../src/utils/denormalize-value.ts","../src/utils/normalize-value.ts","../src/utils/scroll-to-node.ts","../src/managers/selection.ts","../src/managers/command.ts","../src/utils/morph.ts","../src/managers/history.ts","../src/managers/keystroke.ts","../src/managers/box-manager.ts","../src/managers/plugin.ts","../src/editor.ts","../src/plugins/copy.ts","../src/plugins/cut.ts","../src/utils/change-tag-name.ts","../src/plugins/paste.ts","../src/plugins/drop.ts","../src/plugins/undo.ts","../src/plugins/redo.ts","../src/plugins/select-all.ts","../src/plugins/heading.ts","../src/plugins/block-quote.ts","../src/plugins/list.ts","../src/plugins/table/insert-table.ts","../src/plugins/table/delete-table.ts","../src/plugins/table/utils.ts","../src/plugins/table/insert-column.ts","../src/plugins/table/delete-column.ts","../src/plugins/table/insert-row.ts","../src/plugins/table/delete-row.ts","../src/plugins/table/merge-cells.ts","../src/plugins/table/split-cell.ts","../src/plugins/table/index.ts","../src/plugins/align.ts","../src/utils/indent-block.ts","../src/plugins/indent.ts","../src/plugins/bold.ts","../src/plugins/italic.ts","../src/plugins/underline.ts","../src/plugins/strikethrough.ts","../src/plugins/subscript.ts","../src/plugins/superscript.ts","../src/plugins/code.ts","../src/plugins/font-family.ts","../src/plugins/font-size.ts","../src/plugins/font-color.ts","../src/plugins/highlight.ts","../src/plugins/remove-format.ts","../src/plugins/format-painter.ts","../node_modules/.pnpm/@rollup+plugin-typescript@1_01a78eb9606cd68fd933009cb460bbf5/node_modules/tslib/tslib.es6.js","../src/plugins/link/link-popup.ts","../src/plugins/link/insert-link.ts","../src/plugins/link/index.ts","../src/plugins/hr/hr-box.ts","../src/plugins/hr/index.ts","../src/plugins/code-block/code-block-box.ts","../src/plugins/code-block/index.ts","../src/ui/corner-toolbar.ts","../src/ui/resizer.ts","../src/plugins/image/image-box.ts","../src/plugins/image/index.ts","../src/plugins/video/video-box.ts","../src/plugins/video/index.ts","../src/utils/file-size.ts","../src/plugins/file/file-box.ts","../src/plugins/file/index.ts","../src/plugins/emoji/emoji-box.ts","../src/plugins/emoji/index.ts","../src/plugins/equation/equation-box.ts","../src/plugins/equation/index.ts","../src/plugins/special-character.ts","../src/ui/menu.ts","../src/plugins/mention/mention-menu.ts","../src/plugins/mention/mention-box.ts","../src/plugins/mention/index.ts","../src/plugins/markdown.ts","../src/plugins/enter-key.ts","../src/plugins/shift-enter-key.ts","../src/plugins/backspace-key.ts","../src/plugins/delete-key.ts","../src/plugins/tab-key.ts","../src/plugins/arrow-keys.ts","../src/plugins/escape-key.ts","../src/plugins/slash/slash-items.ts","../src/plugins/slash/slash-menu.ts","../src/plugins/slash/index.ts","../src/index.ts"],"sourcesContent":["class BoxElement extends HTMLElement {\n\n}\n\nif (customElements.get('lake-box') !== undefined) {\n customElements.define('lake-box', BoxElement);\n}\n","class BookmarkElement extends HTMLElement {\n\n}\n\nif (customElements.get('lake-bookmark') !== undefined) {\n customElements.define('lake-bookmark', BookmarkElement);\n}\n","// These icons are sourced from open source projects.\n//\n// Fluent Icons by Microsoft (https://fluenticons.co/).\n// - superscript.svg\n// - subscript.svg\n// - highlight.svg\n// - highlight-accent.svg\n// - background-color.svg\n// - background-color-accent.svg\n// - open.svg\n// - table-merge.svg\n// - table-split.svg\n//\n// Phosphor Icons (https://phosphoricons.com/).\n// - other icons\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\n// common\nimport plus from './plus.svg';\nimport question from './question.svg';\nimport more from './more.svg';\nimport left from './left.svg';\nimport right from './right.svg';\nimport down from './down.svg';\nimport check from './check.svg';\nimport checkCircle from './check-circle.svg';\nimport warningCircle from './warning-circle.svg';\nimport open from './open.svg';\nimport download from './download.svg';\nimport copy from './copy.svg';\nimport remove from './remove.svg';\nimport maximize from './maximize.svg';\nimport close from './close.svg';\nimport resize from './resize.svg';\nimport expand from './expand.svg';\nimport circleNotch from './circle-notch.svg';\n// toolbar\nimport selectAll from './select-all.svg';\nimport undo from './undo.svg';\nimport redo from './redo.svg';\nimport heading from './heading.svg';\nimport heading1 from './heading1.svg';\nimport heading2 from './heading2.svg';\nimport heading3 from './heading3.svg';\nimport heading4 from './heading4.svg';\nimport heading5 from './heading5.svg';\nimport heading6 from './heading6.svg';\nimport paragraph from './paragraph.svg';\nimport blockQuote from './block-quote.svg';\nimport list from './list.svg';\nimport numberedList from './numbered-list.svg';\nimport bulletedList from './bulleted-list.svg';\nimport checklist from './checklist.svg';\nimport alignLeft from './align-left.svg';\nimport alignCenter from './align-center.svg';\nimport alignRight from './align-right.svg';\nimport alignJustify from './align-justify.svg';\nimport increaseIndent from './increase-indent.svg';\nimport decreaseIndent from './decrease-indent.svg';\nimport formatPainter from './format-painter.svg';\nimport bold from './bold.svg';\nimport italic from './italic.svg';\nimport underline from './underline.svg';\nimport strikethrough from './strikethrough.svg';\nimport superscript from './superscript.svg';\nimport subscript from './subscript.svg';\nimport code from './code.svg';\nimport removeFormat from './remove-format.svg';\nimport moreStyle from './more-style.svg';\nimport fontColor from './font-color.svg';\nimport fontColorAccent from './font-color-accent.svg';\nimport highlight from './highlight.svg';\nimport highlightAccent from './highlight-accent.svg';\nimport backgroundColor from './background-color.svg';\nimport backgroundColorAccent from './background-color-accent.svg';\nimport link from './link.svg';\nimport hr from './hr.svg';\nimport codeBlock from './code-block.svg';\nimport image from './image.svg';\nimport video from './video.svg';\nimport attachment from './attachment.svg';\nimport emoji from './emoji.svg';\nimport specialCharacter from './special-character.svg';\nimport equation from './equation.svg';\nimport table from './table.svg';\n// link\nimport unlink from './unlink.svg';\n// image\nimport imageBroken from './image-broken.svg';\nimport zoomIn from './zoom-in.svg';\nimport zoomOut from './zoom-out.svg';\nimport caption from './caption.svg';\n// file\nimport file from './file.svg';\n// table\nimport tableColumn from './table-column.svg';\nimport tableRow from './table-row.svg';\nimport tableMerge from './table-merge.svg';\nimport tableSplit from './table-split.svg';\n// alerts\nimport info from './info.svg';\nimport tip from './tip.svg';\nimport warning from './warning.svg';\nimport danger from './danger.svg';\n\nexport const icons: Map<string, string> = new Map([\n // common\n ['plus', plus],\n ['question', question],\n ['more', more],\n ['left', left],\n ['right', right],\n ['down', down],\n ['check', check],\n ['checkCircle', checkCircle],\n ['warningCircle', warningCircle],\n ['open', open],\n ['download', download],\n ['copy', copy],\n ['remove', remove],\n ['maximize', maximize],\n ['close', close],\n ['resize', resize],\n ['expand', expand],\n ['circleNotch', circleNotch],\n // toolbar\n ['selectAll', selectAll],\n ['undo', undo],\n ['redo', redo],\n ['heading', heading],\n ['heading1', heading1],\n ['heading2', heading2],\n ['heading3', heading3],\n ['heading4', heading4],\n ['heading5', heading5],\n ['heading6', heading6],\n ['paragraph', paragraph],\n ['blockQuote', blockQuote],\n ['list', list],\n ['numberedList', numberedList],\n ['bulletedList', bulletedList],\n ['checklist', checklist],\n ['alignLeft', alignLeft],\n ['alignCenter', alignCenter],\n ['alignRight', alignRight],\n ['alignJustify', alignJustify],\n ['increaseIndent', increaseIndent],\n ['decreaseIndent', decreaseIndent],\n ['formatPainter', formatPainter],\n ['bold', bold],\n ['italic', italic],\n ['underline', underline],\n ['strikethrough', strikethrough],\n ['superscript', superscript],\n ['subscript', subscript],\n ['code', code],\n ['removeFormat', removeFormat],\n ['moreStyle', moreStyle],\n ['fontColor', fontColor],\n ['fontColorAccent', fontColorAccent],\n ['highlight', highlight],\n ['highlightAccent', highlightAccent],\n ['backgroundColor', backgroundColor],\n ['backgroundColorAccent', backgroundColorAccent],\n ['link', link],\n ['hr', hr],\n ['codeBlock', codeBlock],\n ['image', image],\n ['video', video],\n ['attachment', attachment],\n ['emoji', emoji],\n ['specialCharacter', specialCharacter],\n ['equation', equation],\n ['table', table],\n // link\n ['unlink', unlink],\n // image\n ['imageBroken', imageBroken],\n ['zoomIn', zoomIn],\n ['zoomOut', zoomOut],\n ['caption', caption],\n // file\n ['file', file],\n // table\n ['tableColumn', tableColumn],\n ['tableRow', tableRow],\n ['tableMerge', tableMerge],\n ['tableSplit', tableSplit],\n // alerts\n ['info', info],\n ['tip', tip],\n ['warning', warning],\n ['danger', danger],\n]);\n","// Returns an array representing a list of the document's elements.\nexport function toNodeList(content: string | Node, valueType?: 'text' | 'html'): Node[] {\n const nodeList: Node[] = [];\n // a node\n if (typeof content !== 'string') {\n nodeList.push(content);\n return nodeList;\n }\n // empty string\n if (content === '') {\n return nodeList;\n }\n // text string\n if (valueType === 'text') {\n const textNode = document.createTextNode(content);\n nodeList.push(textNode);\n return nodeList;\n }\n // HTML string\n if (valueType === 'html' || /<.+>/.test(content)) {\n const container = document.createElement('div');\n container.innerHTML = content;\n for (const child of container.childNodes) {\n nodeList.push(child);\n }\n return nodeList;\n }\n // selector string\n const elements = document.querySelectorAll(content);\n for (const child of elements) {\n nodeList.push(child);\n }\n return nodeList;\n}\n","export const blockTagNames: Set<string> = new Set([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'div',\n 'p',\n 'blockquote',\n 'ul',\n 'ol',\n 'li',\n 'table',\n 'tr',\n 'th',\n 'td',\n]);\n\nexport const markTagNames: Set<string> = new Set([\n 'span',\n 'strong',\n 'em',\n 'i',\n 'u',\n 's',\n 'sup',\n 'sub',\n 'code',\n]);\n\n// https://developer.mozilla.org/en-US/docs/Glossary/Void_element\nexport const voidTagNames: Set<string> = new Set([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport const headingTagNames: Set<string> = new Set([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n]);\n\n\nexport const listTagNames: Set<string> = new Set([\n 'ol',\n 'ul',\n 'li',\n]);\n\nexport const tableTagNames: Set<string> = new Set([\n 'table',\n 'tr',\n 'td',\n]);\n","// Returns a boolean value indicating whether a certain value is part of a string, separated by a delimiter.\nexport function inString(string: string, value: string, delimiter?: string): boolean {\n if (delimiter === undefined) {\n delimiter = ',';\n }\n return (delimiter + string + delimiter).indexOf(delimiter + value + delimiter) >= 0;\n}\n","// Converts the specified string to camel case.\nexport function camelCase(value: string): string {\n const valueList = value.split('-');\n let camelString = '';\n for (let i = 0; i < valueList.length; i++) {\n const val = valueList[i];\n camelString += (i > 0) ? val.charAt(0).toUpperCase() + val.substring(1) : val;\n }\n return camelString;\n}\n","// Converts an alpha value to a hex value.\nfunction alphaToHex(value: string): string {\n const hexString = Math.round(Number.parseFloat(value) * 255).toString(16);\n return hexString.length > 1 ? hexString : `0${hexString}`;\n}\n\n// Converts a decimal to a hex value.\nfunction hex(value: string): string {\n const hexString = Number.parseInt(value, 10).toString(16).toLowerCase();\n return hexString.length > 1 ? hexString : `0${hexString}`;\n}\n\n// Converts a color in RGB or RGBA format to hex format.\nexport function toHex(value: string): string {\n return value.replace(\n /rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+)\\s*)?\\)/ig,\n (match, p1, p2, p3, p4) => {\n if (p4 === undefined) {\n return `#${hex(p1)}${hex(p2)}${hex(p3)}`;\n }\n return `#${hex(p1)}${hex(p2)}${hex(p3)}${alphaToHex(p4)}`;\n },\n );\n}\n","import { camelCase } from './camel-case';\nimport { toHex } from './to-hex';\n\n// Returns a property value of all CSS properties of an element.\nexport function getCSS(element: Element, propertyName: string): string {\n const camelPropertyName = camelCase(propertyName);\n const computedStyle = window.getComputedStyle(element, null);\n const propertyValue = element.style[camelPropertyName] || computedStyle.getPropertyValue(propertyName) || '';\n return toHex(propertyValue);\n}\n","/* eslint no-console: \"off\" */\n\n// Outputs a message to the console.\nexport function debug(...data: any[]): void {\n if (window.LAKE_DEBUG) {\n console.log.apply(console.log, data);\n }\n}\n","import { KeyValue } from '../types/object';\nimport { NodePath } from '../types/node';\nimport {\n blockTagNames, markTagNames, voidTagNames,\n headingTagNames, listTagNames, tableTagNames,\n} from '../config/tag-names';\nimport { inString } from '../utils/in-string';\nimport { camelCase } from '../utils/camel-case';\nimport { getCSS } from '../utils/get-css';\nimport { toHex } from '../utils/to-hex';\nimport { toNodeList } from '../utils/to-node-list';\nimport { debug } from '../utils/debug';\n\ntype EventItem = {\n type: string;\n listener: EventListener;\n};\n\n// A key-value object for storing all events.\n// value is an array which include types and listeners.\nconst eventData: { [key: number]: EventItem[] } = {};\n\nlet lastNodeId = 0;\n\n// The Nodes interface represents a collection of the document's nodes.\nexport class Nodes {\n // A list of native nodes.\n private readonly nodeList: Node[];\n\n // The number of nodes in the nodeList.\n public readonly length: number;\n\n constructor(node?: Node | Node[] | null) {\n node = node ?? [];\n this.nodeList = Array.isArray(node) ? node : [node];\n for (let i = 0; i < this.nodeList.length; i++) {\n // lakeId is an expando for preserving node ID.\n // https://developer.mozilla.org/en-US/docs/Glossary/Expando\n if (!this.nodeList[i].lakeId) {\n this.nodeList[i].lakeId = ++lastNodeId;\n }\n }\n this.length = this.nodeList.length;\n }\n\n // The unique ID of the first node.\n public get id(): number {\n const node = this.get(0);\n return node.lakeId;\n }\n\n // The name of the first node.\n public get name(): string {\n if (this.length === 0) {\n return '';\n }\n const node = this.get(0);\n return node.nodeName.toLowerCase();\n }\n\n // A boolean value indicating whether the first node is an element.\n public get isElement(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0);\n return node.nodeType === Node.ELEMENT_NODE;\n }\n\n // A boolean value indicating whether the first node is a text.\n public get isText(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0);\n return node.nodeType === Node.TEXT_NODE;\n }\n\n // A boolean value indicating whether the first node is a block.\n public get isBlock(): boolean {\n if (this.length === 0) {\n return false;\n }\n return blockTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a mark.\n public get isMark(): boolean {\n if (this.length === 0) {\n return false;\n }\n return markTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a void element that cannot have any child nodes.\n public get isVoid(): boolean {\n if (this.length === 0) {\n return false;\n }\n return voidTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a heading.\n public get isHeading(): boolean {\n if (this.length === 0) {\n return false;\n }\n return headingTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a list.\n public get isList(): boolean {\n if (this.length === 0) {\n return false;\n }\n return listTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a table.\n public get isTable(): boolean {\n if (this.length === 0) {\n return false;\n }\n return tableTagNames.has(this.name);\n }\n\n // A boolean value indicating whether the first node is a bookmark element.\n public get isBookmark(): boolean {\n return this.name === 'lake-bookmark';\n }\n\n // A boolean value indicating whether the first node is a box element.\n public get isBox(): boolean {\n return this.name === 'lake-box';\n }\n\n // A boolean value indicating whether the first node is an inline box element.\n public get isInlineBox(): boolean {\n return this.isBox && this.attr('type') === 'inline';\n }\n\n // A boolean value indicating whether the first node is a block box element.\n public get isBlockBox(): boolean {\n return this.isBox && this.attr('type') === 'block';\n }\n\n // A boolean value indicating whether the first node is a contenteditable element where users can edit the content.\n public get isContainer(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0) as HTMLElement;\n return this.isElement && node.getAttribute('contenteditable') === 'true';\n }\n\n // A boolean value indicating whether the first node does not have an ancestor element which contenteditable attribute is true.\n public get isOutside(): boolean {\n return this.closest('[contenteditable=\"true\"]').length === 0;\n }\n\n // A boolean value indicating whether the first node has an ancestor element which contenteditable attribute is true.\n public get isInside(): boolean {\n return !this.isOutside && !this.isContainer;\n }\n\n // A boolean value indicating whether the first node's parent element is an element which contenteditable attribute is true.\n public get isTopInside(): boolean {\n if (this.length === 0) {\n return false;\n }\n const parentNode = this.parent();\n if (parentNode.length === 0) {\n return false;\n }\n return this.isInside && parentNode.isContainer;\n }\n\n // A boolean value indicating whether the first node is editable.\n public get isContentEditable(): boolean {\n if (this.length === 0) {\n return false;\n }\n if (this.isText) {\n const element = this.get(0).parentNode as HTMLElement;\n if (!element) {\n return false;\n }\n return element.isContentEditable;\n }\n if (!this.isElement) {\n return false;\n }\n const element = this.get(0) as HTMLElement;\n return element.isContentEditable;\n }\n\n // A boolean value indicating whether the first node is indivisible.\n public get isIndivisible(): boolean {\n return this.isContainer || this.isTable;\n }\n\n // A boolean value indicating whether the first node is empty.\n public get isEmpty(): boolean {\n if (this.isBox) {\n return false;\n }\n const nodeText = this.text();\n const isEmptyText = nodeText === '' || /^[\\r\\n\\u200B\\u2060]+$/.test(nodeText);\n if (!isEmptyText) {\n return false;\n }\n if (this.isElement) {\n if (this.find('lake-box').length > 0) {\n return false;\n }\n if (this.find('br').length > 1) {\n return false;\n }\n }\n return true;\n }\n\n // Returns a native node at the specified index.\n public get(index: number): Node {\n return this.nodeList[index];\n }\n\n // Returns all native nodes.\n public getAll(): Node[] {\n return this.nodeList;\n }\n\n // Returns a new Nodes object that includes only the node at the specified index.\n public eq(index: number): Nodes {\n const node = this.get(index);\n return new Nodes(node);\n }\n\n // Executes a provided function once for each node.\n public each(callback: (node: Node, index: number) => boolean | void): this {\n const nodes = this.getAll();\n for (let i = 0; i < nodes.length; i++) {\n if (callback(nodes[i], i) === false) {\n return this;\n }\n }\n return this;\n }\n\n // Executes a provided function once for each element.\n public eachElement(callback: (element: Element, index: number) => boolean | void): this {\n const nodes = this.getAll();\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeType === Node.ELEMENT_NODE) {\n if (callback(nodes[i] as Element, i) === false) {\n return this;\n }\n }\n }\n return this;\n }\n\n // Returns a new Nodes object with the nodes in reversed order.\n public reverse(): Nodes {\n const nodes = this.getAll().reverse();\n return new Nodes(nodes);\n }\n\n // Tests whether the first node would be selected by the specified CSS selector.\n public matches(selector: string): boolean {\n if (!this.isElement) {\n return false;\n }\n const element = this.get(0) as Element;\n return element.matches(selector);\n }\n\n // Returns a boolean value indicating whether the first node is a descendant of a given node,\n // that is the first node itself, one of its direct children (childNodes), one of the children's direct children, and so on.\n public contains(otherNode: Nodes): boolean {\n const element = this.get(0) as Element;\n return element.contains(otherNode.get(0));\n }\n\n // Returns a boolean value indicating whether the first node and a given node are siblings.\n public isSibling(otherNode: Nodes): boolean {\n if (this.length === 0) {\n return false;\n }\n const parent = this.get(0).parentNode as HTMLElement;\n return parent && parent === otherNode.parent().get(0);\n }\n\n // Returns the descendants of the first node that match the specified CSS selector or node path.\n public find(selector: string | NodePath): Nodes {\n if (typeof selector === 'string') {\n const element = this.get(0) as Element;\n const nodeList = element.querySelectorAll(selector);\n return new Nodes(Array.from(nodeList));\n }\n let node = this.eq(0);\n for (const index of selector) {\n node = node.children()[index];\n if (!node) {\n return new Nodes();\n }\n }\n return node;\n }\n\n // Traverses the first node and its parents (heading toward the document root) until it finds an element that matches the specified CSS selector.\n public closest(selector: string): Nodes {\n if (this.isText) {\n const element = this.get(0).parentNode;\n if (!element) {\n return new Nodes();\n }\n return new Nodes((element as Element).closest(selector));\n }\n if (!this.isElement) {\n return new Nodes();\n }\n const element = this.get(0) as Element;\n return new Nodes(element.closest(selector));\n }\n\n // Traverses the first node and its parents until it finds a block element.\n public closestBlock(): Nodes {\n let node = this.eq(0);\n while (node.length > 0) {\n if (node.isTopInside || node.isBlock) {\n break;\n }\n node = node.parent();\n }\n if (!node.isBlock) {\n return new Nodes();\n }\n return node;\n }\n\n // Traverses the first node and its parents until it finds an operable block.\n public closestOperableBlock(): Nodes {\n const boxNode = this.closest('lake-box');\n const block = boxNode.length > 0 ? boxNode.closestBlock() : this.closestBlock();\n if (block.length === 0) {\n return block;\n }\n if (block.isTable) {\n return new Nodes();\n }\n const parentBlock = block.parent();\n if (block.name === 'li' && parentBlock.isList) {\n return parentBlock;\n }\n return block;\n }\n\n // Traverses the first node and its parents until it finds a div element which contenteditable attribute is true.\n public closestContainer(): Nodes {\n return this.closest('div[contenteditable=\"true\"]');\n }\n\n // Traverses the first node and its parents until it finds an element which can scroll.\n public closestScroller(): Nodes {\n let parent = this.eq(0);\n while(parent.length > 0) {\n if (parent.isElement && ['scroll', 'auto'].indexOf(parent.computedCSS('overflow-y')) >= 0) {\n return parent;\n }\n parent = parent.parent();\n }\n return new Nodes();\n }\n\n // Returns the parent of the first node.\n public parent(): Nodes {\n const node = this.get(0);\n return new Nodes(node.parentNode);\n }\n\n // Returns the immediately preceding sibling of the first node.\n public prev(): Nodes {\n const node = this.get(0);\n return new Nodes(node.previousSibling);\n }\n\n // Returns the immediately following sibling of the first node.\n public next(): Nodes {\n const node = this.get(0);\n return new Nodes(node.nextSibling);\n }\n\n // Returns the first child of the first node.\n public first(): Nodes {\n const element = this.get(0);\n return new Nodes(element.firstChild);\n }\n\n // Returns the last child of the first node.\n public last(): Nodes {\n const element = this.get(0);\n return new Nodes(element.lastChild);\n }\n\n // Returns a number indicating the position of the first node relative to its sibling nodes.\n public index(): number {\n let i = -1;\n let sibling: Node | null = this.get(0);\n while (sibling) {\n i++;\n sibling = sibling.previousSibling;\n }\n return i;\n }\n\n // Returns the path of the first node.\n public path(): NodePath {\n const path: NodePath = [];\n let node = this.eq(0);\n if (node.isContainer) {\n return path;\n }\n while (node.length > 0) {\n const parent = node.parent();\n if (parent.length === 0) {\n break;\n }\n path.push(node.index());\n if (parent.isContainer) {\n break;\n }\n node = parent;\n }\n return path.reverse();\n }\n\n // Returns a list which contains all of the child nodes of the first node.\n public children(): Nodes[] {\n const childList: Nodes[] = [];\n let child = this.first();\n while (child.length > 0) {\n childList.push(child);\n child = child.next();\n }\n return childList;\n }\n\n // Returns a generator that iterates over the descendants of the first node.\n public * getWalker(): Generator<Nodes> {\n function * iterate(node: Nodes): Generator<Nodes> {\n if (node.isBox) {\n return;\n }\n let child = node.first();\n while (child.length > 0) {\n const nextNode = child.next();\n yield child;\n yield * iterate(child);\n child = nextNode;\n }\n }\n for (const node of iterate(this.eq(0))) {\n yield node;\n }\n }\n\n // Sets up an event listener for each element.\n public on(type: string, listener: EventListener): this {\n return this.eachElement(element => {\n element.addEventListener(type, listener, false);\n const elementId = element.lakeId;\n if (!eventData[elementId]) {\n eventData[elementId] = [];\n }\n eventData[elementId].push({\n type,\n listener,\n });\n });\n }\n\n // Removes event listeners previously registered with on() method.\n public off(type?: string, listener?: EventListener): this {\n return this.eachElement(element => {\n const elementId = element.lakeId;\n const eventItems = eventData[elementId] ?? [];\n for (let i = 0; i < eventItems.length; i++) {\n const item = eventItems[i];\n if (!type || type === item.type && (!listener || listener === item.listener)) {\n element.removeEventListener(item.type, item.listener, false);\n eventItems[i] = {\n type: '',\n listener: () => {},\n };\n }\n }\n eventData[elementId] = eventItems.filter((item: EventItem) => item.type !== '');\n });\n }\n\n // Executes all event listeners attached to all nodes for the given event type.\n public emit(type: string, event?: Event): this {\n return this.eachElement(element => {\n const elementId = element.lakeId;\n const eventItems = eventData[elementId];\n for (const item of eventItems) {\n if (item.type === type) {\n item.listener(event ?? new Event(type));\n }\n }\n });\n }\n\n // Returns all event listeners attached to the node at the specified index.\n public getEventListeners(index: number): EventItem[] {\n const elementId = this.get(index).lakeId;\n return eventData[elementId];\n }\n\n // Sets focus on the specified node, if it can be focused.\n public focus(): this {\n const element = this.get(0) as HTMLElement;\n element.focus();\n return this;\n }\n\n // Removes focus from the specified node.\n public blur(): this {\n const element = this.get(0) as HTMLElement;\n element.blur();\n return this;\n }\n\n // Returns a copy of the first node. If deep is true, the copy also includes the node's descendants.\n public clone(deep: boolean = false): Nodes {\n const node = this.get(0);\n return new Nodes(node.cloneNode(deep));\n }\n\n // Returns a boolean value indicating whether the first node has the specified attribute or not.\n public hasAttr(attributeName: string): boolean {\n const element = this.get(0) as Element;\n return element.hasAttribute(attributeName);\n }\n\n // Returns the value of the specified attribute from the first node, or sets the values of attributes for all elements.\n public attr(attributeName: string): string;\n\n public attr(attributeName: string, value: string): this;\n\n public attr(attributeName: KeyValue): this;\n\n public attr(attributeName: any, value?: any): any {\n if (typeof attributeName === 'object') {\n for (const name of Object.keys(attributeName)) {\n this.attr(name, attributeName[name]);\n }\n return this;\n }\n if (value === undefined) {\n const element = this.get(0) as Element;\n return element.getAttribute(attributeName) ?? '';\n }\n return this.eachElement(element => {\n element.setAttribute(attributeName, value);\n });\n }\n\n // Removes the attribute with the specified name from every element.\n public removeAttr(attributeName: string): this {\n return this.eachElement(element => {\n element.removeAttribute(attributeName);\n });\n }\n\n // Returns a boolean value indicating whether the first node has the specified class or not.\n public hasClass(className: string): boolean {\n const element = this.get(0) as Element;\n return inString(element.className, className, ' ');\n }\n\n // Adds the given class to every element.\n public addClass(className: string | string[]): this {\n if (Array.isArray(className)) {\n for (const name of className) {\n this.addClass(name);\n }\n return this;\n }\n return this.eachElement(element => {\n if (inString(element.className, className, ' ')) {\n return;\n }\n element.classList.add(className);\n });\n }\n\n // Removes the given class from every element.\n public removeClass(className: string | string[]): this {\n if (Array.isArray(className)) {\n for (const name of className) {\n this.removeClass(name);\n }\n return this;\n }\n return this.eachElement(element => {\n if (!inString(element.className, className, ' ')) {\n return;\n }\n element.classList.remove(className);\n if (element.className === '') {\n element.removeAttribute('class');\n }\n });\n }\n\n // Returns the value of the given CSS property of the first node,\n // after applying active stylesheets and resolving any basic computation this value may contain.\n public computedCSS(propertyName: string): string {\n const element = this.get(0) as Element;\n return getCSS(element, propertyName);\n }\n\n // Returns the value of the given CSS property of the first node, or sets the values of CSS properties for all elements.\n public css(propertyName: string): string;\n\n public css(propertyName: KeyValue): this;\n\n public css(propertyName: string, value: string): this;\n\n public css(propertyName: any, value?: any): any {\n if (typeof propertyName === 'object') {\n for (const name of Object.keys(propertyName)) {\n this.css(name, propertyName[name]);\n }\n return this;\n }\n if (value === undefined) {\n const element = this.get(0) as Element;\n return toHex(element.style[camelCase(propertyName)]);\n }\n return this.eachElement(element => {\n element.style[camelCase(propertyName)] = value;\n if (element.getAttribute('style') === '') {\n element.removeAttribute('style');\n }\n });\n }\n\n // Returns the width of of the first node.\n public width(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetWidth;\n }\n\n // Returns the interior width of the first node, which does not include padding.\n public innerWidth(): number {\n const paddingLeft = Number.parseInt(this.computedCSS('padding-left'), 10) || 0;\n const paddingRight = Number.parseInt(this.computedCSS('padding-right'), 10) || 0;\n return this.width() - paddingLeft - paddingRight;\n }\n\n // Returns the height of of the first node.\n public height(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetHeight;\n }\n\n // Displays all nodes.\n public show(displayType: string = 'block'): this {\n this.css('display', displayType);\n return this;\n }\n\n // Hides all nodes.\n public hide(): this {\n this.css('display', 'none');\n return this;\n }\n\n // Returns the HTML string contained within the first node, or sets the HTML string for all elements.\n public html(): string;\n\n public html(value: string): this;\n\n public html(value?: any): any {\n if (value === undefined) {\n const element = this.get(0) as Element;\n return element.innerHTML;\n }\n return this.eachElement(element => {\n element.innerHTML = value;\n });\n }\n\n // Returns the rendered text content of the first node, or sets the rendered text content for all elements.\n public text(): string;\n\n public text(value: string): this;\n\n public text(value?: string): any {\n if (value === undefined) {\n const node = this.get(0);\n if (this.isText) {\n return node.nodeValue ?? '';\n }\n const element = node as HTMLElement;\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText\n return element.innerText.replace(/^\\n+|\\n+$/, '');\n }\n return this.eachElement(element => {\n (element as HTMLElement).innerText = value;\n });\n }\n\n // Returns the value of the first node, which must be an input element, or sets the value for all input elements.\n public value(): string;\n\n public value(value: string): this;\n\n public value(value?: string): any {\n if (value === undefined) {\n const inputElement = this.get(0) as HTMLInputElement;\n return inputElement.value;\n }\n return this.eachElement(element => {\n (element as HTMLInputElement).value = value;\n });\n }\n\n // Returns the HTML string describing the first node including its descendants.\n public outerHTML(): string {\n const element = this.get(0) as Element;\n return element.outerHTML;\n }\n\n // Removes all child nodes for each element.\n public empty(): this {\n this.html('');\n return this;\n }\n\n // Inserts the specified content just inside the first node, before its first child.\n public prepend(content: string | Node | DocumentFragment | Nodes): this {\n const element = this.get(0);\n if (typeof content === 'string') {\n const list = toNodeList(content as string).reverse();\n for (const node of list) {\n if (element.firstChild) {\n element.insertBefore(node, element.firstChild);\n } else {\n element.appendChild(node);\n }\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n if (element.firstChild) {\n element.insertBefore(content, element.firstChild);\n } else {\n element.appendChild(content);\n }\n return this;\n }\n\n // Inserts the specified content just inside the first node, after its last child.\n public append(content: string | Node | DocumentFragment | Nodes): this {\n const element = this.get(0);\n if (typeof content === 'string') {\n const list = toNodeList(content as string);\n for (const node of list) {\n element.appendChild(node);\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n element.appendChild(content);\n return this;\n }\n\n // Inserts the specified content before the first node.\n public before(content: string | Node | DocumentFragment | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n if (typeof content === 'string') {\n const list = toNodeList(content as string);\n for (const target of list) {\n node.parentNode.insertBefore(target, node);\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n node.parentNode.insertBefore(content, node);\n return this;\n }\n\n // Inserts the specified content after the first node.\n public after(content: string | Node | DocumentFragment | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n if (typeof content === 'string') {\n const list = toNodeList(content as string).reverse();\n for (const target of list) {\n if (node.nextSibling) {\n node.parentNode.insertBefore(target, node.nextSibling);\n } else {\n node.parentNode.appendChild(target);\n }\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n if (node.nextSibling) {\n node.parentNode.insertBefore(content, node.nextSibling);\n } else {\n node.parentNode.appendChild(content);\n }\n return this;\n }\n\n // Replaces the first node with the given new content.\n public replaceWith(newContent: string | Node | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n let target: Node;\n if (newContent instanceof Nodes) {\n target = newContent.get(0);\n } else {\n target = toNodeList(newContent)[0];\n }\n node.parentNode.replaceChild(target, node);\n return this;\n }\n\n // Removes all nodes from the DOM.\n public remove(keepChildren: boolean = false): this {\n this.each(node => {\n if (!node.parentNode) {\n return;\n }\n if (keepChildren) {\n let child = node.firstChild;\n while (child) {\n const next = child.nextSibling;\n node.parentNode.insertBefore(child, node);\n child = next;\n }\n }\n node.parentNode.removeChild(node);\n });\n return this;\n }\n\n // Splits the first node, which must be a text node, into two nodes at the specified offset, keeping both as siblings in the tree.\n public splitText(offset: number): Nodes {\n if (!this.isText) {\n return new Nodes();\n }\n const node = this.get(0) as Text;\n const newNode = node.splitText(offset);\n return new Nodes(newNode);\n }\n\n // Returns information about the first node, which is used for debugging.\n public toString(): string {\n if (this.length === 0) {\n return '';\n }\n const node = this.get(0);\n let nodeValue = this.isText ? node.nodeValue : this.outerHTML();\n if (nodeValue && nodeValue.length > 50) {\n nodeValue = `${nodeValue.substring(0, 50)} ...`;\n }\n return `node (${node.lakeId}): ${nodeValue}`;\n }\n\n // Prints information about the first node, which is used for debugging.\n public info(): void {\n debug(this.toString());\n }\n}\n","import { toNodeList } from './to-node-list';\nimport { Nodes } from '../models/nodes';\n\n// Returns a Nodes object representing a list of the document's nodes.\nexport function query(content: string | Node | Nodes): Nodes {\n if (content instanceof Nodes) {\n return content;\n }\n const nodes = toNodeList(content);\n return new Nodes(nodes);\n}\n","const characterMap = new Map([\n ['&', '&'],\n ['<', '<'],\n ['>', '>'],\n ['\"', '"'],\n ['\\xA0', ' '],\n]);\n\n// Converts all of the reserved characters in the specified string to HTML entities.\nexport function encode(value: string): string {\n return value.replace(/[&<>\"\\xA0]/g, match => characterMap.get(match) ?? '');\n}\n","import { encode } from './encode';\n\n// A tag function for converting all of the reserved characters in the specified string to HTML entities.\nexport function template(strings: TemplateStringsArray, ...keys: any[]): string {\n let content = strings[0];\n for (let i = 0; i < keys.length; i++) {\n const key = String(keys[i]);\n // Escape special characters in the substitution.\n content += encode(key);\n // Don't escape special characters in the template.\n content += strings[i + 1];\n }\n content = content.\n replace(/^\\s+/gm, '').\n replace(/\\s+$/gm, '').\n replace(/[\\r\\n]/g, '');\n return content;\n}\n","import { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\n// The Fragment interface represents a minimal document object that has no parent.\nexport class Fragment {\n // native document fragment\n private readonly fragment: DocumentFragment;\n\n constructor(fragment?: DocumentFragment) {\n this.fragment = fragment ?? document.createDocumentFragment();\n }\n\n // Returns a native DocumentFragment object from the fragment.\n public get(): DocumentFragment {\n return this.fragment;\n }\n\n // Returns the descendants of the fragment that match the specified CSS selector.\n public find(selector: string): Nodes {\n const nodeList: Node[] = [];\n let child = new Nodes(this.fragment.firstChild);\n while (child.length > 0) {\n if (child.matches(selector)) {\n nodeList.push(child.get(0));\n } else if (child.isElement) {\n child.find(selector).each(node => {\n nodeList.push(node);\n });\n }\n child = child.next();\n }\n return new Nodes(nodeList);\n }\n\n // Inserts the specified content just inside the fragment, after its last child.\n public append(content: string | Node | Nodes): void {\n query(content).each(nativeNode => {\n this.fragment.appendChild(nativeNode);\n });\n }\n}\n","import { NativeRange } from '../types/native';\nimport { debug } from '../utils/debug';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\n// The Range interface represents a fragment of a document that can contain nodes and parts of text nodes.\nexport class Range {\n // native range\n private readonly range: NativeRange;\n\n constructor(range?: NativeRange) {\n this.range = range ?? document.createRange();\n }\n\n // A node within which the range starts.\n public get startNode(): Nodes {\n return new Nodes(this.range.startContainer);\n }\n\n // A number representing where in the startNode the range starts.\n public get startOffset(): number {\n return this.range.startOffset;\n }\n\n // A node within which the range ends.\n public get endNode(): Nodes {\n return new Nodes(this.range.endContainer);\n }\n\n // A number representing where in the endNode the range ends.\n public get endOffset(): number {\n return this.range.endOffset;\n }\n\n // The deepest — or furthest down the document tree — node that contains both boundary points of the range.\n public get commonAncestor(): Nodes {\n return new Nodes(this.range.commonAncestorContainer);\n }\n\n // A boolean value indicating whether the range's start and end points are at the same position.\n public get isCollapsed(): boolean {\n return this.range.collapsed;\n }\n\n // A boolean value indicating whether the range's start point is in a box.\n public get isBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n return boxNode.length > 0;\n }\n\n // A boolean value indicating whether the commonAncestor is in the start position of a box.\n // case 1: <lake-box><span class=\"lake-box-strip\">|</span><div class=\"lake-box-container\"></div> ...\n // case 2: <lake-box><span class=\"lake-box-strip\"></span>|<div class=\"lake-box-container\"></div> ...\n // case 3: <lake-box>|<span class=\"lake-box-strip\"></span><div class=\"lake-box-container\"></div> ...\n public get isBoxStart(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n return this.compareBeforeNode(boxContainer) >= 0;\n }\n\n // A boolean value indicating whether the commonAncestor is in the center position of a box.\n // case 1: ... <div class=\"lake-box-container\"><div>|</div></div> ...\n // case 2: ... <div class=\"lake-box-container\"><div></div>|</div> ...\n public get isBoxCenter(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n // Returns true when the box was selected.\n // case: ... <div class=\"lake-box-container\">|<div></div></div> ...\n return this.isCollapsed && this.startNode.get(0) === boxContainer.get(0) && this.startOffset === 0;\n }\n\n // A boolean value indicating whether commonAncestor is in the end position of a box.\n // case 1: ... <div class=\"lake-box-container\"></div><span class=\"lake-box-strip\">|</span></lake-box>\n // case 2: ... <div class=\"lake-box-container\"></div>|<span class=\"lake-box-strip\"></span></lake-box>\n // case 3: ... <div class=\"lake-box-container\"></div><span class=\"lake-box-strip\"></span>|</lake-box>\n public get isBoxEnd(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n return this.compareAfterNode(boxContainer) <= 0;\n }\n\n // A boolean value indicating whether commonAncestor is inside the container of a box.\n // case 1: ... <div class=\"lake-box-container\"><div>|</div></div> ...\n // case 2: ... <div class=\"lake-box-container\"><div></div>|</div> ...\n public get isInsideBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n // Returns false when the box was selected.\n // case: ... <div class=\"lake-box-container\">|<div></div></div> ...\n if (\n this.isCollapsed &&\n this.startNode.get(0) === boxContainer.get(0) &&\n this.startOffset === 0\n ) {\n return false;\n }\n return this.compareBeforeNode(boxContainer) < 0 && this.compareAfterNode(boxContainer) > 0;\n }\n\n // A boolean value indicating whether the range is inoperative.\n public get isInoperative(): boolean {\n if (this.commonAncestor.isOutside) {\n return true;\n }\n const startBlock = this.startNode.closest('td');\n const endBlock = this.endNode.closest('td');\n if (\n startBlock.length > 0 &&\n endBlock.length > 0 &&\n startBlock.get(0) !== endBlock.get(0)\n ) {\n return true;\n }\n return false;\n }\n\n // Returns a native Range object from the range.\n public get(): NativeRange {\n return this.range;\n }\n\n // Returns the size and position of the range.\n public getRect(): DOMRect {\n const range = this.clone();\n let rect;\n let x;\n let width;\n if (range.isCollapsed) {\n let reference = 'left';\n if (range.startNode.isElement) {\n const children = range.startNode.children();\n if (children.length === 0) {\n range.selectNode(range.startNode);\n } else if (range.startOffset < children.length) {\n range.setEnd(range.startNode, range.startOffset + 1);\n } else {\n range.setStart(range.startNode, range.startOffset - 1);\n reference = 'right';\n }\n } else if (range.startNode.isText) {\n const text = range.startNode.text();\n if (range.startOffset < text.length) {\n range.setEnd(range.startNode, range.startOffset + 1);\n } else if (range.startOffset > 0) {\n range.setStart(range.startNode, range.startOffset - 1);\n reference = 'right';\n }\n }\n rect = range.get().getBoundingClientRect();\n if (reference === 'left') {\n x = rect.x;\n } else {\n x = rect.right;\n }\n width = 1;\n } else {\n rect = range.get().getBoundingClientRect();\n x = rect.x;\n width = rect.width;\n }\n const height = rect.height;\n return DOMRect.fromRect({\n x,\n y: height > 0 ? rect.y : 0,\n width: width > 0 ? width : 1,\n height: height > 0 ? height : 1,\n });\n }\n\n // Returns -1, 0, or 1 depending on whether the specified node is before, the same as, or after the range.\n // −1 if the point is before the range. 0 if the point is in the range. 1 if the point is after the range.\n public comparePoint(node: Nodes, offset: number): number {\n return this.range.comparePoint(node.get(0), offset);\n }\n\n // Returns -1, 0, or 1 depending on whether the beginning of the specified node is before, the same as, or after the range.\n // −1 if the beginning of the node is before the range. 0 if the beginning of the node is in the range. 1 if the beginning of the node is after the range.\n public compareBeforeNode(node: Nodes): number {\n const targetRange = new Range();\n if (node.isText) {\n targetRange.setStart(node, 0);\n } else {\n targetRange.setStartBefore(node);\n }\n targetRange.collapseToStart();\n return this.comparePoint(targetRange.startNode, targetRange.startOffset);\n }\n\n // Returns -1, 0, or 1 depending on whether the end of the specified node is before, the same as, or after the range.\n // −1 if the end of the node is before the range. 0 if the end of the node is in the range. 1 if the end of the node is after the range.\n public compareAfterNode(node: Nodes): number {\n const targetRange = new Range();\n if (node.isText) {\n const nodeValue = node.get(0).nodeValue ?? '';\n targetRange.setStart(node, nodeValue.length);\n } else {\n targetRange.setStartAfter(node);\n }\n targetRange.collapseToStart();\n return this.comparePoint(targetRange.startNode, targetRange.startOffset);\n }\n\n // Returns a boolean value indicating whether the specified node is part of the range or intersects the range.\n public intersectsNode(node: Nodes): boolean {\n return this.range.intersectsNode(node.get(0));\n }\n\n // Sets the start position of the range.\n public setStart(node: Nodes, offset: number): void {\n this.range.setStart(node.get(0), offset);\n }\n\n // Sets the start position of the range to the beginning of the specified node.\n public setStartBefore(node: Nodes): void {\n this.range.setStartBefore(node.get(0));\n }\n\n // Sets the start position of the range to the end of the specified node.\n public setStartAfter(node: Nodes): void {\n this.range.setStartAfter(node.get(0));\n }\n\n // Sets the end position of the range.\n public setEnd(node: Nodes, offset: number): void {\n this.range.setEnd(node.get(0), offset);\n }\n\n // Sets the end position of the range to the beginning of the specified node.\n public setEndBefore(node: Nodes): void {\n this.range.setEndBefore(node.get(0));\n }\n\n // Sets the end position of the range to the end of the specified node.\n public setEndAfter(node: Nodes): void {\n this.range.setEndAfter(node.get(0));\n }\n\n // Collapses the range to its start.\n public collapseToStart(): void {\n this.range.collapse(true);\n }\n\n // Collapses the range to its end.\n public collapseToEnd(): void {\n this.range.collapse(false);\n }\n\n // Sets the range to contain the specified node and its contents.\n public selectNode(node: Nodes): void {\n this.range.selectNode(node.get(0));\n }\n\n // Sets the range to contain the contents of the specified node.\n public selectNodeContents(node: Nodes): void {\n this.range.selectNodeContents(node.get(0));\n }\n\n // Collapses the range to the center position of the specified box.\n public selectBox(boxNode: Nodes): void {\n const boxContainer = boxNode.find('.lake-box-container');\n if (boxContainer.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n // Collapses the range to the start position of the specified box.\n public selectBoxStart(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n // Collapses the range to the end position of the specified box.\n public selectBoxEnd(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n // Collapses the range to the deepest point at the beginning of the contents of the specified node.\n public shrinkBefore(node: Nodes): void {\n if (node.isBox) {\n this.selectBoxStart(node);\n return;\n }\n if (node.isText) {\n this.setStartBefore(node);\n this.collapseToStart();\n return;\n }\n this.setStart(node, 0);\n let child;\n while (\n this.startNode.isElement &&\n (child = this.startNode.children()[0]) &&\n child.isElement && !child.isVoid\n ) {\n if (child.isBox) {\n this.selectBoxStart(child);\n return;\n }\n this.setStart(child, 0);\n }\n this.collapseToStart();\n }\n\n // Collapses the range to the deepest point at the end of the contents of the specified node.\n public shrinkAfter(node: Nodes): void {\n if (node.isBox) {\n this.selectBoxEnd(node);\n return;\n }\n if (node.isText) {\n this.setEndAfter(node);\n this.collapseToEnd();\n return;\n }\n this.setEnd(node, node.children().length);\n let child;\n while (\n this.endNode.isElement &&\n this.endOffset > 0 &&\n (child = this.endNode.children()[this.endOffset - 1]) &&\n child.isElement && !child.isVoid\n ) {\n if (child.isBox) {\n this.selectBoxEnd(child);\n return;\n }\n this.setEnd(child, child.children().length);\n }\n this.collapseToEnd();\n this.adjustBr();\n }\n\n // Sets the start and end positions of the range to the deepest start position and end position of the contents of the specified node.\n // <div>[<p><strong>foo</strong></p>]</div>\n // to\n // <div><p><strong>[foo]</strong></p></div>\n public shrink(): void {\n const isCollapsed = this.isCollapsed;\n let child;\n while (\n this.startNode.isElement &&\n (child = this.startNode.children()[this.startOffset]) &&\n child.isElement && !child.isVoid && !child.isBox\n ) {\n this.setStart(child, 0);\n }\n if (isCollapsed) {\n this.collapseToStart();\n return;\n }\n while (\n this.endNode.isElement &&\n this.endOffset > 0 &&\n (child = this.endNode.children()[this.endOffset - 1]) &&\n child.isElement && !child.isVoid && !child.isBox\n ) {\n this.setEnd(child, child.children().length);\n }\n }\n\n // Relocates the start and end positions of the range for boxes.\n public adjustBox(): void {\n const startBoxNode = this.startNode.closest('lake-box');\n if (startBoxNode.length > 0) {\n const startRange = this.clone();\n startRange.collapseToStart();\n if (startRange.isBoxEnd) {\n this.setStartAfter(startBoxNode);\n } else {\n this.setStartBefore(startBoxNode);\n }\n }\n const endBoxNode = this.endNode.closest('lake-box');\n if (endBoxNode.length > 0) {\n const endRange = this.clone();\n endRange.collapseToEnd();\n if (endRange.isBoxStart) {\n this.setEndBefore(endBoxNode);\n } else {\n this.setEndAfter(endBoxNode);\n }\n }\n }\n\n // Relocates the start and end positions of the range for tables.\n public adjustTable(): void {\n const startTable = this.startNode.closest('table');\n const endTable = this.endNode.closest('table');\n if (startTable.length === 0 && endTable.length > 0 && endTable.isInside) {\n this.setEndBefore(endTable);\n this.shrink();\n return;\n }\n if (endTable.length === 0 && startTable.length > 0 && startTable.isInside) {\n this.setStartAfter(startTable);\n this.shrink();\n }\n }\n\n // Relocates the start and end positions of the range for blocks.\n // case 1:\n // <p>foo</p>|<p>bar</p>\n // to\n // <p>foo</p><p>|bar</p>\n // case 2:\n // [<p>foo</p>]<p>bar</p>\n // to\n // <p>[foo]</p><p>bar</p>\n // case 3:\n // [<p>foo</p><p>]bar</p>\n // to\n // <p>[foo]</p><p>bar</p>\n public adjustBlock(): void {\n if (!this.isCollapsed) {\n // [<p>foo</p><p>]bar</p> to [<p>foo</p>]<p>bar</p>\n if (this.endNode.isElement && this.endOffset === 0) {\n let node = this.endNode;\n while (node.prev().length === 0) {\n node = node.parent();\n }\n this.setEndBefore(node);\n }\n this.shrink();\n return;\n }\n if (this.startNode.isText) {\n return;\n }\n const nextBlock = this.startNode.children()[this.startOffset];\n if (nextBlock && (nextBlock.isBlockBox || nextBlock.isBlock)) {\n this.shrinkBefore(nextBlock);\n }\n }\n\n // Relocates the start and end positions of the range for boxes, tables, and blocks.\n public adjust(): void {\n this.adjustBox();\n this.adjustTable();\n this.adjustBlock();\n }\n\n // Relocates the start and end positions of the range for <br /> elements.\n // In composition mode (e.g., when a user starts entering a Chinese character using a Pinyin IME),\n // uncompleted text is inserted if the cursor is positioned behind a <br> tag.\n // To fix this bug, the cursor needs to be moved to the front of the <br> tag.\n public adjustBr(): void {\n if (!this.isCollapsed) {\n return;\n }\n const prevNode = this.getPrevNode();\n const nextNode = this.getNextNode();\n if (prevNode.name === 'br' && nextNode.length === 0) {\n this.setStartBefore(prevNode);\n this.collapseToStart();\n }\n }\n\n // Returns the node immediately preceding the start position of the range.\n public getPrevNode(): Nodes {\n let prevNode;\n if (this.startNode.isText) {\n if (this.startOffset === 0) {\n prevNode = this.startNode.prev();\n } else {\n prevNode = this.startNode;\n }\n } else {\n prevNode = this.startNode.children()[this.startOffset - 1];\n }\n return prevNode ?? new Nodes();\n }\n\n // Returns the node immediately following the end position of the range.\n public getNextNode(): Nodes {\n let nextNode;\n if (this.endNode.isText) {\n if (this.endOffset === this.endNode.text().length) {\n nextNode = this.endNode.next();\n } else {\n nextNode = this.endNode;\n }\n } else {\n nextNode = this.endNode.children()[this.endOffset];\n }\n return nextNode ?? new Nodes();\n }\n\n // Returns the boxes contained within or intersected by the range.\n public getBoxes(): Nodes[] {\n if (this.isCollapsed) {\n const startBox = this.startNode.closest('lake-box');\n return startBox.length > 0 ? [ startBox ] : [];\n }\n const nodeList: Nodes[] = [];\n const clonedRange = this.clone();\n clonedRange.adjustBox();\n for (const child of clonedRange.commonAncestor.getWalker()) {\n if (child.isBox && clonedRange.intersectsNode(child)) {\n nodeList.push(child);\n }\n }\n return nodeList;\n }\n\n // Returns the blocks contained within or intersected by the range.\n public getBlocks(): Nodes[] {\n if (this.isCollapsed) {\n const startBlock = this.startNode.closestOperableBlock();\n if (startBlock.isTable) {\n return [];\n }\n return startBlock.isInside ? [ startBlock ] : [];\n }\n const startBlock = this.startNode.closestOperableBlock();\n const endBlock = this.endNode.closestOperableBlock();\n if (\n startBlock.isInside &&\n startBlock.get(0) &&\n startBlock.get(0) === endBlock.get(0)\n ) {\n return startBlock.isTable ? [] : [ startBlock ];\n }\n const blocks: Nodes[] = [];\n const clonedRange = this.clone();\n clonedRange.collapseToEnd();\n for (const child of this.commonAncestor.getWalker()) {\n if (child.isBlock && !child.isTable && child.isTopInside &&\n // the range doesn't end at the start of a block\n clonedRange.comparePoint(child, 0) !== 0 &&\n this.intersectsNode(child)\n ) {\n blocks.push(child);\n }\n }\n if (blocks.length > 0) {\n return blocks;\n }\n for (const child of this.commonAncestor.getWalker()) {\n if (child.isBlock && !child.isTable &&\n (startBlock.isSibling(child) || endBlock.isSibling(child)) &&\n this.intersectsNode(child)) {\n blocks.push(child);\n }\n }\n return blocks;\n }\n\n // Returns the marks and text nodes contained within or intersected by the range.\n public getMarks(hasText: boolean = false): Nodes[] {\n const marks: Nodes[] = [];\n if (this.commonAncestor.isText && hasText) {\n if (\n this.startOffset === 0 &&\n this.endOffset === this.commonAncestor.text().length\n ) {\n marks.push(this.commonAncestor);\n return marks;\n }\n }\n const stratRange = this.clone();\n stratRange.collapseToStart();\n const endRange = this.clone();\n endRange.collapseToEnd();\n for (const node of this.commonAncestor.getWalker()) {\n const targetRange = document.createRange();\n targetRange.setStartAfter(node.get(0));\n targetRange.collapse(true);\n if (endRange.compareBeforeNode(node) >= 0) {\n break;\n }\n if (stratRange.compareAfterNode(node) > 0) {\n if (node.isMark) {\n marks.push(node);\n } else if (node.isText && hasText) {\n marks.push(node);\n }\n }\n }\n return marks;\n }\n\n // Returns the text from the start position of the closest block to the start position of the range.\n // \"<p>one<anchor />two<focus />three</p>\" returns \"one\".\n public getStartText(): string {\n const node = this.startNode;\n const offset = this.startOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const startRange = new Range();\n startRange.setStartBefore(block);\n startRange.setEnd(node, offset);\n const container = query('<div />');\n container.append(startRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n // Returns the text from the end position of the range to the end position of the closest block.\n // \"<p>one<anchor />two<focus />three</p>\" returns \"three\".\n public getEndText(): string {\n const node = this.endNode;\n const offset = this.endOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const endRange = new Range();\n endRange.setStart(node, offset);\n endRange.setEndAfter(block);\n const container = query('<div />');\n container.append(endRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n // Returns a new range from the specified character to the start position of the range.\n // The specified character must be preceded by a whitespace or be at the beginning of a paragraph,\n // without being adjacent to other characters. It will return null if not.\n public getCharacterRange(character: string): Range | null {\n const newRange = this.clone();\n newRange.shrink();\n if (newRange.startOffset === 0) {\n return null;\n }\n if (newRange.startNode.isElement) {\n const textNode = newRange.startNode.children()[newRange.startOffset - 1];\n if (!textNode.isText) {\n return null;\n }\n newRange.setEnd(textNode, textNode.text().length);\n newRange.collapseToEnd();\n }\n const textNode = newRange.startNode;\n const text = textNode.text().slice(0, newRange.startOffset);\n const lastIndexOfNormalSpace = text.lastIndexOf(` ${character}`);\n const lastIndexOfNoBreakSpace = text.lastIndexOf(`\\xA0${character}`);\n const lastIndexOfZeroWidthSpace = text.lastIndexOf(`\\u200B${character}`);\n if (lastIndexOfNormalSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNormalSpace + 1);\n } else if (lastIndexOfNoBreakSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNoBreakSpace + 1);\n } else if (lastIndexOfZeroWidthSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfZeroWidthSpace + 1);\n } else if (text.indexOf(character) === 0) {\n newRange.setStart(textNode, 0);\n } else {\n return null;\n }\n return newRange;\n }\n\n // Returns a copy of the range.\n public clone(): Range {\n return new Range(this.range.cloneRange());\n }\n\n // Returns a DocumentFragment object copying the nodes included in the range.\n public cloneContents(): DocumentFragment {\n return this.range.cloneContents();\n }\n\n // Prints information about the range, which is used for debugging.\n public info(): void {\n debug('--- range information ---');\n debug('start node:', this.startNode.toString(), ', offset:', this.startOffset);\n debug('end node:', this.endNode.toString(), ', offset:', this.endOffset);\n }\n}\n","import type { BoxComponent } from '../types/box';\n\nexport const boxes: Map<string, BoxComponent> = new Map();\n","import type { Editor } from '../editor';\n\nexport const editors: Map<number, Editor> = new Map();\n","// Creates a Base64-encoded ASCII string from a string.\nexport function toBase64(value: string): string {\n const encoder = new TextEncoder();\n const byteArray = encoder.encode(value);\n let binaryString = '';\n byteArray.forEach(byte => {\n binaryString += String.fromCharCode(byte);\n });\n return window.btoa(binaryString);\n}\n","// Decodes a string of data which has been encoded using Base64 encoding.\nexport function fromBase64(value: string): string {\n const binaryString = window.atob(value);\n const byteArray = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n byteArray[i] = binaryString.charCodeAt(i);\n }\n const decoder = new TextDecoder();\n return decoder.decode(byteArray);\n}\n","import { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// -1: the edge of the target node or range extends beyond the left or top edge of the viewport and is not visible\n// 0: the edge of the target node or range is within the viewport and is visible\n// 1: the edge of the target node or range extends beyond the right or bottom edge of the viewport and is not visible\ntype VisibleType = -1 | 0 | 1;\n\nexport function visibleInfo(target: Nodes | Range): {\n left: VisibleType;\n right: VisibleType;\n top: VisibleType;\n bottom: VisibleType;\n} {\n let rect: DOMRect;\n let viewport: Nodes;\n if (target instanceof Nodes) {\n const nativeNode = target.get(0) as Element;\n rect = nativeNode.getBoundingClientRect();\n viewport = target.closestScroller();\n } else {\n rect = target.get().getBoundingClientRect();\n viewport = target.commonAncestor.closestScroller();\n }\n let left = rect.left;\n let right = rect.right;\n let top = rect.top;\n let bottom = rect.bottom;\n let viewportWidth = window.innerWidth;\n let viewportHeight = window.innerHeight;\n if (viewport.length > 0) {\n const nativeViewport = viewport.get(0) as Element;\n const viewportRect = nativeViewport.getBoundingClientRect();\n const offsetLeft = viewportRect.x;\n const offsetTop = viewportRect.y;\n left -= offsetLeft;\n right -= offsetLeft;\n top -= offsetTop;\n bottom -= offsetTop;\n viewportWidth = viewportRect.width;\n viewportHeight = viewportRect.height;\n }\n let leftEdge: VisibleType = 0;\n if (left < 0) {\n leftEdge = -1;\n } else if (viewportWidth - left < 0) {\n leftEdge = 1;\n }\n let rightEdge: VisibleType = 0;\n if (right < 0) {\n rightEdge = -1;\n } else if (viewportWidth - right < 0) {\n rightEdge = 1;\n }\n let topEdge: VisibleType = 0;\n if (top < 0) {\n topEdge = -1;\n } else if (viewportHeight - top < 0) {\n topEdge = 1;\n }\n let bottomEdge: VisibleType = 0;\n if (bottom < 0) {\n bottomEdge = -1;\n } else if (viewportHeight - bottom < 0) {\n bottomEdge = 1;\n }\n return {\n left: leftEdge,\n right: rightEdge,\n top: topEdge,\n bottom: bottomEdge,\n };\n}\n","import { DropdownMenuItem } from '../types/dropdown';\nimport { icons } from '../icons';\n\nexport const headingMenuItems: DropdownMenuItem[] = [\n {\n value: 'h1',\n text: locale => `<span style=\"font-weight: bold; font-size: 26px;\">${locale.toolbar.heading1()}</span>`,\n },\n {\n value: 'h2',\n text: locale => `<span style=\"font-weight: bold; font-size: 24px;\">${locale.toolbar.heading2()}</span>`,\n },\n {\n value: 'h3',\n text: locale => `<span style=\"font-weight: bold; font-size: 22px;\">${locale.toolbar.heading3()}</span>`,\n },\n {\n value: 'h4',\n text: locale => `<span style=\"font-weight: bold; font-size: 20px;\">${locale.toolbar.heading4()}</span>`,\n },\n {\n value: 'h5',\n text: locale => `<span style=\"font-weight: bold; font-size: 18px;\">${locale.toolbar.heading5()}</span>`,\n },\n {\n value: 'h6',\n text: locale => `<span style=\"font-weight: bold; font-size: 16px;\">${locale.toolbar.heading6()}</span>`,\n },\n {\n value: 'p',\n text: locale => locale.toolbar.paragraph(),\n },\n];\n\nexport const listMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('numberedList'),\n value: 'numbered',\n text: locale => locale.toolbar.numberedList(),\n },\n {\n icon: icons.get('bulletedList'),\n value: 'bulleted',\n text: locale => locale.toolbar.bulletedList(),\n },\n {\n icon: icons.get('checklist'),\n value: 'checklist',\n text: locale => locale.toolbar.checklist(),\n },\n];\n\nexport const alignMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('alignLeft'),\n value: 'left',\n text: locale => locale.toolbar.alignLeft(),\n },\n {\n icon: icons.get('alignCenter'),\n value: 'center',\n text: locale => locale.toolbar.alignCenter(),\n },\n {\n icon: icons.get('alignRight'),\n value: 'right',\n text: locale => locale.toolbar.alignRight(),\n },\n {\n icon: icons.get('alignJustify'),\n value: 'justify',\n text: locale => locale.toolbar.alignJustify(),\n },\n];\n\nexport const indentMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('increaseIndent'),\n value: 'increase',\n text: locale => locale.toolbar.increaseIndent(),\n },\n {\n icon: icons.get('decreaseIndent'),\n value: 'decrease',\n text: locale => locale.toolbar.decreaseIndent(),\n },\n];\n\nexport const fontFamilyMenuItems: DropdownMenuItem[] = [\n {\n value: 'Arial',\n text: '<span style=\"font-family: Arial;\">Arial</span>',\n },\n {\n value: 'Arial Black',\n text: '<span style=\"font-family: \\'Arial Black\\';\">Arial Black</span>',\n },\n {\n value: 'Comic Sans MS',\n text: '<span style=\"font-family: \\'Comic Sans MS\\';\">Comic Sans MS</span>',\n },\n {\n value: 'Courier New',\n text: '<span style=\"font-family: \\'Courier New\\';\">Courier New</span>',\n },\n {\n value: 'Georgia',\n text: '<span style=\"font-family: Georgia;\">Georgia</span>',\n },\n {\n value: 'Helvetica',\n text: '<span style=\"font-family: Helvetica;\">Helvetica</span>',\n },\n {\n value: 'Impact',\n text: '<span style=\"font-family: Impact;\">Impact</span>',\n },\n {\n value: 'Segoe UI',\n text: '<span style=\"font-family: \\'Segoe UI\\';\">Segoe UI</span>',\n },\n {\n value: 'Tahoma',\n text: '<span style=\"font-family: Tahoma;\">Tahoma</span>',\n },\n {\n value: 'Times New Roman',\n text: '<span style=\"font-family: \\'Times New Roman\\';\">Times New Roman</span>',\n },\n {\n value: 'Trebuchet MS',\n text: '<span style=\"font-family: \\'Trebuchet MS\\';\">Trebuchet MS</span>',\n },\n {\n value: 'Verdana',\n text: '<span style=\"font-family: Verdana;\">Verdana</span>',\n },\n];\n\nexport const fontSizeMenuItems: DropdownMenuItem[] = [\n {\n value: '12px',\n text: '12px',\n },\n {\n value: '14px',\n text: '14px',\n },\n {\n value: '16px',\n text: '16px',\n },\n {\n value: '18px',\n text: '18px',\n },\n {\n value: '22px',\n text: '22px',\n },\n {\n value: '24px',\n text: '24px',\n },\n {\n value: '32px',\n text: '32px',\n },\n];\n\nexport const moreStyleMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('italic'),\n value: 'italic',\n text: locale => locale.toolbar.italic(),\n },\n {\n icon: icons.get('underline'),\n value: 'underline',\n text: locale => locale.toolbar.underline(),\n },\n {\n icon: icons.get('strikethrough'),\n value: 'strikethrough',\n text: locale => locale.toolbar.strikethrough(),\n },\n {\n icon: icons.get('superscript'),\n value: 'superscript',\n text: locale => locale.toolbar.superscript(),\n },\n {\n icon: icons.get('subscript'),\n value: 'subscript',\n text: locale => locale.toolbar.subscript(),\n },\n {\n icon: icons.get('code'),\n value: 'code',\n text: locale => locale.toolbar.code(),\n },\n];\n\n// These colors are sourced from Ant Design (https://ant.design/docs/spec/colors)\nconst colors: string[] = [\n // Dust Red, Volcano, Sunset Orange, Calendula Gold, Sunrise Yellow, Lime, Polar Green, Cyan, Daybreak Blue, Geek Blue, Golden Purple, Magenta\n '#f5222d', '#fa541c', '#fa8c16', '#faad14', '#fadb14', '#a0d911', '#52c41a', '#13c2c2', '#1677ff', '#2f54eb', '#722ed1', '#eb2f96', // color 6\n '#fff1f0', '#fff2e8', '#fff7e6', '#fffbe6', '#feffe6', '#fcffe6', '#f6ffed', '#e6fffb', '#e6f4ff', '#f0f5ff', '#f9f0ff', '#fff0f6', // color 1\n '#ffccc7', '#ffd8bf', '#ffe7ba', '#fff1b8', '#ffffb8', '#f4ffb8', '#d9f7be', '#b5f5ec', '#bae0ff', '#d6e4ff', '#efdbff', '#ffd6e7', // color 2\n '#ffa39e', '#ffbb96', '#ffd591', '#ffe58f', '#fffb8f', '#eaff8f', '#b7eb8f', '#87e8de', '#91caff', '#adc6ff', '#d3adf7', '#ffadd2', // color 3\n '#ff7875', '#ff9c6e', '#ffc069', '#ffd666', '#fff566', '#d3f261', '#95de64', '#5cdbd3', '#69b1ff', '#85a5ff', '#b37feb', '#ff85c0', // color 4\n '#ff4d4f', '#ff7a45', '#ffa940', '#ffc53d', '#ffec3d', '#bae637', '#73d13d', '#36cfc9', '#4096ff', '#597ef7', '#9254de', '#f759ab', // color 5\n '#cf1322', '#d4380d', '#d46b08', '#d48806', '#d4b106', '#7cb305', '#389e0d', '#08979c', '#0958d9', '#1d39c4', '#531dab', '#c41d7f', // color 7\n '#a8071a', '#ad2102', '#ad4e00', '#ad6800', '#ad8b00', '#5b8c00', '#237804', '#006d75', '#003eb3', '#10239e', '#391085', '#9e1068', // color 8\n '#820014', '#871400', '#873800', '#874d00', '#876800', '#3f6600', '#135200', '#00474f', '#002c8c', '#061178', '#22075e', '#780650', // color 9\n '#5c0011', '#610b00', '#612500', '#613400', '#614700', '#254000', '#092b00', '#002329', '#001d66', '#030852', '#120338', '#520339', // color 10\n // from gray-1 to gray-11, and gray-13\n '#000000', '#1f1f1f', '#262626', '#434343', '#595959', '#8c8c8c', '#bfbfbf', '#d9d9d9', '#f0f0f0', '#f5f5f5', '#fafafa', '#ffffff', // Neutral Color\n];\nexport const colorMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('removeFormat'),\n value: '',\n text: locale => locale.toolbar.removeColor(),\n },\n];\nfor (const color of colors) {\n colorMenuItems.push({\n value: color.toLowerCase(),\n text: color.toUpperCase(),\n });\n}\n","import { ToolbarItem } from '../types/toolbar';\nimport { icons } from '../icons';\nimport {\n headingMenuItems,\n listMenuItems,\n alignMenuItems,\n indentMenuItems,\n fontFamilyMenuItems,\n fontSizeMenuItems,\n moreStyleMenuItems,\n colorMenuItems,\n} from './menu-items';\n\nconst tagPluginNameMap: Map<string, string> = new Map([\n ['strong', 'bold'],\n ['em', 'italic'],\n ['i', 'italic'],\n ['u', 'underline'],\n ['s', 'strikethrough'],\n ['sup', 'superscript'],\n ['sub', 'subscript'],\n ['code', 'code'],\n]);\n\nexport const toolbarItems: ToolbarItem[] = [\n {\n name: 'undo',\n type: 'button',\n icon: icons.get('undo'),\n tooltip: locale => locale.toolbar.undo(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'redo',\n type: 'button',\n icon: icons.get('redo'),\n tooltip: locale => locale.toolbar.redo(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'selectAll',\n type: 'button',\n icon: icons.get('selectAll'),\n tooltip: locale => locale.toolbar.selectAll(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n tooltip: locale => locale.toolbar.paragraph(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'p'),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n tooltip: locale => locale.toolbar.blockQuote(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n tooltip: locale => locale.toolbar.numberedList(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ol'),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n tooltip: locale => locale.toolbar.bulletedList(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ul' && !item.node.hasAttr('type')),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n tooltip: locale => locale.toolbar.checklist(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ul' && item.node.attr('type') === 'checklist'),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'alignLeft',\n type: 'button',\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.toolbar.alignLeft(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'left'),\n onClick: editor => {\n editor.command.execute('align', 'left');\n },\n },\n {\n name: 'alignCenter',\n type: 'button',\n icon: icons.get('alignCenter'),\n tooltip: locale => locale.toolbar.alignCenter(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'center'),\n onClick: editor => {\n editor.command.execute('align', 'center');\n },\n },\n {\n name: 'alignRight',\n type: 'button',\n icon: icons.get('alignRight'),\n tooltip: locale => locale.toolbar.alignRight(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'right'),\n onClick: editor => {\n editor.command.execute('align', 'right');\n },\n },\n {\n name: 'alignJustify',\n type: 'button',\n icon: icons.get('alignJustify'),\n tooltip: locale => locale.toolbar.alignJustify(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'justify'),\n onClick: editor => {\n editor.command.execute('align', 'justify');\n },\n },\n {\n name: 'increaseIndent',\n type: 'button',\n icon: icons.get('increaseIndent'),\n tooltip: locale => locale.toolbar.increaseIndent(),\n onClick: editor => {\n editor.command.execute('indent', 'increase');\n },\n },\n {\n name: 'decreaseIndent',\n type: 'button',\n icon: icons.get('decreaseIndent'),\n tooltip: locale => locale.toolbar.decreaseIndent(),\n onClick: editor => {\n editor.command.execute('indent', 'decrease');\n },\n },\n {\n name: 'bold',\n type: 'button',\n icon: icons.get('bold'),\n tooltip: locale => locale.toolbar.bold(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'italic',\n type: 'button',\n icon: icons.get('italic'),\n tooltip: locale => locale.toolbar.italic(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'underline',\n type: 'button',\n icon: icons.get('underline'),\n tooltip: locale => locale.toolbar.underline(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'strikethrough',\n type: 'button',\n icon: icons.get('strikethrough'),\n tooltip: locale => locale.toolbar.strikethrough(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'superscript',\n type: 'button',\n icon: icons.get('superscript'),\n tooltip: locale => locale.toolbar.superscript(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'subscript',\n type: 'button',\n icon: icons.get('subscript'),\n tooltip: locale => locale.toolbar.subscript(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'code',\n type: 'button',\n icon: icons.get('code'),\n tooltip: locale => locale.toolbar.code(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'removeFormat',\n type: 'button',\n icon: icons.get('removeFormat'),\n tooltip: locale => locale.toolbar.removeFormat(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'formatPainter',\n type: 'button',\n icon: icons.get('formatPainter'),\n tooltip: locale => locale.toolbar.formatPainter(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'link',\n type: 'button',\n icon: icons.get('link'),\n tooltip: locale => locale.toolbar.link(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n tooltip: locale => locale.toolbar.hr(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n tooltip: locale => locale.toolbar.codeBlock(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n tooltip: locale => locale.toolbar.video(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n tooltip: locale => locale.toolbar.equation(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'heading',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: 'p',\n tooltip: locale => locale.toolbar.heading(),\n width: '100px',\n menuType: 'list',\n menuItems: headingMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('heading', value);\n },\n },\n {\n name: 'list',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('list'),\n tooltip: locale => locale.toolbar.list(),\n menuType: 'list',\n menuItems: listMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('list', value);\n },\n },\n {\n name: 'table',\n type: 'button',\n icon: icons.get('table'),\n tooltip: locale => locale.toolbar.table(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'align',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.toolbar.align(),\n menuType: 'list',\n menuItems: alignMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('align', value);\n },\n },\n {\n name: 'indent',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('increaseIndent'),\n tooltip: locale => locale.toolbar.indent(),\n menuType: 'list',\n menuItems: indentMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('indent', value);\n },\n },\n {\n name: 'fontFamily',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: 'Segoe UI',\n tooltip: locale => locale.toolbar.fontFamily(),\n width: '100px',\n menuType: 'list',\n menuItems: fontFamilyMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('fontFamily', value);\n },\n },\n {\n name: 'fontSize',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: '16px',\n tooltip: locale => locale.toolbar.fontSize(),\n width: '65px',\n menuType: 'list',\n menuItems: fontSizeMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('fontSize', value);\n },\n },\n {\n name: 'moreStyle',\n type: 'dropdown',\n icon: icons.get('more'),\n tooltip: locale => locale.toolbar.moreStyle(),\n menuType: 'list',\n menuItems: moreStyleMenuItems,\n selectedValues: activeItems => {\n const currentValues = [];\n for (const item of activeItems) {\n if (item.node.isMark) {\n const name = tagPluginNameMap.get(item.name) ?? item.name;\n currentValues.push(name);\n }\n }\n return currentValues;\n },\n onSelect: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'fontColor',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('fontColor'),\n accentIcon: icons.get('fontColorAccent'),\n defaultValue: '#f5222d',\n tooltip: locale => locale.toolbar.fontColor(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n onSelect: (editor, value) => {\n editor.command.execute('fontColor', value);\n },\n },\n {\n name: 'highlight',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('highlight'),\n accentIcon: icons.get('highlightAccent'),\n defaultValue: '#fadb14',\n tooltip: locale => locale.toolbar.highlight(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n onSelect: (editor, value) => {\n editor.command.execute('highlight', value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n tooltip: locale => locale.toolbar.image(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n tooltip: locale => locale.toolbar.file(),\n accept: '*',\n multiple: true,\n },\n];\n","/**\nThe MIT License (MIT)\n\nCopyright (c) 2016-present react-component\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nRepository: https://github.com/react-component/upload\n*/\n\nimport { UploadRequestError, UploadRequestOption } from '../types/request';\n\nfunction getError(option: UploadRequestOption, xhr: XMLHttpRequest): UploadRequestError {\n const msg = `Cannot ${option.method} ${option.action} ${xhr.status}'`;\n const err = new Error(msg) as UploadRequestError;\n err.status = xhr.status;\n err.method = option.method;\n err.url = option.action;\n return err;\n}\n\nfunction getBody(xhr: XMLHttpRequest): any {\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n// Sends a request to the server.\nexport function request(option: UploadRequestOption): XMLHttpRequest {\n const xhr = new XMLHttpRequest();\n\n if (option.onProgress && xhr.upload) {\n xhr.upload.onprogress = (e) => {\n if (e.total > 0) {\n e.percent = (e.loaded / e.total) * 100;\n }\n if (option.onProgress) {\n option.onProgress(e);\n }\n };\n }\n\n const formData = new FormData();\n\n const data = option.data || {};\n Object.keys(data).forEach(key => {\n const value = data[key];\n // support key-value array data\n if (Array.isArray(value)) {\n value.forEach(item => {\n // { list: [ 11, 22 ] }\n // formData.append('list[]', 11);\n formData.append(`${key}[]`, item);\n });\n return;\n }\n\n formData.append(key, value as string | Blob);\n });\n\n if (option.file) {\n const filename = option.filename || 'file';\n if (option.file instanceof Blob) {\n formData.append(filename, option.file, (option.file as any).name);\n } else {\n formData.append(filename, option.file);\n }\n }\n\n xhr.onerror = (e) => {\n if (option.onError) {\n option.onError(e);\n }\n };\n\n xhr.onload = () => {\n // allow success when 2xx status\n // see https://github.com/react-component/upload/issues/34\n if (xhr.status < 200 || xhr.status >= 300) {\n if (!option.onError) {\n return;\n }\n return option.onError(getError(option, xhr), getBody(xhr));\n }\n if (!option.onSuccess) {\n return;\n }\n return option.onSuccess(getBody(xhr), xhr);\n };\n\n xhr.open(option.method, option.action, true);\n\n // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n const headers = option.headers || {};\n\n // when set headers['X-Requested-With'] = null , can close default XHR header\n // see https://github.com/react-component/upload/issues/33\n if (headers['X-Requested-With'] !== null) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n Object.keys(headers).forEach(h => {\n if (headers[h] !== null) {\n xhr.setRequestHeader(h, headers[h]);\n }\n });\n\n xhr.send(formData);\n\n return xhr;\n}\n","import type { Editor } from '../editor';\nimport { debug } from '../utils/debug';\nimport { request } from '../utils/request';\nimport { Box } from '../models/box';\n\ntype UploadConfig = {\n editor: Editor;\n name: string;\n file: File;\n onError?: (error: string)=> void;\n onSuccess?: ()=> void;\n};\n\n// Uploads a file to the server.\nexport function uploadFile(config: UploadConfig): Box {\n const { editor, name, file, onError, onSuccess} = config;\n const { requestMethod, requestAction, requestTypes } = editor.config[name];\n if (requestTypes.indexOf(file.type) < 0) {\n if (onError) {\n onError(`File \"${file.name}\" is not allowed for uploading.`);\n }\n throw new Error(`Cannot upload file \"${file.name}\" because its type \"${file.type}\" is not found in ['${requestTypes.join('\\', \\'')}'].`);\n }\n const box = editor.selection.insertBox(name, {\n url: URL.createObjectURL(file),\n status: 'uploading',\n name: file.name,\n size: file.size,\n type: file.type,\n lastModified: file.lastModified,\n });\n let xhr: XMLHttpRequest | null = request({\n onProgress: e => {\n const percentNode = box.node.find('.lake-percent');\n const percent = Math.round(e.percent);\n percentNode.text(`${percent < 100 ? percent : 99} %`);\n },\n onError: (error, body) => {\n xhr = null;\n debug(error.toString(), body);\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError(error.toString());\n }\n },\n onSuccess: body => {\n xhr = null;\n if (!body.url) {\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError('Cannot find the url field.');\n }\n return;\n }\n box.updateValue({\n status: 'done',\n url: body.url,\n });\n box.render();\n editor.history.save();\n if (onSuccess) {\n onSuccess();\n }\n },\n file,\n action: requestAction,\n method: requestMethod,\n });\n box.event.on('beforeunmount', () => {\n if (xhr) {\n xhr.abort();\n debug('Upload canceled');\n }\n });\n return box;\n}\n","import { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\n\ntype ButtonConfig = {\n root: Nodes;\n name: string;\n type?: 'primary' | 'default';\n icon?: string;\n text?: string;\n tooltip?: string;\n tabIndex?: number;\n onClick: () => void;\n}\n\n// The Button interface represents a UI component clicked by a user. Once clicked, it then performs an action.\nexport class Button {\n private readonly config: ButtonConfig;\n\n private readonly root: Nodes;\n\n // A button element.\n public readonly node: Nodes;\n\n constructor(config: ButtonConfig) {\n this.config = config;\n this.root = config.root;\n this.node = query(template`\n <button type=\"button\" name=\"${config.name}\" class=\"lake-button\" />\n `);\n if (config.type) {\n this.node.addClass(`lake-${config.type}-button`);\n }\n if (config.tabIndex !== undefined) {\n this.node.attr('tabindex', config.tabIndex.toString());\n }\n }\n\n // Renders the button.\n public render(): void {\n const config = this.config;\n const buttonNode = this.node;\n buttonNode.addClass(`lake-${config.text ? 'text' : 'icon'}-button`);\n if (config.tooltip) {\n buttonNode.attr('title', config.tooltip);\n }\n if (config.icon) {\n buttonNode.append(config.icon);\n }\n if (config.text) {\n buttonNode.append(`<span>${config.text}</span>`);\n }\n this.root.append(buttonNode);\n buttonNode.on('mouseenter', () => {\n if (buttonNode.attr('disabled')) {\n return;\n }\n if (buttonNode.hasClass('lake-button-selected')) {\n return;\n }\n buttonNode.addClass('lake-button-hovered');\n });\n buttonNode.on('mouseleave', () => {\n if (buttonNode.attr('disabled')) {\n return;\n }\n buttonNode.removeClass('lake-button-hovered');\n });\n buttonNode.on('click', event => {\n event.preventDefault();\n config.onClick();\n });\n }\n}\n","// The unsafeTemplate function is a tag function for removing whitespace or line terminator character.\nexport function unsafeTemplate(strings: TemplateStringsArray, ...keys: any[]): string {\n let content = strings[0];\n for (let i = 0; i < keys.length; i++) {\n const key = String(keys[i]);\n content += key;\n content += strings[i + 1];\n }\n content = content.\n replace(/^\\s+/gm, '').\n replace(/\\s+$/gm, '').\n replace(/[\\r\\n]/g, '');\n return content;\n}\n","// Returns the text of keyboard shortcuts used for a tooltip or help.\n// Mac: mod+Z returns ⌘+Z\n// Windows / Linux: mod+Z returns Ctrl+Z\nexport function modifierText(value: string, userAgent?: string): string {\n // for generating i18n files\n if (typeof window === 'undefined') {\n return value;\n }\n userAgent = userAgent ?? navigator.userAgent;\n const isMac = userAgent.indexOf('Mac OS X') >= 0;\n const modText = isMac ? '⌘' : 'Ctrl';\n return value.replace(/(^|\\+|\\s)mod(\\+|\\s|$)/g, `$1${modText}$2`);\n}\n","import type { BaseTranslation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `Undo (${modifierText('mod+Z')})`,\n redo: `Redo (${modifierText('mod+Y')})`,\n selectAll: `Select all (${modifierText('mod+A')})`,\n paragraph: 'Paragraph',\n blockQuote: 'Block quotation',\n numberedList: 'Numbered list',\n bulletedList: 'Bulleted list',\n checklist: 'Checklist',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n alignJustify: 'Justify',\n increaseIndent: 'Increase indent',\n decreaseIndent: 'Decrease indent',\n bold: `Bold (${modifierText('mod+B')})`,\n italic: `Italic (${modifierText('mod+I')})`,\n underline: `Underline (${modifierText('mod+U')})`,\n strikethrough: 'Strikethrough',\n superscript: 'Superscript',\n subscript: 'Subscript',\n code: 'Inline code',\n removeFormat: 'Remove format',\n formatPainter: 'Format painter',\n link: 'Link',\n hr: 'Horizontal line',\n video: 'Video',\n codeBlock: 'Code block',\n heading: 'Heading',\n heading1: 'Heading 1',\n heading2: 'Heading 2',\n heading3: 'Heading 3',\n heading4: 'Heading 4',\n heading5: 'Heading 5',\n heading6: 'Heading 6',\n list: 'List',\n table: 'Table',\n align: 'Alignment',\n indent: 'Indent',\n fontFamily: 'Font family',\n fontSize: 'Font size',\n moreStyle: 'More style',\n fontColor: 'Font color',\n highlight: 'Highlight',\n image: 'Image',\n file: 'File',\n emoji: 'Emoji',\n equation: 'Mathematical formula',\n removeColor: 'Remove color',\n },\n slash: {\n heading1: 'Heading 1',\n heading1Desc: 'Create a heading level 1',\n heading2: 'Heading 2',\n heading2Desc: 'Create a heading level 2',\n heading3: 'Heading 3',\n heading3Desc: 'Create a heading level 3',\n heading4: 'Heading 4',\n heading4Desc: 'Create a heading level 4',\n heading5: 'Heading 5',\n heading5Desc: 'Create a heading level 5',\n heading6: 'Heading 6',\n heading6Desc: 'Create a heading level 6',\n paragraph: 'Paragraph',\n paragraphDesc: 'Create a paragraph',\n blockQuote: 'Block quotation',\n blockQuoteDesc: 'Create a block quotation',\n numberedList: 'Numbered list',\n numberedListDesc: 'Create a numbered list',\n bulletedList: 'Bulleted list',\n bulletedListDesc: 'Create a bulleted list',\n checklist: 'Checklist',\n checklistDesc: 'Create a checklist',\n table: 'Table',\n tableDesc: 'Insert a table',\n infoAlert: 'Info alert',\n infoAlertDesc: 'Create an info alert',\n tipAlert: 'Tip alert',\n tipAlertDesc: 'Create a tip alert',\n warningAlert: 'Warning alert',\n warningAlertDesc: 'Create a warning alert',\n dangerAlert: 'Danger alert',\n dangerAlertDesc: 'Create a danger alert',\n hr: 'Horizontal line',\n hrDesc: 'Insert a horizontal line',\n codeBlock: 'Code block',\n codeBlockDesc: 'Insert a code block',\n video: 'Video',\n videoDesc: 'Insert a video from YouTube',\n equation: 'Mathematical formula',\n equationDesc: 'Insert a TeX expression',\n image: 'Image',\n imageDesc: 'Upload an image',\n file: 'File',\n fileDesc: 'Upload a file',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: 'Text to display',\n copy: 'Copy link to clipboard',\n open: 'Open link in new tab',\n save: 'Save',\n unlink: 'Remove link',\n },\n table: {\n fitTable: 'Fit table to page width',\n cellBackground: 'Cell background color',\n column: 'Column',\n insertColumnLeft: 'Insert column left',\n insertColumnRight: 'Insert column right',\n deleteColumn: 'Delete column',\n row: 'Row',\n insertRowAbove: 'Insert row above',\n insertRowBelow: 'Insert row below',\n deleteRow: 'Delete row',\n merge: 'Merge cells',\n mergeUp: 'Merge cell up',\n mergeRight: 'Merge cell right',\n mergeDown: 'Merge cell down',\n mergeLeft: 'Merge cell left',\n split: 'Split cell',\n splitLeftRight: 'Split cell left and right',\n splitTopBottom: 'Split cell top and bottom',\n remove: 'Remove table',\n },\n image: {\n view: 'Full screen',\n remove: 'Delete',\n previous: 'Previous',\n next: 'Next',\n close: 'Close (Esc)',\n loadingError: 'Unable to load image.',\n zoomOut: 'Zoom out',\n zoomIn: 'Zoom in',\n align: 'Alignment',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n resize: 'Resize image',\n pageWidth: 'Page width',\n originalWidth: 'Original image width',\n imageWidth: '{0} image width',\n open: 'Open image in new tab',\n caption: 'Caption',\n captionPlaceholder: 'Write a caption...',\n },\n file: {\n download: 'Download',\n remove: 'Delete',\n },\n video: {\n embed: 'Embed video',\n remove: 'Delete',\n description: 'Paste a link to embed a video from YouTube.',\n url: 'Link',\n urlError: 'Please enter a valid link.',\n },\n codeBlock: {\n langType: 'Select language',\n },\n equation: {\n save: 'Done',\n help: 'Supported functions',\n placeholder: 'Type a TeX expression...',\n },\n} satisfies BaseTranslation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `撤消 (${modifierText('mod+Z')})`,\n redo: `重做 (${modifierText('mod+Y')})`,\n selectAll: `全选 (${modifierText('mod+A')})`,\n paragraph: '正文',\n blockQuote: '引用',\n numberedList: '编号',\n bulletedList: '项目符号',\n checklist: '任务列表',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n alignJustify: '两端对齐',\n increaseIndent: '增加缩进',\n decreaseIndent: '减少缩进',\n bold: `粗体 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下划线 (${modifierText('mod+U')})`,\n strikethrough: '删除线',\n superscript: '上标',\n subscript: '下标',\n code: '行内代码',\n removeFormat: '清除格式',\n formatPainter: '格式刷',\n link: '链接',\n hr: '分割线',\n video: '视频',\n codeBlock: '代码块',\n heading: '标题',\n heading1: '标题 1',\n heading2: '标题 2',\n heading3: '标题 3',\n heading4: '标题 4',\n heading5: '标题 5',\n heading6: '标题 6',\n list: '列表',\n table: '表格',\n align: '对齐方式',\n indent: '缩进',\n fontFamily: '字体',\n fontSize: '文字大小',\n moreStyle: '更多样式',\n fontColor: '文字颜色',\n highlight: '文字背景',\n image: '图片',\n file: '文件',\n emoji: '表情',\n equation: '数学公式',\n removeColor: '默认',\n },\n slash: {\n heading1: '标题 1',\n heading1Desc: '创建标题 1',\n heading2: '标题 2',\n heading2Desc: '创建标题 2',\n heading3: '标题 3',\n heading3Desc: '创建标题 3',\n heading4: '标题 4',\n heading4Desc: '创建标题 4',\n heading5: '标题 5',\n heading5Desc: '创建标题 5',\n heading6: '标题 6',\n heading6Desc: '创建标题 6',\n paragraph: '正文',\n paragraphDesc: '把当前段落改成正文',\n blockQuote: '引用',\n blockQuoteDesc: '创建引用',\n numberedList: '编号',\n numberedListDesc: '创建编号列表',\n bulletedList: '项目符号',\n bulletedListDesc: '创建项目符号列表',\n checklist: '任务列表',\n checklistDesc: '创建任务列表',\n table: '表格',\n tableDesc: '插入表格',\n infoAlert: '信息块',\n infoAlertDesc: '创建信息块',\n tipAlert: '提示块',\n tipAlertDesc: '创建提示块',\n warningAlert: '警告块',\n warningAlertDesc: '创建警告块',\n dangerAlert: '危险警告块',\n dangerAlertDesc: '创建危险警告块',\n hr: '分割线',\n hrDesc: '插入分割线',\n codeBlock: '代码块',\n codeBlockDesc: '插入代码块',\n video: '视频',\n videoDesc: '插入 YouTube 视频',\n equation: '数学公式',\n equationDesc: '支持 TeX 语法',\n image: '图片',\n imageDesc: '上传图片',\n file: '文件',\n fileDesc: '上传文件',\n },\n link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n table: {\n fitTable: '自适应宽度',\n cellBackground: '单元格背景颜色',\n column: '列',\n insertColumnLeft: '左侧插入列',\n insertColumnRight: '右侧插入列',\n deleteColumn: '删除列',\n row: '行',\n insertRowAbove: '上方插入行',\n insertRowBelow: '下方插入行',\n deleteRow: '删除行',\n merge: '合并单元格',\n mergeUp: '向上合并单元格',\n mergeRight: '向右合并单元格',\n mergeDown: '向下合并单元格',\n mergeLeft: '向左合并单元格',\n split: '拆分单元格',\n splitLeftRight: '左右拆分单元格',\n splitTopBottom: '上下拆分单元格',\n remove: '删除表格',\n },\n image: {\n view: '查看大图',\n remove: '删除',\n previous: '上一张',\n next: '下一张',\n close: '关闭 (Esc)',\n loadingError: '图片加载失败',\n zoomOut: '缩小',\n zoomIn: '放大',\n align: '对齐方式',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n resize: '调整图片大小',\n pageWidth: '图片适应页面大小',\n originalWidth: '图片原始大小',\n imageWidth: '{0} 图片大小',\n open: '在新标签页中打开图片',\n caption: '图片描述',\n captionPlaceholder: '请输入图片描述',\n },\n file: {\n download: '下载',\n remove: '删除',\n },\n video: {\n embed: '嵌入视频',\n remove: '删除',\n description: '在下面的输入框里,粘贴 YouTube 链接。',\n url: '链接',\n urlError: '请输入有效的链接。',\n },\n codeBlock: {\n langType: '选择代码语言',\n },\n equation: {\n save: '确定',\n help: '支持的功能',\n placeholder: '请输入 TeX 表达式',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `元に戻す (${modifierText('mod+Z')})`,\n redo: `やり直し (${modifierText('mod+Y')})`,\n selectAll: `すべて選択 (${modifierText('mod+A')})`,\n paragraph: '本文',\n blockQuote: '引用',\n numberedList: '番号付きリスト',\n bulletedList: '箇条書きリスト',\n checklist: 'チェックリスト',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n alignJustify: '両端揃え',\n increaseIndent: 'インデントを増やす',\n decreaseIndent: 'インデントを減らす',\n bold: `太字 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下線 (${modifierText('mod+U')})`,\n strikethrough: '取り消し線',\n superscript: '上付き文字',\n subscript: '下付き文字',\n code: 'インラインコード',\n removeFormat: '形式を削除',\n formatPainter: '形式ペインタ',\n link: 'リンク',\n hr: '区切り線',\n video: '動画',\n codeBlock: 'コードブロック',\n heading: '見出し',\n heading1: '見出し 1',\n heading2: '見出し 2',\n heading3: '見出し 3',\n heading4: '見出し 4',\n heading5: '見出し 5',\n heading6: '見出し 6',\n list: 'リスト',\n table: 'テーブル',\n align: '整列',\n indent: 'インデント',\n fontFamily: 'フォント',\n fontSize: 'フォントサイズ',\n moreStyle: 'その他のスタイル',\n fontColor: '文字色',\n highlight: 'ハイライト',\n image: '画像',\n file: 'ファイル',\n emoji: '絵文字',\n equation: '数式',\n removeColor: 'デフォルト',\n },\n slash: {\n heading1: '見出し 1',\n heading1Desc: 'レベル 1 の見出しを作成',\n heading2: '見出し 2',\n heading2Desc: 'レベル 2 の見出しを作成',\n heading3: '見出し 3',\n heading3Desc: 'レベル 3 の見出しを作成',\n heading4: '見出し 4',\n heading4Desc: 'レベル 4 の見出しを作成',\n heading5: '見出し 5',\n heading5Desc: 'レベル 5 の見出しを作成',\n heading6: '見出し 6',\n heading6Desc: 'レベル 6 の見出しを作成',\n paragraph: '本文',\n paragraphDesc: '段落を作成',\n blockQuote: '引用',\n blockQuoteDesc: '引用を作成',\n numberedList: '番号付きリスト',\n numberedListDesc: '番号付きリストを作成',\n bulletedList: '箇条書きリスト',\n bulletedListDesc: '箇条書きリストを作成',\n checklist: 'チェックリスト',\n checklistDesc: 'チェックリストを作成',\n table: 'テーブル',\n tableDesc: 'テーブルを挿入',\n infoAlert: '情報ブロック',\n infoAlertDesc: '情報ブロックを作成',\n tipAlert: 'ヒントブロック',\n tipAlertDesc: 'ヒントブロックを作成',\n warningAlert: '警告ブロック',\n warningAlertDesc: '警告ブロックを作成',\n dangerAlert: '危険ブロック',\n dangerAlertDesc: '危険ブロックを作成',\n hr: '区切り線',\n hrDesc: '水平線を挿入',\n codeBlock: 'コードブロック',\n codeBlockDesc: 'コードブロックを挿入',\n video: '動画',\n videoDesc: 'YouTube から動画を挿入',\n equation: '数式',\n equationDesc: 'TeX 数式を挿入',\n image: '画像',\n imageDesc: '画像をアップロード',\n file: 'ファイル',\n fileDesc: 'ファイルをアップロード',\n },\n link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンクテキスト',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '保存',\n unlink: 'リンクを削除',\n },\n table: {\n fitTable: 'ページ幅に合わせる',\n cellBackground: 'セルの背景色',\n column: '列',\n insertColumnLeft: '左に列を挿入',\n insertColumnRight: '右に列を挿入',\n deleteColumn: '列を削除',\n row: '行',\n insertRowAbove: '上に行を挿入',\n insertRowBelow: '下に行を挿入',\n deleteRow: '行を削除',\n merge: 'セルを結合',\n mergeUp: '上方向にセルを結合',\n mergeRight: '右方向にセルを結合',\n mergeDown: '下方向にセルを結合',\n mergeLeft: '左方向にセルを結合',\n split: 'セルを分割',\n splitLeftRight: 'セルを左右に分割',\n splitTopBottom: 'セルを上下に分割',\n remove: 'テーブルを削除',\n },\n image: {\n view: '大きな画像を見る',\n remove: '削除',\n previous: '前の画像',\n next: '次の画像',\n close: '閉じる (Esc)',\n loadingError: '画像を読み込めません',\n zoomOut: '縮小',\n zoomIn: '拡大',\n align: '整列',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n resize: '画像サイズを調整',\n pageWidth: 'ページ幅',\n originalWidth: '画像の元のサイズ',\n imageWidth: '{0} 画像サイズ',\n open: '新しいタブで画像を開く',\n caption: 'キャプション',\n captionPlaceholder: 'キャプションを入力してください',\n },\n file: {\n download: 'ダウンロード',\n remove: '削除',\n },\n video: {\n embed: '動画を埋め込む',\n remove: '削除',\n description: '下の入力欄に YouTube リンクを貼り付けてください。',\n url: 'リンク',\n urlError: '有効なリンクを入力してください。',\n },\n codeBlock: {\n langType: 'コード言語を選択',\n },\n equation: {\n save: '保存',\n help: 'サポートされている機能',\n placeholder: 'TeX 数式を入力してください',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `작업취소 (${modifierText('mod+Z')})`,\n redo: `다시 실행 (${modifierText('mod+Y')})`,\n selectAll: `전체 선택 (${modifierText('mod+A')})`,\n paragraph: '텍스트',\n blockQuote: '인용문',\n numberedList: '순서 목록',\n bulletedList: '비순서 목록',\n checklist: '체크리스트',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n alignJustify: '좌우로 정렬',\n increaseIndent: '들여쓰기 증가',\n decreaseIndent: '들여쓰기 줄이기',\n bold: `굵게 (${modifierText('mod+B')})`,\n italic: `기울임꼴 (${modifierText('mod+I')})`,\n underline: `밑줄 (${modifierText('mod+U')})`,\n strikethrough: '취소선',\n superscript: '위첨자',\n subscript: '아래 첨자',\n code: '인라인 코드',\n removeFormat: '형식 지우기',\n formatPainter: '형식 복사기',\n link: '링크',\n hr: '구분선',\n video: '동영상',\n codeBlock: '코드 블록',\n heading: '제목',\n heading1: '제목 1',\n heading2: '제목 2',\n heading3: '제목 3',\n heading4: '제목 4',\n heading5: '제목 5',\n heading6: '제목 6',\n list: '목록',\n table: '표',\n align: '정렬',\n indent: '들여쓰기',\n fontFamily: '글꼴',\n fontSize: '글자 크기',\n moreStyle: '더 많은 스타일',\n fontColor: '글자 색상',\n highlight: '글자 배경',\n image: '이미지',\n file: '파일',\n emoji: '이모지',\n equation: '수학 공식',\n removeColor: '기본 색상',\n },\n slash: {\n heading1: '제목 1',\n heading1Desc: '1 단계 제목을 작성',\n heading2: '제목 2',\n heading2Desc: '2 단계 제목을 작성',\n heading3: '제목 3',\n heading3Desc: '3 단계 제목을 작성',\n heading4: '제목 4',\n heading4Desc: '4 단계 제목을 작성',\n heading5: '제목 5',\n heading5Desc: '5 단계 제목을 작성',\n heading6: '제목 6',\n heading6Desc: '6 단계 제목을 작성',\n paragraph: '텍스트',\n paragraphDesc: '단락을 작성',\n blockQuote: '인용문',\n blockQuoteDesc: '인용문을 작성',\n numberedList: '순서 목록',\n numberedListDesc: '순서 목록을 작성',\n bulletedList: '비순서 목록',\n bulletedListDesc: '비순서 목록을 작성',\n checklist: '체크리스트',\n checklistDesc: '체크리스트를 작성',\n table: '표',\n tableDesc: '표를 삽입',\n infoAlert: '정보 블록',\n infoAlertDesc: '정보 블록을 작성',\n tipAlert: '팁 블록',\n tipAlertDesc: '팁 블록을 작성',\n warningAlert: '경고 블록',\n warningAlertDesc: '경고 블록을 작성',\n dangerAlert: '위험 블록',\n dangerAlertDesc: '위험 블록을 작성',\n hr: '구분선',\n hrDesc: '구분선을 삽입',\n codeBlock: '코드 블록',\n codeBlockDesc: '코드 블록을 삽입',\n video: '동영상',\n videoDesc: '유튜브 동영상을 삽입',\n equation: '수학 공식',\n equationDesc: 'TeX 수식을 삽입',\n image: '이미지',\n imageDesc: '이미지를 업로드',\n file: '파일',\n fileDesc: '파일을 업로드',\n },\n link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '저장',\n unlink: '링크 제거',\n },\n table: {\n fitTable: '페이지 너비에 맞게 조정',\n cellBackground: '셀 배경 색상',\n column: '열',\n insertColumnLeft: '왼쪽에 열을 삽입',\n insertColumnRight: '오른쪽에 열을 삽입',\n deleteColumn: '열을 삭제',\n row: '행',\n insertRowAbove: '위에 행을 삽입',\n insertRowBelow: '아래에 행을 삽입',\n deleteRow: '행을 삭제',\n merge: '셀을 병합',\n mergeUp: '위쪽으로 셀을 병합',\n mergeRight: '오른쪽으로 셀을 병합',\n mergeDown: '아래쪽으로 셀을 병합',\n mergeLeft: '왼쪽으로 셀을 병합',\n split: '셀을 분할',\n splitLeftRight: '셀을 좌우로 분할',\n splitTopBottom: '셀을 상하로 분할',\n remove: '표를 삭제',\n },\n image: {\n view: '큰 이미지 보기',\n remove: '삭제',\n previous: '이전 이미지',\n next: '다음 이미지',\n close: '닫기 (Esc)',\n loadingError: '이미지를 로드할 수 없습니다',\n zoomOut: '축소',\n zoomIn: '확대',\n align: '정렬',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n resize: '이미지 크기 조정',\n pageWidth: '페이지 너비',\n originalWidth: '원본 이미지 크기',\n imageWidth: '{0} 이미지 크기',\n open: '새 탭에서 이미지 열기',\n caption: '캡션',\n captionPlaceholder: '캡션을 입력하세요',\n },\n file: {\n download: '다운로드',\n remove: '삭제',\n },\n video: {\n embed: '동영상 삽입',\n remove: '삭제',\n description: '아래 입력란에 YouTube 링크를 붙여넣으세요.',\n url: '링크',\n urlError: '유효한 링크를 입력하세요.',\n },\n codeBlock: {\n langType: '코드 언어 선택',\n },\n equation: {\n save: '저장',\n help: '지원되는 기능',\n placeholder: 'TeX 수식을 입력하세요',\n },\n} satisfies Translation;\n","import { i18nObject as initI18nObject, type FormattersInitializer } from 'typesafe-i18n';\nimport type { Formatters, Locales, Translations, TranslationFunctions } from './types';\n\nimport enUS from './en-US';\nimport zhCN from './zh-CN';\nimport ja from './ja';\nimport ko from './ko';\n\nconst localeTranslations = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n ja,\n ko,\n};\n\nconst locales: Locales[] = Object.keys(localeTranslations) as Locales[];\n\nconst loadedLocales: Record<Locales, Translations> = {} as Record<Locales, Translations>;\nconst loadedFormatters: Record<Locales, Formatters> = {} as Record<Locales, Formatters>;\n\nconst initFormatters: FormattersInitializer<Locales, Formatters> = () => {\n const formatters: Formatters = {\n // add your formatter functions here\n };\n return formatters;\n};\n\nconst loadFormatters = (locale: Locales): void => {\n loadedFormatters[locale] = initFormatters(locale);\n};\n\nconst loadLocale = (locale: Locales): void => {\n if (loadedLocales[locale]) {\n return;\n }\n loadedLocales[locale] = localeTranslations[locale] as Translations;\n loadFormatters(locale);\n};\n\nconst loadAllLocales = (): void => locales.forEach(loadLocale);\n\nexport const i18nObject = (locale: Locales): TranslationFunctions =>\n initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(\n locale,\n loadedLocales[locale],\n loadedFormatters[locale],\n );\n\nloadAllLocales();\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n DropdownLocation, DropdownDirection,\n DropdownItem, DropdownMenuItem,\n} from '../types/dropdown';\nimport { icons } from '../icons';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { unsafeTemplate } from '../utils/unsafe-template';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ntype DropdownConfig = DropdownItem & {\n root: Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n location?: DropdownLocation;\n direction?: DropdownDirection;\n onSelect: (value: string) => void;\n};\n\n// The Dropdown interface represents a UI component that provides a menu of options.\nexport class Dropdown {\n private readonly config: DropdownConfig;\n\n private readonly root: Nodes;\n\n private readonly locale: TranslationFunctions;\n\n private readonly location: DropdownLocation;\n\n private readonly direction: DropdownDirection;\n\n private readonly menuNode: Nodes;\n\n // An element to which the contents of the dropdown are appended.\n public readonly node: Nodes;\n\n constructor(config: DropdownConfig) {\n this.config = config;\n this.root = config.root;\n this.locale = config.locale || i18nObject('en-US');\n this.location = config.location || 'local';\n this.direction = config.direction || 'auto';\n this.node = query(template`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\">\n <button type=\"button\" name=\"${config.name}\" class=\"lake-dropdown-title\">\n <div class=\"lake-dropdown-${config.icon ? 'icon' : 'text'}\"></div>\n <div class=\"lake-dropdown-down-icon\"></div>\n </button>\n </div>\n `);\n this.menuNode = query('<ul class=\"lake-popup lake-dropdown-menu\" />');\n if (config.tabIndex !== undefined) {\n const titleNode = this.node.find('.lake-dropdown-title');\n titleNode.attr('tabindex', config.tabIndex.toString());\n }\n }\n\n // Returns the value of the node.\n public static getValue(node: Nodes): string[] {\n const value = node.attr('value');\n if (value === '') {\n return [];\n }\n return JSON.parse(fromBase64(value));\n }\n\n // Updates the value of the node.\n public static setValue(node: Nodes, value: string[]): void {\n node.attr('value', toBase64(JSON.stringify(value)));\n }\n\n public static getMenuMap(menuItems: DropdownMenuItem[], locale: TranslationFunctions): Map<string, string> {\n const menuMap: Map<string, string> = new Map();\n for (const menuItem of menuItems) {\n // remove HTML tags\n let text = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(locale);\n text = text.replace(/<[^>]*>/g, '');\n menuMap.set(menuItem.value, text);\n }\n return menuMap;\n }\n\n private updateColorAccent(titleNode: Nodes, value: string): void {\n const svgNode = titleNode.find('.lake-dropdown-icon svg').eq(1);\n const lineNode = svgNode.find('line');\n if (lineNode.length > 0) {\n lineNode.attr('stroke', value);\n } else {\n svgNode.find('path').attr('fill', value);\n }\n }\n\n private apppendMenuItems(menuNode: Nodes): void {\n const config = this.config;\n for (const menuItem of config.menuItems) {\n const menuText = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(this.locale);\n const listContent = unsafeTemplate`\n <li value=\"${encode(menuItem.value)}\">\n <div class=\"lake-dropdown-menu-text\">${menuText}</div>\n </li>\n `;\n const listNode = query(listContent);\n menuNode.append(listNode);\n listNode.on('mouseenter', () => {\n if (listNode.hasClass('lake-dropdown-item-selected')) {\n return;\n }\n listNode.addClass('lake-dropdown-item-hovered');\n });\n listNode.on('mouseleave', () => {\n listNode.removeClass('lake-dropdown-item-hovered');\n });\n if (config.menuType === 'character') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').text(menuItem.value);\n } else if (config.menuType === 'color') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').css('background-color', menuItem.value);\n }\n if (menuItem.icon) {\n const menuIconNode = query('<div class=\"lake-dropdown-menu-icon\"></div>');\n menuIconNode.append(menuItem.icon);\n listNode.prepend(menuIconNode);\n }\n const checkIcon = icons.get('check');\n if (checkIcon) {\n const checkNode = query('<div class=\"lake-dropdown-menu-check\"></div>');\n checkNode.append(checkIcon);\n listNode.prepend(checkNode);\n }\n }\n }\n\n private clickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n this.hideMenu();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private appendMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n const titleNode = this.node.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n menuNode.addClass(`lake-${config.menuType}-dropdown-menu`);\n if (config.menuWidth) {\n menuNode.css('width', config.menuWidth);\n }\n if (config.menuHeight) {\n menuNode.addClass('lake-dropdown-menu-with-scroll');\n menuNode.css('height', config.menuHeight);\n }\n this.apppendMenuItems(menuNode);\n if (this.location === 'local') {\n this.node.append(menuNode);\n } else {\n query(document.body).append(menuNode);\n }\n menuNode.on('click', event => {\n event.preventDefault();\n event.stopPropagation();\n const listItem = query(event.target as Node).closest('li');\n if (listItem.length === 0) {\n return;\n }\n const value = listItem.attr('value');\n Dropdown.setValue(this.node, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n this.node.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n this.hideMenu();\n });\n }\n\n private updatePosition(): void {\n const menuNode = this.menuNode;\n const dropdownNativeNode = this.node.get(0) as HTMLElement;\n const dropdownRect = dropdownNativeNode.getBoundingClientRect();\n // A overflow width on the left side, greater than 0 indicates an overflow.\n const leftOverflow = menuNode.width() - (dropdownRect.x + dropdownRect.width);\n // A overflow width on the right side, greater than 0 indicates an overflow.\n const rightOverflow = dropdownRect.x + menuNode.width() - window.innerWidth;\n const rightToLeft = rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow);\n if (this.location === 'local') {\n if (rightToLeft) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n if (this.direction === 'top') {\n menuNode.css('top', 'auto');\n menuNode.css('bottom', `${dropdownRect.height}px`);\n }\n return;\n }\n // A overflow width on the bottom side, greater than 0 indicates an overflow.\n const bottomOverflow = dropdownRect.y + dropdownRect.height + menuNode.height() - window.innerHeight;\n const dropdownX = dropdownRect.x + window.scrollX;\n const dropdownY = dropdownRect.y + window.scrollY;\n if (rightToLeft) {\n menuNode.css('left', `${dropdownX - menuNode.width() + dropdownRect.width}px`);\n } else {\n menuNode.css('left', `${dropdownX}px`);\n }\n if (bottomOverflow > 0) {\n menuNode.css('top', `${dropdownY - menuNode.height()}px`);\n } else {\n menuNode.css('top', `${dropdownY + dropdownRect.height}px`);\n }\n }\n\n private showMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n if (!menuNode.get(0).isConnected) {\n this.appendMenu();\n }\n if (this.node.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(this.node);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n if (config.menuCheck !== false) {\n menuNode.find('li').each(node => {\n const listNode = query(node);\n if (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n }\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n this.updatePosition();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n menuNode.css('visibility', '');\n }\n\n private hideMenu(): void {\n this.menuNode.hide();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n }\n\n // Renders the dropdown.\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const titleNode = this.node.find('.lake-dropdown-title');\n if (!config.downIcon) {\n titleNode.addClass('lake-dropdown-title-no-down');\n }\n if (config.width) {\n titleNode.css('width', config.width);\n }\n const tooltip = typeof config.tooltip === 'string' ? config.tooltip : config.tooltip(this.locale);\n titleNode.attr('title', tooltip);\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n if (config.icon) {\n iconNode.append(config.icon);\n }\n if (config.accentIcon) {\n iconNode.append(config.accentIcon);\n }\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n if (config.downIcon) {\n downIconNode.append(config.downIcon);\n }\n Dropdown.setValue(this.node, [defaultValue]);\n if (textNode.length > 0) {\n const menuMap = Dropdown.getMenuMap(config.menuItems, this.locale);\n textNode.text(menuMap.get(defaultValue) ?? defaultValue);\n }\n if (config.menuType === 'color') {\n this.updateColorAccent(titleNode, defaultValue);\n }\n this.node.append(titleNode);\n this.root.append(this.node);\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n iconNode.addClass('lake-dropdown-icon-hovered');\n });\n iconNode.on('mouseleave', () => {\n iconNode.removeClass('lake-dropdown-icon-hovered');\n });\n downIconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n downIconNode.addClass('lake-dropdown-down-icon-hovered');\n });\n downIconNode.on('mouseleave', () => {\n downIconNode.removeClass('lake-dropdown-down-icon-hovered');\n });\n } else {\n titleNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n titleNode.addClass('lake-dropdown-title-hovered');\n });\n titleNode.on('mouseleave', () => {\n titleNode.removeClass('lake-dropdown-title-hovered');\n });\n }\n if (config.menuType === 'color') {\n iconNode.on('click', event => {\n event.preventDefault();\n if (this.node.attr('disabled')) {\n return;\n }\n const value = this.node.attr('color') || config.defaultValue || '';\n config.onSelect(value);\n });\n }\n const triggerNode = (config.menuType === 'color' && downIconNode) ? downIconNode : titleNode;\n triggerNode.on('click', event => {\n event.preventDefault();\n this.showMenu();\n });\n }\n\n // Destroys the dropdown.\n public unmount(): void {\n this.hideMenu();\n this.menuNode.remove();\n this.node.remove();\n }\n}\n","import type { Editor } from '../editor';\nimport { SelectionState } from '../types/selection';\nimport { ToolbarButtonItem, ToolbarDropdownItem, ToolbarUploadItem, ToolbarItem } from '../types/toolbar';\nimport { toolbarItems } from '../config/toolbar-items';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { uploadFile } from '../utils/upload-file';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { Dropdown } from './dropdown';\n\ntype ToolbarPlacement = 'top' | 'bottom';\n\nexport type ToolbarConfig = {\n root?: string | Node | Nodes;\n items?: (string | ToolbarItem)[];\n placement?: ToolbarPlacement;\n};\n\nconst defaultItems: string[] = [\n 'undo',\n 'redo',\n '|',\n 'heading',\n '|',\n 'formatPainter',\n 'removeFormat',\n 'bold',\n 'moreStyle',\n '|',\n 'fontColor',\n 'highlight',\n '|',\n 'align',\n 'list',\n 'indent',\n 'link',\n 'blockQuote',\n 'hr',\n];\n\nconst toolbarItemMap: Map<string, ToolbarItem> = new Map();\n\nfor (const item of toolbarItems) {\n toolbarItemMap.set(item.name, item);\n}\n\n// The Toolbar interface provides properties and methods for rendering and manipulating the toolbar.\nexport class Toolbar {\n\n private items: (string | ToolbarItem)[];\n\n private placement: ToolbarPlacement = 'top';\n\n private allMenuMap: Map<string, Map<string, string>> = new Map();\n\n private buttonItemList: ToolbarButtonItem[] = [];\n\n private dropdownItemList: ToolbarDropdownItem[] = [];\n\n private dropdownList: Dropdown[] = [];\n\n public root: Nodes;\n\n public container: Nodes;\n\n constructor(config: ToolbarConfig) {\n this.root = query(config.root || document.body);\n this.items = config.items || defaultItems;\n if (config.placement) {\n this.placement = config.placement;\n }\n this.container = query('<div class=\"lake-toolbar\" />');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendNormalButton(editor: Editor, item: ToolbarButtonItem): void {\n const button = new Button({\n root: this.container,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n item.onClick(editor, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(editor: Editor, item: ToolbarDropdownItem): void {\n const dropdown = new Dropdown({\n root: this.container,\n locale: editor.locale,\n name: item.name,\n icon: item.icon,\n accentIcon: item.accentIcon,\n downIcon: item.downIcon,\n defaultValue: item.defaultValue,\n tooltip: item.tooltip,\n width: item.width,\n menuType: item.menuType,\n menuItems: item.menuItems,\n menuWidth: item.menuWidth,\n menuHeight: item.menuHeight,\n menuCheck: item.menuCheck,\n tabIndex: -1,\n location: 'local',\n direction: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n this.dropdownList.push(dropdown);\n }\n\n private appendUploadButton(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(template`\n <div class=\"lake-upload\" name=\"${item.name}\">\n <input type=\"file\" />\n </div>\n `);\n const fileNode = uploadNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n const button = new Button({\n root: uploadNode,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n fileNativeNode.click();\n },\n });\n button.render();\n this.container.append(uploadNode);\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => {\n const target = event.target as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n });\n }\n\n // Update the state of each item in the toolbar, such as whether it is selected, disabled.\n public updateState(state: SelectionState = {\n activeItems: [],\n }): void {\n const { activeItems } = state;\n const disabledNameMap = state.disabledNameMap || new Map();\n const selectedNameMap = state.selectedNameMap || new Map();\n const selectedValuesMap = state.selectedValuesMap || new Map();\n if (!this.container.get(0).isConnected) {\n return;\n }\n for (const item of this.buttonItemList) {\n const selectedClass = 'lake-button-selected';\n const buttonNode = this.container.find(`button[name=\"${item.name}\"]`);\n let isDisabled = disabledNameMap.get(item.name);\n if (isDisabled === undefined) {\n isDisabled = item.isDisabled ? item.isDisabled(activeItems) : false;\n }\n if (isDisabled) {\n buttonNode.attr('disabled', 'true');\n buttonNode.removeClass(selectedClass);\n } else {\n buttonNode.removeAttr('disabled');\n }\n if (!isDisabled) {\n let isSelected = selectedNameMap.get(item.name);\n if (isSelected === undefined) {\n isSelected = item.isSelected ? item.isSelected(activeItems) : false;\n }\n if (isSelected) {\n buttonNode.addClass(selectedClass);\n } else {\n buttonNode.removeClass(selectedClass);\n }\n }\n }\n for (const item of this.dropdownItemList) {\n let selectedValues = selectedValuesMap.get(item.name);\n if (selectedValues === undefined) {\n selectedValues = item.selectedValues ? item.selectedValues(activeItems) : [];\n }\n const dropdownNode = this.container.find(`div.lake-dropdown[name=\"${item.name}\"]`);\n let isDisabled = disabledNameMap.get(item.name);\n if (isDisabled === undefined) {\n isDisabled = item.isDisabled ? item.isDisabled(activeItems) : false;\n }\n if (isDisabled) {\n dropdownNode.attr('disabled', 'true');\n } else {\n dropdownNode.removeAttr('disabled');\n }\n if (!isDisabled) {\n Dropdown.setValue(dropdownNode, selectedValues);\n const textNode = dropdownNode.find('.lake-dropdown-text');\n if (textNode.length > 0) {\n const key = selectedValues[0] || item.defaultValue || '';\n const menuMap = this.allMenuMap.get(item.name);\n const text = (menuMap && menuMap.get(key)) ?? key;\n textNode.text(text);\n }\n }\n }\n }\n\n // Renders a toolbar for the specified editor.\n public render(editor: Editor): void {\n this.root.append(this.container);\n for (const name of this.items) {\n if (name === '|') {\n this.appendDivider();\n } else {\n let item;\n if (typeof name === 'string') {\n item = toolbarItemMap.get(name);\n if (!item) {\n throw new Error(`ToolbarItem \"${name}\" has not been defined yet.`);\n }\n } else {\n item = name;\n }\n if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendNormalButton(editor, item);\n } else if (item.type === 'dropdown') {\n this.allMenuMap.set(item.name, Dropdown.getMenuMap(item.menuItems, editor.locale));\n this.dropdownItemList.push(item);\n this.appendDropdown(editor, item);\n } else if (item.type === 'upload') {\n this.appendUploadButton(editor, item);\n }\n }\n }\n }\n\n // Destroys the toolbar.\n public unmount(): void {\n for (const dropdown of this.dropdownList) {\n dropdown.unmount();\n }\n this.container.remove();\n }\n}\n","import { editors } from '../storage/editors';\nimport { visibleInfo } from '../utils/visible-info';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Toolbar, ToolbarConfig } from './toolbar';\n\ntype FloatingToolbarConfig = ToolbarConfig & {\n target: Nodes | Range;\n};\n\n// The FloatingToolbar class, inheriting from the Toolbar class, represents a toolbar that floats at the top of a box.\nexport class FloatingToolbar extends Toolbar {\n\n private range: Range;\n\n constructor(config: FloatingToolbarConfig) {\n super(config);\n if (config.target instanceof Nodes) {\n const range = new Range();\n range.selectNodeContents(config.target);\n this.range = range;\n } else {\n this.range = config.target;\n }\n this.container.removeClass('lake-toolbar');\n this.container.addClass('lake-popup');\n this.container.addClass('lake-floating-toolbar');\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(): void {\n const visible = visibleInfo(this.range);\n if (\n (visible.top === -1 && visible.bottom === -1) ||\n (visible.top === 1 && visible.bottom === 1)\n ) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n this.container.show('flex');\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n let left = Number((rangeX + rangeRect.width / 2 - this.container.width() / 2).toFixed(1));\n let top = Number((rangeY - this.container.height() - 6).toFixed(1));\n const viewport = this.range.commonAncestor.closestScroller();\n const editArea = this.range.commonAncestor.closestContainer();\n const editAreaRect = (editArea.get(0) as Element).getBoundingClientRect();\n let leftEdge = window.scrollX + 6;\n if (viewport.length > 0) {\n leftEdge += editAreaRect.x + (viewport.get(0) as Element).scrollLeft;\n } else {\n leftEdge += editAreaRect.x + window.scrollX;\n }\n const rightEdge = leftEdge + editAreaRect.width - this.container.width() - 12;\n let topEdge = window.scrollY;\n if (viewport.length > 0) {\n topEdge += editAreaRect.y + (viewport.get(0) as Element).scrollTop + 10;\n } else {\n topEdge += editAreaRect.y + window.scrollY;\n }\n if (left < leftEdge) {\n left = leftEdge;\n } else if (left > rightEdge) {\n left = rightEdge;\n }\n if (top < topEdge) {\n top = topEdge;\n }\n this.container.css({\n left: `${left}px`,\n top: `${top}px`,\n });\n }\n\n // Renders a floating toolbar.\n public render(): void {\n const container = this.range.commonAncestor.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error('The range must be within the editing area.');\n }\n super.render(editor);\n this.updatePosition();\n this.updateState();\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n }\n\n // Destroys the floating toolbar.\n public unmount(): void {\n super.unmount();\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n window.removeEventListener('resize', this.resizeListener);\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport type { Editor } from '../editor';\nimport { BoxType, BoxValue } from '../types/box';\nimport { ToolbarItem } from '../types/toolbar';\nimport { boxes } from '../storage/boxes';\nimport { editors } from '../storage/editors';\nimport { debug } from '../utils/debug';\nimport { template } from '../utils/template';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\nimport { FloatingToolbar } from '../ui/floating-toolbar';\n\n// The Box interface represents an embedded content, which is used to enhance editing capability.\nexport class Box {\n // A lake-box element to which the contents of the box are appended.\n public readonly node: Nodes;\n\n // Managing events.\n public readonly event: EventEmitter = new EventEmitter();\n\n // A toolbar for the box.\n public toolbar: FloatingToolbar | null = null;\n\n constructor(node: string | Node | Nodes) {\n if (typeof node === 'string') {\n const component = boxes.get(node);\n if (component === undefined) {\n throw new Error(`Box \"${node}\" has not been defined yet.`);\n }\n const type = encode(component.type);\n const name = encode(component.name);\n this.node = query(template`<lake-box type=\"${type}\" name=\"${name}\"></lake-box>`);\n if (component.value) {\n this.value = component.value;\n }\n } else {\n this.node = query(node);\n const component = boxes.get(this.name);\n if (component === undefined) {\n throw new Error(`Box \"${this.name}\" has not been defined yet.`);\n }\n if (component.value && !this.node.hasAttr('value')) {\n this.value = component.value;\n }\n }\n }\n\n private initiate(): void {\n let container = this.getContainer();\n if (container.length === 0) {\n this.node.html(template`\n <span class=\"lake-box-strip\"><br /></span>\n <div class=\"lake-box-container\" contenteditable=\"false\"></div>\n <span class=\"lake-box-strip\"><br /></span>\n `);\n container = this.getContainer();\n } else {\n container.off('mouseenter');\n container.off('mouseleave');\n container.off('click');\n }\n container.on('mouseenter', () => {\n if (\n container.hasClass('lake-box-selected') ||\n container.hasClass('lake-box-focused') ||\n container.hasClass('lake-box-activated')\n ) {\n return;\n }\n container.addClass('lake-box-hovered');\n });\n container.on('mouseleave', () => {\n container.removeClass('lake-box-hovered');\n });\n container.on('click', () => {\n debug(`Box \"${this.name}\" (id = ${this.node.id}) value:`);\n debug(this.value);\n });\n if (this.type === 'block' && this.node.isContentEditable) {\n container.attr('draggable', 'true');\n }\n }\n\n // Returns the type of the box.\n public get type(): BoxType {\n return this.node.attr('type') as BoxType;\n }\n\n // Returns the name of the box.\n public get name(): string {\n return this.node.attr('name');\n }\n\n // Returns the value of the box.\n public get value(): BoxValue {\n const value = this.node.attr('value');\n if (value === '') {\n return {};\n }\n return JSON.parse(fromBase64(value));\n }\n\n // Sets the value of the box.\n public set value(value: BoxValue) {\n this.node.attr('value', toBase64(JSON.stringify(value)));\n }\n\n // Sets part of the value of the box.\n public updateValue(keyName: string, keyValue: string): void;\n\n public updateValue(keyName: BoxValue): void;\n\n public updateValue(keyName: any, keyValue?: any): void {\n const value = this.value;\n if (typeof keyName === 'string') {\n value[keyName] = keyValue;\n } else {\n for (const key of Object.keys(keyName)) {\n value[key] = keyName[key];\n }\n }\n this.value = value;\n }\n\n // Returns an instance of the editor containing the box.\n public getEditor(): Editor {\n const container = this.node.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error(`Box \"${this.name}\" (id=${this.node.id}) is not rendered in the editor.`);\n }\n return editor;\n }\n\n // Returns the container of the box.\n public getContainer(): Nodes {\n return this.node.find('.lake-box-container');\n }\n\n // Returns the HTML string contained within the box.\n public getHTML(): string {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return '';\n }\n if (component.html === undefined) {\n return this.node.outerHTML();\n }\n return component.html(this);\n }\n\n // Sets a floating toolbar for the box.\n public setToolbar(items: ToolbarItem[]): void {\n const editor = this.getEditor();\n this.event.on('focus', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.toolbar = new FloatingToolbar({\n target: this.node,\n items,\n });\n this.toolbar.render();\n const activeItems = editor.selection.getActiveItems();\n this.toolbar.updateState({\n activeItems,\n });\n this.event.emit('renderfloatingtoolbar');\n });\n this.event.on('blur', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n this.toolbar = null;\n }\n });\n }\n\n // Renders the contents of the box.\n public render(): void {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return;\n }\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.initiate();\n const content = component.render(this);\n if (content !== undefined) {\n const container = this.getContainer();\n container.empty();\n container.append(content);\n }\n debug(`Box \"${this.name}\" (id: ${this.node.id}) rendered`);\n }\n\n // Destroys the box.\n public unmount(): void {\n this.event.emit('blur');\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.node.empty();\n debug(`Box \"${this.name}\" (id: ${this.node.id}) unmounted`);\n }\n}\n","const blockAttributeRules: any = {\n id: /^[\\w-]+$/,\n class: /^[\\w- ]+$/,\n style: {\n 'text-align': ['left', 'center', 'right', 'justify', 'start', 'end'],\n 'margin-left': /^-?\\d+px$/i,\n 'text-indent': /^-?\\d+em$/i,\n },\n};\n\nexport function getElementRules(): any {\n return {\n h1: {\n ...blockAttributeRules,\n },\n h2: {\n ...blockAttributeRules,\n },\n h3: {\n ...blockAttributeRules,\n },\n h4: {\n ...blockAttributeRules,\n },\n h5: {\n ...blockAttributeRules,\n },\n h6: {\n ...blockAttributeRules,\n },\n p: {\n ...blockAttributeRules,\n },\n blockquote: {\n ...blockAttributeRules,\n type: ['info', 'tip', 'success', 'warning', 'error', 'danger'],\n },\n ul: {\n ...blockAttributeRules,\n type: 'checklist',\n indent: /^\\d+$/,\n },\n ol: {\n ...blockAttributeRules,\n start: /^\\d+$/,\n indent: /^\\d+$/,\n },\n li: {\n value: ['true', 'false'],\n },\n table: {\n style: {\n width: /^-?\\d+(px|%)$/i,\n height: /^-?\\d+(px|%)$/i,\n border: /^[^\"]+$/,\n 'border-width': /^-?\\d+px$/i,\n 'border-style': /^[\\w-]+$/,\n 'border-color': /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n },\n },\n tr: {\n style: {\n height: /^-?\\d+(px|%)$/i,\n },\n },\n th: 'td',\n td: {\n colspan: /^\\d+$/,\n rowspan: /^\\d+$/,\n style: {\n width: /^-?\\d+(px|%)$/i,\n height: /^-?\\d+(px|%)$/i,\n border: /^[^\"]+$/,\n 'border-width': /^-?\\d+px$/i,\n 'border-style': /^[\\w-]+$/,\n 'border-color': /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n 'text-align': ['left', 'center', 'right', 'justify'],\n },\n },\n 'lake-box': {\n type: ['inline', 'block'],\n name: /^[\\w-]+$/,\n value: /^[^\"]+$/,\n focus: ['start', 'center', 'end'],\n },\n br: {},\n hr: {},\n img : {\n src: /^[^\"]+$/,\n width: /^-?\\d+px$/i,\n height: /^-?\\d+px$/i,\n 'data-lake-value': /^[^\"]+$/,\n alt: /^[^\"]+$/,\n style: {\n width: /^-?\\d+px$/i,\n height: /^-?\\d+px$/i,\n },\n },\n span: {\n class: /^[\\w- ]+$/,\n style: {\n color: /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n 'font-family': /^[^;]+$/,\n 'font-size': /^[^\"]+$/,\n },\n },\n b: 'strong',\n strong: {},\n em: 'i',\n i: {},\n u: {},\n s: {},\n sub: {},\n sup: {},\n code: {},\n a: {\n class: /^[\\w- ]+$/,\n name: /^[\\w-]+$/,\n href: /^[^\"]+$/,\n target: /^[\\w-]+$/,\n rel: /^[^\"]+$/,\n download: /^[^\"]+$/,\n },\n 'lake-bookmark': {\n type: ['anchor', 'focus'],\n },\n };\n}\n","import { KeyValue } from '../types/object';\nimport { toHex } from './to-hex';\n\n// Converts a string from style property of element to a key-value object that contains a list of all styles properties.\nexport function parseStyle(styleValue: string): KeyValue {\n styleValue = styleValue.replace(/"/ig, '\"');\n const properties: KeyValue = {};\n const re = /\\s*([\\w-]+)\\s*:([^;]*)(;|$)/g;\n let result;\n while ((result = re.exec(styleValue)) !== null) {\n const key = result[1].toLowerCase().trim();\n const val = toHex(result[2]).trim();\n properties[key] = val;\n }\n return properties;\n}\n","import { getElementRules } from '../config/element-rules';\nimport { parseStyle } from '../utils/parse-style';\nimport { encode } from '../utils/encode';\nimport { Nodes } from '../models/nodes';\n\n// The HTMLParser interface provides the ability to parse an HTML string by specified rules.\nexport class HTMLParser {\n\n private readonly rules: any;\n\n private readonly source: Nodes;\n\n constructor(content: string | Nodes, rules = getElementRules()) {\n this.rules = rules;\n if (typeof content === 'string') {\n this.source = this.parseHTML(content);\n } else {\n this.source = content;\n }\n }\n\n // Parses the given HTML string and returns the body element from the result.\n private parseHTML(html: string): Nodes {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n return new Nodes(doc.querySelector('body'));\n }\n\n // Returns a boolean indicating whether a value matches the specified rule.\n private static matchRule(rule: any, value: string): boolean {\n if (typeof rule === 'string') {\n return rule === value;\n }\n if (Array.isArray(rule)) {\n return rule.indexOf(value) >= 0;\n }\n if (rule instanceof RegExp) {\n return rule.test(value);\n }\n return false;\n }\n\n // Returns an open tag string of the specified element.\n private static getOpenTagString(element: Nodes, rules: any) : string {\n let tagName = element.name;\n let attributeRules = rules[tagName];\n if (!attributeRules) {\n return '';\n }\n if (typeof attributeRules === 'string') {\n tagName = attributeRules;\n attributeRules = rules[tagName];\n }\n const nativeNode = element.get(0) as Element;\n if (!nativeNode.hasAttributes()) {\n return tagName;\n }\n const attributeMap: Map<string, string | Map<string, string>> = new Map();\n for (const attr of nativeNode.attributes) {\n if (attributeRules[attr.name]) {\n if (attr.name !== 'style' && HTMLParser.matchRule(attributeRules[attr.name], attr.value)) {\n attributeMap.set(attr.name, attr.value);\n }\n if (attr.name === 'style') {\n const styleRules = attributeRules.style;\n const styleMap: Map<string, string> = new Map();\n const styleData = parseStyle(attr.value);\n for (const key of Object.keys(styleData)) {\n const value = styleData[key];\n if (styleRules[key] && HTMLParser.matchRule(styleRules[key], value)) {\n styleMap.set(key, value);\n }\n }\n attributeMap.set('style', styleMap);\n }\n }\n }\n let openTag = tagName;\n for (const [attrName, attrValue] of attributeMap) {\n if (attrName === 'style') {\n let styleString = '';\n for (const [styleName, styleValue] of attrValue) {\n styleString += `${styleName}: ${styleValue.replace(/\"/g, '"')}; `;\n }\n if (styleString !== '') {\n openTag += ` style=\"${styleString.trim()}\"`;\n }\n } else {\n openTag += ` ${attrName}=\"${attrValue}\"`;\n }\n }\n return openTag;\n }\n\n // Returns a closed tag string of the specified element.\n private static getClosedTagString(element: Nodes, rules: any) : string {\n let tagName = element.name;\n const attributeRules = rules[tagName];\n if (!attributeRules) {\n return '';\n }\n if (typeof attributeRules === 'string') {\n tagName = attributeRules;\n }\n return tagName;\n }\n\n // Returns the value of the text node with trimming invisible whitespace.\n // <p>foo</p>\\n<p>bar</p>\n // or\n // <p>\\nfoo\\n</p>\n private static getTrimmedText(textNode: Nodes): string {\n const parentNode = textNode.parent();\n const prevSibling = textNode.prev();\n const nextSibling = textNode.next();\n let nodeValue = textNode.text();\n if (\n (prevSibling.isBlock || prevSibling.isBlockBox) &&\n (nextSibling.isBlock || nextSibling.isBlockBox) ||\n prevSibling.length === 0 && nextSibling.length === 0 && parentNode.isBlock\n ) {\n nodeValue = nodeValue.replace(/^[\\u0020\\t\\r\\n]+|[\\u0020\\t\\r\\n]+$/g, '');\n } else if (\n (prevSibling.isBlock || prevSibling.isBlockBox) ||\n prevSibling.length === 0 && parentNode.isBlock)\n {\n nodeValue = nodeValue.replace(/^[\\u0020\\t\\r\\n]+/, '');\n } else if (\n (nextSibling.isBlock || nextSibling.isBlockBox) ||\n nextSibling.length === 0 && parentNode.isBlock\n ) {\n nodeValue = nodeValue.replace(/[\\u0020\\t\\r\\n]+$/, '');\n }\n return nodeValue;\n }\n\n // Returns an HTML string.\n public getHTML(): string {\n const rules = this.rules;\n function * iterate(node: Nodes): Generator<string> {\n let child = node.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (child.isText) {\n yield encode(HTMLParser.getTrimmedText(child));\n } else if (child.isVoid) {\n const openTag = HTMLParser.getOpenTagString(child, rules);\n if (openTag !== '') {\n yield `<${openTag} />`;\n }\n } else if (child.isElement) {\n const openTag = HTMLParser.getOpenTagString(child, rules);\n const closedTag = HTMLParser.getClosedTagString(child, rules);\n if (openTag !== '') {\n yield `<${openTag}>`;\n }\n if (!child.isBox) {\n yield * iterate(child);\n }\n if (closedTag !== '') {\n yield `</${closedTag}>`;\n }\n }\n child = nextNode;\n }\n }\n let html = '';\n for (const value of iterate(this.source)) {\n html += value;\n }\n return html.trim();\n }\n\n // Returns a DocumentFragment object.\n public getFragment(): DocumentFragment {\n const html = this.getHTML();\n const body = this.parseHTML(html);\n const fragment = document.createDocumentFragment();\n let child = body.first();\n while (child.length > 0) {\n const nextNode = child.next();\n fragment.appendChild(child.get(0));\n child = nextNode;\n }\n return fragment;\n }\n}\n","import { encode } from '../utils/encode';\nimport { HTMLParser } from './html-parser';\n\n// The TextParser interface provides the ability to parse a text.\nexport class TextParser {\n\n private readonly content: string;\n\n constructor(content: string) {\n this.content = content;\n }\n\n // Returns an HTML string.\n public getHTML(): string {\n let html = this.content;\n html = html.replace(/ {2}/g, ' \\xA0');\n html = encode(html.trim());\n html = `<p>${html}</p>`;\n html = html.replace(/(\\r\\n){2,}/g, '</p><p><br /></p><p>');\n html = html.replace(/\\r\\n/g, '</p><p>');\n html = html.replace(/[\\r\\n]{2,}/g, '</p><p><br /></p><p>');\n html = html.replace(/[\\r\\n]/g, '</p><p>');\n return html;\n }\n\n // Returns a DocumentFragment object.\n public getFragment(): DocumentFragment {\n const htmlParser = new HTMLParser(this.getHTML());\n return htmlParser.getFragment();\n }\n}\n","import { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction insertNode(range: Range, node: Nodes): void {\n const nativeRange = range.get();\n const nativeNode = node.get(0);\n nativeRange.insertNode(nativeNode);\n nativeRange.setEndAfter(nativeNode);\n nativeRange.collapse(false);\n}\n\n// Inserts a bookmark at the cursor position or a pair of bookmarks at the beginning and end of the range.\n// case 1: foo<lake-bookmark type=\"focus\" />bar\n// case 2: <lake-bookmark type=\"anchor\" />foo<lake-bookmark type=\"focus\" />\n// case 3: foo<lake-box type=\"inline\" name=\"image\" focus=\"start\"></lake-box>bar\n// case 4: foo<lake-box type=\"inline\" name=\"image\" focus=\"end\"></lake-box>bar\n// case 5: <lake-bookmark type=\"anchor\" /><lake-box type=\"inline\" name=\"image\"></lake-box>foo<lake-bookmark type=\"focus\" />\nexport function insertBookmark(range: Range): { anchor: Nodes, focus: Nodes } {\n if (range.commonAncestor.isOutside) {\n return {\n anchor: new Nodes(),\n focus: new Nodes(),\n };\n }\n // box\n const boxNode = range.startNode.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n boxNode.attr('focus', 'start');\n } else if (range.isBoxEnd) {\n boxNode.attr('focus', 'end');\n } else {\n boxNode.attr('focus', 'center');\n }\n return {\n anchor: new Nodes(),\n focus: boxNode,\n };\n }\n // collapsed range\n if (range.isCollapsed) {\n const endRange = range.clone();\n endRange.collapseToEnd();\n const focus = query('<lake-bookmark type=\"focus\" />');\n insertNode(endRange, focus);\n return {\n anchor: new Nodes(),\n focus,\n };\n }\n // expanded range\n const startRange = range.clone();\n startRange.collapseToStart();\n const anchor = query('<lake-bookmark type=\"anchor\" />');\n insertNode(startRange, anchor);\n const endRange = range.clone();\n endRange.collapseToEnd();\n const focus = query('<lake-bookmark type=\"focus\" />');\n insertNode(endRange, focus);\n return {\n anchor,\n focus,\n };\n}\n","import type { Box } from '../models/box';\n\nconst boxInstances: Map<number, Map<number, Box>> = new Map();\n\nexport function getInstanceMap(id: number): Map<number, Box> {\n let instanceMap = boxInstances.get(id);\n if (!instanceMap) {\n instanceMap = new Map();\n boxInstances.set(id, instanceMap);\n return instanceMap;\n }\n return instanceMap;\n}\n","import { getInstanceMap } from '../storage/box-instances';\nimport { query } from './query';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\n// Returns an already generated box instance or generates a new instance if it does not exist.\nexport function getBox(boxNode: string | Node | Nodes): Box {\n const tempInstanceMap = getInstanceMap(0);\n // boxNode is a name\n if (typeof boxNode === 'string') {\n const box = new Box(boxNode);\n tempInstanceMap.set(box.node.id, box);\n return box;\n }\n // boxNode is node\n boxNode = query(boxNode);\n const container = boxNode.closestContainer();\n if (container.length === 0) {\n let box = tempInstanceMap.get(boxNode.id);\n if (box) {\n return box;\n }\n box = new Box(boxNode);\n tempInstanceMap.set(boxNode.id, box);\n return box;\n }\n const instanceMap = getInstanceMap(container.id);\n let box = tempInstanceMap.get(boxNode.id);\n if (box) {\n // move the box instance from temporary map to permanent map\n instanceMap.set(boxNode.id, box);\n tempInstanceMap.delete(boxNode.id);\n return box;\n }\n box = instanceMap.get(boxNode.id);\n if (box) {\n return box;\n }\n box = new Box(boxNode);\n instanceMap.set(boxNode.id, box);\n return box;\n}\n","import { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction removeAndNormalizeNode(node: Nodes, range?: Range): void {\n const previousNode = node.prev();\n const nextNode = node.next();\n if (previousNode.isText || nextNode.isText) {\n const parentNode = node.parent();\n node.remove();\n parentNode.get(0).normalize();\n } else if (previousNode.length === 0 && nextNode.length === 0) {\n if (node.parent().isMark && range) {\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n node.before(zeroWidthSpace);\n range.setStartAfter(zeroWidthSpace);\n range.collapseToStart();\n }\n node.remove();\n } else {\n node.remove();\n }\n}\n\n// Changes the specified range to a range represented by the bookmark.\nexport function toBookmark(range: Range, bookmark: { anchor: Nodes, focus: Nodes }): void {\n const anchor = bookmark.anchor;\n const focus = bookmark.focus;\n // Only the anchor is removed because the focus does not exist, which is not correct case.\n if (anchor.length > 0 && focus.length === 0) {\n removeAndNormalizeNode(anchor);\n return;\n }\n if (focus.length > 0 && anchor.length === 0) {\n if (focus.isBox) {\n const box = getBox(focus);\n if (box.getContainer().length === 0) {\n box.render();\n }\n const focusValue = focus.attr('focus');\n if (focusValue === 'start') {\n range.selectBoxStart(focus);\n } else if (focusValue === 'center') {\n range.selectBox(focus);\n } else {\n range.selectBoxEnd(focus);\n }\n focus.removeAttr('focus');\n return;\n }\n range.setStartBefore(focus);\n range.collapseToStart();\n removeAndNormalizeNode(focus, range);\n return;\n }\n if (anchor.length > 0 && focus.length > 0) {\n const anchorRange = new Range();\n anchorRange.selectNode(anchor);\n anchorRange.collapseToEnd();\n // The anchor node is after the focus node.\n if (anchorRange.compareAfterNode(focus) === -1) {\n range.setStartBefore(focus);\n removeAndNormalizeNode(focus);\n range.setEndBefore(anchor);\n removeAndNormalizeNode(anchor);\n } else {\n range.setStartBefore(anchor);\n removeAndNormalizeNode(anchor);\n range.setEndBefore(focus);\n removeAndNormalizeNode(focus);\n }\n }\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes a line break in the specified empty block.\n// Example:\n// case 1: <p><br /></p> to <p></p>\n// case 2: <p><br /><focus /></p> to <p><focus /></p>\n// case 3: <p><focus /><br /></p> to <p><focus /></p>\nexport function removeBreak(block: Nodes): void {\n if (block.length === 0) {\n return;\n }\n const nodeList: Nodes[] = [];\n let child = block.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (!child.isText || child.text() !== '') {\n nodeList.push(child);\n }\n child = nextNode;\n }\n if (\n nodeList.length === 1 &&nodeList[0].name === 'br' ||\n nodeList.length === 2 && nodeList[0].name === 'br' && nodeList[1].isBookmark\n ) {\n nodeList[0].remove();\n }\n if (nodeList.length === 2 && nodeList[0].isBookmark && nodeList[1].name === 'br') {\n nodeList[1].remove();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { query } from './query';\n\n// Appends a line break to the end of the specified block.\n// Example:\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><br /></p> to <p><br /></p>\n// case 3: <p>foo</p> to <p>foo<br /></p>\n// case 4: <ul><li></li></ul> to <ul><li><br /></li></ul>\n// case 5: <p><focus /></p> to <p><focus /><br /></p>\nexport function appendBreak(block: Nodes): Nodes {\n const breakNode = query('<br />');\n let child = block;\n while (child.isBlock) {\n let lastChild = child.last();\n while (lastChild.isText && lastChild.isEmpty) {\n lastChild = lastChild.prev();\n }\n if (!lastChild.isBlock && lastChild.name !== 'br') {\n child.append(breakNode);\n break;\n }\n child = lastChild;\n }\n return breakNode;\n}\n","import type { Nodes } from '../models/nodes';\nimport { appendBreak } from './append-break';\nimport { removeBreak } from './remove-break';\nimport { Range } from '../models/range';\n\n// Returns a point after the specified node.\nfunction getAfterPoint(node: Nodes): { node: Nodes, offset: number } {\n if (node.isText) {\n return {\n node,\n offset: node.text().length,\n };\n }\n const range = new Range();\n range.setEndAfter(node);\n return {\n node: range.endNode,\n offset: range.endOffset,\n };\n}\n\n// Merges two nodes into one node.\n// Case 1:\n// <p><strong><i>foo</i></strong></p>\n// <p>|bar</p>\n// to\n// <p><strong><i>foo</i></strong>|bar</p>\n//\n// Case 2:\n// <p><strong><i>foo</i></strong></p>\n// <p>|<strong><i>bar</i></strong></p>\n// to\n// <p><strong><i>foo|bar</i></strong></p>\nexport function mergeNodes(node: Nodes, otherNode: Nodes): { node: Nodes, offset: number } {\n const originalOtherNode = otherNode;\n if (['ul', 'ol'].indexOf(node.name) >= 0) {\n const list = node.find('li');\n node = list.eq(list.length - 1);\n }\n if (['ul', 'ol'].indexOf(otherNode.name) >= 0) {\n const list = otherNode.find('li');\n otherNode = list.eq(0);\n }\n if (node.isText || otherNode.isText || node.isVoid || otherNode.isVoid) {\n return getAfterPoint(node);\n }\n removeBreak(node);\n removeBreak(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendBreak(node);\n }\n const nextNode = node.last();\n const nextOtherNode = otherNode.first();\n let child = nextOtherNode;\n while (child.length > 0) {\n const next = child.next();\n node.append(child);\n child = next;\n }\n originalOtherNode.remove();\n if (\n nextNode.length > 0 &&\n nextOtherNode.length > 0 &&\n nextNode.isElement &&\n !nextNode.isBox &&\n nextNode.clone(false).get(0).isEqualNode(nextOtherNode.clone(false).get(0))\n ) {\n return mergeNodes(nextNode, nextOtherNode);\n }\n if (nextNode.length === 0) {\n return {\n node,\n offset: 0,\n };\n }\n return getAfterPoint(nextNode);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Fixes incorrect number for numbered list.\nexport function fixNumberedList(blocks: Nodes[]): void {\n if (blocks.length === 0) {\n return;\n }\n const firstBlock = blocks[0];\n const lastBlock = blocks[blocks.length - 1];\n const targetBlocks: Nodes[] = [];\n // to find all numbered list before current blocks\n let prevNode = firstBlock.prev();\n while (prevNode.length > 0) {\n if (prevNode.name !== 'ol') {\n break;\n }\n targetBlocks.push(prevNode);\n prevNode = prevNode.prev();\n }\n targetBlocks.reverse();\n targetBlocks.push(...blocks);\n // to find all numbered list after current blocks\n let nextNode = lastBlock.next();\n while (nextNode.length > 0) {\n if (nextNode.name !== 'ol') {\n break;\n }\n targetBlocks.push(nextNode);\n nextNode = nextNode.next();\n }\n // to reset start number\n let index = 1;\n for (const block of targetBlocks) {\n const prev = block.prev();\n if (prev.length === 0 || prev.name !== 'ol') {\n index = 1;\n }\n if (block.name === 'ol') {\n if (prev.name === 'ol' && prev.attr('indent') !== block.attr('indent')) {\n index = 1;\n }\n const currentStart = block.attr('start');\n const expectedStart = index.toString(10);\n if (currentStart !== expectedStart) {\n block.attr('start', expectedStart);\n }\n index++;\n }\n }\n}\n","import { appendBreak } from '../utils/append-break';\nimport { mergeNodes } from '../utils/merge-nodes';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\n// Removes the contents of the specified range.\nexport function deleteContents(range: Range): void {\n if (range.isCollapsed) {\n return;\n }\n range.adjustBox();\n range.adjustTable();\n if (range.isInoperative) {\n return;\n }\n const startBlock = range.startNode.closestBlock();\n const endBlock = range.endNode.closestBlock();\n const noMerge = startBlock.get(0) === endBlock.get(0);\n const nativeRange = range.get();\n nativeRange.deleteContents();\n range.adjustBlock();\n if (noMerge) {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const prevBlock = block.prev();\n if (prevBlock.length === 0) {\n return;\n }\n const bookmark = insertBookmark(range);\n mergeNodes(prevBlock, block);\n fixNumberedList([ prevBlock ]);\n toBookmark(range, bookmark);\n}\n","import { removeBreak } from '../utils/remove-break';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Fragment } from '../models/fragment';\nimport { deleteContents } from './delete-contents';\n\n// Inserts the specified contents into the range.\nexport function insertContents(range: Range, contents: string | Node | DocumentFragment | Nodes | Fragment): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let fragment: Fragment;\n if (contents instanceof Fragment) {\n fragment = contents;\n } else if (contents instanceof DocumentFragment) {\n fragment = new Fragment(contents);\n } else {\n fragment = new Fragment();\n fragment.append(contents);\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const block = range.startNode.closestBlock();\n removeBreak(block);\n const nativeRange = range.get();\n nativeRange.insertNode(fragment.get());\n nativeRange.collapse(false);\n range.adjustBlock();\n}\n","import type { Nodes } from '../models/nodes';\n\n// Returns the deepest element of the specified element.\nexport function getDeepElement(element: Nodes): Nodes {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n if (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n break;\n }\n child = firstChild;\n }\n return child;\n}\n","import type { Nodes } from '../models/nodes';\nimport { getDeepElement } from './get-deep-element';\nimport { query } from './query';\n\n// Appends a list of nodes to the specified element.\nexport function wrapNodeList(nodeList: Nodes[], wrapper?: Nodes): Nodes {\n wrapper = wrapper ?? query('<p />');\n if (nodeList.length === 0) {\n return wrapper;\n }\n wrapper = wrapper.clone(true);\n const deepestElement = getDeepElement(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import { KeyValue } from '../types/object';\nimport { query } from '../utils/query';\nimport { getDeepElement } from '../utils/get-deep-element';\nimport { wrapNodeList } from '../utils/wrap-node-list';\nimport { appendBreak } from '../utils/append-break';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\nfunction getTopNonBlockNodes(range: Range): Nodes[] {\n const container = range.commonAncestor.closest('div[contenteditable=\"true\"],td');\n let nodeList: Nodes[] = [];\n if (container.length === 0) {\n return nodeList;\n }\n let node = container.first();\n let isBeforeRange = true;\n while (node.length > 0) {\n if (node.isMark || node.isText || node.isBookmark || node.isInlineBox) {\n nodeList.push(node);\n } else {\n if (!isBeforeRange) {\n break;\n }\n nodeList = [];\n }\n if (range.intersectsNode(node)) {\n isBeforeRange = false;\n }\n node = node.next();\n }\n return nodeList;\n}\n\n// Adds new blocks or changes target blocks in the specified range.\nexport function setBlocks(range: Range, value: string | KeyValue): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n if (range.isCollapsed) {\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.isBlockBox) {\n return;\n }\n }\n // changes the attributes of target blocks\n if (typeof value !== 'string') {\n const blockList = range.getBlocks();\n for (const block of blockList) {\n block.css(value);\n }\n return;\n }\n // adds or replace blocks\n const valueNode = query(value);\n const tagName = valueNode.name;\n const nativeValueNode = valueNode.get(0) as Element;\n const attributes = nativeValueNode.attributes;\n const blockList = range.getBlocks();\n // has blocks\n if (blockList.length > 0) {\n const bookmark = insertBookmark(range);\n for (const node of blockList) {\n if (node.name === tagName && valueNode.first().length === 0) {\n for (const attr of attributes) {\n node.attr(attr.name, attr.value);\n }\n } else {\n const block = valueNode.clone(true);\n if (block.isList && node.isList && node.attr('indent') !== '') {\n block.attr('indent', node.attr('indent'));\n }\n const deepestBlock = getDeepElement(block);\n let child = node.first();\n while(child.length > 0) {\n const nextNode = child.next();\n deepestBlock.append(child);\n if (deepestBlock.name === child.name || child.name === 'li') {\n child.remove(true);\n }\n child = nextNode;\n }\n node.replaceWith(block);\n }\n }\n toBookmark(range, bookmark);\n fixNumberedList(range.getBlocks());\n return;\n }\n // no block\n if (range.isCollapsed) {\n const nextNode = range.getNextNode();\n if (nextNode.name === 'br') {\n const newBlock = query('<p><br /></p>');\n nextNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.name === 'br') {\n const newBlock = query('<p><br /></p>');\n prevNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n return;\n }\n }\n const bookmark = insertBookmark(range);\n const nonBlockNodes = getTopNonBlockNodes(range);\n const block = wrapNodeList(nonBlockNodes, valueNode);\n toBookmark(range, bookmark);\n fixNumberedList(range.getBlocks());\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Splits nodes upwards according to the position until a limiting element is encountered.\n// Case 1:\n// <p><strong><i>foo|bar</i></strong></p>\n// to\n// <p><strong><i>foo</i></strong>|<strong><i>bar</i></strong></p>\n//\n// Case 2:\n// <p><strong>beginning<i>one|two</i>end</strong></p>\n// to\n// <p><strong>beginning<i>one</i></strong>|<strong><i>two</i>end</strong></p>\nexport function splitNodes(node: Nodes, offset: number, limitNode: Nodes): { start: Nodes, end: Nodes } | null {\n const range = new Range();\n let parent;\n if (node.isText) {\n parent = node.parent();\n const newNode = node.splitText(offset);\n range.setStartAfter(node);\n if (node.text() === '') {\n node.remove();\n }\n if (newNode.text() === '') {\n newNode.remove();\n }\n } else {\n range.setStart(node, offset);\n parent = node;\n }\n if (parent.name === 'body' || parent.name === 'html') {\n return null;\n }\n if (parent.get(0) === limitNode.get(0)) {\n return null;\n }\n range.collapseToStart();\n const startPart = parent.clone();\n let child = parent.first();\n while (child.length > 0) {\n if (range.compareBeforeNode(child) >= 0) {\n break;\n }\n const nextNode = child.next();\n startPart.append(child);\n child = nextNode;\n }\n parent.before(startPart);\n if (parent.parent().length > 0 && parent.parent().get(0) !== limitNode.get(0)) {\n return splitNodes(parent.parent(), parent.index(), limitNode);\n }\n return {\n start: startPart,\n end: parent,\n };\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes empty marks that contain no content in the specified node.\nexport function removeEmptyMarks(node: Nodes): void {\n if (node.isMark && node.isEmpty) {\n node.remove();\n return;\n }\n for (const child of node.getWalker()) {\n if (child.isMark && child.isEmpty) {\n child.remove();\n }\n }\n}\n","import { TwoParts } from '../types/node';\nimport { splitNodes } from '../utils/split-nodes';\nimport { appendBreak } from '../utils/append-break';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Range } from '../models/range';\nimport { deleteContents } from './delete-contents';\n\n// Removes the contents of the specified range and then splits the block node at the point of the collapsed range.\n// <p>one<anchor />two<focus />three</p>\n// to\n// <p>one</p>\n// <p><focus />three</p>\nexport function splitBlock(range: Range): TwoParts {\n if (range.commonAncestor.isOutside) {\n return {\n start: null,\n end: null,\n };\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const node = range.startNode;\n const closestBlock = node.closestOperableBlock();\n if (closestBlock.length === 0) {\n return {\n start: null,\n end: null,\n };\n }\n let limitBlock = closestBlock.parent();\n if (limitBlock.isOutside) {\n limitBlock = node.closestContainer();\n }\n const parts = splitNodes(node, range.startOffset, limitBlock);\n let start = null;\n let end = null;\n if (parts) {\n start = parts.start;\n end = parts.end;\n }\n if (!parts && node.isBlock) {\n if (range.startOffset > 0) {\n start = node.children()[range.startOffset - 1];\n }\n end = node.children()[range.startOffset];\n if (end && !end.isBlock) {\n end = null;\n }\n }\n if (start && start.isEmpty) {\n removeEmptyMarks(start);\n appendBreak(start);\n }\n if (end) {\n if (end.isEmpty) {\n removeEmptyMarks(end);\n appendBreak(end);\n }\n range.shrinkBefore(end);\n }\n fixNumberedList(range.getBlocks());\n return {\n start,\n end,\n };\n}\n","import { query } from '../utils/query';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertContents } from './insert-contents';\nimport { splitBlock } from './split-block';\n\n// Inserts a block into the specified range.\nexport function insertBlock(range: Range, value: string | Nodes): Nodes | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const block = query(value);\n const parts = splitBlock(range);\n if (parts.start) {\n removeEmptyMarks(parts.start);\n range.setEndAfter(parts.start);\n range.collapseToEnd();\n }\n if (parts.end) {\n removeEmptyMarks(parts.end);\n if (parts.end.isEmpty) {\n parts.end.remove();\n }\n }\n insertContents(range, block);\n if (!block.isBox) {\n range.shrinkAfter(block);\n }\n if (parts.start && parts.start.isEmpty) {\n parts.start.remove();\n }\n return block;\n}\n","import { TwoParts, ThreeParts } from '../types/node';\nimport { splitNodes } from '../utils/split-nodes';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Splits text nodes or mark nodes at a specified position.\nfunction splitMarksAtPoint(node: Nodes, offset: number, removeEmptyMark: boolean): TwoParts {\n let start = null;\n let end = null;\n let limitBlock = node.closestBlock();\n if (limitBlock.length === 0) {\n limitBlock = node.closestContainer();\n }\n const parts = splitNodes(node, offset, limitBlock);\n if (parts) {\n if (removeEmptyMark) {\n removeEmptyMarks(parts.start);\n removeEmptyMarks(parts.end);\n if (!parts.start.isEmpty) {\n start = parts.start;\n }\n if (!parts.end.isEmpty) {\n end = parts.end;\n }\n } else {\n start = parts.start;\n end = parts.end;\n }\n }\n return {\n start,\n end,\n };\n}\n\n// Splits text nodes or mark nodes.\n// <p><strong>one<anchor />two<focus />three</strong></p>\n// to\n// <p><strong>one</strong><strong><anchor />two<focus /></strong><strong>three</strong></p>\nexport function splitMarks(range: Range, removeEmptyMark: boolean = true): ThreeParts {\n if (range.commonAncestor.isOutside) {\n return {\n start: null,\n center: null,\n end: null,\n };\n }\n range.adjustBox();\n if (range.isCollapsed) {\n const parts = splitMarksAtPoint(range.startNode, range.startOffset, removeEmptyMark);\n if (parts.start) {\n range.setStartAfter(parts.start);\n range.collapseToStart();\n } else if (parts.end) {\n range.setStartBefore(parts.end);\n range.collapseToStart();\n }\n return {\n start: parts.start,\n center: null,\n end: parts.end,\n };\n }\n const startParts = splitMarksAtPoint(range.startNode, range.startOffset, removeEmptyMark);\n if (startParts.start) {\n range.setStartAfter(startParts.start);\n } else if (startParts.end) {\n range.setStartBefore(startParts.end);\n }\n const endParts = splitMarksAtPoint(range.endNode, range.endOffset, removeEmptyMark);\n if (endParts.start) {\n range.setEndAfter(endParts.start);\n } else if (endParts.end) {\n range.setEndBefore(endParts.end);\n }\n return {\n start: startParts.start,\n center: endParts.start,\n end: endParts.end,\n };\n}\n","import { parseStyle } from '../utils/parse-style';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { getDeepElement } from '../utils/get-deep-element';\nimport { removeBreak } from '../utils/remove-break';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { splitMarks } from './split-marks';\nimport { insertContents } from './insert-contents';\n\n// Removes zero-width space before or after the node.\nfunction removePreviousOrNextZWS(node: Nodes): void {\n const prevNode = node.prev();\n if (prevNode.length > 0 && prevNode.isText && prevNode.isEmpty) {\n prevNode.remove();\n }\n const nextNode = node.next();\n if (nextNode.length > 0 && nextNode.isText && nextNode.isEmpty) {\n nextNode.remove();\n }\n}\n\n// Returns a nested mark copied from ancestors of the specified node.\nfunction getNestedMark(node: Nodes): Nodes | null {\n let parent = node;\n if (parent.isText) {\n parent = parent.parent();\n }\n let mark: Nodes | null = null;\n while (parent.length > 0) {\n if (!parent.isMark) {\n break;\n }\n if (mark) {\n const newMark = parent.clone();\n newMark.append(mark);\n mark = newMark;\n } else {\n mark = parent.clone();\n }\n parent = parent.parent();\n }\n return mark;\n}\n\n// Returns the topmost mark element or the closest element with the same tag name as the specified node.\nfunction getUpperMark(node: Nodes, tagName: string): Nodes {\n const nodeText = node.text();\n let parent = node;\n while(parent.length > 0) {\n const nextParent = parent.parent();\n if (\n !nextParent.isMark ||\n nodeText !== nextParent.text() ||\n !parent.isText && parent.name === tagName && parent.attr('style') !== ''\n ) {\n break;\n }\n parent = nextParent;\n }\n return parent;\n}\n\n// Adds the specified mark to the texts of the range.\nexport function addMark(range: Range, value: string | Nodes): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let valueNode = query(value);\n const tagName = valueNode.name;\n const styleValue = valueNode.attr('style');\n const cssProperties = parseStyle(styleValue);\n if (range.isCollapsed) {\n if (range.isBox) {\n const boxNode = range.startNode.closest('lake-box');\n const box = getBox(boxNode);\n if (box.type === 'block') {\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else {\n boxNode.after(newBlock);\n }\n range.shrinkAfter(newBlock);\n } else {\n range.adjustBox();\n }\n }\n const block = range.startNode.closestBlock();\n removeBreak(block);\n // https://en.wikipedia.org/wiki/Zero-width_space\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const newMark = getNestedMark(range.startNode);\n splitMarks(range);\n if (newMark) {\n let child = newMark;\n while(child.length > 0) {\n if (child.name === tagName) {\n child.css(cssProperties);\n }\n child = child.first();\n }\n if (newMark.name === tagName) {\n valueNode = newMark;\n } else {\n valueNode.append(newMark);\n }\n }\n if (valueNode.text() === '') {\n const deepestMark = getDeepElement(valueNode);\n deepestMark.append(zeroWidthSpace);\n }\n insertContents(range, valueNode);\n removePreviousOrNextZWS(valueNode);\n range.shrinkAfter(valueNode);\n return;\n }\n splitMarks(range);\n const nodeList = range.getMarks(true);\n const bookmark = insertBookmark(range);\n for (const node of nodeList) {\n if (!node.isEmpty) {\n if (node.isText) {\n const upperMark = getUpperMark(node, tagName);\n if (upperMark.isMark && upperMark.name === tagName) {\n upperMark.css(cssProperties);\n } else {\n const newValueNode = valueNode.clone();\n upperMark.before(newValueNode);\n newValueNode.append(upperMark);\n }\n }\n }\n }\n toBookmark(range, bookmark);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes Zero-width spaces from text nodes.\nexport function removeZWS(node: Nodes): void {\n for (const child of node.getWalker()) {\n if (child.isText) {\n const text = child.text();\n if (text === '') {\n child.remove();\n } else if (text.length > 1) {\n if (/\\u200B/.test(text)) {\n child.get(0).nodeValue = text.replace(/\\u200B/g, '');\n }\n }\n }\n }\n}\n","import { getDeepElement } from '../utils/get-deep-element';\nimport { query } from '../utils/query';\nimport { removeZWS } from '../utils/remove-zws';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { splitMarks } from './split-marks';\n\n// Returns a nested mark copied from each last child of the descendants of the specified node.\nfunction getNestedMark(node: Nodes, tagName?: string): Nodes | null {\n if (!node.isMark || !tagName) {\n return null;\n }\n let mark: Nodes | null = null;\n let deepestMark: Nodes | null = null;\n let child = node;\n while (child.length > 0) {\n if (!child.isMark) {\n break;\n }\n if (child.name !== tagName) {\n if (deepestMark) {\n const newMark = child.clone();\n deepestMark.append(newMark);\n deepestMark = newMark;\n } else {\n mark = child.clone();\n deepestMark = mark;\n }\n }\n child = child.last();\n }\n return mark;\n}\n\n// Removes the specified marks in the range.\nexport function removeMark(range: Range, value?: string): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let tagName;\n if (value) {\n const valueNode = query(value);\n tagName = valueNode.name;\n }\n if (range.isCollapsed) {\n if (range.isBox) {\n return;\n }\n if (tagName && range.commonAncestor.closest(tagName).length === 0) {\n return;\n }\n const parts = splitMarks(range, false);\n if (!parts.start) {\n return;\n }\n if (parts.end) {\n removeEmptyMarks(parts.end);\n }\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const newMark = getNestedMark(parts.start, tagName);\n if (!newMark) {\n parts.start.after(zeroWidthSpace);\n removeEmptyMarks(parts.start);\n if (zeroWidthSpace.prev().isText) {\n range.setStartAfter(zeroWidthSpace.prev());\n range.collapseToStart();\n zeroWidthSpace.remove();\n return;\n }\n range.setStartAfter(zeroWidthSpace);\n range.collapseToStart();\n return;\n }\n const deepestMark = getDeepElement(newMark);\n deepestMark.append(zeroWidthSpace);\n parts.start.after(newMark);\n removeEmptyMarks(parts.start);\n range.shrinkAfter(newMark);\n return;\n }\n splitMarks(range);\n const marks = range.getMarks();\n const bookmark = insertBookmark(range);\n for (const mark of marks) {\n if (!tagName || mark.name === tagName) {\n const parentNode = mark.parent();\n mark.remove(!mark.isEmpty);\n if (parentNode.length > 0) {\n parentNode.get(0).normalize();\n }\n }\n }\n removeZWS(range.commonAncestor);\n toBookmark(range, bookmark);\n}\n","import { BoxValue } from '../types/box';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { query } from '../utils/query';\nimport { splitMarks } from './split-marks';\nimport { insertContents } from './insert-contents';\nimport { insertBlock } from './insert-block';\n\n// Inserts a box into the specified range.\nexport function insertBox(range: Range, boxName: string, boxValue?: BoxValue): Box | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const box = getBox(boxName);\n if (boxValue) {\n box.value = boxValue;\n }\n // inline box\n if (box.type === 'inline') {\n splitMarks(range);\n insertContents(range, box.node);\n box.render();\n if (box.node.isTopInside) {\n const block = query('<p />');\n box.node.before(block);\n block.append(box.node);\n }\n range.selectBoxEnd(box.node);\n // move the box instance from temporary map to permanent map\n return getBox(box.node);\n }\n // block box\n insertBlock(range, box.node);\n box.render();\n range.selectBoxEnd(box.node);\n // move the box instance from temporary map to permanent map\n return getBox(box.node);\n}\n","import { getInstanceMap } from '../storage/box-instances';\nimport { appendBreak } from '../utils/append-break';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\n\nfunction unmountBox(box: Box): Box {\n const container = box.node.closestContainer();\n box.unmount();\n box.node.remove();\n if (container.length > 0) {\n // move the box instance from permanent map to temporary map\n const instanceMap = getInstanceMap(container.id);\n instanceMap.delete(box.node.id);\n const tempInstanceMap = getInstanceMap(0);\n tempInstanceMap.set(box.node.id, box);\n }\n return box;\n}\n\n// Removes a box that contains the specified range.\nexport function removeBox(range: Range): Box | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return null;\n }\n const box = getBox(boxNode);\n if (box.type === 'block') {\n const paragraph = query('<p><br /></p>');\n boxNode.before(paragraph);\n range.shrinkAfter(paragraph);\n return unmountBox(box);\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n const parentNode = boxNode.parent();\n unmountBox(box);\n if (parentNode.isEmpty) {\n const breakNode = appendBreak(parentNode);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return box;\n}\n","// Converts the custom HTML tags to the special tags that can not be parsed by browser.\nexport function denormalizeValue(value: string): string {\n return value.\n replace(/(<lake-box[^>]+>)[\\s\\S]*?(<\\/lake-box>)/ig, '$1$2').\n replace(/<lake-bookmark\\s+type=\"anchor\">\\s*<\\/lake-bookmark>/ig, '<anchor />').\n replace(/<lake-bookmark\\s+type=\"focus\">\\s*<\\/lake-bookmark>/ig, '<focus />');\n}\n","// Converts the special tags to ordinary HTML tags that can be parsed by browser.\nexport function normalizeValue(value: string): string {\n return value.\n replace(/(<lake-box[^>]+>)[\\s\\S]*?(<\\/lake-box>|$)/ig, '$1</lake-box>').\n replace(/<anchor\\s*\\/>/ig, '<lake-bookmark type=\"anchor\"></lake-bookmark>').\n replace(/<focus\\s*\\/>/ig, '<lake-bookmark type=\"focus\"></lake-bookmark>');\n}\n","import { visibleInfo } from './visible-info';\nimport { Nodes } from '../models/nodes';\n\n// If the specified node is not visible, scrolls the container that contains the node to its position to make it visible.\nexport function scrollToNode(node: Nodes, options?: ScrollIntoViewOptions): void {\n const visible = visibleInfo(node);\n if (\n visible.left !== 0 ||\n visible.right !== 0 ||\n visible.top !== 0 ||\n visible.bottom !== 0\n ) {\n (node.get(0) as Element).scrollIntoView(options);\n }\n}\n","import { KeyValue } from '../types/object';\nimport { NativeSelection } from '../types/native';\nimport { ActiveItem } from '../types/selection';\nimport { parseStyle } from '../utils/parse-style';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { insertBookmark } from '../operations/insert-bookmark';\nimport { toBookmark } from '../operations/to-bookmark';\nimport { insertContents } from '../operations/insert-contents';\nimport { deleteContents } from '../operations/delete-contents';\nimport { setBlocks } from '../operations/set-blocks';\nimport { splitBlock } from '../operations/split-block';\nimport { insertBlock } from '../operations/insert-block';\nimport { splitMarks } from '../operations/split-marks';\nimport { addMark } from '../operations/add-mark';\nimport { removeMark } from '../operations/remove-mark';\nimport { insertBox } from '../operations/insert-box';\nimport { removeBox } from '../operations/remove-box';\n\n// Returns a key-value object of all attributes of the specified element.\nfunction getAttributes(element: Nodes): KeyValue {\n const nativeElement = element.get(0) as Element;\n const attributes: KeyValue = {};\n if (nativeElement.hasAttributes()) {\n for (const attr of nativeElement.attributes) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n}\n\nfunction appendAncestralNodes(activeItems: ActiveItem[], range: Range): void {\n let parentNode = range.startNode;\n if (parentNode.isText) {\n parentNode = parentNode.parent();\n }\n while (parentNode.length > 0) {\n if (!parentNode.isContentEditable || parentNode.isContainer) {\n break;\n }\n activeItems.push({\n node: parentNode,\n name: parentNode.name,\n attributes: getAttributes(parentNode),\n styles: parseStyle(parentNode.attr('style')),\n });\n parentNode = parentNode.parent();\n }\n}\n\nfunction appendNextNestedNodes(activeItems: ActiveItem[], range: Range): void {\n const startNode = range.startNode;\n let nextNode;\n if (startNode.isText && startNode.text().length === range.startOffset) {\n const node = startNode.next();\n if (node.length > 0 && node.isElement) {\n nextNode = node;\n }\n }\n if (startNode.isElement) {\n const children = startNode.children();\n if (children.length > 0) {\n const node = children[range.startOffset];\n if (node && node.isElement) {\n nextNode = node;\n }\n }\n }\n if (nextNode) {\n let child = nextNode;\n while (child.length > 0) {\n if (child.isElement) {\n activeItems.push({\n node: child,\n name: child.name,\n attributes: getAttributes(child),\n styles: parseStyle(child.attr('style')),\n });\n }\n child = child.first();\n }\n }\n}\n\nexport class Selection {\n // Represents the range of text selected by the user or the current position of the cursor.\n private selection: NativeSelection;\n\n // Is the root element which has contenteditable=\"true\" attribute.\n public container: Nodes;\n\n // Is a saved range which is used to add it to the native selection later.\n public range: Range;\n\n constructor(container: Nodes) {\n const selection = window.getSelection();\n // When called on an <iframe> that is not displayed (e.g., where 'display: none' is set) Firefox will return null,\n // whereas other browsers will return a selection object with Selection.type set to None.\n if (!selection) {\n throw new Error('Selection object is null.');\n }\n this.selection = selection;\n this.container = container;\n this.range = this.getCurrentRange();\n }\n\n // Returns a range object currently selected.\n public getCurrentRange(): Range {\n if (this.selection.rangeCount > 0) {\n const range = this.selection.getRangeAt(0);\n return new Range(range);\n }\n return new Range();\n }\n\n // Adds the saved range to the native selection.\n public sync(): void {\n if (!this.container.contains(this.range.commonAncestor)) {\n return;\n }\n this.selection.removeAllRanges();\n this.selection.addRange(this.range.get());\n }\n\n // Updates the saved range with the range of the native selection.\n public updateByRange(): void {\n const newRange = this.getCurrentRange();\n if (!this.container.contains(newRange.commonAncestor)) {\n return;\n }\n if (\n this.range.startNode.get(0) === newRange.startNode.get(0) &&\n this.range.startOffset === newRange.startOffset &&\n this.range.endNode.get(0) === newRange.endNode.get(0) &&\n this.range.endOffset === newRange.endOffset\n ) {\n return;\n }\n this.range = newRange;\n }\n\n // Updates the saved range with the range represented by the bookmark.\n public updateByBookmark(): void {\n const range = this.range;\n const container = this.container;\n const boxFocus = container.find('lake-box[focus]');\n if (boxFocus.length > 0) {\n toBookmark(range, {\n anchor: new Nodes(),\n focus: boxFocus,\n });\n this.sync();\n return;\n }\n const anchor = container.find('lake-bookmark[type=\"anchor\"]');\n const focus = container.find('lake-bookmark[type=\"focus\"]');\n toBookmark(range, {\n anchor,\n focus,\n });\n this.sync();\n }\n\n public getActiveItems(): ActiveItem[] {\n const activeItems: ActiveItem[] = [];\n appendAncestralNodes(activeItems, this.range);\n appendNextNestedNodes(activeItems, this.range);\n return activeItems;\n }\n\n public insertBookmark(): ReturnType<typeof insertBookmark> {\n return insertBookmark(this.range);\n }\n\n public toBookmark(bookmark: Parameters<typeof toBookmark>[1]): ReturnType<typeof toBookmark> {\n return toBookmark(this.range, bookmark);\n }\n\n public insertContents(contents: Parameters<typeof insertContents>[1]): ReturnType<typeof insertContents> {\n return insertContents(this.range, contents);\n }\n\n public deleteContents(): ReturnType<typeof deleteContents> {\n return deleteContents(this.range);\n }\n\n public setBlocks(value: Parameters<typeof setBlocks>[1]): ReturnType<typeof setBlocks> {\n return setBlocks(this.range, value);\n }\n\n public splitBlock(): ReturnType<typeof splitBlock> {\n return splitBlock(this.range);\n }\n\n public insertBlock(value: Parameters<typeof insertBlock>[1]): ReturnType<typeof insertBlock> {\n return insertBlock(this.range, value);\n }\n\n public splitMarks(removeEmptyMark?: Parameters<typeof splitMarks>[1]): ReturnType<typeof splitMarks> {\n return splitMarks(this.range, removeEmptyMark);\n }\n\n public addMark(value: Parameters<typeof addMark>[1]): ReturnType<typeof addMark> {\n return addMark(this.range, value);\n }\n\n public removeMark(value?: Parameters<typeof removeMark>[1]): ReturnType<typeof removeMark> {\n return removeMark(this.range, value);\n }\n\n // Sets the current range to the center position of the box.\n public selectBox(box: Box | Nodes): void {\n let boxNode = box;\n if (box instanceof Box) {\n boxNode = box.node;\n } else {\n boxNode = box;\n }\n this.range.selectBox(boxNode);\n this.sync();\n }\n\n // Inserts a box into the position of the selection.\n public insertBox(boxName: Parameters<typeof insertBox>[1], boxValue?: Parameters<typeof insertBox>[2]): Box {\n const box = insertBox(this.range, boxName, boxValue);\n if (!box) {\n throw new Error(`Box \"${boxName}\" cannot be inserted into the outside of the editor.`);\n }\n return box;\n }\n\n // Removes the selected box.\n public removeBox(box: Box | Nodes | null = null): ReturnType<typeof removeBox> {\n if (box) {\n this.selectBox(box);\n }\n return removeBox(this.range);\n }\n}\n","import { ActiveItem } from '../types/selection';\nimport { debug } from '../utils/debug';\nimport { Selection } from './selection';\n\ntype CommmandItem = {\n isDisabled?: (activeItems: ActiveItem[]) => boolean;\n isSelected?: (activeItems: ActiveItem[]) => boolean;\n selectedValues?: (activeItems: ActiveItem[]) => string[];\n execute: (...data: any[]) => void;\n};\n\nexport class Command {\n private selection: Selection;\n\n private commandMap: Map<string, CommmandItem> = new Map();\n\n constructor(selection: Selection) {\n this.selection = selection;\n }\n\n public add(name: string, commandItem: CommmandItem): void {\n this.commandMap.set(name, commandItem);\n }\n\n public delete(name: string): void {\n this.commandMap.delete(name);\n }\n\n public getNames(): string[] {\n return Array.from(this.commandMap.keys());\n }\n\n public has(name: string): boolean {\n return this.commandMap.get(name) !== undefined;\n }\n\n public getItem(name: string): CommmandItem {\n const commandItem = this.commandMap.get(name);\n if (commandItem === undefined) {\n throw new Error(`Command \"${name}\" has not been defined yet.`);\n }\n return commandItem;\n }\n\n public isDisabled(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isDisabled) {\n return false;\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.isDisabled(activeItems);\n }\n\n public isSelected(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isSelected) {\n return false;\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.isSelected(activeItems);\n }\n\n public selectedValues(name: string): string[] {\n const commandItem = this.getItem(name);\n if (!commandItem.selectedValues) {\n return [];\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.selectedValues(activeItems);\n }\n\n public execute(name: string, ...data: any[]): void {\n const container = this.selection.container;\n const range = this.selection.range;\n if (!container.contains(range.commonAncestor)) {\n range.shrinkAfter(container);\n }\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\n}\n","/**\nBSD 2-Clause License\n\nCopyright (c) 2022, Big Sky Software\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nRepository: https://github.com/bigskysoftware/idiomorph\n*/\n\n/* eslint-disable no-throw-literal */\n/* eslint-disable no-use-before-define */\n/* eslint-disable no-continue */\n\nimport type { Nodes } from '../models/nodes';\n\ndeclare global {\n interface Node {\n generatedByIdiomorph: boolean;\n }\n}\n\ndeclare type configType = {\n morphStyle?: 'innerHTML' | 'outerHTML';\n ignoreActive?: boolean;\n ignoreActiveValue?: boolean;\n head?: {\n style?: 'merge' | 'append' | 'morph' | 'none';\n };\n callbacks?: {\n beforeNodeAdded?: (node: Node) => void | boolean;\n afterNodeAdded?: (node: Node) => void;\n beforeNodeMorphed?: (oldNode: Node, newNode: Node) => void | boolean;\n afterNodeMorphed?: (oldNode: Node, newNode: Node) => void;\n beforeNodeRemoved?: (node: Node) => void | boolean;\n afterNodeRemoved?: (node: Node) => void;\n beforeAttributeUpdated?: (attributeName: string, node: Node, mutationType: string) => void | boolean;\n afterAttributeUpdated?: (attributeName: string, node: Node, mutationType: string) => void;\n beforeChildrenUpdated?: (oldNode: Node, newNode: Node) => void | boolean;\n };\n};\n\ntype KeyValue = { [key: string]: any };\n\nconst EMPTY_SET = new Set();\n\nfunction noOp() {}\n\n// default configuration values, updatable by users now\nconst defaults = {\n morphStyle: 'outerHTML',\n callbacks: {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n afterAttributeUpdated: noOp,\n beforeChildrenUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: (elt: Element) => elt.getAttribute('im-preserve') === 'true',\n shouldReAppend: (elt: Element) => elt.getAttribute('im-re-append') === 'true',\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n },\n};\n\n/*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\nfunction mergeDefaults(config: KeyValue): KeyValue {\n const finalConfig: KeyValue = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n}\n\n// =============================================================================\n// ID Set Functions\n// =============================================================================\n\nfunction isIdInConsideration(ctx: KeyValue, id: string): any {\n return !ctx.deadIds.has(id);\n}\n\nfunction idIsWithinNode(ctx: KeyValue, id: string, targetNode: Node): any {\n const idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n}\n\nfunction removeIdsFromConsideration(ctx: KeyValue, node: Node): void {\n const idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n}\n\nfunction getIdIntersectionCount(ctx: KeyValue, node1: Node, node2: Node): number {\n const sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n}\n\n/**\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\nfunction populateIdMapForNode(node: Element, idMap: Map<Node, Set<string>>) {\n const nodeParent = node.parentElement;\n // find all elements with an id property\n const idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current: Element | null = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set does not exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n}\n\n/**\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\nfunction createIdMap(oldContent: Element, newContent: Element): Map<any, any> {\n const idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n}\n\nfunction createMorphContext(oldNode: Element, newContent: Element, config: KeyValue) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent,\n config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head,\n };\n}\n\nfunction isIdSetMatch(node1: Element, node2: Element, ctx: KeyValue) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== '' && node1.id === node2.id) {\n return true;\n }\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n return false;\n}\n\nfunction isSoftMatch(node1: Element, node2: Element) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName;\n}\n\nfunction removeNode(tempNode: Node, ctx: KeyValue) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n (tempNode as Element).remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n}\n\nfunction removeNodesBetween(startInclusive: Node, endExclusive: Node, ctx: KeyValue) {\n let start: Node | null = startInclusive;\n while (start && start !== endExclusive) {\n const tempNode = start;\n start = start.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n}\n\n// =============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential id match\n// for the newChild. We stop if we find a potential id match for the new child OR\n// if the number of potential id matches we are discarding is greater than the\n// potential id matches for the new child\n// =============================================================================\nfunction findIdSetMatch(newContent: Element, oldParent: Element, newChild: Element, insertionPoint: Node, ctx: KeyValue) {\n\n // max id matches we are willing to discard in our search\n const newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch as Element, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n}\n\n// =============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential soft match\n// for the newChild. We stop if we find a potential soft match for the new child OR\n// if we find a potential id match in the old parents children OR if we find two\n// potential soft matches for the next two pieces of new content\n// =============================================================================\nfunction findSoftMatch(newContent: Element, oldParent: Element, newChild: Node, insertionPoint: Node, ctx: KeyValue) {\n\n let potentialSoftMatch: Node | null = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild as Element, potentialSoftMatch as Element)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling as Element, potentialSoftMatch as Element)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling ? nextSibling.nextSibling : null;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch ? potentialSoftMatch.nextSibling : null;\n }\n\n return potentialSoftMatch;\n}\n\nfunction normalizeContent(newContent: Node[] | Node | null) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n }\n if (newContent instanceof Node) {\n if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n }\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n }\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n}\n\nfunction insertSiblings(previousSibling: Node, morphedNode: Node, nextSibling: Node) {\n const stack = [];\n const added = [];\n let prev: Node | null = previousSibling;\n while (prev != null) {\n stack.push(prev);\n prev = prev.previousSibling;\n }\n while (stack.length > 0) {\n const node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n if (node) {\n morphedNode.parentElement?.insertBefore(node, morphedNode);\n }\n }\n added.push(morphedNode);\n let next: Node | null = nextSibling;\n while (next != null) {\n stack.push(next);\n added.push(next); // here we are going in order, so push on as we scan, rather than add\n next = next.nextSibling;\n }\n while (stack.length > 0) {\n const node = stack.pop();\n if (node) {\n morphedNode.parentElement?.insertBefore(node, morphedNode.nextSibling);\n }\n }\n return added;\n}\n\nfunction scoreElement(node1: Node, node2: Node, ctx: KeyValue) {\n if (isSoftMatch(node1 as Element, node2 as Element)) {\n return .5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n}\n\nfunction findBestNodeMatch(newContent: Node, oldNode: Node, ctx: KeyValue) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n const newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n}\n\n// =============================================================================\n// Attribute Syncing Code\n// =============================================================================\n\n/*\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\nfunction ignoreAttribute(attr: string, to: Element, updateType: string, ctx: KeyValue) {\n if (attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement) {\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n}\n\n/**\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\nfunction ignoreValueOfActiveElement(possibleActiveElement: Node, ctx: KeyValue) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement;\n}\n\n/**\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\nfunction syncNodeFrom(from: Element, to: Element, ctx: KeyValue) {\n const type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n ctx.callbacks.afterAttributeUpdated(fromAttribute.name, to, 'update');\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; i >= 0; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n ctx.callbacks.afterAttributeUpdated(toAttribute.name, to, 'remove');\n }\n }\n }\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n}\n\n/**\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\nfunction morphOldNodeTo(oldNode: Node, newContent: Node, ctx: KeyValue) {\n if (ctx.ignoreActive && oldNode === document.activeElement) {\n // don't morph focused element\n } else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n (oldNode as Element).remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode as Element, newContent as Element)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement?.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n syncNodeFrom(newContent as Element, oldNode as Element, ctx);\n if (ctx.callbacks.beforeChildrenUpdated(oldNode, newContent) !== false && !ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n}\n\n/**\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\nfunction morphChildren(newParent: Node, oldParent: Node, ctx: KeyValue) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild as Element, insertionPoint as Element, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n const idSetMatch = findIdSetMatch(newParent as Element, oldParent as Element, newChild as Element, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n const softMatch = findSoftMatch(newParent as Element, oldParent as Element, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n const tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n}\n\nfunction morphNormalizedContent(oldNode: Element, normalizedNewContent: Element, ctx: KeyValue) {\n if (ctx.morphStyle === 'innerHTML') {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n }\n if (ctx.morphStyle === 'outerHTML' || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n const bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n const previousSibling = bestMatch?.previousSibling;\n const nextSibling = bestMatch?.nextSibling;\n\n // morph it\n const morphedNode = morphOldNodeTo(oldNode, bestMatch as Node, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling as Node, morphedNode as Node, nextSibling as Node);\n }\n // otherwise nothing was added to the DOM\n return [];\n }\n throw `Do not understand how to morph style ${ ctx.morphStyle}`;\n}\n\n// =============================================================================\n// Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n// =============================================================================\nexport function morph(node: Nodes, otherNode: Nodes, config: configType = {}): void {\n const normalizedContent = normalizeContent(otherNode.get(0)) as Element;\n const ctx = createMorphContext(node.get(0) as Element, normalizedContent, config);\n morphNormalizedContent(node.get(0) as Element, normalizedContent, ctx);\n}\n","import EventEmitter from 'eventemitter3';\nimport { getInstanceMap } from '../storage/box-instances';\nimport { debug } from '../utils/debug';\nimport { morph } from '../utils/morph';\nimport { denormalizeValue } from '../utils/denormalize-value';\nimport { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { HTMLParser } from '../parsers/html-parser';\nimport { insertBookmark } from '../operations/insert-bookmark';\nimport { Selection } from './selection';\n\ntype SaveOptions = {\n inputType?: string;\n update?: boolean;\n emitEvent?: boolean;\n};\n\n// Saves and controls the history of the value of the editor.\n//\n// Example:\n//\n// before initialization: value: 'a', list: [], index: 0, canUndo: false\n// after initialization: value: 'a', list: ['a'], index: 1, canUndo: false\n// inputs 'b': value: 'ab', list: ['a', 'ab'], index: 2, canUndo: true\n// inputs 'c': value: 'abc', list: ['a', 'ab', 'abc'], index: 3\n// inputs 'd': value: 'abcd', list: ['a', 'ab', 'abc', 'abcd'], index: 4\n// undoes: value: 'abc', list: ['a', 'ab', 'abc', 'abcd'], index: 3\n// undoes: value: 'ab', list: ['a', 'ab', 'abc', 'abcd'], index: 2\n// undoes: value: 'a', list: ['a', 'ab', 'abc', 'abcd'], index: 1, canUndo: false\n// redoes: value: 'ab', list: ['a', 'ab', 'abc', 'abcd'], index: 2, canRedo: true\n// inputs 'e': value: 'abe', list: ['a', 'ab', 'abe'], index: 3, canRedo: false\nexport class History {\n private selection: Selection;\n\n private container: Nodes;\n\n private canSave: boolean = true;\n\n // an array for storing the history items\n public list: Nodes[] = [];\n\n // the next index of the list\n public index: number = 0;\n\n public limit: number = 100;\n\n public event: EventEmitter = new EventEmitter();\n\n constructor(selection: Selection) {\n this.selection = selection;\n this.container = selection.container;\n }\n\n private removeBookmark(value: string): string {\n return value.replace(/(<lake-box[^>]+)\\s+focus=\"\\w+\"([^>]*>)/ig, '$1$2').\n replace(/<lake-bookmark\\s+type=\"anchor\">\\s*<\\/lake-bookmark>/ig, '').\n replace(/<lake-bookmark\\s+type=\"focus\">\\s*<\\/lake-bookmark>/ig, '');\n }\n\n private getValue(container: Nodes): string {\n return new HTMLParser(container).getHTML();\n }\n\n private addIdToBoxes(node: Nodes): void {\n node.find('lake-box').each(nativeNode => {\n const boxNode = new Nodes(nativeNode);\n const id = `${boxNode.attr('name')}-${boxNode.attr('value')}`;\n boxNode.attr('id', id);\n });\n }\n\n private removeIdfromBoxes(node: Nodes): void {\n node.find('lake-box').each(nativeNode => {\n const boxNode = new Nodes(nativeNode);\n boxNode.removeAttr('id');\n });\n }\n\n private morphContainer(sourceItem: Nodes): void {\n const container = this.container;\n const callbacks = {\n beforeChildrenUpdated: (oldNode: Node) => {\n if (new Nodes(oldNode).name === 'lake-box') {\n return false;\n }\n },\n afterAttributeUpdated: (attributeName: string, nativeNode: Node) => {\n const node = new Nodes(nativeNode);\n if (['name', 'value'].indexOf(attributeName) >= 0 && node.name === 'lake-box') {\n getBox(node).unmount();\n const instanceMap = getInstanceMap(container.id);\n instanceMap.delete(node.id);\n }\n },\n };\n const otherContainer = sourceItem.clone(true);\n this.addIdToBoxes(container);\n this.addIdToBoxes(otherContainer);\n morph(container, otherContainer, {\n callbacks,\n });\n this.removeIdfromBoxes(container);\n this.removeIdfromBoxes(otherContainer);\n }\n\n public get canUndo(): boolean {\n return this.index > 1 && !!this.list[this.index - 2];\n }\n\n public get canRedo(): boolean {\n return !!this.list[this.index];\n }\n\n public cloneContainer(): Nodes {\n const range = this.selection.range;\n const newContainer = this.container.clone(true);\n newContainer.find('lake-box').each(nativeNode => {\n const box = getBox(nativeNode);\n box.getContainer().empty();\n });\n if (!this.container.contains(range.commonAncestor)) {\n return newContainer;\n }\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const boxNodePath = boxNode.path();\n const newBoxNode = newContainer.find(boxNodePath);\n const newRange = range.clone();\n newRange.selectBox(newBoxNode);\n insertBookmark(newRange);\n return newContainer;\n }\n const startNodePath = range.startNode.path();\n const endNodePath = range.endNode.path();\n const newStartNode = newContainer.find(startNodePath);\n const newEndNode = newContainer.find(endNodePath);\n const newRange = range.clone();\n newRange.setStart(newStartNode, range.startOffset);\n newRange.setEnd(newEndNode, range.endOffset);\n insertBookmark(newRange);\n return newContainer;\n }\n\n public undo(): void {\n if (!this.list[this.index - 2]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index > 1) {\n const prevItem = this.list[this.index - 2];\n if (!prevItem) {\n break;\n }\n this.index--;\n const prevValue = this.getValue(prevItem);\n if (this.removeBookmark(prevValue) !== this.removeBookmark(value)) {\n this.morphContainer(prevItem);\n this.event.emit('undo', prevValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History undone (index: ${this.index})`);\n }\n\n public redo(): void {\n if (!this.list[this.index]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index < this.list.length) {\n const nextItem = this.list[this.index];\n if (!nextItem) {\n break;\n }\n this.index++;\n const nextValue = this.getValue(nextItem);\n if (this.removeBookmark(nextValue) !== this.removeBookmark(value)) {\n this.morphContainer(nextItem);\n this.event.emit('redo', nextValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History redone (index: ${this.index})`);\n }\n\n public continue(): void {\n this.canSave = true;\n }\n\n public pause(): void {\n this.canSave = false;\n }\n\n public save(options: SaveOptions = {}): void {\n const inputType = options.inputType ?? '';\n const update = options.update ?? false;\n const emitEvent = options.emitEvent ?? true;\n if (!this.canSave) {\n return;\n }\n const item = this.cloneContainer();\n const value = this.getValue(item);\n if (\n this.list[this.index - 1] &&\n this.removeBookmark(this.getValue(this.list[this.index - 1])) === this.removeBookmark(value)\n ) {\n return;\n }\n if (update) {\n this.list.splice(this.index - 1, Infinity, item);\n } else {\n this.list.splice(this.index, Infinity, item);\n this.index++;\n }\n if (this.list.length > this.limit) {\n this.list.shift();\n this.index = this.list.length;\n }\n debug(`History saved (index: ${this.index}, inputType: \"${inputType}\", update: ${update}, emitEvent: ${emitEvent})`);\n if (emitEvent) {\n this.event.emit('save', denormalizeValue(value), {\n inputType,\n update,\n emitEvent,\n });\n }\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Nodes } from '../models/nodes';\n\ntype EventItem = {\n type: string;\n listener: (event: KeyboardEvent) => void | boolean;\n};\n\nexport class Keystroke {\n private container: Nodes;\n\n private keydownEventList: EventItem[] = [];\n\n private keyupEventList: EventItem[] = [];\n\n constructor(container: Nodes) {\n this.container = container;\n this.container.on('keydown', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keydownEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n this.container.on('keyup', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keyupEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n }\n\n // Sets a keydown shortcut.\n public setKeydown(type: string, listener: EventListener): void {\n this.keydownEventList.push({\n type,\n listener,\n });\n }\n\n // Sets a keyup shortcut.\n public setKeyup(type: string, listener: EventListener): void {\n this.keyupEventList.push({\n type,\n listener,\n });\n }\n\n // Executes the keydown shortcuts.\n public keydown(type: string): void {\n for (const item of this.keydownEventList) {\n if (item.type === type) {\n if (item.listener(new KeyboardEvent(type)) === false) {\n break;\n }\n }\n }\n }\n\n // Executes the keyup shortcuts.\n public keyup(type: string): void {\n for (const item of this.keyupEventList) {\n if (item.type === type) {\n if (item.listener(new KeyboardEvent(type)) === false) {\n break;\n }\n }\n }\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { boxes } from '../storage/boxes';\n\nexport class BoxManager {\n public add(component: BoxComponent): void {\n boxes.set(component.name, component);\n }\n\n public remove(name: string): void {\n boxes.delete(name);\n }\n\n public getNames(): string[] {\n return Array.from(boxes.keys());\n }\n}\n","import type { Editor } from '../editor';\nimport { InitializePlugin, UnmountPlugin } from '../types/plugin';\n\nexport class Plugin {\n private pluginMap: Map<string, InitializePlugin> = new Map();\n\n public add(name: string, plugin: InitializePlugin): void {\n if (this.pluginMap.get(name)) {\n throw new Error(`Plugin \"${name}\" is already defined.`);\n }\n this.pluginMap.set(name, plugin);\n }\n\n public loadAll(editor: Editor): Map<string, UnmountPlugin> {\n const unmountPluginMap: Map<string, UnmountPlugin> = new Map();\n for (const name of this.pluginMap.keys()) {\n const plugin = this.pluginMap.get(name);\n if (plugin && editor.config[name] !== false) {\n const result = plugin(editor);\n if (result) {\n unmountPluginMap.set(name, result);\n }\n }\n }\n return unmountPluginMap;\n }\n}\n","import debounce from 'debounce';\nimport isEqual from 'fast-deep-equal/es6';\nimport EventEmitter from 'eventemitter3';\nimport { version } from '../package.json';\nimport { SelectionState } from './types/selection';\nimport { UnmountPlugin } from './types/plugin';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue } from './utils/denormalize-value';\nimport { normalizeValue } from './utils/normalize-value';\nimport { query } from './utils/query';\nimport { getBox } from './utils/get-box';\nimport { scrollToNode } from './utils/scroll-to-node';\nimport { debug } from './utils/debug';\nimport { i18nObject } from './i18n';\nimport { Nodes } from './models/nodes';\nimport { HTMLParser } from './parsers/html-parser';\nimport { Selection } from './managers/selection';\nimport { Command } from './managers/command';\nimport { History } from './managers/history';\nimport { Keystroke } from './managers/keystroke';\nimport { BoxManager } from './managers/box-manager';\nimport { Plugin } from './managers/plugin';\nimport { Toolbar } from './ui/toolbar';\n\ntype OnMessage = (type: 'success' | 'error' | 'warning', message: string) => void;\n\ntype Config = {\n value: string;\n readonly: boolean;\n spellcheck: boolean;\n tabIndex: number;\n placeholder: string;\n indentWithTab: boolean;\n lang: string;\n minChangeSize: number;\n historySize: number;\n onMessage: OnMessage;\n [name: string]: any;\n};\n\ntype EditorConfig = {\n root: string | Node | Nodes;\n toolbar?: Toolbar;\n value?: string;\n readonly?: boolean;\n spellcheck?: boolean;\n tabIndex?: number;\n placeholder?: string;\n indentWithTab?: boolean;\n lang?: string;\n minChangeSize?: number;\n onMessage?: OnMessage;\n [name: string]: any;\n};\n\nconst defaultConfig: Config = {\n value: '<p><br /></p>',\n readonly: false,\n spellcheck: false,\n tabIndex: 0,\n placeholder: '',\n indentWithTab: true,\n lang: 'en-US',\n minChangeSize: 5,\n historySize: 100,\n onMessage: (type, message) => {\n if (type === 'success') {\n // eslint-disable-next-line no-console\n console.log(message);\n return;\n }\n if (type === 'warning') {\n // eslint-disable-next-line no-console\n console.warn(message);\n return;\n }\n if (type === 'error') {\n // eslint-disable-next-line no-console\n console.error(message);\n }\n },\n slash: false,\n mention: false,\n};\n\n// The Editor interface provides properties and methods for rendering and manipulating the editor.\nexport class Editor {\n // A string that has not yet been saved to the history.\n private unsavedInputData: string = '';\n\n // The number of input event calls before saving to the history.\n private unsavedInputCount: number = 0;\n\n // The state of the current selection.\n private state: SelectionState = {\n activeItems: [],\n disabledNameMap: new Map(),\n selectedNameMap: new Map(),\n selectedValuesMap: new Map(),\n };\n\n // The functions for unmounting plugins.\n private unmountPluginMap: Map<string, UnmountPlugin> = new Map();\n\n // The parent element of the container.\n private readonly containerWrapper: Nodes;\n\n // the current version of Lake.\n public static readonly version: string = version;\n\n // Managing the box components.\n public static readonly box = new BoxManager();\n\n // Managing the plugins.\n public static readonly plugin = new Plugin();\n\n // An element to which the editor is appended.\n public readonly root: Nodes;\n\n // A toolbar for the editor.\n public readonly toolbar: Toolbar | undefined;\n\n // The configuration for the editor.\n public readonly config: Config;\n\n // A contenteditable element where users can edit the content of the editor.\n public readonly container: Nodes;\n\n // An element to which overlays are appended.\n public readonly overlayContainer: Nodes;\n\n // Managing events.\n public readonly event: EventEmitter = new EventEmitter();\n\n // Representing the range of text selected by the user or the current position of the cursor.\n public readonly selection: Selection;\n\n // Managing commands.\n public readonly command: Command;\n\n // Managing the history of the content of the editor.\n public readonly history: History;\n\n // Managing keyboard shortcuts.\n public readonly keystroke: Keystroke;\n\n // Managing the box components.\n public readonly box: BoxManager = Editor.box;\n\n // Indicating whether the editor is in read-only mode.\n public readonly readonly: boolean;\n\n // Indicating whether a user is entering a character using a text composition system such as an Input Method Editor (IME).\n public isComposing: boolean = false;\n\n // A pop-up component which is currently displayed, such as LinkPopup, MentionMenu, and SlashMenu.\n public popup: any = null;\n\n constructor(config: EditorConfig) {\n if (!config.root) {\n throw new Error('The root of the config must be specified.');\n }\n this.root = query(config.root);\n this.toolbar = config.toolbar;\n this.config = { ...defaultConfig };\n for (const key of Object.keys(config)) {\n this.config[key] = config[key];\n }\n this.containerWrapper = query('<div class=\"lake-container-wrapper\" />');\n this.container = query('<div class=\"lake-container\" />');\n this.overlayContainer = query('<div class=\"lake-overlay\" />');\n this.readonly = this.config.readonly;\n\n this.container.attr({\n contenteditable: this.readonly ? 'false' : 'true',\n spellcheck: this.config.spellcheck ? 'true' : 'false',\n tabindex: this.config.tabIndex.toString(),\n readonly: this.readonly ? 'true' : 'false',\n });\n if (this.config.placeholder !== '') {\n this.container.attr('placeholder', this.config.placeholder);\n }\n\n this.selection = new Selection(this.container);\n this.command = new Command(this.selection);\n this.history = new History(this.selection);\n this.history.limit = this.config.historySize;\n this.keystroke = new Keystroke(this.container);\n\n editors.set(this.container.id, this);\n }\n\n private copyListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.updateSelectionRange();\n this.updateBoxSelectionStyle();\n this.emitStateChangeEvent();\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private updateSelectionRange = debounce(() => {\n this.selection.updateByRange();\n }, 1, {\n immediate: true,\n });\n\n // Updates the classes of all boxes when the current selection is changed.\n private updateBoxSelectionStyle = debounce(() => {\n // The editor has been unmounted.\n if (this.root.first().length === 0) {\n return;\n }\n const range = this.selection.getCurrentRange();\n const clonedRange = range.clone();\n clonedRange.adjustBox();\n this.container.find('lake-box').each(boxNativeNode => {\n const box = getBox(boxNativeNode);\n const boxContainer = box.getContainer();\n if (boxContainer.length === 0) {\n return;\n }\n if (range.compareBeforeNode(boxContainer) < 0 && range.compareAfterNode(boxContainer) > 0) {\n if (!(range.isCollapsed && range.startNode.get(0) === boxContainer.get(0) && range.startOffset === 0)) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-activated');\n box.event.emit('focus');\n return;\n }\n }\n if (clonedRange.intersectsNode(box.node)) {\n boxContainer.removeClass('lake-box-activated');\n if (range.isCollapsed) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.addClass('lake-box-focused');\n box.event.emit('focus');\n } else {\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-selected');\n box.event.emit('blur');\n }\n return;\n }\n boxContainer.removeClass('lake-box-activated');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.removeClass('lake-box-selected');\n box.event.emit('blur');\n });\n }, 50, {\n immediate: true,\n });\n\n // Triggers the statechange event when the current selection is changed.\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let activeItems = this.selection.getActiveItems();\n if (activeItems.length > 0 && !this.container.contains(activeItems[0].node)) {\n activeItems = [];\n }\n const disabledNameMap: Map<string, boolean> = new Map();\n const selectedNameMap: Map<string, boolean> = new Map();\n const selectedValuesMap: Map<string, string[]> = new Map();\n if (activeItems.length > 0) {\n for (const name of commandNames) {\n const commandItem = this.command.getItem(name);\n if (commandItem.isDisabled && commandItem.isDisabled(activeItems)) {\n disabledNameMap.set(name, true);\n }\n if (commandItem.isSelected && commandItem.isSelected(activeItems)) {\n selectedNameMap.set(name, true);\n }\n if (commandItem.selectedValues) {\n const values = commandItem.selectedValues(activeItems);\n if (values.length > 0) {\n selectedValuesMap.set(name, values);\n }\n }\n }\n }\n const state: SelectionState = {\n activeItems,\n disabledNameMap,\n selectedNameMap,\n selectedValuesMap,\n };\n if (isEqual(state, this.state)) {\n return;\n }\n if (this.toolbar) {\n this.toolbar.updateState(state);\n }\n this.event.emit('statechange', state);\n this.state = state;\n }, 50, {\n immediate: false,\n });\n\n // Adds or Removes a placeholder class.\n private togglePlaceholderClass(value: string): void {\n value = denormalizeValue(value);\n const className = 'lake-placeholder';\n if (value.replace('<focus />', '') === '<p><br /></p>') {\n this.container.addClass(className);\n } else {\n this.container.removeClass(className);\n }\n }\n\n // Moves the input text from box strip to normal position.\n private moveBoxStripText(): void {\n const selection = this.selection;\n const range = selection.range;\n const stripNode = range.startNode.closest('.lake-box-strip');\n const boxNode = stripNode.closest('lake-box');\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n } else {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n } else {\n const paragraph = query('<p />');\n if (range.isBoxStart) {\n boxNode.before(paragraph);\n } else {\n boxNode.after(paragraph);\n }\n range.setStart(paragraph, 0);\n range.collapseToStart();\n }\n const text = stripNode.text();\n stripNode.html('<br />');\n selection.insertContents(document.createTextNode(text));\n }\n\n // Resets the value of \"unsavedInputData\" property.\n private resetUnsavedInputData(): void {\n this.unsavedInputData = '';\n this.unsavedInputCount = 0;\n }\n\n // Handles input event.\n private handleInputEvent(event: InputEvent | CompositionEvent): void {\n this.selection.updateByRange();\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n return;\n }\n const inputType = event instanceof CompositionEvent ? 'insertText' : event.inputType;\n if (inputType === 'insertText') {\n const inputData = event.data ?? '';\n if (inputData.length > 1) {\n this.history.save({\n inputType: 'insertText',\n update: false,\n });\n return;\n }\n this.unsavedInputData += inputData;\n this.unsavedInputCount++;\n if (this.unsavedInputData.length < this.config.minChangeSize) {\n this.history.save({\n inputType: 'insertText',\n update: this.unsavedInputCount > 1,\n });\n } else {\n this.history.save({\n inputType: 'insertText',\n update: true,\n });\n this.resetUnsavedInputData();\n }\n return;\n }\n this.history.save();\n }\n\n // Binds events for inputting text.\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n this.container.removeClass('lake-placeholder');\n });\n this.container.on('compositionend', event => {\n this.isComposing = false;\n this.handleInputEvent(event as CompositionEvent);\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n this.isComposing = inputEvent.isComposing;\n if (this.isComposing) {\n return;\n }\n this.handleInputEvent(event as InputEvent);\n });\n }\n\n // Removes all unused box instances.\n private removeBoxGarbage(): void {\n const instanceMap = getInstanceMap(this.container.id);\n for (const box of instanceMap.values()) {\n if (!box.node.get(0).isConnected) {\n box.unmount();\n instanceMap.delete(box.node.id);\n }\n }\n }\n\n // Binds events for history.\n private bindHistoryEvents(): void {\n const executeCommonMethods = (value: string) => {\n if (this.fixContent()) {\n this.history.save({\n update: true,\n emitEvent: false,\n });\n value = this.getValue();\n }\n this.emitStateChangeEvent();\n this.togglePlaceholderClass(value);\n this.scrollToCursor();\n this.event.emit('change', value);\n };\n this.history.event.on('undo', value => {\n this.renderBoxes();\n executeCommonMethods(value);\n this.resetUnsavedInputData();\n });\n this.history.event.on('redo', value => {\n this.renderBoxes();\n executeCommonMethods(value);\n this.resetUnsavedInputData();\n });\n this.history.event.on('save', (value, options) => {\n this.removeBoxGarbage();\n executeCommonMethods(value);\n if (options.inputType !== 'insertText') {\n this.selection.sync();\n this.resetUnsavedInputData();\n }\n });\n }\n\n // Returns translation functions for the specified language.\n public get locale(): TranslationFunctions {\n return i18nObject(this.config.lang as Locales);\n }\n\n // Sets the default config for the specified plugin.\n public setPluginConfig(name: string, config: {[key: string]: any}): void {\n if (typeof this.config[name] !== 'object') {\n this.config[name] = {};\n }\n for (const key of Object.keys(config)) {\n if (this.config[name][key] === undefined) {\n this.config[name][key] = config[key];\n }\n }\n }\n\n // Fixes incorrect content, such as adding paragraphs for void elements or removing empty tags.\n public fixContent(): boolean {\n const range = this.selection.range;\n const cellNode = range.commonAncestor.closest('td');\n const container = cellNode.length > 0 ? cellNode : this.container;\n let changed = false;\n let children = container.children();\n for (const child of children) {\n if ((child.isBlock || child.isMark) && child.html() === '') {\n child.remove();\n changed = true;\n debug(`Content fixed: empty tag \"${child.name}\" was removed`);\n }\n }\n children = container.children();\n if (children.length === 0) {\n container.html('<p><br /></p>');\n range.shrinkBefore(container);\n changed = true;\n debug('Content fixed: default paragraph was added');\n } else if (children.length === 1) {\n const child = children[0];\n if (child.isVoid) {\n const paragraph = query('<p />');\n child.before(paragraph);\n paragraph.append(child);\n range.shrinkAfter(paragraph);\n changed = true;\n debug(`Content fixed: void element \"${child.name}\" was wrapped in paragraph`);\n }\n }\n range.adjustBr();\n return changed;\n }\n\n // Renders all boxes that haven't been rendered yet.\n public renderBoxes(): void {\n this.removeBoxGarbage();\n const container = this.container;\n const instanceMap = getInstanceMap(container.id);\n container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n if (instanceMap.get(boxNode.id)) {\n return;\n }\n const box = getBox(boxNode);\n box.render();\n });\n }\n\n // Scrolls to the cursor.\n public scrollToCursor(): void {\n const range = this.selection.range;\n if (range.isBox) {\n return;\n }\n // Creates an artificial cursor that is the same size as the cursor at the current cursor position.\n const rangeRect = range.getRect();\n if (rangeRect.x === 0 || rangeRect.y === 0) {\n return;\n }\n const containerRect = (this.container.get(0) as Element).getBoundingClientRect();\n const artificialCursor = query('<div class=\"lake-artificial-cursor\" />');\n const left = rangeRect.x - containerRect.x;\n const top = rangeRect.y - containerRect.y;\n artificialCursor.css({\n position: 'absolute',\n top: `${top}px`,\n left: `${left}px`,\n width: `${rangeRect.width}px`,\n height: `${rangeRect.height}px`,\n // background: 'red',\n 'z-index': '-1',\n });\n this.overlayContainer.find('.lake-artificial-cursor').remove();\n this.overlayContainer.append(artificialCursor);\n scrollToNode(artificialCursor, {\n behavior: 'instant',\n block: 'nearest',\n inline: 'nearest',\n });\n artificialCursor.remove();\n }\n\n // Checks whether the editor has focus.\n public hasFocus(): boolean {\n const activeElement = document.activeElement;\n if (!activeElement) {\n return false;\n }\n return query(activeElement).closest('.lake-container').get(0) === this.container.get(0);\n }\n\n // Sets focus on the editor.\n public focus(): void {\n const range = this.selection.range;\n if (this.container.contains(range.commonAncestor) && range.isBox) {\n return;\n }\n this.container.focus();\n }\n\n // Removes focus from the editor.\n public blur(): void {\n this.container.blur();\n }\n\n // Sets the specified content to the editor.\n public setValue(value: string): void {\n value = normalizeValue(value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.container.empty();\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.renderBoxes();\n this.selection.updateByBookmark();\n }\n\n // Returns the content of the editor.\n public getValue(): string {\n const item = this.history.cloneContainer();\n let value = new HTMLParser(item).getHTML();\n value = denormalizeValue(value);\n return value;\n }\n\n // Renders an editing area and sets default content to it.\n public render(): void {\n const value = normalizeValue(this.config.value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.root.empty();\n this.root.append(this.containerWrapper);\n this.containerWrapper.append(this.container);\n this.containerWrapper.append(this.overlayContainer);\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.unmountPluginMap = Editor.plugin.loadAll(this);\n if (!this.readonly) {\n this.selection.updateByBookmark();\n this.history.save({\n emitEvent: false,\n });\n }\n this.renderBoxes();\n if (this.toolbar) {\n this.toolbar.render(this);\n }\n document.addEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.addEventListener('cut', this.cutListener);\n document.addEventListener('paste', this.pasteListener);\n document.addEventListener('selectionchange', this.selectionchangeListener);\n document.addEventListener('click', this.clickListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n // Destroys the editor.\n public unmount(): void {\n // Executes delayed executions immediately.\n this.updateSelectionRange.flush();\n this.updateBoxSelectionStyle.flush();\n this.emitStateChangeEvent.flush();\n for (const name of this.unmountPluginMap.keys()) {\n const unmountPlugin = this.unmountPluginMap.get(name);\n if (unmountPlugin) {\n unmountPlugin();\n debug(`Plugin \"${name}\" unmounted`);\n }\n }\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.removeBoxGarbage();\n this.container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n const box = getBox(boxNode);\n box.unmount();\n });\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.off();\n this.root.empty();\n document.removeEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.removeEventListener('cut', this.cutListener);\n document.removeEventListener('paste', this.pasteListener);\n document.removeEventListener('selectionchange', this.selectionchangeListener);\n document.removeEventListener('click', this.clickListener);\n }\n }\n}\n","import type { Editor } from 'lakelib/editor';\nimport { getBox } from 'lakelib/utils/get-box';\n\nexport default (editor: Editor) => {\n editor.event.on('copy', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (!range.isCollapsed) {\n range.adjust();\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n return;\n }\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n const box = getBox(boxNode);\n const content = box.getHTML();\n dataTransfer.setData('text/html', content);\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('cut', (event: ClipboardEvent) => {\n const dataTransfer = event.clipboardData;\n if (!dataTransfer) {\n return;\n }\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n const fragment = editor.selection.range.cloneContents();\n const tempContainer = query('<div />');\n tempContainer.append(fragment);\n dataTransfer.setData('text/html', tempContainer.html());\n editor.selection.deleteContents();\n editor.history.save();\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n return;\n }\n event.preventDefault();\n const box = getBox(boxNode);\n const content = box.getHTML();\n dataTransfer.setData('text/html', content);\n editor.selection.removeBox();\n editor.history.save();\n });\n};\n","import type { Nodes } from '../models/nodes';\nimport { query } from './query';\nimport { template } from './template';\n\n// Changes the tag name of the specified element.\nexport function changeTagName(element: Nodes, newTagName: string): Nodes {\n const nativeElement = element.get(0) as Element;\n const newElement = query(template`<${newTagName} />`);\n for (const attr of nativeElement.attributes) {\n newElement.attr(attr.name, attr.value);\n }\n let child = element.first();\n while(child.length > 0) {\n const nextNode = child.next();\n newElement.append(child);\n child = nextNode;\n }\n element.replaceWith(newElement);\n return newElement;\n}\n","import type { Editor } from 'lakelib/editor';\nimport { blockTagNames } from 'lakelib/config/tag-names';\nimport { getElementRules } from 'lakelib/config/element-rules';\nimport { wrapNodeList } from 'lakelib/utils/wrap-node-list';\nimport { changeTagName } from 'lakelib/utils/change-tag-name';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { removeBreak } from 'lakelib/utils/remove-break';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { normalizeValue } from 'lakelib/utils/normalize-value';\nimport { uploadFile } from 'lakelib/utils/upload-file';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { HTMLParser } from 'lakelib/parsers/html-parser';\nimport { TextParser } from 'lakelib/parsers/text-parser';\n\nconst blockSelector = Array.from(blockTagNames).join(',');\n\nfunction getPasteElementRules(): any {\n const rules = getElementRules();\n rules.div = rules.p;\n for (const key of Object.keys(rules)) {\n const attributeRules = rules[key];\n delete attributeRules.id;\n delete attributeRules.class;\n }\n return rules;\n}\n\nfunction fixNestedBlocks(block: Nodes): void {\n const nodeList = [ block ];\n for (const node of block.getWalker()) {\n nodeList.push(node);\n }\n for (const node of nodeList) {\n if (node.name === 'div') {\n if (node.find(blockSelector).length > 0) {\n node.remove(true);\n } else {\n changeTagName(node, 'p');\n }\n } else if (node.isHeading || ['blockquote', 'li'].indexOf(node.name) >= 0) {\n node.find(blockSelector).remove(true);\n }\n }\n}\n\nfunction fixClipboardData(fragment: DocumentFragment): void {\n let node = new Nodes(fragment.firstChild);\n while (node.length > 0) {\n const nextNode = node.next();\n if (node.isBlock) {\n fixNestedBlocks(node);\n }\n node = nextNode;\n }\n let nodeList: Nodes[] = [];\n node = new Nodes(fragment.firstChild);\n while (node.length > 0) {\n const nextNode = node.next();\n if (node.isMark || node.isText || node.isBookmark || node.isInlineBox) {\n nodeList.push(node);\n } else {\n wrapNodeList(nodeList);\n nodeList = [];\n }\n node = nextNode;\n }\n wrapNodeList(nodeList);\n}\n\nfunction insertFirstNode(editor: Editor, otherNode: Nodes): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n if (boxNode.length > 0) {\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n } else {\n editor.selection.removeBox();\n }\n } else {\n const paragraph = query('<p />');\n if (range.isBoxStart) {\n boxNode.before(paragraph);\n range.shrinkAfter(paragraph);\n } else if (range.isBoxEnd) {\n boxNode.after(paragraph);\n range.shrinkAfter(paragraph);\n } else {\n editor.selection.removeBox();\n }\n }\n }\n const block = range.startNode.closestBlock();\n if (otherNode.isBlockBox) {\n const box = getBox(otherNode);\n const value = otherNode.attr('value') !== '' ? box.value : undefined;\n editor.selection.insertBox(box.name, value);\n otherNode.remove();\n return;\n }\n if (otherNode.first().length > 0) {\n removeBreak(block);\n }\n if (block.isEmpty && block.name === 'p') {\n block.replaceWith(otherNode);\n otherNode.find('lake-box').each(node => {\n getBox(node).render();\n });\n range.shrinkAfter(otherNode);\n return;\n }\n let child = otherNode.first();\n while(child.length > 0) {\n if (child.name === 'li') {\n child = child.first();\n }\n const nextSibling = child.next();\n editor.selection.insertContents(child);\n if (child.isBox) {\n getBox(child).render();\n } else if (child.isElement) {\n child.find('lake-box').each(node => {\n getBox(node).render();\n });\n }\n child = nextSibling;\n }\n otherNode.remove();\n}\n\nfunction pasteFragment(editor: Editor, fragment: DocumentFragment): void {\n const selection = editor.selection;\n const range = selection.range;\n if (fragment.childNodes.length === 0) {\n return;\n }\n const firstNode = new Nodes(fragment.firstChild);\n let lastNode = new Nodes(fragment.lastChild);\n if (range.getBlocks().length === 0) {\n selection.setBlocks('<p />');\n }\n insertFirstNode(editor, firstNode);\n // remove br\n let child = new Nodes(fragment.firstChild);\n while (child.length > 0) {\n const next = child.next();\n if (child.name === 'br') {\n child.remove();\n }\n child = next;\n }\n lastNode = new Nodes(fragment.lastChild);\n // insert fragment\n if (fragment.childNodes.length > 0) {\n const parts = selection.splitBlock();\n if (parts.start) {\n range.setEndAfter(parts.start);\n range.collapseToEnd();\n }\n if (parts.end && parts.end.isEmpty) {\n parts.end.remove();\n }\n selection.insertContents(fragment);\n editor.renderBoxes();\n range.shrinkAfter(lastNode);\n }\n fixNumberedList(editor.container.children().filter(node => node.isBlock));\n editor.history.save();\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('paste', event => {\n const { requestTypes } = editor.config.image;\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n editor.selection.deleteContents();\n // upload file\n if (dataTransfer.files.length > 0) {\n for (const file of dataTransfer.files) {\n if (requestTypes.indexOf(file.type) >= 0) {\n uploadFile({\n editor,\n name: file.type.indexOf('image/') === 0 ? 'image' : 'file',\n file,\n onError: error => editor.config.onMessage('error', error),\n });\n }\n }\n return;\n }\n const types = dataTransfer.types;\n const isPlainText = (types.length === 1 && types[0] === 'text/plain');\n if (isPlainText) {\n const content = dataTransfer.getData('text/plain');\n const textParser = new TextParser(content);\n const fragment = textParser.getFragment();\n editor.event.emit('beforepaste', fragment);\n pasteFragment(editor, fragment);\n return;\n }\n const content = normalizeValue(dataTransfer.getData('text/html'));\n const rules = getPasteElementRules();\n const htmlParser = new HTMLParser(content, rules);\n const fragment = htmlParser.getFragment();\n editor.event.emit('beforepaste', fragment);\n fixClipboardData(fragment);\n pasteFragment(editor, fragment);\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { template } from 'lakelib/utils/template';\nimport { Nodes } from 'lakelib/models/nodes';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n let draggedNode: Nodes | null = null;\n let dropIndication: Nodes | null = null;\n let targetBlock: Nodes | null = null;\n let dropPosition: 'top' | 'bottom' = 'bottom';\n // The dragstart event is fired when the user starts dragging an element or text selection.\n editor.container.on('dragstart', event => {\n draggedNode = null;\n const dragEvent = event as DragEvent;\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n dataTransfer.effectAllowed = 'move';\n // set the dragged node\n const targetNode = query(dragEvent.target as Element);\n const boxNode = targetNode.closest('lake-box');\n if (boxNode.length === 0) {\n dragEvent.preventDefault();\n return;\n }\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n dragEvent.preventDefault();\n return;\n }\n draggedNode = boxNode;\n // prepare an indication rod\n dropIndication = query(template`\n <div class=\"lake-drop-indication\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\n <path d=\"M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z\"></path>\n </svg>\n </div>\n `);\n editor.overlayContainer.append(dropIndication);\n });\n // The dragover event is fired when an element or text selection is being dragged over a valid drop target (every few hundred milliseconds).\n editor.container.on('dragover', event => {\n const dragEvent = event as DragEvent;\n dragEvent.preventDefault();\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n dataTransfer.dropEffect = 'move';\n if (!dropIndication) {\n return;\n }\n const targetNode = query(dragEvent.target as Element);\n if (targetNode.isContainer) {\n return;\n }\n const targetBoxNode = targetNode.closest('lake-box');\n if (targetBoxNode.length > 0) {\n if (targetBoxNode.isBlockBox) {\n targetBlock = targetBoxNode;\n } else {\n targetBlock = targetBoxNode.closestBlock();\n }\n } else {\n targetBlock = targetNode.closestBlock();\n }\n const containerRect = (editor.container.get(0) as Element).getBoundingClientRect();\n let targetBlcokRect = (targetBlock.get(0) as Element).getBoundingClientRect();\n dropPosition = 'bottom';\n let left = targetBlcokRect.x - containerRect.x;\n let top = targetBlcokRect.y + targetBlcokRect.height - containerRect.y + (parseInt(targetBlock.computedCSS('margin-bottom'), 10) / 2);\n if (dragEvent.clientY < targetBlcokRect.y + (targetBlcokRect.height / 2)) {\n const prevBlock = targetBlock.prev();\n if (prevBlock.length > 0 && prevBlock.isBlock || prevBlock.isBlockBox) {\n targetBlock = prevBlock;\n targetBlcokRect = (targetBlock.get(0) as Element).getBoundingClientRect();\n left = targetBlcokRect.x - containerRect.x;\n top = targetBlcokRect.y + targetBlcokRect.height - containerRect.y + (parseInt(targetBlock.computedCSS('margin-bottom'), 10) / 2);\n } else {\n dropPosition = 'top';\n top = targetBlcokRect.y - containerRect.y - (parseInt(editor.container.computedCSS('padding-top'), 10) / 2);\n }\n }\n dropIndication.css({\n top: `${top}px`,\n left: `${left}px`,\n width: `${targetBlcokRect.width}px`,\n display: 'block',\n });\n });\n // The dragend event is fired when a drag operation ends (by releasing a mouse button or hitting the escape key).\n editor.container.on('dragend', () => {\n if (!dropIndication) {\n return;\n }\n dropIndication.remove();\n dropIndication = null;\n });\n // The drop event is fired when an element or text selection is dropped on a valid drop target.\n editor.container.on('drop', event => {\n const dragEvent = event as DragEvent;\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n if (!dropIndication) {\n return;\n }\n dropIndication.remove();\n dropIndication = null;\n // drop a box\n if (draggedNode && targetBlock && draggedNode.isBox) {\n if (draggedNode.get(0) === targetBlock.get(0)) {\n return;\n }\n if (dropPosition === 'bottom' && draggedNode.get(0) === targetBlock.next().get(0)) {\n return;\n }\n dragEvent.preventDefault();\n const draggedBox = getBox(draggedNode);\n const range = editor.selection.range;\n if (targetBlock.isBox) {\n if (dropPosition === 'top') {\n range.selectBoxStart(targetBlock);\n } else {\n range.selectBoxEnd(targetBlock);\n }\n } else {\n range.selectNodeContents(targetBlock);\n if (dropPosition === 'top') {\n range.collapseToStart();\n } else {\n range.collapseToEnd();\n }\n }\n editor.selection.insertBox(draggedBox.name, draggedBox.value);\n draggedNode.remove();\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('undo', {\n isDisabled: () => !editor.history.canUndo,\n execute: () => {\n editor.history.undo();\n },\n });\n editor.keystroke.setKeydown('mod+z', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.command.execute('undo');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('redo', {\n isDisabled: () => !editor.history.canRedo,\n execute: () => {\n editor.history.redo();\n },\n });\n const redoHandler = (event: Event) => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.command.execute('redo');\n };\n editor.keystroke.setKeydown('mod+y', redoHandler);\n editor.keystroke.setKeydown('mod+shift+z', redoHandler);\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('selectAll', {\n execute: () => {\n const range = editor.selection.range;\n range.selectNodeContents(editor.container);\n range.shrink();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('heading', {\n selectedValues: activeItems => {\n const currentItem = activeItems.find(item => item.node.isHeading || item.name === 'p');\n return currentItem ? [currentItem.name] : [];\n },\n execute: (type: string) => {\n editor.selection.setBlocks(`<${type} />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { template } from '../utils/template';\n\nconst typeList = [\n 'info',\n 'tip',\n 'warning',\n 'danger',\n];\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('blockQuote', {\n isSelected: activeItems => !!activeItems.find(item => item.name === 'blockquote'),\n execute: (type?: string) => {\n if (type && typeList.indexOf(type) >= 0) {\n editor.selection.setBlocks(template`<blockquote type=\"${type}\" />`);\n } else {\n editor.selection.setBlocks('<blockquote />');\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\n\nfunction setParagraph(editor: Editor): void {\n editor.selection.setBlocks('<p />');\n}\n\nfunction setNumberedList(editor: Editor): void {\n editor.selection.setBlocks('<ol><li></li></ol>');\n}\n\nfunction setBulletedList(editor: Editor): void {\n editor.selection.setBlocks('<ul><li></li></ul>');\n}\n\nfunction setChecklist(editor: Editor, value: boolean): void {\n editor.selection.setBlocks(`<ul type=\"checklist\"><li value=\"${value}\"></li></ul>`);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('list', {\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.name === 'ol') {\n currentValue = 'numbered';\n break;\n }\n if (item.name === 'ul' && !item.node.hasAttr('type')) {\n currentValue = 'bulleted';\n break;\n }\n if (item.name === 'ul' && item.node.attr('type') === 'checklist') {\n currentValue = 'checklist';\n break;\n }\n }\n return currentValue ? [currentValue] : [];\n },\n execute: (type: 'numbered' | 'bulleted' | 'checklist', value: boolean = false) => {\n const blocks = editor.selection.range.getBlocks();\n let isNumberedList = false;\n let isBulletedList = false;\n let isChecklist = false;\n for (const block of blocks) {\n if (!isNumberedList && block.name === 'ol') {\n isNumberedList = true;\n }\n if (!isBulletedList && block.name === 'ul' && !block.hasAttr('type')) {\n isBulletedList = true;\n }\n if (!isChecklist && block.name === 'ul' && block.attr('type') === 'checklist') {\n isChecklist = true;\n }\n }\n if (isNumberedList) {\n if (type === 'numbered') {\n setParagraph(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n } else if (isBulletedList) {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setParagraph(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n } else if (isChecklist) {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setParagraph(editor);\n }\n } else {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n }\n editor.history.save();\n },\n });\n editor.container.on('click', event => {\n const mouseEvent = event as MouseEvent;\n if (!mouseEvent.target) {\n return;\n }\n const target = query(mouseEvent.target as Element);\n if (target.name === 'li' && target.attr('value') !== '' && mouseEvent.offsetX <= 18) {\n target.attr('value', (target.attr('value') !== 'true').toString());\n editor.history.save();\n }\n });\n};\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { insertBlock } from 'lakelib/operations/insert-block';\n\n// Inserts a table.\nexport function insertTable(range: Range, rows: number, columns: number): Nodes {\n let html = '<table>';\n for (let i = 0; i < rows; i++) {\n html += '<tr>';\n for (let j = 0; j < columns; j++) {\n html += '<td><p><br /></p></td>';\n }\n html += '</tr>';\n }\n html += '</table>';\n const tableNode = query(html);\n insertBlock(range, tableNode);\n range.shrinkBefore(tableNode);\n debug(`insertTable: table ${tableNode.id}`);\n return tableNode;\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\n\n// Removes a table.\nexport function deleteTable(range: Range): void {\n const tableNode = range.startNode.closest('table');\n const block = query('<p><br /></p>');\n tableNode.replaceWith(block);\n range.shrinkBefore(block);\n debug(`deleteTable: table ${tableNode.id}`);\n}\n","type TableMap = HTMLTableCellElement[][];\n\n// Returns a virtual map of the specified table, treating merged cells as if they were split.\nexport function getTableMap(table: HTMLTableElement): TableMap {\n const tableMap: TableMap = [];\n for (let i = 0; i < table.rows.length; i++) {\n tableMap[i] = [];\n }\n for (let rowIndex = 0; rowIndex < tableMap.length; rowIndex++) {\n const row = table.rows[rowIndex];\n const cells = tableMap[rowIndex];\n let newCellIndex = 0;\n for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {\n newCellIndex = cellIndex;\n while (cells[newCellIndex]) {\n newCellIndex++;\n }\n const cell = row.cells[cellIndex];\n for (let i = 0; i < cell.colSpan; i++) {\n for (let j = 0; j < cell.rowSpan; j++) {\n const targetRowCells = tableMap[rowIndex + j];\n if (targetRowCells) {\n targetRowCells[newCellIndex + i] = cell;\n }\n }\n }\n }\n }\n return tableMap;\n}\n\n// Returns the virtual index of a cell, treating merged cells as if they were split.\nexport function getColumnIndex(tableMap: TableMap, rowIndex: number, currentCell: HTMLTableCellElement): number {\n const currentRowCells = tableMap[rowIndex];\n for (let cellIndex = 0; cellIndex < currentRowCells.length; cellIndex++) {\n const cell = currentRowCells[cellIndex];\n if (cell === currentCell) {\n return cellIndex;\n }\n }\n return -1;\n}\n\n// Returns the real index of a cell by an column index that treats merged cells as if they were split.\n//\n// Example:\n//\n// Table map:\n// a1 b1 b1 d1 e1 f1\n// a2 b1 b1 d2 e2 f2\n// a3 b1 b1 d3 e2 f3\n//\n// Result:\n// b1: vertual index is 1, real index is 1\n// f1: vertual index is 5, real index is 4\n// f2: vertual index is 5, real index is 3\n// f3: vertual index is 5, real index is 2\nexport function getCellIndex(tableMap: TableMap, rowIndex: number, columnIndex: number): number {\n const currentRowCells = tableMap[rowIndex];\n const aboveRowCells = tableMap[rowIndex - 1];\n let cellIndex = columnIndex;\n for (let i = 0; i < columnIndex; i++) {\n const cell = currentRowCells[i];\n const nextCell = currentRowCells[i + 1];\n if (cell === nextCell) {\n cellIndex--;\n } else if (aboveRowCells) {\n const aboveCell = aboveRowCells[i];\n if (cell === aboveCell) {\n cellIndex--;\n }\n }\n }\n return cellIndex;\n}\n\n// Returns a boolean value indicating whether the column contains a cell merged with adjacent cell.\nexport function isNormalColumn(tableMap: TableMap, columnIndex: number): boolean {\n for (let i = 0; i < tableMap.length; i++) {\n const cells = tableMap[i];\n const cell = cells[columnIndex];\n const belowRowCells = tableMap[i + 1];\n if (belowRowCells && cell.colSpan !== belowRowCells[columnIndex].colSpan) {\n return false;\n }\n }\n return true;\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\n\ntype InsertColumnDirection = 'left' | 'right';\n\n// Inserts a column to the left or right of the start of the specified range.\nexport function insertColumn(range: Range, direction: InsertColumnDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n // a column should be inserted into columnIndex\n let columnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n if (direction === 'right') {\n const currentRowCells = tableMap[currentRowIndex];\n columnIndex++;\n while (currentRowCells && currentCell === currentRowCells[columnIndex]) {\n columnIndex++;\n }\n }\n debug(`insertColumn: rows ${table.rows.length}, column ${columnIndex}, ${direction}`);\n for (let i = 0; i < table.rows.length; i++) {\n const row = table.rows[i];\n const cells = tableMap[i];\n const cellIndex = getCellIndex(tableMap, i, columnIndex);\n const cell = row.cells[cellIndex];\n if (cell && cell.colSpan > 1 && cell === cells[columnIndex - 1]) {\n cell.colSpan += 1;\n if (cell.rowSpan > 1) {\n i += cell.rowSpan - 1;\n }\n } else {\n const newCell = row.insertCell(cellIndex);\n newCell.innerHTML = '<p><br /></p>';\n }\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex, isNormalColumn } from './utils';\nimport { deleteTable } from './delete-table';\n\n// Removes the column containing the start of the specified range from a table.\nexport function deleteColumn(range: Range): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n let newTargetCell: HTMLTableCellElement | null = null;\n const realIndex = currentCell.cellIndex;\n if (currentRow.cells[realIndex + 1]) {\n newTargetCell = currentRow.cells[realIndex + 1];\n } else if (currentRow.cells[realIndex - 1]) {\n newTargetCell = currentRow.cells[realIndex - 1];\n }\n debug(`deleteColumn: rows ${table.rows.length}, column ${currentColumnIndex}`);\n const isNormal = isNormalColumn(tableMap, currentColumnIndex);\n for (let i = 0; i < table.rows.length; i++) {\n const row = table.rows[i];\n const cellIndex = getCellIndex(tableMap, i, currentColumnIndex);\n const cell = row.cells[cellIndex];\n if (cell.rowSpan > 1) {\n i += cell.rowSpan - 1;\n }\n if (cell.colSpan > 1 && !isNormal) {\n cell.colSpan -= 1;\n if (cell.colSpan === 1) {\n cell.removeAttribute('colSpan');\n }\n } else {\n if (cell === currentCell && newTargetCell) {\n range.shrinkBefore(query(newTargetCell));\n }\n row.deleteCell(cellIndex);\n }\n }\n if (table.rows[0].cells.length === 0) {\n deleteTable(range);\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getCellIndex } from './utils';\n\ntype InsertRowDirection = 'up' | 'down';\n\n// Inserts a row above or below the start of the specified range.\nexport function insertRow(range: Range, direction: InsertRowDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n let tableMap = getTableMap(table);\n const columnCount = tableMap[0].length;\n let targetRowIndex: number;\n if (direction === 'up') {\n targetRowIndex = currentRow.rowIndex;\n } else {\n targetRowIndex = currentRow.rowIndex + 1;\n }\n const targetRow = table.rows[targetRowIndex];\n debug(`insertRow: rows ${table.rows.length}, target row ${targetRowIndex}`);\n const newRow = table.insertRow(targetRowIndex);\n // last row\n if (!targetRow) {\n for (let i = 0; i < columnCount; i++) {\n const newCell = newRow.insertCell(newRow.cells.length);\n newCell.innerHTML = '<p><br /></p>';\n }\n return;\n }\n tableMap = getTableMap(table);\n targetRowIndex = targetRow.rowIndex;\n let prevCellIndex: number = -1;\n for (let i = 0; i < columnCount; i++) {\n const cellIndex = getCellIndex(tableMap, targetRowIndex, i);\n if (cellIndex !== prevCellIndex) {\n prevCellIndex = cellIndex;\n const cell = targetRow.cells[cellIndex];\n if (!cell) {\n break;\n }\n const newCell = newRow.insertCell(newRow.cells.length);\n newCell.innerHTML = '<p><br /></p>';\n if (cell.colSpan > 1) {\n newCell.colSpan = cell.colSpan;\n i += cell.colSpan - 1;\n }\n }\n }\n // correct the rowSpan of the affected cells\n for (let i = targetRowIndex - 1; i >= 0; i--) {\n const cells = table.rows[i].cells;\n for (let j = 0; j < cells.length; j++) {\n const cell = cells[j];\n if (cell.rowSpan > 1 && cell.rowSpan + 1 > targetRowIndex - i) {\n cell.rowSpan += 1;\n }\n }\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\nimport { deleteTable } from './delete-table';\n\n// Removes the row containing the start of the specified range from a table.\nexport function deleteRow(range: Range): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n let tableMap = getTableMap(table);\n const columnCount = tableMap[0].length;\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n const newTargetRow = table.rows[currentRowIndex + 1] || table.rows[currentRowIndex - 1];\n debug(`deleteRow: rows ${table.rows.length}, target row ${currentRowIndex}, column ${currentColumnIndex}`);\n // correct the rowSpan of the affected cells\n for (let i = currentRowIndex - 1; i >= 0; i--) {\n const cells = table.rows[i].cells;\n for (let j = 0; j < cells.length; j++) {\n const cell = cells[j];\n if (cell.rowSpan > 1 && cell.rowSpan > currentRowIndex - i) {\n cell.rowSpan -= 1;\n if (cell.rowSpan === 1) {\n cell.removeAttribute('rowSpan');\n }\n }\n }\n }\n const belowRow = table.rows[currentRowIndex + 1];\n if (belowRow) {\n let prevCellIndex: number = -1;\n for (let i = 0; i < columnCount; i++) {\n const cellIndex = getCellIndex(tableMap, currentRowIndex, i);\n if (cellIndex !== prevCellIndex) {\n prevCellIndex = cellIndex;\n const cell = currentRow.cells[cellIndex];\n if (cell.rowSpan > 1) {\n const belowCellIndex = getCellIndex(tableMap, currentRowIndex + 1, i);\n let newCell = belowRow.insertCell(belowCellIndex);\n const clonedCell = cell.cloneNode(true) as HTMLTableCellElement;\n clonedCell.removeAttribute('rowSpan');\n newCell.replaceWith(clonedCell);\n newCell = clonedCell;\n if (cell.rowSpan > 2) {\n newCell.rowSpan = cell.rowSpan - 1;\n }\n }\n }\n }\n }\n table.deleteRow(currentRowIndex);\n if (newTargetRow) {\n tableMap = getTableMap(table);\n const cellIndex = getCellIndex(tableMap, newTargetRow.rowIndex, currentColumnIndex);\n const newTargetCell = newTargetRow.cells[cellIndex];\n if (newTargetCell) {\n range.shrinkBefore(query(newTargetCell));\n }\n }\n if (table.rows.length === 0) {\n deleteTable(range);\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex } from './utils';\n\nexport type MergeDirection = 'up' | 'right' | 'down' | 'left';\n\n// Merges adjacent cells.\nexport function mergeCells(range: Range, direction: MergeDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n // merge cell left or right\n if (direction === 'left' || direction === 'right') {\n const cellIndex = currentCell.cellIndex;\n let cell: HTMLTableCellElement;\n let otherCellIndex: number;\n let otherCell: HTMLTableCellElement;\n if (direction === 'left') {\n cell = currentRow.cells[cellIndex - 1];\n otherCellIndex = cellIndex;\n otherCell = currentCell;\n } else {\n cell = currentCell;\n otherCellIndex = cellIndex + 1;\n otherCell = currentRow.cells[otherCellIndex];\n }\n if (!cell || !otherCell) {\n return;\n }\n debug(`mergeCells: row ${currentRowIndex}, cell ${cellIndex}, other row ${currentRowIndex}, other cell ${otherCellIndex}`);\n if (cell.rowSpan !== otherCell.rowSpan) {\n return;\n }\n const currentRowCells = tableMap[currentRowIndex];\n const columnIndex = getColumnIndex(tableMap, currentRowIndex, cell);\n const otherColumnIndex = getColumnIndex(tableMap, currentRowIndex, otherCell);\n // check whether the two cells are adjacent\n if (currentRowCells[columnIndex + 1] !== otherCell && currentRowCells[otherColumnIndex - 1] !== cell) {\n return;\n }\n cell.colSpan += otherCell.colSpan;\n mergeNodes(query(cell), query(otherCell));\n range.shrinkBefore(query(cell));\n return;\n }\n // merge cell up or down\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n let rowIndex: number;\n let cell: HTMLTableCellElement | null;\n let otherRowIndex: number;\n let otherRow: HTMLTableRowElement;\n let otherCellIndex: number;\n let otherCell: HTMLTableCellElement | null;\n if (direction === 'up') {\n rowIndex = -1;\n cell = null;\n for (let i = currentRow.rowIndex - 1; i >= 0; i--) {\n const cells = tableMap[i];\n if (!cells) {\n break;\n }\n const aboveCell = cells[currentColumnIndex];\n if (!aboveCell) {\n break;\n }\n if (cell && aboveCell !== cell) {\n break;\n }\n rowIndex = i;\n cell = aboveCell;\n }\n otherRowIndex = currentRow.rowIndex;\n otherRow = currentRow;\n otherCellIndex = currentCell.cellIndex;\n otherCell = currentCell;\n } else {\n rowIndex = currentRow.rowIndex;\n cell = currentCell;\n otherRowIndex = -1;\n otherCell = null;\n otherCellIndex = -1;\n for (let i = currentRow.rowIndex + 1; i < table.rows.length; i++) {\n const cells = tableMap[i];\n if (!cells) {\n break;\n }\n const belowCell = cells[currentColumnIndex];\n if (!belowCell) {\n break;\n }\n if (belowCell !== otherCell) {\n otherRowIndex = i;\n otherCell = belowCell;\n otherCellIndex = otherCell.cellIndex;\n break;\n }\n }\n otherRow = table.rows[otherRowIndex];\n if (!otherRow) {\n return;\n }\n }\n if (!cell || !otherCell) {\n return;\n }\n debug(`mergeCells: row ${rowIndex}, cell ${cell.cellIndex}, other row ${otherRowIndex}, other cell ${otherCellIndex}`);\n if (cell.colSpan !== otherCell.colSpan) {\n return;\n }\n cell.rowSpan += otherCell.rowSpan;\n mergeNodes(query(cell), query(otherCell));\n range.shrinkBefore(query(cell));\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\n\nexport type SplitDirection = 'leftRight' | 'topBottom';\n\n// Splits a cell that contains the start of the specified range from a table.\nexport function splitCell(range: Range, direction: SplitDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const originalRowSpan = currentCell.rowSpan;\n const originalColSpan = currentCell.colSpan;\n let tableMap = getTableMap(table);\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n debug(`splitCell: row ${currentRowIndex}, cell ${currentColumnIndex}, ${direction}`);\n // split cell top and bottom\n if (direction === 'topBottom') {\n const currentRowCells = tableMap[currentRowIndex];\n for (let i = 0; i < currentRowCells.length; i++) {\n const cell = currentRowCells[i];\n if (cell === currentCell) {\n // insert a cell after current cell\n const targetRow = originalRowSpan > 1 ? table.rows[currentRowIndex + 1] : table.insertRow(currentRowIndex + 1);\n const cellIndex = getCellIndex(tableMap, currentRowIndex + 1, currentColumnIndex);\n const newCell = targetRow.insertCell(cellIndex);\n newCell.innerHTML = '<p><br /></p>';\n // copy colSpan and rowSpan from current cell\n if (currentCell.colSpan > 1) {\n newCell.colSpan = currentCell.colSpan;\n }\n if (currentCell.rowSpan > 2) {\n newCell.rowSpan = currentCell.rowSpan - 1;\n }\n currentCell.removeAttribute('rowSpan');\n tableMap = getTableMap(table);\n } else if (originalRowSpan === 1) {\n // correct the rowSpan of the affected cells\n for (let j = currentRowIndex; j >= 0; j--) {\n const aboveCellList = tableMap[j];\n if (j === 0 || cell !== aboveCellList[i]) {\n cell.rowSpan += 1;\n break;\n }\n }\n tableMap = getTableMap(table);\n }\n if (cell.colSpan > 1) {\n i += cell.colSpan - 1;\n }\n }\n return;\n }\n // split cell left and right\n for (let i = 0; i < tableMap.length; i++) {\n const row = table.rows[i];\n const cells = tableMap[i];\n const cell = cells[currentColumnIndex];\n if (cell === currentCell) {\n const aboveCellList = tableMap[i - 1];\n if (!aboveCellList || cell !== aboveCellList[currentColumnIndex]) {\n const cellIndex = getCellIndex(tableMap, i, currentColumnIndex);\n const newCell = row.insertCell(cellIndex + 1);\n newCell.innerHTML = '<p><br /></p>';\n if (cell.rowSpan > 1) {\n newCell.rowSpan = cell.rowSpan;\n }\n if (cell.colSpan > 2) {\n newCell.colSpan = cell.colSpan - 1;\n }\n cell.removeAttribute('colSpan');\n }\n } else {\n for (let j = currentColumnIndex; j >= 0; j--) {\n if (j === 0 || cell !== cells[j]) {\n if (originalColSpan === 1) {\n cell.colSpan += 1;\n }\n break;\n }\n }\n }\n }\n}\n","import './table.css';\nimport { KeyValue } from 'lakelib/types/object';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { DropdownMenuItem } from 'lakelib/types/dropdown';\nimport { icons } from 'lakelib/icons';\nimport { colorMenuItems } from 'lakelib/config/menu-items';\nimport { toHex } from 'lakelib/utils/to-hex';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { FloatingToolbar } from 'lakelib/ui/floating-toolbar';\nimport { Editor } from 'lakelib/editor';\nimport { insertTable } from './insert-table';\nimport { deleteTable } from './delete-table';\nimport { insertColumn } from './insert-column';\nimport { deleteColumn } from './delete-column';\nimport { insertRow } from './insert-row';\nimport { deleteRow } from './delete-row';\nimport { mergeCells, MergeDirection } from './merge-cells';\nimport { splitCell, SplitDirection } from './split-cell';\n\nconst columnMenuItems: DropdownMenuItem[] = [\n {\n value: 'insertLeft',\n text: locale => locale.table.insertColumnLeft(),\n },\n {\n value: 'insertRight',\n text: locale => locale.table.insertColumnRight(),\n },\n {\n value: 'delete',\n text: locale => locale.table.deleteColumn(),\n },\n];\n\nconst rowMenuItems: DropdownMenuItem[] = [\n {\n value: 'insertAbove',\n text: locale => locale.table.insertRowAbove(),\n },\n {\n value: 'insertBelow',\n text: locale => locale.table.insertRowBelow(),\n },\n {\n value: 'delete',\n text: locale => locale.table.deleteRow(),\n },\n];\n\nconst mergeMenuItems: DropdownMenuItem[] = [\n {\n value: 'up',\n text: locale => locale.table.mergeUp(),\n },\n {\n value: 'right',\n text: locale => locale.table.mergeRight(),\n },\n {\n value: 'down',\n text: locale => locale.table.mergeDown(),\n },\n {\n value: 'left',\n text: locale => locale.table.mergeLeft(),\n },\n];\n\nconst splitMenuItems: DropdownMenuItem[] = [\n {\n value: 'leftRight',\n text: locale => locale.table.splitLeftRight(),\n },\n {\n value: 'topBottom',\n text: locale => locale.table.splitTopBottom(),\n },\n];\n\nfunction getFloatingToolbarItems(editor: Editor, values: KeyValue): ToolbarItem[] {\n const items: ToolbarItem[] = [\n {\n name: 'expand',\n type: 'button',\n icon: icons.get('expand'),\n tooltip: locale => locale.table.fitTable(),\n isSelected: () => {\n const range = editor.selection.range;\n const tableNode = range.startNode.closest('table');\n if (tableNode.length === 0) {\n return false;\n }\n const width = tableNode.css('width');\n const pageWidth = `${editor.container.innerWidth() - 2}px`;\n return width === pageWidth;\n },\n onClick: () => {\n const range = editor.selection.range;\n const tableNode = range.startNode.closest('table');\n if (tableNode.length === 0) {\n return;\n }\n const width = tableNode.css('width');\n const pageWidth = `${editor.container.innerWidth() - 2}px`;\n if (width === pageWidth) {\n tableNode.css('width', '');\n } else {\n tableNode.css('width', pageWidth);\n }\n editor.history.save();\n },\n },\n {\n name: 'backgroundColor',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('backgroundColor'),\n accentIcon: icons.get('backgroundColorAccent'),\n defaultValue: values.backgroundColor,\n tooltip: locale => locale.table.cellBackground(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n selectedValues: () => {\n const range = editor.selection.range;\n const cellNode = range.startNode.closest('td');\n if (cellNode.length > 0) {\n const currentValue = cellNode.computedCSS('background-color');\n return [toHex(currentValue)];\n }\n return [];\n },\n onSelect: (_, value) => {\n const range = editor.selection.range;\n const cellNode = range.startNode.closest('td');\n cellNode.css('background-color', value);\n values.backgroundColor = value;\n editor.history.save();\n },\n },\n {\n name: 'tableColumn',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableColumn'),\n tooltip: locale => locale.table.column(),\n menuType: 'list',\n menuItems: columnMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n if (value === 'insertLeft') {\n insertColumn(range, 'left');\n } else if (value === 'insertRight') {\n insertColumn(range, 'right');\n } else {\n deleteColumn(range);\n }\n editor.history.save();\n },\n },\n {\n name: 'tableRow',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableRow'),\n tooltip: locale => locale.table.row(),\n menuType: 'list',\n menuItems: rowMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n if (value === 'insertAbove') {\n insertRow(range, 'up');\n } else if (value === 'insertBelow') {\n insertRow(range, 'down');\n } else {\n deleteRow(range);\n }\n editor.history.save();\n },\n },\n {\n name: 'tableMerge',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableMerge'),\n tooltip: locale => locale.table.merge(),\n menuType: 'list',\n menuItems: mergeMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n mergeCells(range, value as MergeDirection);\n editor.history.save();\n },\n },\n {\n name: 'tableSplit',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableSplit'),\n tooltip: locale => locale.table.split(),\n menuType: 'list',\n menuItems: splitMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n splitCell(range, value as SplitDirection);\n editor.history.save();\n },\n },\n {\n name: 'remove',\n type: 'button',\n icon: icons.get('remove'),\n tooltip: locale => locale.table.remove(),\n onClick: () => {\n deleteTable(editor.selection.range);\n editor.history.save();\n },\n },\n ];\n return items;\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const floatingToolbarValues: KeyValue = {\n backgroundColor: '',\n };\n let toolbar: FloatingToolbar | null = null;\n let savedTableNode: Nodes | null = null;\n editor.event.on('statechange', () => {\n editor.container.find('table').removeClass('lake-table-focused');\n editor.container.find('td').removeClass('lake-td-focused');\n if (toolbar) {\n toolbar.updateState();\n }\n const range = editor.selection.range;\n const cellNode = range.commonAncestor.closest('td');\n const tableNode = cellNode.closest('table');\n if (savedTableNode && savedTableNode.get(0) === tableNode.get(0)) {\n tableNode.addClass('lake-table-focused');\n cellNode.addClass('lake-td-focused');\n return;\n }\n savedTableNode = tableNode;\n if (toolbar) {\n toolbar.unmount();\n }\n if (tableNode.length > 0) {\n tableNode.addClass('lake-table-focused');\n cellNode.addClass('lake-td-focused');\n const items = getFloatingToolbarItems(editor, floatingToolbarValues);\n toolbar = new FloatingToolbar({\n target: tableNode,\n items,\n });\n toolbar.render();\n }\n });\n editor.command.add('table', {\n execute: () => {\n const range = editor.selection.range;\n insertTable(range, 3, 2);\n editor.history.save();\n },\n });\n return () => {\n if (toolbar) {\n toolbar.unmount();\n }\n };\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst alignValueMap: {[key: string]: string} = {\n start: 'left',\n end: 'right',\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('align', {\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.node.isBlock) {\n currentValue = item.node.computedCSS('text-align');\n break;\n }\n }\n if (!currentValue) {\n return [];\n }\n return [alignValueMap[currentValue] || currentValue];\n },\n execute: (type: 'left' | 'center' | 'right' | 'justify') => {\n editor.selection.setBlocks({\n 'text-align': type,\n });\n editor.history.save();\n },\n });\n};\n","import type { Nodes } from '../models/nodes';\nimport { fixNumberedList } from './fix-numbered-list';\n\n// Increases or decreases the margin area on the left side of a block.\nexport function indentBlock(block: Nodes, type: 'increase' | 'decrease'): void {\n if (block.isList) {\n let indent = Number.parseInt(block.attr('indent'), 10) || 0;\n if (type === 'increase') {\n indent++;\n } else {\n indent--;\n }\n if (indent <= 0) {\n indent = 0;\n } else if (indent > 10) {\n return;\n }\n if (indent === 0) {\n block.removeAttr('indent');\n } else {\n block.attr('indent', indent.toString(10));\n }\n fixNumberedList([ block ]);\n return;\n }\n let value = Number.parseInt(block.css('margin-left'), 10) || 0;\n if (type === 'decrease' && value === 0 && block.css('text-indent') !== '') {\n block.css('text-indent', '');\n return;\n }\n if (type === 'increase') {\n value += 40;\n } else {\n value -= 40;\n }\n if (value <= 0) {\n value = 0;\n }\n if (value === 0) {\n block.css('margin-left', '');\n } else {\n block.css('margin-left', `${value}px`);\n }\n}\n","import type { Editor } from 'lakelib/editor';\nimport { indentBlock } from 'lakelib/utils/indent-block';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('indent', {\n execute: (type: 'increase' | 'decrease') => {\n const blocks = editor.selection.range.getBlocks();\n for (const block of blocks) {\n indentBlock(block, type);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'strong';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('bold', {\n isDisabled: activeItems => !!activeItems.find(item => item.node.isHeading),\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('bold')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+b', event => {\n event.preventDefault();\n editor.command.execute('bold');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'i';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('italic', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('italic')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+i', event => {\n event.preventDefault();\n editor.command.execute('italic');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'u';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('underline', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('underline')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+u', event => {\n event.preventDefault();\n editor.command.execute('underline');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 's';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('strikethrough', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('strikethrough')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+shift+x', event => {\n event.preventDefault();\n editor.command.execute('strikethrough');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'sub';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('subscript', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('subscript')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'sup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('superscript', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('superscript')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'code';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('code', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('code')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontFamily', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.css('font-family');\n return [currentValue.replace(/['\"]/g, '')];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"font-family: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontSize', {\n isDisabled: activeItems => !!activeItems.find(item => item.node.isHeading),\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.css('font-size');\n return [currentValue.replace(/\\.\\d+/, '')];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"font-size: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { toHex } from 'lakelib/utils/to-hex';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontColor', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.computedCSS('color');\n return [toHex(currentValue)];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"color: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { toHex } from 'lakelib/utils/to-hex';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('highlight', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.computedCSS('background-color');\n return [toHex(currentValue)];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"background-color: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('removeFormat', {\n execute: () => {\n editor.selection.removeMark();\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { Nodes } from 'lakelib/models/nodes';\n\nconst formatPainterClassName = 'lake-format-painter';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n let markList: Nodes[] = [];\n editor.command.add('formatPainter', {\n execute: () => {\n editor.container.addClass(formatPainterClassName);\n const activeItems = editor.selection.getActiveItems();\n for (const item of activeItems) {\n const node = item.node.clone();\n if (node.isMark && node.name !== 'a') {\n markList.push(node);\n }\n }\n },\n });\n editor.container.on('click', () => {\n editor.container.removeClass(formatPainterClassName);\n if (markList.length === 0) {\n return;\n }\n for (const mark of markList) {\n editor.selection.addMark(mark);\n }\n markList = [];\n editor.history.save();\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (editor.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"formatPainter\"]').length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import './link-popup.css';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { TranslationFunctions } from 'lakelib/i18n/types';\nimport { icons } from 'lakelib/icons';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { visibleInfo } from 'lakelib/utils/visible-info';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Button } from 'lakelib/ui/button';\nimport { i18nObject } from 'lakelib/i18n';\n\ntype LinkPopupConfig = {\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n onShow?: () => void;\n onHide?: () => void;\n};\n\n// The LinkPopup class represents a dialog for editing a hyperlink.\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private locale: TranslationFunctions;\n\n private linkNode: Nodes | null = null;\n\n public container: Nodes;\n\n constructor(config?: LinkPopupConfig) {\n this.config = config || {};\n this.locale = this.config.locale || i18nObject('en-US');\n this.container = query(template`\n <div class=\"lake-popup lake-link-popup\">\n <div class=\"lake-row\">${this.locale.link.url()}</div>\n <div class=\"lake-row lake-url-row\">\n <input type=\"text\" name=\"url\" />\n </div>\n <div class=\"lake-row\">${this.locale.link.title()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"title\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n }\n\n // Writes the specified text to the system clipboard\n private async writeClipboardText(text: string): Promise<boolean> {\n let error = false;\n try {\n if (window.LAKE_TEST) {\n error = window.LAKE_ERROR;\n } else {\n await navigator.clipboard.writeText(text);\n }\n } catch {\n error = true;\n }\n return new Promise(resolve => {\n resolve(error);\n });\n }\n\n // Copy link to clipboard\n private appendCopyButton(): void {\n const config = this.config;\n let timeoutId: number | null = null;\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'copy',\n icon: icons.get('copy'),\n tooltip: this.locale.link.copy(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n this.writeClipboardText(url).then((error: boolean) => {\n const svgNode = this.container.find('button[name=\"copy\"] svg');\n svgNode.hide();\n if (error) {\n svgNode.eq(2).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n return;\n }\n svgNode.eq(1).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n }\n timeoutId = window.setTimeout(() => {\n svgNode.hide();\n svgNode.eq(0).show('inline');\n }, 2000);\n });\n },\n });\n button.render();\n const copyDoneIcon = icons.get('checkCircle');\n if (copyDoneIcon) {\n button.node.append(copyDoneIcon);\n }\n const copyErrorIcon = icons.get('warningCircle');\n if (copyErrorIcon) {\n button.node.append(copyErrorIcon);\n }\n }\n\n // Open link in new tab\n private appendOpenButton(): void {\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'open',\n icon: icons.get('open'),\n tooltip: this.locale.link.open(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n window.open(url);\n },\n });\n button.render();\n }\n\n // Save link\n private appendSaveButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'save',\n icon: icons.get('check'),\n text: this.locale.link.save(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const linkNode = this.linkNode;\n this.save();\n this.hide();\n if (this.config.onSave) {\n this.config.onSave(linkNode);\n }\n },\n });\n button.render();\n this.container.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n this.container.find('input[name=\"title\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n }\n\n // Remove link\n private appendUnlinkButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'unlink',\n icon: icons.get('unlink'),\n text: this.locale.link.unlink(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const lastChild = this.linkNode.last();\n this.linkNode.remove(true);\n this.hide();\n if (this.config.onRemove) {\n this.config.onRemove(lastChild);\n }\n },\n });\n button.render();\n }\n\n private save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n let title = this.container.find('input[name=\"title\"]').value();\n if (url === '' && title === '') {\n this.linkNode.remove();\n return;\n }\n if (title === '') {\n title = url;\n }\n this.linkNode.attr('href', url);\n this.linkNode.text(title);\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(): void {\n if (!this.linkNode) {\n return;\n }\n const visible = visibleInfo(this.linkNode);\n if (visible.bottom !== 0) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const linkNativeNode = this.linkNode.get(0) as HTMLElement;\n const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n if (linkRect.x + this.container.width() > window.innerWidth) {\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n this.container.css('top', `${linkY - this.container.height()}px`);\n } else {\n this.container.css('top', `${linkY + linkRect.height}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public show(linkNode: Nodes): void {\n if (!this.container.get(0).isConnected) {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n query(document.body).append(this.container);\n }\n if (this.linkNode && this.linkNode.get(0) === linkNode.get(0)) {\n return;\n }\n this.linkNode = linkNode;\n const url = linkNode.attr('href');\n const title = linkNode.text();\n this.container.find('input[name=\"url\"]').value(url);\n if (title !== url) {\n this.container.find('input[name=\"title\"]').value(title);\n }\n this.container.css('visibility', 'hidden');\n this.container.show();\n this.updatePosition();\n this.container.css('visibility', '');\n this.container.find('input[name=\"url\"]').focus();\n const viewport = linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n if (this.config.onShow) {\n this.config.onShow();\n }\n }\n\n public hide(): void {\n if (this.linkNode) {\n const viewport = this.linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n }\n this.linkNode = null;\n this.container.hide();\n window.removeEventListener('resize', this.resizeListener);\n if (this.config.onHide) {\n this.config.onHide();\n }\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { insertContents } from 'lakelib/operations/insert-contents';\nimport { splitMarks } from 'lakelib/operations/split-marks';\nimport { insertBookmark } from 'lakelib/operations/insert-bookmark';\nimport { toBookmark } from 'lakelib/operations/to-bookmark';\n\n// Inserts a link element into the specified range.\nexport function insertLink(range: Range, value: string | Nodes): Nodes | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const valueNode = query(value);\n if (range.isCollapsed) {\n let linkNode = range.commonAncestor.closest('a');\n if (linkNode.length === 0) {\n linkNode = valueNode.clone(true);\n insertContents(range, linkNode);\n return linkNode;\n }\n const url = valueNode.attr('href');\n if (url !== '') {\n linkNode.attr({\n href: valueNode.attr('href'),\n });\n }\n return linkNode;\n }\n splitMarks(range);\n const bookmark = insertBookmark(range);\n for (const child of range.commonAncestor.getWalker()) {\n if (child.name === 'a' && range.intersectsNode(child)) {\n child.remove(true);\n }\n }\n const linkNode = valueNode.clone(false);\n bookmark.anchor.after(linkNode);\n let node = linkNode.next();\n while(node.length > 0) {\n const nextNode = node.next();\n if (!node.isMark && !node.isText) {\n break;\n }\n linkNode.append(node);\n node = nextNode;\n }\n if (linkNode.first().length === 0) {\n linkNode.remove();\n }\n toBookmark(range, bookmark);\n return linkNode;\n}\n","import { Nodes } from 'lakelib/models/nodes';\nimport { Editor } from 'lakelib/editor';\nimport { LinkPopup } from './link-popup';\nimport { insertLink } from './insert-link';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const popup = new LinkPopup({\n locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onShow: () => {\n editor.popup = popup;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (popup.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (\n linkNode.length === 0 ||\n !editor.container.contains(linkNode) ||\n linkNode.closest('lake-box').length > 0\n ) {\n if (!popup.visible) {\n return;\n }\n editor.selection.sync();\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const range = editor.selection.range;\n const linkNode = insertLink(range, `<a href=\"\">${editor.locale.link.newLink()}</a>`);\n if (!linkNode) {\n return;\n }\n editor.history.save();\n popup.show(linkNode);\n },\n });\n return () => popup.unmount();\n};\n","import './hr-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\n\nexport default {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-hr\"><hr /></div>');\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: () => '<hr />',\n} as BoxComponent;\n","import { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Fragment } from 'lakelib/models/fragment';\nimport { Editor } from 'lakelib/editor';\nimport hrBox from './hr-box';\n\nexport {\n hrBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('beforepaste', (nativeFragment: DocumentFragment) => {\n const fragment = new Fragment(nativeFragment);\n fragment.find('hr').each(nativeNode => {\n const node = query(nativeNode);\n const box = getBox('hr');\n node.replaceWith(box.node);\n });\n });\n editor.command.add('hr', {\n execute: () => {\n editor.selection.insertBox('hr');\n editor.history.save();\n },\n });\n};\n","import './code-block-box.css';\nimport debounce from 'debounce';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Dropdown } from 'lakelib/ui/dropdown';\n\nconst config = {\n comment: '#57606a',\n name: '#444d56',\n variableName: '#953800',\n typeName: '#0550ae',\n propertyName: '#444d56',\n className: '#24292e',\n labelName: '#005cc5',\n namespace: '#0550ae',\n macroName: '#444d56',\n literal: '#444d56',\n string: '#0a3069',\n number: '#0550ae',\n bool: '#0550ae',\n regexp: '#116329',\n color: '#0550ae',\n keyword: '#cf222e',\n modifier: '#24292f',\n operator: '#cf222e',\n bracket: '#57606a',\n content: '#57606a',\n meta: '#8250df',\n heading: '#0550ae',\n invalid: '#f6f8fa',\n definition: '#cf222e',\n constant: '#0550ae',\n function: '#005cc5',\n standard: '#444d56',\n special: '#444d56',\n};\n\n// https://lezer.codemirror.net/docs/ref/#highlight.tags\nfunction getHighlightStyle(CodeMirror: any): any {\n const { HighlightStyle, tags } = CodeMirror;\n return HighlightStyle.define([\n { tag: [tags.comment, tags.lineComment, tags.blockComment, tags.docComment], color: config.comment },\n { tag: [tags.name], color: config.name },\n { tag: [tags.variableName, tags.self], color: config.variableName },\n { tag: [tags.typeName, tags.tagName], color: config.typeName },\n { tag: [tags.propertyName, tags.attributeName], color: config.propertyName },\n { tag: [tags.className], color: config.className },\n { tag: [tags.labelName], color: config.labelName },\n { tag: [tags.namespace], color: config.namespace },\n { tag: [tags.macroName], color: config.macroName },\n { tag: [tags.literal], color: config.literal },\n { tag: [tags.string, tags.docString, tags.character, tags.attributeValue, tags.unit], color: config.string },\n { tag: [tags.number, tags.integer, tags.float], color: config.number },\n { tag: [tags.bool, tags.null, tags.atom], color: config.bool },\n { tag: [tags.regexp, tags.escape, tags.url], color: config.regexp },\n { tag: [tags.color], color: config.color },\n { tag: [\n tags.keyword, tags.operatorKeyword, tags.controlKeyword,\n tags.definitionKeyword, tags.moduleKeyword,\n ], color: config.keyword },\n { tag: [tags.modifier], color: config.modifier },\n { tag: [\n tags.operator, tags.derefOperator, tags.arithmeticOperator, tags.logicOperator, tags.bitwiseOperator,\n tags.compareOperator, tags.updateOperator, tags.definitionOperator, tags.typeOperator, tags.controlOperator,\n ], color: config.operator },\n { tag: [\n tags.punctuation, tags.separator, tags.bracket, tags.angleBracket, tags.squareBracket,\n tags.paren, tags.brace, tags.contentSeparator,\n ], color: config.bracket },\n { tag: [tags.content], color: config.content },\n { tag: [tags.meta, tags.documentMeta, tags.annotation, tags.processingInstruction], color: config.meta },\n { tag: tags.heading, fontWeight: 'bold', color: config.heading },\n { tag: tags.strong, fontWeight: 'bold' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.link, textDecoration: 'underline' },\n { tag: tags.strikethrough, textDecoration: 'line-through' },\n { tag: [tags.invalid, tags.inserted, tags.deleted, tags.changed], color: config.invalid },\n { tag: [tags.definition(tags.name)], color: config.definition },\n { tag: [tags.constant(tags.name)], color: config.constant },\n { tag: [tags.function(tags.variableName)], color: config.function },\n { tag: [tags.standard(tags.name)], color: config.standard },\n { tag: [tags.special(tags.variableName)], color: config.special },\n ]);\n}\n\nexport default {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-code-block\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const codeBlockNativeNode = rootNode.get(0) as HTMLElement;\n if (!codeBlockNativeNode) {\n return;\n }\n // begin to create CodeMirror\n const CodeMirror = window.LakeCodeMirror;\n if (!CodeMirror) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n rootNode.addClass('lake-code-block-error');\n rootNode.text(`\n The code cannot be displayed because window.LakeCodeMirror is not found.\n Please check if the \"lake-codemirror\" library is added to this page.\n `.trim());\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n return;\n }\n const {\n EditorState, Compartment, EditorView,\n keymap, history, defaultKeymap, historyKeymap,\n indentWithTab, syntaxHighlighting,\n } = CodeMirror;\n const defaultLangItems = CodeMirror.langItems;\n const codeBlockConfig = editor.config.codeBlock;\n const langItems = defaultLangItems.filter(\n (item: any) => codeBlockConfig.langList.indexOf(item.value) >= 0,\n );\n // language menu items\n const langItemMap: Map<string, any> = new Map();\n for (const item of langItems) {\n langItemMap.set(item.value, item);\n }\n const boxValue = box.value;\n const langItem = langItemMap.get(boxValue.lang);\n const language = new Compartment();\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n const updateListener = EditorView.updateListener.of((update: any) => {\n if (!update.docChanged) {\n return;\n }\n changeHandler(update.state.doc.toString());\n });\n const codeEditor = new EditorView({\n parent: codeBlockNativeNode,\n doc: boxValue.code ?? '',\n extensions: [\n EditorState.readOnly.of(editor.readonly),\n EditorView.editable.of(!editor.readonly),\n history(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n indentWithTab,\n ]),\n syntaxHighlighting(getHighlightStyle(CodeMirror)),\n language.of(langItem && langItem.component ? langItem.component() : []),\n updateListener,\n ],\n });\n rootNode.find('[contenteditable=\"true\"]').attr('tabindex', '-1');\n const dropdown = new Dropdown({\n root: rootNode,\n name: 'langType',\n downIcon: icons.get('down'),\n defaultValue: langItem ? boxValue.lang : codeBlockConfig.defaultLang,\n tooltip: editor.locale.codeBlock.langType(),\n location: 'global',\n menuType: 'list',\n menuHeight: '200px',\n menuItems: langItems.map((item: any) => ({\n value: item.value,\n text: item.text,\n })),\n onSelect: value => {\n box.updateValue({\n lang: value,\n });\n box.unmount();\n box.render();\n editor.selection.selectBox(box);\n editor.history.save();\n },\n });\n dropdown.render();\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n dropdown.unmount();\n codeEditor.destroy();\n debug('CodeMirror destroyed');\n });\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport codeBlockBox from './code-block-box';\n\nexport {\n codeBlockBox,\n};\n\nconst langList = [\n 'text',\n 'c',\n 'csharp',\n 'cpp',\n 'css',\n 'go',\n 'html',\n 'java',\n 'javascript',\n 'json',\n 'markdown',\n 'php',\n 'python',\n 'rust',\n 'sql',\n 'typescript',\n 'xml',\n 'yaml',\n];\n\nexport default (editor: Editor) => {\n if (!window.LakeCodeMirror) {\n return;\n }\n editor.setPluginConfig('codeBlock', {\n langList,\n defaultLang: 'text',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('codeBlock', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('codeBlock', value);\n editor.history.save();\n box.getContainer().find('.lake-code-block').emit('click');\n },\n });\n};\n","import { TranslationFunctions } from '../i18n/types';\nimport { CornerToolbarItem } from '../types/corner-toolbar';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ntype CornerToolbarConfig = {\n locale?: TranslationFunctions;\n root: Nodes;\n items: CornerToolbarItem[];\n}\n\n// The CornerToolbar class represents a button group located in the top-right corner of a box.\nexport class CornerToolbar {\n private config: CornerToolbarConfig;\n\n private locale: TranslationFunctions;\n\n private root: Nodes;\n\n public container: Nodes;\n\n constructor(config: CornerToolbarConfig) {\n this.config = config;\n this.locale = this.config.locale || i18nObject('en-US');\n this.root = config.root;\n this.container = query('<div class=\"lake-corner-toolbar\" />');\n }\n\n private appendButton(item: CornerToolbarItem): void {\n const buttonNode = query(template`\n <button type=\"button\" name=\"${item.name}\" tabindex=\"-1\" />\n `);\n const tooltip = typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(this.locale);\n buttonNode.attr('title', tooltip);\n if (item.icon) {\n buttonNode.append(item.icon);\n }\n this.container.append(buttonNode);\n buttonNode.on('click', event => {\n event.preventDefault();\n item.onClick(event);\n });\n }\n\n public render(): void {\n const { items } = this.config;\n if (items.length === 0) {\n return;\n }\n this.root.append(this.container);\n for (const item of items) {\n this.appendButton(item);\n }\n }\n}\n","import { query } from '../utils/query';\nimport { template } from '../utils/template';\nimport { Nodes } from '../models/nodes';\n\ntype ResizerConfig = {\n root: Nodes;\n target: Nodes;\n onResize?: (width: number, height: number) => void;\n onStop: (width: number, height: number) => void;\n};\n\n// The Resizer class represents a UI component used to resize images or videos.\nexport class Resizer {\n private config: ResizerConfig;\n\n private root: Nodes;\n\n private target: Nodes;\n\n public container: Nodes;\n\n constructor(config: ResizerConfig) {\n this.config = config;\n this.root = config.root;\n this.target = config.target;\n this.container = query(template`\n <div class=\"lake-resizer\">\n <div class=\"lake-resizer-top-left\"></div>\n <div class=\"lake-resizer-top-right\"></div>\n <div class=\"lake-resizer-bottom-left\"></div>\n <div class=\"lake-resizer-bottom-right\"></div>\n <div class=\"lake-resizer-info\"></div>\n </div>\n `);\n }\n\n private bindEvents(pointerNode: Nodes): void {\n const target = this.target;\n const infoNode = this.container.find('.lake-resizer-info');\n const isPlus = pointerNode.attr('class').indexOf('-right') >= 0;\n const initialWidth = target.width();\n const initialHeight = target.height();\n const rate = initialHeight / initialWidth;\n let clientX = 0;\n let width = 0;\n // resizing box\n const pointermoveListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const diffX = pointerEvent.clientX - clientX;\n const newWidth = Math.round(isPlus ? width + diffX : width - diffX);\n const newHeight = Math.round(rate * newWidth);\n infoNode.text(`${newWidth} x ${newHeight}`);\n target.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n if (this.config.onResize) {\n this.config.onResize(newWidth, newHeight);\n }\n };\n // start resizing\n const pointerdownListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const pointerNativeNode = pointerNode.get(0) as Element;\n // The capture will be implicitly released after a pointerup or pointercancel event.\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/setPointerCapture\n try {\n // Test case throws an exception on Firefox.\n pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n } catch { /* empty */ }\n clientX = pointerEvent.clientX;\n width = target.width();\n infoNode.text(`${initialWidth} x ${initialHeight}`);\n infoNode.show();\n pointerNode.on('pointermove', pointermoveListener);\n };\n // stop resizing\n const pointerupListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n width = target.width();\n const height = Math.round(rate * width);\n this.config.onStop(width, height);\n };\n // cancel resizing\n const pointercancelListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n };\n pointerNode.on('pointerdown', pointerdownListener);\n pointerNode.on('pointerup', pointerupListner);\n pointerNode.on('pointercancel', pointercancelListner);\n }\n\n public render(): void {\n this.bindEvents(this.container.find('.lake-resizer-top-left'));\n this.bindEvents(this.container.find('.lake-resizer-top-right'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-left'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-right'));\n this.root.append(this.container);\n }\n}\n","import './image-box.css';\nimport 'photoswipe/style.css';\nimport PhotoSwipeLightbox, { DataSource } from 'photoswipe/lightbox';\nimport PhotoSwipe from 'photoswipe';\nimport debounce from 'debounce';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { CornerToolbarItem } from 'lakelib/types/corner-toolbar';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Box } from 'lakelib/models/box';\nimport { CornerToolbar } from 'lakelib/ui/corner-toolbar';\nimport { Resizer } from 'lakelib/ui/resizer';\n\ntype ImageInfo = {\n node: Nodes;\n width?: number;\n height?: number;\n};\n\nconst alignValueMap: {[key: string]: string} = {\n start: 'left',\n end: 'right',\n};\n\nfunction updateBoxMarginBottom(box: Box, captionNode: Nodes): void {\n const height = captionNode.height();\n box.node.find('.lake-box-strip').css('margin-bottom', `${height}px`);\n}\n\nfunction showCaption(box: Box, captionNode: Nodes): void {\n captionNode.show();\n updateBoxMarginBottom(box, captionNode);\n}\n\nfunction hideCaption(box: Box, captionNode: Nodes): void {\n captionNode.hide();\n box.node.find('.lake-box-strip').css('margin-bottom', '');\n}\n\n// Creates floating toolbar for the box.\nfunction renderFloatingToolbar(box: Box): void {\n const items: ToolbarItem[] = [\n {\n name: 'caption',\n type: 'button',\n icon: icons.get('caption'),\n tooltip: locale => locale.image.caption(),\n isSelected: () => {\n const boxContainer = box.getContainer();\n const captionNode = boxContainer.find('.lake-image-caption');\n return captionNode.length > 0 && captionNode.computedCSS('display') !== 'none';\n },\n onClick: () => {\n const boxContainer = box.getContainer();\n const captionNode = boxContainer.find('.lake-image-caption');\n const caption = captionNode.text().trim();\n if (caption === '') {\n captionNode.addClass('lake-placeholder');\n }\n showCaption(box, captionNode);\n captionNode.focus();\n if (box.toolbar) {\n box.toolbar.updateState();\n }\n },\n },\n {\n name: 'align',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.image.align(),\n menuType: 'list',\n menuItems: [\n { value: 'left', text: locale => locale.image.alignLeft() },\n { value: 'center', text: locale => locale.image.alignCenter() },\n { value: 'right', text: locale => locale.image.alignRight() },\n ],\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.node.isBlock) {\n currentValue = item.node.computedCSS('text-align');\n break;\n }\n }\n if (!currentValue) {\n return [];\n }\n return [alignValueMap[currentValue] || currentValue];\n },\n onSelect: (editor, value) => {\n editor.command.execute('align', value);\n },\n },\n {\n name: 'resize',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('resize'),\n tooltip: locale => locale.image.resize(),\n menuType: 'list',\n menuItems: [\n { value: 'page', text: locale => locale.image.pageWidth() },\n { value: '1.00', text: locale => locale.image.originalWidth() },\n { value: '0.75', text: locale => locale.image.imageWidth('75%') },\n { value: '0.50', text: locale => locale.image.imageWidth('50%') },\n { value: '0.25', text: locale => locale.image.imageWidth('25%') },\n ],\n selectedValues: () => {\n const { originalWidth, width } = box.value;\n const editor = box.getEditor();\n const pageWidth = editor.container.innerWidth() - 2;\n let currentValue = '';\n if (width === pageWidth) {\n currentValue = 'page';\n } else {\n currentValue = (width / originalWidth).toFixed(2);\n }\n return [currentValue];\n },\n onSelect: (editor, value) => {\n const { originalWidth, originalHeight } = box.value;\n const boxContainer = box.getContainer();\n const rootNode = boxContainer.find('.lake-image');\n const captionNode = boxContainer.find('.lake-image-caption');\n const rate = originalHeight / originalWidth;\n let newWidth: number;\n if (value === 'page') {\n newWidth = editor.container.innerWidth() - 2;\n } else {\n newWidth = Math.round(originalWidth * Number(value));\n }\n const newHeight = Math.round(rate * newWidth);\n rootNode.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n boxContainer.css('width', `${newWidth}px`);\n updateBoxMarginBottom(box, captionNode);\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n },\n {\n name: 'open',\n type: 'button',\n icon: icons.get('open'),\n tooltip: locale => locale.image.open(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n ];\n box.setToolbar(items);\n}\n\n// Loads an image and get its width and height.\nasync function getImageInfo(url: string): Promise<ImageInfo> {\n const node = query('<img />');\n node.css({\n position: 'absolute',\n top: '0',\n left: '-8888px',\n 'z-index': '-1',\n visibility: 'hidden',\n });\n return new Promise(resolve => {\n node.on('load', () => {\n const imgNativeNode = node.get(0) as HTMLImageElement;\n const width = imgNativeNode.width;\n const height = imgNativeNode.height;\n node.remove();\n node.removeAttr('style');\n resolve({\n node,\n width,\n height,\n });\n });\n node.on('error', () => {\n node.remove();\n resolve({\n node,\n });\n });\n node.attr('src', url);\n query(document.body).append(node);\n });\n}\n\n// Previews an image.\nfunction openFullScreen(box: Box): void {\n const editor = box.getEditor();\n const dataSource: DataSource = [];\n let currentIndex = 0;\n const allImageBox = editor.container.find('lake-box[name=\"image\"]');\n allImageBox.each((node, index) => {\n const imageBox = getBox(node);\n const imageValue = imageBox.value;\n if (imageValue.status !== 'done') {\n return;\n }\n dataSource.push({\n id: index,\n src: imageValue.originalUrl || imageValue.url,\n width: imageValue.originalWidth || imageValue.width,\n height: imageValue.originalHeight || imageValue.height,\n alt: imageValue.name,\n });\n if (box.node.id === imageBox.node.id) {\n currentIndex = index;\n }\n });\n const lightbox = new PhotoSwipeLightbox({\n pswpModule: PhotoSwipe,\n dataSource,\n mainClass: 'lake-pswp',\n zoom: false,\n returnFocus: false,\n arrowPrevSVG: icons.get('left'),\n arrowNextSVG: icons.get('right'),\n closeSVG: icons.get('close'),\n arrowPrevTitle: editor.locale.image.previous(),\n arrowNextTitle: editor.locale.image.next(),\n closeTitle: editor.locale.image.close(),\n errorMsg: editor.locale.image.loadingError(),\n });\n lightbox.on('uiRegister', () => {\n const pswp: any = lightbox.pswp;\n pswp.ui.registerElement({\n name: 'zoom-out-button',\n order: 8,\n isButton: true,\n title: editor.locale.image.zoomOut(),\n html: icons.get('zoomOut'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel - step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n pswp.ui.registerElement({\n name: 'zoom-in-button',\n order: 9,\n isButton: true,\n title: editor.locale.image.zoomIn(),\n html: icons.get('zoomIn'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel + step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n });\n lightbox.addFilter('thumbEl', (thumbnail, itemData) => {\n const imgNode = allImageBox.eq(itemData.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.get(0) as HTMLElement;\n }\n return thumbnail as HTMLElement;\n });\n lightbox.addFilter('placeholderSrc', (placeholderSrc, slide) => {\n const imgNode = allImageBox.eq(slide.data.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.attr('src');\n }\n return placeholderSrc;\n });\n lightbox.on('openingAnimationEnd', () => {\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n box.event.emit('closefullscreen');\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Creates caption for image.\nfunction renderCaption(box: Box): Nodes {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const defaultCaption = (box.value.caption || '').trim();\n const captionNode = query('<div class=\"lake-image-caption\" />');\n captionNode.text(defaultCaption);\n boxContainer.append(captionNode);\n if (defaultCaption === '') {\n hideCaption(box, captionNode);\n } else {\n showCaption(box, captionNode);\n }\n if (editor.readonly) {\n captionNode.css('-webkit-user-modify', 'read-only');\n return captionNode;\n }\n captionNode.attr('contenteditable', 'true');\n captionNode.attr('placeholder', editor.locale.image.captionPlaceholder());\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('caption', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n captionNode.on('input', () => {\n const caption = captionNode.text().trim();\n if (caption === '') {\n captionNode.addClass('lake-placeholder');\n } else {\n captionNode.removeClass('lake-placeholder');\n }\n const height = captionNode.height();\n box.node.find('.lake-box-strip').css('margin-bottom', `${height}px`);\n changeHandler(caption);\n });\n // For supporting \"user-modify: read-write-plaintext-only\" in Firefox\n captionNode.on('paste', event => {\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n const text = dataTransfer.getData('text/plain').trim();\n document.execCommand('insertText', false, text);\n });\n captionNode.on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n editor.selection.selectBox(box);\n }\n });\n captionNode.on('focusout', () => {\n const caption = captionNode.text().trim();\n if (caption === '') {\n hideCaption(box, captionNode);\n }\n });\n return captionNode;\n}\n\n// Displays error icon and filename.\nasync function renderError(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n boxContainer.css({\n width: '',\n height: '',\n });\n const errorNode = query(template`\n <div class=\"lake-error\">\n <div class=\"lake-error-icon\"></div>\n <div class=\"lake-error-name\">${value.name || ''}</div>\n </div>\n `);\n const imageBrokenIcon = icons.get('imageBroken');\n if (imageBrokenIcon) {\n errorNode.find('.lake-error-icon').append(imageBrokenIcon);\n }\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n rootNode.append(errorNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n}\n\n// Displays an image with uplaoding progress.\nasync function renderUploading(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!boxContainer.get(0).isConnected) {\n return;\n }\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(box);\n return;\n }\n const maxWidth = editor.container.innerWidth() - 2;\n const width = imageInfo.width < maxWidth ? imageInfo.width : maxWidth;\n const height = Math.round(width * imageInfo.height / imageInfo.width);\n box.updateValue({\n width,\n height,\n originalWidth: imageInfo.width,\n originalHeight: imageInfo.height,\n });\n boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const percent = Math.round(value.percent || 0);\n const progressNode = query(template`\n <div class=\"lake-progress\">\n <div class=\"lake-percent\">${percent} %</div>\n </div>\n `);\n if (width < 80) {\n progressNode.find('.lake-percent').hide();\n }\n const circleNotchIcon = icons.get('circleNotch');\n if (circleNotchIcon) {\n progressNode.prepend(circleNotchIcon);\n }\n const imgNode = imageInfo.node;\n imageInfo.node.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n rootNode.append(progressNode);\n rootNode.append(imgNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n}\n\n// Displays an image that can be previewed or removed.\nasync function renderDone(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!boxContainer.get(0).isConnected) {\n return;\n }\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(box);\n return;\n }\n if (!value.originalWidth || !value.originalHeight) {\n box.updateValue({\n originalWidth: imageInfo.width,\n originalHeight: imageInfo.height,\n });\n }\n let width = value.width;\n let height = value.height;\n if (!width || !height) {\n const maxWidth = editor.container.innerWidth() - 2;\n width = Math.round(imageInfo.width < maxWidth ? imageInfo.width : maxWidth);\n height = Math.round(width * imageInfo.height / imageInfo.width);\n box.updateValue({\n width,\n height,\n });\n }\n const imgNode = imageInfo.node;\n imgNode.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n rootNode.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const cornerToolbarItems: CornerToolbarItem[] = [];\n if (width >= 80 && PhotoSwipeLightbox !== null) {\n cornerToolbarItems.push({\n name: 'view',\n icon: icons.get('maximize'),\n tooltip: editor.locale.image.view(),\n onClick: () => openFullScreen(box),\n });\n }\n if (!editor.readonly) {\n cornerToolbarItems.push({\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n });\n }\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: cornerToolbarItems,\n }).render();\n rootNode.append(imgNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n boxContainer.css({\n width: `${width}px`,\n height: '',\n });\n const captionNode = renderCaption(box);\n renderFloatingToolbar(box);\n new Resizer({\n root: rootNode,\n target: rootNode,\n onResize: newWidth => {\n boxContainer.css('width', `${newWidth}px`);\n updateBoxMarginBottom(box, captionNode);\n },\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n}\n\nexport default {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'loading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n if (value.width && value.height && boxContainer.find('.lake-progress').length === 0) {\n boxContainer.css({\n width: `${value.width}px`,\n height: `${value.height}px`,\n });\n boxContainer.empty();\n const placeholderNode = query('<div class=\"lake-image-placeholder\" />');\n boxContainer.append(placeholderNode);\n const imageIcon = icons.get('image');\n if (imageIcon) {\n placeholderNode.append(imageIcon);\n }\n }\n if (boxContainer.first().length === 0) {\n // The following code is for unit testing because some test cases need to\n // select the content of the box before it is completely loaded.\n // Example:\n // range.setStart(box.getContainer(), 1);\n boxContainer.append('<div />');\n }\n // for test\n if (value.status === 'loading') {\n return;\n }\n let promise: Promise<void>;\n if (value.status === 'uploading') {\n promise = renderUploading(box);\n } else if (value.status === 'error') {\n promise = renderError(box);\n } else {\n promise = renderDone(box);\n }\n promise.then(() => {\n boxContainer.find('.lake-image').on('click', () => {\n editor.selection.selectBox(box);\n });\n box.event.emit('render');\n });\n },\n html: box => {\n const rawValue = box.node.attr('value');\n return template`<img src=\"${box.value.url}\" data-lake-value=\"${rawValue}\" />`;\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Fragment } from 'lakelib/models/fragment';\nimport { Editor } from 'lakelib/editor';\nimport imageBox from './image-box';\n\nexport {\n imageBox,\n};\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('image', {\n requestMethod: 'POST',\n requestTypes: ['image/gif', 'image/jpeg', 'image/png', 'image/svg+xml'],\n });\n if (editor.readonly) {\n return;\n }\n editor.event.on('beforepaste', (nativeFragment: DocumentFragment) => {\n const fragment = new Fragment(nativeFragment);\n fragment.find('img').each(nativeNode => {\n const node = query(nativeNode);\n const box = getBox('image');\n const value = node.attr('data-lake-value');\n if (value === '') {\n box.value = {\n url: node.attr('src'),\n status: 'done',\n };\n } else {\n box.node.attr('value', value);\n }\n node.replaceWith(box.node);\n });\n });\n editor.command.add('image', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('image', value);\n editor.history.save();\n },\n });\n};\n","import './video-box.css';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { Box } from 'lakelib/models/box';\nimport { Button } from 'lakelib/ui/button';\nimport { CornerToolbar } from 'lakelib/ui/corner-toolbar';\nimport { Resizer } from 'lakelib/ui/resizer';\n\nfunction getVideoId(url: string): string {\n const result = /\\w+$/i.exec(url || '');\n return result ? result[0] : '';\n}\n\nfunction appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = boxContainer.find('.lake-video');\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.video.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n}\n\nfunction showVideo(box: Box): void {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const width = value.width || 560;\n const height = value.height || 315;\n boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const videoId = getVideoId(value.url);\n if (videoId === '') {\n throw new Error(`Invalid link: ${value.url}`);\n }\n // YouTube URL: https://www.youtube.com/watch?v=5sMBhDv4sik\n // The script for embedding YouTube:\n // <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/5sMBhDv4sik\" title=\"YouTube video player\"\n // frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n // referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n const iframeNode = query(template`\n <iframe width=\"100%\" height=\"${height}\" src=\"https://www.youtube.com/embed/${videoId}\" title=\"YouTube video player\"\n frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n `);\n const rootNode = boxContainer.find('.lake-video');\n if (!editor.readonly) {\n iframeNode.on('load', () => {\n appendButtonGroup(box);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.video.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n new Resizer({\n root: rootNode,\n target: boxContainer,\n onResize: (newWidth, newHeight) => {\n iframeNode.attr({\n height: newHeight.toString(),\n });\n },\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n });\n }\n rootNode.append(iframeNode);\n}\n\nexport default {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n const locale = editor.locale;\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-video\" />');\n boxContainer.empty();\n boxContainer.css({\n width: '',\n height: '',\n });\n boxContainer.append(rootNode);\n if (!value.url) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const formNode = query(template`\n <div class=\"lake-video-form\">\n <div class=\"lake-row lake-desc-row\">${locale.video.description()}</div>\n <div class=\"lake-row\">${locale.video.url()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"url\" placeholder=\"https://www.youtube.com/watch?v=...\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n const button = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'embed',\n type: 'primary',\n text: locale.video.embed(),\n onClick: () => {\n const url = formNode.find('input[name=\"url\"]').value();\n if (url.indexOf('https://www.youtube.com/') < 0 || getVideoId(url) === '') {\n editor.config.onMessage('error', locale.video.urlError());\n return;\n }\n box.updateValue('url', url);\n editor.history.save();\n formNode.remove();\n showVideo(box);\n },\n });\n formNode.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n button.render();\n rootNode.append(formNode);\n appendButtonGroup(box);\n } else {\n showVideo(box);\n }\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport videoBox from './video-box';\n\nexport {\n videoBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('video', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('video', value);\n editor.history.save();\n if (box) {\n box.getContainer().find('input[name=\"url\"]').focus();\n }\n },\n });\n};\n","// Returns a human-readable file size string from a number.\nexport function fileSize(size: number): string {\n const units = ['KB', 'MB', 'GB'];\n let i = 0;\n size /= 1024;\n while (size > 1024 && i < 2) {\n size /= 1024;\n i++;\n }\n const sizeString = size > 0 ? Math.max(size, 0.1).toFixed(1) : 0;\n return `${sizeString} ${units[i]}`;\n}\n","import './file-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { fileSize } from 'lakelib/utils/file-size';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Box } from 'lakelib/models/box';\n\nfunction setFloatingToolbar(box: Box): void {\n let items: ToolbarItem[] = [\n {\n name: 'download',\n type: 'button',\n icon: icons.get('download'),\n tooltip: locale => locale.file.download(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n {\n name: 'remove',\n type: 'button',\n icon: icons.get('remove'),\n tooltip: locale => locale.file.remove(),\n onClick: editor => {\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ];\n if (box.value.status !== 'done') {\n items = items.filter(item => item.name === 'remove');\n }\n box.setToolbar(items);\n}\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\n const value = box.value;\n const infoNode = query(template`\n <div class=\"lake-file-info\">\n <div class=\"lake-file-type\"></div>\n <div class=\"lake-file-name\">${value.name} (${fileSize(value.size)})</div>\n </div>\n `);\n const typeNode = infoNode.find('.lake-file-type');\n if (value.status === 'uploading') {\n const percent = Math.round(value.percent || 0);\n const progressNode = query(template`\n <div class=\"lake-progress\">\n <div class=\"lake-percent\">${percent} %</div>\n </div>\n `);\n const circleNotchIcon = icons.get('circleNotch');\n if (circleNotchIcon) {\n progressNode.prepend(circleNotchIcon);\n }\n typeNode.replaceWith(progressNode);\n } else {\n const fileIcon = value.status === 'error' ? icons.get('warningCircle') : icons.get('file');\n if (fileIcon) {\n typeNode.append(fileIcon);\n }\n }\n rootNode.append(infoNode);\n}\n\nexport default {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-file\" />');\n rootNode.addClass(`lake-file-${value.status}`);\n appendContent(rootNode, box);\n boxContainer.empty();\n boxContainer.append(rootNode);\n if (!editor.readonly) {\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n setFloatingToolbar(box);\n } else {\n rootNode.on('click', () => {\n window.open(value.url);\n });\n }\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport fileBox from './file-box';\n\nexport {\n fileBox,\n};\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('file', {\n requestMethod: 'POST',\n requestTypes: [\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/vnd.rar',\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'text/plain',\n 'text/html',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ],\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('file', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('file', value);\n editor.history.save();\n },\n });\n};\n","import './emoji-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\n\nexport default {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query(template`\n <div class=\"lake-emoji\"><img src=\"${value.url}\" title=\"${value.title}\" /></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport emojiBox from './emoji-box';\n\nexport {\n emojiBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('emoji', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('emoji', value);\n editor.history.save();\n },\n });\n};\n","import './equation-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { Box } from 'lakelib/models/box';\nimport { Button } from 'lakelib/ui/button';\n\nconst defaultExpression = String.raw`\\sqrt{x}`;\n\nfunction renderError(box: Box): void {\n const editor = box.getEditor();\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const defaultCode = (box.value.code || '').trim();\n const rootNode = box.getContainer().find('.lake-equation');\n rootNode.addClass('lake-equation-error');\n rootNode.text(defaultCode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n editor.config.onMessage('warning', `\n Box \"${box.name}\" (id: ${box.node.id}) failed to display because window.katex was not found.\n Please check if the \"katex\" library is added to this page.\n `.trim());\n}\n\nexport default {\n type: 'inline',\n name: 'equation',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-equation\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const katex = window.katex;\n if (!katex) {\n renderError(box);\n return;\n }\n const equationConfig = editor.config.equation;\n const defaultCode = (box.value.code || '').trim();\n const viewNode = query('<div class=\"lake-equation-view\" />');\n rootNode.append(viewNode);\n viewNode.html(window.katex.renderToString(defaultCode || defaultExpression, {\n throwOnError: false,\n }));\n viewNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n const formNode = query(template`\n <div class=\"lake-equation-form\">\n <div class=\"lake-row\">\n <textarea name=\"code\" placeholder=\"${editor.locale.equation.placeholder()}\"></textarea>\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n rootNode.append(formNode);\n const textareaNode = formNode.find('textarea');\n textareaNode.value(defaultCode);\n textareaNode.on('input', () => {\n const code = textareaNode.value().trim();\n viewNode.html(window.katex.renderToString(code || defaultExpression, {\n throwOnError: false,\n }));\n box.updateValue('code', code);\n });\n const saveButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'save',\n type: 'primary',\n text: editor.locale.equation.save(),\n onClick: () => {\n editor.selection.range.selectBoxEnd(box.node);\n editor.selection.sync();\n editor.history.save();\n },\n });\n saveButton.render();\n const helpButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'help',\n icon: icons.get('question'),\n tooltip: editor.locale.equation.help(),\n onClick: () => {\n window.open(equationConfig.helpUrl);\n },\n });\n helpButton.render();\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport equationBox from './equation-box';\n\nexport {\n equationBox,\n};\n\nexport default (editor: Editor) => {\n if (!window.katex) {\n return;\n }\n editor.setPluginConfig('equation', {\n helpUrl: 'https://katex.org/docs/supported',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('equation', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('equation', value);\n editor.history.save();\n const boxContainer = box.getContainer();\n boxContainer.addClass('lake-box-activated');\n boxContainer.find('textarea').focus();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('specialCharacter', {\n execute: (value: string) => {\n editor.selection.insertContents(document.createTextNode(value));\n editor.history.save();\n },\n });\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { query } from '../utils/query';\nimport { visibleInfo } from '../utils/visible-info';\nimport { scrollToNode } from '../utils/scroll-to-node';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nexport type MenuConfig<Item> = {\n items: Item[];\n onShow?: () => void;\n onHide?: () => void;\n};\n\nconst emptyCallback = () => {};\n\n// The Menu class represents a list of options for selecting an item.\nexport abstract class Menu<Item> {\n\n private horizontalDirection: 'left' | 'right' = 'right';\n\n private verticalDirection: 'top' | 'bottom' = 'bottom';\n\n private onShow: () => void;\n\n private onHide: () => void;\n\n protected items: Item[];\n\n protected range: Range | null = null;\n\n protected noMouseEvent: boolean = false;\n\n public container: Nodes;\n\n constructor(config: MenuConfig<Item>) {\n this.items = config.items;\n this.onShow = config.onShow || emptyCallback;\n this.onHide = config.onHide || emptyCallback;\n this.container = query('<ul class=\"lake-popup lake-menu\" />');\n }\n\n protected abstract getItemNode(item: Item): Nodes;\n\n protected abstract search(keyword: string): Item[];\n\n private appendItemNode(itemNode: Nodes): void {\n itemNode.on('mouseenter', () => {\n if (this.noMouseEvent) {\n return;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n itemNode.addClass('lake-menu-item-selected');\n });\n itemNode.on('mouseleave', () => {\n if (this.noMouseEvent) {\n return;\n }\n itemNode.removeClass('lake-menu-item-selected');\n });\n this.container.append(itemNode);\n }\n\n private appendItems(items: Item[]): void {\n this.container.empty();\n for (const item of items) {\n const itemNode = this.getItemNode(item);\n itemNode.addClass('lake-menu-item');\n this.appendItemNode(itemNode);\n }\n }\n\n private selectFirstItemNodeIfNeeded(): void {\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n this.container.find('.lake-menu-item').eq(0).addClass('lake-menu-item-selected');\n }\n }\n\n private keydownListener = (event: KeyboardEvent) => {\n if (isKeyHotkey('escape', event)) {\n event.preventDefault();\n this.hide();\n return;\n }\n const isDownKey = isKeyHotkey('down', event);\n const isUpKey = isKeyHotkey('up', event);\n const isEnterKey = isKeyHotkey('enter', event);\n if (!isDownKey && !isUpKey && !isEnterKey) {\n return;\n }\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n const firstItem = this.container.find('.lake-menu-item').eq(0);\n scrollToNode(firstItem, {\n behavior: 'instant',\n block: 'start',\n });\n firstItem.addClass('lake-menu-item-selected');\n return;\n }\n this.noMouseEvent = true;\n if (isDownKey) {\n event.preventDefault();\n let nextItemNode = selectedItemNode.next();\n if (nextItemNode.length === 0) {\n nextItemNode = this.container.find('.lake-menu-item').eq(0);\n }\n scrollToNode(nextItemNode, {\n behavior: 'instant',\n block: 'end',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n nextItemNode.addClass('lake-menu-item-selected');\n } else if (isUpKey) {\n event.preventDefault();\n let prevItemNode = selectedItemNode.prev();\n if (prevItemNode.length === 0) {\n const itemNode = this.container.find('.lake-menu-item');\n prevItemNode = itemNode.eq(itemNode.length - 1);\n }\n scrollToNode(prevItemNode, {\n behavior: 'instant',\n block: 'start',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n prevItemNode.addClass('lake-menu-item-selected');\n } else if (isEnterKey) {\n event.preventDefault();\n selectedItemNode.emit('click');\n }\n window.setTimeout(() => {\n this.noMouseEvent = false;\n }, 50);\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n if (this.container.contains(targetNode)) {\n return;\n }\n this.hide();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(keepDirection: boolean = false): void {\n if (!this.range || this.range.isCollapsed) {\n return;\n }\n const visible = visibleInfo(this.range);\n if (visible.bottom !== 0) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n if (!keepDirection) {\n if (rangeRect.x + this.container.width() > window.innerWidth) {\n this.horizontalDirection = 'left';\n } else {\n this.horizontalDirection = 'right';\n }\n if (rangeRect.y + rangeRect.height + this.container.height() + 5 > window.innerHeight) {\n this.verticalDirection = 'top';\n } else {\n this.verticalDirection = 'bottom';\n }\n }\n if (this.horizontalDirection === 'left') {\n this.container.css('left', `${rangeX - this.container.width() + rangeRect.width}px`);\n } else {\n this.container.css('left', `${rangeX}px`);\n }\n if (this.verticalDirection === 'top') {\n this.container.css('top', `${rangeY - this.container.height() - 5}px`);\n } else {\n this.container.css('top', `${rangeY + rangeRect.height + 5}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public update(keyword: string): void {\n const items = this.search(keyword);\n if (items.length === 0) {\n this.hide();\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n this.container.css('visibility', '');\n }\n\n public show(range: Range, keyword?: string): void {\n if (range.isCollapsed) {\n return;\n }\n if (this.items.length === 0) {\n return;\n }\n if (!this.container.get(0).isConnected) {\n query(document.body).append(this.container);\n }\n // append all items for fixing the container's width\n this.appendItems(this.items);\n this.selectFirstItemNodeIfNeeded();\n this.range = range;\n this.container.css('visibility', 'hidden');\n this.container.show();\n (this.container.get(0) as Element).scrollTo(0, 0);\n this.updatePosition();\n // fix the container's width\n this.container.css('width', '');\n this.container.css('width', `${this.container.width() + 10}px`);\n const viewport = range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n document.addEventListener('keydown', this.keydownListener, true);\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n if (keyword) {\n const items = this.search(keyword);\n if (items.length === 0) {\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n }\n this.container.css('visibility', '');\n this.onShow();\n }\n\n public hide(): void {\n if (this.range) {\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n }\n this.range = null;\n this.container.hide();\n document.removeEventListener('keydown', this.keydownListener, true);\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n this.onHide();\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import './mention-menu.css';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Menu, MenuConfig } from 'lakelib/ui/menu';\nimport { MentionItem } from './types';\n\ntype OnSelect = (event: Event, item: MentionItem) => void;\n\ntype MentionMenuConfig = MenuConfig<MentionItem> & {\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\n// The MentionMenu class, inheriting from the Menu class, represents a list of users for selecting a user.\nexport class MentionMenu extends Menu<MentionItem> {\n\n private onSelect: OnSelect;\n\n constructor(config: MentionMenuConfig) {\n super(config);\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-mention-menu');\n }\n\n protected getItemNode(item: MentionItem): Nodes {\n const itemNode = query(template`\n <li>\n <div class=\"lake-mention-avatar\"></div>\n <div class=\"lake-mention-nickname\">${item.nickname ?? item.name}</div>\n <div class=\"lake-mention-name\">(${item.name})</div>\n </li>\n `);\n const avatarNode = itemNode.find('.lake-mention-avatar');\n if (item.avatar) {\n avatarNode.append(item.avatar);\n } else {\n avatarNode.remove();\n }\n if (!item.nickname) {\n itemNode.find('.lake-mention-name').remove();\n }\n itemNode.on('click', event => this.onSelect(event, item));\n return itemNode;\n }\n\n protected search(keyword: string): MentionItem[] {\n keyword = keyword.toLowerCase();\n const items: MentionItem[] = [];\n for (const item of this.items) {\n const nickname = item.nickname ?? item.name;\n if (\n item.name.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(item);\n }\n }\n return items;\n }\n}\n","import './mention-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\n\nexport default {\n type: 'inline',\n name: 'mention',\n render: box => {\n const editor = box.getEditor();\n const { getProfileUrl } = editor.config.mention;\n const value = box.value;\n const url = getProfileUrl ? getProfileUrl(value) : '#';\n const boxContainer = box.getContainer();\n const rootNode = query(template`\n <div class=\"lake-mention\"><a href=\"${url}\">@${value.nickname ?? value.name}</a></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n if (!editor.readonly) {\n rootNode.find('a').on('click', (event: Event) => {\n event.preventDefault();\n });\n }\n },\n} as BoxComponent;\n","import { isKeyHotkey } from 'is-hotkey';\nimport { request } from 'lakelib/utils/request';\nimport { Range } from 'lakelib/models/range';\nimport { Editor } from 'lakelib/editor';\nimport { MentionMenu } from './mention-menu';\nimport { MentionItem } from './types';\nimport mentionBox from './mention-box';\n\nexport {\n mentionBox,\n};\n\nfunction getKeyword(range: Range): string | null {\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return null;\n }\n let text = targetRange.startNode.text().slice(targetRange.startOffset + 1, targetRange.endOffset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n return text;\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('mention', {\n requestMethod: 'GET',\n items: [],\n getProfileUrl: (value: MentionItem) => `/${value.name}`,\n });\n if (editor.readonly) {\n return;\n }\n const { requestAction, requestMethod, items } = editor.config.mention;\n let menu: MentionMenu | null = null;\n const selectListener = (event: Event, item: MentionItem) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n const targetRange = editor.selection.range.getCharacterRange('@');\n if (targetRange) {\n targetRange.get().deleteContents();\n }\n editor.selection.insertBox('mention', item);\n editor.history.save();\n };\n const showListener = () => {\n editor.popup = menu;\n };\n const hideListener = () => {\n editor.popup = null;\n };\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return;\n }\n const keyword = getKeyword(range);\n if (keyword === null) {\n return;\n }\n if (!menu) {\n if (requestAction) {\n request({\n onSuccess: body => {\n if (!body.data) {\n return;\n }\n menu = new MentionMenu({\n items: body.data,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n },\n action: requestAction,\n method: requestMethod,\n });\n } else {\n menu = new MentionMenu({\n items,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n }\n return;\n }\n menu.show(targetRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu || !menu.visible) {\n if (keyboardEvent.key === '@') {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const keyword = getKeyword(range);\n if (keyword === null) {\n if (menu) {\n menu.hide();\n }\n return;\n }\n if (menu) {\n menu.update(keyword);\n }\n });\n return () => {\n if (menu) {\n menu.unmount();\n }\n };\n};\n","import type { Editor } from 'lakelib/editor';\nimport { Point } from 'lakelib/types/node';\nimport { Nodes } from 'lakelib/models/nodes';\n\ntype MarkItem = {\n re: RegExp;\n getParameters: () => string[];\n};\n\ntype BlockItem = {\n re: RegExp;\n getParameters: () => (string | boolean)[];\n} | {\n re: RegExp;\n getParameters: (results: RegExpExecArray) => (string | boolean | object)[];\n};\n\nconst headingTypeMap = new Map([\n ['#', 'h1'],\n ['##', 'h2'],\n ['###', 'h3'],\n ['####', 'h4'],\n ['#####', 'h5'],\n ['######', 'h6'],\n]);\n\nconst shortLangTypeMap = new Map([\n ['js', 'javascript'],\n ['ts', 'typescript'],\n ['md', 'markdown'],\n ['htm', 'html'],\n]);\n\nconst markItemList: MarkItem[] = [\n {\n re: /\\*\\*(.+?)\\*\\*$/,\n getParameters: () => [\n 'bold',\n ],\n },\n {\n re: /__(.+?)__$/,\n getParameters: () => [\n 'bold',\n ],\n },\n {\n re: /_(.+?)_$/,\n getParameters: () => [\n 'italic',\n ],\n },\n {\n re: /\\*(.+?)\\*$/,\n getParameters: () => [\n 'italic',\n ],\n },\n {\n re: /==(.+?)==$/,\n getParameters: () => [\n 'highlight',\n '#fff566', // yellow-4, from https://ant.design/docs/spec/colors\n ],\n },\n {\n re: /~~(.+?)~~$/,\n getParameters: () => [\n 'strikethrough',\n ],\n },\n {\n re: /`(.+?)`$/,\n getParameters: () => [\n 'code',\n ],\n },\n];\n\nconst blockItemListForSpaceKey: BlockItem[] = [\n {\n re: /^#+$/,\n getParameters: (results: RegExpExecArray) => [\n 'heading',\n headingTypeMap.get(results[0]) ?? 'h6',\n ],\n },\n {\n re: /^\\d+\\.$/,\n getParameters: () => [\n 'list',\n 'numbered',\n ],\n },\n {\n re: /^[*\\-+]$/,\n getParameters: () => [\n 'list',\n 'bulleted',\n ],\n },\n {\n re: /^\\[\\s?\\]$/,\n getParameters: () => [\n 'list',\n 'checklist',\n false,\n ],\n },\n {\n re: /^\\[x\\]$/i,\n getParameters: () => [\n 'list',\n 'checklist',\n true,\n ],\n },\n {\n re: /^>$/,\n getParameters: () => [\n 'blockQuote',\n ],\n },\n];\n\nconst blockItemListForEnterKey: BlockItem[] = [\n {\n re: /^:{3,}([a-z]*)$/i,\n getParameters: (results: RegExpExecArray) => {\n if (!results[1]) {\n return [\n 'blockQuote',\n 'info',\n ];\n }\n return [\n 'blockQuote',\n results[1],\n ];\n },\n },\n {\n re: /^-{3,}$/,\n getParameters: () => [\n 'hr',\n ],\n },\n {\n re: /^`{3,}([a-z]*)$/i,\n getParameters: (results: RegExpExecArray) => {\n if (!results[1]) {\n return [\n 'codeBlock',\n ];\n }\n return [\n 'codeBlock',\n {\n lang: shortLangTypeMap.get(results[1]) ?? results[1],\n },\n ];\n },\n },\n];\n\nfunction getMarkdownPoint(editor: Editor): Point | void {\n const selection = editor.selection;\n const range = selection.range;\n let node = range.startNode;\n let offset = range.startOffset;\n if (offset === 0) {\n return;\n }\n if (node.isElement) {\n const child = node.children()[offset - 1];\n if (!child || !child.isText) {\n return;\n }\n node = child;\n offset = node.text().length;\n }\n if (offset < 1) {\n return;\n }\n return {\n node,\n offset,\n };\n}\n\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><focus /></p> to <p><br /><focus /></p>\nfunction fixEmptyBlock(block: Nodes): void {\n const newBlock = block.clone(true);\n newBlock.find('lake-bookmark').remove();\n if (newBlock.html() !== '') {\n return;\n }\n block.prepend('<br />');\n}\n\nfunction executeMarkCommand(editor: Editor, point: Point): boolean {\n const selection = editor.selection;\n const range = selection.range;\n const offset = point.offset;\n const text = point.node.text().slice(0, offset);\n for (const item of markItemList) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters();\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>foo**bold**<focus /></p>, offset = 11\n // to\n // <p>foobold\\u200B<focus /></p>,\n // to\n // <p>foo[bold]\\u200B<focus /></p>, startOffset = 3, endOffset = 7\n editor.history.pause();\n const bookmark = selection.insertBookmark();\n const node = bookmark.focus.prev();\n const oldValue = node.text();\n const newValue = `${oldValue.replace(item.re, '$1')}\\u200B`;\n node.get(0).nodeValue = newValue;\n range.setStart(node, offset - results[0].length);\n range.setEnd(node, offset - (oldValue.length - newValue.length) - 1);\n editor.command.execute(commandName, ...parameters);\n selection.toBookmark(bookmark);\n editor.history.continue();\n editor.history.save();\n return true;\n }\n }\n return false;\n}\n\nfunction spaceKeyExecutesBlockCommand(editor: Editor, point: Point): boolean {\n const selection = editor.selection;\n const offset = point.offset;\n let text = point.node.text().slice(0, offset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n for (const item of blockItemListForSpaceKey) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters(results);\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>#<focus />foo</p>\n // to\n // <h1><focus />foo</h1>\n const bookmark = selection.insertBookmark();\n const node = bookmark.focus.prev();\n node.remove();\n const block = bookmark.focus.closestBlock();\n fixEmptyBlock(block);\n selection.range.shrinkAfter(block);\n selection.toBookmark(bookmark);\n editor.command.execute(commandName, ...parameters);\n return true;\n }\n }\n return false;\n}\n\nfunction enterKeyExecutesBlockCommand(editor: Editor, block: Nodes): boolean {\n const selection = editor.selection;\n let text = block.text();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n for (const item of blockItemListForEnterKey) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters(results);\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>---<focus /></p>\n // to\n // <lake-box type=\"block\" name=\"hr\" focus=\"end\"></lake-box>\n block.empty();\n fixEmptyBlock(block);\n selection.range.shrinkAfter(block);\n editor.command.execute(commandName, ...parameters);\n return true;\n }\n }\n return false;\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('space', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBox) {\n return;\n }\n const point = getMarkdownPoint(editor);\n if (!point) {\n return;\n }\n if (executeMarkCommand(editor, point)) {\n event.preventDefault();\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (!(block.isHeading || block.name === 'p')) {\n return;\n }\n if (spaceKeyExecutesBlockCommand(editor, point)) {\n event.preventDefault();\n }\n });\n editor.keystroke.setKeydown('enter', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBox) {\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (!(block.isHeading || block.name === 'p')) {\n return;\n }\n if (block.find('lake-box').length > 0) {\n return;\n }\n if (range.getEndText() !== '') {\n return;\n }\n if (enterKeyExecutesBlockCommand(editor, block)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n // returning false is for unit test\n return false;\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\n\nfunction splitBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n const endText = range.getEndText();\n editor.selection.splitBlock();\n block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (endText === '' && (block.isHeading || block.name === 'blockquote')) {\n editor.selection.setBlocks('<p />');\n return;\n }\n if (block.isList && block.attr('type') === 'checklist') {\n block.find('li').attr('value', 'false');\n }\n}\n\nfunction addOrSplitBlockForBox(editor: Editor): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n splitBlock(editor, block);\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n splitBlock(editor, block);\n } else {\n editor.selection.removeBox();\n }\n return;\n }\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else if (range.isBoxEnd) {\n boxNode.after(newBlock);\n range.shrinkAfter(newBlock);\n } else {\n editor.selection.removeBox();\n }\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('enter', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.fixContent();\n if (range.isBox) {\n addOrSplitBlockForBox(editor);\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const prevNode = range.getPrevNode();\n const nextNode = range.getNextNode();\n if (prevNode.name === 'table' || nextNode.name === 'table') {\n const newBlock = query('<p><br /></p>');\n editor.selection.insertContents(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n if (range.isInoperative) {\n return;\n }\n if (range.isBox) {\n addOrSplitBlockForBox(editor);\n editor.history.save();\n return;\n }\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if (block.isEmpty && block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n editor.history.save();\n return;\n }\n splitBlock(editor, block);\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\n\nfunction addLineBreak(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.startNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n const prevNode = range.getPrevNode();\n const endText = range.getEndText();\n if (prevNode.name !== 'br' && endText === '') {\n editor.selection.insertContents('<br /><br />');\n editor.history.save();\n return;\n }\n }\n editor.selection.insertContents('<br />');\n}\n\nfunction addBlockOrLineBreakForBox(editor: Editor): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n addLineBreak(editor);\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n addLineBreak(editor);\n } else {\n editor.selection.removeBox();\n }\n return;\n }\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else if (range.isBoxEnd) {\n boxNode.after(newBlock);\n range.shrinkAfter(newBlock);\n } else {\n editor.selection.removeBox();\n }\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('shift+enter', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n editor.fixContent();\n event.preventDefault();\n if (range.isBox) {\n addBlockOrLineBreakForBox(editor);\n editor.history.save();\n return;\n }\n range.adjust();\n if (range.isInoperative) {\n return;\n }\n if (range.isBox) {\n addBlockOrLineBreakForBox(editor);\n editor.history.save();\n return;\n }\n addLineBreak(editor);\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { appendBreak } from 'lakelib/utils/append-break';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { indentBlock } from 'lakelib/utils/indent-block';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { setBlocks } from 'lakelib/operations/set-blocks';\n\nfunction emptyBlock(range: Range): void {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty && block.first().name !== 'br') {\n block.empty();\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n\nfunction mergeWithPreviousBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let prevBlock = block.prev();\n if (prevBlock.length === 0) {\n if (block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n }\n return;\n }\n if (prevBlock.isBox || prevBlock.name === 'table') {\n if (block.isEmpty) {\n block.remove();\n }\n range.shrinkAfter(prevBlock);\n return;\n }\n if (prevBlock.name === 'br') {\n prevBlock.remove();\n return;\n }\n if (!prevBlock.isBlock) {\n const prevRange = new Range();\n prevRange.selectNodeContents(prevBlock);\n setBlocks(prevRange, '<p />');\n prevBlock = prevRange.startNode.closestBlock();\n }\n if (prevBlock.isEmpty) {\n prevBlock.remove();\n return;\n }\n emptyBlock(range);\n const nextNode = range.getNextNode();\n if (nextNode.name === 'br' && prevBlock.name !== 'p') {\n nextNode.remove();\n range.shrinkAfter(prevBlock);\n return;\n }\n const bookmark = editor.selection.insertBookmark();\n mergeNodes(prevBlock, block);\n fixNumberedList([ prevBlock ]);\n editor.selection.toBookmark(bookmark);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('backspace', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const box = getBox(boxNode);\n const boxValue = box.value;\n if (\n range.isCollapsed && box.name === 'codeBlock' &&\n (boxValue.code === undefined || boxValue.code === '')\n ) {\n event.preventDefault();\n editor.selection.removeBox(box);\n editor.history.save();\n }\n return;\n }\n editor.fixContent();\n if (range.isBoxStart) {\n const boxNode = range.startNode.closest('lake-box');\n const prevNode = boxNode.prev();\n if (prevNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (prevNode.isBlock) {\n if (prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n fixNumberedList(range.getBlocks());\n editor.history.save();\n return;\n }\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n range.adjustBox();\n }\n if (range.isBox) {\n event.preventDefault();\n editor.selection.removeBox();\n editor.history.save();\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n editor.selection.deleteContents();\n if (editor.container.html().trim() === '') {\n editor.setValue('<p><br /><focus /></p>');\n }\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const prevNode = range.getPrevNode();\n if (prevNode.name === 'table') {\n event.preventDefault();\n const newBlock = query('<p><br /></p>');\n prevNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.length > 0 && nextNode.name === 'table') {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n editor.selection.removeBox(prevNode);\n editor.history.save();\n return;\n }\n if ((prevNode.isMark || prevNode.name === 'a') && prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1 && prevNode.parent().isBlock) {\n event.preventDefault();\n const block = prevNode.closestBlock();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.name === 'br' && nextNode.length > 0) {\n event.preventDefault();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n editor.history.save();\n return;\n }\n const startText = range.getStartText();\n if (startText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if(\n block.css('margin-left') !== '' ||\n block.css('text-indent') !== '' ||\n block.attr('indent') !== ''\n ) {\n indentBlock(block, 'decrease');\n editor.history.save();\n return;\n }\n if (block.isList || block.name === 'blockquote') {\n editor.selection.setBlocks('<p />');\n editor.history.save();\n return;\n }\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { setBlocks } from 'lakelib/operations/set-blocks';\n\nfunction mergeWithNextBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let nextBlock = block.next();\n if (nextBlock.length === 0) {\n editor.history.save();\n return;\n }\n if (nextBlock.isBox) {\n if (block.isEmpty) {\n block.remove();\n }\n range.selectBoxStart(nextBlock);\n editor.history.save();\n return;\n }\n if (nextBlock.name === 'table') {\n nextBlock.remove();\n return;\n }\n if (!nextBlock.isBlock) {\n const nextRange = new Range();\n nextRange.selectNodeContents(nextBlock);\n setBlocks(nextRange, '<p />');\n nextBlock = nextBlock.closestBlock();\n }\n const bookmark = editor.selection.insertBookmark();\n mergeNodes(block, nextBlock);\n fixNumberedList([ block ]);\n editor.selection.toBookmark(bookmark);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('delete', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n editor.fixContent();\n if (range.isBoxEnd) {\n const boxNode = range.startNode.closest('lake-box');\n const nextNode = boxNode.next();\n if (nextNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithNextBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (nextNode.isBlock) {\n if (nextNode.isEmpty) {\n event.preventDefault();\n nextNode.remove();\n fixNumberedList(range.getBlocks());\n editor.history.save();\n return;\n }\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n range.adjustBox();\n }\n if (range.isBox) {\n event.preventDefault();\n editor.selection.removeBox();\n editor.history.save();\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n editor.selection.deleteContents();\n if (editor.container.html().trim() === '') {\n editor.setValue('<p><br /><focus /></p>');\n }\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const nextNode = range.getNextNode();\n if (nextNode.name === 'table') {\n event.preventDefault();\n const newBlock = query('<p><br /></p>');\n nextNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n editor.selection.removeBox(nextNode);\n editor.history.save();\n return;\n }\n if (nextNode.name === 'br' && nextNode.next().length > 0) {\n event.preventDefault();\n range.setStartBefore(nextNode);\n range.collapseToStart();\n nextNode.remove();\n editor.history.save();\n }\n const endText = range.getEndText();\n if (endText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n mergeWithNextBlock(editor, block);\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { indentBlock } from 'lakelib/utils/indent-block';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('tab', event => {\n if (editor.config.indentWithTab === false) {\n return;\n }\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n const blocks = range.getBlocks();\n for (const block of blocks) {\n if (block.name !== 'p' || block.css('text-indent') === '2em') {\n indentBlock(block, 'increase');\n } else {\n block.css('text-indent', '2em');\n }\n }\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('left', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n if (prevNode.isInlineBox) {\n range.selectBox(prevNode);\n return;\n }\n range.shrinkAfter(prevNode);\n return;\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n return;\n }\n if (range.isBoxEnd) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n event.preventDefault();\n range.selectBoxStart(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n range.selectBox(prevNode);\n }\n });\n editor.keystroke.setKeydown('right', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n if (range.isBoxEnd) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n if (nextNode.isInlineBox) {\n range.selectBox(nextNode);\n return;\n }\n range.shrinkBefore(nextNode);\n return;\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n return;\n }\n event.preventDefault();\n range.selectBoxEnd(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n range.selectBox(nextNode);\n }\n });\n editor.keystroke.setKeydown('up', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n }\n });\n editor.keystroke.setKeydown('down', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('escape', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBoxCenter || range.isInsideBox) {\n event.preventDefault();\n const boxNode = range.commonAncestor.closest('lake-box');\n range.selectBoxEnd(boxNode);\n selection.sync();\n return;\n }\n if (editor.hasFocus()) {\n event.preventDefault();\n editor.blur();\n }\n });\n};\n","import { icons } from 'lakelib/icons';\nimport { SlashItem } from './types';\n\nexport const slashItems: SlashItem[] = [\n {\n name: 'heading1',\n type: 'button',\n icon: icons.get('heading1'),\n title: locale => locale.slash.heading1(),\n description: locale => locale.slash.heading1Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h1');\n },\n },\n {\n name: 'heading2',\n type: 'button',\n icon: icons.get('heading2'),\n title: locale => locale.slash.heading2(),\n description: locale => locale.slash.heading2Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h2');\n },\n },\n {\n name: 'heading3',\n type: 'button',\n icon: icons.get('heading3'),\n title: locale => locale.slash.heading3(),\n description: locale => locale.slash.heading3Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h3');\n },\n },\n {\n name: 'heading4',\n type: 'button',\n icon: icons.get('heading4'),\n title: locale => locale.slash.heading4(),\n description: locale => locale.slash.heading4Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h4');\n },\n },\n {\n name: 'heading5',\n type: 'button',\n icon: icons.get('heading5'),\n title: locale => locale.slash.heading5(),\n description: locale => locale.slash.heading5Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h5');\n },\n },\n {\n name: 'heading6',\n type: 'button',\n icon: icons.get('heading6'),\n title: locale => locale.slash.heading6(),\n description: locale => locale.slash.heading6Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h6');\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n title: locale => locale.slash.paragraph(),\n description: locale => locale.slash.paragraphDesc(),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n title: locale => locale.slash.blockQuote(),\n description: locale => locale.slash.blockQuoteDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n title: locale => locale.slash.numberedList(),\n description: locale => locale.slash.numberedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n title: locale => locale.slash.bulletedList(),\n description: locale => locale.slash.bulletedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n title: locale => locale.slash.checklist(),\n description: locale => locale.slash.checklistDesc(),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'table',\n type: 'button',\n icon: icons.get('table'),\n title: locale => locale.slash.table(),\n description: locale => locale.slash.tableDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'infoAlert',\n type: 'button',\n icon: icons.get('info'),\n title: locale => locale.slash.infoAlert(),\n description: locale => locale.slash.infoAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'info');\n },\n },\n {\n name: 'tipAlert',\n type: 'button',\n icon: icons.get('tip'),\n title: locale => locale.slash.tipAlert(),\n description: locale => locale.slash.tipAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'tip');\n },\n },\n {\n name: 'warningAlert',\n type: 'button',\n icon: icons.get('warning'),\n title: locale => locale.slash.warningAlert(),\n description: locale => locale.slash.warningAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'warning');\n },\n },\n {\n name: 'dangerAlert',\n type: 'button',\n icon: icons.get('danger'),\n title: locale => locale.slash.dangerAlert(),\n description: locale => locale.slash.dangerAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'danger');\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n title: locale => locale.slash.hr(),\n description: locale => locale.slash.hrDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n title: locale => locale.slash.codeBlock(),\n description: locale => locale.slash.codeBlockDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n title: locale => locale.slash.video(),\n description: locale => locale.slash.videoDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n title: locale => locale.slash.equation(),\n description: locale => locale.slash.equationDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n title: locale => locale.slash.image(),\n description: locale => locale.slash.imageDesc(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n title: locale => locale.slash.file(),\n description: locale => locale.slash.fileDesc(),\n accept: '*',\n multiple: true,\n },\n];\n","import './slash-menu.css';\nimport { TranslationFunctions } from 'lakelib/i18n/types';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Menu, MenuConfig } from 'lakelib/ui/menu';\nimport { i18nObject } from 'lakelib/i18n';\nimport { SlashItem } from './types';\nimport { slashItems } from './slash-items';\n\ntype OnSelect = (\n event: Event,\n item: SlashItem,\n fileNode?: Nodes,\n) => void;\n\ntype SlashMenuConfig = MenuConfig<string | SlashItem> & {\n locale?: TranslationFunctions;\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\nconst slashItemMap: Map<string, SlashItem> = new Map();\n\nfor (const item of slashItems) {\n slashItemMap.set(item.name, item);\n}\n\n// The SlashMenu class, inheriting from the Menu class, represents a list of commands for executing a command.\nexport class SlashMenu extends Menu<string | SlashItem> {\n\n private locale: TranslationFunctions;\n\n private onSelect: OnSelect;\n\n constructor(config: SlashMenuConfig) {\n super(config);\n this.locale = config.locale || i18nObject('en-US');\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-slash-menu');\n }\n\n private getItem(name: string | SlashItem): SlashItem {\n if (typeof name !== 'string') {\n return name;\n }\n const item = slashItemMap.get(name);\n if (!item) {\n throw new Error(`SlashItem \"${name}\" has not been defined yet.`);\n }\n return item;\n }\n\n protected getItemNode(name: string | SlashItem): Nodes {\n const item = this.getItem(name);\n const itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n const itemDescription = typeof item.description === 'string' ? item.description : item.description(this.locale);\n const itemNode = query(template`\n <li name=\"${item.name}\">\n <div class=\"lake-slash-icon\"></div>\n <div class=\"lake-slash-text\">\n <div class=\"lake-slash-title\">${itemTitle}</div>\n <div class=\"lake-slash-description\">${itemDescription}</div>\n </div>\n </li>\n `);\n const icon = item.icon;\n if (icon) {\n itemNode.find('.lake-slash-icon').append(icon);\n }\n if (item.type === 'upload') {\n itemNode.append('<input type=\"file\" />');\n const fileNode = itemNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => this.onSelect(event, item, fileNode));\n itemNode.on('click', () => fileNativeNode.click());\n } else {\n itemNode.on('click', event => this.onSelect(event, item));\n }\n return itemNode;\n }\n\n protected search(keyword: string): (string | SlashItem)[] {\n const localeEnglish = i18nObject('en-US');\n keyword = keyword.toLowerCase();\n const items: (string | SlashItem)[] = [];\n for (const name of this.items) {\n const item = this.getItem(name);\n let itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n itemTitle = itemTitle.toLowerCase();\n let itemTitleEnglish = typeof item.title === 'string' ? item.title : item.title(localeEnglish);\n itemTitleEnglish = itemTitleEnglish.toLowerCase();\n if (\n itemTitle.indexOf(keyword) >= 0 ||\n itemTitle.replace(/\\s+/g, '').indexOf(keyword) >= 0 ||\n itemTitleEnglish.indexOf(keyword) >= 0 ||\n itemTitleEnglish.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(typeof name === 'string' ? item.name : name);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { appendBreak } from 'lakelib/utils/append-break';\nimport { uploadFile } from 'lakelib/utils/upload-file';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Editor } from 'lakelib/editor';\nimport { SlashMenu } from './slash-menu';\n\nconst defaultItems: string[] = [\n 'heading1',\n 'heading2',\n 'heading3',\n 'heading4',\n 'heading5',\n 'heading6',\n 'paragraph',\n 'blockQuote',\n 'numberedList',\n 'bulletedList',\n 'checklist',\n 'table',\n 'infoAlert',\n 'tipAlert',\n 'warningAlert',\n 'dangerAlert',\n 'hr',\n];\n\nfunction getKeyword(block: Nodes): string | null {\n let text = block.text().trim();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n if (!/^\\//.test(text)) {\n return null;\n }\n return text.substring(1);\n}\n\nfunction emptyBlock(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.commonAncestor.closestBlock();\n block.empty();\n appendBreak(block);\n range.shrinkBefore(block);\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('slash', {\n items: defaultItems,\n });\n if (editor.readonly) {\n return;\n }\n const menu = new SlashMenu({\n locale: editor.locale,\n items: editor.config.slash.items,\n onSelect: (event, item, fileNode) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n emptyBlock(editor);\n if (item.type === 'upload') {\n if (!fileNode) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n } else {\n item.onClick(editor, item.name);\n }\n },\n onShow: () => {\n editor.popup = menu;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const block = range.getBlocks()[0];\n if (\n !block ||\n block.find('lake-box').length > 0 ||\n block.closest('table').length > 0\n ) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n return;\n }\n const slashRange = range.clone();\n slashRange.selectNodeContents(block);\n menu.show(slashRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu.visible) {\n if (isKeyHotkey('/', keyboardEvent)) {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n menu.hide();\n return;\n }\n menu.update(keyword);\n });\n return () => {\n menu.unmount();\n };\n};\n","import './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { BoxComponent, BoxValue } from './types/box';\nimport { ToolbarItem } from './types/toolbar';\nimport { DropdownMenuItem } from './types/dropdown';\nimport { MentionItem } from './plugins/mention/types';\nimport { SlashItem } from './plugins/slash/types';\nimport { icons } from './icons';\nimport { query } from './utils/query';\nimport { template } from './utils/template';\nimport { toHex } from './utils/to-hex';\nimport { Nodes } from './models/nodes';\nimport { Fragment } from './models/fragment';\nimport { Range } from './models/range';\nimport { Box } from './models/box';\nimport { HTMLParser } from './parsers/html-parser';\nimport { TextParser } from './parsers/text-parser';\nimport { insertBookmark } from './operations/insert-bookmark';\nimport { toBookmark } from './operations/to-bookmark';\nimport { insertContents} from './operations/insert-contents';\nimport { deleteContents} from './operations/delete-contents';\nimport { setBlocks} from './operations/set-blocks';\nimport { splitBlock} from './operations/split-block';\nimport { insertBlock } from './operations/insert-block';\nimport { splitMarks} from './operations/split-marks';\nimport { addMark} from './operations/add-mark';\nimport { removeMark} from './operations/remove-mark';\nimport { insertBox } from './operations/insert-box';\nimport { removeBox } from './operations/remove-box';\nimport { Button } from './ui/button';\nimport { Dropdown } from './ui/dropdown';\nimport { Editor } from './editor';\nimport { Toolbar } from './ui/toolbar';\nimport copy from './plugins/copy';\nimport cut from './plugins/cut';\nimport paste from './plugins/paste';\nimport drop from './plugins/drop';\nimport undo from './plugins/undo';\nimport redo from './plugins/redo';\nimport selectAll from './plugins/select-all';\nimport heading from './plugins/heading';\nimport blockQuote from './plugins/block-quote';\nimport list from './plugins/list';\nimport table from './plugins/table';\nimport align from './plugins/align';\nimport indent from './plugins/indent';\nimport bold from './plugins/bold';\nimport italic from './plugins/italic';\nimport underline from './plugins/underline';\nimport strikethrough from './plugins/strikethrough';\nimport subscript from './plugins/subscript';\nimport superscript from './plugins/superscript';\nimport code from './plugins/code';\nimport fontFamily from './plugins/font-family';\nimport fontSize from './plugins/font-size';\nimport fontColor from './plugins/font-color';\nimport highlight from './plugins/highlight';\nimport removeFormat from './plugins/remove-format';\nimport formatPainter from './plugins/format-painter';\nimport link from './plugins/link';\nimport hr, { hrBox } from './plugins/hr';\nimport codeBlock, { codeBlockBox } from './plugins/code-block';\nimport image, { imageBox } from './plugins/image';\nimport video, { videoBox } from './plugins/video';\nimport file, { fileBox } from './plugins/file';\nimport emoji, { emojiBox } from './plugins/emoji';\nimport equation, { equationBox } from './plugins/equation';\nimport specialCharacter from './plugins/special-character';\nimport mention, { mentionBox } from './plugins/mention';\nimport markdown from './plugins/markdown';\nimport enterKey from './plugins/enter-key';\nimport shiftEnterKey from './plugins/shift-enter-key';\nimport backspaceKey from './plugins/backspace-key';\nimport deleteKey from './plugins/delete-key';\nimport tabKey from './plugins/tab-key';\nimport arrowKeys from './plugins/arrow-keys';\nimport escapeKey from './plugins/escape-key';\nimport slash from './plugins/slash';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(emojiBox);\nEditor.box.add(equationBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(mentionBox);\n\nEditor.plugin.add('copy', copy);\nEditor.plugin.add('cut', cut);\nEditor.plugin.add('paste', paste);\nEditor.plugin.add('drop', drop);\nEditor.plugin.add('undo', undo);\nEditor.plugin.add('redo', redo);\nEditor.plugin.add('selectAll', selectAll);\nEditor.plugin.add('heading', heading);\nEditor.plugin.add('blockQuote', blockQuote);\nEditor.plugin.add('list', list);\nEditor.plugin.add('table', table);\nEditor.plugin.add('align', align);\nEditor.plugin.add('indent', indent);\nEditor.plugin.add('bold', bold);\nEditor.plugin.add('italic', italic);\nEditor.plugin.add('underline', underline);\nEditor.plugin.add('strikethrough', strikethrough);\nEditor.plugin.add('subscript', subscript);\nEditor.plugin.add('superscript', superscript);\nEditor.plugin.add('code', code);\nEditor.plugin.add('fontFamily', fontFamily);\nEditor.plugin.add('fontSize', fontSize);\nEditor.plugin.add('fontColor', fontColor);\nEditor.plugin.add('highlight', highlight);\nEditor.plugin.add('removeFormat', removeFormat);\nEditor.plugin.add('formatPainter', formatPainter);\nEditor.plugin.add('link', link);\nEditor.plugin.add('hr', hr);\nEditor.plugin.add('codeBlock', codeBlock);\nEditor.plugin.add('image', image);\nEditor.plugin.add('video', video);\nEditor.plugin.add('file', file);\nEditor.plugin.add('emoji', emoji);\nEditor.plugin.add('equation', equation);\nEditor.plugin.add('specialCharacter', specialCharacter);\nEditor.plugin.add('mention', mention);\nEditor.plugin.add('markdown', markdown);\nEditor.plugin.add('enterKey', enterKey);\nEditor.plugin.add('shiftEnterKey', shiftEnterKey);\nEditor.plugin.add('backspaceKey', backspaceKey);\nEditor.plugin.add('deleteKey', deleteKey);\nEditor.plugin.add('tabKey', tabKey);\nEditor.plugin.add('arrowKeys', arrowKeys);\nEditor.plugin.add('escapeKey', escapeKey);\nEditor.plugin.add('slash', slash);\n\nexport {\n // constants\n icons,\n // types\n ToolbarItem,\n DropdownMenuItem,\n MentionItem,\n SlashItem,\n BoxComponent,\n BoxValue,\n // classes\n Editor,\n Toolbar,\n Button,\n Dropdown,\n Nodes,\n Fragment,\n Range,\n Box,\n HTMLParser,\n TextParser,\n // functions\n query,\n template,\n toHex,\n insertBookmark,\n toBookmark,\n insertContents,\n deleteContents,\n setBlocks,\n splitBlock,\n insertBlock,\n splitMarks,\n addMark,\n removeMark,\n insertBox,\n removeBox,\n};\n"],"names":["copy","selectAll","undo","redo","heading","blockQuote","list","formatPainter","bold","italic","underline","strikethrough","superscript","subscript","code","removeFormat","fontColor","highlight","link","hr","codeBlock","image","video","emoji","specialCharacter","equation","table","file","initI18nObject","defaultItems","splitBlock","getNestedMark","alignValueMap","tagName","renderError","emptyCallback","getKeyword","emptyBlock"],"mappings":"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","x_google_ignoreList":[112]}
|
|
1
|
+
{"version":3,"file":"lake.js","sources":["../../src/elements/box.ts","../../src/elements/bookmark.ts","../../src/icons/index.ts","../../src/utils/to-node-list.ts","../../src/config/tag-names.ts","../../src/utils/in-string.ts","../../src/utils/camel-case.ts","../../src/utils/to-hex.ts","../../src/utils/get-css.ts","../../src/utils/debug.ts","../../src/models/nodes.ts","../../src/utils/query.ts","../../src/utils/encode.ts","../../src/utils/template.ts","../../src/storage/box-instances.ts","../../src/storage/boxes.ts","../../src/storage/editors.ts","../../src/utils/to-base64.ts","../../src/utils/from-base64.ts","../../src/utils/visible-info.ts","../../src/models/range.ts","../../src/config/menu-items.ts","../../src/config/toolbar-items.ts","../../src/utils/request.ts","../../src/utils/upload-file.ts","../../src/ui/button.ts","../../src/utils/unsafe-template.ts","../../src/utils/modifier-text.ts","../../src/i18n/en-US/index.ts","../../src/i18n/zh-CN/index.ts","../../src/i18n/ja/index.ts","../../src/i18n/ko/index.ts","../../src/i18n/index.ts","../../src/ui/dropdown.ts","../../src/ui/toolbar.ts","../../src/ui/floating-toolbar.ts","../../src/models/box.ts","../../src/utils/get-box.ts","../../src/models/fragment.ts","../../src/config/element-rules.ts","../../src/utils/parse-style.ts","../../src/parsers/html-parser.ts","../../src/parsers/text-parser.ts","../../src/operations/insert-bookmark.ts","../../src/operations/to-bookmark.ts","../../src/utils/remove-break.ts","../../src/utils/append-break.ts","../../src/utils/merge-nodes.ts","../../src/utils/fix-numbered-list.ts","../../src/operations/delete-contents.ts","../../src/operations/insert-contents.ts","../../src/utils/get-deep-element.ts","../../src/utils/wrap-node-list.ts","../../src/operations/set-blocks.ts","../../src/utils/split-nodes.ts","../../src/utils/remove-empty-marks.ts","../../src/operations/split-block.ts","../../src/operations/insert-block.ts","../../src/operations/split-marks.ts","../../src/operations/add-mark.ts","../../src/utils/remove-zws.ts","../../src/operations/remove-mark.ts","../../src/operations/insert-box.ts","../../src/operations/remove-box.ts","../../src/utils/denormalize-value.ts","../../src/utils/normalize-value.ts","../../src/utils/scroll-to-node.ts","../../src/managers/selection.ts","../../src/managers/command.ts","../../src/utils/morph.ts","../../src/managers/history.ts","../../src/managers/keystroke.ts","../../src/managers/box-manager.ts","../../src/managers/plugin.ts","../../src/editor.ts","../../src/plugins/copy.ts","../../src/plugins/cut.ts","../../src/utils/change-tag-name.ts","../../src/plugins/paste.ts","../../src/plugins/drop.ts","../../src/plugins/undo.ts","../../src/plugins/redo.ts","../../src/plugins/select-all.ts","../../src/plugins/heading.ts","../../src/plugins/block-quote.ts","../../src/plugins/list.ts","../../src/plugins/table/insert-table.ts","../../src/plugins/table/delete-table.ts","../../src/plugins/table/utils.ts","../../src/plugins/table/insert-column.ts","../../src/plugins/table/delete-column.ts","../../src/plugins/table/insert-row.ts","../../src/plugins/table/delete-row.ts","../../src/plugins/table/merge-cells.ts","../../src/plugins/table/split-cell.ts","../../src/plugins/table/index.ts","../../src/plugins/align.ts","../../src/utils/indent-block.ts","../../src/plugins/indent.ts","../../src/plugins/bold.ts","../../src/plugins/italic.ts","../../src/plugins/underline.ts","../../src/plugins/strikethrough.ts","../../src/plugins/subscript.ts","../../src/plugins/superscript.ts","../../src/plugins/code.ts","../../src/plugins/font-family.ts","../../src/plugins/font-size.ts","../../src/plugins/font-color.ts","../../src/plugins/highlight.ts","../../src/plugins/remove-format.ts","../../src/plugins/format-painter.ts","../node_modules/.pnpm/@rollup+plugin-typescript@1_73347363da836bd68b4f71d86a732923/node_modules/tslib/tslib.es6.js","../../src/plugins/link/link-popup.ts","../../src/plugins/link/insert-link.ts","../../src/plugins/link/index.ts","../../src/plugins/hr/hr-box.ts","../../src/plugins/hr/index.ts","../../src/plugins/code-block/code-block-box.ts","../../src/plugins/code-block/index.ts","../../src/ui/corner-toolbar.ts","../../src/ui/resizer.ts","../../src/plugins/image/image-box.ts","../../src/plugins/image/index.ts","../../src/plugins/video/video-box.ts","../../src/plugins/video/index.ts","../../src/utils/file-size.ts","../../src/plugins/file/file-box.ts","../../src/plugins/file/index.ts","../../src/plugins/emoji/emoji-box.ts","../../src/plugins/emoji/index.ts","../../src/plugins/equation/equation-box.ts","../../src/plugins/equation/index.ts","../../src/plugins/special-character.ts","../../src/ui/menu.ts","../../src/plugins/mention/mention-menu.ts","../../src/plugins/mention/mention-box.ts","../../src/plugins/mention/index.ts","../../src/plugins/markdown.ts","../../src/plugins/enter-key.ts","../../src/plugins/shift-enter-key.ts","../../src/plugins/backspace-key.ts","../../src/plugins/delete-key.ts","../../src/plugins/tab-key.ts","../../src/plugins/arrow-keys.ts","../../src/plugins/escape-key.ts","../../src/plugins/slash/slash-items.ts","../../src/plugins/slash/slash-menu.ts","../../src/plugins/slash/index.ts","../../src/index.ts"],"sourcesContent":["class BoxElement extends HTMLElement {\n\n}\n\nif (customElements.get('lake-box') !== undefined) {\n customElements.define('lake-box', BoxElement);\n}\n","class BookmarkElement extends HTMLElement {\n\n}\n\nif (customElements.get('lake-bookmark') !== undefined) {\n customElements.define('lake-bookmark', BookmarkElement);\n}\n","// These icons are sourced from open source projects.\n//\n// Fluent Icons by Microsoft (https://fluenticons.co/).\n// - superscript.svg\n// - subscript.svg\n// - highlight.svg\n// - highlight-accent.svg\n// - background-color.svg\n// - background-color-accent.svg\n// - open.svg\n// - table-merge.svg\n// - table-split.svg\n//\n// Phosphor Icons (https://phosphoricons.com/).\n// - other icons\n\n// eslint-disable-next-line ts/ban-ts-comment\n// @ts-nocheck\n\n// common\nimport plus from './plus.svg';\nimport question from './question.svg';\nimport more from './more.svg';\nimport left from './left.svg';\nimport right from './right.svg';\nimport down from './down.svg';\nimport check from './check.svg';\nimport checkCircle from './check-circle.svg';\nimport warningCircle from './warning-circle.svg';\nimport open from './open.svg';\nimport download from './download.svg';\nimport copy from './copy.svg';\nimport remove from './remove.svg';\nimport maximize from './maximize.svg';\nimport close from './close.svg';\nimport resize from './resize.svg';\nimport expand from './expand.svg';\nimport circleNotch from './circle-notch.svg';\n// toolbar\nimport selectAll from './select-all.svg';\nimport undo from './undo.svg';\nimport redo from './redo.svg';\nimport heading from './heading.svg';\nimport heading1 from './heading1.svg';\nimport heading2 from './heading2.svg';\nimport heading3 from './heading3.svg';\nimport heading4 from './heading4.svg';\nimport heading5 from './heading5.svg';\nimport heading6 from './heading6.svg';\nimport paragraph from './paragraph.svg';\nimport blockQuote from './block-quote.svg';\nimport list from './list.svg';\nimport numberedList from './numbered-list.svg';\nimport bulletedList from './bulleted-list.svg';\nimport checklist from './checklist.svg';\nimport alignLeft from './align-left.svg';\nimport alignCenter from './align-center.svg';\nimport alignRight from './align-right.svg';\nimport alignJustify from './align-justify.svg';\nimport increaseIndent from './increase-indent.svg';\nimport decreaseIndent from './decrease-indent.svg';\nimport formatPainter from './format-painter.svg';\nimport bold from './bold.svg';\nimport italic from './italic.svg';\nimport underline from './underline.svg';\nimport strikethrough from './strikethrough.svg';\nimport superscript from './superscript.svg';\nimport subscript from './subscript.svg';\nimport code from './code.svg';\nimport removeFormat from './remove-format.svg';\nimport moreStyle from './more-style.svg';\nimport fontColor from './font-color.svg';\nimport fontColorAccent from './font-color-accent.svg';\nimport highlight from './highlight.svg';\nimport highlightAccent from './highlight-accent.svg';\nimport backgroundColor from './background-color.svg';\nimport backgroundColorAccent from './background-color-accent.svg';\nimport link from './link.svg';\nimport hr from './hr.svg';\nimport codeBlock from './code-block.svg';\nimport image from './image.svg';\nimport video from './video.svg';\nimport attachment from './attachment.svg';\nimport emoji from './emoji.svg';\nimport specialCharacter from './special-character.svg';\nimport equation from './equation.svg';\nimport table from './table.svg';\n// link\nimport unlink from './unlink.svg';\n// image\nimport imageBroken from './image-broken.svg';\nimport zoomIn from './zoom-in.svg';\nimport zoomOut from './zoom-out.svg';\nimport caption from './caption.svg';\n// file\nimport file from './file.svg';\n// table\nimport tableColumn from './table-column.svg';\nimport tableRow from './table-row.svg';\nimport tableMerge from './table-merge.svg';\nimport tableSplit from './table-split.svg';\n// alerts\nimport info from './info.svg';\nimport tip from './tip.svg';\nimport warning from './warning.svg';\nimport danger from './danger.svg';\n\nexport const icons = new Map<string, string>([\n // common\n ['plus', plus],\n ['question', question],\n ['more', more],\n ['left', left],\n ['right', right],\n ['down', down],\n ['check', check],\n ['checkCircle', checkCircle],\n ['warningCircle', warningCircle],\n ['open', open],\n ['download', download],\n ['copy', copy],\n ['remove', remove],\n ['maximize', maximize],\n ['close', close],\n ['resize', resize],\n ['expand', expand],\n ['circleNotch', circleNotch],\n // toolbar\n ['selectAll', selectAll],\n ['undo', undo],\n ['redo', redo],\n ['heading', heading],\n ['heading1', heading1],\n ['heading2', heading2],\n ['heading3', heading3],\n ['heading4', heading4],\n ['heading5', heading5],\n ['heading6', heading6],\n ['paragraph', paragraph],\n ['blockQuote', blockQuote],\n ['list', list],\n ['numberedList', numberedList],\n ['bulletedList', bulletedList],\n ['checklist', checklist],\n ['alignLeft', alignLeft],\n ['alignCenter', alignCenter],\n ['alignRight', alignRight],\n ['alignJustify', alignJustify],\n ['increaseIndent', increaseIndent],\n ['decreaseIndent', decreaseIndent],\n ['formatPainter', formatPainter],\n ['bold', bold],\n ['italic', italic],\n ['underline', underline],\n ['strikethrough', strikethrough],\n ['superscript', superscript],\n ['subscript', subscript],\n ['code', code],\n ['removeFormat', removeFormat],\n ['moreStyle', moreStyle],\n ['fontColor', fontColor],\n ['fontColorAccent', fontColorAccent],\n ['highlight', highlight],\n ['highlightAccent', highlightAccent],\n ['backgroundColor', backgroundColor],\n ['backgroundColorAccent', backgroundColorAccent],\n ['link', link],\n ['hr', hr],\n ['codeBlock', codeBlock],\n ['image', image],\n ['video', video],\n ['attachment', attachment],\n ['emoji', emoji],\n ['specialCharacter', specialCharacter],\n ['equation', equation],\n ['table', table],\n // link\n ['unlink', unlink],\n // image\n ['imageBroken', imageBroken],\n ['zoomIn', zoomIn],\n ['zoomOut', zoomOut],\n ['caption', caption],\n // file\n ['file', file],\n // table\n ['tableColumn', tableColumn],\n ['tableRow', tableRow],\n ['tableMerge', tableMerge],\n ['tableSplit', tableSplit],\n // alerts\n ['info', info],\n ['tip', tip],\n ['warning', warning],\n ['danger', danger],\n]);\n","// Returns an array representing a list of the document's elements.\nexport function toNodeList(content: string | Node, valueType?: 'text' | 'html'): Node[] {\n const nodeList: Node[] = [];\n // a node\n if (typeof content !== 'string') {\n nodeList.push(content);\n return nodeList;\n }\n // empty string\n if (content === '') {\n return nodeList;\n }\n // text string\n if (valueType === 'text') {\n const textNode = document.createTextNode(content);\n nodeList.push(textNode);\n return nodeList;\n }\n // HTML string\n if (valueType === 'html' || /<.+>/.test(content)) {\n const container = document.createElement('div');\n container.innerHTML = content;\n for (const child of container.childNodes) {\n nodeList.push(child);\n }\n return nodeList;\n }\n // selector string\n const elements = document.querySelectorAll(content);\n for (const child of elements) {\n nodeList.push(child);\n }\n return nodeList;\n}\n","export const blockTagNames = new Set<string>([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'div',\n 'p',\n 'blockquote',\n 'ul',\n 'ol',\n 'li',\n 'table',\n 'tr',\n 'th',\n 'td',\n]);\n\nexport const markTagNames = new Set<string>([\n 'span',\n 'strong',\n 'em',\n 'i',\n 'u',\n 's',\n 'sup',\n 'sub',\n 'code',\n]);\n\n// https://developer.mozilla.org/en-US/docs/Glossary/Void_element\nexport const voidTagNames = new Set<string>([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nexport const headingTagNames = new Set<string>([\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n]);\n\nexport const listTagNames = new Set<string>([\n 'ol',\n 'ul',\n 'li',\n]);\n\nexport const tableTagNames = new Set<string>([\n 'table',\n 'tr',\n 'td',\n]);\n","// Returns a boolean value indicating whether a certain value is part of a string, separated by a delimiter.\nexport function inString(string: string, value: string, delimiter?: string): boolean {\n if (delimiter === undefined) {\n delimiter = ',';\n }\n return (delimiter + string + delimiter).indexOf(delimiter + value + delimiter) >= 0;\n}\n","// Converts the specified string to camel case.\nexport function camelCase(value: string): string {\n const valueList = value.split('-');\n let camelString = '';\n for (let i = 0; i < valueList.length; i++) {\n const val = valueList[i];\n camelString += (i > 0) ? val.charAt(0).toUpperCase() + val.substring(1) : val;\n }\n return camelString;\n}\n","/**\n * Converts an alpha value to a hex value.\n */\nfunction alphaToHex(value: string): string {\n const hexString = Math.round(Number.parseFloat(value) * 255).toString(16);\n return hexString.length > 1 ? hexString : `0${hexString}`;\n}\n\n/**\n * Converts a decimal to a hex value.\n */\nfunction hex(value: string): string {\n const hexString = Number.parseInt(value, 10).toString(16).toLowerCase();\n return hexString.length > 1 ? hexString : `0${hexString}`;\n}\n\n/**\n * Converts a color in RGB or RGBA format to hex format.\n */\nexport function toHex(value: string): string {\n return value.replace(\n /rgba?\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+)\\s*)?\\)/gi,\n (match, p1, p2, p3, p4) => {\n if (p4 === undefined) {\n return `#${hex(p1)}${hex(p2)}${hex(p3)}`;\n }\n return `#${hex(p1)}${hex(p2)}${hex(p3)}${alphaToHex(p4)}`;\n },\n );\n}\n","import { camelCase } from './camel-case';\nimport { toHex } from './to-hex';\n\n// Returns a property value of all CSS properties of an element.\nexport function getCSS(element: Element, propertyName: string): string {\n const camelPropertyName = camelCase(propertyName);\n const computedStyle = window.getComputedStyle(element, null);\n const propertyValue = element.style[camelPropertyName] || computedStyle.getPropertyValue(propertyName) || '';\n return toHex(propertyValue);\n}\n","/* eslint no-console: \"off\" */\n\n// Outputs a message to the console.\nexport function debug(...data: any[]): void {\n if (window.LAKE_DEBUG) {\n console.log.apply(console.log, data);\n }\n}\n","import { KeyValue } from '../types/object';\nimport { NodePath } from '../types/node';\nimport {\n blockTagNames, markTagNames, voidTagNames,\n headingTagNames, listTagNames, tableTagNames,\n} from '../config/tag-names';\nimport { inString } from '../utils/in-string';\nimport { camelCase } from '../utils/camel-case';\nimport { getCSS } from '../utils/get-css';\nimport { toHex } from '../utils/to-hex';\nimport { toNodeList } from '../utils/to-node-list';\nimport { debug } from '../utils/debug';\n\ninterface EventItem {\n type: string;\n listener: EventListener;\n}\n\n/**\n * A key-value object for storing all events.\n * The value is an array which include types and listeners.\n */\nconst eventData: Record<number, EventItem[]> = {};\n\nlet lastNodeId = 0;\n\n/**\n * The Nodes interface represents a collection of the nodes.\n * It is similar to jQuery, but its implementation is much simpler.\n * Its methods can be considered aliases of native DOM interfaces, designed to simplify DOM manipulation.\n */\nexport class Nodes {\n /**\n * A list of native nodes.\n */\n private readonly nodeList: Node[];\n\n /**\n * The number of nodes in the Nodes object.\n */\n public readonly length: number;\n\n constructor(node?: Node | Node[] | null) {\n node = node ?? [];\n this.nodeList = Array.isArray(node) ? node : [node];\n for (let i = 0; i < this.nodeList.length; i++) {\n // lakeId is an expando for preserving node ID.\n // https://developer.mozilla.org/en-US/docs/Glossary/Expando\n if (!this.nodeList[i].lakeId) {\n this.nodeList[i].lakeId = ++lastNodeId;\n }\n }\n this.length = this.nodeList.length;\n }\n\n /**\n * The unique ID of the first node.\n */\n public get id(): number {\n const node = this.get(0);\n return node.lakeId;\n }\n\n /**\n * The name of the first node.\n */\n public get name(): string {\n if (this.length === 0) {\n return '';\n }\n const node = this.get(0);\n return node.nodeName.toLowerCase();\n }\n\n /**\n * A boolean value indicating whether the first node is an element.\n */\n public get isElement(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0);\n return node.nodeType === Node.ELEMENT_NODE;\n }\n\n /**\n * A boolean value indicating whether the first node is a text.\n */\n public get isText(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0);\n return node.nodeType === Node.TEXT_NODE;\n }\n\n /**\n * A boolean value indicating whether the first node is a block.\n */\n public get isBlock(): boolean {\n if (this.length === 0) {\n return false;\n }\n return blockTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a mark.\n */\n public get isMark(): boolean {\n if (this.length === 0) {\n return false;\n }\n return markTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a void element that cannot have any child nodes.\n */\n public get isVoid(): boolean {\n if (this.length === 0) {\n return false;\n }\n return voidTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a heading.\n */\n public get isHeading(): boolean {\n if (this.length === 0) {\n return false;\n }\n return headingTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a list.\n */\n public get isList(): boolean {\n if (this.length === 0) {\n return false;\n }\n return listTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a table.\n */\n public get isTable(): boolean {\n if (this.length === 0) {\n return false;\n }\n return tableTagNames.has(this.name);\n }\n\n /**\n * A boolean value indicating whether the first node is a bookmark element.\n */\n public get isBookmark(): boolean {\n return this.name === 'lake-bookmark';\n }\n\n /**\n * A boolean value indicating whether the first node is a box element.\n */\n public get isBox(): boolean {\n return this.name === 'lake-box';\n }\n\n /**\n * A boolean value indicating whether the first node is an inline box element.\n */\n public get isInlineBox(): boolean {\n return this.isBox && this.attr('type') === 'inline';\n }\n\n /**\n * A boolean value indicating whether the first node is a block box element.\n */\n public get isBlockBox(): boolean {\n return this.isBox && this.attr('type') === 'block';\n }\n\n /**\n * A boolean value indicating whether the first node is a contenteditable element where users can edit the content.\n */\n public get isContainer(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0) as HTMLElement;\n return this.isElement && node.getAttribute('contenteditable') === 'true';\n }\n\n /**\n * A boolean value indicating whether the first node does not have an ancestor element which contenteditable attribute is true.\n */\n public get isOutside(): boolean {\n return this.closest('[contenteditable=\"true\"]').length === 0;\n }\n\n /**\n * A boolean value indicating whether the first node has an ancestor element which contenteditable attribute is true.\n */\n public get isInside(): boolean {\n return !this.isOutside && !this.isContainer;\n }\n\n /**\n * A boolean value indicating whether the first node's parent element is an element which contenteditable attribute is true.\n */\n public get isTopInside(): boolean {\n if (this.length === 0) {\n return false;\n }\n const parentNode = this.parent();\n if (parentNode.length === 0) {\n return false;\n }\n return this.isInside && parentNode.isContainer;\n }\n\n /**\n * A boolean value indicating whether the first node is editable.\n */\n public get isContentEditable(): boolean {\n if (this.length === 0) {\n return false;\n }\n if (this.isText) {\n const element = this.get(0).parentNode as HTMLElement;\n if (!element) {\n return false;\n }\n return element.isContentEditable;\n }\n if (!this.isElement) {\n return false;\n }\n const element = this.get(0) as HTMLElement;\n return element.isContentEditable;\n }\n\n /**\n * A boolean value indicating whether the first node is indivisible.\n */\n public get isIndivisible(): boolean {\n return this.isContainer || this.isTable;\n }\n\n /**\n * A boolean value indicating whether the first node is empty.\n */\n public get isEmpty(): boolean {\n if (this.isBox) {\n return false;\n }\n const nodeText = this.text();\n const isEmptyText = nodeText === '' || /^[\\r\\n\\u200B\\u2060]+$/.test(nodeText);\n if (!isEmptyText) {\n return false;\n }\n if (this.isElement) {\n if (this.find('lake-box').length > 0) {\n return false;\n }\n if (this.find('br').length > 1) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns a native node at the specified index.\n */\n public get(index: number): Node {\n return this.nodeList[index];\n }\n\n /**\n * Returns all native nodes.\n */\n public getAll(): Node[] {\n return this.nodeList;\n }\n\n /**\n * Returns a new Nodes object that includes only the node at the specified index.\n */\n public eq(index: number): Nodes {\n const node = this.get(index);\n return new Nodes(node);\n }\n\n /**\n * Executes a provided function once for each node.\n */\n public each(callback: (node: Node, index: number) => boolean | void): this {\n const nodes = this.getAll();\n for (let i = 0; i < nodes.length; i++) {\n if (callback(nodes[i], i) === false) {\n return this;\n }\n }\n return this;\n }\n\n /**\n * Executes a provided function once for each element.\n */\n public eachElement(callback: (element: Element, index: number) => boolean | void): this {\n const nodes = this.getAll();\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].nodeType === Node.ELEMENT_NODE) {\n if (callback(nodes[i] as Element, i) === false) {\n return this;\n }\n }\n }\n return this;\n }\n\n /**\n * Returns a new Nodes object with the nodes in reversed order.\n */\n public reverse(): Nodes {\n const nodes = this.getAll().reverse();\n return new Nodes(nodes);\n }\n\n /**\n * Tests whether the first node would be selected by the specified CSS selector.\n */\n public matches(selector: string): boolean {\n if (!this.isElement) {\n return false;\n }\n const element = this.get(0) as Element;\n return element.matches(selector);\n }\n\n /**\n * Returns a boolean value indicating whether the given node is a descendant of the first node,\n * that is the node itself, one of its direct children (childNodes), one of the children's direct children, and so on.\n */\n public contains(otherNode: Nodes): boolean {\n const element = this.get(0) as Element;\n return element.contains(otherNode.get(0));\n }\n\n /**\n * Returns a boolean value indicating whether the first node and a given node are siblings.\n */\n public isSibling(otherNode: Nodes): boolean {\n if (this.length === 0) {\n return false;\n }\n const parent = this.get(0).parentNode as HTMLElement;\n return parent && parent === otherNode.parent().get(0);\n }\n\n /**\n * Returns the descendants of the first node that match the specified CSS selector or node path.\n */\n public find(selector: string | NodePath): Nodes {\n if (typeof selector === 'string') {\n const element = this.get(0) as Element;\n const nodeList = element.querySelectorAll(selector);\n return new Nodes(Array.from(nodeList));\n }\n let node = this.eq(0);\n for (const index of selector) {\n node = node.children()[index];\n if (!node) {\n return new Nodes();\n }\n }\n return node;\n }\n\n /**\n * Traverses the first node and its parents (heading toward the document root) until it finds an element that matches the specified CSS selector.\n */\n public closest(selector: string): Nodes {\n if (this.isText) {\n const element = this.get(0).parentNode;\n if (!element) {\n return new Nodes();\n }\n return new Nodes((element as Element).closest(selector));\n }\n if (!this.isElement) {\n return new Nodes();\n }\n const element = this.get(0) as Element;\n return new Nodes(element.closest(selector));\n }\n\n /**\n * Traverses the first node and its parents until it finds a block element.\n */\n public closestBlock(): Nodes {\n let node = this.eq(0);\n while (node.length > 0) {\n if (node.isTopInside || node.isBlock) {\n break;\n }\n node = node.parent();\n }\n if (!node.isBlock) {\n return new Nodes();\n }\n return node;\n }\n\n /**\n * Traverses the first node and its parents until it finds an operable block.\n */\n public closestOperableBlock(): Nodes {\n const boxNode = this.closest('lake-box');\n const block = boxNode.length > 0 ? boxNode.closestBlock() : this.closestBlock();\n if (block.length === 0) {\n return block;\n }\n if (block.isTable) {\n return new Nodes();\n }\n const parentBlock = block.parent();\n if (block.name === 'li' && parentBlock.isList) {\n return parentBlock;\n }\n return block;\n }\n\n /**\n * Traverses the first node and its parents until it finds a div element which contenteditable attribute is true.\n */\n public closestContainer(): Nodes {\n return this.closest('div[contenteditable=\"true\"]');\n }\n\n /**\n * Traverses the first node and its parents until it finds an element which can scroll.\n */\n public closestScroller(): Nodes {\n let parent = this.eq(0);\n while (parent.length > 0) {\n if (parent.isElement && ['scroll', 'auto'].indexOf(parent.computedCSS('overflow-y')) >= 0) {\n return parent;\n }\n parent = parent.parent();\n }\n return new Nodes();\n }\n\n /**\n * Returns the parent of the first node.\n */\n public parent(): Nodes {\n const node = this.get(0);\n return new Nodes(node.parentNode);\n }\n\n /**\n * Returns the immediately preceding sibling of the first node.\n */\n public prev(): Nodes {\n const node = this.get(0);\n return new Nodes(node.previousSibling);\n }\n\n /**\n * Returns the immediately following sibling of the first node.\n */\n public next(): Nodes {\n const node = this.get(0);\n return new Nodes(node.nextSibling);\n }\n\n /**\n * Returns the first child of the first node.\n */\n public first(): Nodes {\n const element = this.get(0);\n return new Nodes(element.firstChild);\n }\n\n /**\n * Returns the last child of the first node.\n */\n public last(): Nodes {\n const element = this.get(0);\n return new Nodes(element.lastChild);\n }\n\n /**\n * Returns a number indicating the position of the first node relative to its sibling nodes.\n */\n public index(): number {\n let i = -1;\n let sibling: Node | null = this.get(0);\n while (sibling) {\n i++;\n sibling = sibling.previousSibling;\n }\n return i;\n }\n\n /**\n * Returns the path of the first node.\n */\n public path(): NodePath {\n const path: NodePath = [];\n let node = this.eq(0);\n if (node.isContainer) {\n return path;\n }\n while (node.length > 0) {\n const parent = node.parent();\n if (parent.length === 0) {\n break;\n }\n path.push(node.index());\n if (parent.isContainer) {\n break;\n }\n node = parent;\n }\n return path.reverse();\n }\n\n /**\n * Returns a list which contains all of the child nodes of the first node.\n */\n public children(): Nodes[] {\n const childList: Nodes[] = [];\n let child = this.first();\n while (child.length > 0) {\n childList.push(child);\n child = child.next();\n }\n return childList;\n }\n\n /**\n * Returns a generator that iterates over the descendants of the first node.\n */\n public * getWalker(): Generator<Nodes> {\n function * iterate(node: Nodes): Generator<Nodes> {\n if (node.isBox) {\n return;\n }\n let child = node.first();\n while (child.length > 0) {\n const nextNode = child.next();\n yield child;\n yield * iterate(child);\n child = nextNode;\n }\n }\n for (const node of iterate(this.eq(0))) {\n yield node;\n }\n }\n\n /**\n * Sets up an event listener for each element.\n */\n public on(type: string, listener: EventListener): this {\n return this.eachElement(element => {\n element.addEventListener(type, listener, false);\n const elementId = element.lakeId;\n if (!eventData[elementId]) {\n eventData[elementId] = [];\n }\n eventData[elementId].push({\n type,\n listener,\n });\n });\n }\n\n /**\n * Removes event listeners previously registered with on() method.\n */\n public off(type?: string, listener?: EventListener): this {\n return this.eachElement(element => {\n const elementId = element.lakeId;\n const eventItems = eventData[elementId] ?? [];\n for (let i = 0; i < eventItems.length; i++) {\n const item = eventItems[i];\n if (!type || (type === item.type && (!listener || listener === item.listener))) {\n element.removeEventListener(item.type, item.listener, false);\n eventItems[i] = {\n type: '',\n listener: () => {},\n };\n }\n }\n eventData[elementId] = eventItems.filter((item: EventItem) => item.type !== '');\n });\n }\n\n /**\n * Executes all event listeners attached to all nodes for the given event type.\n */\n public emit(type: string, event?: Event): this {\n return this.eachElement(element => {\n const elementId = element.lakeId;\n const eventItems = eventData[elementId];\n for (const item of eventItems) {\n if (item.type === type) {\n item.listener(event ?? new Event(type));\n }\n }\n });\n }\n\n /**\n * Returns all event listeners attached to the node at the specified index.\n */\n public getEventListeners(index: number): EventItem[] {\n const elementId = this.get(index).lakeId;\n return eventData[elementId];\n }\n\n /**\n * Sets focus on the specified node, if it can be focused.\n */\n public focus(): this {\n const element = this.get(0) as HTMLElement;\n element.focus();\n return this;\n }\n\n /**\n * Removes focus from the specified node.\n */\n public blur(): this {\n const element = this.get(0) as HTMLElement;\n element.blur();\n return this;\n }\n\n /**\n * Returns a copy of the first node. If deep is true, the copy also includes the node's descendants.\n */\n public clone(deep = false): Nodes {\n const node = this.get(0);\n return new Nodes(node.cloneNode(deep));\n }\n\n /**\n * Returns a boolean value indicating whether the first node has the specified attribute or not.\n */\n public hasAttr(attributeName: string): boolean {\n const element = this.get(0) as Element;\n return element.hasAttribute(attributeName);\n }\n\n /**\n * Returns the value of the specified attribute from the first node, or sets the values of attributes for all elements.\n */\n public attr(attributeName: string): string;\n\n public attr(attributeName: string, value: string): this;\n\n public attr(attributeName: KeyValue): this;\n\n public attr(attributeName: any, value?: any): any {\n if (typeof attributeName === 'object') {\n for (const name of Object.keys(attributeName)) {\n this.attr(name, attributeName[name]);\n }\n return this;\n }\n if (value === undefined) {\n const element = this.get(0) as Element;\n return element.getAttribute(attributeName) ?? '';\n }\n return this.eachElement(element => {\n element.setAttribute(attributeName, value);\n });\n }\n\n /**\n * Removes the attribute with the specified name from every element.\n */\n public removeAttr(attributeName: string): this {\n return this.eachElement(element => {\n element.removeAttribute(attributeName);\n });\n }\n\n /**\n * Returns a boolean value indicating whether the first node has the specified class or not.\n */\n public hasClass(className: string): boolean {\n const element = this.get(0) as Element;\n return inString(element.className, className, ' ');\n }\n\n /**\n * Adds the given class to every element.\n */\n public addClass(className: string | string[]): this {\n if (Array.isArray(className)) {\n for (const name of className) {\n this.addClass(name);\n }\n return this;\n }\n return this.eachElement(element => {\n if (inString(element.className, className, ' ')) {\n return;\n }\n element.classList.add(className);\n });\n }\n\n /**\n * Removes the given class from every element.\n */\n public removeClass(className: string | string[]): this {\n if (Array.isArray(className)) {\n for (const name of className) {\n this.removeClass(name);\n }\n return this;\n }\n return this.eachElement(element => {\n if (!inString(element.className, className, ' ')) {\n return;\n }\n element.classList.remove(className);\n if (element.className === '') {\n element.removeAttribute('class');\n }\n });\n }\n\n /**\n * Returns the value of the given CSS property of the first node,\n * after applying active stylesheets and resolving any basic computation this value may contain.\n */\n public computedCSS(propertyName: string): string {\n const element = this.get(0) as Element;\n return getCSS(element, propertyName);\n }\n\n /**\n * Returns the value of the given CSS property of the first node, or sets the values of CSS properties for all elements.\n */\n public css(propertyName: string): string;\n\n public css(propertyName: KeyValue): this;\n\n public css(propertyName: string, value: string): this;\n\n public css(propertyName: any, value?: any): any {\n if (typeof propertyName === 'object') {\n for (const name of Object.keys(propertyName)) {\n this.css(name, propertyName[name]);\n }\n return this;\n }\n if (value === undefined) {\n const element = this.get(0) as Element;\n return toHex(element.style[camelCase(propertyName)]);\n }\n return this.eachElement(element => {\n element.style[camelCase(propertyName)] = value;\n if (element.getAttribute('style') === '') {\n element.removeAttribute('style');\n }\n });\n }\n\n /**\n * Returns the width of of the first node.\n */\n public width(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetWidth;\n }\n\n /**\n * Returns the interior width of the first node, which does not include padding.\n */\n public innerWidth(): number {\n const paddingLeft = Number.parseInt(this.computedCSS('padding-left'), 10) || 0;\n const paddingRight = Number.parseInt(this.computedCSS('padding-right'), 10) || 0;\n return this.width() - paddingLeft - paddingRight;\n }\n\n /**\n * Returns the height of of the first node.\n */\n public height(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetHeight;\n }\n\n /**\n * Displays all nodes.\n */\n public show(displayType = 'block'): this {\n this.css('display', displayType);\n return this;\n }\n\n /**\n * Hides all nodes.\n */\n public hide(): this {\n this.css('display', 'none');\n return this;\n }\n\n /**\n * Returns the HTML string contained within the first node, or sets the HTML string for all elements.\n */\n public html(): string;\n\n public html(value: string): this;\n\n public html(value?: any): any {\n if (value === undefined) {\n const element = this.get(0) as Element;\n return element.innerHTML;\n }\n return this.eachElement(element => {\n element.innerHTML = value;\n });\n }\n\n /**\n * Returns the rendered text content of the first node, or sets the rendered text content for all elements.\n */\n public text(): string;\n\n public text(value: string): this;\n\n public text(value?: string): any {\n if (value === undefined) {\n const node = this.get(0);\n if (this.isText) {\n return node.nodeValue ?? '';\n }\n const element = node as HTMLElement;\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/innerText\n return element.innerText.replace(/^\\n+|\\n+$/, '');\n }\n return this.eachElement(element => {\n (element as HTMLElement).innerText = value;\n });\n }\n\n /**\n * Returns the value of the first node, which must be an input element, or sets the value for all input elements.\n */\n public value(): string;\n\n public value(value: string): this;\n\n public value(value?: string): any {\n if (value === undefined) {\n const inputElement = this.get(0) as HTMLInputElement;\n return inputElement.value;\n }\n return this.eachElement(element => {\n (element as HTMLInputElement).value = value;\n });\n }\n\n /**\n * Returns the HTML string describing the first node including its descendants.\n */\n public outerHTML(): string {\n const element = this.get(0) as Element;\n return element.outerHTML;\n }\n\n /**\n * Removes all child nodes for each element.\n */\n public empty(): this {\n this.html('');\n return this;\n }\n\n /**\n * Inserts the specified content just inside the first node, before its first child.\n */\n public prepend(content: string | Node | DocumentFragment | Nodes): this {\n const element = this.get(0);\n if (typeof content === 'string') {\n const list = toNodeList(content as string).reverse();\n for (const node of list) {\n if (element.firstChild) {\n element.insertBefore(node, element.firstChild);\n } else {\n element.appendChild(node);\n }\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n if (element.firstChild) {\n element.insertBefore(content, element.firstChild);\n } else {\n element.appendChild(content);\n }\n return this;\n }\n\n /**\n * Inserts the specified content just inside the first node, after its last child.\n */\n public append(content: string | Node | DocumentFragment | Nodes): this {\n const element = this.get(0);\n if (typeof content === 'string') {\n const list = toNodeList(content as string);\n for (const node of list) {\n element.appendChild(node);\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n element.appendChild(content);\n return this;\n }\n\n /**\n * Inserts the specified content before the first node.\n */\n public before(content: string | Node | DocumentFragment | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n if (typeof content === 'string') {\n const list = toNodeList(content as string);\n for (const target of list) {\n node.parentNode.insertBefore(target, node);\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n node.parentNode.insertBefore(content, node);\n return this;\n }\n\n /**\n * Inserts the specified content after the first node.\n */\n public after(content: string | Node | DocumentFragment | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n if (typeof content === 'string') {\n const list = toNodeList(content as string).reverse();\n for (const target of list) {\n if (node.nextSibling) {\n node.parentNode.insertBefore(target, node.nextSibling);\n } else {\n node.parentNode.appendChild(target);\n }\n }\n return this;\n }\n if (content instanceof Nodes) {\n content = content.get(0);\n }\n if (node.nextSibling) {\n node.parentNode.insertBefore(content, node.nextSibling);\n } else {\n node.parentNode.appendChild(content);\n }\n return this;\n }\n\n /**\n * Replaces the first node with the given new content.\n */\n public replaceWith(newContent: string | Node | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n let target: Node;\n if (newContent instanceof Nodes) {\n target = newContent.get(0);\n } else {\n target = toNodeList(newContent)[0];\n }\n node.parentNode.replaceChild(target, node);\n return this;\n }\n\n /**\n * Removes all nodes from the DOM.\n */\n public remove(keepChildren = false): this {\n this.each(node => {\n if (!node.parentNode) {\n return;\n }\n if (keepChildren) {\n let child = node.firstChild;\n while (child) {\n const next = child.nextSibling;\n node.parentNode.insertBefore(child, node);\n child = next;\n }\n }\n node.parentNode.removeChild(node);\n });\n return this;\n }\n\n /**\n * Splits the first node, which must be a text node, into two nodes at the specified offset, keeping both as siblings in the tree.\n */\n public splitText(offset: number): Nodes {\n if (!this.isText) {\n return new Nodes();\n }\n const node = this.get(0) as Text;\n const newNode = node.splitText(offset);\n return new Nodes(newNode);\n }\n\n /**\n * Returns information about the first node, which is used for debugging.\n */\n public toString(): string {\n if (this.length === 0) {\n return '';\n }\n const node = this.get(0);\n let nodeValue = this.isText ? node.nodeValue : this.outerHTML();\n if (nodeValue && nodeValue.length > 50) {\n nodeValue = `${nodeValue.substring(0, 50)} ...`;\n }\n return `node (${node.lakeId}): ${nodeValue}`;\n }\n\n /**\n * Prints information about the first node, which is used for debugging.\n */\n public info(): void {\n debug(this.toString());\n }\n}\n","import { toNodeList } from './to-node-list';\nimport { Nodes } from '../models/nodes';\n\n/**\n * Returns a Nodes object representing a collection of the nodes.\n * This function is similar to jQuery, but its implementation is very simple.\n * It is designed for simplifying DOM manipulation.\n */\nexport function query(content: string | Node | Nodes): Nodes {\n if (content instanceof Nodes) {\n return content;\n }\n const nodes = toNodeList(content);\n return new Nodes(nodes);\n}\n","const characterMap = new Map([\n ['&', '&'],\n ['<', '<'],\n ['>', '>'],\n ['\"', '"'],\n ['\\xA0', ' '],\n]);\n\n// Converts all of the reserved characters in the specified string to HTML entities.\nexport function encode(value: string): string {\n return value.replace(/[&<>\"\\xA0]/g, match => characterMap.get(match) ?? '');\n}\n","import { encode } from './encode';\n\n/**\n * A tag function that converts all of the reserved characters in the specified string to HTML entities.\n * It also removes empty spaces at the beginning and end of lines.\n */\nexport function template(strings: TemplateStringsArray, ...keys: any[]): string {\n let content = strings[0];\n for (let i = 0; i < keys.length; i++) {\n const key = String(keys[i]);\n // Escape special characters in the substitution.\n content += encode(key);\n // Don't escape special characters in the template.\n content += strings[i + 1];\n }\n content = content\n .replace(/^\\s+/gm, '')\n .replace(/\\s+$/gm, '')\n .replace(/[\\r\\n]/g, '');\n return content;\n}\n","import type { Box } from '../models/box';\n\nconst boxInstances = new Map<number, Map<number, Box>>();\n\nexport function getInstanceMap(id: number): Map<number, Box> {\n let instanceMap = boxInstances.get(id);\n if (!instanceMap) {\n instanceMap = new Map();\n boxInstances.set(id, instanceMap);\n return instanceMap;\n }\n return instanceMap;\n}\n","import type { BoxComponent } from '../types/box';\n\nexport const boxes = new Map<string, BoxComponent>();\n","import type { Editor } from '../editor';\n\nexport const editors = new Map<number, Editor>();\n","// Creates a Base64-encoded ASCII string from a string.\nexport function toBase64(value: string): string {\n const encoder = new TextEncoder();\n const byteArray = encoder.encode(value);\n let binaryString = '';\n byteArray.forEach(byte => {\n binaryString += String.fromCharCode(byte);\n });\n return window.btoa(binaryString);\n}\n","// Decodes a string of data which has been encoded using Base64 encoding.\nexport function fromBase64(value: string): string {\n const binaryString = window.atob(value);\n const byteArray = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n byteArray[i] = binaryString.charCodeAt(i);\n }\n const decoder = new TextDecoder();\n return decoder.decode(byteArray);\n}\n","import { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// -1: the edge of the target node or range extends beyond the left or top edge of the viewport and is not visible\n// 0: the edge of the target node or range is within the viewport and is visible\n// 1: the edge of the target node or range extends beyond the right or bottom edge of the viewport and is not visible\ntype VisibleType = -1 | 0 | 1;\n\nexport function visibleInfo(target: Nodes | Range): {\n left: VisibleType;\n right: VisibleType;\n top: VisibleType;\n bottom: VisibleType;\n} {\n let rect: DOMRect;\n let viewport: Nodes;\n if (target instanceof Nodes) {\n const nativeNode = target.get(0) as Element;\n rect = nativeNode.getBoundingClientRect();\n viewport = target.closestScroller();\n } else {\n rect = target.get().getBoundingClientRect();\n viewport = target.commonAncestor.closestScroller();\n }\n let left = rect.left;\n let right = rect.right;\n let top = rect.top;\n let bottom = rect.bottom;\n let viewportWidth = window.innerWidth;\n let viewportHeight = window.innerHeight;\n if (viewport.length > 0) {\n const nativeViewport = viewport.get(0) as Element;\n const viewportRect = nativeViewport.getBoundingClientRect();\n const offsetLeft = viewportRect.x;\n const offsetTop = viewportRect.y;\n left -= offsetLeft;\n right -= offsetLeft;\n top -= offsetTop;\n bottom -= offsetTop;\n viewportWidth = viewportRect.width;\n viewportHeight = viewportRect.height;\n }\n let leftEdge: VisibleType = 0;\n if (left < 0) {\n leftEdge = -1;\n } else if (viewportWidth - left < 0) {\n leftEdge = 1;\n }\n let rightEdge: VisibleType = 0;\n if (right < 0) {\n rightEdge = -1;\n } else if (viewportWidth - right < 0) {\n rightEdge = 1;\n }\n let topEdge: VisibleType = 0;\n if (top < 0) {\n topEdge = -1;\n } else if (viewportHeight - top < 0) {\n topEdge = 1;\n }\n let bottomEdge: VisibleType = 0;\n if (bottom < 0) {\n bottomEdge = -1;\n } else if (viewportHeight - bottom < 0) {\n bottomEdge = 1;\n }\n return {\n left: leftEdge,\n right: rightEdge,\n top: topEdge,\n bottom: bottomEdge,\n };\n}\n","import { NativeRange } from '../types/native';\nimport { debug } from '../utils/debug';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\n/**\n * The Range interface represents a fragment of a document that can contain nodes and parts of text nodes.\n * Its interface is similar to the native Range, with some additional properties and methods specifically designed for more efficient manipulation.\n */\nexport class Range {\n /**\n * A native Range object.\n */\n private readonly range: NativeRange;\n\n constructor(range?: NativeRange) {\n this.range = range ?? document.createRange();\n }\n\n /**\n * A node within which the range starts.\n */\n public get startNode(): Nodes {\n return new Nodes(this.range.startContainer);\n }\n\n /**\n * A number representing where in the startNode the range starts.\n */\n public get startOffset(): number {\n return this.range.startOffset;\n }\n\n /**\n * A node within which the range ends.\n */\n public get endNode(): Nodes {\n return new Nodes(this.range.endContainer);\n }\n\n /**\n * A number representing where in the endNode the range ends.\n */\n public get endOffset(): number {\n return this.range.endOffset;\n }\n\n /**\n * The deepest — or furthest down the document tree — node that contains both boundary points of the range.\n */\n public get commonAncestor(): Nodes {\n return new Nodes(this.range.commonAncestorContainer);\n }\n\n /**\n * A boolean value indicating whether the range's start and end points are at the same position.\n */\n public get isCollapsed(): boolean {\n return this.range.collapsed;\n }\n\n /**\n * A boolean value indicating whether the range's start point is in a box.\n */\n public get isBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n return boxNode.length > 0;\n }\n\n /**\n * A boolean value indicating whether the commonAncestor is in the start position of a box.\n */\n // case 1: <lake-box><span class=\"lake-box-strip\">|</span><div class=\"lake-box-container\"></div> ...\n // case 2: <lake-box><span class=\"lake-box-strip\"></span>|<div class=\"lake-box-container\"></div> ...\n // case 3: <lake-box>|<span class=\"lake-box-strip\"></span><div class=\"lake-box-container\"></div> ...\n public get isBoxStart(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n return this.compareBeforeNode(boxContainer) >= 0;\n }\n\n /**\n * A boolean value indicating whether the commonAncestor is in the center position of a box.\n */\n // case 1: ... <div class=\"lake-box-container\"><div>|</div></div> ...\n // case 2: ... <div class=\"lake-box-container\"><div></div>|</div> ...\n public get isBoxCenter(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n // Returns true when the box was selected.\n // case: ... <div class=\"lake-box-container\">|<div></div></div> ...\n return this.isCollapsed && this.startNode.get(0) === boxContainer.get(0) && this.startOffset === 0;\n }\n\n /**\n * A boolean value indicating whether commonAncestor is in the end position of a box.\n */\n // case 1: ... <div class=\"lake-box-container\"></div><span class=\"lake-box-strip\">|</span></lake-box>\n // case 2: ... <div class=\"lake-box-container\"></div>|<span class=\"lake-box-strip\"></span></lake-box>\n // case 3: ... <div class=\"lake-box-container\"></div><span class=\"lake-box-strip\"></span>|</lake-box>\n public get isBoxEnd(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n return this.compareAfterNode(boxContainer) <= 0;\n }\n\n /**\n * A boolean value indicating whether commonAncestor is inside the container of a box.\n */\n // case 1: ... <div class=\"lake-box-container\"><div>|</div></div> ...\n // case 2: ... <div class=\"lake-box-container\"><div></div>|</div> ...\n public get isInsideBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return false;\n }\n const boxContainer = boxNode.find('.lake-box-container');\n // Returns false when the box was selected.\n // case: ... <div class=\"lake-box-container\">|<div></div></div> ...\n if (\n this.isCollapsed\n && this.startNode.get(0) === boxContainer.get(0)\n && this.startOffset === 0\n ) {\n return false;\n }\n return this.compareBeforeNode(boxContainer) < 0 && this.compareAfterNode(boxContainer) > 0;\n }\n\n /**\n * A boolean value indicating whether the range is inoperative.\n */\n public get isInoperative(): boolean {\n if (this.commonAncestor.isOutside) {\n return true;\n }\n const startBlock = this.startNode.closest('td');\n const endBlock = this.endNode.closest('td');\n if (\n startBlock.length > 0\n && endBlock.length > 0\n && startBlock.get(0) !== endBlock.get(0)\n ) {\n return true;\n }\n return false;\n }\n\n /**\n * Returns a native Range object from the range.\n */\n public get(): NativeRange {\n return this.range;\n }\n\n /**\n * Returns the size and position of the range.\n */\n public getRect(): DOMRect {\n const range = this.clone();\n let rect;\n let x;\n let width;\n if (range.isCollapsed) {\n let reference = 'left';\n if (range.startNode.isElement) {\n const children = range.startNode.children();\n if (children.length === 0) {\n range.selectNode(range.startNode);\n } else if (range.startOffset < children.length) {\n range.setEnd(range.startNode, range.startOffset + 1);\n } else {\n range.setStart(range.startNode, range.startOffset - 1);\n reference = 'right';\n }\n } else if (range.startNode.isText) {\n const text = range.startNode.text();\n if (range.startOffset < text.length) {\n range.setEnd(range.startNode, range.startOffset + 1);\n } else if (range.startOffset > 0) {\n range.setStart(range.startNode, range.startOffset - 1);\n reference = 'right';\n }\n }\n rect = range.get().getBoundingClientRect();\n if (reference === 'left') {\n x = rect.x;\n } else {\n x = rect.right;\n }\n width = 1;\n } else {\n rect = range.get().getBoundingClientRect();\n x = rect.x;\n width = rect.width;\n }\n const height = rect.height;\n return DOMRect.fromRect({\n x,\n y: height > 0 ? rect.y : 0,\n width: width > 0 ? width : 1,\n height: height > 0 ? height : 1,\n });\n }\n\n /**\n * Returns -1, 0, or 1 depending on whether the specified node is before, the same as, or after the range.\n * −1 if the point is before the range. 0 if the point is in the range. 1 if the point is after the range.\n */\n public comparePoint(node: Nodes, offset: number): number {\n return this.range.comparePoint(node.get(0), offset);\n }\n\n /**\n * Returns -1, 0, or 1 depending on whether the beginning of the specified node is before, the same as, or after the range.\n * −1 if the beginning of the node is before the range. 0 if the beginning of the node is in the range. 1 if the beginning of the node is after the range.\n */\n public compareBeforeNode(node: Nodes): number {\n const targetRange = new Range();\n if (node.isText) {\n targetRange.setStart(node, 0);\n } else {\n targetRange.setStartBefore(node);\n }\n targetRange.collapseToStart();\n return this.comparePoint(targetRange.startNode, targetRange.startOffset);\n }\n\n /**\n * Returns -1, 0, or 1 depending on whether the end of the specified node is before, the same as, or after the range.\n * −1 if the end of the node is before the range. 0 if the end of the node is in the range. 1 if the end of the node is after the range.\n */\n public compareAfterNode(node: Nodes): number {\n const targetRange = new Range();\n if (node.isText) {\n const nodeValue = node.get(0).nodeValue ?? '';\n targetRange.setStart(node, nodeValue.length);\n } else {\n targetRange.setStartAfter(node);\n }\n targetRange.collapseToStart();\n return this.comparePoint(targetRange.startNode, targetRange.startOffset);\n }\n\n /**\n * Returns a boolean value indicating whether the specified node is part of the range or intersects the range.\n */\n public intersectsNode(node: Nodes): boolean {\n return this.range.intersectsNode(node.get(0));\n }\n\n /**\n * Sets the start position of the range.\n */\n public setStart(node: Nodes, offset: number): void {\n this.range.setStart(node.get(0), offset);\n }\n\n /**\n * Sets the start position of the range to the beginning of the specified node.\n */\n public setStartBefore(node: Nodes): void {\n this.range.setStartBefore(node.get(0));\n }\n\n /**\n * Sets the start position of the range to the end of the specified node.\n */\n public setStartAfter(node: Nodes): void {\n this.range.setStartAfter(node.get(0));\n }\n\n /**\n * Sets the end position of the range.\n */\n public setEnd(node: Nodes, offset: number): void {\n this.range.setEnd(node.get(0), offset);\n }\n\n /**\n * Sets the end position of the range to the beginning of the specified node.\n */\n public setEndBefore(node: Nodes): void {\n this.range.setEndBefore(node.get(0));\n }\n\n /**\n * Sets the end position of the range to the end of the specified node.\n */\n public setEndAfter(node: Nodes): void {\n this.range.setEndAfter(node.get(0));\n }\n\n /**\n * Collapses the range to its start.\n */\n public collapseToStart(): void {\n this.range.collapse(true);\n }\n\n /**\n * Collapses the range to its end.\n */\n public collapseToEnd(): void {\n this.range.collapse(false);\n }\n\n /**\n * Sets the range to contain the specified node and its contents.\n */\n public selectNode(node: Nodes): void {\n this.range.selectNode(node.get(0));\n }\n\n /**\n * Sets the range to contain the contents of the specified node.\n */\n public selectNodeContents(node: Nodes): void {\n this.range.selectNodeContents(node.get(0));\n }\n\n /**\n * Collapses the range to the center position of the specified box.\n */\n public selectBox(boxNode: Nodes): void {\n const boxContainer = boxNode.find('.lake-box-container');\n if (boxContainer.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n /**\n * Collapses the range to the start position of the specified box.\n */\n public selectBoxStart(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n /**\n * Collapses the range to the end position of the specified box.\n */\n public selectBoxEnd(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n /**\n * Collapses the range to the deepest point at the beginning of the contents of the specified node.\n */\n public shrinkBefore(node: Nodes): void {\n if (node.isBox) {\n this.selectBoxStart(node);\n return;\n }\n if (node.isText) {\n this.setStartBefore(node);\n this.collapseToStart();\n return;\n }\n this.setStart(node, 0);\n let child;\n while (\n this.startNode.isElement\n && (child = this.startNode.children()[0])\n && child.isElement && !child.isVoid\n ) {\n if (child.isBox) {\n this.selectBoxStart(child);\n return;\n }\n this.setStart(child, 0);\n }\n this.collapseToStart();\n }\n\n /**\n * Collapses the range to the deepest point at the end of the contents of the specified node.\n */\n public shrinkAfter(node: Nodes): void {\n if (node.isBox) {\n this.selectBoxEnd(node);\n return;\n }\n if (node.isText) {\n this.setEndAfter(node);\n this.collapseToEnd();\n return;\n }\n this.setEnd(node, node.children().length);\n let child;\n while (\n this.endNode.isElement\n && this.endOffset > 0\n && (child = this.endNode.children()[this.endOffset - 1])\n && child.isElement && !child.isVoid\n ) {\n if (child.isBox) {\n this.selectBoxEnd(child);\n return;\n }\n this.setEnd(child, child.children().length);\n }\n this.collapseToEnd();\n this.adjustBr();\n }\n\n /**\n * Sets the start and end positions of the range to the deepest start position and end position of the contents of the specified node.\n */\n // <div>[<p><strong>foo</strong></p>]</div>\n // to\n // <div><p><strong>[foo]</strong></p></div>\n public shrink(): void {\n const isCollapsed = this.isCollapsed;\n let child;\n while (\n this.startNode.isElement\n && (child = this.startNode.children()[this.startOffset])\n && child.isElement && !child.isVoid && !child.isBox\n ) {\n this.setStart(child, 0);\n }\n if (isCollapsed) {\n this.collapseToStart();\n return;\n }\n while (\n this.endNode.isElement\n && this.endOffset > 0\n && (child = this.endNode.children()[this.endOffset - 1])\n && child.isElement && !child.isVoid && !child.isBox\n ) {\n this.setEnd(child, child.children().length);\n }\n }\n\n /**\n * Relocates the start and end positions of the range for boxes.\n */\n public adjustBox(): void {\n const startBoxNode = this.startNode.closest('lake-box');\n if (startBoxNode.length > 0) {\n const startRange = this.clone();\n startRange.collapseToStart();\n if (startRange.isBoxEnd) {\n this.setStartAfter(startBoxNode);\n } else {\n this.setStartBefore(startBoxNode);\n }\n }\n const endBoxNode = this.endNode.closest('lake-box');\n if (endBoxNode.length > 0) {\n const endRange = this.clone();\n endRange.collapseToEnd();\n if (endRange.isBoxStart) {\n this.setEndBefore(endBoxNode);\n } else {\n this.setEndAfter(endBoxNode);\n }\n }\n }\n\n /**\n * Relocates the start and end positions of the range for tables.\n */\n public adjustTable(): void {\n const startTable = this.startNode.closest('table');\n const endTable = this.endNode.closest('table');\n if (startTable.length === 0 && endTable.length > 0 && endTable.isInside) {\n this.setEndBefore(endTable);\n this.shrink();\n return;\n }\n if (endTable.length === 0 && startTable.length > 0 && startTable.isInside) {\n this.setStartAfter(startTable);\n this.shrink();\n }\n }\n\n /**\n * Relocates the start and end positions of the range for blocks.\n */\n // case 1:\n // <p>foo</p>|<p>bar</p>\n // to\n // <p>foo</p><p>|bar</p>\n // case 2:\n // [<p>foo</p>]<p>bar</p>\n // to\n // <p>[foo]</p><p>bar</p>\n // case 3:\n // [<p>foo</p><p>]bar</p>\n // to\n // <p>[foo]</p><p>bar</p>\n public adjustBlock(): void {\n if (!this.isCollapsed) {\n // [<p>foo</p><p>]bar</p> to [<p>foo</p>]<p>bar</p>\n if (this.endNode.isElement && this.endOffset === 0) {\n let node = this.endNode;\n while (node.prev().length === 0) {\n node = node.parent();\n }\n this.setEndBefore(node);\n }\n this.shrink();\n return;\n }\n if (this.startNode.isText) {\n return;\n }\n const nextBlock = this.startNode.children()[this.startOffset];\n if (nextBlock && (nextBlock.isBlockBox || nextBlock.isBlock)) {\n this.shrinkBefore(nextBlock);\n }\n }\n\n /**\n * Relocates the start and end positions of the range for boxes, tables, and blocks.\n */\n public adjust(): void {\n this.adjustBox();\n this.adjustTable();\n this.adjustBlock();\n }\n\n /**\n * Relocates the start and end positions of the range for <br /> elements.\n */\n // In composition mode (e.g., when a user starts entering a Chinese character using a Pinyin IME),\n // uncompleted text is inserted if the cursor is positioned behind a <br> tag.\n // To fix this bug, the cursor needs to be moved to the front of the <br> tag.\n public adjustBr(): void {\n if (!this.isCollapsed) {\n return;\n }\n const prevNode = this.getPrevNode();\n const nextNode = this.getNextNode();\n if (prevNode.name === 'br' && nextNode.length === 0) {\n this.setStartBefore(prevNode);\n this.collapseToStart();\n }\n }\n\n /**\n * Returns the node immediately preceding the start position of the range.\n */\n public getPrevNode(): Nodes {\n let prevNode;\n if (this.startNode.isText) {\n if (this.startOffset === 0) {\n prevNode = this.startNode.prev();\n } else {\n prevNode = this.startNode;\n }\n } else {\n prevNode = this.startNode.children()[this.startOffset - 1];\n }\n return prevNode ?? new Nodes();\n }\n\n /**\n * Returns the node immediately following the end position of the range.\n */\n public getNextNode(): Nodes {\n let nextNode;\n if (this.endNode.isText) {\n if (this.endOffset === this.endNode.text().length) {\n nextNode = this.endNode.next();\n } else {\n nextNode = this.endNode;\n }\n } else {\n nextNode = this.endNode.children()[this.endOffset];\n }\n return nextNode ?? new Nodes();\n }\n\n /**\n * Returns the boxes contained within or intersected by the range.\n */\n public getBoxes(): Nodes[] {\n if (this.isCollapsed) {\n const startBox = this.startNode.closest('lake-box');\n return startBox.length > 0 ? [startBox] : [];\n }\n const nodeList: Nodes[] = [];\n const clonedRange = this.clone();\n clonedRange.adjustBox();\n for (const child of clonedRange.commonAncestor.getWalker()) {\n if (child.isBox && clonedRange.intersectsNode(child)) {\n nodeList.push(child);\n }\n }\n return nodeList;\n }\n\n /**\n * Returns the blocks contained within or intersected by the range.\n */\n public getBlocks(): Nodes[] {\n if (this.isCollapsed) {\n const startBlock = this.startNode.closestOperableBlock();\n if (startBlock.isTable) {\n return [];\n }\n return startBlock.isInside ? [startBlock] : [];\n }\n const startBlock = this.startNode.closestOperableBlock();\n const endBlock = this.endNode.closestOperableBlock();\n if (\n startBlock.isInside\n && startBlock.get(0)\n && startBlock.get(0) === endBlock.get(0)\n ) {\n return startBlock.isTable ? [] : [startBlock];\n }\n const blocks: Nodes[] = [];\n const clonedRange = this.clone();\n clonedRange.collapseToEnd();\n for (const child of this.commonAncestor.getWalker()) {\n if (\n child.isBlock && !child.isTable && child.isTopInside\n // The range doesn't end at the start of a block.\n && clonedRange.comparePoint(child, 0) !== 0\n && this.intersectsNode(child)\n ) {\n blocks.push(child);\n }\n }\n if (blocks.length > 0) {\n return blocks;\n }\n for (const child of this.commonAncestor.getWalker()) {\n if (\n child.isBlock && !child.isTable\n && (startBlock.isSibling(child) || endBlock.isSibling(child))\n && this.intersectsNode(child)) {\n blocks.push(child);\n }\n }\n return blocks;\n }\n\n /**\n * Returns the marks and text nodes contained within or intersected by the range.\n */\n public getMarks(hasText = false): Nodes[] {\n const marks: Nodes[] = [];\n if (this.commonAncestor.isText && hasText) {\n if (\n this.startOffset === 0\n && this.endOffset === this.commonAncestor.text().length\n ) {\n marks.push(this.commonAncestor);\n return marks;\n }\n }\n const stratRange = this.clone();\n stratRange.collapseToStart();\n const endRange = this.clone();\n endRange.collapseToEnd();\n for (const node of this.commonAncestor.getWalker()) {\n const targetRange = document.createRange();\n targetRange.setStartAfter(node.get(0));\n targetRange.collapse(true);\n if (endRange.compareBeforeNode(node) >= 0) {\n break;\n }\n if (stratRange.compareAfterNode(node) > 0) {\n if (node.isMark) {\n marks.push(node);\n } else if (node.isText && hasText) {\n marks.push(node);\n }\n }\n }\n return marks;\n }\n\n /**\n * Returns the text from the start position of the closest block to the start position of the range.\n */\n // \"<p>one<anchor />two<focus />three</p>\" returns \"one\".\n public getStartText(): string {\n const node = this.startNode;\n const offset = this.startOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const startRange = new Range();\n startRange.setStartBefore(block);\n startRange.setEnd(node, offset);\n const container = query('<div />');\n container.append(startRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n /**\n * Returns the text from the end position of the range to the end position of the closest block.\n */\n // \"<p>one<anchor />two<focus />three</p>\" returns \"three\".\n public getEndText(): string {\n const node = this.endNode;\n const offset = this.endOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const endRange = new Range();\n endRange.setStart(node, offset);\n endRange.setEndAfter(block);\n const container = query('<div />');\n container.append(endRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n /**\n * Returns a new range from the specified character to the start position of the range.\n * The specified character must be preceded by a whitespace or be at the beginning of a paragraph,\n * without being adjacent to other characters. It will return null if not.\n */\n public getCharacterRange(character: string): Range | null {\n const newRange = this.clone();\n newRange.shrink();\n if (newRange.startOffset === 0) {\n return null;\n }\n if (newRange.startNode.isElement) {\n const textNode = newRange.startNode.children()[newRange.startOffset - 1];\n if (!textNode.isText) {\n return null;\n }\n newRange.setEnd(textNode, textNode.text().length);\n newRange.collapseToEnd();\n }\n const textNode = newRange.startNode;\n const text = textNode.text().slice(0, newRange.startOffset);\n const lastIndexOfNormalSpace = text.lastIndexOf(` ${character}`);\n const lastIndexOfNoBreakSpace = text.lastIndexOf(`\\xA0${character}`);\n const lastIndexOfZeroWidthSpace = text.lastIndexOf(`\\u200B${character}`);\n if (lastIndexOfNormalSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNormalSpace + 1);\n } else if (lastIndexOfNoBreakSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNoBreakSpace + 1);\n } else if (lastIndexOfZeroWidthSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfZeroWidthSpace + 1);\n } else if (text.indexOf(character) === 0) {\n newRange.setStart(textNode, 0);\n } else {\n return null;\n }\n return newRange;\n }\n\n /**\n * Returns a copy of the range.\n */\n public clone(): Range {\n return new Range(this.range.cloneRange());\n }\n\n /**\n * Returns a DocumentFragment object copying the nodes included in the range.\n */\n public cloneContents(): DocumentFragment {\n return this.range.cloneContents();\n }\n\n /**\n * Prints information about the range, which is used for debugging.\n */\n public info(): void {\n debug('--- range information ---');\n debug('start node:', this.startNode.toString(), ', offset:', this.startOffset);\n debug('end node:', this.endNode.toString(), ', offset:', this.endOffset);\n }\n}\n","import { DropdownMenuItem } from '../types/dropdown';\nimport { icons } from '../icons';\n\nexport const headingMenuItems: DropdownMenuItem[] = [\n {\n value: 'h1',\n text: locale => `<span style=\"font-weight: bold; font-size: 26px;\">${locale.toolbar.heading1()}</span>`,\n },\n {\n value: 'h2',\n text: locale => `<span style=\"font-weight: bold; font-size: 24px;\">${locale.toolbar.heading2()}</span>`,\n },\n {\n value: 'h3',\n text: locale => `<span style=\"font-weight: bold; font-size: 22px;\">${locale.toolbar.heading3()}</span>`,\n },\n {\n value: 'h4',\n text: locale => `<span style=\"font-weight: bold; font-size: 20px;\">${locale.toolbar.heading4()}</span>`,\n },\n {\n value: 'h5',\n text: locale => `<span style=\"font-weight: bold; font-size: 18px;\">${locale.toolbar.heading5()}</span>`,\n },\n {\n value: 'h6',\n text: locale => `<span style=\"font-weight: bold; font-size: 16px;\">${locale.toolbar.heading6()}</span>`,\n },\n {\n value: 'p',\n text: locale => locale.toolbar.paragraph(),\n },\n];\n\nexport const listMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('numberedList'),\n value: 'numbered',\n text: locale => locale.toolbar.numberedList(),\n },\n {\n icon: icons.get('bulletedList'),\n value: 'bulleted',\n text: locale => locale.toolbar.bulletedList(),\n },\n {\n icon: icons.get('checklist'),\n value: 'checklist',\n text: locale => locale.toolbar.checklist(),\n },\n];\n\nexport const alignMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('alignLeft'),\n value: 'left',\n text: locale => locale.toolbar.alignLeft(),\n },\n {\n icon: icons.get('alignCenter'),\n value: 'center',\n text: locale => locale.toolbar.alignCenter(),\n },\n {\n icon: icons.get('alignRight'),\n value: 'right',\n text: locale => locale.toolbar.alignRight(),\n },\n {\n icon: icons.get('alignJustify'),\n value: 'justify',\n text: locale => locale.toolbar.alignJustify(),\n },\n];\n\nexport const indentMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('increaseIndent'),\n value: 'increase',\n text: locale => locale.toolbar.increaseIndent(),\n },\n {\n icon: icons.get('decreaseIndent'),\n value: 'decrease',\n text: locale => locale.toolbar.decreaseIndent(),\n },\n];\n\nexport const fontFamilyMenuItems: DropdownMenuItem[] = [\n {\n value: 'Arial',\n text: '<span style=\"font-family: Arial;\">Arial</span>',\n },\n {\n value: 'Arial Black',\n text: '<span style=\"font-family: \\'Arial Black\\';\">Arial Black</span>',\n },\n {\n value: 'Comic Sans MS',\n text: '<span style=\"font-family: \\'Comic Sans MS\\';\">Comic Sans MS</span>',\n },\n {\n value: 'Courier New',\n text: '<span style=\"font-family: \\'Courier New\\';\">Courier New</span>',\n },\n {\n value: 'Georgia',\n text: '<span style=\"font-family: Georgia;\">Georgia</span>',\n },\n {\n value: 'Helvetica',\n text: '<span style=\"font-family: Helvetica;\">Helvetica</span>',\n },\n {\n value: 'Impact',\n text: '<span style=\"font-family: Impact;\">Impact</span>',\n },\n {\n value: 'Segoe UI',\n text: '<span style=\"font-family: \\'Segoe UI\\';\">Segoe UI</span>',\n },\n {\n value: 'Tahoma',\n text: '<span style=\"font-family: Tahoma;\">Tahoma</span>',\n },\n {\n value: 'Times New Roman',\n text: '<span style=\"font-family: \\'Times New Roman\\';\">Times New Roman</span>',\n },\n {\n value: 'Trebuchet MS',\n text: '<span style=\"font-family: \\'Trebuchet MS\\';\">Trebuchet MS</span>',\n },\n {\n value: 'Verdana',\n text: '<span style=\"font-family: Verdana;\">Verdana</span>',\n },\n];\n\nexport const fontSizeMenuItems: DropdownMenuItem[] = [\n {\n value: '12px',\n text: '12px',\n },\n {\n value: '14px',\n text: '14px',\n },\n {\n value: '16px',\n text: '16px',\n },\n {\n value: '18px',\n text: '18px',\n },\n {\n value: '22px',\n text: '22px',\n },\n {\n value: '24px',\n text: '24px',\n },\n {\n value: '32px',\n text: '32px',\n },\n];\n\nexport const moreStyleMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('italic'),\n value: 'italic',\n text: locale => locale.toolbar.italic(),\n },\n {\n icon: icons.get('underline'),\n value: 'underline',\n text: locale => locale.toolbar.underline(),\n },\n {\n icon: icons.get('strikethrough'),\n value: 'strikethrough',\n text: locale => locale.toolbar.strikethrough(),\n },\n {\n icon: icons.get('superscript'),\n value: 'superscript',\n text: locale => locale.toolbar.superscript(),\n },\n {\n icon: icons.get('subscript'),\n value: 'subscript',\n text: locale => locale.toolbar.subscript(),\n },\n {\n icon: icons.get('code'),\n value: 'code',\n text: locale => locale.toolbar.code(),\n },\n];\n\n// These colors are sourced from Ant Design (https://ant.design/docs/spec/colors)\nconst colors: string[] = [\n // Dust Red, Volcano, Sunset Orange, Calendula Gold, Sunrise Yellow, Lime, Polar Green, Cyan, Daybreak Blue, Geek Blue, Golden Purple, Magenta\n '#f5222d', '#fa541c', '#fa8c16', '#faad14', '#fadb14', '#a0d911', '#52c41a', '#13c2c2', '#1677ff', '#2f54eb', '#722ed1', '#eb2f96', // color 6\n '#fff1f0', '#fff2e8', '#fff7e6', '#fffbe6', '#feffe6', '#fcffe6', '#f6ffed', '#e6fffb', '#e6f4ff', '#f0f5ff', '#f9f0ff', '#fff0f6', // color 1\n '#ffccc7', '#ffd8bf', '#ffe7ba', '#fff1b8', '#ffffb8', '#f4ffb8', '#d9f7be', '#b5f5ec', '#bae0ff', '#d6e4ff', '#efdbff', '#ffd6e7', // color 2\n '#ffa39e', '#ffbb96', '#ffd591', '#ffe58f', '#fffb8f', '#eaff8f', '#b7eb8f', '#87e8de', '#91caff', '#adc6ff', '#d3adf7', '#ffadd2', // color 3\n '#ff7875', '#ff9c6e', '#ffc069', '#ffd666', '#fff566', '#d3f261', '#95de64', '#5cdbd3', '#69b1ff', '#85a5ff', '#b37feb', '#ff85c0', // color 4\n '#ff4d4f', '#ff7a45', '#ffa940', '#ffc53d', '#ffec3d', '#bae637', '#73d13d', '#36cfc9', '#4096ff', '#597ef7', '#9254de', '#f759ab', // color 5\n '#cf1322', '#d4380d', '#d46b08', '#d48806', '#d4b106', '#7cb305', '#389e0d', '#08979c', '#0958d9', '#1d39c4', '#531dab', '#c41d7f', // color 7\n '#a8071a', '#ad2102', '#ad4e00', '#ad6800', '#ad8b00', '#5b8c00', '#237804', '#006d75', '#003eb3', '#10239e', '#391085', '#9e1068', // color 8\n '#820014', '#871400', '#873800', '#874d00', '#876800', '#3f6600', '#135200', '#00474f', '#002c8c', '#061178', '#22075e', '#780650', // color 9\n '#5c0011', '#610b00', '#612500', '#613400', '#614700', '#254000', '#092b00', '#002329', '#001d66', '#030852', '#120338', '#520339', // color 10\n // from gray-1 to gray-11, and gray-13\n '#000000', '#1f1f1f', '#262626', '#434343', '#595959', '#8c8c8c', '#bfbfbf', '#d9d9d9', '#f0f0f0', '#f5f5f5', '#fafafa', '#ffffff', // Neutral Color\n];\nexport const colorMenuItems: DropdownMenuItem[] = [\n {\n icon: icons.get('removeFormat'),\n value: '',\n text: locale => locale.toolbar.removeColor(),\n },\n];\nfor (const color of colors) {\n colorMenuItems.push({\n value: color.toLowerCase(),\n text: color.toUpperCase(),\n });\n}\n","import { ToolbarItem } from '../types/toolbar';\nimport { icons } from '../icons';\nimport {\n headingMenuItems,\n listMenuItems,\n alignMenuItems,\n indentMenuItems,\n fontFamilyMenuItems,\n fontSizeMenuItems,\n moreStyleMenuItems,\n colorMenuItems,\n} from './menu-items';\n\nconst tagPluginNameMap = new Map<string, string>([\n ['strong', 'bold'],\n ['em', 'italic'],\n ['i', 'italic'],\n ['u', 'underline'],\n ['s', 'strikethrough'],\n ['sup', 'superscript'],\n ['sub', 'subscript'],\n ['code', 'code'],\n]);\n\nexport const toolbarItems: ToolbarItem[] = [\n {\n name: 'undo',\n type: 'button',\n icon: icons.get('undo'),\n tooltip: locale => locale.toolbar.undo(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'redo',\n type: 'button',\n icon: icons.get('redo'),\n tooltip: locale => locale.toolbar.redo(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'selectAll',\n type: 'button',\n icon: icons.get('selectAll'),\n tooltip: locale => locale.toolbar.selectAll(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n tooltip: locale => locale.toolbar.paragraph(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'p'),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n tooltip: locale => locale.toolbar.blockQuote(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n tooltip: locale => locale.toolbar.numberedList(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ol'),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n tooltip: locale => locale.toolbar.bulletedList(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ul' && !item.node.hasAttr('type')),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n tooltip: locale => locale.toolbar.checklist(),\n isSelected: activeItems => !!activeItems.find(item => item.name === 'ul' && item.node.attr('type') === 'checklist'),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'alignLeft',\n type: 'button',\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.toolbar.alignLeft(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'left'),\n onClick: editor => {\n editor.command.execute('align', 'left');\n },\n },\n {\n name: 'alignCenter',\n type: 'button',\n icon: icons.get('alignCenter'),\n tooltip: locale => locale.toolbar.alignCenter(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'center'),\n onClick: editor => {\n editor.command.execute('align', 'center');\n },\n },\n {\n name: 'alignRight',\n type: 'button',\n icon: icons.get('alignRight'),\n tooltip: locale => locale.toolbar.alignRight(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'right'),\n onClick: editor => {\n editor.command.execute('align', 'right');\n },\n },\n {\n name: 'alignJustify',\n type: 'button',\n icon: icons.get('alignJustify'),\n tooltip: locale => locale.toolbar.alignJustify(),\n isSelected: activeItems => !!activeItems.find(item => item.node.isBlock && item.node.css('text-align') === 'justify'),\n onClick: editor => {\n editor.command.execute('align', 'justify');\n },\n },\n {\n name: 'increaseIndent',\n type: 'button',\n icon: icons.get('increaseIndent'),\n tooltip: locale => locale.toolbar.increaseIndent(),\n onClick: editor => {\n editor.command.execute('indent', 'increase');\n },\n },\n {\n name: 'decreaseIndent',\n type: 'button',\n icon: icons.get('decreaseIndent'),\n tooltip: locale => locale.toolbar.decreaseIndent(),\n onClick: editor => {\n editor.command.execute('indent', 'decrease');\n },\n },\n {\n name: 'bold',\n type: 'button',\n icon: icons.get('bold'),\n tooltip: locale => locale.toolbar.bold(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'italic',\n type: 'button',\n icon: icons.get('italic'),\n tooltip: locale => locale.toolbar.italic(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'underline',\n type: 'button',\n icon: icons.get('underline'),\n tooltip: locale => locale.toolbar.underline(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'strikethrough',\n type: 'button',\n icon: icons.get('strikethrough'),\n tooltip: locale => locale.toolbar.strikethrough(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'superscript',\n type: 'button',\n icon: icons.get('superscript'),\n tooltip: locale => locale.toolbar.superscript(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'subscript',\n type: 'button',\n icon: icons.get('subscript'),\n tooltip: locale => locale.toolbar.subscript(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'code',\n type: 'button',\n icon: icons.get('code'),\n tooltip: locale => locale.toolbar.code(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'removeFormat',\n type: 'button',\n icon: icons.get('removeFormat'),\n tooltip: locale => locale.toolbar.removeFormat(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'formatPainter',\n type: 'button',\n icon: icons.get('formatPainter'),\n tooltip: locale => locale.toolbar.formatPainter(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'link',\n type: 'button',\n icon: icons.get('link'),\n tooltip: locale => locale.toolbar.link(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n tooltip: locale => locale.toolbar.hr(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n tooltip: locale => locale.toolbar.codeBlock(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n tooltip: locale => locale.toolbar.video(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n tooltip: locale => locale.toolbar.equation(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'heading',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: 'p',\n tooltip: locale => locale.toolbar.heading(),\n width: '100px',\n menuType: 'list',\n menuItems: headingMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('heading', value);\n },\n },\n {\n name: 'list',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('list'),\n tooltip: locale => locale.toolbar.list(),\n menuType: 'list',\n menuItems: listMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('list', value);\n },\n },\n {\n name: 'table',\n type: 'button',\n icon: icons.get('table'),\n tooltip: locale => locale.toolbar.table(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'align',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.toolbar.align(),\n menuType: 'list',\n menuItems: alignMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('align', value);\n },\n },\n {\n name: 'indent',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('increaseIndent'),\n tooltip: locale => locale.toolbar.indent(),\n menuType: 'list',\n menuItems: indentMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('indent', value);\n },\n },\n {\n name: 'fontFamily',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: 'Segoe UI',\n tooltip: locale => locale.toolbar.fontFamily(),\n width: '100px',\n menuType: 'list',\n menuItems: fontFamilyMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('fontFamily', value);\n },\n },\n {\n name: 'fontSize',\n type: 'dropdown',\n downIcon: icons.get('down'),\n defaultValue: '16px',\n tooltip: locale => locale.toolbar.fontSize(),\n width: '65px',\n menuType: 'list',\n menuItems: fontSizeMenuItems,\n onSelect: (editor, value) => {\n editor.command.execute('fontSize', value);\n },\n },\n {\n name: 'moreStyle',\n type: 'dropdown',\n icon: icons.get('more'),\n tooltip: locale => locale.toolbar.moreStyle(),\n menuType: 'list',\n menuItems: moreStyleMenuItems,\n selectedValues: activeItems => {\n const currentValues = [];\n for (const item of activeItems) {\n if (item.node.isMark) {\n const name = tagPluginNameMap.get(item.name) ?? item.name;\n currentValues.push(name);\n }\n }\n return currentValues;\n },\n onSelect: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'fontColor',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('fontColor'),\n accentIcon: icons.get('fontColorAccent'),\n defaultValue: '#f5222d',\n tooltip: locale => locale.toolbar.fontColor(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n onSelect: (editor, value) => {\n editor.command.execute('fontColor', value);\n },\n },\n {\n name: 'highlight',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('highlight'),\n accentIcon: icons.get('highlightAccent'),\n defaultValue: '#fadb14',\n tooltip: locale => locale.toolbar.highlight(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n onSelect: (editor, value) => {\n editor.command.execute('highlight', value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n tooltip: locale => locale.toolbar.image(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n tooltip: locale => locale.toolbar.file(),\n accept: '*',\n multiple: true,\n },\n];\n","/*\nThe MIT License (MIT)\n\nCopyright (c) 2016-present react-component\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\nOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nRepository: https://github.com/react-component/upload\n*/\n\nimport { UploadRequestError, UploadRequestOption } from '../types/request';\n\nfunction getError(option: UploadRequestOption, xhr: XMLHttpRequest): UploadRequestError {\n const msg = `Cannot ${option.method} ${option.action} ${xhr.status}'`;\n const err = new Error(msg) as UploadRequestError;\n err.status = xhr.status;\n err.method = option.method;\n err.url = option.action;\n return err;\n}\n\nfunction getBody(xhr: XMLHttpRequest): any {\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n// Sends a request to the server.\nexport function request(option: UploadRequestOption): XMLHttpRequest {\n const xhr = new XMLHttpRequest();\n\n if (option.onProgress && xhr.upload) {\n xhr.upload.onprogress = e => {\n if (e.total > 0) {\n e.percent = (e.loaded / e.total) * 100;\n }\n if (option.onProgress) {\n option.onProgress(e);\n }\n };\n }\n\n const formData = new FormData();\n\n const data = option.data || {};\n Object.keys(data).forEach(key => {\n const value = data[key];\n // support key-value array data\n if (Array.isArray(value)) {\n value.forEach(item => {\n // { list: [ 11, 22 ] }\n // formData.append('list[]', 11);\n formData.append(`${key}[]`, item);\n });\n return;\n }\n\n formData.append(key, value as string | Blob);\n });\n\n if (option.file) {\n const filename = option.filename || 'file';\n if (option.file instanceof Blob) {\n formData.append(filename, option.file, (option.file as any).name);\n } else {\n formData.append(filename, option.file);\n }\n }\n\n xhr.onerror = e => {\n if (option.onError) {\n option.onError(e);\n }\n };\n\n xhr.onload = () => {\n // allow success when 2xx status\n // see https://github.com/react-component/upload/issues/34\n if (xhr.status < 200 || xhr.status >= 300) {\n if (!option.onError) {\n return;\n }\n return option.onError(getError(option, xhr), getBody(xhr));\n }\n if (!option.onSuccess) {\n return;\n }\n return option.onSuccess(getBody(xhr), xhr);\n };\n\n xhr.open(option.method, option.action, true);\n\n // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n const headers = option.headers || {};\n\n // when set headers['X-Requested-With'] = null , can close default XHR header\n // see https://github.com/react-component/upload/issues/33\n if (headers['X-Requested-With'] !== null) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n Object.keys(headers).forEach(h => {\n if (headers[h] !== null) {\n xhr.setRequestHeader(h, headers[h]);\n }\n });\n\n xhr.send(formData);\n\n return xhr;\n}\n","import type { Editor } from '../editor';\nimport { debug } from '../utils/debug';\nimport { request } from '../utils/request';\nimport { Box } from '../models/box';\n\ninterface UploadConfig {\n editor: Editor;\n name: string;\n file: File;\n onError?: (error: string) => void;\n onSuccess?: () => void;\n}\n\n// Uploads a file to the server.\nexport function uploadFile(config: UploadConfig): Box {\n const { editor, name, file, onError, onSuccess } = config;\n const { requestMethod, requestAction, requestTypes } = editor.config[name];\n if (requestTypes.indexOf(file.type) < 0) {\n if (onError) {\n onError(`File \"${file.name}\" is not allowed for uploading.`);\n }\n throw new Error(`Cannot upload file \"${file.name}\" because its type \"${file.type}\" is not found in ['${requestTypes.join('\\', \\'')}'].`);\n }\n const box = editor.selection.insertBox(name, {\n url: URL.createObjectURL(file),\n status: 'uploading',\n name: file.name,\n size: file.size,\n type: file.type,\n lastModified: file.lastModified,\n });\n let xhr: XMLHttpRequest | null = request({\n onProgress: e => {\n const percentNode = box.node.find('.lake-percent');\n const percent = Math.round(e.percent);\n percentNode.text(`${percent < 100 ? percent : 99} %`);\n },\n onError: (error, body) => {\n xhr = null;\n debug(error.toString(), body);\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError(error.toString());\n }\n },\n onSuccess: body => {\n xhr = null;\n if (!body.url) {\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError('Cannot find the url field.');\n }\n return;\n }\n box.updateValue({\n status: 'done',\n url: body.url,\n });\n box.render();\n editor.history.save();\n if (onSuccess) {\n onSuccess();\n }\n },\n file,\n action: requestAction,\n method: requestMethod,\n });\n box.event.on('beforeunmount', () => {\n if (xhr) {\n xhr.abort();\n debug('Upload canceled');\n }\n });\n return box;\n}\n","import { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\n\ninterface ButtonConfig {\n root: string | Node | Nodes;\n name: string;\n type?: 'primary' | 'default';\n icon?: string;\n text?: string;\n tooltip?: string;\n tabIndex?: number;\n onClick: () => void;\n}\n\n/**\n * The Button interface represents a clickable UI component. When a user clicks the button, a specified action is executed.\n */\nexport class Button {\n private readonly config: ButtonConfig;\n\n private readonly root: Nodes;\n\n /**\n * The button element.\n */\n public readonly node: Nodes;\n\n constructor(config: ButtonConfig) {\n this.config = config;\n this.root = query(config.root);\n this.node = query(template`\n <button type=\"button\" name=\"${config.name}\" class=\"lake-button\" />\n `);\n if (config.type) {\n this.node.addClass(`lake-${config.type}-button`);\n }\n if (config.tabIndex !== undefined) {\n this.node.attr('tabindex', config.tabIndex.toString());\n }\n }\n\n /**\n * Renders the button to the DOM.\n */\n public render(): void {\n const config = this.config;\n const buttonNode = this.node;\n buttonNode.addClass(`lake-${config.text ? 'text' : 'icon'}-button`);\n if (config.tooltip) {\n buttonNode.attr('title', config.tooltip);\n }\n if (config.icon) {\n buttonNode.append(config.icon);\n }\n if (config.text) {\n buttonNode.append(`<span>${config.text}</span>`);\n }\n this.root.append(buttonNode);\n this.root.get(0).appendChild(buttonNode.get(0));\n buttonNode.on('mouseenter', () => {\n if (buttonNode.attr('disabled')) {\n return;\n }\n if (buttonNode.hasClass('lake-button-selected')) {\n return;\n }\n buttonNode.addClass('lake-button-hovered');\n });\n buttonNode.on('mouseleave', () => {\n if (buttonNode.attr('disabled')) {\n return;\n }\n buttonNode.removeClass('lake-button-hovered');\n });\n buttonNode.on('click', event => {\n event.preventDefault();\n config.onClick();\n });\n }\n}\n","// The unsafeTemplate function is a tag function for removing whitespace or line terminator character.\nexport function unsafeTemplate(strings: TemplateStringsArray, ...keys: any[]): string {\n let content = strings[0];\n for (let i = 0; i < keys.length; i++) {\n const key = String(keys[i]);\n content += key;\n content += strings[i + 1];\n }\n content = content\n .replace(/^\\s+/gm, '')\n .replace(/\\s+$/gm, '')\n .replace(/[\\r\\n]/g, '');\n return content;\n}\n","// Returns the text of keyboard shortcuts used for a tooltip or help.\n// Mac: mod+Z returns ⌘+Z\n// Windows / Linux: mod+Z returns Ctrl+Z\nexport function modifierText(value: string, userAgent?: string): string {\n // for generating i18n files\n if (typeof window === 'undefined') {\n return value;\n }\n userAgent = userAgent ?? navigator.userAgent;\n const isMac = userAgent.indexOf('Mac OS X') >= 0;\n const modText = isMac ? '⌘' : 'Ctrl';\n return value.replace(/(^|\\+|\\s)mod(\\+|\\s|$)/g, `$1${modText}$2`);\n}\n","import type { BaseTranslation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `Undo (${modifierText('mod+Z')})`,\n redo: `Redo (${modifierText('mod+Y')})`,\n selectAll: `Select all (${modifierText('mod+A')})`,\n paragraph: 'Paragraph',\n blockQuote: 'Block quotation',\n numberedList: 'Numbered list',\n bulletedList: 'Bulleted list',\n checklist: 'Checklist',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n alignJustify: 'Justify',\n increaseIndent: 'Increase indent',\n decreaseIndent: 'Decrease indent',\n bold: `Bold (${modifierText('mod+B')})`,\n italic: `Italic (${modifierText('mod+I')})`,\n underline: `Underline (${modifierText('mod+U')})`,\n strikethrough: 'Strikethrough',\n superscript: 'Superscript',\n subscript: 'Subscript',\n code: 'Inline code',\n removeFormat: 'Remove format',\n formatPainter: 'Format painter',\n link: 'Link',\n hr: 'Horizontal line',\n video: 'Video',\n codeBlock: 'Code block',\n heading: 'Heading',\n heading1: 'Heading 1',\n heading2: 'Heading 2',\n heading3: 'Heading 3',\n heading4: 'Heading 4',\n heading5: 'Heading 5',\n heading6: 'Heading 6',\n list: 'List',\n table: 'Table',\n align: 'Alignment',\n indent: 'Indent',\n fontFamily: 'Font family',\n fontSize: 'Font size',\n moreStyle: 'More style',\n fontColor: 'Font color',\n highlight: 'Highlight',\n image: 'Image',\n file: 'File',\n emoji: 'Emoji',\n equation: 'Mathematical formula',\n removeColor: 'Remove color',\n },\n slash: {\n heading1: 'Heading 1',\n heading1Desc: 'Create a heading level 1',\n heading2: 'Heading 2',\n heading2Desc: 'Create a heading level 2',\n heading3: 'Heading 3',\n heading3Desc: 'Create a heading level 3',\n heading4: 'Heading 4',\n heading4Desc: 'Create a heading level 4',\n heading5: 'Heading 5',\n heading5Desc: 'Create a heading level 5',\n heading6: 'Heading 6',\n heading6Desc: 'Create a heading level 6',\n paragraph: 'Paragraph',\n paragraphDesc: 'Create a paragraph',\n blockQuote: 'Block quotation',\n blockQuoteDesc: 'Create a block quotation',\n numberedList: 'Numbered list',\n numberedListDesc: 'Create a numbered list',\n bulletedList: 'Bulleted list',\n bulletedListDesc: 'Create a bulleted list',\n checklist: 'Checklist',\n checklistDesc: 'Create a checklist',\n table: 'Table',\n tableDesc: 'Insert a table',\n infoAlert: 'Info alert',\n infoAlertDesc: 'Create an info alert',\n tipAlert: 'Tip alert',\n tipAlertDesc: 'Create a tip alert',\n warningAlert: 'Warning alert',\n warningAlertDesc: 'Create a warning alert',\n dangerAlert: 'Danger alert',\n dangerAlertDesc: 'Create a danger alert',\n hr: 'Horizontal line',\n hrDesc: 'Insert a horizontal line',\n codeBlock: 'Code block',\n codeBlockDesc: 'Insert a code block',\n video: 'Video',\n videoDesc: 'Insert a video from YouTube',\n equation: 'Mathematical formula',\n equationDesc: 'Insert a TeX expression',\n image: 'Image',\n imageDesc: 'Upload an image',\n file: 'File',\n fileDesc: 'Upload a file',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: 'Text to display',\n copy: 'Copy link to clipboard',\n open: 'Open link in new tab',\n save: 'Save',\n unlink: 'Remove link',\n },\n table: {\n fitTable: 'Fit table to page width',\n cellBackground: 'Cell background color',\n column: 'Column',\n insertColumnLeft: 'Insert column left',\n insertColumnRight: 'Insert column right',\n deleteColumn: 'Delete column',\n row: 'Row',\n insertRowAbove: 'Insert row above',\n insertRowBelow: 'Insert row below',\n deleteRow: 'Delete row',\n merge: 'Merge cells',\n mergeUp: 'Merge cell up',\n mergeRight: 'Merge cell right',\n mergeDown: 'Merge cell down',\n mergeLeft: 'Merge cell left',\n split: 'Split cell',\n splitLeftRight: 'Split cell left and right',\n splitTopBottom: 'Split cell top and bottom',\n remove: 'Remove table',\n },\n image: {\n view: 'Full screen',\n remove: 'Delete',\n previous: 'Previous',\n next: 'Next',\n close: 'Close (Esc)',\n loadingError: 'Unable to load image.',\n zoomOut: 'Zoom out',\n zoomIn: 'Zoom in',\n align: 'Alignment',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n resize: 'Resize image',\n pageWidth: 'Page width',\n originalWidth: 'Original image width',\n imageWidth: '{0} image width',\n open: 'Open image in new tab',\n caption: 'Caption',\n captionPlaceholder: 'Write a caption...',\n },\n file: {\n download: 'Download',\n remove: 'Delete',\n },\n video: {\n embed: 'Embed video',\n remove: 'Delete',\n description: 'Paste a link to embed a video from YouTube.',\n url: 'Link',\n urlError: 'Please enter a valid link.',\n },\n codeBlock: {\n langType: 'Select language',\n },\n equation: {\n save: 'Done',\n help: 'Supported functions',\n placeholder: 'Type a TeX expression...',\n },\n} satisfies BaseTranslation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `撤消 (${modifierText('mod+Z')})`,\n redo: `重做 (${modifierText('mod+Y')})`,\n selectAll: `全选 (${modifierText('mod+A')})`,\n paragraph: '正文',\n blockQuote: '引用',\n numberedList: '编号',\n bulletedList: '项目符号',\n checklist: '任务列表',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n alignJustify: '两端对齐',\n increaseIndent: '增加缩进',\n decreaseIndent: '减少缩进',\n bold: `粗体 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下划线 (${modifierText('mod+U')})`,\n strikethrough: '删除线',\n superscript: '上标',\n subscript: '下标',\n code: '行内代码',\n removeFormat: '清除格式',\n formatPainter: '格式刷',\n link: '链接',\n hr: '分割线',\n video: '视频',\n codeBlock: '代码块',\n heading: '标题',\n heading1: '标题 1',\n heading2: '标题 2',\n heading3: '标题 3',\n heading4: '标题 4',\n heading5: '标题 5',\n heading6: '标题 6',\n list: '列表',\n table: '表格',\n align: '对齐方式',\n indent: '缩进',\n fontFamily: '字体',\n fontSize: '文字大小',\n moreStyle: '更多样式',\n fontColor: '文字颜色',\n highlight: '文字背景',\n image: '图片',\n file: '文件',\n emoji: '表情',\n equation: '数学公式',\n removeColor: '默认',\n },\n slash: {\n heading1: '标题 1',\n heading1Desc: '创建标题 1',\n heading2: '标题 2',\n heading2Desc: '创建标题 2',\n heading3: '标题 3',\n heading3Desc: '创建标题 3',\n heading4: '标题 4',\n heading4Desc: '创建标题 4',\n heading5: '标题 5',\n heading5Desc: '创建标题 5',\n heading6: '标题 6',\n heading6Desc: '创建标题 6',\n paragraph: '正文',\n paragraphDesc: '把当前段落改成正文',\n blockQuote: '引用',\n blockQuoteDesc: '创建引用',\n numberedList: '编号',\n numberedListDesc: '创建编号列表',\n bulletedList: '项目符号',\n bulletedListDesc: '创建项目符号列表',\n checklist: '任务列表',\n checklistDesc: '创建任务列表',\n table: '表格',\n tableDesc: '插入表格',\n infoAlert: '信息块',\n infoAlertDesc: '创建信息块',\n tipAlert: '提示块',\n tipAlertDesc: '创建提示块',\n warningAlert: '警告块',\n warningAlertDesc: '创建警告块',\n dangerAlert: '危险警告块',\n dangerAlertDesc: '创建危险警告块',\n hr: '分割线',\n hrDesc: '插入分割线',\n codeBlock: '代码块',\n codeBlockDesc: '插入代码块',\n video: '视频',\n videoDesc: '插入 YouTube 视频',\n equation: '数学公式',\n equationDesc: '支持 TeX 语法',\n image: '图片',\n imageDesc: '上传图片',\n file: '文件',\n fileDesc: '上传文件',\n },\n link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n table: {\n fitTable: '自适应宽度',\n cellBackground: '单元格背景颜色',\n column: '列',\n insertColumnLeft: '左侧插入列',\n insertColumnRight: '右侧插入列',\n deleteColumn: '删除列',\n row: '行',\n insertRowAbove: '上方插入行',\n insertRowBelow: '下方插入行',\n deleteRow: '删除行',\n merge: '合并单元格',\n mergeUp: '向上合并单元格',\n mergeRight: '向右合并单元格',\n mergeDown: '向下合并单元格',\n mergeLeft: '向左合并单元格',\n split: '拆分单元格',\n splitLeftRight: '左右拆分单元格',\n splitTopBottom: '上下拆分单元格',\n remove: '删除表格',\n },\n image: {\n view: '查看大图',\n remove: '删除',\n previous: '上一张',\n next: '下一张',\n close: '关闭 (Esc)',\n loadingError: '图片加载失败',\n zoomOut: '缩小',\n zoomIn: '放大',\n align: '对齐方式',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n resize: '调整图片大小',\n pageWidth: '图片适应页面大小',\n originalWidth: '图片原始大小',\n imageWidth: '{0} 图片大小',\n open: '在新标签页中打开图片',\n caption: '图片描述',\n captionPlaceholder: '请输入图片描述',\n },\n file: {\n download: '下载',\n remove: '删除',\n },\n video: {\n embed: '嵌入视频',\n remove: '删除',\n description: '在下面的输入框里,粘贴 YouTube 链接。',\n url: '链接',\n urlError: '请输入有效的链接。',\n },\n codeBlock: {\n langType: '选择代码语言',\n },\n equation: {\n save: '确定',\n help: '支持的功能',\n placeholder: '请输入 TeX 表达式',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `元に戻す (${modifierText('mod+Z')})`,\n redo: `やり直し (${modifierText('mod+Y')})`,\n selectAll: `すべて選択 (${modifierText('mod+A')})`,\n paragraph: '本文',\n blockQuote: '引用',\n numberedList: '番号付きリスト',\n bulletedList: '箇条書きリスト',\n checklist: 'チェックリスト',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n alignJustify: '両端揃え',\n increaseIndent: 'インデントを増やす',\n decreaseIndent: 'インデントを減らす',\n bold: `太字 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下線 (${modifierText('mod+U')})`,\n strikethrough: '取り消し線',\n superscript: '上付き文字',\n subscript: '下付き文字',\n code: 'インラインコード',\n removeFormat: '形式を削除',\n formatPainter: '形式ペインタ',\n link: 'リンク',\n hr: '区切り線',\n video: '動画',\n codeBlock: 'コードブロック',\n heading: '見出し',\n heading1: '見出し 1',\n heading2: '見出し 2',\n heading3: '見出し 3',\n heading4: '見出し 4',\n heading5: '見出し 5',\n heading6: '見出し 6',\n list: 'リスト',\n table: 'テーブル',\n align: '整列',\n indent: 'インデント',\n fontFamily: 'フォント',\n fontSize: 'フォントサイズ',\n moreStyle: 'その他のスタイル',\n fontColor: '文字色',\n highlight: 'ハイライト',\n image: '画像',\n file: 'ファイル',\n emoji: '絵文字',\n equation: '数式',\n removeColor: 'デフォルト',\n },\n slash: {\n heading1: '見出し 1',\n heading1Desc: 'レベル 1 の見出しを作成',\n heading2: '見出し 2',\n heading2Desc: 'レベル 2 の見出しを作成',\n heading3: '見出し 3',\n heading3Desc: 'レベル 3 の見出しを作成',\n heading4: '見出し 4',\n heading4Desc: 'レベル 4 の見出しを作成',\n heading5: '見出し 5',\n heading5Desc: 'レベル 5 の見出しを作成',\n heading6: '見出し 6',\n heading6Desc: 'レベル 6 の見出しを作成',\n paragraph: '本文',\n paragraphDesc: '段落を作成',\n blockQuote: '引用',\n blockQuoteDesc: '引用を作成',\n numberedList: '番号付きリスト',\n numberedListDesc: '番号付きリストを作成',\n bulletedList: '箇条書きリスト',\n bulletedListDesc: '箇条書きリストを作成',\n checklist: 'チェックリスト',\n checklistDesc: 'チェックリストを作成',\n table: 'テーブル',\n tableDesc: 'テーブルを挿入',\n infoAlert: '情報ブロック',\n infoAlertDesc: '情報ブロックを作成',\n tipAlert: 'ヒントブロック',\n tipAlertDesc: 'ヒントブロックを作成',\n warningAlert: '警告ブロック',\n warningAlertDesc: '警告ブロックを作成',\n dangerAlert: '危険ブロック',\n dangerAlertDesc: '危険ブロックを作成',\n hr: '区切り線',\n hrDesc: '水平線を挿入',\n codeBlock: 'コードブロック',\n codeBlockDesc: 'コードブロックを挿入',\n video: '動画',\n videoDesc: 'YouTube から動画を挿入',\n equation: '数式',\n equationDesc: 'TeX 数式を挿入',\n image: '画像',\n imageDesc: '画像をアップロード',\n file: 'ファイル',\n fileDesc: 'ファイルをアップロード',\n },\n link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンクテキスト',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '保存',\n unlink: 'リンクを削除',\n },\n table: {\n fitTable: 'ページ幅に合わせる',\n cellBackground: 'セルの背景色',\n column: '列',\n insertColumnLeft: '左に列を挿入',\n insertColumnRight: '右に列を挿入',\n deleteColumn: '列を削除',\n row: '行',\n insertRowAbove: '上に行を挿入',\n insertRowBelow: '下に行を挿入',\n deleteRow: '行を削除',\n merge: 'セルを結合',\n mergeUp: '上方向にセルを結合',\n mergeRight: '右方向にセルを結合',\n mergeDown: '下方向にセルを結合',\n mergeLeft: '左方向にセルを結合',\n split: 'セルを分割',\n splitLeftRight: 'セルを左右に分割',\n splitTopBottom: 'セルを上下に分割',\n remove: 'テーブルを削除',\n },\n image: {\n view: '大きな画像を見る',\n remove: '削除',\n previous: '前の画像',\n next: '次の画像',\n close: '閉じる (Esc)',\n loadingError: '画像を読み込めません',\n zoomOut: '縮小',\n zoomIn: '拡大',\n align: '整列',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n resize: '画像サイズを調整',\n pageWidth: 'ページ幅',\n originalWidth: '画像の元のサイズ',\n imageWidth: '{0} 画像サイズ',\n open: '新しいタブで画像を開く',\n caption: 'キャプション',\n captionPlaceholder: 'キャプションを入力してください',\n },\n file: {\n download: 'ダウンロード',\n remove: '削除',\n },\n video: {\n embed: '動画を埋め込む',\n remove: '削除',\n description: '下の入力欄に YouTube リンクを貼り付けてください。',\n url: 'リンク',\n urlError: '有効なリンクを入力してください。',\n },\n codeBlock: {\n langType: 'コード言語を選択',\n },\n equation: {\n save: '保存',\n help: 'サポートされている機能',\n placeholder: 'TeX 数式を入力してください',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `작업취소 (${modifierText('mod+Z')})`,\n redo: `다시 실행 (${modifierText('mod+Y')})`,\n selectAll: `전체 선택 (${modifierText('mod+A')})`,\n paragraph: '텍스트',\n blockQuote: '인용문',\n numberedList: '순서 목록',\n bulletedList: '비순서 목록',\n checklist: '체크리스트',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n alignJustify: '좌우로 정렬',\n increaseIndent: '들여쓰기 증가',\n decreaseIndent: '들여쓰기 줄이기',\n bold: `굵게 (${modifierText('mod+B')})`,\n italic: `기울임꼴 (${modifierText('mod+I')})`,\n underline: `밑줄 (${modifierText('mod+U')})`,\n strikethrough: '취소선',\n superscript: '위첨자',\n subscript: '아래 첨자',\n code: '인라인 코드',\n removeFormat: '형식 지우기',\n formatPainter: '형식 복사기',\n link: '링크',\n hr: '구분선',\n video: '동영상',\n codeBlock: '코드 블록',\n heading: '제목',\n heading1: '제목 1',\n heading2: '제목 2',\n heading3: '제목 3',\n heading4: '제목 4',\n heading5: '제목 5',\n heading6: '제목 6',\n list: '목록',\n table: '표',\n align: '정렬',\n indent: '들여쓰기',\n fontFamily: '글꼴',\n fontSize: '글자 크기',\n moreStyle: '더 많은 스타일',\n fontColor: '글자 색상',\n highlight: '글자 배경',\n image: '이미지',\n file: '파일',\n emoji: '이모지',\n equation: '수학 공식',\n removeColor: '기본 색상',\n },\n slash: {\n heading1: '제목 1',\n heading1Desc: '1 단계 제목을 작성',\n heading2: '제목 2',\n heading2Desc: '2 단계 제목을 작성',\n heading3: '제목 3',\n heading3Desc: '3 단계 제목을 작성',\n heading4: '제목 4',\n heading4Desc: '4 단계 제목을 작성',\n heading5: '제목 5',\n heading5Desc: '5 단계 제목을 작성',\n heading6: '제목 6',\n heading6Desc: '6 단계 제목을 작성',\n paragraph: '텍스트',\n paragraphDesc: '단락을 작성',\n blockQuote: '인용문',\n blockQuoteDesc: '인용문을 작성',\n numberedList: '순서 목록',\n numberedListDesc: '순서 목록을 작성',\n bulletedList: '비순서 목록',\n bulletedListDesc: '비순서 목록을 작성',\n checklist: '체크리스트',\n checklistDesc: '체크리스트를 작성',\n table: '표',\n tableDesc: '표를 삽입',\n infoAlert: '정보 블록',\n infoAlertDesc: '정보 블록을 작성',\n tipAlert: '팁 블록',\n tipAlertDesc: '팁 블록을 작성',\n warningAlert: '경고 블록',\n warningAlertDesc: '경고 블록을 작성',\n dangerAlert: '위험 블록',\n dangerAlertDesc: '위험 블록을 작성',\n hr: '구분선',\n hrDesc: '구분선을 삽입',\n codeBlock: '코드 블록',\n codeBlockDesc: '코드 블록을 삽입',\n video: '동영상',\n videoDesc: '유튜브 동영상을 삽입',\n equation: '수학 공식',\n equationDesc: 'TeX 수식을 삽입',\n image: '이미지',\n imageDesc: '이미지를 업로드',\n file: '파일',\n fileDesc: '파일을 업로드',\n },\n link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '저장',\n unlink: '링크 제거',\n },\n table: {\n fitTable: '페이지 너비에 맞게 조정',\n cellBackground: '셀 배경 색상',\n column: '열',\n insertColumnLeft: '왼쪽에 열을 삽입',\n insertColumnRight: '오른쪽에 열을 삽입',\n deleteColumn: '열을 삭제',\n row: '행',\n insertRowAbove: '위에 행을 삽입',\n insertRowBelow: '아래에 행을 삽입',\n deleteRow: '행을 삭제',\n merge: '셀을 병합',\n mergeUp: '위쪽으로 셀을 병합',\n mergeRight: '오른쪽으로 셀을 병합',\n mergeDown: '아래쪽으로 셀을 병합',\n mergeLeft: '왼쪽으로 셀을 병합',\n split: '셀을 분할',\n splitLeftRight: '셀을 좌우로 분할',\n splitTopBottom: '셀을 상하로 분할',\n remove: '표를 삭제',\n },\n image: {\n view: '큰 이미지 보기',\n remove: '삭제',\n previous: '이전 이미지',\n next: '다음 이미지',\n close: '닫기 (Esc)',\n loadingError: '이미지를 로드할 수 없습니다',\n zoomOut: '축소',\n zoomIn: '확대',\n align: '정렬',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n resize: '이미지 크기 조정',\n pageWidth: '페이지 너비',\n originalWidth: '원본 이미지 크기',\n imageWidth: '{0} 이미지 크기',\n open: '새 탭에서 이미지 열기',\n caption: '캡션',\n captionPlaceholder: '캡션을 입력하세요',\n },\n file: {\n download: '다운로드',\n remove: '삭제',\n },\n video: {\n embed: '동영상 삽입',\n remove: '삭제',\n description: '아래 입력란에 YouTube 링크를 붙여넣으세요.',\n url: '링크',\n urlError: '유효한 링크를 입력하세요.',\n },\n codeBlock: {\n langType: '코드 언어 선택',\n },\n equation: {\n save: '저장',\n help: '지원되는 기능',\n placeholder: 'TeX 수식을 입력하세요',\n },\n} satisfies Translation;\n","import { i18nObject as initI18nObject, type FormattersInitializer } from 'typesafe-i18n';\nimport type { Formatters, Locales, Translations, TranslationFunctions } from './types';\n\nimport enUS from './en-US';\nimport zhCN from './zh-CN';\nimport ja from './ja';\nimport ko from './ko';\n\nconst localeTranslations = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n ja,\n ko,\n};\n\nconst locales: Locales[] = Object.keys(localeTranslations) as Locales[];\n\nconst loadedLocales: Record<Locales, Translations> = {} as Record<Locales, Translations>;\nconst loadedFormatters: Record<Locales, Formatters> = {} as Record<Locales, Formatters>;\n\nconst initFormatters: FormattersInitializer<Locales, Formatters> = () => {\n const formatters: Formatters = {\n // add your formatter functions here\n };\n return formatters;\n};\n\nfunction loadFormatters(locale: Locales): void {\n loadedFormatters[locale] = initFormatters(locale);\n}\n\nfunction loadLocale(locale: Locales): void {\n if (loadedLocales[locale]) {\n return;\n }\n loadedLocales[locale] = localeTranslations[locale] as Translations;\n loadFormatters(locale);\n}\n\nconst loadAllLocales = (): void => locales.forEach(loadLocale);\n\nexport function i18nObject(locale: Locales): TranslationFunctions {\n return initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(\n locale,\n loadedLocales[locale],\n loadedFormatters[locale],\n );\n}\n\nloadAllLocales();\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n DropdownLocation, DropdownDirection,\n DropdownItem, DropdownMenuItem,\n} from '../types/dropdown';\nimport { icons } from '../icons';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { unsafeTemplate } from '../utils/unsafe-template';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ninterface DropdownConfig extends DropdownItem {\n root: string | Node | Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n location?: DropdownLocation;\n direction?: DropdownDirection;\n onSelect: (value: string) => void;\n}\n\n/**\n * The Dropdown component provides a user-friendly menu with selectable options. Use it to allow users to pick from a list of predefined choices.\n */\nexport class Dropdown {\n private readonly config: DropdownConfig;\n\n private readonly root: Nodes;\n\n private readonly locale: TranslationFunctions;\n\n private readonly location: DropdownLocation;\n\n private readonly direction: DropdownDirection;\n\n private readonly menuNode: Nodes;\n\n /**\n * The DOM element that contains the dropdown's contents.\n */\n public readonly node: Nodes;\n\n constructor(config: DropdownConfig) {\n this.config = config;\n this.root = query(config.root);\n this.locale = config.locale || i18nObject('en-US');\n this.location = config.location || 'local';\n this.direction = config.direction || 'auto';\n this.node = query(template`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\">\n <button type=\"button\" name=\"${config.name}\" class=\"lake-dropdown-title\">\n <div class=\"lake-dropdown-${config.icon ? 'icon' : 'text'}\"></div>\n <div class=\"lake-dropdown-down-icon\"></div>\n </button>\n </div>\n `);\n this.menuNode = query('<ul class=\"lake-popup lake-dropdown-menu\" />');\n if (config.tabIndex !== undefined) {\n const titleNode = this.node.find('.lake-dropdown-title');\n titleNode.attr('tabindex', config.tabIndex.toString());\n }\n }\n\n /**\n * Returns the value of the node.\n */\n public static getValue(node: Nodes): string[] {\n const value = node.attr('value');\n if (value === '') {\n return [];\n }\n return JSON.parse(fromBase64(value));\n }\n\n /**\n * Updates the value of the node.\n */\n public static setValue(node: Nodes, value: string[]): void {\n node.attr('value', toBase64(JSON.stringify(value)));\n }\n\n public static getMenuMap(menuItems: DropdownMenuItem[], locale: TranslationFunctions): Map<string, string> {\n const menuMap = new Map<string, string>();\n for (const menuItem of menuItems) {\n // remove HTML tags\n let text = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(locale);\n text = text.replace(/<[^>]*>/g, '');\n menuMap.set(menuItem.value, text);\n }\n return menuMap;\n }\n\n private updateColorAccent(titleNode: Nodes, value: string): void {\n const svgNode = titleNode.find('.lake-dropdown-icon svg').eq(1);\n const lineNode = svgNode.find('line');\n if (lineNode.length > 0) {\n lineNode.attr('stroke', value);\n } else {\n svgNode.find('path').attr('fill', value);\n }\n }\n\n private apppendMenuItems(menuNode: Nodes): void {\n const config = this.config;\n for (const menuItem of config.menuItems) {\n const menuText = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(this.locale);\n const listContent = unsafeTemplate`\n <li value=\"${encode(menuItem.value)}\">\n <div class=\"lake-dropdown-menu-text\">${menuText}</div>\n </li>\n `;\n const listNode = query(listContent);\n menuNode.append(listNode);\n listNode.on('mouseenter', () => {\n if (listNode.hasClass('lake-dropdown-item-selected')) {\n return;\n }\n listNode.addClass('lake-dropdown-item-hovered');\n });\n listNode.on('mouseleave', () => {\n listNode.removeClass('lake-dropdown-item-hovered');\n });\n if (config.menuType === 'character') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').text(menuItem.value);\n } else if (config.menuType === 'color') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').css('background-color', menuItem.value);\n }\n if (menuItem.icon) {\n const menuIconNode = query('<div class=\"lake-dropdown-menu-icon\"></div>');\n menuIconNode.append(menuItem.icon);\n listNode.prepend(menuIconNode);\n }\n const checkIcon = icons.get('check');\n if (checkIcon) {\n const checkNode = query('<div class=\"lake-dropdown-menu-check\"></div>');\n checkNode.append(checkIcon);\n listNode.prepend(checkNode);\n }\n }\n }\n\n private clickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n this.hideMenu();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private appendMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n const titleNode = this.node.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n menuNode.addClass(`lake-${config.menuType}-dropdown-menu`);\n if (config.menuWidth) {\n menuNode.css('width', config.menuWidth);\n }\n if (config.menuHeight) {\n menuNode.addClass('lake-dropdown-menu-with-scroll');\n menuNode.css('height', config.menuHeight);\n }\n this.apppendMenuItems(menuNode);\n if (this.location === 'local') {\n this.node.append(menuNode);\n } else {\n query(document.body).append(menuNode);\n }\n menuNode.on('click', event => {\n event.preventDefault();\n event.stopPropagation();\n const listItem = query(event.target as Node).closest('li');\n if (listItem.length === 0) {\n return;\n }\n const value = listItem.attr('value');\n Dropdown.setValue(this.node, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n this.node.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n this.hideMenu();\n });\n }\n\n private updatePosition(): void {\n const menuNode = this.menuNode;\n const dropdownNativeNode = this.node.get(0) as HTMLElement;\n const dropdownRect = dropdownNativeNode.getBoundingClientRect();\n // A overflow width on the left side, greater than 0 indicates an overflow.\n const leftOverflow = menuNode.width() - (dropdownRect.x + dropdownRect.width);\n // A overflow width on the right side, greater than 0 indicates an overflow.\n const rightOverflow = dropdownRect.x + menuNode.width() - window.innerWidth;\n const rightToLeft = rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow);\n if (this.location === 'local') {\n if (rightToLeft) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n if (this.direction === 'top') {\n menuNode.css('top', 'auto');\n menuNode.css('bottom', `${dropdownRect.height}px`);\n }\n return;\n }\n // A overflow width on the bottom side, greater than 0 indicates an overflow.\n const bottomOverflow = dropdownRect.y + dropdownRect.height + menuNode.height() - window.innerHeight;\n const dropdownX = dropdownRect.x + window.scrollX;\n const dropdownY = dropdownRect.y + window.scrollY;\n if (rightToLeft) {\n menuNode.css('left', `${dropdownX - menuNode.width() + dropdownRect.width}px`);\n } else {\n menuNode.css('left', `${dropdownX}px`);\n }\n if (bottomOverflow > 0) {\n menuNode.css('top', `${dropdownY - menuNode.height()}px`);\n } else {\n menuNode.css('top', `${dropdownY + dropdownRect.height}px`);\n }\n }\n\n private showMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n if (!menuNode.get(0).isConnected) {\n this.appendMenu();\n }\n if (this.node.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(this.node);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n if (config.menuCheck !== false) {\n menuNode.find('li').each(node => {\n const listNode = query(node);\n if (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n }\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n this.updatePosition();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n menuNode.css('visibility', '');\n }\n\n private hideMenu(): void {\n this.menuNode.hide();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n }\n\n /**\n * Renders the dropdown to the DOM.\n */\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const titleNode = this.node.find('.lake-dropdown-title');\n if (!config.downIcon) {\n titleNode.addClass('lake-dropdown-title-no-down');\n }\n if (config.width) {\n titleNode.css('width', config.width);\n }\n const tooltip = typeof config.tooltip === 'string' ? config.tooltip : config.tooltip(this.locale);\n titleNode.attr('title', tooltip);\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n if (config.icon) {\n iconNode.append(config.icon);\n }\n if (config.accentIcon) {\n iconNode.append(config.accentIcon);\n }\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n if (config.downIcon) {\n downIconNode.append(config.downIcon);\n }\n Dropdown.setValue(this.node, [defaultValue]);\n if (textNode.length > 0) {\n const menuMap = Dropdown.getMenuMap(config.menuItems, this.locale);\n textNode.text(menuMap.get(defaultValue) ?? defaultValue);\n }\n if (config.menuType === 'color') {\n this.updateColorAccent(titleNode, defaultValue);\n }\n this.node.append(titleNode);\n this.root.append(this.node);\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n iconNode.addClass('lake-dropdown-icon-hovered');\n });\n iconNode.on('mouseleave', () => {\n iconNode.removeClass('lake-dropdown-icon-hovered');\n });\n downIconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n downIconNode.addClass('lake-dropdown-down-icon-hovered');\n });\n downIconNode.on('mouseleave', () => {\n downIconNode.removeClass('lake-dropdown-down-icon-hovered');\n });\n } else {\n titleNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n titleNode.addClass('lake-dropdown-title-hovered');\n });\n titleNode.on('mouseleave', () => {\n titleNode.removeClass('lake-dropdown-title-hovered');\n });\n }\n if (config.menuType === 'color') {\n iconNode.on('click', event => {\n event.preventDefault();\n if (this.node.attr('disabled')) {\n return;\n }\n const value = this.node.attr('color') || config.defaultValue || '';\n config.onSelect(value);\n });\n }\n const triggerNode = (config.menuType === 'color' && downIconNode) ? downIconNode : titleNode;\n triggerNode.on('click', event => {\n event.preventDefault();\n this.showMenu();\n });\n }\n\n /**\n * Removes the dropdown from the DOM and cleans up resources.\n */\n public unmount(): void {\n this.hideMenu();\n this.menuNode.remove();\n this.node.remove();\n }\n}\n","import type { Editor } from '../editor';\nimport { SelectionState } from '../types/selection';\nimport { ToolbarButtonItem, ToolbarDropdownItem, ToolbarUploadItem, ToolbarItem } from '../types/toolbar';\nimport { toolbarItems } from '../config/toolbar-items';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { uploadFile } from '../utils/upload-file';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { Dropdown } from './dropdown';\n\ntype ToolbarPlacement = 'top' | 'bottom';\n\nexport interface ToolbarConfig {\n root?: string | Node | Nodes;\n items?: (string | ToolbarItem)[];\n placement?: ToolbarPlacement;\n}\n\nconst defaultItems: string[] = [\n 'undo',\n 'redo',\n '|',\n 'heading',\n '|',\n 'formatPainter',\n 'removeFormat',\n 'bold',\n 'moreStyle',\n '|',\n 'fontColor',\n 'highlight',\n '|',\n 'align',\n 'list',\n 'indent',\n 'link',\n 'blockQuote',\n 'hr',\n];\n\nconst toolbarItemMap = new Map<string, ToolbarItem>();\n\nfor (const item of toolbarItems) {\n toolbarItemMap.set(item.name, item);\n}\n\n/**\n * The Toolbar interface provides properties and methods for rendering and manipulating the toolbar.\n */\nexport class Toolbar {\n\n private items: (string | ToolbarItem)[];\n\n private placement: ToolbarPlacement = 'top';\n\n private allMenuMap = new Map<string, Map<string, string>>();\n\n private buttonItemList: ToolbarButtonItem[] = [];\n\n private dropdownItemList: ToolbarDropdownItem[] = [];\n\n private dropdownList: Dropdown[] = [];\n\n /**\n * The element to which the toolbar is appended.\n */\n public root: Nodes;\n\n /**\n * The element where toolbar items are appended.\n */\n public container: Nodes;\n\n constructor(config: ToolbarConfig) {\n this.root = query(config.root || document.body);\n this.items = config.items || defaultItems;\n if (config.placement) {\n this.placement = config.placement;\n }\n this.container = query('<div class=\"lake-toolbar\" />');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendNormalButton(editor: Editor, item: ToolbarButtonItem): void {\n const button = new Button({\n root: this.container,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n item.onClick(editor, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(editor: Editor, item: ToolbarDropdownItem): void {\n const dropdown = new Dropdown({\n root: this.container,\n locale: editor.locale,\n name: item.name,\n icon: item.icon,\n accentIcon: item.accentIcon,\n downIcon: item.downIcon,\n defaultValue: item.defaultValue,\n tooltip: item.tooltip,\n width: item.width,\n menuType: item.menuType,\n menuItems: item.menuItems,\n menuWidth: item.menuWidth,\n menuHeight: item.menuHeight,\n menuCheck: item.menuCheck,\n tabIndex: -1,\n location: 'local',\n direction: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n this.dropdownList.push(dropdown);\n }\n\n private appendUploadButton(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(template`\n <div class=\"lake-upload\" name=\"${item.name}\">\n <input type=\"file\" />\n </div>\n `);\n const fileNode = uploadNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n const button = new Button({\n root: uploadNode,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n fileNativeNode.click();\n },\n });\n button.render();\n this.container.append(uploadNode);\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => {\n const target = event.target as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n });\n }\n\n /**\n * Updates the state of each toolbar item, such as whether it is selected or disabled.\n */\n public updateState(state: SelectionState = {\n activeItems: [],\n }): void {\n const { activeItems } = state;\n const disabledNameMap = state.disabledNameMap || new Map();\n const selectedNameMap = state.selectedNameMap || new Map();\n const selectedValuesMap = state.selectedValuesMap || new Map();\n if (!this.container.get(0).isConnected) {\n return;\n }\n for (const item of this.buttonItemList) {\n const selectedClass = 'lake-button-selected';\n const buttonNode = this.container.find(`button[name=\"${item.name}\"]`);\n let isDisabled = disabledNameMap.get(item.name);\n if (isDisabled === undefined) {\n isDisabled = item.isDisabled ? item.isDisabled(activeItems) : false;\n }\n if (isDisabled) {\n buttonNode.attr('disabled', 'true');\n buttonNode.removeClass(selectedClass);\n } else {\n buttonNode.removeAttr('disabled');\n }\n if (!isDisabled) {\n let isSelected = selectedNameMap.get(item.name);\n if (isSelected === undefined) {\n isSelected = item.isSelected ? item.isSelected(activeItems) : false;\n }\n if (isSelected) {\n buttonNode.addClass(selectedClass);\n } else {\n buttonNode.removeClass(selectedClass);\n }\n }\n }\n for (const item of this.dropdownItemList) {\n let selectedValues = selectedValuesMap.get(item.name);\n if (selectedValues === undefined) {\n selectedValues = item.selectedValues ? item.selectedValues(activeItems) : [];\n }\n const dropdownNode = this.container.find(`div.lake-dropdown[name=\"${item.name}\"]`);\n let isDisabled = disabledNameMap.get(item.name);\n if (isDisabled === undefined) {\n isDisabled = item.isDisabled ? item.isDisabled(activeItems) : false;\n }\n if (isDisabled) {\n dropdownNode.attr('disabled', 'true');\n } else {\n dropdownNode.removeAttr('disabled');\n }\n if (!isDisabled) {\n Dropdown.setValue(dropdownNode, selectedValues);\n const textNode = dropdownNode.find('.lake-dropdown-text');\n if (textNode.length > 0) {\n const key = selectedValues[0] || item.defaultValue || '';\n const menuMap = this.allMenuMap.get(item.name);\n const text = (menuMap && menuMap.get(key)) ?? key;\n textNode.text(text);\n }\n }\n }\n }\n\n /**\n * Renders the toolbar for the specified editor.\n */\n public render(editor: Editor): void {\n this.root.append(this.container);\n for (const name of this.items) {\n if (name === '|') {\n this.appendDivider();\n } else {\n let item;\n if (typeof name === 'string') {\n item = toolbarItemMap.get(name);\n if (!item) {\n throw new Error(`ToolbarItem \"${name}\" has not been defined yet.`);\n }\n } else {\n item = name;\n }\n if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendNormalButton(editor, item);\n } else if (item.type === 'dropdown') {\n this.allMenuMap.set(item.name, Dropdown.getMenuMap(item.menuItems, editor.locale));\n this.dropdownItemList.push(item);\n this.appendDropdown(editor, item);\n } else if (item.type === 'upload') {\n this.appendUploadButton(editor, item);\n }\n }\n }\n }\n\n /**\n * Destroys the toolbar instance, removing it from the DOM.\n */\n public unmount(): void {\n for (const dropdown of this.dropdownList) {\n dropdown.unmount();\n }\n this.container.remove();\n }\n}\n","import { editors } from '../storage/editors';\nimport { visibleInfo } from '../utils/visible-info';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Toolbar, ToolbarConfig } from './toolbar';\n\ninterface FloatingToolbarConfig extends ToolbarConfig {\n target: Nodes | Range;\n};\n\n// The FloatingToolbar class, inheriting from the Toolbar class, represents a toolbar that floats at the top of a box.\nexport class FloatingToolbar extends Toolbar {\n\n private range: Range;\n\n constructor(config: FloatingToolbarConfig) {\n super(config);\n if (config.target instanceof Nodes) {\n const range = new Range();\n range.selectNodeContents(config.target);\n this.range = range;\n } else {\n this.range = config.target;\n }\n this.container.removeClass('lake-toolbar');\n this.container.addClass('lake-popup');\n this.container.addClass('lake-floating-toolbar');\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(): void {\n const visible = visibleInfo(this.range);\n if (\n (visible.top === -1 && visible.bottom === -1)\n || (visible.top === 1 && visible.bottom === 1)\n ) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n this.container.show('flex');\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n let left = Number((rangeX + rangeRect.width / 2 - this.container.width() / 2).toFixed(1));\n let top = Number((rangeY - this.container.height() - 6).toFixed(1));\n const viewport = this.range.commonAncestor.closestScroller();\n const editArea = this.range.commonAncestor.closestContainer();\n const editAreaRect = (editArea.get(0) as Element).getBoundingClientRect();\n let leftEdge = window.scrollX + 6;\n if (viewport.length > 0) {\n leftEdge += editAreaRect.x + (viewport.get(0) as Element).scrollLeft;\n } else {\n leftEdge += editAreaRect.x + window.scrollX;\n }\n const rightEdge = leftEdge + editAreaRect.width - this.container.width() - 12;\n let topEdge = window.scrollY;\n if (viewport.length > 0) {\n topEdge += editAreaRect.y + (viewport.get(0) as Element).scrollTop + 10;\n } else {\n topEdge += editAreaRect.y + window.scrollY;\n }\n if (left < leftEdge) {\n left = leftEdge;\n } else if (left > rightEdge) {\n left = rightEdge;\n }\n if (top < topEdge) {\n top = topEdge;\n }\n this.container.css({\n left: `${left}px`,\n top: `${top}px`,\n });\n }\n\n // Renders a floating toolbar.\n public render(): void {\n const container = this.range.commonAncestor.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error('The range must be within the editing area.');\n }\n super.render(editor);\n this.updatePosition();\n this.updateState();\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n }\n\n // Destroys the floating toolbar.\n public unmount(): void {\n super.unmount();\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n window.removeEventListener('resize', this.resizeListener);\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport type { Editor } from '../editor';\nimport { BoxType, BoxValue } from '../types/box';\nimport { ToolbarItem } from '../types/toolbar';\nimport { boxes } from '../storage/boxes';\nimport { editors } from '../storage/editors';\nimport { debug } from '../utils/debug';\nimport { template } from '../utils/template';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\nimport { FloatingToolbar } from '../ui/floating-toolbar';\n\n/**\n * The Box interface represents an embedded content designed to enhance editing capability.\n */\nexport class Box {\n /**\n * The lake-box element to which the contents of the box are appended.\n */\n public readonly node: Nodes;\n\n /**\n * An EventEmitter object for handling events. See the Instance events for details.\n */\n public readonly event: EventEmitter = new EventEmitter();\n\n /**\n * A floating toolbar attached to the box.\n */\n public toolbar: FloatingToolbar | null = null;\n\n constructor(node: string | Node | Nodes) {\n if (typeof node === 'string') {\n const component = boxes.get(node);\n if (component === undefined) {\n throw new Error(`Box \"${node}\" has not been defined yet.`);\n }\n const type = encode(component.type);\n const name = encode(component.name);\n this.node = query(template`<lake-box type=\"${type}\" name=\"${name}\"></lake-box>`);\n if (component.value) {\n this.value = component.value;\n }\n } else {\n this.node = query(node);\n const component = boxes.get(this.name);\n if (component === undefined) {\n throw new Error(`Box \"${this.name}\" has not been defined yet.`);\n }\n if (component.value && !this.node.hasAttr('value')) {\n this.value = component.value;\n }\n }\n }\n\n private initiate(): void {\n let container = this.getContainer();\n if (container.length === 0) {\n this.node.html(template`\n <span class=\"lake-box-strip\"><br /></span>\n <div class=\"lake-box-container\" contenteditable=\"false\"></div>\n <span class=\"lake-box-strip\"><br /></span>\n `);\n container = this.getContainer();\n } else {\n container.off('mouseenter');\n container.off('mouseleave');\n container.off('click');\n }\n container.on('mouseenter', () => {\n if (\n container.hasClass('lake-box-selected')\n || container.hasClass('lake-box-focused')\n || container.hasClass('lake-box-activated')\n ) {\n return;\n }\n container.addClass('lake-box-hovered');\n });\n container.on('mouseleave', () => {\n container.removeClass('lake-box-hovered');\n });\n container.on('click', () => {\n debug(`Box \"${this.name}\" (id = ${this.node.id}) value:`);\n debug(this.value);\n });\n if (this.type === 'block' && this.node.isContentEditable) {\n container.attr('draggable', 'true');\n }\n }\n\n /**\n * Indicates the type of the box.\n */\n public get type(): BoxType {\n return this.node.attr('type') as BoxType;\n }\n\n /**\n * Returns the name of the box.\n */\n public get name(): string {\n return this.node.attr('name');\n }\n\n /**\n * Gets or sets the value of the box.\n */\n public get value(): BoxValue {\n const value = this.node.attr('value');\n if (value === '') {\n return {};\n }\n return JSON.parse(fromBase64(value));\n }\n\n public set value(value: BoxValue) {\n this.node.attr('value', toBase64(JSON.stringify(value)));\n }\n\n /**\n * Updates part of the value of the box.\n */\n public updateValue(keyName: string, keyValue: string): void;\n\n public updateValue(keyName: BoxValue): void;\n\n public updateValue(keyName: any, keyValue?: any): void {\n const value = this.value;\n if (typeof keyName === 'string') {\n value[keyName] = keyValue;\n } else {\n for (const key of Object.keys(keyName)) {\n value[key] = keyName[key];\n }\n }\n this.value = value;\n }\n\n /**\n * Returns the Editor object that contains the box.\n */\n public getEditor(): Editor {\n const container = this.node.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error(`Box \"${this.name}\" (id=${this.node.id}) is not rendered in the editor.`);\n }\n return editor;\n }\n\n /**\n * Returns the container element of the box.\n */\n public getContainer(): Nodes {\n return this.node.find('.lake-box-container');\n }\n\n /**\n * Returns the HTML content inside the box.\n */\n public getHTML(): string {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return '';\n }\n if (component.html === undefined) {\n return this.node.outerHTML();\n }\n return component.html(this);\n }\n\n /**\n * Adds a floating toolbar to the box.\n */\n public setToolbar(items: ToolbarItem[]): void {\n const editor = this.getEditor();\n this.event.on('focus', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.toolbar = new FloatingToolbar({\n target: this.node,\n items,\n });\n this.toolbar.render();\n const activeItems = editor.selection.getActiveItems();\n this.toolbar.updateState({\n activeItems,\n });\n this.event.emit('renderfloatingtoolbar');\n });\n this.event.on('blur', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n this.toolbar = null;\n }\n });\n }\n\n /**\n * Renders the content inside the box.\n */\n public render(): void {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return;\n }\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.initiate();\n const content = component.render(this);\n if (content !== undefined) {\n const container = this.getContainer();\n container.empty();\n container.append(content);\n }\n debug(`Box \"${this.name}\" (id: ${this.node.id}) rendered`);\n }\n\n /**\n * Destroys the box instance.\n */\n public unmount(): void {\n this.event.emit('blur');\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.node.empty();\n debug(`Box \"${this.name}\" (id: ${this.node.id}) unmounted`);\n }\n}\n","import { getInstanceMap } from '../storage/box-instances';\nimport { query } from './query';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\n/**\n * Returns an existing Box instance associated with the provided boxNode or generates a new one if none exists.\n * The function handles the creation and storage of Box instances, storing them either in a temporary or\n * permanentmap based on whether the boxNode is contained within a container.\n */\nexport function getBox(boxNode: string | Node | Nodes): Box {\n const tempInstanceMap = getInstanceMap(0);\n // boxNode is a name\n if (typeof boxNode === 'string') {\n const box = new Box(boxNode);\n tempInstanceMap.set(box.node.id, box);\n return box;\n }\n // boxNode is a node\n boxNode = query(boxNode);\n const container = boxNode.closestContainer();\n if (container.length === 0) {\n let box = tempInstanceMap.get(boxNode.id);\n if (box) {\n return box;\n }\n box = new Box(boxNode);\n tempInstanceMap.set(boxNode.id, box);\n return box;\n }\n const instanceMap = getInstanceMap(container.id);\n let box = tempInstanceMap.get(boxNode.id);\n if (box) {\n // move the box instance from temporary map to permanent map\n instanceMap.set(boxNode.id, box);\n tempInstanceMap.delete(boxNode.id);\n return box;\n }\n box = instanceMap.get(boxNode.id);\n if (box) {\n return box;\n }\n box = new Box(boxNode);\n instanceMap.set(boxNode.id, box);\n return box;\n}\n","import { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\n/**\n * The Fragment interface represents a lightweight document object that has no parent.\n * It is designed for efficient manipulation of document structures without affecting the main DOM.\n */\nexport class Fragment {\n /**\n * A native DocumentFragment object.\n */\n private readonly fragment: DocumentFragment;\n\n constructor(fragment?: DocumentFragment) {\n this.fragment = fragment ?? document.createDocumentFragment();\n }\n\n /**\n * Returns a native DocumentFragment object from the fragment.\n */\n public get(): DocumentFragment {\n return this.fragment;\n }\n\n /**\n * Finds and returns descendants of the fragment that match the specified CSS selector.\n */\n public find(selector: string): Nodes {\n const nodeList: Node[] = [];\n let child = new Nodes(this.fragment.firstChild);\n while (child.length > 0) {\n if (child.matches(selector)) {\n nodeList.push(child.get(0));\n } else if (child.isElement) {\n child.find(selector).each(node => {\n nodeList.push(node);\n });\n }\n child = child.next();\n }\n return new Nodes(nodeList);\n }\n\n /**\n * Inserts the specified content just inside the fragment, after its last child.\n */\n public append(content: string | Node | Nodes): void {\n query(content).each(nativeNode => {\n this.fragment.appendChild(nativeNode);\n });\n }\n}\n","const blockAttributeRules: any = {\n id: /^[\\w-]+$/,\n class: /^[\\w\\- ]+$/,\n style: {\n 'text-align': ['left', 'center', 'right', 'justify', 'start', 'end'],\n 'margin-left': /^-?\\d+px$/i,\n 'text-indent': /^-?\\d+em$/i,\n },\n};\n\nexport function getElementRules(): any {\n return {\n h1: {\n ...blockAttributeRules,\n },\n h2: {\n ...blockAttributeRules,\n },\n h3: {\n ...blockAttributeRules,\n },\n h4: {\n ...blockAttributeRules,\n },\n h5: {\n ...blockAttributeRules,\n },\n h6: {\n ...blockAttributeRules,\n },\n p: {\n ...blockAttributeRules,\n },\n blockquote: {\n ...blockAttributeRules,\n type: ['info', 'tip', 'success', 'warning', 'error', 'danger'],\n },\n ul: {\n ...blockAttributeRules,\n type: 'checklist',\n indent: /^\\d+$/,\n },\n ol: {\n ...blockAttributeRules,\n start: /^\\d+$/,\n indent: /^\\d+$/,\n },\n li: {\n value: ['true', 'false'],\n },\n table: {\n style: {\n width: /^-?\\d+(px|%)$/i,\n height: /^-?\\d+(px|%)$/i,\n border: /^[^\"]+$/,\n 'border-width': /^-?\\d+px$/i,\n 'border-style': /^[\\w-]+$/,\n 'border-color': /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n },\n },\n tr: {\n style: {\n height: /^-?\\d+(px|%)$/i,\n },\n },\n th: 'td',\n td: {\n colspan: /^\\d+$/,\n rowspan: /^\\d+$/,\n style: {\n width: /^-?\\d+(px|%)$/i,\n height: /^-?\\d+(px|%)$/i,\n border: /^[^\"]+$/,\n 'border-width': /^-?\\d+px$/i,\n 'border-style': /^[\\w-]+$/,\n 'border-color': /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n 'text-align': ['left', 'center', 'right', 'justify'],\n },\n },\n 'lake-box': {\n type: ['inline', 'block'],\n name: /^[\\w-]+$/,\n value: /^[^\"]+$/,\n focus: ['start', 'center', 'end'],\n },\n br: {},\n hr: {},\n img: {\n src: /^[^\"]+$/,\n width: /^-?\\d+px$/i,\n height: /^-?\\d+px$/i,\n 'data-lake-value': /^[^\"]+$/,\n alt: /^[^\"]+$/,\n style: {\n width: /^-?\\d+px$/i,\n height: /^-?\\d+px$/i,\n },\n },\n span: {\n class: /^[\\w\\- ]+$/,\n style: {\n color: /^[^\"]+$/,\n 'background-color': /^[^\"]+$/,\n 'font-family': /^[^;]+$/,\n 'font-size': /^[^\"]+$/,\n },\n },\n b: 'strong',\n strong: {},\n em: 'i',\n i: {},\n u: {},\n s: {},\n sub: {},\n sup: {},\n code: {},\n a: {\n class: /^[\\w\\- ]+$/,\n name: /^[\\w-]+$/,\n href: /^[^\"]+$/,\n target: /^[\\w-]+$/,\n rel: /^[^\"]+$/,\n download: /^[^\"]+$/,\n },\n 'lake-bookmark': {\n type: ['anchor', 'focus'],\n },\n };\n}\n","import { KeyValue } from '../types/object';\nimport { toHex } from './to-hex';\n\n// Converts a string from style property of element to a key-value object that contains a list of all styles properties.\nexport function parseStyle(styleValue: string): KeyValue {\n styleValue = styleValue.replace(/"/gi, '\"');\n const properties: KeyValue = {};\n const re = /\\s*([\\w-]+)\\s*:([^;]*)(?:;|$)/g;\n let result;\n while ((result = re.exec(styleValue)) !== null) {\n const key = result[1].toLowerCase().trim();\n const val = toHex(result[2]).trim();\n properties[key] = val;\n }\n return properties;\n}\n","import { getElementRules } from '../config/element-rules';\nimport { parseStyle } from '../utils/parse-style';\nimport { encode } from '../utils/encode';\nimport { Nodes } from '../models/nodes';\n\n/**\n * The HTMLParser interface provides the ability to parse an HTML string according to specified rules.\n */\nexport class HTMLParser {\n\n private readonly rules: any;\n\n private readonly source: Nodes;\n\n constructor(content: string | Nodes, rules = getElementRules()) {\n this.rules = rules;\n if (typeof content === 'string') {\n this.source = this.parseHTML(content);\n } else {\n this.source = content;\n }\n }\n\n /**\n * Parses the given HTML string and returns the body element from the result.\n */\n private parseHTML(html: string): Nodes {\n const parser = new DOMParser();\n const doc = parser.parseFromString(html, 'text/html');\n return new Nodes(doc.querySelector('body'));\n }\n\n /**\n * Returns a boolean value indicating whether the given value matches the given rule.\n */\n private static matchRule(rule: any, value: string): boolean {\n if (typeof rule === 'string') {\n return rule === value;\n }\n if (Array.isArray(rule)) {\n return rule.indexOf(value) >= 0;\n }\n if (rule instanceof RegExp) {\n return rule.test(value);\n }\n return false;\n }\n\n /**\n * Returns an open tag string from the specified element.\n */\n private static getOpenTagString(element: Nodes, rules: any): string {\n let tagName = element.name;\n let attributeRules = rules[tagName];\n if (!attributeRules) {\n return '';\n }\n if (typeof attributeRules === 'string') {\n tagName = attributeRules;\n attributeRules = rules[tagName];\n }\n const nativeNode = element.get(0) as Element;\n if (!nativeNode.hasAttributes()) {\n return tagName;\n }\n const attributeMap = new Map<string, string | Map<string, string>>();\n for (const attr of nativeNode.attributes) {\n if (attributeRules[attr.name]) {\n if (attr.name !== 'style' && HTMLParser.matchRule(attributeRules[attr.name], attr.value)) {\n attributeMap.set(attr.name, attr.value);\n }\n if (attr.name === 'style') {\n const styleRules = attributeRules.style;\n const styleMap = new Map<string, string>();\n const styleData = parseStyle(attr.value);\n for (const key of Object.keys(styleData)) {\n const value = styleData[key];\n if (styleRules[key] && HTMLParser.matchRule(styleRules[key], value)) {\n styleMap.set(key, value);\n }\n }\n attributeMap.set('style', styleMap);\n }\n }\n }\n let openTag = tagName;\n for (const [attrName, attrValue] of attributeMap) {\n if (attrName === 'style') {\n let styleString = '';\n for (const [styleName, styleValue] of attrValue) {\n styleString += `${styleName}: ${styleValue.replace(/\"/g, '"')}; `;\n }\n if (styleString !== '') {\n openTag += ` style=\"${styleString.trim()}\"`;\n }\n } else {\n openTag += ` ${attrName}=\"${attrValue}\"`;\n }\n }\n return openTag;\n }\n\n /**\n * Returns a closed tag string from the specified element.\n */\n private static getClosedTagString(element: Nodes, rules: any): string {\n let tagName = element.name;\n const attributeRules = rules[tagName];\n if (!attributeRules) {\n return '';\n }\n if (typeof attributeRules === 'string') {\n tagName = attributeRules;\n }\n return tagName;\n }\n\n /**\n * Returns the value of the text node with trimming invisible whitespace.\n */\n // <p>foo</p>\\n<p>bar</p>\n // or\n // <p>\\nfoo\\n</p>\n private static getTrimmedText(textNode: Nodes): string {\n const parentNode = textNode.parent();\n const prevSibling = textNode.prev();\n const nextSibling = textNode.next();\n let nodeValue = textNode.text();\n if (\n ((prevSibling.isBlock || prevSibling.isBlockBox) && (nextSibling.isBlock || nextSibling.isBlockBox))\n || (prevSibling.length === 0 && nextSibling.length === 0 && parentNode.isBlock)\n ) {\n nodeValue = nodeValue.replace(/^[\\u0020\\t\\r\\n]+|[\\u0020\\t\\r\\n]+$/g, '');\n } else if (\n (prevSibling.isBlock || prevSibling.isBlockBox)\n || (prevSibling.length === 0 && parentNode.isBlock)\n ) {\n nodeValue = nodeValue.replace(/^[\\u0020\\t\\r\\n]+/, '');\n } else if (\n (nextSibling.isBlock || nextSibling.isBlockBox)\n || (nextSibling.length === 0 && parentNode.isBlock)\n ) {\n nodeValue = nodeValue.replace(/[\\u0020\\t\\r\\n]+$/, '');\n }\n return nodeValue;\n }\n\n /**\n * Returns the parsed HTML as a string.\n */\n public getHTML(): string {\n const rules = this.rules;\n function * iterate(node: Nodes): Generator<string> {\n let child = node.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (child.isText) {\n yield encode(HTMLParser.getTrimmedText(child));\n } else if (child.isVoid) {\n const openTag = HTMLParser.getOpenTagString(child, rules);\n if (openTag !== '') {\n yield `<${openTag} />`;\n }\n } else if (child.isElement) {\n const openTag = HTMLParser.getOpenTagString(child, rules);\n const closedTag = HTMLParser.getClosedTagString(child, rules);\n if (openTag !== '') {\n yield `<${openTag}>`;\n }\n if (!child.isBox) {\n yield * iterate(child);\n }\n if (closedTag !== '') {\n yield `</${closedTag}>`;\n }\n }\n child = nextNode;\n }\n }\n let html = '';\n for (const value of iterate(this.source)) {\n html += value;\n }\n return html.trim();\n }\n\n /**\n * Returns the parsed content as a DocumentFragment object.\n */\n public getFragment(): DocumentFragment {\n const html = this.getHTML();\n const body = this.parseHTML(html);\n const fragment = document.createDocumentFragment();\n let child = body.first();\n while (child.length > 0) {\n const nextNode = child.next();\n fragment.appendChild(child.get(0));\n child = nextNode;\n }\n return fragment;\n }\n}\n","import { encode } from '../utils/encode';\nimport { HTMLParser } from './html-parser';\n\n/**\n * The TextParser interface enables parsing of text into structured HTML.\n */\nexport class TextParser {\n\n private readonly content: string;\n\n constructor(content: string) {\n this.content = content;\n }\n\n /**\n * Converts the parsed text into an HTML string.\n */\n public getHTML(): string {\n let html = this.content;\n html = html.replace(/ {2}/g, ' \\xA0');\n html = encode(html.trim());\n html = `<p>${html}</p>`;\n html = html.replace(/(\\r\\n){2,}/g, '</p><p><br /></p><p>');\n html = html.replace(/\\r\\n/g, '</p><p>');\n html = html.replace(/[\\r\\n]{2,}/g, '</p><p><br /></p><p>');\n html = html.replace(/[\\r\\n]/g, '</p><p>');\n return html;\n }\n\n /**\n * Generates a DocumentFragment object that represents the parsed text.\n */\n public getFragment(): DocumentFragment {\n const htmlParser = new HTMLParser(this.getHTML());\n return htmlParser.getFragment();\n }\n}\n","import { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction insertNode(range: Range, node: Nodes): void {\n const nativeRange = range.get();\n const nativeNode = node.get(0);\n nativeRange.insertNode(nativeNode);\n nativeRange.setEndAfter(nativeNode);\n nativeRange.collapse(false);\n}\n\n/**\n * Inserts a bookmark at the cursor position or a pair of bookmarks at the beginning and end of the range.\n */\n// case 1: foo<lake-bookmark type=\"focus\" />bar\n// case 2: <lake-bookmark type=\"anchor\" />foo<lake-bookmark type=\"focus\" />\n// case 3: foo<lake-box type=\"inline\" name=\"image\" focus=\"start\"></lake-box>bar\n// case 4: foo<lake-box type=\"inline\" name=\"image\" focus=\"end\"></lake-box>bar\n// case 5: <lake-bookmark type=\"anchor\" /><lake-box type=\"inline\" name=\"image\"></lake-box>foo<lake-bookmark type=\"focus\" />\nexport function insertBookmark(range: Range): { anchor: Nodes, focus: Nodes } {\n if (range.commonAncestor.isOutside) {\n return {\n anchor: new Nodes(),\n focus: new Nodes(),\n };\n }\n // box\n const boxNode = range.startNode.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n boxNode.attr('focus', 'start');\n } else if (range.isBoxEnd) {\n boxNode.attr('focus', 'end');\n } else {\n boxNode.attr('focus', 'center');\n }\n return {\n anchor: new Nodes(),\n focus: boxNode,\n };\n }\n // collapsed range\n if (range.isCollapsed) {\n const endRange = range.clone();\n endRange.collapseToEnd();\n const focus = query('<lake-bookmark type=\"focus\" />');\n insertNode(endRange, focus);\n return {\n anchor: new Nodes(),\n focus,\n };\n }\n // expanded range\n const startRange = range.clone();\n startRange.collapseToStart();\n const anchor = query('<lake-bookmark type=\"anchor\" />');\n insertNode(startRange, anchor);\n const endRange = range.clone();\n endRange.collapseToEnd();\n const focus = query('<lake-bookmark type=\"focus\" />');\n insertNode(endRange, focus);\n return {\n anchor,\n focus,\n };\n}\n","import { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction removeAndNormalizeNode(node: Nodes, range?: Range): void {\n const previousNode = node.prev();\n const nextNode = node.next();\n if (previousNode.isText || nextNode.isText) {\n const parentNode = node.parent();\n node.remove();\n parentNode.get(0).normalize();\n } else if (previousNode.length === 0 && nextNode.length === 0) {\n if (node.parent().isMark && range) {\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n node.before(zeroWidthSpace);\n range.setStartAfter(zeroWidthSpace);\n range.collapseToStart();\n }\n node.remove();\n } else {\n node.remove();\n }\n}\n\n/**\n * Changes the specified range to a range represented by the provided bookmark.\n */\nexport function toBookmark(range: Range, bookmark: { anchor: Nodes, focus: Nodes }): void {\n const anchor = bookmark.anchor;\n const focus = bookmark.focus;\n // Only the anchor is removed because the focus does not exist, which is not correct case.\n if (anchor.length > 0 && focus.length === 0) {\n removeAndNormalizeNode(anchor);\n return;\n }\n if (focus.length > 0 && anchor.length === 0) {\n if (focus.isBox) {\n const box = getBox(focus);\n if (box.getContainer().length === 0) {\n box.render();\n }\n const focusValue = focus.attr('focus');\n if (focusValue === 'start') {\n range.selectBoxStart(focus);\n } else if (focusValue === 'center') {\n range.selectBox(focus);\n } else {\n range.selectBoxEnd(focus);\n }\n focus.removeAttr('focus');\n return;\n }\n range.setStartBefore(focus);\n range.collapseToStart();\n removeAndNormalizeNode(focus, range);\n return;\n }\n if (anchor.length > 0 && focus.length > 0) {\n const anchorRange = new Range();\n anchorRange.selectNode(anchor);\n anchorRange.collapseToEnd();\n // The anchor node is after the focus node.\n if (anchorRange.compareAfterNode(focus) === -1) {\n range.setStartBefore(focus);\n removeAndNormalizeNode(focus);\n range.setEndBefore(anchor);\n removeAndNormalizeNode(anchor);\n } else {\n range.setStartBefore(anchor);\n removeAndNormalizeNode(anchor);\n range.setEndBefore(focus);\n removeAndNormalizeNode(focus);\n }\n }\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes a line break in the specified empty block.\n// Example:\n// case 1: <p><br /></p> to <p></p>\n// case 2: <p><br /><focus /></p> to <p><focus /></p>\n// case 3: <p><focus /><br /></p> to <p><focus /></p>\nexport function removeBreak(block: Nodes): void {\n if (block.length === 0) {\n return;\n }\n const nodeList: Nodes[] = [];\n let child = block.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (!child.isText || child.text() !== '') {\n nodeList.push(child);\n }\n child = nextNode;\n }\n if (\n (nodeList.length === 1 && nodeList[0].name === 'br')\n || (nodeList.length === 2 && nodeList[0].name === 'br' && nodeList[1].isBookmark)\n ) {\n nodeList[0].remove();\n }\n if (nodeList.length === 2 && nodeList[0].isBookmark && nodeList[1].name === 'br') {\n nodeList[1].remove();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { query } from './query';\n\n// Appends a line break to the end of the specified block.\n// Example:\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><br /></p> to <p><br /></p>\n// case 3: <p>foo</p> to <p>foo<br /></p>\n// case 4: <ul><li></li></ul> to <ul><li><br /></li></ul>\n// case 5: <p><focus /></p> to <p><focus /><br /></p>\nexport function appendBreak(block: Nodes): Nodes {\n const breakNode = query('<br />');\n let child = block;\n while (child.isBlock) {\n let lastChild = child.last();\n while (lastChild.isText && lastChild.isEmpty) {\n lastChild = lastChild.prev();\n }\n if (!lastChild.isBlock && lastChild.name !== 'br') {\n child.append(breakNode);\n break;\n }\n child = lastChild;\n }\n return breakNode;\n}\n","import type { Nodes } from '../models/nodes';\nimport { appendBreak } from './append-break';\nimport { removeBreak } from './remove-break';\nimport { Range } from '../models/range';\n\n// Returns a point after the specified node.\nfunction getAfterPoint(node: Nodes): { node: Nodes, offset: number } {\n if (node.isText) {\n return {\n node,\n offset: node.text().length,\n };\n }\n const range = new Range();\n range.setEndAfter(node);\n return {\n node: range.endNode,\n offset: range.endOffset,\n };\n}\n\n// Merges two nodes into one node.\n// Case 1:\n// <p><strong><i>foo</i></strong></p>\n// <p>|bar</p>\n// to\n// <p><strong><i>foo</i></strong>|bar</p>\n//\n// Case 2:\n// <p><strong><i>foo</i></strong></p>\n// <p>|<strong><i>bar</i></strong></p>\n// to\n// <p><strong><i>foo|bar</i></strong></p>\nexport function mergeNodes(node: Nodes, otherNode: Nodes): { node: Nodes, offset: number } {\n const originalOtherNode = otherNode;\n if (['ul', 'ol'].indexOf(node.name) >= 0) {\n const list = node.find('li');\n node = list.eq(list.length - 1);\n }\n if (['ul', 'ol'].indexOf(otherNode.name) >= 0) {\n const list = otherNode.find('li');\n otherNode = list.eq(0);\n }\n if (node.isText || otherNode.isText || node.isVoid || otherNode.isVoid) {\n return getAfterPoint(node);\n }\n removeBreak(node);\n removeBreak(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendBreak(node);\n }\n const nextNode = node.last();\n const nextOtherNode = otherNode.first();\n let child = nextOtherNode;\n while (child.length > 0) {\n const next = child.next();\n node.append(child);\n child = next;\n }\n originalOtherNode.remove();\n if (\n nextNode.length > 0\n && nextOtherNode.length > 0\n && nextNode.isElement\n && !nextNode.isBox\n && nextNode.clone(false).get(0).isEqualNode(nextOtherNode.clone(false).get(0))\n ) {\n return mergeNodes(nextNode, nextOtherNode);\n }\n if (nextNode.length === 0) {\n return {\n node,\n offset: 0,\n };\n }\n return getAfterPoint(nextNode);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Fixes incorrect number for numbered list.\nexport function fixNumberedList(blocks: Nodes[]): void {\n if (blocks.length === 0) {\n return;\n }\n const firstBlock = blocks[0];\n const lastBlock = blocks[blocks.length - 1];\n const targetBlocks: Nodes[] = [];\n // to find all numbered list before current blocks\n let prevNode = firstBlock.prev();\n while (prevNode.length > 0) {\n if (prevNode.name !== 'ol') {\n break;\n }\n targetBlocks.push(prevNode);\n prevNode = prevNode.prev();\n }\n targetBlocks.reverse();\n targetBlocks.push(...blocks);\n // to find all numbered list after current blocks\n let nextNode = lastBlock.next();\n while (nextNode.length > 0) {\n if (nextNode.name !== 'ol') {\n break;\n }\n targetBlocks.push(nextNode);\n nextNode = nextNode.next();\n }\n // to reset start number\n let index = 1;\n for (const block of targetBlocks) {\n const prev = block.prev();\n if (prev.length === 0 || prev.name !== 'ol') {\n index = 1;\n }\n if (block.name === 'ol') {\n if (prev.name === 'ol' && prev.attr('indent') !== block.attr('indent')) {\n index = 1;\n }\n const currentStart = block.attr('start');\n const expectedStart = index.toString(10);\n if (currentStart !== expectedStart) {\n block.attr('start', expectedStart);\n }\n index++;\n }\n }\n}\n","import { appendBreak } from '../utils/append-break';\nimport { mergeNodes } from '../utils/merge-nodes';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\n/**\n * Removes the contents of the specified range.\n */\nexport function deleteContents(range: Range): void {\n if (range.isCollapsed) {\n return;\n }\n range.adjustBox();\n range.adjustTable();\n if (range.isInoperative) {\n return;\n }\n const startBlock = range.startNode.closestBlock();\n const endBlock = range.endNode.closestBlock();\n const noMerge = startBlock.get(0) === endBlock.get(0);\n const nativeRange = range.get();\n nativeRange.deleteContents();\n range.adjustBlock();\n if (noMerge) {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const prevBlock = block.prev();\n if (prevBlock.length === 0) {\n return;\n }\n const bookmark = insertBookmark(range);\n mergeNodes(prevBlock, block);\n fixNumberedList([prevBlock]);\n toBookmark(range, bookmark);\n}\n","import { removeBreak } from '../utils/remove-break';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Fragment } from '../models/fragment';\nimport { deleteContents } from './delete-contents';\n\n/**\n * Inserts the specified contents into the range.\n */\nexport function insertContents(range: Range, contents: string | Node | DocumentFragment | Nodes | Fragment): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let fragment: Fragment;\n if (contents instanceof Fragment) {\n fragment = contents;\n } else if (contents instanceof DocumentFragment) {\n fragment = new Fragment(contents);\n } else {\n fragment = new Fragment();\n fragment.append(contents);\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const block = range.startNode.closestBlock();\n removeBreak(block);\n const nativeRange = range.get();\n nativeRange.insertNode(fragment.get());\n nativeRange.collapse(false);\n range.adjustBlock();\n}\n","import type { Nodes } from '../models/nodes';\n\n// Returns the deepest element of the specified element.\nexport function getDeepElement(element: Nodes): Nodes {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n if (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n break;\n }\n child = firstChild;\n }\n return child;\n}\n","import type { Nodes } from '../models/nodes';\nimport { getDeepElement } from './get-deep-element';\nimport { query } from './query';\n\n// Appends a list of nodes to the specified element.\nexport function wrapNodeList(nodeList: Nodes[], wrapper?: Nodes): Nodes {\n wrapper = wrapper ?? query('<p />');\n if (nodeList.length === 0) {\n return wrapper;\n }\n wrapper = wrapper.clone(true);\n const deepestElement = getDeepElement(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import { KeyValue } from '../types/object';\nimport { query } from '../utils/query';\nimport { getDeepElement } from '../utils/get-deep-element';\nimport { wrapNodeList } from '../utils/wrap-node-list';\nimport { appendBreak } from '../utils/append-break';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\nfunction getTopNonBlockNodes(range: Range): Nodes[] {\n const container = range.commonAncestor.closest('div[contenteditable=\"true\"],td');\n let nodeList: Nodes[] = [];\n if (container.length === 0) {\n return nodeList;\n }\n let node = container.first();\n let isBeforeRange = true;\n while (node.length > 0) {\n if (node.isMark || node.isText || node.isBookmark || node.isInlineBox) {\n nodeList.push(node);\n } else {\n if (!isBeforeRange) {\n break;\n }\n nodeList = [];\n }\n if (range.intersectsNode(node)) {\n isBeforeRange = false;\n }\n node = node.next();\n }\n return nodeList;\n}\n\n/**\n * Adds new blocks or changes the target blocks in the specified range.\n */\nexport function setBlocks(range: Range, value: string | KeyValue): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n if (range.isCollapsed) {\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.isBlockBox) {\n return;\n }\n }\n // changes the attributes of target blocks\n if (typeof value !== 'string') {\n const blockList = range.getBlocks();\n for (const block of blockList) {\n block.css(value);\n }\n return;\n }\n // adds or replace blocks\n const valueNode = query(value);\n const tagName = valueNode.name;\n const nativeValueNode = valueNode.get(0) as Element;\n const attributes = nativeValueNode.attributes;\n const blockList = range.getBlocks();\n // has blocks\n if (blockList.length > 0) {\n const bookmark = insertBookmark(range);\n for (const node of blockList) {\n if (node.name === tagName && valueNode.first().length === 0) {\n for (const attr of attributes) {\n node.attr(attr.name, attr.value);\n }\n } else {\n const block = valueNode.clone(true);\n if (block.isList && node.isList && node.attr('indent') !== '') {\n block.attr('indent', node.attr('indent'));\n }\n const deepestBlock = getDeepElement(block);\n let child = node.first();\n while (child.length > 0) {\n const nextNode = child.next();\n deepestBlock.append(child);\n if (deepestBlock.name === child.name || child.name === 'li') {\n child.remove(true);\n }\n child = nextNode;\n }\n node.replaceWith(block);\n }\n }\n toBookmark(range, bookmark);\n fixNumberedList(range.getBlocks());\n return;\n }\n // no block\n if (range.isCollapsed) {\n const nextNode = range.getNextNode();\n if (nextNode.name === 'br') {\n const newBlock = query('<p><br /></p>');\n nextNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.name === 'br') {\n const newBlock = query('<p><br /></p>');\n prevNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n return;\n }\n }\n const bookmark = insertBookmark(range);\n const nonBlockNodes = getTopNonBlockNodes(range);\n const block = wrapNodeList(nonBlockNodes, valueNode);\n toBookmark(range, bookmark);\n fixNumberedList(range.getBlocks());\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Splits nodes upwards according to the position until a limiting element is encountered.\n// Case 1:\n// <p><strong><i>foo|bar</i></strong></p>\n// to\n// <p><strong><i>foo</i></strong>|<strong><i>bar</i></strong></p>\n//\n// Case 2:\n// <p><strong>beginning<i>one|two</i>end</strong></p>\n// to\n// <p><strong>beginning<i>one</i></strong>|<strong><i>two</i>end</strong></p>\nexport function splitNodes(node: Nodes, offset: number, limitNode: Nodes): { start: Nodes, end: Nodes } | null {\n const range = new Range();\n let parent;\n if (node.isText) {\n parent = node.parent();\n const newNode = node.splitText(offset);\n range.setStartAfter(node);\n if (node.text() === '') {\n node.remove();\n }\n if (newNode.text() === '') {\n newNode.remove();\n }\n } else {\n range.setStart(node, offset);\n parent = node;\n }\n if (parent.name === 'body' || parent.name === 'html') {\n return null;\n }\n if (parent.get(0) === limitNode.get(0)) {\n return null;\n }\n range.collapseToStart();\n const startPart = parent.clone();\n let child = parent.first();\n while (child.length > 0) {\n if (range.compareBeforeNode(child) >= 0) {\n break;\n }\n const nextNode = child.next();\n startPart.append(child);\n child = nextNode;\n }\n parent.before(startPart);\n if (parent.parent().length > 0 && parent.parent().get(0) !== limitNode.get(0)) {\n return splitNodes(parent.parent(), parent.index(), limitNode);\n }\n return {\n start: startPart,\n end: parent,\n };\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes empty marks that contain no content in the specified node.\nexport function removeEmptyMarks(node: Nodes): void {\n if (node.isMark && node.isEmpty) {\n node.remove();\n return;\n }\n for (const child of node.getWalker()) {\n if (child.isMark && child.isEmpty) {\n child.remove();\n }\n }\n}\n","import { TwoParts } from '../types/node';\nimport { splitNodes } from '../utils/split-nodes';\nimport { appendBreak } from '../utils/append-break';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { fixNumberedList } from '../utils/fix-numbered-list';\nimport { Range } from '../models/range';\nimport { deleteContents } from './delete-contents';\n\n/**\n * Removes the contents of the specified range and then splits the block node at the point of the collapsed range.\n */\n// <p>one<anchor />two<focus />three</p>\n// to\n// <p>one</p>\n// <p><focus />three</p>\nexport function splitBlock(range: Range): TwoParts {\n if (range.commonAncestor.isOutside) {\n return {\n start: null,\n end: null,\n };\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const node = range.startNode;\n const closestBlock = node.closestOperableBlock();\n if (closestBlock.length === 0) {\n return {\n start: null,\n end: null,\n };\n }\n let limitBlock = closestBlock.parent();\n if (limitBlock.isOutside) {\n limitBlock = node.closestContainer();\n }\n const parts = splitNodes(node, range.startOffset, limitBlock);\n let start = null;\n let end = null;\n if (parts) {\n start = parts.start;\n end = parts.end;\n }\n if (!parts && node.isBlock) {\n if (range.startOffset > 0) {\n start = node.children()[range.startOffset - 1];\n }\n end = node.children()[range.startOffset];\n if (end && !end.isBlock) {\n end = null;\n }\n }\n if (start && start.isEmpty) {\n removeEmptyMarks(start);\n appendBreak(start);\n }\n if (end) {\n if (end.isEmpty) {\n removeEmptyMarks(end);\n appendBreak(end);\n }\n range.shrinkBefore(end);\n }\n fixNumberedList(range.getBlocks());\n return {\n start,\n end,\n };\n}\n","import { query } from '../utils/query';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertContents } from './insert-contents';\nimport { splitBlock } from './split-block';\n\n/**\n * Inserts a block into the specified range.\n */\nexport function insertBlock(range: Range, value: string | Nodes): Nodes | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const block = query(value);\n const parts = splitBlock(range);\n if (parts.start) {\n removeEmptyMarks(parts.start);\n range.setEndAfter(parts.start);\n range.collapseToEnd();\n }\n if (parts.end) {\n removeEmptyMarks(parts.end);\n if (parts.end.isEmpty) {\n parts.end.remove();\n }\n }\n insertContents(range, block);\n if (!block.isBox) {\n range.shrinkAfter(block);\n }\n if (parts.start && parts.start.isEmpty) {\n parts.start.remove();\n }\n return block;\n}\n","import { TwoParts, ThreeParts } from '../types/node';\nimport { splitNodes } from '../utils/split-nodes';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n/**\n * Splits text nodes or mark nodes.\n */\nfunction splitMarksAtPoint(node: Nodes, offset: number, removeEmptyMark: boolean): TwoParts {\n let start = null;\n let end = null;\n let limitBlock = node.closestBlock();\n if (limitBlock.length === 0) {\n limitBlock = node.closestContainer();\n }\n const parts = splitNodes(node, offset, limitBlock);\n if (parts) {\n if (removeEmptyMark) {\n removeEmptyMarks(parts.start);\n removeEmptyMarks(parts.end);\n if (!parts.start.isEmpty) {\n start = parts.start;\n }\n if (!parts.end.isEmpty) {\n end = parts.end;\n }\n } else {\n start = parts.start;\n end = parts.end;\n }\n }\n return {\n start,\n end,\n };\n}\n\n// Splits text nodes or mark nodes.\n// <p><strong>one<anchor />two<focus />three</strong></p>\n// to\n// <p><strong>one</strong><strong><anchor />two<focus /></strong><strong>three</strong></p>\nexport function splitMarks(range: Range, removeEmptyMark = true): ThreeParts {\n if (range.commonAncestor.isOutside) {\n return {\n start: null,\n center: null,\n end: null,\n };\n }\n range.adjustBox();\n if (range.isCollapsed) {\n const parts = splitMarksAtPoint(range.startNode, range.startOffset, removeEmptyMark);\n if (parts.start) {\n range.setStartAfter(parts.start);\n range.collapseToStart();\n } else if (parts.end) {\n range.setStartBefore(parts.end);\n range.collapseToStart();\n }\n return {\n start: parts.start,\n center: null,\n end: parts.end,\n };\n }\n const startParts = splitMarksAtPoint(range.startNode, range.startOffset, removeEmptyMark);\n if (startParts.start) {\n range.setStartAfter(startParts.start);\n } else if (startParts.end) {\n range.setStartBefore(startParts.end);\n }\n const endParts = splitMarksAtPoint(range.endNode, range.endOffset, removeEmptyMark);\n if (endParts.start) {\n range.setEndAfter(endParts.start);\n } else if (endParts.end) {\n range.setEndBefore(endParts.end);\n }\n return {\n start: startParts.start,\n center: endParts.start,\n end: endParts.end,\n };\n}\n","import { parseStyle } from '../utils/parse-style';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { getDeepElement } from '../utils/get-deep-element';\nimport { removeBreak } from '../utils/remove-break';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { splitMarks } from './split-marks';\nimport { insertContents } from './insert-contents';\n\n/**\n * Removes zero-width space at the beginning or end of the specified node.\n */\nfunction removePreviousOrNextZWS(node: Nodes): void {\n const prevNode = node.prev();\n if (prevNode.length > 0 && prevNode.isText && prevNode.isEmpty) {\n prevNode.remove();\n }\n const nextNode = node.next();\n if (nextNode.length > 0 && nextNode.isText && nextNode.isEmpty) {\n nextNode.remove();\n }\n}\n\n/**\n * Returns a nested mark copied from ancestors of the specified node.\n */\nfunction getNestedMark(node: Nodes): Nodes | null {\n let parent = node;\n if (parent.isText) {\n parent = parent.parent();\n }\n let mark: Nodes | null = null;\n while (parent.length > 0) {\n if (!parent.isMark) {\n break;\n }\n if (mark) {\n const newMark = parent.clone();\n newMark.append(mark);\n mark = newMark;\n } else {\n mark = parent.clone();\n }\n parent = parent.parent();\n }\n return mark;\n}\n\n/**\n * Returns the topmost mark element or the closest element with the same tag name as the specified node.\n */\nfunction getUpperMark(node: Nodes, tagName: string): Nodes {\n const nodeText = node.text();\n let parent = node;\n while (parent.length > 0) {\n const nextParent = parent.parent();\n if (\n !nextParent.isMark\n || nodeText !== nextParent.text()\n || (!parent.isText && parent.name === tagName && parent.attr('style') !== '')\n ) {\n break;\n }\n parent = nextParent;\n }\n return parent;\n}\n\n/**\n * Adds the specified mark to the texts of the range.\n */\nexport function addMark(range: Range, value: string | Nodes): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let valueNode = query(value);\n const tagName = valueNode.name;\n const styleValue = valueNode.attr('style');\n const cssProperties = parseStyle(styleValue);\n if (range.isCollapsed) {\n if (range.isBox) {\n const boxNode = range.startNode.closest('lake-box');\n const box = getBox(boxNode);\n if (box.type === 'block') {\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else {\n boxNode.after(newBlock);\n }\n range.shrinkAfter(newBlock);\n } else {\n range.adjustBox();\n }\n }\n const block = range.startNode.closestBlock();\n removeBreak(block);\n // https://en.wikipedia.org/wiki/Zero-width_space\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const newMark = getNestedMark(range.startNode);\n splitMarks(range);\n if (newMark) {\n let child = newMark;\n while (child.length > 0) {\n if (child.name === tagName) {\n child.css(cssProperties);\n }\n child = child.first();\n }\n if (newMark.name === tagName) {\n valueNode = newMark;\n } else {\n valueNode.append(newMark);\n }\n }\n if (valueNode.text() === '') {\n const deepestMark = getDeepElement(valueNode);\n deepestMark.append(zeroWidthSpace);\n }\n insertContents(range, valueNode);\n removePreviousOrNextZWS(valueNode);\n range.shrinkAfter(valueNode);\n return;\n }\n splitMarks(range);\n const nodeList = range.getMarks(true);\n const bookmark = insertBookmark(range);\n for (const node of nodeList) {\n if (!node.isEmpty) {\n if (node.isText) {\n const upperMark = getUpperMark(node, tagName);\n if (upperMark.isMark && upperMark.name === tagName) {\n upperMark.css(cssProperties);\n } else {\n const newValueNode = valueNode.clone();\n upperMark.before(newValueNode);\n newValueNode.append(upperMark);\n }\n }\n }\n }\n toBookmark(range, bookmark);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes Zero-width spaces from text nodes.\nexport function removeZWS(node: Nodes): void {\n for (const child of node.getWalker()) {\n if (child.isText) {\n const text = child.text();\n if (text === '') {\n child.remove();\n } else if (text.length > 1) {\n if (/\\u200B/.test(text)) {\n child.get(0).nodeValue = text.replace(/\\u200B/g, '');\n }\n }\n }\n }\n}\n","import { getDeepElement } from '../utils/get-deep-element';\nimport { query } from '../utils/query';\nimport { removeZWS } from '../utils/remove-zws';\nimport { removeEmptyMarks } from '../utils/remove-empty-marks';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { splitMarks } from './split-marks';\n\n/**\n * Returns a nested mark copied from each last child of the descendants of the specified node.\n */\nfunction getNestedMark(node: Nodes, tagName?: string): Nodes | null {\n if (!node.isMark || !tagName) {\n return null;\n }\n let mark: Nodes | null = null;\n let deepestMark: Nodes | null = null;\n let child = node;\n while (child.length > 0) {\n if (!child.isMark) {\n break;\n }\n if (child.name !== tagName) {\n if (deepestMark) {\n const newMark = child.clone();\n deepestMark.append(newMark);\n deepestMark = newMark;\n } else {\n mark = child.clone();\n deepestMark = mark;\n }\n }\n child = child.last();\n }\n return mark;\n}\n\n/**\n * Removes the specified marks in the range.\n */\nexport function removeMark(range: Range, value?: string): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let tagName;\n if (value) {\n const valueNode = query(value);\n tagName = valueNode.name;\n }\n if (range.isCollapsed) {\n if (range.isBox) {\n return;\n }\n if (tagName && range.commonAncestor.closest(tagName).length === 0) {\n return;\n }\n const parts = splitMarks(range, false);\n if (!parts.start) {\n return;\n }\n if (parts.end) {\n removeEmptyMarks(parts.end);\n }\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const newMark = getNestedMark(parts.start, tagName);\n if (!newMark) {\n parts.start.after(zeroWidthSpace);\n removeEmptyMarks(parts.start);\n if (zeroWidthSpace.prev().isText) {\n range.setStartAfter(zeroWidthSpace.prev());\n range.collapseToStart();\n zeroWidthSpace.remove();\n return;\n }\n range.setStartAfter(zeroWidthSpace);\n range.collapseToStart();\n return;\n }\n const deepestMark = getDeepElement(newMark);\n deepestMark.append(zeroWidthSpace);\n parts.start.after(newMark);\n removeEmptyMarks(parts.start);\n range.shrinkAfter(newMark);\n return;\n }\n splitMarks(range);\n const marks = range.getMarks();\n const bookmark = insertBookmark(range);\n for (const mark of marks) {\n if (!tagName || mark.name === tagName) {\n const parentNode = mark.parent();\n mark.remove(!mark.isEmpty);\n if (parentNode.length > 0) {\n parentNode.get(0).normalize();\n }\n }\n }\n removeZWS(range.commonAncestor);\n toBookmark(range, bookmark);\n}\n","import { BoxValue } from '../types/box';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { query } from '../utils/query';\nimport { splitMarks } from './split-marks';\nimport { insertContents } from './insert-contents';\nimport { insertBlock } from './insert-block';\n\n/**\n * Inserts a box into the specified range.\n */\nexport function insertBox(range: Range, boxName: string, boxValue?: BoxValue): Box | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const box = getBox(boxName);\n if (boxValue) {\n box.value = boxValue;\n }\n // inline box\n if (box.type === 'inline') {\n splitMarks(range);\n insertContents(range, box.node);\n box.render();\n if (box.node.isTopInside) {\n const block = query('<p />');\n box.node.before(block);\n block.append(box.node);\n }\n range.selectBoxEnd(box.node);\n // move the box instance from temporary map to permanent map\n return getBox(box.node);\n }\n // block box\n insertBlock(range, box.node);\n box.render();\n range.selectBoxEnd(box.node);\n // move the box instance from temporary map to permanent map\n return getBox(box.node);\n}\n","import { getInstanceMap } from '../storage/box-instances';\nimport { appendBreak } from '../utils/append-break';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\n\nfunction unmountBox(box: Box): Box {\n const container = box.node.closestContainer();\n box.unmount();\n box.node.remove();\n if (container.length > 0) {\n // move the box instance from permanent map to temporary map\n const instanceMap = getInstanceMap(container.id);\n instanceMap.delete(box.node.id);\n const tempInstanceMap = getInstanceMap(0);\n tempInstanceMap.set(box.node.id, box);\n }\n return box;\n}\n\n/**\n * Removes a box that contains the specified range.\n */\nexport function removeBox(range: Range): Box | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return null;\n }\n const box = getBox(boxNode);\n if (box.type === 'block') {\n const paragraph = query('<p><br /></p>');\n boxNode.before(paragraph);\n range.shrinkAfter(paragraph);\n return unmountBox(box);\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n const parentNode = boxNode.parent();\n unmountBox(box);\n if (parentNode.isEmpty) {\n const breakNode = appendBreak(parentNode);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return box;\n}\n","// Converts the custom HTML tags to the special tags that can not be parsed by browser.\nexport function denormalizeValue(value: string): string {\n return value\n .replace(/(<lake-box[^>]+>)[\\s\\S]*?(<\\/lake-box>)/gi, '$1$2')\n .replace(/<lake-bookmark\\s+type=\"anchor\">\\s*<\\/lake-bookmark>/gi, '<anchor />')\n .replace(/<lake-bookmark\\s+type=\"focus\">\\s*<\\/lake-bookmark>/gi, '<focus />');\n}\n","// Converts the special tags to ordinary HTML tags that can be parsed by browser.\nexport function normalizeValue(value: string): string {\n return value\n .replace(/(<lake-box[^>]+>)[\\s\\S]*?(<\\/lake-box>|$)/gi, '$1</lake-box>')\n .replace(/<anchor\\s*\\/>/gi, '<lake-bookmark type=\"anchor\"></lake-bookmark>')\n .replace(/<focus\\s*\\/>/gi, '<lake-bookmark type=\"focus\"></lake-bookmark>');\n}\n","import { visibleInfo } from './visible-info';\nimport { Nodes } from '../models/nodes';\n\n// If the specified node is not visible, scrolls the container that contains the node to its position to make it visible.\nexport function scrollToNode(node: Nodes, options?: ScrollIntoViewOptions): void {\n const visible = visibleInfo(node);\n if (\n visible.left !== 0\n || visible.right !== 0\n || visible.top !== 0\n || visible.bottom !== 0\n ) {\n (node.get(0) as Element).scrollIntoView(options);\n }\n}\n","import { KeyValue } from '../types/object';\nimport { NativeSelection } from '../types/native';\nimport { ActiveItem } from '../types/selection';\nimport { parseStyle } from '../utils/parse-style';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { insertBookmark } from '../operations/insert-bookmark';\nimport { toBookmark } from '../operations/to-bookmark';\nimport { insertContents } from '../operations/insert-contents';\nimport { deleteContents } from '../operations/delete-contents';\nimport { setBlocks } from '../operations/set-blocks';\nimport { splitBlock } from '../operations/split-block';\nimport { insertBlock } from '../operations/insert-block';\nimport { splitMarks } from '../operations/split-marks';\nimport { addMark } from '../operations/add-mark';\nimport { removeMark } from '../operations/remove-mark';\nimport { insertBox } from '../operations/insert-box';\nimport { removeBox } from '../operations/remove-box';\n\n/**\n * Returns a key-value object of all attributes of the specified element.\n */\nfunction getAttributes(element: Nodes): KeyValue {\n const nativeElement = element.get(0) as Element;\n const attributes: KeyValue = {};\n if (nativeElement.hasAttributes()) {\n for (const attr of nativeElement.attributes) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n}\n\nfunction appendAncestralNodes(activeItems: ActiveItem[], range: Range): void {\n let parentNode = range.startNode;\n if (parentNode.isText) {\n parentNode = parentNode.parent();\n }\n while (parentNode.length > 0) {\n if (!parentNode.isContentEditable || parentNode.isContainer) {\n break;\n }\n activeItems.push({\n node: parentNode,\n name: parentNode.name,\n attributes: getAttributes(parentNode),\n styles: parseStyle(parentNode.attr('style')),\n });\n parentNode = parentNode.parent();\n }\n}\n\nfunction appendNextNestedNodes(activeItems: ActiveItem[], range: Range): void {\n const startNode = range.startNode;\n let nextNode;\n if (startNode.isText && startNode.text().length === range.startOffset) {\n const node = startNode.next();\n if (node.length > 0 && node.isElement) {\n nextNode = node;\n }\n }\n if (startNode.isElement) {\n const children = startNode.children();\n if (children.length > 0) {\n const node = children[range.startOffset];\n if (node && node.isElement) {\n nextNode = node;\n }\n }\n }\n if (nextNode) {\n let child = nextNode;\n while (child.length > 0) {\n if (child.isElement) {\n activeItems.push({\n node: child,\n name: child.name,\n attributes: getAttributes(child),\n styles: parseStyle(child.attr('style')),\n });\n }\n child = child.first();\n }\n }\n}\n\n/**\n * The Selection interface represents the range of content selected by the user or the current cursor position.\n */\nexport class Selection {\n /**\n * A native Selection object.\n */\n private readonly selection: NativeSelection;\n\n /**\n * A contenteditable element where users can edit the content.\n */\n public readonly container: Nodes;\n\n /**\n * A Range object that can be added to the native selection later.\n */\n public range: Range;\n\n constructor(container: Nodes) {\n const selection = window.getSelection();\n // When called on an <iframe> that is not displayed (e.g., where 'display: none' is set) Firefox will return null,\n // whereas other browsers will return a selection object with Selection.type set to None.\n if (!selection) {\n throw new Error('Selection object is null.');\n }\n this.selection = selection;\n this.container = container;\n this.range = this.getCurrentRange();\n }\n\n /**\n * Returns a Range object that is currently selected.\n */\n public getCurrentRange(): Range {\n if (this.selection.rangeCount > 0) {\n const range = this.selection.getRangeAt(0);\n return new Range(range);\n }\n return new Range();\n }\n\n /**\n * Adds the selection.range to the native selection.\n */\n public sync(): void {\n if (!this.container.contains(this.range.commonAncestor)) {\n return;\n }\n this.selection.removeAllRanges();\n this.selection.addRange(this.range.get());\n }\n\n /**\n * Replaces the selection.range with the range of the native selection.\n */\n public updateByRange(): void {\n const newRange = this.getCurrentRange();\n if (!this.container.contains(newRange.commonAncestor)) {\n return;\n }\n if (\n this.range.startNode.get(0) === newRange.startNode.get(0)\n && this.range.startOffset === newRange.startOffset\n && this.range.endNode.get(0) === newRange.endNode.get(0)\n && this.range.endOffset === newRange.endOffset\n ) {\n return;\n }\n this.range = newRange;\n }\n\n /**\n * Replaces the selection.range with the range represented by the bookmark.\n */\n public updateByBookmark(): void {\n const range = this.range;\n const container = this.container;\n const boxFocus = container.find('lake-box[focus]');\n if (boxFocus.length > 0) {\n toBookmark(range, {\n anchor: new Nodes(),\n focus: boxFocus,\n });\n this.sync();\n return;\n }\n const anchor = container.find('lake-bookmark[type=\"anchor\"]');\n const focus = container.find('lake-bookmark[type=\"focus\"]');\n toBookmark(range, {\n anchor,\n focus,\n });\n this.sync();\n }\n\n /**\n * Returns a list of items related to the current selection.\n */\n public getActiveItems(): ActiveItem[] {\n const activeItems: ActiveItem[] = [];\n appendAncestralNodes(activeItems, this.range);\n appendNextNestedNodes(activeItems, this.range);\n return activeItems;\n }\n\n /**\n * Inserts a bookmark at the cursor position or a pair of bookmarks at the selection boundaries.\n */\n public insertBookmark(): ReturnType<typeof insertBookmark> {\n return insertBookmark(this.range);\n }\n\n /**\n * Changes selection.range to the range represented by the provided bookmark.\n */\n public toBookmark(bookmark: Parameters<typeof toBookmark>[1]): ReturnType<typeof toBookmark> {\n return toBookmark(this.range, bookmark);\n }\n\n /**\n * Inserts the specified content into the selection.\n */\n public insertContents(contents: Parameters<typeof insertContents>[1]): ReturnType<typeof insertContents> {\n return insertContents(this.range, contents);\n }\n\n /**\n * Removes the contents of the selection.\n */\n public deleteContents(): ReturnType<typeof deleteContents> {\n return deleteContents(this.range);\n }\n\n /**\n * Adds new blocks or changes the target blocks in the selection.\n */\n public setBlocks(value: Parameters<typeof setBlocks>[1]): ReturnType<typeof setBlocks> {\n return setBlocks(this.range, value);\n }\n\n /**\n * Removes the contents of the selection and splits the block node at the cursor position.\n */\n public splitBlock(): ReturnType<typeof splitBlock> {\n return splitBlock(this.range);\n }\n\n /**\n * Inserts a block into the selection.\n */\n public insertBlock(value: Parameters<typeof insertBlock>[1]): ReturnType<typeof insertBlock> {\n return insertBlock(this.range, value);\n }\n\n /**\n * Splits text nodes or mark nodes.\n */\n public splitMarks(removeEmptyMark?: Parameters<typeof splitMarks>[1]): ReturnType<typeof splitMarks> {\n return splitMarks(this.range, removeEmptyMark);\n }\n\n /**\n * Adds the specified mark to the selected text.\n */\n public addMark(value: Parameters<typeof addMark>[1]): ReturnType<typeof addMark> {\n return addMark(this.range, value);\n }\n\n /**\n * Removes specified marks from the selection.\n */\n public removeMark(value?: Parameters<typeof removeMark>[1]): ReturnType<typeof removeMark> {\n return removeMark(this.range, value);\n }\n\n /**\n * Collapses the selection to the center position of the specified box.\n */\n public selectBox(box: Box | Nodes): void {\n let boxNode = box;\n if (box instanceof Box) {\n boxNode = box.node;\n } else {\n boxNode = box;\n }\n this.range.selectBox(boxNode);\n this.sync();\n }\n\n /**\n * Inserts a box into the selection.\n */\n public insertBox(boxName: Parameters<typeof insertBox>[1], boxValue?: Parameters<typeof insertBox>[2]): Box {\n const box = insertBox(this.range, boxName, boxValue);\n if (!box) {\n throw new Error(`Box \"${boxName}\" cannot be inserted into the outside of the editor.`);\n }\n return box;\n }\n\n /**\n * Removes the specified box. If no parameter is given, the selected box is removed.\n */\n public removeBox(box: Box | Nodes | null = null): ReturnType<typeof removeBox> {\n if (box) {\n this.selectBox(box);\n }\n return removeBox(this.range);\n }\n}\n","import { CommandItem } from '../types/command';\nimport { debug } from '../utils/debug';\nimport { Selection } from './selection';\n\n/**\n * The Command interface manages a collection of commands.\n */\nexport class Command {\n private readonly selection: Selection;\n\n private readonly commandMap = new Map<string, CommandItem>();\n\n constructor(selection: Selection) {\n this.selection = selection;\n }\n\n /**\n * Adds a new command to the collection.\n */\n public add(name: string, commandItem: CommandItem): void {\n this.commandMap.set(name, commandItem);\n }\n\n /**\n * Removes a command from the collection by its name.\n */\n public delete(name: string): void {\n this.commandMap.delete(name);\n }\n\n /**\n * Returns the names of all registered commands.\n */\n public getNames(): string[] {\n return Array.from(this.commandMap.keys());\n }\n\n /**\n * Checks whether the specified command exists.\n */\n public has(name: string): boolean {\n return this.commandMap.get(name) !== undefined;\n }\n\n /**\n * Returns a command item by its name.\n */\n public getItem(name: string): CommandItem {\n const commandItem = this.commandMap.get(name);\n if (commandItem === undefined) {\n throw new Error(`Command \"${name}\" has not been defined yet.`);\n }\n return commandItem;\n }\n\n /**\n * Checks if the specified command is disabled.\n */\n public isDisabled(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isDisabled) {\n return false;\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.isDisabled(activeItems);\n }\n\n /**\n * Checks if the specified command is selected.\n */\n public isSelected(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isSelected) {\n return false;\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.isSelected(activeItems);\n }\n\n /**\n * Returns the selected values for the specified command.\n */\n public selectedValues(name: string): string[] {\n const commandItem = this.getItem(name);\n if (!commandItem.selectedValues) {\n return [];\n }\n const activeItems = this.selection.getActiveItems();\n return commandItem.selectedValues(activeItems);\n }\n\n /**\n * Executes the specified command.\n */\n public execute(name: string, ...data: any[]): void {\n const container = this.selection.container;\n const range = this.selection.range;\n if (!container.contains(range.commonAncestor)) {\n range.shrinkAfter(container);\n }\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\n}\n","/*\nBSD 2-Clause License\n\nCopyright (c) 2022, Big Sky Software\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n this list of conditions and the following disclaimer in the documentation\n and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nRepository: https://github.com/bigskysoftware/idiomorph\n*/\n\n/* eslint-disable no-throw-literal */\n/* eslint-disable antfu/if-newline */\n\nimport type { Nodes } from '../models/nodes';\n\ndeclare global {\n interface Node {\n generatedByIdiomorph: boolean;\n }\n}\n\ndeclare interface configType {\n morphStyle?: 'innerHTML' | 'outerHTML';\n ignoreActive?: boolean;\n ignoreActiveValue?: boolean;\n head?: {\n style?: 'merge' | 'append' | 'morph' | 'none';\n };\n callbacks?: {\n beforeNodeAdded?: (node: Node) => void | boolean;\n afterNodeAdded?: (node: Node) => void;\n beforeNodeMorphed?: (oldNode: Node, newNode: Node) => void | boolean;\n afterNodeMorphed?: (oldNode: Node, newNode: Node) => void;\n beforeNodeRemoved?: (node: Node) => void | boolean;\n afterNodeRemoved?: (node: Node) => void;\n beforeAttributeUpdated?: (attributeName: string, node: Node, mutationType: string) => void | boolean;\n afterAttributeUpdated?: (attributeName: string, node: Node, mutationType: string) => void;\n beforeChildrenUpdated?: (oldNode: Node, newNode: Node) => void | boolean;\n };\n}\n\ntype KeyValue = Record<string, any>;\n\nconst EMPTY_SET = new Set();\n\nfunction noOp() {}\n\n// default configuration values, updatable by users now\nconst defaults = {\n morphStyle: 'outerHTML',\n callbacks: {\n beforeNodeAdded: noOp,\n afterNodeAdded: noOp,\n beforeNodeMorphed: noOp,\n afterNodeMorphed: noOp,\n beforeNodeRemoved: noOp,\n afterNodeRemoved: noOp,\n beforeAttributeUpdated: noOp,\n afterAttributeUpdated: noOp,\n beforeChildrenUpdated: noOp,\n\n },\n head: {\n style: 'merge',\n shouldPreserve: (elt: Element) => elt.getAttribute('im-preserve') === 'true',\n shouldReAppend: (elt: Element) => elt.getAttribute('im-re-append') === 'true',\n shouldRemove: noOp,\n afterHeadMorphed: noOp,\n },\n};\n\n/*\n Deep merges the config object and the Idiomoroph.defaults object to\n produce a final configuration object\n */\nfunction mergeDefaults(config: KeyValue): KeyValue {\n const finalConfig: KeyValue = {};\n // copy top level stuff into final config\n Object.assign(finalConfig, defaults);\n Object.assign(finalConfig, config);\n\n // copy callbacks into final config (do this to deep merge the callbacks)\n finalConfig.callbacks = {};\n Object.assign(finalConfig.callbacks, defaults.callbacks);\n Object.assign(finalConfig.callbacks, config.callbacks);\n\n // copy head config into final config (do this to deep merge the head)\n finalConfig.head = {};\n Object.assign(finalConfig.head, defaults.head);\n Object.assign(finalConfig.head, config.head);\n return finalConfig;\n}\n\n// =============================================================================\n// ID Set Functions\n// =============================================================================\n\nfunction isIdInConsideration(ctx: KeyValue, id: string): any {\n return !ctx.deadIds.has(id);\n}\n\nfunction idIsWithinNode(ctx: KeyValue, id: string, targetNode: Node): any {\n const idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n}\n\nfunction removeIdsFromConsideration(ctx: KeyValue, node: Node): void {\n const idSet = ctx.idMap.get(node) || EMPTY_SET;\n for (const id of idSet) {\n ctx.deadIds.add(id);\n }\n}\n\nfunction getIdIntersectionCount(ctx: KeyValue, node1: Node, node2: Node): number {\n const sourceSet = ctx.idMap.get(node1) || EMPTY_SET;\n let matchCount = 0;\n for (const id of sourceSet) {\n // a potential match is an id in the source and potentialIdsSet, but\n // that has not already been merged into the DOM\n if (isIdInConsideration(ctx, id) && idIsWithinNode(ctx, id, node2)) {\n ++matchCount;\n }\n }\n return matchCount;\n}\n\n/*\n * A bottom up algorithm that finds all elements with ids inside of the node\n * argument and populates id sets for those nodes and all their parents, generating\n * a set of ids contained within all nodes for the entire hierarchy in the DOM\n *\n * @param node {Element}\n * @param {Map<Node, Set<String>>} idMap\n */\nfunction populateIdMapForNode(node: Element, idMap: Map<Node, Set<string>>) {\n const nodeParent = node.parentElement;\n // find all elements with an id property\n const idElements = node.querySelectorAll('[id]');\n for (const elt of idElements) {\n let current: Element | null = elt;\n // walk up the parent hierarchy of that element, adding the id\n // of element to the parent's id set\n while (current !== nodeParent && current != null) {\n let idSet = idMap.get(current);\n // if the id set does not exist, create it and insert it in the map\n if (idSet == null) {\n idSet = new Set();\n idMap.set(current, idSet);\n }\n idSet.add(elt.id);\n current = current.parentElement;\n }\n }\n}\n\n/*\n * This function computes a map of nodes to all ids contained within that node (inclusive of the\n * node). This map can be used to ask if two nodes have intersecting sets of ids, which allows\n * for a looser definition of \"matching\" than tradition id matching, and allows child nodes\n * to contribute to a parent nodes matching.\n *\n * @param {Element} oldContent the old content that will be morphed\n * @param {Element} newContent the new content to morph to\n * @returns {Map<Node, Set<String>>} a map of nodes to id sets for the\n */\nfunction createIdMap(oldContent: Element, newContent: Element): Map<any, any> {\n const idMap = new Map();\n populateIdMapForNode(oldContent, idMap);\n populateIdMapForNode(newContent, idMap);\n return idMap;\n}\n\nfunction createMorphContext(oldNode: Element, newContent: Element, config: KeyValue) {\n config = mergeDefaults(config);\n return {\n target: oldNode,\n newContent,\n config,\n morphStyle: config.morphStyle,\n ignoreActive: config.ignoreActive,\n ignoreActiveValue: config.ignoreActiveValue,\n idMap: createIdMap(oldNode, newContent),\n deadIds: new Set(),\n callbacks: config.callbacks,\n head: config.head,\n };\n}\n\nfunction isIdSetMatch(node1: Element, node2: Element, ctx: KeyValue) {\n if (node1 == null || node2 == null) {\n return false;\n }\n if (node1.nodeType === node2.nodeType && node1.tagName === node2.tagName) {\n if (node1.id !== '' && node1.id === node2.id) {\n return true;\n }\n return getIdIntersectionCount(ctx, node1, node2) > 0;\n }\n return false;\n}\n\nfunction isSoftMatch(node1: Element, node2: Element) {\n if (node1 == null || node2 == null) {\n return false;\n }\n return node1.nodeType === node2.nodeType && node1.tagName === node2.tagName;\n}\n\nfunction removeNode(tempNode: Node, ctx: KeyValue) {\n removeIdsFromConsideration(ctx, tempNode);\n if (ctx.callbacks.beforeNodeRemoved(tempNode) === false) return;\n\n (tempNode as Element).remove();\n ctx.callbacks.afterNodeRemoved(tempNode);\n}\n\nfunction removeNodesBetween(startInclusive: Node, endExclusive: Node, ctx: KeyValue) {\n let start: Node | null = startInclusive;\n while (start && start !== endExclusive) {\n const tempNode = start;\n start = start.nextSibling;\n removeNode(tempNode, ctx);\n }\n removeIdsFromConsideration(ctx, endExclusive);\n return endExclusive.nextSibling;\n}\n\n// =============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential id match\n// for the newChild. We stop if we find a potential id match for the new child OR\n// if the number of potential id matches we are discarding is greater than the\n// potential id matches for the new child\n// =============================================================================\nfunction findIdSetMatch(newContent: Element, oldParent: Element, newChild: Element, insertionPoint: Node, ctx: KeyValue) {\n\n // max id matches we are willing to discard in our search\n const newChildPotentialIdCount = getIdIntersectionCount(ctx, newChild, oldParent);\n\n let potentialMatch = null;\n\n // only search forward if there is a possibility of an id match\n if (newChildPotentialIdCount > 0) {\n potentialMatch = insertionPoint;\n // if there is a possibility of an id match, scan forward\n // keep track of the potential id match count we are discarding (the\n // newChildPotentialIdCount must be greater than this to make it likely\n // worth it)\n let otherMatchCount = 0;\n while (potentialMatch != null) {\n\n // If we have an id match, return the current potential match\n if (isIdSetMatch(newChild, potentialMatch as Element, ctx)) {\n return potentialMatch;\n }\n\n // computer the other potential matches of this new content\n otherMatchCount += getIdIntersectionCount(ctx, potentialMatch, newContent);\n if (otherMatchCount > newChildPotentialIdCount) {\n // if we have more potential id matches in _other_ content, we\n // do not have a good candidate for an id match, so return null\n return null;\n }\n\n // advanced to the next old content child\n potentialMatch = potentialMatch.nextSibling;\n }\n }\n return potentialMatch;\n}\n\n// =============================================================================\n// Scans forward from the insertionPoint in the old parent looking for a potential soft match\n// for the newChild. We stop if we find a potential soft match for the new child OR\n// if we find a potential id match in the old parents children OR if we find two\n// potential soft matches for the next two pieces of new content\n// =============================================================================\nfunction findSoftMatch(newContent: Element, oldParent: Element, newChild: Node, insertionPoint: Node, ctx: KeyValue) {\n\n let potentialSoftMatch: Node | null = insertionPoint;\n let nextSibling = newChild.nextSibling;\n let siblingSoftMatchCount = 0;\n\n while (potentialSoftMatch != null) {\n\n if (getIdIntersectionCount(ctx, potentialSoftMatch, newContent) > 0) {\n // the current potential soft match has a potential id set match with the remaining new\n // content so bail out of looking\n return null;\n }\n\n // if we have a soft match with the current node, return it\n if (isSoftMatch(newChild as Element, potentialSoftMatch as Element)) {\n return potentialSoftMatch;\n }\n\n if (isSoftMatch(nextSibling as Element, potentialSoftMatch as Element)) {\n // the next new node has a soft match with this node, so\n // increment the count of future soft matches\n siblingSoftMatchCount++;\n nextSibling = nextSibling ? nextSibling.nextSibling : null;\n\n // If there are two future soft matches, bail to allow the siblings to soft match\n // so that we don't consume future soft matches for the sake of the current node\n if (siblingSoftMatchCount >= 2) {\n return null;\n }\n }\n\n // advanced to the next old content child\n potentialSoftMatch = potentialSoftMatch ? potentialSoftMatch.nextSibling : null;\n }\n\n return potentialSoftMatch;\n}\n\nfunction normalizeContent(newContent: Node[] | Node | null) {\n if (newContent == null) {\n // noinspection UnnecessaryLocalVariableJS\n const dummyParent = document.createElement('div');\n return dummyParent;\n }\n if (newContent instanceof Node) {\n if (newContent.generatedByIdiomorph) {\n // the template tag created by idiomorph parsing can serve as a dummy parent\n return newContent;\n }\n // a single node is added as a child to a dummy parent\n const dummyParent = document.createElement('div');\n dummyParent.append(newContent);\n return dummyParent;\n }\n // all nodes in the array or HTMLElement collection are consolidated under\n // a single dummy parent element\n const dummyParent = document.createElement('div');\n for (const elt of [...newContent]) {\n dummyParent.append(elt);\n }\n return dummyParent;\n}\n\nfunction insertSiblings(previousSibling: Node, morphedNode: Node, nextSibling: Node) {\n const stack = [];\n const added = [];\n let prev: Node | null = previousSibling;\n while (prev != null) {\n stack.push(prev);\n prev = prev.previousSibling;\n }\n while (stack.length > 0) {\n const node = stack.pop();\n added.push(node); // push added preceding siblings on in order and insert\n if (node) {\n morphedNode.parentElement?.insertBefore(node, morphedNode);\n }\n }\n added.push(morphedNode);\n let next: Node | null = nextSibling;\n while (next != null) {\n stack.push(next);\n added.push(next); // here we are going in order, so push on as we scan, rather than add\n next = next.nextSibling;\n }\n while (stack.length > 0) {\n const node = stack.pop();\n if (node) {\n morphedNode.parentElement?.insertBefore(node, morphedNode.nextSibling);\n }\n }\n return added;\n}\n\nfunction scoreElement(node1: Node, node2: Node, ctx: KeyValue) {\n if (isSoftMatch(node1 as Element, node2 as Element)) {\n return 0.5 + getIdIntersectionCount(ctx, node1, node2);\n }\n return 0;\n}\n\nfunction findBestNodeMatch(newContent: Node, oldNode: Node, ctx: KeyValue) {\n let currentElement;\n currentElement = newContent.firstChild;\n let bestElement = currentElement;\n let score = 0;\n while (currentElement) {\n const newScore = scoreElement(currentElement, oldNode, ctx);\n if (newScore > score) {\n bestElement = currentElement;\n score = newScore;\n }\n currentElement = currentElement.nextSibling;\n }\n return bestElement;\n}\n\n// =============================================================================\n// Attribute Syncing Code\n// =============================================================================\n\n/*\n * @param attr {String} the attribute to be mutated\n * @param to {Element} the element that is going to be updated\n * @param updateType {(\"update\"|\"remove\")}\n * @param ctx the merge context\n * @returns {boolean} true if the attribute should be ignored, false otherwise\n */\nfunction ignoreAttribute(attr: string, to: Element, updateType: string, ctx: KeyValue) {\n if (attr === 'value' && ctx.ignoreActiveValue && to === document.activeElement) {\n return true;\n }\n return ctx.callbacks.beforeAttributeUpdated(attr, to, updateType) === false;\n}\n\n/*\n * @param possibleActiveElement\n * @param ctx\n * @returns {boolean}\n */\nfunction ignoreValueOfActiveElement(possibleActiveElement: Node, ctx: KeyValue) {\n return ctx.ignoreActiveValue && possibleActiveElement === document.activeElement;\n}\n\n/*\n * syncs a given node with another node, copying over all attributes and\n * inner element state from the 'from' node to the 'to' node\n *\n * @param {Element} from the element to copy attributes & state from\n * @param {Element} to the element to copy attributes & state to\n * @param ctx the merge context\n */\nfunction syncNodeFrom(from: Element, to: Element, ctx: KeyValue) {\n const type = from.nodeType;\n\n // if is an element type, sync the attributes from the\n // new node into the new node\n if (type === 1 /* element type */) {\n const fromAttributes = from.attributes;\n const toAttributes = to.attributes;\n for (const fromAttribute of fromAttributes) {\n if (ignoreAttribute(fromAttribute.name, to, 'update', ctx)) {\n continue;\n }\n if (to.getAttribute(fromAttribute.name) !== fromAttribute.value) {\n to.setAttribute(fromAttribute.name, fromAttribute.value);\n ctx.callbacks.afterAttributeUpdated(fromAttribute.name, to, 'update');\n }\n }\n // iterate backwards to avoid skipping over items when a delete occurs\n for (let i = toAttributes.length - 1; i >= 0; i--) {\n const toAttribute = toAttributes[i];\n if (ignoreAttribute(toAttribute.name, to, 'remove', ctx)) {\n continue;\n }\n if (!from.hasAttribute(toAttribute.name)) {\n to.removeAttribute(toAttribute.name);\n ctx.callbacks.afterAttributeUpdated(toAttribute.name, to, 'remove');\n }\n }\n }\n // sync text nodes\n if (type === 8 /* comment */ || type === 3 /* text */) {\n if (to.nodeValue !== from.nodeValue) {\n to.nodeValue = from.nodeValue;\n }\n }\n}\n\n/*\n * @param oldNode root node to merge content into\n * @param newContent new content to merge\n * @param ctx the merge context\n * @returns {Element} the element that ended up in the DOM\n */\nfunction morphOldNodeTo(oldNode: Node, newContent: Node, ctx: KeyValue) {\n if (ctx.ignoreActive && oldNode === document.activeElement) {\n // don't morph focused element\n } else if (newContent == null) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n\n (oldNode as Element).remove();\n ctx.callbacks.afterNodeRemoved(oldNode);\n return null;\n } else if (!isSoftMatch(oldNode as Element, newContent as Element)) {\n if (ctx.callbacks.beforeNodeRemoved(oldNode) === false) return oldNode;\n if (ctx.callbacks.beforeNodeAdded(newContent) === false) return oldNode;\n\n oldNode.parentElement?.replaceChild(newContent, oldNode);\n ctx.callbacks.afterNodeAdded(newContent);\n ctx.callbacks.afterNodeRemoved(oldNode);\n return newContent;\n } else {\n if (ctx.callbacks.beforeNodeMorphed(oldNode, newContent) === false) return oldNode;\n syncNodeFrom(newContent as Element, oldNode as Element, ctx);\n if (ctx.callbacks.beforeChildrenUpdated(oldNode, newContent) !== false && !ignoreValueOfActiveElement(oldNode, ctx)) {\n morphChildren(newContent, oldNode, ctx);\n }\n ctx.callbacks.afterNodeMorphed(oldNode, newContent);\n return oldNode;\n }\n}\n\n/*\n * This is the core algorithm for matching up children. The idea is to use id sets to try to match up\n * nodes as faithfully as possible. We greedily match, which allows us to keep the algorithm fast, but\n * by using id sets, we are able to better match up with content deeper in the DOM.\n *\n * Basic algorithm is, for each node in the new content:\n *\n * - if we have reached the end of the old parent, append the new content\n * - if the new content has an id set match with the current insertion point, morph\n * - search for an id set match\n * - if id set match found, morph\n * - otherwise search for a \"soft\" match\n * - if a soft match is found, morph\n * - otherwise, prepend the new node before the current insertion point\n *\n * The two search algorithms terminate if competing node matches appear to outweigh what can be achieved\n * with the current node. See findIdSetMatch() and findSoftMatch() for details.\n *\n * @param {Element} newParent the parent element of the new content\n * @param {Element } oldParent the old content that we are merging the new content into\n * @param ctx the merge context\n */\nfunction morphChildren(newParent: Node, oldParent: Node, ctx: KeyValue) {\n\n let nextNewChild = newParent.firstChild;\n let insertionPoint = oldParent.firstChild;\n let newChild;\n\n // run through all the new content\n while (nextNewChild) {\n\n newChild = nextNewChild;\n nextNewChild = newChild.nextSibling;\n\n // if we are at the end of the exiting parent's children, just append\n if (insertionPoint == null) {\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.appendChild(newChild);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // if the current node has an id set match then morph\n if (isIdSetMatch(newChild as Element, insertionPoint as Element, ctx)) {\n morphOldNodeTo(insertionPoint, newChild, ctx);\n insertionPoint = insertionPoint.nextSibling;\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // otherwise search forward in the existing old children for an id set match\n const idSetMatch = findIdSetMatch(newParent as Element, oldParent as Element, newChild as Element, insertionPoint, ctx);\n\n // if we found a potential match, remove the nodes until that point and morph\n if (idSetMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, idSetMatch, ctx);\n morphOldNodeTo(idSetMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // no id set match found, so scan forward for a soft match for the current node\n const softMatch = findSoftMatch(newParent as Element, oldParent as Element, newChild, insertionPoint, ctx);\n\n // if we found a soft match for the current node, morph\n if (softMatch) {\n insertionPoint = removeNodesBetween(insertionPoint, softMatch, ctx);\n morphOldNodeTo(softMatch, newChild, ctx);\n removeIdsFromConsideration(ctx, newChild);\n continue;\n }\n\n // abandon all hope of morphing, just insert the new child before the insertion point\n // and move on\n if (ctx.callbacks.beforeNodeAdded(newChild) === false) return;\n\n oldParent.insertBefore(newChild, insertionPoint);\n ctx.callbacks.afterNodeAdded(newChild);\n removeIdsFromConsideration(ctx, newChild);\n }\n\n // remove any remaining old nodes that didn't match up with new content\n while (insertionPoint !== null) {\n\n const tempNode = insertionPoint;\n insertionPoint = insertionPoint.nextSibling;\n removeNode(tempNode, ctx);\n }\n}\n\nfunction morphNormalizedContent(oldNode: Element, normalizedNewContent: Element, ctx: KeyValue) {\n if (ctx.morphStyle === 'innerHTML') {\n\n // innerHTML, so we are only updating the children\n morphChildren(normalizedNewContent, oldNode, ctx);\n return oldNode.children;\n\n }\n if (ctx.morphStyle === 'outerHTML' || ctx.morphStyle == null) {\n // otherwise find the best element match in the new content, morph that, and merge its siblings\n // into either side of the best match\n const bestMatch = findBestNodeMatch(normalizedNewContent, oldNode, ctx);\n\n // stash the siblings that will need to be inserted on either side of the best match\n const previousSibling = bestMatch?.previousSibling;\n const nextSibling = bestMatch?.nextSibling;\n\n // morph it\n const morphedNode = morphOldNodeTo(oldNode, bestMatch as Node, ctx);\n\n if (bestMatch) {\n // if there was a best match, merge the siblings in too and return the\n // whole bunch\n return insertSiblings(previousSibling as Node, morphedNode as Node, nextSibling as Node);\n }\n // otherwise nothing was added to the DOM\n return [];\n }\n throw `Do not understand how to morph style ${ctx.morphStyle}`;\n}\n\n// =============================================================================\n// Core Morphing Algorithm - morph, morphNormalizedContent, morphOldNodeTo, morphChildren\n// =============================================================================\nexport function morph(node: Nodes, otherNode: Nodes, config: configType = {}): void {\n const normalizedContent = normalizeContent(otherNode.get(0)) as Element;\n const ctx = createMorphContext(node.get(0) as Element, normalizedContent, config);\n morphNormalizedContent(node.get(0) as Element, normalizedContent, ctx);\n}\n","import EventEmitter from 'eventemitter3';\nimport { getInstanceMap } from '../storage/box-instances';\nimport { debug } from '../utils/debug';\nimport { morph } from '../utils/morph';\nimport { denormalizeValue } from '../utils/denormalize-value';\nimport { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { HTMLParser } from '../parsers/html-parser';\nimport { insertBookmark } from '../operations/insert-bookmark';\nimport { Selection } from './selection';\n\ninterface SaveOptions {\n inputType?: string;\n update?: boolean;\n emitEvent?: boolean;\n}\n\n/**\n * The History interface manages undo and redo functionality for a container that holds some editable content.\n * It emits events when actions like save, undo, or redo are performed.\n */\n//\n// Example:\n//\n// before initialization: value: 'a', list: [], index: 0, canUndo: false\n// after initialization: value: 'a', list: ['a'], index: 1, canUndo: false\n// inputs 'b': value: 'ab', list: ['a', 'ab'], index: 2, canUndo: true\n// inputs 'c': value: 'abc', list: ['a', 'ab', 'abc'], index: 3\n// inputs 'd': value: 'abcd', list: ['a', 'ab', 'abc', 'abcd'], index: 4\n// undoes: value: 'abc', list: ['a', 'ab', 'abc', 'abcd'], index: 3\n// undoes: value: 'ab', list: ['a', 'ab', 'abc', 'abcd'], index: 2\n// undoes: value: 'a', list: ['a', 'ab', 'abc', 'abcd'], index: 1, canUndo: false\n// redoes: value: 'ab', list: ['a', 'ab', 'abc', 'abcd'], index: 2, canRedo: true\n// inputs 'e': value: 'abe', list: ['a', 'ab', 'abe'], index: 3, canRedo: false\nexport class History {\n private readonly selection: Selection;\n\n private readonly container: Nodes;\n\n private canSave = true;\n\n /**\n * A list in which the current and previous contents are stored.\n */\n public readonly list: Nodes[] = [];\n\n /**\n * An index that always indicates the position at which new content is stored.\n */\n public index = 0;\n\n /**\n * The maximum length of the history. Once this limit is reached, the earliest item in the list will be removed.\n */\n public limit = 100;\n\n /**\n * An EventEmitter object used to set up events.\n */\n public readonly event: EventEmitter = new EventEmitter();\n\n constructor(selection: Selection) {\n this.selection = selection;\n this.container = selection.container;\n }\n\n private removeBookmark(value: string): string {\n return value.replace(/(<lake-box[^>]+)\\sfocus=\"\\w+\"([^>]*>)/gi, '$1$2')\n .replace(/<lake-bookmark\\s+type=\"anchor\">\\s*<\\/lake-bookmark>/gi, '')\n .replace(/<lake-bookmark\\s+type=\"focus\">\\s*<\\/lake-bookmark>/gi, '');\n }\n\n private getValue(container: Nodes): string {\n return new HTMLParser(container).getHTML();\n }\n\n private addIdToBoxes(node: Nodes): void {\n node.find('lake-box').each(nativeNode => {\n const boxNode = new Nodes(nativeNode);\n const id = `${boxNode.attr('name')}-${boxNode.attr('value')}`;\n boxNode.attr('id', id);\n });\n }\n\n private removeIdfromBoxes(node: Nodes): void {\n node.find('lake-box').each(nativeNode => {\n const boxNode = new Nodes(nativeNode);\n boxNode.removeAttr('id');\n });\n }\n\n private morphContainer(sourceItem: Nodes): void {\n const container = this.container;\n const callbacks = {\n beforeChildrenUpdated: (oldNode: Node) => {\n if (new Nodes(oldNode).name === 'lake-box') {\n return false;\n }\n },\n afterAttributeUpdated: (attributeName: string, nativeNode: Node) => {\n const node = new Nodes(nativeNode);\n if (['name', 'value'].indexOf(attributeName) >= 0 && node.name === 'lake-box') {\n getBox(node).unmount();\n const instanceMap = getInstanceMap(container.id);\n instanceMap.delete(node.id);\n }\n },\n };\n const otherContainer = sourceItem.clone(true);\n this.addIdToBoxes(container);\n this.addIdToBoxes(otherContainer);\n morph(container, otherContainer, {\n callbacks,\n });\n this.removeIdfromBoxes(container);\n this.removeIdfromBoxes(otherContainer);\n }\n\n /**\n * A boolean value indicating whether the history can be undone.\n */\n public get canUndo(): boolean {\n return this.index > 1 && !!this.list[this.index - 2];\n }\n\n /**\n * A boolean value indicating whether the history can be redone.\n */\n public get canRedo(): boolean {\n return !!this.list[this.index];\n }\n\n /**\n * Creates a deep clone of the current container with its content.\n * If there is a selection within the container, it ensures the selection is also preserved in the cloned container.\n */\n public cloneContainer(): Nodes {\n const range = this.selection.range;\n const newContainer = this.container.clone(true);\n newContainer.find('lake-box').each(nativeNode => {\n const box = getBox(nativeNode);\n box.getContainer().empty();\n });\n if (!this.container.contains(range.commonAncestor)) {\n return newContainer;\n }\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const boxNodePath = boxNode.path();\n const newBoxNode = newContainer.find(boxNodePath);\n const newRange = range.clone();\n newRange.selectBox(newBoxNode);\n insertBookmark(newRange);\n return newContainer;\n }\n const startNodePath = range.startNode.path();\n const endNodePath = range.endNode.path();\n const newStartNode = newContainer.find(startNodePath);\n const newEndNode = newContainer.find(endNodePath);\n const newRange = range.clone();\n newRange.setStart(newStartNode, range.startOffset);\n newRange.setEnd(newEndNode, range.endOffset);\n insertBookmark(newRange);\n return newContainer;\n }\n\n /**\n * Undoes to the previous saved content.\n */\n public undo(): void {\n if (!this.list[this.index - 2]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index > 1) {\n const prevItem = this.list[this.index - 2];\n if (!prevItem) {\n break;\n }\n this.index--;\n const prevValue = this.getValue(prevItem);\n if (this.removeBookmark(prevValue) !== this.removeBookmark(value)) {\n this.morphContainer(prevItem);\n this.event.emit('undo', prevValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History undone (index: ${this.index})`);\n }\n\n /**\n * Redoes to the next saved content.\n */\n public redo(): void {\n if (!this.list[this.index]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index < this.list.length) {\n const nextItem = this.list[this.index];\n if (!nextItem) {\n break;\n }\n this.index++;\n const nextValue = this.getValue(nextItem);\n if (this.removeBookmark(nextValue) !== this.removeBookmark(value)) {\n this.morphContainer(nextItem);\n this.event.emit('redo', nextValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History redone (index: ${this.index})`);\n }\n\n /**\n * Resumes the ability to save history.\n * This method re-enables saving after the pause method has been called.\n */\n public continue(): void {\n this.canSave = true;\n }\n\n /**\n * Pauses the ability to save history.\n * This method temporarily disables saving history, which can be resumed later by calling the continue method.\n */\n public pause(): void {\n this.canSave = false;\n }\n\n /**\n * Saves the current content to the history.\n * The content is saved only if it is different from the previous content.\n */\n public save(options: SaveOptions = {}): void {\n const inputType = options.inputType ?? '';\n const update = options.update ?? false;\n const emitEvent = options.emitEvent ?? true;\n if (!this.canSave) {\n return;\n }\n const item = this.cloneContainer();\n const value = this.getValue(item);\n if (\n this.list[this.index - 1]\n && this.removeBookmark(this.getValue(this.list[this.index - 1])) === this.removeBookmark(value)\n ) {\n return;\n }\n if (update) {\n this.list.splice(this.index - 1, Infinity, item);\n } else {\n this.list.splice(this.index, Infinity, item);\n this.index++;\n }\n if (this.list.length > this.limit) {\n this.list.shift();\n this.index = this.list.length;\n }\n debug(`History saved (index: ${this.index}, inputType: \"${inputType}\", update: ${update}, emitEvent: ${emitEvent})`);\n if (emitEvent) {\n this.event.emit('save', denormalizeValue(value), {\n inputType,\n update,\n emitEvent,\n });\n }\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Nodes } from '../models/nodes';\n\ninterface EventItem {\n type: string;\n listener: (event: KeyboardEvent) => void | boolean;\n}\n\n/**\n * The Keystroke interface provides a way to handle keyboard events and define custom shortcuts for a given container.\n * It allows you to register hotkeys, bind specific actions to them, and handle their execution.\n */\nexport class Keystroke {\n private readonly container: Nodes;\n\n private readonly keydownEventList: EventItem[] = [];\n\n private readonly keyupEventList: EventItem[] = [];\n\n constructor(container: Nodes) {\n this.container = container;\n this.container.on('keydown', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keydownEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n this.container.on('keyup', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keyupEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n }\n\n /**\n * Registers a keydown event listener for the specified key combination.\n * The listener will be triggered when the key combination is pressed.\n */\n public setKeydown(type: string, listener: EventListener): void {\n this.keydownEventList.push({\n type,\n listener,\n });\n }\n\n /**\n * Registers a keyup event listener for the specified key combination.\n * The listener will be triggered when the key combination is released.\n */\n public setKeyup(type: string, listener: EventListener): void {\n this.keyupEventList.push({\n type,\n listener,\n });\n }\n\n /**\n * Triggers all keydown event listeners associated with the specified key combination.\n */\n public keydown(type: string): void {\n for (const item of this.keydownEventList) {\n if (item.type === type) {\n if (item.listener(new KeyboardEvent(type)) === false) {\n break;\n }\n }\n }\n }\n\n /**\n * Triggers all keyup event listeners associated with the specified key combination.\n */\n public keyup(type: string): void {\n for (const item of this.keyupEventList) {\n if (item.type === type) {\n if (item.listener(new KeyboardEvent(type)) === false) {\n break;\n }\n }\n }\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { boxes } from '../storage/boxes';\n\n/**\n * The BoxManager interface manages a collection of BoxComponent objects.\n * It allows you to add, remove, and retrieve the names of components.\n */\nexport class BoxManager {\n /**\n * Adds a BoxComponent to the collection.\n */\n public add(component: BoxComponent): void {\n boxes.set(component.name, component);\n }\n\n /**\n * Removes a box component from the collection by its name.\n */\n public remove(name: string): void {\n boxes.delete(name);\n }\n\n /**\n * Returns a list of all box component names in the collection.\n */\n public getNames(): string[] {\n return Array.from(boxes.keys());\n }\n}\n","import type { Editor } from '../editor';\nimport { InitializePlugin, UnmountPlugin } from '../types/plugin';\n\n/**\n * The Plugin interface manages a collection of plugins.\n * It allows plugins to be added and loaded into an Editor instance, and it handles the initialization and unmounting of those plugins.\n */\nexport class Plugin {\n private readonly pluginMap = new Map<string, InitializePlugin>();\n\n /**\n * Registers a plugin using a name as the key.\n */\n public add(name: string, plugin: InitializePlugin): void {\n this.pluginMap.set(name, plugin);\n }\n\n /**\n * Loads all registered plugins.\n */\n public loadAll(editor: Editor): Map<string, UnmountPlugin> {\n const unmountPluginMap = new Map<string, UnmountPlugin>();\n for (const name of this.pluginMap.keys()) {\n const plugin = this.pluginMap.get(name);\n if (plugin && editor.config[name] !== false) {\n const result = plugin(editor);\n if (result) {\n unmountPluginMap.set(name, result);\n }\n }\n }\n return unmountPluginMap;\n }\n}\n","import debounce from 'debounce';\nimport isEqual from 'fast-deep-equal/es6';\nimport EventEmitter from 'eventemitter3';\nimport { version } from '../package.json';\nimport { SelectionState } from './types/selection';\nimport { UnmountPlugin } from './types/plugin';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue } from './utils/denormalize-value';\nimport { normalizeValue } from './utils/normalize-value';\nimport { query } from './utils/query';\nimport { getBox } from './utils/get-box';\nimport { scrollToNode } from './utils/scroll-to-node';\nimport { debug } from './utils/debug';\nimport { i18nObject } from './i18n';\nimport { Nodes } from './models/nodes';\nimport { HTMLParser } from './parsers/html-parser';\nimport { Selection } from './managers/selection';\nimport { Command } from './managers/command';\nimport { History } from './managers/history';\nimport { Keystroke } from './managers/keystroke';\nimport { BoxManager } from './managers/box-manager';\nimport { Plugin } from './managers/plugin';\nimport { Toolbar } from './ui/toolbar';\n\ntype OnMessage = (type: 'success' | 'error' | 'warning', message: string) => void;\n\ninterface Config {\n value: string;\n readonly: boolean;\n spellcheck: boolean;\n tabIndex: number;\n placeholder: string;\n indentWithTab: boolean;\n lang: string;\n minChangeSize: number;\n historySize: number;\n onMessage: OnMessage;\n [name: string]: any;\n}\n\ninterface EditorConfig {\n root: string | Node | Nodes;\n toolbar?: Toolbar;\n value?: string;\n readonly?: boolean;\n spellcheck?: boolean;\n tabIndex?: number;\n placeholder?: string;\n indentWithTab?: boolean;\n lang?: string;\n minChangeSize?: number;\n onMessage?: OnMessage;\n [name: string]: any;\n}\n\nconst defaultConfig: Config = {\n value: '<p><br /></p>',\n readonly: false,\n spellcheck: false,\n tabIndex: 0,\n placeholder: '',\n indentWithTab: true,\n lang: 'en-US',\n minChangeSize: 5,\n historySize: 100,\n onMessage: (type, message) => {\n if (type === 'success') {\n // eslint-disable-next-line no-console\n console.log(message);\n return;\n }\n if (type === 'warning') {\n console.warn(message);\n return;\n }\n if (type === 'error') {\n console.error(message);\n }\n },\n slash: false,\n mention: false,\n};\n\n/**\n * The Editor interface provides properties and methods for rendering and manipulating the editor.\n */\nexport class Editor {\n /**\n * A string that has not yet been saved to the history.\n */\n private unsavedInputData = '';\n\n /**\n * The number of input event calls before saving to the history.\n */\n private unsavedInputCount = 0;\n\n /**\n * The state of the current selection.\n */\n private state: SelectionState = {\n activeItems: [],\n disabledNameMap: new Map(),\n selectedNameMap: new Map(),\n selectedValuesMap: new Map(),\n };\n\n /**\n * The functions for unmounting plugins.\n */\n private unmountPluginMap = new Map<string, UnmountPlugin>();\n\n /**\n * The parent element of the container.\n */\n private readonly containerWrapper: Nodes;\n\n /**\n * The current version of Lake.\n */\n public static readonly version: string = version;\n\n /**\n * A BoxManager object that manages the box components.\n */\n public static readonly box = new BoxManager();\n\n /**\n * A Plugin object that manages a collection of plugins.\n */\n public static readonly plugin = new Plugin();\n\n /**\n * An element to which the editor is appended.\n */\n public readonly root: Nodes;\n\n /**\n * The toolbar for the editor.\n */\n public readonly toolbar: Toolbar | undefined;\n\n /**\n * The configuration for the editor.\n */\n public readonly config: Config;\n\n /**\n * A contenteditable element where users can edit the editor's content.\n */\n public readonly container: Nodes;\n\n /**\n * An element to which overlays are appended.\n */\n public readonly overlayContainer: Nodes;\n\n /**\n * An EventEmitter object used to set up events.\n */\n public readonly event: EventEmitter = new EventEmitter();\n\n /**\n * A Selection object representing the range of content selected by the user or the current position of the cursor.\n */\n public readonly selection: Selection;\n\n /**\n * A Command object managing all registered commands.\n */\n public readonly command: Command;\n\n /**\n * A History object that manages the undo and redo history.\n */\n public readonly history: History;\n\n /**\n * A Keystroke object that manages keyboard shortcuts.\n */\n public readonly keystroke: Keystroke;\n\n /**\n * A boolean value indicating whether the editor is in read-only mode.\n */\n public readonly readonly: boolean;\n\n /**\n * A boolean value indicating whether a user is entering a character using a text composition system such as an Input Method Editor (IME).\n */\n public isComposing = false;\n\n /**\n * A pop-up component which is currently displayed, such as LinkPopup, MentionMenu, and SlashMenu.\n */\n public popup: any = null;\n\n constructor(config: EditorConfig) {\n if (!config.root) {\n throw new Error('The root of the config must be specified.');\n }\n this.root = query(config.root);\n this.toolbar = config.toolbar;\n this.config = { ...defaultConfig };\n for (const key of Object.keys(config)) {\n this.config[key] = config[key];\n }\n this.containerWrapper = query('<div class=\"lake-container-wrapper\" />');\n this.container = query('<div class=\"lake-container\" />');\n this.overlayContainer = query('<div class=\"lake-overlay\" />');\n this.readonly = this.config.readonly;\n\n this.container.attr({\n contenteditable: this.readonly ? 'false' : 'true',\n spellcheck: this.config.spellcheck ? 'true' : 'false',\n tabindex: this.config.tabIndex.toString(),\n readonly: this.readonly ? 'true' : 'false',\n });\n if (this.config.placeholder !== '') {\n this.container.attr('placeholder', this.config.placeholder);\n }\n\n this.selection = new Selection(this.container);\n this.command = new Command(this.selection);\n this.history = new History(this.selection);\n this.history.limit = this.config.historySize;\n this.keystroke = new Keystroke(this.container);\n\n editors.set(this.container.id, this);\n }\n\n private copyListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.updateSelectionRange();\n this.updateBoxSelectionStyle();\n this.emitStateChangeEvent();\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private updateSelectionRange = debounce(() => {\n this.selection.updateByRange();\n }, 1, {\n immediate: true,\n });\n\n /**\n * Updates the classes of all boxes when the current selection is changed.\n */\n private updateBoxSelectionStyle = debounce(() => {\n // The editor has been unmounted.\n if (this.root.first().length === 0) {\n return;\n }\n const range = this.selection.getCurrentRange();\n const clonedRange = range.clone();\n clonedRange.adjustBox();\n this.container.find('lake-box').each(boxNativeNode => {\n const box = getBox(boxNativeNode);\n const boxContainer = box.getContainer();\n if (boxContainer.length === 0) {\n return;\n }\n if (range.compareBeforeNode(boxContainer) < 0 && range.compareAfterNode(boxContainer) > 0) {\n if (!(range.isCollapsed && range.startNode.get(0) === boxContainer.get(0) && range.startOffset === 0)) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-activated');\n box.event.emit('focus');\n return;\n }\n }\n if (clonedRange.intersectsNode(box.node)) {\n boxContainer.removeClass('lake-box-activated');\n if (range.isCollapsed) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.addClass('lake-box-focused');\n box.event.emit('focus');\n } else {\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-selected');\n box.event.emit('blur');\n }\n return;\n }\n boxContainer.removeClass('lake-box-activated');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.removeClass('lake-box-selected');\n box.event.emit('blur');\n });\n }, 50, {\n immediate: true,\n });\n\n /**\n * Triggers the statechange event when the current selection is changed.\n */\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let activeItems = this.selection.getActiveItems();\n if (activeItems.length > 0 && !this.container.contains(activeItems[0].node)) {\n activeItems = [];\n }\n const disabledNameMap = new Map<string, boolean>();\n const selectedNameMap = new Map<string, boolean>();\n const selectedValuesMap = new Map<string, string[]>();\n if (activeItems.length > 0) {\n for (const name of commandNames) {\n const commandItem = this.command.getItem(name);\n if (commandItem.isDisabled && commandItem.isDisabled(activeItems)) {\n disabledNameMap.set(name, true);\n }\n if (commandItem.isSelected && commandItem.isSelected(activeItems)) {\n selectedNameMap.set(name, true);\n }\n if (commandItem.selectedValues) {\n const values = commandItem.selectedValues(activeItems);\n if (values.length > 0) {\n selectedValuesMap.set(name, values);\n }\n }\n }\n }\n const state: SelectionState = {\n activeItems,\n disabledNameMap,\n selectedNameMap,\n selectedValuesMap,\n };\n if (isEqual(state, this.state)) {\n return;\n }\n if (this.toolbar) {\n this.toolbar.updateState(state);\n }\n this.event.emit('statechange', state);\n this.state = state;\n }, 50, {\n immediate: false,\n });\n\n /**\n * Adds or Removes a placeholder class.\n */\n private togglePlaceholderClass(value: string): void {\n value = denormalizeValue(value);\n const className = 'lake-placeholder';\n if (value.replace('<focus />', '') === '<p><br /></p>') {\n this.container.addClass(className);\n } else {\n this.container.removeClass(className);\n }\n }\n\n /**\n * Moves the input text from box strip to normal position.\n */\n private moveBoxStripText(): void {\n const selection = this.selection;\n const range = selection.range;\n const stripNode = range.startNode.closest('.lake-box-strip');\n const boxNode = stripNode.closest('lake-box');\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n } else {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n } else {\n const paragraph = query('<p />');\n if (range.isBoxStart) {\n boxNode.before(paragraph);\n } else {\n boxNode.after(paragraph);\n }\n range.setStart(paragraph, 0);\n range.collapseToStart();\n }\n const text = stripNode.text();\n stripNode.html('<br />');\n selection.insertContents(document.createTextNode(text));\n }\n\n /**\n * Resets the value of \"unsavedInputData\" property.\n */\n private resetUnsavedInputData(): void {\n this.unsavedInputData = '';\n this.unsavedInputCount = 0;\n }\n\n /**\n * Handles input event.\n */\n private handleInputEvent(event: InputEvent | CompositionEvent): void {\n this.selection.updateByRange();\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n return;\n }\n const inputType = event instanceof CompositionEvent ? 'insertText' : event.inputType;\n if (inputType === 'insertText') {\n const inputData = event.data ?? '';\n if (inputData.length > 1) {\n this.history.save({\n inputType: 'insertText',\n update: false,\n });\n return;\n }\n this.unsavedInputData += inputData;\n this.unsavedInputCount++;\n if (this.unsavedInputData.length < this.config.minChangeSize) {\n this.history.save({\n inputType: 'insertText',\n update: this.unsavedInputCount > 1,\n });\n } else {\n this.history.save({\n inputType: 'insertText',\n update: true,\n });\n this.resetUnsavedInputData();\n }\n return;\n }\n this.history.save();\n }\n\n /**\n * Binds events for inputting text.\n */\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n this.container.removeClass('lake-placeholder');\n });\n this.container.on('compositionend', event => {\n this.isComposing = false;\n this.handleInputEvent(event as CompositionEvent);\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n this.isComposing = inputEvent.isComposing;\n if (this.isComposing) {\n return;\n }\n this.handleInputEvent(event as InputEvent);\n });\n }\n\n /**\n * Removes all unused box instances.\n */\n private removeBoxGarbage(): void {\n const instanceMap = getInstanceMap(this.container.id);\n for (const box of instanceMap.values()) {\n if (!box.node.get(0).isConnected) {\n box.unmount();\n instanceMap.delete(box.node.id);\n }\n }\n }\n\n /**\n * Binds events for history.\n */\n private bindHistoryEvents(): void {\n const executeCommonMethods = (value: string) => {\n if (this.fixContent()) {\n this.history.save({\n update: true,\n emitEvent: false,\n });\n value = this.getValue();\n }\n this.emitStateChangeEvent();\n this.togglePlaceholderClass(value);\n this.scrollToCursor();\n this.event.emit('change', value);\n };\n this.history.event.on('undo', value => {\n this.renderBoxes();\n executeCommonMethods(value);\n this.resetUnsavedInputData();\n });\n this.history.event.on('redo', value => {\n this.renderBoxes();\n executeCommonMethods(value);\n this.resetUnsavedInputData();\n });\n this.history.event.on('save', (value, options) => {\n this.removeBoxGarbage();\n executeCommonMethods(value);\n if (options.inputType !== 'insertText') {\n this.selection.sync();\n this.resetUnsavedInputData();\n }\n });\n }\n\n /**\n * Returns translation functions for the specified language.\n */\n public get locale(): TranslationFunctions {\n return i18nObject(this.config.lang as Locales);\n }\n\n /**\n * Sets the default config for the specified plugin.\n */\n public setPluginConfig(name: string, config: Record<string, any>): void {\n if (typeof this.config[name] !== 'object') {\n this.config[name] = {};\n }\n for (const key of Object.keys(config)) {\n if (this.config[name][key] === undefined) {\n this.config[name][key] = config[key];\n }\n }\n }\n\n /**\n * Fixes incorrect content, such as adding paragraphs for void elements or removing empty tags.\n */\n public fixContent(): boolean {\n const range = this.selection.range;\n const cellNode = range.commonAncestor.closest('td');\n const container = cellNode.length > 0 ? cellNode : this.container;\n let changed = false;\n let children = container.children();\n for (const child of children) {\n if ((child.isBlock || child.isMark) && child.html() === '') {\n child.remove();\n changed = true;\n debug(`Content fixed: empty tag \"${child.name}\" was removed`);\n }\n }\n children = container.children();\n if (children.length === 0) {\n container.html('<p><br /></p>');\n range.shrinkBefore(container);\n changed = true;\n debug('Content fixed: default paragraph was added');\n } else if (children.length === 1) {\n const child = children[0];\n if (child.isVoid) {\n const paragraph = query('<p />');\n child.before(paragraph);\n paragraph.append(child);\n range.shrinkAfter(paragraph);\n changed = true;\n debug(`Content fixed: void element \"${child.name}\" was wrapped in paragraph`);\n }\n }\n range.adjustBr();\n return changed;\n }\n\n /**\n * Renders all boxes that haven't been rendered yet.\n */\n public renderBoxes(): void {\n this.removeBoxGarbage();\n const container = this.container;\n const instanceMap = getInstanceMap(container.id);\n container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n if (instanceMap.get(boxNode.id)) {\n return;\n }\n const box = getBox(boxNode);\n box.render();\n });\n }\n\n /**\n * Scrolls to the cursor.\n */\n public scrollToCursor(): void {\n const range = this.selection.range;\n if (range.isBox) {\n return;\n }\n // Creates an artificial cursor that is the same size as the cursor at the current cursor position.\n const rangeRect = range.getRect();\n if (rangeRect.x === 0 || rangeRect.y === 0) {\n return;\n }\n const containerRect = (this.container.get(0) as Element).getBoundingClientRect();\n const artificialCursor = query('<div class=\"lake-artificial-cursor\" />');\n const left = rangeRect.x - containerRect.x;\n const top = rangeRect.y - containerRect.y;\n artificialCursor.css({\n position: 'absolute',\n top: `${top}px`,\n left: `${left}px`,\n width: `${rangeRect.width}px`,\n height: `${rangeRect.height}px`,\n // background: 'red',\n 'z-index': '-1',\n });\n this.overlayContainer.find('.lake-artificial-cursor').remove();\n this.overlayContainer.append(artificialCursor);\n scrollToNode(artificialCursor, {\n behavior: 'instant',\n block: 'nearest',\n inline: 'nearest',\n });\n artificialCursor.remove();\n }\n\n /**\n * Checks whether the editor has focus.\n */\n public hasFocus(): boolean {\n const activeElement = document.activeElement;\n if (!activeElement) {\n return false;\n }\n return query(activeElement).closest('.lake-container').get(0) === this.container.get(0);\n }\n\n /**\n * Sets focus on the editor.\n */\n public focus(): void {\n const range = this.selection.range;\n if (this.container.contains(range.commonAncestor) && range.isBox) {\n return;\n }\n this.container.focus();\n }\n\n /**\n * Removes focus from the editor.\n */\n public blur(): void {\n this.container.blur();\n }\n\n /**\n * Sets the specified content to the editor.\n */\n public setValue(value: string): void {\n value = normalizeValue(value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.container.empty();\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.renderBoxes();\n this.selection.updateByBookmark();\n }\n\n /**\n * Returns the editor's content.\n */\n public getValue(): string {\n const item = this.history.cloneContainer();\n let value = new HTMLParser(item).getHTML();\n value = denormalizeValue(value);\n return value;\n }\n\n /**\n * Renders an editing area and sets default content to it.\n */\n public render(): void {\n const value = normalizeValue(this.config.value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.root.empty();\n this.root.append(this.containerWrapper);\n this.containerWrapper.append(this.container);\n this.containerWrapper.append(this.overlayContainer);\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.unmountPluginMap = Editor.plugin.loadAll(this);\n if (!this.readonly) {\n this.selection.updateByBookmark();\n this.history.save({\n emitEvent: false,\n });\n }\n this.renderBoxes();\n if (this.toolbar) {\n this.toolbar.render(this);\n }\n document.addEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.addEventListener('cut', this.cutListener);\n document.addEventListener('paste', this.pasteListener);\n document.addEventListener('selectionchange', this.selectionchangeListener);\n document.addEventListener('click', this.clickListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n /**\n * Destroys the editor.\n */\n public unmount(): void {\n // Executes delayed executions immediately.\n this.updateSelectionRange.flush();\n this.updateBoxSelectionStyle.flush();\n this.emitStateChangeEvent.flush();\n for (const name of this.unmountPluginMap.keys()) {\n const unmountPlugin = this.unmountPluginMap.get(name);\n if (unmountPlugin) {\n unmountPlugin();\n debug(`Plugin \"${name}\" unmounted`);\n }\n }\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.removeBoxGarbage();\n this.container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n const box = getBox(boxNode);\n box.unmount();\n });\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.off();\n this.root.empty();\n document.removeEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.removeEventListener('cut', this.cutListener);\n document.removeEventListener('paste', this.pasteListener);\n document.removeEventListener('selectionchange', this.selectionchangeListener);\n document.removeEventListener('click', this.clickListener);\n }\n }\n}\n","import type { Editor } from 'lakelib/editor';\nimport { getBox } from 'lakelib/utils/get-box';\n\nexport default (editor: Editor) => {\n editor.event.on('copy', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (!range.isCollapsed) {\n range.adjust();\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n return;\n }\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n const box = getBox(boxNode);\n const content = box.getHTML();\n dataTransfer.setData('text/html', content);\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('cut', (event: ClipboardEvent) => {\n const dataTransfer = event.clipboardData;\n if (!dataTransfer) {\n return;\n }\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n const fragment = editor.selection.range.cloneContents();\n const tempContainer = query('<div />');\n tempContainer.append(fragment);\n dataTransfer.setData('text/html', tempContainer.html());\n editor.selection.deleteContents();\n editor.history.save();\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length === 0) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n return;\n }\n event.preventDefault();\n const box = getBox(boxNode);\n const content = box.getHTML();\n dataTransfer.setData('text/html', content);\n editor.selection.removeBox();\n editor.history.save();\n });\n};\n","import type { Nodes } from '../models/nodes';\nimport { query } from './query';\nimport { template } from './template';\n\n// Changes the tag name of the specified element.\nexport function changeTagName(element: Nodes, newTagName: string): Nodes {\n const nativeElement = element.get(0) as Element;\n const newElement = query(template`<${newTagName} />`);\n for (const attr of nativeElement.attributes) {\n newElement.attr(attr.name, attr.value);\n }\n let child = element.first();\n while (child.length > 0) {\n const nextNode = child.next();\n newElement.append(child);\n child = nextNode;\n }\n element.replaceWith(newElement);\n return newElement;\n}\n","import type { Editor } from 'lakelib/editor';\nimport { blockTagNames } from 'lakelib/config/tag-names';\nimport { getElementRules } from 'lakelib/config/element-rules';\nimport { wrapNodeList } from 'lakelib/utils/wrap-node-list';\nimport { changeTagName } from 'lakelib/utils/change-tag-name';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { removeBreak } from 'lakelib/utils/remove-break';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { normalizeValue } from 'lakelib/utils/normalize-value';\nimport { uploadFile } from 'lakelib/utils/upload-file';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { HTMLParser } from 'lakelib/parsers/html-parser';\nimport { TextParser } from 'lakelib/parsers/text-parser';\n\nconst blockSelector = Array.from(blockTagNames).join(',');\n\nfunction getPasteElementRules(): any {\n const rules = getElementRules();\n rules.div = rules.p;\n for (const key of Object.keys(rules)) {\n const attributeRules = rules[key];\n delete attributeRules.id;\n delete attributeRules.class;\n }\n return rules;\n}\n\nfunction fixNestedBlocks(block: Nodes): void {\n const nodeList = [block];\n for (const node of block.getWalker()) {\n nodeList.push(node);\n }\n for (const node of nodeList) {\n if (node.name === 'div') {\n if (node.find(blockSelector).length > 0) {\n node.remove(true);\n } else {\n changeTagName(node, 'p');\n }\n } else if (node.isHeading || ['blockquote', 'li'].indexOf(node.name) >= 0) {\n node.find(blockSelector).remove(true);\n }\n }\n}\n\nfunction fixClipboardData(fragment: DocumentFragment): void {\n let node = new Nodes(fragment.firstChild);\n while (node.length > 0) {\n const nextNode = node.next();\n if (node.isBlock) {\n fixNestedBlocks(node);\n }\n node = nextNode;\n }\n let nodeList: Nodes[] = [];\n node = new Nodes(fragment.firstChild);\n while (node.length > 0) {\n const nextNode = node.next();\n if (node.isMark || node.isText || node.isBookmark || node.isInlineBox) {\n nodeList.push(node);\n } else {\n wrapNodeList(nodeList);\n nodeList = [];\n }\n node = nextNode;\n }\n wrapNodeList(nodeList);\n}\n\nfunction insertFirstNode(editor: Editor, otherNode: Nodes): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n if (boxNode.length > 0) {\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n } else {\n editor.selection.removeBox();\n }\n } else {\n const paragraph = query('<p />');\n if (range.isBoxStart) {\n boxNode.before(paragraph);\n range.shrinkAfter(paragraph);\n } else if (range.isBoxEnd) {\n boxNode.after(paragraph);\n range.shrinkAfter(paragraph);\n } else {\n editor.selection.removeBox();\n }\n }\n }\n const block = range.startNode.closestBlock();\n if (otherNode.isBlockBox) {\n const box = getBox(otherNode);\n const value = otherNode.attr('value') !== '' ? box.value : undefined;\n editor.selection.insertBox(box.name, value);\n otherNode.remove();\n return;\n }\n if (otherNode.first().length > 0) {\n removeBreak(block);\n }\n if (block.isEmpty && block.name === 'p') {\n block.replaceWith(otherNode);\n otherNode.find('lake-box').each(node => {\n getBox(node).render();\n });\n range.shrinkAfter(otherNode);\n return;\n }\n let child = otherNode.first();\n while (child.length > 0) {\n if (child.name === 'li') {\n child = child.first();\n }\n const nextSibling = child.next();\n editor.selection.insertContents(child);\n if (child.isBox) {\n getBox(child).render();\n } else if (child.isElement) {\n child.find('lake-box').each(node => {\n getBox(node).render();\n });\n }\n child = nextSibling;\n }\n otherNode.remove();\n}\n\nfunction pasteFragment(editor: Editor, fragment: DocumentFragment): void {\n const selection = editor.selection;\n const range = selection.range;\n if (fragment.childNodes.length === 0) {\n return;\n }\n const firstNode = new Nodes(fragment.firstChild);\n let lastNode = new Nodes(fragment.lastChild);\n if (range.getBlocks().length === 0) {\n selection.setBlocks('<p />');\n }\n insertFirstNode(editor, firstNode);\n // remove br\n let child = new Nodes(fragment.firstChild);\n while (child.length > 0) {\n const next = child.next();\n if (child.name === 'br') {\n child.remove();\n }\n child = next;\n }\n lastNode = new Nodes(fragment.lastChild);\n // insert fragment\n if (fragment.childNodes.length > 0) {\n const parts = selection.splitBlock();\n if (parts.start) {\n range.setEndAfter(parts.start);\n range.collapseToEnd();\n }\n if (parts.end && parts.end.isEmpty) {\n parts.end.remove();\n }\n selection.insertContents(fragment);\n editor.renderBoxes();\n range.shrinkAfter(lastNode);\n }\n fixNumberedList(editor.container.children().filter(node => node.isBlock));\n editor.history.save();\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('paste', event => {\n const { requestTypes } = editor.config.image;\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n editor.selection.deleteContents();\n // upload file\n if (dataTransfer.files.length > 0) {\n for (const file of dataTransfer.files) {\n if (requestTypes.indexOf(file.type) >= 0) {\n uploadFile({\n editor,\n name: file.type.indexOf('image/') === 0 ? 'image' : 'file',\n file,\n onError: error => editor.config.onMessage('error', error),\n });\n }\n }\n return;\n }\n const types = dataTransfer.types;\n const isPlainText = (types.length === 1 && types[0] === 'text/plain');\n if (isPlainText) {\n const content = dataTransfer.getData('text/plain');\n const textParser = new TextParser(content);\n const fragment = textParser.getFragment();\n editor.event.emit('beforepaste', fragment);\n pasteFragment(editor, fragment);\n return;\n }\n const content = normalizeValue(dataTransfer.getData('text/html'));\n const rules = getPasteElementRules();\n const htmlParser = new HTMLParser(content, rules);\n const fragment = htmlParser.getFragment();\n editor.event.emit('beforepaste', fragment);\n fixClipboardData(fragment);\n pasteFragment(editor, fragment);\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { template } from 'lakelib/utils/template';\nimport { Nodes } from 'lakelib/models/nodes';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n let draggedNode: Nodes | null = null;\n let dropIndication: Nodes | null = null;\n let targetBlock: Nodes | null = null;\n let dropPosition: 'top' | 'bottom' = 'bottom';\n // The dragstart event is fired when the user starts dragging an element or text selection.\n editor.container.on('dragstart', event => {\n draggedNode = null;\n const dragEvent = event as DragEvent;\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n dataTransfer.effectAllowed = 'move';\n // set the dragged node\n const targetNode = query(dragEvent.target as Element);\n const boxNode = targetNode.closest('lake-box');\n if (boxNode.length === 0) {\n dragEvent.preventDefault();\n return;\n }\n const box = getBox(boxNode);\n if (box.type === 'inline') {\n dragEvent.preventDefault();\n return;\n }\n draggedNode = boxNode;\n // prepare an indication rod\n dropIndication = query(template`\n <div class=\"lake-drop-indication\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"#000000\" viewBox=\"0 0 256 256\">\n <path d=\"M181.66,133.66l-80,80A8,8,0,0,1,88,208V48a8,8,0,0,1,13.66-5.66l80,80A8,8,0,0,1,181.66,133.66Z\"></path>\n </svg>\n </div>\n `);\n editor.overlayContainer.append(dropIndication);\n });\n // The dragover event is fired when an element or text selection is being dragged over a valid drop target (every few hundred milliseconds).\n editor.container.on('dragover', event => {\n const dragEvent = event as DragEvent;\n dragEvent.preventDefault();\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n dataTransfer.dropEffect = 'move';\n if (!dropIndication) {\n return;\n }\n const targetNode = query(dragEvent.target as Element);\n if (targetNode.isContainer) {\n return;\n }\n const targetBoxNode = targetNode.closest('lake-box');\n if (targetBoxNode.length > 0) {\n if (targetBoxNode.isBlockBox) {\n targetBlock = targetBoxNode;\n } else {\n targetBlock = targetBoxNode.closestBlock();\n }\n } else {\n targetBlock = targetNode.closestBlock();\n }\n const containerRect = (editor.container.get(0) as Element).getBoundingClientRect();\n let targetBlcokRect = (targetBlock.get(0) as Element).getBoundingClientRect();\n dropPosition = 'bottom';\n let left = targetBlcokRect.x - containerRect.x;\n let top = targetBlcokRect.y + targetBlcokRect.height - containerRect.y + (Number.parseInt(targetBlock.computedCSS('margin-bottom'), 10) / 2);\n if (dragEvent.clientY < targetBlcokRect.y + (targetBlcokRect.height / 2)) {\n const prevBlock = targetBlock.prev();\n if ((prevBlock.length > 0 && prevBlock.isBlock) || prevBlock.isBlockBox) {\n targetBlock = prevBlock;\n targetBlcokRect = (targetBlock.get(0) as Element).getBoundingClientRect();\n left = targetBlcokRect.x - containerRect.x;\n top = targetBlcokRect.y + targetBlcokRect.height - containerRect.y + (Number.parseInt(targetBlock.computedCSS('margin-bottom'), 10) / 2);\n } else {\n dropPosition = 'top';\n top = targetBlcokRect.y - containerRect.y - (Number.parseInt(editor.container.computedCSS('padding-top'), 10) / 2);\n }\n }\n dropIndication.css({\n top: `${top}px`,\n left: `${left}px`,\n width: `${targetBlcokRect.width}px`,\n display: 'block',\n });\n });\n // The dragend event is fired when a drag operation ends (by releasing a mouse button or hitting the escape key).\n editor.container.on('dragend', () => {\n if (!dropIndication) {\n return;\n }\n dropIndication.remove();\n dropIndication = null;\n });\n // The drop event is fired when an element or text selection is dropped on a valid drop target.\n editor.container.on('drop', event => {\n const dragEvent = event as DragEvent;\n const dataTransfer = dragEvent.dataTransfer;\n if (!dataTransfer) {\n return;\n }\n if (!dropIndication) {\n return;\n }\n dropIndication.remove();\n dropIndication = null;\n // drop a box\n if (draggedNode && targetBlock && draggedNode.isBox) {\n if (draggedNode.get(0) === targetBlock.get(0)) {\n return;\n }\n if (dropPosition === 'bottom' && draggedNode.get(0) === targetBlock.next().get(0)) {\n return;\n }\n dragEvent.preventDefault();\n const draggedBox = getBox(draggedNode);\n const range = editor.selection.range;\n if (targetBlock.isBox) {\n if (dropPosition === 'top') {\n range.selectBoxStart(targetBlock);\n } else {\n range.selectBoxEnd(targetBlock);\n }\n } else {\n range.selectNodeContents(targetBlock);\n if (dropPosition === 'top') {\n range.collapseToStart();\n } else {\n range.collapseToEnd();\n }\n }\n editor.selection.insertBox(draggedBox.name, draggedBox.value);\n draggedNode.remove();\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('undo', {\n isDisabled: () => !editor.history.canUndo,\n execute: () => {\n editor.history.undo();\n },\n });\n editor.keystroke.setKeydown('mod+z', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.command.execute('undo');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('redo', {\n isDisabled: () => !editor.history.canRedo,\n execute: () => {\n editor.history.redo();\n },\n });\n const redoHandler = (event: Event) => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.command.execute('redo');\n };\n editor.keystroke.setKeydown('mod+y', redoHandler);\n editor.keystroke.setKeydown('mod+shift+z', redoHandler);\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('selectAll', {\n execute: () => {\n const range = editor.selection.range;\n range.selectNodeContents(editor.container);\n range.shrink();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('heading', {\n selectedValues: activeItems => {\n const currentItem = activeItems.find(item => item.node.isHeading || item.name === 'p');\n return currentItem ? [currentItem.name] : [];\n },\n execute: (type: string) => {\n editor.selection.setBlocks(`<${type} />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { template } from '../utils/template';\n\nconst typeList = [\n 'info',\n 'tip',\n 'warning',\n 'danger',\n];\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('blockQuote', {\n isSelected: activeItems => !!activeItems.find(item => item.name === 'blockquote'),\n execute: (type?: string) => {\n if (type && typeList.indexOf(type) >= 0) {\n editor.selection.setBlocks(template`<blockquote type=\"${type}\" />`);\n } else {\n editor.selection.setBlocks('<blockquote />');\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\n\nfunction setParagraph(editor: Editor): void {\n editor.selection.setBlocks('<p />');\n}\n\nfunction setNumberedList(editor: Editor): void {\n editor.selection.setBlocks('<ol><li></li></ol>');\n}\n\nfunction setBulletedList(editor: Editor): void {\n editor.selection.setBlocks('<ul><li></li></ul>');\n}\n\nfunction setChecklist(editor: Editor, value: boolean): void {\n editor.selection.setBlocks(`<ul type=\"checklist\"><li value=\"${value}\"></li></ul>`);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('list', {\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.name === 'ol') {\n currentValue = 'numbered';\n break;\n }\n if (item.name === 'ul' && !item.node.hasAttr('type')) {\n currentValue = 'bulleted';\n break;\n }\n if (item.name === 'ul' && item.node.attr('type') === 'checklist') {\n currentValue = 'checklist';\n break;\n }\n }\n return currentValue ? [currentValue] : [];\n },\n execute: (type: 'numbered' | 'bulleted' | 'checklist', value = false) => {\n const blocks = editor.selection.range.getBlocks();\n let isNumberedList = false;\n let isBulletedList = false;\n let isChecklist = false;\n for (const block of blocks) {\n if (!isNumberedList && block.name === 'ol') {\n isNumberedList = true;\n }\n if (!isBulletedList && block.name === 'ul' && !block.hasAttr('type')) {\n isBulletedList = true;\n }\n if (!isChecklist && block.name === 'ul' && block.attr('type') === 'checklist') {\n isChecklist = true;\n }\n }\n if (isNumberedList) {\n if (type === 'numbered') {\n setParagraph(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n } else if (isBulletedList) {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setParagraph(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n } else if (isChecklist) {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setParagraph(editor);\n }\n } else {\n if (type === 'numbered') {\n setNumberedList(editor);\n }\n if (type === 'bulleted') {\n setBulletedList(editor);\n }\n if (type === 'checklist') {\n setChecklist(editor, value);\n }\n }\n editor.history.save();\n },\n });\n editor.container.on('click', event => {\n const mouseEvent = event as MouseEvent;\n if (!mouseEvent.target) {\n return;\n }\n const target = query(mouseEvent.target as Element);\n if (target.name === 'li' && target.attr('value') !== '' && mouseEvent.offsetX <= 18) {\n target.attr('value', (target.attr('value') !== 'true').toString());\n editor.history.save();\n }\n });\n};\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { insertBlock } from 'lakelib/operations/insert-block';\n\n// Inserts a table.\nexport function insertTable(range: Range, rows: number, columns: number): Nodes {\n let html = '<table>';\n for (let i = 0; i < rows; i++) {\n html += '<tr>';\n for (let j = 0; j < columns; j++) {\n html += '<td><p><br /></p></td>';\n }\n html += '</tr>';\n }\n html += '</table>';\n const tableNode = query(html);\n insertBlock(range, tableNode);\n range.shrinkBefore(tableNode);\n debug(`insertTable: table ${tableNode.id}`);\n return tableNode;\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\n\n// Removes a table.\nexport function deleteTable(range: Range): void {\n const tableNode = range.startNode.closest('table');\n const block = query('<p><br /></p>');\n tableNode.replaceWith(block);\n range.shrinkBefore(block);\n debug(`deleteTable: table ${tableNode.id}`);\n}\n","type TableMap = HTMLTableCellElement[][];\n\n// Returns a virtual map of the specified table, treating merged cells as if they were split.\nexport function getTableMap(table: HTMLTableElement): TableMap {\n const tableMap: TableMap = [];\n for (let i = 0; i < table.rows.length; i++) {\n tableMap[i] = [];\n }\n for (let rowIndex = 0; rowIndex < tableMap.length; rowIndex++) {\n const row = table.rows[rowIndex];\n const cells = tableMap[rowIndex];\n let newCellIndex = 0;\n for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex++) {\n newCellIndex = cellIndex;\n while (cells[newCellIndex]) {\n newCellIndex++;\n }\n const cell = row.cells[cellIndex];\n for (let i = 0; i < cell.colSpan; i++) {\n for (let j = 0; j < cell.rowSpan; j++) {\n const targetRowCells = tableMap[rowIndex + j];\n if (targetRowCells) {\n targetRowCells[newCellIndex + i] = cell;\n }\n }\n }\n }\n }\n return tableMap;\n}\n\n// Returns the virtual index of a cell, treating merged cells as if they were split.\nexport function getColumnIndex(tableMap: TableMap, rowIndex: number, currentCell: HTMLTableCellElement): number {\n const currentRowCells = tableMap[rowIndex];\n for (let cellIndex = 0; cellIndex < currentRowCells.length; cellIndex++) {\n const cell = currentRowCells[cellIndex];\n if (cell === currentCell) {\n return cellIndex;\n }\n }\n return -1;\n}\n\n// Returns the real index of a cell by an column index that treats merged cells as if they were split.\n//\n// Example:\n//\n// Table map:\n// a1 b1 b1 d1 e1 f1\n// a2 b1 b1 d2 e2 f2\n// a3 b1 b1 d3 e2 f3\n//\n// Result:\n// b1: vertual index is 1, real index is 1\n// f1: vertual index is 5, real index is 4\n// f2: vertual index is 5, real index is 3\n// f3: vertual index is 5, real index is 2\nexport function getCellIndex(tableMap: TableMap, rowIndex: number, columnIndex: number): number {\n const currentRowCells = tableMap[rowIndex];\n const aboveRowCells = tableMap[rowIndex - 1];\n let cellIndex = columnIndex;\n for (let i = 0; i < columnIndex; i++) {\n const cell = currentRowCells[i];\n const nextCell = currentRowCells[i + 1];\n if (cell === nextCell) {\n cellIndex--;\n } else if (aboveRowCells) {\n const aboveCell = aboveRowCells[i];\n if (cell === aboveCell) {\n cellIndex--;\n }\n }\n }\n return cellIndex;\n}\n\n// Returns a boolean value indicating whether the column contains a cell merged with adjacent cell.\nexport function isNormalColumn(tableMap: TableMap, columnIndex: number): boolean {\n for (let i = 0; i < tableMap.length; i++) {\n const cells = tableMap[i];\n const cell = cells[columnIndex];\n const belowRowCells = tableMap[i + 1];\n if (belowRowCells && cell.colSpan !== belowRowCells[columnIndex].colSpan) {\n return false;\n }\n }\n return true;\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\n\ntype InsertColumnDirection = 'left' | 'right';\n\n// Inserts a column to the left or right of the start of the specified range.\nexport function insertColumn(range: Range, direction: InsertColumnDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n // a column should be inserted into columnIndex\n let columnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n if (direction === 'right') {\n const currentRowCells = tableMap[currentRowIndex];\n columnIndex++;\n if (currentRowCells) {\n while (currentCell === currentRowCells[columnIndex]) {\n columnIndex++;\n }\n }\n }\n debug(`insertColumn: rows ${table.rows.length}, column ${columnIndex}, ${direction}`);\n for (let i = 0; i < table.rows.length; i++) {\n const row = table.rows[i];\n const cells = tableMap[i];\n const cellIndex = getCellIndex(tableMap, i, columnIndex);\n const cell = row.cells[cellIndex];\n if (cell && cell.colSpan > 1 && cell === cells[columnIndex - 1]) {\n cell.colSpan += 1;\n if (cell.rowSpan > 1) {\n i += cell.rowSpan - 1;\n }\n } else {\n const newCell = row.insertCell(cellIndex);\n newCell.innerHTML = '<p><br /></p>';\n }\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex, isNormalColumn } from './utils';\nimport { deleteTable } from './delete-table';\n\n// Removes the column containing the start of the specified range from a table.\nexport function deleteColumn(range: Range): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n let newTargetCell: HTMLTableCellElement | null = null;\n const realIndex = currentCell.cellIndex;\n if (currentRow.cells[realIndex + 1]) {\n newTargetCell = currentRow.cells[realIndex + 1];\n } else if (currentRow.cells[realIndex - 1]) {\n newTargetCell = currentRow.cells[realIndex - 1];\n }\n debug(`deleteColumn: rows ${table.rows.length}, column ${currentColumnIndex}`);\n const isNormal = isNormalColumn(tableMap, currentColumnIndex);\n for (let i = 0; i < table.rows.length; i++) {\n const row = table.rows[i];\n const cellIndex = getCellIndex(tableMap, i, currentColumnIndex);\n const cell = row.cells[cellIndex];\n if (cell.rowSpan > 1) {\n i += cell.rowSpan - 1;\n }\n if (cell.colSpan > 1 && !isNormal) {\n cell.colSpan -= 1;\n if (cell.colSpan === 1) {\n cell.removeAttribute('colSpan');\n }\n } else {\n if (cell === currentCell && newTargetCell) {\n range.shrinkBefore(query(newTargetCell));\n }\n row.deleteCell(cellIndex);\n }\n }\n if (table.rows[0].cells.length === 0) {\n deleteTable(range);\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getCellIndex } from './utils';\n\ntype InsertRowDirection = 'up' | 'down';\n\n// Inserts a row above or below the start of the specified range.\nexport function insertRow(range: Range, direction: InsertRowDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n let tableMap = getTableMap(table);\n const columnCount = tableMap[0].length;\n let targetRowIndex: number;\n if (direction === 'up') {\n targetRowIndex = currentRow.rowIndex;\n } else {\n targetRowIndex = currentRow.rowIndex + 1;\n }\n const targetRow = table.rows[targetRowIndex];\n debug(`insertRow: rows ${table.rows.length}, target row ${targetRowIndex}`);\n const newRow = table.insertRow(targetRowIndex);\n // last row\n if (!targetRow) {\n for (let i = 0; i < columnCount; i++) {\n const newCell = newRow.insertCell(newRow.cells.length);\n newCell.innerHTML = '<p><br /></p>';\n }\n return;\n }\n tableMap = getTableMap(table);\n targetRowIndex = targetRow.rowIndex;\n let prevCellIndex = -1;\n for (let i = 0; i < columnCount; i++) {\n const cellIndex = getCellIndex(tableMap, targetRowIndex, i);\n if (cellIndex !== prevCellIndex) {\n prevCellIndex = cellIndex;\n const cell = targetRow.cells[cellIndex];\n if (!cell) {\n break;\n }\n const newCell = newRow.insertCell(newRow.cells.length);\n newCell.innerHTML = '<p><br /></p>';\n if (cell.colSpan > 1) {\n newCell.colSpan = cell.colSpan;\n i += cell.colSpan - 1;\n }\n }\n }\n // correct the rowSpan of the affected cells\n for (let i = targetRowIndex - 1; i >= 0; i--) {\n const cells = table.rows[i].cells;\n for (let j = 0; j < cells.length; j++) {\n const cell = cells[j];\n if (cell.rowSpan > 1 && cell.rowSpan + 1 > targetRowIndex - i) {\n cell.rowSpan += 1;\n }\n }\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\nimport { deleteTable } from './delete-table';\n\n// Removes the row containing the start of the specified range from a table.\nexport function deleteRow(range: Range): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n let tableMap = getTableMap(table);\n const columnCount = tableMap[0].length;\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n const newTargetRow = table.rows[currentRowIndex + 1] || table.rows[currentRowIndex - 1];\n debug(`deleteRow: rows ${table.rows.length}, target row ${currentRowIndex}, column ${currentColumnIndex}`);\n // correct the rowSpan of the affected cells\n for (let i = currentRowIndex - 1; i >= 0; i--) {\n const cells = table.rows[i].cells;\n for (let j = 0; j < cells.length; j++) {\n const cell = cells[j];\n if (cell.rowSpan > 1 && cell.rowSpan > currentRowIndex - i) {\n cell.rowSpan -= 1;\n if (cell.rowSpan === 1) {\n cell.removeAttribute('rowSpan');\n }\n }\n }\n }\n const belowRow = table.rows[currentRowIndex + 1];\n if (belowRow) {\n let prevCellIndex = -1;\n for (let i = 0; i < columnCount; i++) {\n const cellIndex = getCellIndex(tableMap, currentRowIndex, i);\n if (cellIndex !== prevCellIndex) {\n prevCellIndex = cellIndex;\n const cell = currentRow.cells[cellIndex];\n if (cell.rowSpan > 1) {\n const belowCellIndex = getCellIndex(tableMap, currentRowIndex + 1, i);\n let newCell = belowRow.insertCell(belowCellIndex);\n const clonedCell = cell.cloneNode(true) as HTMLTableCellElement;\n clonedCell.removeAttribute('rowSpan');\n newCell.replaceWith(clonedCell);\n newCell = clonedCell;\n if (cell.rowSpan > 2) {\n newCell.rowSpan = cell.rowSpan - 1;\n }\n }\n }\n }\n }\n table.deleteRow(currentRowIndex);\n if (newTargetRow) {\n tableMap = getTableMap(table);\n const cellIndex = getCellIndex(tableMap, newTargetRow.rowIndex, currentColumnIndex);\n const newTargetCell = newTargetRow.cells[cellIndex];\n if (newTargetCell) {\n range.shrinkBefore(query(newTargetCell));\n }\n }\n if (table.rows.length === 0) {\n deleteTable(range);\n }\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex } from './utils';\n\nexport type MergeDirection = 'up' | 'right' | 'down' | 'left';\n\n// Merges adjacent cells.\nexport function mergeCells(range: Range, direction: MergeDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const tableMap = getTableMap(table);\n // merge cell left or right\n if (direction === 'left' || direction === 'right') {\n const cellIndex = currentCell.cellIndex;\n let cell: HTMLTableCellElement;\n let otherCellIndex: number;\n let otherCell: HTMLTableCellElement;\n if (direction === 'left') {\n cell = currentRow.cells[cellIndex - 1];\n otherCellIndex = cellIndex;\n otherCell = currentCell;\n } else {\n cell = currentCell;\n otherCellIndex = cellIndex + 1;\n otherCell = currentRow.cells[otherCellIndex];\n }\n if (!cell || !otherCell) {\n return;\n }\n debug(`mergeCells: row ${currentRowIndex}, cell ${cellIndex}, other row ${currentRowIndex}, other cell ${otherCellIndex}`);\n if (cell.rowSpan !== otherCell.rowSpan) {\n return;\n }\n const currentRowCells = tableMap[currentRowIndex];\n const columnIndex = getColumnIndex(tableMap, currentRowIndex, cell);\n const otherColumnIndex = getColumnIndex(tableMap, currentRowIndex, otherCell);\n // check whether the two cells are adjacent\n if (currentRowCells[columnIndex + 1] !== otherCell && currentRowCells[otherColumnIndex - 1] !== cell) {\n return;\n }\n cell.colSpan += otherCell.colSpan;\n mergeNodes(query(cell), query(otherCell));\n range.shrinkBefore(query(cell));\n return;\n }\n // merge cell up or down\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n let rowIndex: number;\n let cell: HTMLTableCellElement | null;\n let otherRowIndex: number;\n let otherRow: HTMLTableRowElement;\n let otherCellIndex: number;\n let otherCell: HTMLTableCellElement | null;\n if (direction === 'up') {\n rowIndex = -1;\n cell = null;\n for (let i = currentRow.rowIndex - 1; i >= 0; i--) {\n const cells = tableMap[i];\n if (!cells) {\n break;\n }\n const aboveCell = cells[currentColumnIndex];\n if (!aboveCell) {\n break;\n }\n if (cell && aboveCell !== cell) {\n break;\n }\n rowIndex = i;\n cell = aboveCell;\n }\n otherRowIndex = currentRow.rowIndex;\n otherRow = currentRow;\n otherCellIndex = currentCell.cellIndex;\n otherCell = currentCell;\n } else {\n rowIndex = currentRow.rowIndex;\n cell = currentCell;\n otherRowIndex = -1;\n otherCell = null;\n otherCellIndex = -1;\n for (let i = currentRow.rowIndex + 1; i < table.rows.length; i++) {\n const cells = tableMap[i];\n if (!cells) {\n break;\n }\n const belowCell = cells[currentColumnIndex];\n if (!belowCell) {\n break;\n }\n if (belowCell !== otherCell) {\n otherRowIndex = i;\n otherCell = belowCell;\n otherCellIndex = otherCell.cellIndex;\n break;\n }\n }\n otherRow = table.rows[otherRowIndex];\n if (!otherRow) {\n return;\n }\n }\n if (!cell || !otherCell) {\n return;\n }\n debug(`mergeCells: row ${rowIndex}, cell ${cell.cellIndex}, other row ${otherRowIndex}, other cell ${otherCellIndex}`);\n if (cell.colSpan !== otherCell.colSpan) {\n return;\n }\n cell.rowSpan += otherCell.rowSpan;\n mergeNodes(query(cell), query(otherCell));\n range.shrinkBefore(query(cell));\n}\n","import { debug } from 'lakelib/utils/debug';\nimport { Range } from 'lakelib/models/range';\nimport { getTableMap, getColumnIndex, getCellIndex } from './utils';\n\nexport type SplitDirection = 'leftRight' | 'topBottom';\n\n// Splits a cell that contains the start of the specified range from a table.\nexport function splitCell(range: Range, direction: SplitDirection): void {\n const cellNode = range.startNode.closest('td');\n const tableNode = cellNode.closest('table');\n const rowNode = cellNode.closest('tr');\n const table = tableNode.get(0) as HTMLTableElement;\n const currentRow = rowNode.get(0) as HTMLTableRowElement;\n const currentCell = cellNode.get(0) as HTMLTableCellElement;\n const currentRowIndex = currentRow.rowIndex;\n const originalRowSpan = currentCell.rowSpan;\n const originalColSpan = currentCell.colSpan;\n let tableMap = getTableMap(table);\n const currentColumnIndex = getColumnIndex(tableMap, currentRowIndex, currentCell);\n debug(`splitCell: row ${currentRowIndex}, cell ${currentColumnIndex}, ${direction}`);\n // split cell top and bottom\n if (direction === 'topBottom') {\n const currentRowCells = tableMap[currentRowIndex];\n for (let i = 0; i < currentRowCells.length; i++) {\n const cell = currentRowCells[i];\n if (cell === currentCell) {\n // insert a cell after current cell\n const targetRow = originalRowSpan > 1 ? table.rows[currentRowIndex + 1] : table.insertRow(currentRowIndex + 1);\n const cellIndex = getCellIndex(tableMap, currentRowIndex + 1, currentColumnIndex);\n const newCell = targetRow.insertCell(cellIndex);\n newCell.innerHTML = '<p><br /></p>';\n // copy colSpan and rowSpan from current cell\n if (currentCell.colSpan > 1) {\n newCell.colSpan = currentCell.colSpan;\n }\n if (currentCell.rowSpan > 2) {\n newCell.rowSpan = currentCell.rowSpan - 1;\n }\n currentCell.removeAttribute('rowSpan');\n tableMap = getTableMap(table);\n } else if (originalRowSpan === 1) {\n // correct the rowSpan of the affected cells\n for (let j = currentRowIndex; j >= 0; j--) {\n const aboveCellList = tableMap[j];\n if (j === 0 || cell !== aboveCellList[i]) {\n cell.rowSpan += 1;\n break;\n }\n }\n tableMap = getTableMap(table);\n }\n if (cell.colSpan > 1) {\n i += cell.colSpan - 1;\n }\n }\n return;\n }\n // split cell left and right\n for (let i = 0; i < tableMap.length; i++) {\n const row = table.rows[i];\n const cells = tableMap[i];\n const cell = cells[currentColumnIndex];\n if (cell === currentCell) {\n const aboveCellList = tableMap[i - 1];\n if (!aboveCellList || cell !== aboveCellList[currentColumnIndex]) {\n const cellIndex = getCellIndex(tableMap, i, currentColumnIndex);\n const newCell = row.insertCell(cellIndex + 1);\n newCell.innerHTML = '<p><br /></p>';\n if (cell.rowSpan > 1) {\n newCell.rowSpan = cell.rowSpan;\n }\n if (cell.colSpan > 2) {\n newCell.colSpan = cell.colSpan - 1;\n }\n cell.removeAttribute('colSpan');\n }\n } else {\n for (let j = currentColumnIndex; j >= 0; j--) {\n if (j === 0 || cell !== cells[j]) {\n if (originalColSpan === 1) {\n cell.colSpan += 1;\n }\n break;\n }\n }\n }\n }\n}\n","import './table.css';\nimport { KeyValue } from 'lakelib/types/object';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { DropdownMenuItem } from 'lakelib/types/dropdown';\nimport { icons } from 'lakelib/icons';\nimport { colorMenuItems } from 'lakelib/config/menu-items';\nimport { toHex } from 'lakelib/utils/to-hex';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { FloatingToolbar } from 'lakelib/ui/floating-toolbar';\nimport { Editor } from 'lakelib/editor';\nimport { insertTable } from './insert-table';\nimport { deleteTable } from './delete-table';\nimport { insertColumn } from './insert-column';\nimport { deleteColumn } from './delete-column';\nimport { insertRow } from './insert-row';\nimport { deleteRow } from './delete-row';\nimport { mergeCells, MergeDirection } from './merge-cells';\nimport { splitCell, SplitDirection } from './split-cell';\n\nconst columnMenuItems: DropdownMenuItem[] = [\n {\n value: 'insertLeft',\n text: locale => locale.table.insertColumnLeft(),\n },\n {\n value: 'insertRight',\n text: locale => locale.table.insertColumnRight(),\n },\n {\n value: 'delete',\n text: locale => locale.table.deleteColumn(),\n },\n];\n\nconst rowMenuItems: DropdownMenuItem[] = [\n {\n value: 'insertAbove',\n text: locale => locale.table.insertRowAbove(),\n },\n {\n value: 'insertBelow',\n text: locale => locale.table.insertRowBelow(),\n },\n {\n value: 'delete',\n text: locale => locale.table.deleteRow(),\n },\n];\n\nconst mergeMenuItems: DropdownMenuItem[] = [\n {\n value: 'up',\n text: locale => locale.table.mergeUp(),\n },\n {\n value: 'right',\n text: locale => locale.table.mergeRight(),\n },\n {\n value: 'down',\n text: locale => locale.table.mergeDown(),\n },\n {\n value: 'left',\n text: locale => locale.table.mergeLeft(),\n },\n];\n\nconst splitMenuItems: DropdownMenuItem[] = [\n {\n value: 'leftRight',\n text: locale => locale.table.splitLeftRight(),\n },\n {\n value: 'topBottom',\n text: locale => locale.table.splitTopBottom(),\n },\n];\n\nfunction getFloatingToolbarItems(editor: Editor, values: KeyValue): ToolbarItem[] {\n const items: ToolbarItem[] = [\n {\n name: 'expand',\n type: 'button',\n icon: icons.get('expand'),\n tooltip: locale => locale.table.fitTable(),\n isSelected: () => {\n const range = editor.selection.range;\n const tableNode = range.startNode.closest('table');\n if (tableNode.length === 0) {\n return false;\n }\n const width = tableNode.css('width');\n const pageWidth = `${editor.container.innerWidth() - 2}px`;\n return width === pageWidth;\n },\n onClick: () => {\n const range = editor.selection.range;\n const tableNode = range.startNode.closest('table');\n if (tableNode.length === 0) {\n return;\n }\n const width = tableNode.css('width');\n const pageWidth = `${editor.container.innerWidth() - 2}px`;\n if (width === pageWidth) {\n tableNode.css('width', '');\n } else {\n tableNode.css('width', pageWidth);\n }\n editor.history.save();\n },\n },\n {\n name: 'backgroundColor',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('backgroundColor'),\n accentIcon: icons.get('backgroundColorAccent'),\n defaultValue: values.backgroundColor,\n tooltip: locale => locale.table.cellBackground(),\n menuType: 'color',\n menuItems: colorMenuItems,\n menuWidth: '296px',\n selectedValues: () => {\n const range = editor.selection.range;\n const cellNode = range.startNode.closest('td');\n if (cellNode.length > 0) {\n const currentValue = cellNode.computedCSS('background-color');\n return [toHex(currentValue)];\n }\n return [];\n },\n onSelect: (_, value) => {\n const range = editor.selection.range;\n const cellNode = range.startNode.closest('td');\n cellNode.css('background-color', value);\n values.backgroundColor = value;\n editor.history.save();\n },\n },\n {\n name: 'tableColumn',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableColumn'),\n tooltip: locale => locale.table.column(),\n menuType: 'list',\n menuItems: columnMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n if (value === 'insertLeft') {\n insertColumn(range, 'left');\n } else if (value === 'insertRight') {\n insertColumn(range, 'right');\n } else {\n deleteColumn(range);\n }\n editor.history.save();\n },\n },\n {\n name: 'tableRow',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableRow'),\n tooltip: locale => locale.table.row(),\n menuType: 'list',\n menuItems: rowMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n if (value === 'insertAbove') {\n insertRow(range, 'up');\n } else if (value === 'insertBelow') {\n insertRow(range, 'down');\n } else {\n deleteRow(range);\n }\n editor.history.save();\n },\n },\n {\n name: 'tableMerge',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableMerge'),\n tooltip: locale => locale.table.merge(),\n menuType: 'list',\n menuItems: mergeMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n mergeCells(range, value as MergeDirection);\n editor.history.save();\n },\n },\n {\n name: 'tableSplit',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('tableSplit'),\n tooltip: locale => locale.table.split(),\n menuType: 'list',\n menuItems: splitMenuItems,\n menuCheck: false,\n onSelect: (_, value) => {\n const range = editor.selection.range;\n splitCell(range, value as SplitDirection);\n editor.history.save();\n },\n },\n {\n name: 'remove',\n type: 'button',\n icon: icons.get('remove'),\n tooltip: locale => locale.table.remove(),\n onClick: () => {\n deleteTable(editor.selection.range);\n editor.history.save();\n },\n },\n ];\n return items;\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const floatingToolbarValues: KeyValue = {\n backgroundColor: '',\n };\n let toolbar: FloatingToolbar | null = null;\n let savedTableNode: Nodes | null = null;\n editor.event.on('statechange', () => {\n editor.container.find('table').removeClass('lake-table-focused');\n editor.container.find('td').removeClass('lake-td-focused');\n if (toolbar) {\n toolbar.updateState();\n }\n const range = editor.selection.range;\n const cellNode = range.commonAncestor.closest('td');\n const tableNode = cellNode.closest('table');\n if (savedTableNode && savedTableNode.get(0) === tableNode.get(0)) {\n tableNode.addClass('lake-table-focused');\n cellNode.addClass('lake-td-focused');\n return;\n }\n savedTableNode = tableNode;\n if (toolbar) {\n toolbar.unmount();\n }\n if (tableNode.length > 0) {\n tableNode.addClass('lake-table-focused');\n cellNode.addClass('lake-td-focused');\n const items = getFloatingToolbarItems(editor, floatingToolbarValues);\n toolbar = new FloatingToolbar({\n target: tableNode,\n items,\n });\n toolbar.render();\n }\n });\n editor.command.add('table', {\n execute: () => {\n const range = editor.selection.range;\n insertTable(range, 3, 2);\n editor.history.save();\n },\n });\n return () => {\n if (toolbar) {\n toolbar.unmount();\n }\n };\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst alignValueMap: Record<string, string> = {\n start: 'left',\n end: 'right',\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('align', {\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.node.isBlock) {\n currentValue = item.node.computedCSS('text-align');\n break;\n }\n }\n if (!currentValue) {\n return [];\n }\n return [alignValueMap[currentValue] || currentValue];\n },\n execute: (type: 'left' | 'center' | 'right' | 'justify') => {\n editor.selection.setBlocks({\n 'text-align': type,\n });\n editor.history.save();\n },\n });\n};\n","import type { Nodes } from '../models/nodes';\nimport { fixNumberedList } from './fix-numbered-list';\n\n// Increases or decreases the margin area on the left side of a block.\nexport function indentBlock(block: Nodes, type: 'increase' | 'decrease'): void {\n if (block.isList) {\n let indent = Number.parseInt(block.attr('indent'), 10) || 0;\n if (type === 'increase') {\n indent++;\n } else {\n indent--;\n }\n if (indent <= 0) {\n indent = 0;\n } else if (indent > 10) {\n return;\n }\n if (indent === 0) {\n block.removeAttr('indent');\n } else {\n block.attr('indent', indent.toString(10));\n }\n fixNumberedList([block]);\n return;\n }\n let value = Number.parseInt(block.css('margin-left'), 10) || 0;\n if (type === 'decrease' && value === 0 && block.css('text-indent') !== '') {\n block.css('text-indent', '');\n return;\n }\n if (type === 'increase') {\n value += 40;\n } else {\n value -= 40;\n }\n if (value <= 0) {\n value = 0;\n }\n if (value === 0) {\n block.css('margin-left', '');\n } else {\n block.css('margin-left', `${value}px`);\n }\n}\n","import type { Editor } from 'lakelib/editor';\nimport { indentBlock } from 'lakelib/utils/indent-block';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('indent', {\n execute: (type: 'increase' | 'decrease') => {\n const blocks = editor.selection.range.getBlocks();\n for (const block of blocks) {\n indentBlock(block, type);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'strong';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('bold', {\n isDisabled: activeItems => !!activeItems.find(item => item.node.isHeading),\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('bold')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+b', event => {\n event.preventDefault();\n editor.command.execute('bold');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'i';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('italic', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('italic')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+i', event => {\n event.preventDefault();\n editor.command.execute('italic');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'u';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('underline', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('underline')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+u', event => {\n event.preventDefault();\n editor.command.execute('underline');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 's';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('strikethrough', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('strikethrough')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n editor.keystroke.setKeydown('mod+shift+x', event => {\n event.preventDefault();\n editor.command.execute('strikethrough');\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'sub';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('subscript', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('subscript')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'sup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('superscript', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('superscript')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nconst tagName = 'code';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('code', {\n isSelected: activeItems => !!activeItems.find(item => item.name === tagName),\n execute: () => {\n if (editor.command.isSelected('code')) {\n editor.selection.removeMark(`<${tagName} />`);\n } else {\n editor.selection.addMark(`<${tagName} />`);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontFamily', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.css('font-family');\n return [currentValue.replace(/['\"]/g, '')];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"font-family: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontSize', {\n isDisabled: activeItems => !!activeItems.find(item => item.node.isHeading),\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.css('font-size');\n return [currentValue.replace(/\\.\\d+/, '')];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"font-size: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { toHex } from 'lakelib/utils/to-hex';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontColor', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.computedCSS('color');\n return [toHex(currentValue)];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"color: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { toHex } from 'lakelib/utils/to-hex';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('highlight', {\n selectedValues: activeItems => {\n for (const item of activeItems) {\n if (item.name === 'span') {\n const currentValue = item.node.computedCSS('background-color');\n return [toHex(currentValue)];\n }\n }\n return [];\n },\n execute: (value: string) => {\n editor.selection.addMark(`<span style=\"background-color: ${value};\" />`);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('removeFormat', {\n execute: () => {\n editor.selection.removeMark();\n editor.history.save();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { Nodes } from 'lakelib/models/nodes';\n\nconst formatPainterClassName = 'lake-format-painter';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n let markList: Nodes[] = [];\n editor.command.add('formatPainter', {\n execute: () => {\n editor.container.addClass(formatPainterClassName);\n const activeItems = editor.selection.getActiveItems();\n for (const item of activeItems) {\n const node = item.node.clone();\n if (node.isMark && node.name !== 'a') {\n markList.push(node);\n }\n }\n },\n });\n editor.container.on('click', () => {\n editor.container.removeClass(formatPainterClassName);\n if (markList.length === 0) {\n return;\n }\n for (const mark of markList) {\n editor.selection.addMark(mark);\n }\n markList = [];\n editor.history.save();\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (editor.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"formatPainter\"]').length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nvar ownKeys = function(o) {\r\n ownKeys = Object.getOwnPropertyNames || function (o) {\r\n var ar = [];\r\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\r\n return ar;\r\n };\r\n return ownKeys(o);\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n\r\nexport function __addDisposableResource(env, value, async) {\r\n if (value !== null && value !== void 0) {\r\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\r\n var dispose, inner;\r\n if (async) {\r\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\r\n dispose = value[Symbol.asyncDispose];\r\n }\r\n if (dispose === void 0) {\r\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\r\n dispose = value[Symbol.dispose];\r\n if (async) inner = dispose;\r\n }\r\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\r\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\r\n env.stack.push({ value: value, dispose: dispose, async: async });\r\n }\r\n else if (async) {\r\n env.stack.push({ async: true });\r\n }\r\n return value;\r\n\r\n}\r\n\r\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n var e = new Error(message);\r\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\r\n\r\nexport function __disposeResources(env) {\r\n function fail(e) {\r\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\r\n env.hasError = true;\r\n }\r\n var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import './link-popup.css';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { TranslationFunctions } from 'lakelib/i18n/types';\nimport { icons } from 'lakelib/icons';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { visibleInfo } from 'lakelib/utils/visible-info';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Button } from 'lakelib/ui/button';\nimport { i18nObject } from 'lakelib/i18n';\n\ninterface LinkPopupConfig {\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n onShow?: () => void;\n onHide?: () => void;\n}\n\n// The LinkPopup class represents a dialog for editing a hyperlink.\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private locale: TranslationFunctions;\n\n private linkNode: Nodes | null = null;\n\n public container: Nodes;\n\n constructor(config?: LinkPopupConfig) {\n this.config = config || {};\n this.locale = this.config.locale || i18nObject('en-US');\n this.container = query(template`\n <div class=\"lake-popup lake-link-popup\">\n <div class=\"lake-row\">${this.locale.link.url()}</div>\n <div class=\"lake-row lake-url-row\">\n <input type=\"text\" name=\"url\" />\n </div>\n <div class=\"lake-row\">${this.locale.link.title()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"title\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n }\n\n // Writes the specified text to the system clipboard\n private async writeClipboardText(text: string): Promise<boolean> {\n let error = false;\n try {\n if (window.LAKE_TEST) {\n error = window.LAKE_ERROR;\n } else {\n await navigator.clipboard.writeText(text);\n }\n } catch {\n error = true;\n }\n return new Promise(resolve => {\n resolve(error);\n });\n }\n\n // Copy link to clipboard\n private appendCopyButton(): void {\n const config = this.config;\n let timeoutId: number | null = null;\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'copy',\n icon: icons.get('copy'),\n tooltip: this.locale.link.copy(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n this.writeClipboardText(url).then((error: boolean) => {\n const svgNode = this.container.find('button[name=\"copy\"] svg');\n svgNode.hide();\n if (error) {\n svgNode.eq(2).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n return;\n }\n svgNode.eq(1).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n }\n timeoutId = window.setTimeout(() => {\n svgNode.hide();\n svgNode.eq(0).show('inline');\n }, 2000);\n });\n },\n });\n button.render();\n const copyDoneIcon = icons.get('checkCircle');\n if (copyDoneIcon) {\n button.node.append(copyDoneIcon);\n }\n const copyErrorIcon = icons.get('warningCircle');\n if (copyErrorIcon) {\n button.node.append(copyErrorIcon);\n }\n }\n\n // Open link in new tab\n private appendOpenButton(): void {\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'open',\n icon: icons.get('open'),\n tooltip: this.locale.link.open(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n window.open(url);\n },\n });\n button.render();\n }\n\n // Save link\n private appendSaveButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'save',\n icon: icons.get('check'),\n text: this.locale.link.save(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const linkNode = this.linkNode;\n this.save();\n this.hide();\n if (this.config.onSave) {\n this.config.onSave(linkNode);\n }\n },\n });\n button.render();\n this.container.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n this.container.find('input[name=\"title\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n }\n\n // Remove link\n private appendUnlinkButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'unlink',\n icon: icons.get('unlink'),\n text: this.locale.link.unlink(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const lastChild = this.linkNode.last();\n this.linkNode.remove(true);\n this.hide();\n if (this.config.onRemove) {\n this.config.onRemove(lastChild);\n }\n },\n });\n button.render();\n }\n\n private save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n let title = this.container.find('input[name=\"title\"]').value();\n if (url === '' && title === '') {\n this.linkNode.remove();\n return;\n }\n if (title === '') {\n title = url;\n }\n this.linkNode.attr('href', url);\n this.linkNode.text(title);\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(): void {\n if (!this.linkNode) {\n return;\n }\n const visible = visibleInfo(this.linkNode);\n if (visible.bottom !== 0) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const linkNativeNode = this.linkNode.get(0) as HTMLElement;\n const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n if (linkRect.x + this.container.width() > window.innerWidth) {\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n this.container.css('top', `${linkY - this.container.height()}px`);\n } else {\n this.container.css('top', `${linkY + linkRect.height}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public show(linkNode: Nodes): void {\n if (!this.container.get(0).isConnected) {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n query(document.body).append(this.container);\n }\n if (this.linkNode && this.linkNode.get(0) === linkNode.get(0)) {\n return;\n }\n this.linkNode = linkNode;\n const url = linkNode.attr('href');\n const title = linkNode.text();\n this.container.find('input[name=\"url\"]').value(url);\n if (title !== url) {\n this.container.find('input[name=\"title\"]').value(title);\n }\n this.container.css('visibility', 'hidden');\n this.container.show();\n this.updatePosition();\n this.container.css('visibility', '');\n this.container.find('input[name=\"url\"]').focus();\n const viewport = linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n if (this.config.onShow) {\n this.config.onShow();\n }\n }\n\n public hide(): void {\n if (this.linkNode) {\n const viewport = this.linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n }\n this.linkNode = null;\n this.container.hide();\n window.removeEventListener('resize', this.resizeListener);\n if (this.config.onHide) {\n this.config.onHide();\n }\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { insertContents } from 'lakelib/operations/insert-contents';\nimport { splitMarks } from 'lakelib/operations/split-marks';\nimport { insertBookmark } from 'lakelib/operations/insert-bookmark';\nimport { toBookmark } from 'lakelib/operations/to-bookmark';\n\n// Inserts a link element into the specified range.\nexport function insertLink(range: Range, value: string | Nodes): Nodes | null {\n if (range.commonAncestor.isOutside) {\n return null;\n }\n const valueNode = query(value);\n if (range.isCollapsed) {\n let linkNode = range.commonAncestor.closest('a');\n if (linkNode.length === 0) {\n linkNode = valueNode.clone(true);\n insertContents(range, linkNode);\n return linkNode;\n }\n const url = valueNode.attr('href');\n if (url !== '') {\n linkNode.attr({\n href: valueNode.attr('href'),\n });\n }\n return linkNode;\n }\n splitMarks(range);\n const bookmark = insertBookmark(range);\n for (const child of range.commonAncestor.getWalker()) {\n if (child.name === 'a' && range.intersectsNode(child)) {\n child.remove(true);\n }\n }\n const linkNode = valueNode.clone(false);\n bookmark.anchor.after(linkNode);\n let node = linkNode.next();\n while (node.length > 0) {\n const nextNode = node.next();\n if (!node.isMark && !node.isText) {\n break;\n }\n linkNode.append(node);\n node = nextNode;\n }\n if (linkNode.first().length === 0) {\n linkNode.remove();\n }\n toBookmark(range, bookmark);\n return linkNode;\n}\n","import { Nodes } from 'lakelib/models/nodes';\nimport { Editor } from 'lakelib/editor';\nimport { LinkPopup } from './link-popup';\nimport { insertLink } from './insert-link';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const popup = new LinkPopup({\n locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onShow: () => {\n editor.popup = popup;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (popup.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (\n linkNode.length === 0\n || !editor.container.contains(linkNode)\n || linkNode.closest('lake-box').length > 0\n ) {\n if (!popup.visible) {\n return;\n }\n editor.selection.sync();\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const range = editor.selection.range;\n const linkNode = insertLink(range, `<a href=\"\">${editor.locale.link.newLink()}</a>`);\n if (!linkNode) {\n return;\n }\n editor.history.save();\n popup.show(linkNode);\n },\n });\n return () => popup.unmount();\n};\n","import './hr-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\n\nexport default {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-hr\"><hr /></div>');\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: () => '<hr />',\n} as BoxComponent;\n","import { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Fragment } from 'lakelib/models/fragment';\nimport { Editor } from 'lakelib/editor';\nimport hrBox from './hr-box';\n\nexport {\n hrBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.event.on('beforepaste', (nativeFragment: DocumentFragment) => {\n const fragment = new Fragment(nativeFragment);\n fragment.find('hr').each(nativeNode => {\n const node = query(nativeNode);\n const box = getBox('hr');\n node.replaceWith(box.node);\n });\n });\n editor.command.add('hr', {\n execute: () => {\n editor.selection.insertBox('hr');\n editor.history.save();\n },\n });\n};\n","import './code-block-box.css';\nimport debounce from 'debounce';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { debug } from 'lakelib/utils/debug';\nimport { query } from 'lakelib/utils/query';\nimport { Dropdown } from 'lakelib/ui/dropdown';\n\nconst config = {\n comment: '#57606a',\n name: '#444d56',\n variableName: '#953800',\n typeName: '#0550ae',\n propertyName: '#444d56',\n className: '#24292e',\n labelName: '#005cc5',\n namespace: '#0550ae',\n macroName: '#444d56',\n literal: '#444d56',\n string: '#0a3069',\n number: '#0550ae',\n bool: '#0550ae',\n regexp: '#116329',\n color: '#0550ae',\n keyword: '#cf222e',\n modifier: '#24292f',\n operator: '#cf222e',\n bracket: '#57606a',\n content: '#57606a',\n meta: '#8250df',\n heading: '#0550ae',\n invalid: '#f6f8fa',\n definition: '#cf222e',\n constant: '#0550ae',\n function: '#005cc5',\n standard: '#444d56',\n special: '#444d56',\n};\n\n// https://lezer.codemirror.net/docs/ref/#highlight.tags\nfunction getHighlightStyle(CodeMirror: any): any {\n const { HighlightStyle, tags } = CodeMirror;\n return HighlightStyle.define([\n { tag: [tags.comment, tags.lineComment, tags.blockComment, tags.docComment], color: config.comment },\n { tag: [tags.name], color: config.name },\n { tag: [tags.variableName, tags.self], color: config.variableName },\n { tag: [tags.typeName, tags.tagName], color: config.typeName },\n { tag: [tags.propertyName, tags.attributeName], color: config.propertyName },\n { tag: [tags.className], color: config.className },\n { tag: [tags.labelName], color: config.labelName },\n { tag: [tags.namespace], color: config.namespace },\n { tag: [tags.macroName], color: config.macroName },\n { tag: [tags.literal], color: config.literal },\n { tag: [tags.string, tags.docString, tags.character, tags.attributeValue, tags.unit], color: config.string },\n { tag: [tags.number, tags.integer, tags.float], color: config.number },\n { tag: [tags.bool, tags.null, tags.atom], color: config.bool },\n { tag: [tags.regexp, tags.escape, tags.url], color: config.regexp },\n { tag: [tags.color], color: config.color },\n { tag: [\n tags.keyword, tags.operatorKeyword, tags.controlKeyword,\n tags.definitionKeyword, tags.moduleKeyword,\n ], color: config.keyword },\n { tag: [tags.modifier], color: config.modifier },\n { tag: [\n tags.operator, tags.derefOperator, tags.arithmeticOperator, tags.logicOperator, tags.bitwiseOperator,\n tags.compareOperator, tags.updateOperator, tags.definitionOperator, tags.typeOperator, tags.controlOperator,\n ], color: config.operator },\n { tag: [\n tags.punctuation, tags.separator, tags.bracket, tags.angleBracket, tags.squareBracket,\n tags.paren, tags.brace, tags.contentSeparator,\n ], color: config.bracket },\n { tag: [tags.content], color: config.content },\n { tag: [tags.meta, tags.documentMeta, tags.annotation, tags.processingInstruction], color: config.meta },\n { tag: tags.heading, fontWeight: 'bold', color: config.heading },\n { tag: tags.strong, fontWeight: 'bold' },\n { tag: tags.emphasis, fontStyle: 'italic' },\n { tag: tags.link, textDecoration: 'underline' },\n { tag: tags.strikethrough, textDecoration: 'line-through' },\n { tag: [tags.invalid, tags.inserted, tags.deleted, tags.changed], color: config.invalid },\n { tag: [tags.definition(tags.name)], color: config.definition },\n { tag: [tags.constant(tags.name)], color: config.constant },\n { tag: [tags.function(tags.variableName)], color: config.function },\n { tag: [tags.standard(tags.name)], color: config.standard },\n { tag: [tags.special(tags.variableName)], color: config.special },\n ]);\n}\n\nexport default {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-code-block\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const codeBlockNativeNode = rootNode.get(0) as HTMLElement;\n if (!codeBlockNativeNode) {\n return;\n }\n // begin to create CodeMirror\n const CodeMirror = window.LakeCodeMirror;\n if (!CodeMirror) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n rootNode.addClass('lake-code-block-error');\n rootNode.text(`\n The code cannot be displayed because window.LakeCodeMirror is not found.\n Please check if the \"lake-codemirror\" library is added to this page.\n `.trim());\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n return;\n }\n const {\n EditorState, Compartment, EditorView,\n keymap, history, defaultKeymap, historyKeymap,\n indentWithTab, syntaxHighlighting,\n } = CodeMirror;\n const defaultLangItems = CodeMirror.langItems;\n const codeBlockConfig = editor.config.codeBlock;\n const langItems = defaultLangItems.filter(\n (item: any) => codeBlockConfig.langList.indexOf(item.value) >= 0,\n );\n // language menu items\n const langItemMap = new Map<string, any>();\n for (const item of langItems) {\n langItemMap.set(item.value, item);\n }\n const boxValue = box.value;\n const langItem = langItemMap.get(boxValue.lang);\n const language = new Compartment();\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n const updateListener = EditorView.updateListener.of((update: any) => {\n if (!update.docChanged) {\n return;\n }\n changeHandler(update.state.doc.toString());\n });\n const codeEditor = new EditorView({\n parent: codeBlockNativeNode,\n doc: boxValue.code ?? '',\n extensions: [\n EditorState.readOnly.of(editor.readonly),\n EditorView.editable.of(!editor.readonly),\n history(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n indentWithTab,\n ]),\n syntaxHighlighting(getHighlightStyle(CodeMirror)),\n language.of(langItem && langItem.component ? langItem.component() : []),\n updateListener,\n ],\n });\n rootNode.find('[contenteditable=\"true\"]').attr('tabindex', '-1');\n const dropdown = new Dropdown({\n root: rootNode,\n name: 'langType',\n downIcon: icons.get('down'),\n defaultValue: langItem ? boxValue.lang : codeBlockConfig.defaultLang,\n tooltip: editor.locale.codeBlock.langType(),\n location: 'global',\n menuType: 'list',\n menuHeight: '200px',\n menuItems: langItems.map((item: any) => ({\n value: item.value,\n text: item.text,\n })),\n onSelect: value => {\n box.updateValue({\n lang: value,\n });\n box.unmount();\n box.render();\n editor.selection.selectBox(box);\n editor.history.save();\n },\n });\n dropdown.render();\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n dropdown.unmount();\n codeEditor.destroy();\n debug('CodeMirror destroyed');\n });\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport codeBlockBox from './code-block-box';\n\nexport {\n codeBlockBox,\n};\n\nconst langList = [\n 'text',\n 'c',\n 'csharp',\n 'cpp',\n 'css',\n 'go',\n 'html',\n 'java',\n 'javascript',\n 'json',\n 'markdown',\n 'php',\n 'python',\n 'rust',\n 'sql',\n 'typescript',\n 'xml',\n 'yaml',\n];\n\nexport default (editor: Editor) => {\n if (!window.LakeCodeMirror) {\n return;\n }\n editor.setPluginConfig('codeBlock', {\n langList,\n defaultLang: 'text',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('codeBlock', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('codeBlock', value);\n editor.history.save();\n box.getContainer().find('.lake-code-block').emit('click');\n },\n });\n};\n","import { TranslationFunctions } from '../i18n/types';\nimport { CornerToolbarItem } from '../types/corner-toolbar';\nimport { template } from '../utils/template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ninterface CornerToolbarConfig {\n locale?: TranslationFunctions;\n root: string | Node | Nodes;\n items: CornerToolbarItem[];\n}\n\n// The CornerToolbar class represents a button group located in the top-right corner of a box.\nexport class CornerToolbar {\n private config: CornerToolbarConfig;\n\n private locale: TranslationFunctions;\n\n private root: Nodes;\n\n public container: Nodes;\n\n constructor(config: CornerToolbarConfig) {\n this.config = config;\n this.locale = this.config.locale || i18nObject('en-US');\n this.root = query(config.root);\n this.container = query('<div class=\"lake-corner-toolbar\" />');\n }\n\n private appendButton(item: CornerToolbarItem): void {\n const buttonNode = query(template`\n <button type=\"button\" name=\"${item.name}\" tabindex=\"-1\" />\n `);\n const tooltip = typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(this.locale);\n buttonNode.attr('title', tooltip);\n if (item.icon) {\n buttonNode.append(item.icon);\n }\n this.container.append(buttonNode);\n buttonNode.on('click', event => {\n event.preventDefault();\n item.onClick(event);\n });\n }\n\n public render(): void {\n const { items } = this.config;\n if (items.length === 0) {\n return;\n }\n this.root.append(this.container);\n for (const item of items) {\n this.appendButton(item);\n }\n }\n}\n","import { query } from '../utils/query';\nimport { template } from '../utils/template';\nimport { Nodes } from '../models/nodes';\n\ninterface ResizerConfig {\n root: string | Node | Nodes;\n target: string | Node | Nodes;\n onResize?: (width: number, height: number) => void;\n onStop: (width: number, height: number) => void;\n}\n\n// The Resizer class represents a UI component used to resize images or videos.\nexport class Resizer {\n private config: ResizerConfig;\n\n private root: Nodes;\n\n private target: Nodes;\n\n public container: Nodes;\n\n constructor(config: ResizerConfig) {\n this.config = config;\n this.root = query(config.root);\n this.target = query(config.target);\n this.container = query(template`\n <div class=\"lake-resizer\">\n <div class=\"lake-resizer-top-left\"></div>\n <div class=\"lake-resizer-top-right\"></div>\n <div class=\"lake-resizer-bottom-left\"></div>\n <div class=\"lake-resizer-bottom-right\"></div>\n <div class=\"lake-resizer-info\"></div>\n </div>\n `);\n }\n\n private bindEvents(pointerNode: Nodes): void {\n const target = this.target;\n const infoNode = this.container.find('.lake-resizer-info');\n const isPlus = pointerNode.attr('class').indexOf('-right') >= 0;\n const initialWidth = target.width();\n const initialHeight = target.height();\n const rate = initialHeight / initialWidth;\n let clientX = 0;\n let width = 0;\n // resizing box\n const pointermoveListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const diffX = pointerEvent.clientX - clientX;\n const newWidth = Math.round(isPlus ? width + diffX : width - diffX);\n const newHeight = Math.round(rate * newWidth);\n infoNode.text(`${newWidth} x ${newHeight}`);\n target.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n if (this.config.onResize) {\n this.config.onResize(newWidth, newHeight);\n }\n };\n // start resizing\n const pointerdownListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const pointerNativeNode = pointerNode.get(0) as Element;\n // The capture will be implicitly released after a pointerup or pointercancel event.\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/setPointerCapture\n try {\n // Test case throws an exception on Firefox.\n pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n } catch { /* empty */ }\n clientX = pointerEvent.clientX;\n width = target.width();\n infoNode.text(`${initialWidth} x ${initialHeight}`);\n infoNode.show();\n pointerNode.on('pointermove', pointermoveListener);\n };\n // stop resizing\n const pointerupListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n width = target.width();\n const height = Math.round(rate * width);\n this.config.onStop(width, height);\n };\n // cancel resizing\n const pointercancelListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n };\n pointerNode.on('pointerdown', pointerdownListener);\n pointerNode.on('pointerup', pointerupListner);\n pointerNode.on('pointercancel', pointercancelListner);\n }\n\n public render(): void {\n this.bindEvents(this.container.find('.lake-resizer-top-left'));\n this.bindEvents(this.container.find('.lake-resizer-top-right'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-left'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-right'));\n this.root.append(this.container);\n }\n}\n","import './image-box.css';\nimport 'photoswipe/style.css';\nimport PhotoSwipeLightbox, { DataSource } from 'photoswipe/lightbox';\nimport PhotoSwipe from 'photoswipe';\nimport debounce from 'debounce';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { CornerToolbarItem } from 'lakelib/types/corner-toolbar';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Box } from 'lakelib/models/box';\nimport { CornerToolbar } from 'lakelib/ui/corner-toolbar';\nimport { Resizer } from 'lakelib/ui/resizer';\n\ninterface ImageInfo {\n node: Nodes;\n width?: number;\n height?: number;\n}\n\nconst alignValueMap: Record<string, string> = {\n start: 'left',\n end: 'right',\n};\n\nfunction updateBoxMarginBottom(box: Box, captionNode: Nodes): void {\n const height = captionNode.height();\n box.node.find('.lake-box-strip').css('margin-bottom', `${height}px`);\n}\n\nfunction showCaption(box: Box, captionNode: Nodes): void {\n captionNode.show();\n updateBoxMarginBottom(box, captionNode);\n}\n\nfunction hideCaption(box: Box, captionNode: Nodes): void {\n captionNode.hide();\n box.node.find('.lake-box-strip').css('margin-bottom', '');\n}\n\n// Creates floating toolbar for the box.\nfunction renderFloatingToolbar(box: Box): void {\n const items: ToolbarItem[] = [\n {\n name: 'caption',\n type: 'button',\n icon: icons.get('caption'),\n tooltip: locale => locale.image.caption(),\n isSelected: () => {\n const boxContainer = box.getContainer();\n const captionNode = boxContainer.find('.lake-image-caption');\n return captionNode.length > 0 && captionNode.computedCSS('display') !== 'none';\n },\n onClick: () => {\n const boxContainer = box.getContainer();\n const captionNode = boxContainer.find('.lake-image-caption');\n const caption = captionNode.text().trim();\n if (caption === '') {\n captionNode.addClass('lake-placeholder');\n }\n showCaption(box, captionNode);\n captionNode.focus();\n if (box.toolbar) {\n box.toolbar.updateState();\n }\n },\n },\n {\n name: 'align',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.image.align(),\n menuType: 'list',\n menuItems: [\n { value: 'left', text: locale => locale.image.alignLeft() },\n { value: 'center', text: locale => locale.image.alignCenter() },\n { value: 'right', text: locale => locale.image.alignRight() },\n ],\n selectedValues: activeItems => {\n let currentValue;\n for (const item of activeItems) {\n if (item.node.isBlock) {\n currentValue = item.node.computedCSS('text-align');\n break;\n }\n }\n if (!currentValue) {\n return [];\n }\n return [alignValueMap[currentValue] || currentValue];\n },\n onSelect: (editor, value) => {\n editor.command.execute('align', value);\n },\n },\n {\n name: 'resize',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('resize'),\n tooltip: locale => locale.image.resize(),\n menuType: 'list',\n menuItems: [\n { value: 'page', text: locale => locale.image.pageWidth() },\n { value: '1.00', text: locale => locale.image.originalWidth() },\n { value: '0.75', text: locale => locale.image.imageWidth('75%') },\n { value: '0.50', text: locale => locale.image.imageWidth('50%') },\n { value: '0.25', text: locale => locale.image.imageWidth('25%') },\n ],\n selectedValues: () => {\n const { originalWidth, width } = box.value;\n const editor = box.getEditor();\n const pageWidth = editor.container.innerWidth() - 2;\n let currentValue = '';\n if (width === pageWidth) {\n currentValue = 'page';\n } else {\n currentValue = (width / originalWidth).toFixed(2);\n }\n return [currentValue];\n },\n onSelect: (editor, value) => {\n const { originalWidth, originalHeight } = box.value;\n const boxContainer = box.getContainer();\n const rootNode = boxContainer.find('.lake-image');\n const captionNode = boxContainer.find('.lake-image-caption');\n const rate = originalHeight / originalWidth;\n let newWidth: number;\n if (value === 'page') {\n newWidth = editor.container.innerWidth() - 2;\n } else {\n newWidth = Math.round(originalWidth * Number(value));\n }\n const newHeight = Math.round(rate * newWidth);\n rootNode.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n boxContainer.css('width', `${newWidth}px`);\n updateBoxMarginBottom(box, captionNode);\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n },\n {\n name: 'open',\n type: 'button',\n icon: icons.get('open'),\n tooltip: locale => locale.image.open(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n ];\n box.setToolbar(items);\n}\n\n// Loads an image and get its width and height.\nasync function getImageInfo(url: string): Promise<ImageInfo> {\n const node = query('<img />');\n node.css({\n position: 'absolute',\n top: '0',\n left: '-8888px',\n 'z-index': '-1',\n visibility: 'hidden',\n });\n return new Promise(resolve => {\n node.on('load', () => {\n const imgNativeNode = node.get(0) as HTMLImageElement;\n const width = imgNativeNode.width;\n const height = imgNativeNode.height;\n node.remove();\n node.removeAttr('style');\n resolve({\n node,\n width,\n height,\n });\n });\n node.on('error', () => {\n node.remove();\n resolve({\n node,\n });\n });\n node.attr('src', url);\n query(document.body).append(node);\n });\n}\n\n// Previews an image.\nfunction openFullScreen(box: Box): void {\n const editor = box.getEditor();\n const dataSource: DataSource = [];\n let currentIndex = 0;\n const allImageBox = editor.container.find('lake-box[name=\"image\"]');\n allImageBox.each((node, index) => {\n const imageBox = getBox(node);\n const imageValue = imageBox.value;\n if (imageValue.status !== 'done') {\n return;\n }\n dataSource.push({\n id: index,\n src: imageValue.originalUrl || imageValue.url,\n width: imageValue.originalWidth || imageValue.width,\n height: imageValue.originalHeight || imageValue.height,\n alt: imageValue.name,\n });\n if (box.node.id === imageBox.node.id) {\n currentIndex = index;\n }\n });\n const lightbox = new PhotoSwipeLightbox({\n pswpModule: PhotoSwipe,\n dataSource,\n mainClass: 'lake-pswp',\n zoom: false,\n returnFocus: false,\n arrowPrevSVG: icons.get('left'),\n arrowNextSVG: icons.get('right'),\n closeSVG: icons.get('close'),\n arrowPrevTitle: editor.locale.image.previous(),\n arrowNextTitle: editor.locale.image.next(),\n closeTitle: editor.locale.image.close(),\n errorMsg: editor.locale.image.loadingError(),\n });\n lightbox.on('uiRegister', () => {\n const pswp: any = lightbox.pswp;\n pswp.ui.registerElement({\n name: 'zoom-out-button',\n order: 8,\n isButton: true,\n title: editor.locale.image.zoomOut(),\n html: icons.get('zoomOut'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel - step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n pswp.ui.registerElement({\n name: 'zoom-in-button',\n order: 9,\n isButton: true,\n title: editor.locale.image.zoomIn(),\n html: icons.get('zoomIn'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel + step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n });\n lightbox.addFilter('thumbEl', (thumbnail, itemData) => {\n const imgNode = allImageBox.eq(itemData.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.get(0) as HTMLElement;\n }\n return thumbnail as HTMLElement;\n });\n lightbox.addFilter('placeholderSrc', (placeholderSrc, slide) => {\n const imgNode = allImageBox.eq(slide.data.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.attr('src');\n }\n return placeholderSrc;\n });\n lightbox.on('openingAnimationEnd', () => {\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n box.event.emit('closefullscreen');\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Creates caption for image.\nfunction renderCaption(box: Box): Nodes {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const defaultCaption = (box.value.caption || '').trim();\n const captionNode = query('<div class=\"lake-image-caption\" />');\n captionNode.text(defaultCaption);\n boxContainer.append(captionNode);\n if (defaultCaption === '') {\n hideCaption(box, captionNode);\n } else {\n showCaption(box, captionNode);\n }\n if (editor.readonly) {\n captionNode.css('-webkit-user-modify', 'read-only');\n return captionNode;\n }\n captionNode.attr('contenteditable', 'true');\n captionNode.attr('placeholder', editor.locale.image.captionPlaceholder());\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('caption', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n captionNode.on('input', () => {\n const caption = captionNode.text().trim();\n if (caption === '') {\n captionNode.addClass('lake-placeholder');\n } else {\n captionNode.removeClass('lake-placeholder');\n }\n const height = captionNode.height();\n box.node.find('.lake-box-strip').css('margin-bottom', `${height}px`);\n changeHandler(caption);\n });\n // For supporting \"user-modify: read-write-plaintext-only\" in Firefox\n captionNode.on('paste', event => {\n event.preventDefault();\n const dataTransfer = (event as ClipboardEvent).clipboardData;\n if (!dataTransfer) {\n return;\n }\n const text = dataTransfer.getData('text/plain').trim();\n document.execCommand('insertText', false, text);\n });\n captionNode.on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n editor.selection.selectBox(box);\n }\n });\n captionNode.on('focusout', () => {\n const caption = captionNode.text().trim();\n if (caption === '') {\n hideCaption(box, captionNode);\n }\n });\n return captionNode;\n}\n\n// Displays error icon and filename.\nasync function renderError(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n boxContainer.css({\n width: '',\n height: '',\n });\n const errorNode = query(template`\n <div class=\"lake-error\">\n <div class=\"lake-error-icon\"></div>\n <div class=\"lake-error-name\">${value.name || ''}</div>\n </div>\n `);\n const imageBrokenIcon = icons.get('imageBroken');\n if (imageBrokenIcon) {\n errorNode.find('.lake-error-icon').append(imageBrokenIcon);\n }\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n rootNode.append(errorNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n}\n\n// Displays an image with uplaoding progress.\nasync function renderUploading(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!boxContainer.get(0).isConnected) {\n return;\n }\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(box);\n return;\n }\n const maxWidth = editor.container.innerWidth() - 2;\n const width = imageInfo.width < maxWidth ? imageInfo.width : maxWidth;\n const height = Math.round(width * imageInfo.height / imageInfo.width);\n box.updateValue({\n width,\n height,\n originalWidth: imageInfo.width,\n originalHeight: imageInfo.height,\n });\n boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const percent = Math.round(value.percent || 0);\n const progressNode = query(template`\n <div class=\"lake-progress\">\n <div class=\"lake-percent\">${percent} %</div>\n </div>\n `);\n if (width < 80) {\n progressNode.find('.lake-percent').hide();\n }\n const circleNotchIcon = icons.get('circleNotch');\n if (circleNotchIcon) {\n progressNode.prepend(circleNotchIcon);\n }\n const imgNode = imageInfo.node;\n imageInfo.node.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n rootNode.append(progressNode);\n rootNode.append(imgNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n}\n\n// Displays an image that can be previewed or removed.\nasync function renderDone(box: Box): Promise<void> {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!boxContainer.get(0).isConnected) {\n return;\n }\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(box);\n return;\n }\n if (!value.originalWidth || !value.originalHeight) {\n box.updateValue({\n originalWidth: imageInfo.width,\n originalHeight: imageInfo.height,\n });\n }\n let width = value.width;\n let height = value.height;\n if (!width || !height) {\n const maxWidth = editor.container.innerWidth() - 2;\n width = Math.round(imageInfo.width < maxWidth ? imageInfo.width : maxWidth);\n height = Math.round(width * imageInfo.height / imageInfo.width);\n box.updateValue({\n width,\n height,\n });\n }\n const imgNode = imageInfo.node;\n imgNode.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n rootNode.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const cornerToolbarItems: CornerToolbarItem[] = [];\n if (width >= 80 && PhotoSwipeLightbox !== null) {\n cornerToolbarItems.push({\n name: 'view',\n icon: icons.get('maximize'),\n tooltip: editor.locale.image.view(),\n onClick: () => openFullScreen(box),\n });\n }\n if (!editor.readonly) {\n cornerToolbarItems.push({\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.image.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n });\n }\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: cornerToolbarItems,\n }).render();\n rootNode.append(imgNode);\n boxContainer.empty();\n boxContainer.append(rootNode);\n boxContainer.css({\n width: `${width}px`,\n height: '',\n });\n const captionNode = renderCaption(box);\n renderFloatingToolbar(box);\n new Resizer({\n root: rootNode,\n target: rootNode,\n onResize: newWidth => {\n boxContainer.css('width', `${newWidth}px`);\n updateBoxMarginBottom(box, captionNode);\n },\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n}\n\nexport default {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'loading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n if (value.width && value.height && boxContainer.find('.lake-progress').length === 0) {\n boxContainer.css({\n width: `${value.width}px`,\n height: `${value.height}px`,\n });\n boxContainer.empty();\n const placeholderNode = query('<div class=\"lake-image-placeholder\" />');\n boxContainer.append(placeholderNode);\n const imageIcon = icons.get('image');\n if (imageIcon) {\n placeholderNode.append(imageIcon);\n }\n }\n if (boxContainer.first().length === 0) {\n // The following code is for unit testing because some test cases need to\n // select the content of the box before it is completely loaded.\n // Example:\n // range.setStart(box.getContainer(), 1);\n boxContainer.append('<div />');\n }\n // for test\n if (value.status === 'loading') {\n return;\n }\n let promise: Promise<void>;\n if (value.status === 'uploading') {\n promise = renderUploading(box);\n } else if (value.status === 'error') {\n promise = renderError(box);\n } else {\n promise = renderDone(box);\n }\n promise.then(() => {\n boxContainer.find('.lake-image').on('click', () => {\n editor.selection.selectBox(box);\n });\n box.event.emit('render');\n });\n },\n html: box => {\n const rawValue = box.node.attr('value');\n return template`<img src=\"${box.value.url}\" data-lake-value=\"${rawValue}\" />`;\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { Fragment } from 'lakelib/models/fragment';\nimport { Editor } from 'lakelib/editor';\nimport imageBox from './image-box';\n\nexport {\n imageBox,\n};\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('image', {\n requestMethod: 'POST',\n requestTypes: ['image/gif', 'image/jpeg', 'image/png', 'image/svg+xml'],\n });\n if (editor.readonly) {\n return;\n }\n editor.event.on('beforepaste', (nativeFragment: DocumentFragment) => {\n const fragment = new Fragment(nativeFragment);\n fragment.find('img').each(nativeNode => {\n const node = query(nativeNode);\n const box = getBox('image');\n const value = node.attr('data-lake-value');\n if (value === '') {\n box.value = {\n url: node.attr('src'),\n status: 'done',\n };\n } else {\n box.node.attr('value', value);\n }\n node.replaceWith(box.node);\n });\n });\n editor.command.add('image', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('image', value);\n editor.history.save();\n },\n });\n};\n","import './video-box.css';\nimport { isKeyHotkey } from 'is-hotkey';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { Box } from 'lakelib/models/box';\nimport { Button } from 'lakelib/ui/button';\nimport { CornerToolbar } from 'lakelib/ui/corner-toolbar';\nimport { Resizer } from 'lakelib/ui/resizer';\n\nfunction getVideoId(url: string): string {\n const result = /\\w+$/.exec(url || '');\n return result ? result[0] : '';\n}\n\nfunction appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = boxContainer.find('.lake-video');\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.video.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n}\n\nfunction showVideo(box: Box): void {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const value = box.value;\n const width = value.width || 560;\n const height = value.height || 315;\n boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const videoId = getVideoId(value.url);\n if (videoId === '') {\n throw new Error(`Invalid link: ${value.url}`);\n }\n // YouTube URL: https://www.youtube.com/watch?v=5sMBhDv4sik\n // The script for embedding YouTube:\n // <iframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/5sMBhDv4sik\" title=\"YouTube video player\"\n // frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n // referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n const iframeNode = query(template`\n <iframe width=\"100%\" height=\"${height}\" src=\"https://www.youtube.com/embed/${videoId}\" title=\"YouTube video player\"\n frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\n referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n `);\n const rootNode = boxContainer.find('.lake-video');\n if (!editor.readonly) {\n iframeNode.on('load', () => {\n appendButtonGroup(box);\n new CornerToolbar({\n locale: editor.locale,\n root: rootNode,\n items: [\n {\n name: 'remove',\n icon: icons.get('remove'),\n tooltip: editor.locale.video.remove(),\n onClick: event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ],\n }).render();\n new Resizer({\n root: rootNode,\n target: boxContainer,\n onResize: (newWidth, newHeight) => {\n iframeNode.attr({\n height: newHeight.toString(),\n });\n },\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n });\n }\n rootNode.append(iframeNode);\n}\n\nexport default {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n const locale = editor.locale;\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-video\" />');\n boxContainer.empty();\n boxContainer.css({\n width: '',\n height: '',\n });\n boxContainer.append(rootNode);\n if (!value.url) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const formNode = query(template`\n <div class=\"lake-video-form\">\n <div class=\"lake-row lake-desc-row\">${locale.video.description()}</div>\n <div class=\"lake-row\">${locale.video.url()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"url\" placeholder=\"https://www.youtube.com/watch?v=...\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n const button = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'embed',\n type: 'primary',\n text: locale.video.embed(),\n onClick: () => {\n const url = formNode.find('input[name=\"url\"]').value();\n if (url.indexOf('https://www.youtube.com/') < 0 || getVideoId(url) === '') {\n editor.config.onMessage('error', locale.video.urlError());\n return;\n }\n box.updateValue('url', url);\n editor.history.save();\n formNode.remove();\n showVideo(box);\n },\n });\n formNode.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n button.render();\n rootNode.append(formNode);\n appendButtonGroup(box);\n } else {\n showVideo(box);\n }\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport videoBox from './video-box';\n\nexport {\n videoBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('video', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('video', value);\n editor.history.save();\n if (box) {\n box.getContainer().find('input[name=\"url\"]').focus();\n }\n },\n });\n};\n","// Returns a human-readable file size string from a number.\nexport function fileSize(size: number): string {\n const units = ['KB', 'MB', 'GB'];\n let i = 0;\n size /= 1024;\n while (size > 1024 && i < 2) {\n size /= 1024;\n i++;\n }\n const sizeString = size > 0 ? Math.max(size, 0.1).toFixed(1) : 0;\n return `${sizeString} ${units[i]}`;\n}\n","import './file-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { ToolbarItem } from 'lakelib/types/toolbar';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { fileSize } from 'lakelib/utils/file-size';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Box } from 'lakelib/models/box';\n\nfunction setFloatingToolbar(box: Box): void {\n let items: ToolbarItem[] = [\n {\n name: 'download',\n type: 'button',\n icon: icons.get('download'),\n tooltip: locale => locale.file.download(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n {\n name: 'remove',\n type: 'button',\n icon: icons.get('remove'),\n tooltip: locale => locale.file.remove(),\n onClick: editor => {\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ];\n if (box.value.status !== 'done') {\n items = items.filter(item => item.name === 'remove');\n }\n box.setToolbar(items);\n}\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\n const value = box.value;\n const infoNode = query(template`\n <div class=\"lake-file-info\">\n <div class=\"lake-file-type\"></div>\n <div class=\"lake-file-name\">${value.name} (${fileSize(value.size)})</div>\n </div>\n `);\n const typeNode = infoNode.find('.lake-file-type');\n if (value.status === 'uploading') {\n const percent = Math.round(value.percent || 0);\n const progressNode = query(template`\n <div class=\"lake-progress\">\n <div class=\"lake-percent\">${percent} %</div>\n </div>\n `);\n const circleNotchIcon = icons.get('circleNotch');\n if (circleNotchIcon) {\n progressNode.prepend(circleNotchIcon);\n }\n typeNode.replaceWith(progressNode);\n } else {\n const fileIcon = value.status === 'error' ? icons.get('warningCircle') : icons.get('file');\n if (fileIcon) {\n typeNode.append(fileIcon);\n }\n }\n rootNode.append(infoNode);\n}\n\nexport default {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-file\" />');\n rootNode.addClass(`lake-file-${value.status}`);\n appendContent(rootNode, box);\n boxContainer.empty();\n boxContainer.append(rootNode);\n if (!editor.readonly) {\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n setFloatingToolbar(box);\n } else {\n rootNode.on('click', () => {\n window.open(value.url);\n });\n }\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport fileBox from './file-box';\n\nexport {\n fileBox,\n};\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('file', {\n requestMethod: 'POST',\n requestTypes: [\n 'application/zip',\n 'application/x-zip-compressed',\n 'application/vnd.rar',\n 'image/gif',\n 'image/jpeg',\n 'image/png',\n 'image/svg+xml',\n 'text/plain',\n 'text/html',\n 'application/pdf',\n 'application/msword',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'application/vnd.ms-powerpoint',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n ],\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('file', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('file', value);\n editor.history.save();\n },\n });\n};\n","import './emoji-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\n\nexport default {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query(template`\n <div class=\"lake-emoji\"><img src=\"${value.url}\" title=\"${value.title}\" /></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport emojiBox from './emoji-box';\n\nexport {\n emojiBox,\n};\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('emoji', {\n execute: (value: BoxValue) => {\n editor.selection.insertBox('emoji', value);\n editor.history.save();\n },\n });\n};\n","import './equation-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { icons } from 'lakelib/icons';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\nimport { Box } from 'lakelib/models/box';\nimport { Button } from 'lakelib/ui/button';\n\nconst defaultExpression = String.raw`\\sqrt{x}`;\n\nfunction renderError(box: Box): void {\n const editor = box.getEditor();\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const defaultCode = (box.value.code || '').trim();\n const rootNode = box.getContainer().find('.lake-equation');\n rootNode.addClass('lake-equation-error');\n rootNode.text(defaultCode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n editor.config.onMessage('warning', `\n Box \"${box.name}\" (id: ${box.node.id}) failed to display because window.katex was not found.\n Please check if the \"katex\" library is added to this page.\n `.trim());\n}\n\nexport default {\n type: 'inline',\n name: 'equation',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-equation\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const katex = window.katex;\n if (!katex) {\n renderError(box);\n return;\n }\n const equationConfig = editor.config.equation;\n const defaultCode = (box.value.code || '').trim();\n const viewNode = query('<div class=\"lake-equation-view\" />');\n rootNode.append(viewNode);\n viewNode.html(window.katex.renderToString(defaultCode || defaultExpression, {\n throwOnError: false,\n }));\n viewNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n const formNode = query(template`\n <div class=\"lake-equation-form\">\n <div class=\"lake-row\">\n <textarea name=\"code\" placeholder=\"${editor.locale.equation.placeholder()}\"></textarea>\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n rootNode.append(formNode);\n const textareaNode = formNode.find('textarea');\n textareaNode.value(defaultCode);\n textareaNode.on('input', () => {\n const code = textareaNode.value().trim();\n viewNode.html(window.katex.renderToString(code || defaultExpression, {\n throwOnError: false,\n }));\n box.updateValue('code', code);\n });\n const saveButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'save',\n type: 'primary',\n text: editor.locale.equation.save(),\n onClick: () => {\n editor.selection.range.selectBoxEnd(box.node);\n editor.selection.sync();\n editor.history.save();\n },\n });\n saveButton.render();\n const helpButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'help',\n icon: icons.get('question'),\n tooltip: editor.locale.equation.help(),\n onClick: () => {\n window.open(equationConfig.helpUrl);\n },\n });\n helpButton.render();\n },\n} as BoxComponent;\n","import { BoxValue } from 'lakelib/types/box';\nimport { Editor } from 'lakelib/editor';\nimport equationBox from './equation-box';\n\nexport {\n equationBox,\n};\n\nexport default (editor: Editor) => {\n if (!window.katex) {\n return;\n }\n editor.setPluginConfig('equation', {\n helpUrl: 'https://katex.org/docs/supported',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('equation', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('equation', value);\n editor.history.save();\n const boxContainer = box.getContainer();\n boxContainer.addClass('lake-box-activated');\n boxContainer.find('textarea').focus();\n },\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('specialCharacter', {\n execute: (value: string) => {\n editor.selection.insertContents(document.createTextNode(value));\n editor.history.save();\n },\n });\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { query } from '../utils/query';\nimport { visibleInfo } from '../utils/visible-info';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nexport interface MenuConfig<Item> {\n items: Item[];\n onShow?: () => void;\n onHide?: () => void;\n}\n\nfunction emptyCallback() {}\n\n// The Menu class represents a list of options for selecting an item.\nexport abstract class Menu<Item> {\n\n private horizontalDirection: 'left' | 'right' = 'right';\n\n private verticalDirection: 'top' | 'bottom' = 'bottom';\n\n private onShow: () => void;\n\n private onHide: () => void;\n\n protected items: Item[];\n\n protected range: Range | null = null;\n\n protected noMouseEvent = false;\n\n public container: Nodes;\n\n constructor(config: MenuConfig<Item>) {\n this.items = config.items;\n this.onShow = config.onShow || emptyCallback;\n this.onHide = config.onHide || emptyCallback;\n this.container = query('<ul class=\"lake-popup lake-menu\" />');\n }\n\n protected abstract getItemNode(item: Item): Nodes;\n\n protected abstract search(keyword: string): Item[];\n\n private appendItemNode(itemNode: Nodes): void {\n itemNode.on('mouseenter', () => {\n if (this.noMouseEvent) {\n return;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n itemNode.addClass('lake-menu-item-selected');\n });\n itemNode.on('mouseleave', () => {\n if (this.noMouseEvent) {\n return;\n }\n itemNode.removeClass('lake-menu-item-selected');\n });\n this.container.append(itemNode);\n }\n\n private appendItems(items: Item[]): void {\n this.container.empty();\n for (const item of items) {\n const itemNode = this.getItemNode(item);\n itemNode.addClass('lake-menu-item');\n this.appendItemNode(itemNode);\n }\n }\n\n private selectFirstItemNodeIfNeeded(): void {\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n this.container.find('.lake-menu-item').eq(0).addClass('lake-menu-item-selected');\n }\n }\n\n private keydownListener = (event: KeyboardEvent) => {\n if (isKeyHotkey('escape', event)) {\n event.preventDefault();\n this.hide();\n return;\n }\n const isDownKey = isKeyHotkey('down', event);\n const isUpKey = isKeyHotkey('up', event);\n const isEnterKey = isKeyHotkey('enter', event);\n if (!isDownKey && !isUpKey && !isEnterKey) {\n return;\n }\n const nativeContainer = this.container.get(0) as HTMLElement;\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n event.preventDefault();\n const firstItem = this.container.find('.lake-menu-item').eq(0);\n firstItem.addClass('lake-menu-item-selected');\n nativeContainer.scrollTop = 0;\n return;\n }\n this.noMouseEvent = true;\n const paddingTop = Number.parseInt(this.container.computedCSS('padding-top'), 10) || 0;\n const paddingBottom = Number.parseInt(this.container.computedCSS('padding-bottom'), 10) || 0;\n if (isDownKey) {\n event.preventDefault();\n let nextItemNode = selectedItemNode.next();\n if (nextItemNode.length === 0) {\n nextItemNode = this.container.find('.lake-menu-item').eq(0);\n }\n const nextItemNativeNode = nextItemNode.get(0) as HTMLElement;\n const visible = visibleInfo(nextItemNode);\n if (visible.top !== 0 || visible.bottom !== 0) {\n nativeContainer.scrollTop = nextItemNativeNode.offsetTop - this.container.height() + nextItemNode.height() + paddingBottom;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n nextItemNode.addClass('lake-menu-item-selected');\n } else if (isUpKey) {\n event.preventDefault();\n let prevItemNode = selectedItemNode.prev();\n if (prevItemNode.length === 0) {\n const itemNode = this.container.find('.lake-menu-item');\n prevItemNode = itemNode.eq(itemNode.length - 1);\n }\n const prevItemNativeNode = prevItemNode.get(0) as HTMLElement;\n const visible = visibleInfo(prevItemNode);\n if (visible.top !== 0 || visible.bottom !== 0) {\n nativeContainer.scrollTop = prevItemNativeNode.offsetTop - paddingTop;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n prevItemNode.addClass('lake-menu-item-selected');\n } else if (isEnterKey) {\n event.preventDefault();\n selectedItemNode.emit('click');\n }\n window.setTimeout(() => {\n this.noMouseEvent = false;\n }, 50);\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n if (this.container.contains(targetNode)) {\n return;\n }\n this.hide();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(keepDirection = false): void {\n if (!this.range || this.range.isCollapsed) {\n return;\n }\n const visible = visibleInfo(this.range);\n if (visible.bottom !== 0) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n if (!keepDirection) {\n if (rangeRect.x + this.container.width() > window.innerWidth) {\n this.horizontalDirection = 'left';\n } else {\n this.horizontalDirection = 'right';\n }\n if (rangeRect.y + rangeRect.height + this.container.height() + 5 > window.innerHeight) {\n this.verticalDirection = 'top';\n } else {\n this.verticalDirection = 'bottom';\n }\n }\n if (this.horizontalDirection === 'left') {\n this.container.css('left', `${rangeX - this.container.width() + rangeRect.width}px`);\n } else {\n this.container.css('left', `${rangeX}px`);\n }\n if (this.verticalDirection === 'top') {\n this.container.css('top', `${rangeY - this.container.height() - 5}px`);\n } else {\n this.container.css('top', `${rangeY + rangeRect.height + 5}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public update(keyword: string): void {\n const items = this.search(keyword);\n if (items.length === 0) {\n this.hide();\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n this.container.css('visibility', '');\n }\n\n public show(range: Range, keyword?: string): void {\n if (range.isCollapsed) {\n return;\n }\n if (this.items.length === 0) {\n return;\n }\n if (!this.container.get(0).isConnected) {\n query(document.body).append(this.container);\n }\n // append all items for fixing the container's width\n this.appendItems(this.items);\n this.selectFirstItemNodeIfNeeded();\n this.range = range;\n this.container.css('visibility', 'hidden');\n this.container.show();\n (this.container.get(0) as Element).scrollTo(0, 0);\n this.updatePosition();\n // fix the container's width\n this.container.css('width', '');\n this.container.css('width', `${this.container.width() + 10}px`);\n const viewport = range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n } else {\n window.addEventListener('scroll', this.scrollListener);\n }\n document.addEventListener('keydown', this.keydownListener, true);\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n if (keyword) {\n const items = this.search(keyword);\n if (items.length === 0) {\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n }\n this.container.css('visibility', '');\n this.onShow();\n }\n\n public hide(): void {\n if (this.range) {\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n } else {\n window.removeEventListener('scroll', this.scrollListener);\n }\n }\n this.range = null;\n this.container.hide();\n document.removeEventListener('keydown', this.keydownListener, true);\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n this.onHide();\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import './mention-menu.css';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Menu, MenuConfig } from 'lakelib/ui/menu';\nimport { MentionItem } from './types';\n\ntype OnSelect = (event: Event, item: MentionItem) => void;\n\ninterface MentionMenuConfig extends MenuConfig<MentionItem> {\n onSelect?: OnSelect;\n}\n\nfunction emptyCallback() {}\n\n// The MentionMenu class, inheriting from the Menu class, represents a list of users for selecting a user.\nexport class MentionMenu extends Menu<MentionItem> {\n\n private onSelect: OnSelect;\n\n constructor(config: MentionMenuConfig) {\n super(config);\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-mention-menu');\n }\n\n protected getItemNode(item: MentionItem): Nodes {\n const itemNode = query(template`\n <li>\n <div class=\"lake-mention-avatar\"></div>\n <div class=\"lake-mention-nickname\">${item.nickname ?? item.name}</div>\n <div class=\"lake-mention-name\">(${item.name})</div>\n </li>\n `);\n const avatarNode = itemNode.find('.lake-mention-avatar');\n if (item.avatar) {\n avatarNode.append(item.avatar);\n } else {\n avatarNode.remove();\n }\n if (!item.nickname) {\n itemNode.find('.lake-mention-name').remove();\n }\n itemNode.on('click', event => this.onSelect(event, item));\n return itemNode;\n }\n\n protected search(keyword: string): MentionItem[] {\n keyword = keyword.toLowerCase();\n const items: MentionItem[] = [];\n for (const item of this.items) {\n const nickname = item.nickname ?? item.name;\n if (\n item.name.toLowerCase().indexOf(keyword) >= 0\n || nickname.toLowerCase().indexOf(keyword) >= 0\n || nickname.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(item);\n }\n }\n return items;\n }\n}\n","import './mention-box.css';\nimport { BoxComponent } from 'lakelib/types/box';\nimport { query } from 'lakelib/utils/query';\nimport { template } from 'lakelib/utils/template';\n\nexport default {\n type: 'inline',\n name: 'mention',\n render: box => {\n const editor = box.getEditor();\n const { getProfileUrl } = editor.config.mention;\n const value = box.value;\n const url = getProfileUrl ? getProfileUrl(value) : '#';\n const boxContainer = box.getContainer();\n const rootNode = query(template`\n <div class=\"lake-mention\"><a href=\"${url}\">@${value.nickname ?? value.name}</a></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n if (!editor.readonly) {\n rootNode.find('a').on('click', (event: Event) => {\n event.preventDefault();\n });\n }\n },\n} as BoxComponent;\n","import { isKeyHotkey } from 'is-hotkey';\nimport { request } from 'lakelib/utils/request';\nimport { Range } from 'lakelib/models/range';\nimport { Editor } from 'lakelib/editor';\nimport { MentionMenu } from './mention-menu';\nimport { MentionItem } from './types';\nimport mentionBox from './mention-box';\n\nexport {\n mentionBox,\n};\n\nfunction getKeyword(range: Range): string | null {\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return null;\n }\n let text = targetRange.startNode.text().slice(targetRange.startOffset + 1, targetRange.endOffset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n return text;\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('mention', {\n requestMethod: 'GET',\n items: [],\n getProfileUrl: (value: MentionItem) => `/${value.name}`,\n });\n if (editor.readonly) {\n return;\n }\n const { requestAction, requestMethod, items } = editor.config.mention;\n let menu: MentionMenu | null = null;\n const selectListener = (event: Event, item: MentionItem) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n const targetRange = editor.selection.range.getCharacterRange('@');\n if (targetRange) {\n targetRange.get().deleteContents();\n }\n editor.selection.insertBox('mention', item);\n editor.history.save();\n };\n const showListener = () => {\n editor.popup = menu;\n };\n const hideListener = () => {\n editor.popup = null;\n };\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return;\n }\n const keyword = getKeyword(range);\n if (keyword === null) {\n return;\n }\n if (!menu) {\n if (requestAction) {\n request({\n onSuccess: body => {\n if (!body.data) {\n return;\n }\n menu = new MentionMenu({\n items: body.data,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n },\n action: requestAction,\n method: requestMethod,\n });\n } else {\n menu = new MentionMenu({\n items,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n }\n return;\n }\n menu.show(targetRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down', 'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu || !menu.visible) {\n if (keyboardEvent.key === '@') {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const keyword = getKeyword(range);\n if (keyword === null) {\n if (menu) {\n menu.hide();\n }\n return;\n }\n if (menu) {\n menu.update(keyword);\n }\n });\n return () => {\n if (menu) {\n menu.unmount();\n }\n };\n};\n","import type { Editor } from 'lakelib/editor';\nimport { Point } from 'lakelib/types/node';\nimport { Nodes } from 'lakelib/models/nodes';\n\ninterface MarkItem {\n re: RegExp;\n getParameters: () => string[];\n}\n\ntype BlockItem = {\n re: RegExp;\n getParameters: () => (string | boolean)[];\n} | {\n re: RegExp;\n getParameters: (results: RegExpExecArray) => (string | boolean | object)[];\n};\n\nconst headingTypeMap = new Map([\n ['#', 'h1'],\n ['##', 'h2'],\n ['###', 'h3'],\n ['####', 'h4'],\n ['#####', 'h5'],\n ['######', 'h6'],\n]);\n\nconst shortLangTypeMap = new Map([\n ['js', 'javascript'],\n ['ts', 'typescript'],\n ['md', 'markdown'],\n ['htm', 'html'],\n]);\n\nconst markItemList: MarkItem[] = [\n {\n re: /\\*\\*(.+?)\\*\\*$/,\n getParameters: () => [\n 'bold',\n ],\n },\n {\n re: /__(.+?)__$/,\n getParameters: () => [\n 'bold',\n ],\n },\n {\n re: /_(.+?)_$/,\n getParameters: () => [\n 'italic',\n ],\n },\n {\n re: /\\*(.+?)\\*$/,\n getParameters: () => [\n 'italic',\n ],\n },\n {\n re: /==(.+?)==$/,\n getParameters: () => [\n 'highlight',\n '#fff566', // yellow-4, from https://ant.design/docs/spec/colors\n ],\n },\n {\n re: /~~(.+?)~~$/,\n getParameters: () => [\n 'strikethrough',\n ],\n },\n {\n re: /`(.+?)`$/,\n getParameters: () => [\n 'code',\n ],\n },\n];\n\nconst blockItemListForSpaceKey: BlockItem[] = [\n {\n re: /^#+$/,\n getParameters: (results: RegExpExecArray) => [\n 'heading',\n headingTypeMap.get(results[0]) ?? 'h6',\n ],\n },\n {\n re: /^\\d+\\.$/,\n getParameters: () => [\n 'list',\n 'numbered',\n ],\n },\n {\n re: /^[*\\-+]$/,\n getParameters: () => [\n 'list',\n 'bulleted',\n ],\n },\n {\n re: /^\\[\\s?\\]$/,\n getParameters: () => [\n 'list',\n 'checklist',\n false,\n ],\n },\n {\n re: /^\\[x\\]$/i,\n getParameters: () => [\n 'list',\n 'checklist',\n true,\n ],\n },\n {\n re: /^>$/,\n getParameters: () => [\n 'blockQuote',\n ],\n },\n];\n\nconst blockItemListForEnterKey: BlockItem[] = [\n {\n re: /^:{3,}([a-z]*)$/i,\n getParameters: (results: RegExpExecArray) => {\n if (!results[1]) {\n return [\n 'blockQuote',\n 'info',\n ];\n }\n return [\n 'blockQuote',\n results[1],\n ];\n },\n },\n {\n re: /^-{3,}$/,\n getParameters: () => [\n 'hr',\n ],\n },\n {\n re: /^`{3,}([a-z]*)$/i,\n getParameters: (results: RegExpExecArray) => {\n if (!results[1]) {\n return [\n 'codeBlock',\n ];\n }\n return [\n 'codeBlock',\n {\n lang: shortLangTypeMap.get(results[1]) ?? results[1],\n },\n ];\n },\n },\n];\n\nfunction getMarkdownPoint(editor: Editor): Point | void {\n const selection = editor.selection;\n const range = selection.range;\n let node = range.startNode;\n let offset = range.startOffset;\n if (offset === 0) {\n return;\n }\n if (node.isElement) {\n const child = node.children()[offset - 1];\n if (!child || !child.isText) {\n return;\n }\n node = child;\n offset = node.text().length;\n }\n if (offset < 1) {\n return;\n }\n return {\n node,\n offset,\n };\n}\n\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><focus /></p> to <p><br /><focus /></p>\nfunction fixEmptyBlock(block: Nodes): void {\n const newBlock = block.clone(true);\n newBlock.find('lake-bookmark').remove();\n if (newBlock.html() !== '') {\n return;\n }\n block.prepend('<br />');\n}\n\nfunction executeMarkCommand(editor: Editor, point: Point): boolean {\n const selection = editor.selection;\n const range = selection.range;\n const offset = point.offset;\n const text = point.node.text().slice(0, offset);\n for (const item of markItemList) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters();\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>foo**bold**<focus /></p>, offset = 11\n // to\n // <p>foobold\\u200B<focus /></p>,\n // to\n // <p>foo[bold]\\u200B<focus /></p>, startOffset = 3, endOffset = 7\n editor.history.pause();\n const bookmark = selection.insertBookmark();\n const node = bookmark.focus.prev();\n const oldValue = node.text();\n const newValue = `${oldValue.replace(item.re, '$1')}\\u200B`;\n node.get(0).nodeValue = newValue;\n range.setStart(node, offset - results[0].length);\n range.setEnd(node, offset - (oldValue.length - newValue.length) - 1);\n editor.command.execute(commandName, ...parameters);\n selection.toBookmark(bookmark);\n editor.history.continue();\n editor.history.save();\n return true;\n }\n }\n return false;\n}\n\nfunction spaceKeyExecutesBlockCommand(editor: Editor, point: Point): boolean {\n const selection = editor.selection;\n const offset = point.offset;\n let text = point.node.text().slice(0, offset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n for (const item of blockItemListForSpaceKey) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters(results);\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>#<focus />foo</p>\n // to\n // <h1><focus />foo</h1>\n const bookmark = selection.insertBookmark();\n const node = bookmark.focus.prev();\n node.remove();\n const block = bookmark.focus.closestBlock();\n fixEmptyBlock(block);\n selection.range.shrinkAfter(block);\n selection.toBookmark(bookmark);\n editor.command.execute(commandName, ...parameters);\n return true;\n }\n }\n return false;\n}\n\nfunction enterKeyExecutesBlockCommand(editor: Editor, block: Nodes): boolean {\n const selection = editor.selection;\n let text = block.text();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n for (const item of blockItemListForEnterKey) {\n const results = item.re.exec(text);\n if (results !== null) {\n const parameters = item.getParameters(results);\n const commandName = parameters.shift() as string;\n if (!editor.command.has(commandName)) {\n return false;\n }\n // <p>---<focus /></p>\n // to\n // <lake-box type=\"block\" name=\"hr\" focus=\"end\"></lake-box>\n block.empty();\n fixEmptyBlock(block);\n selection.range.shrinkAfter(block);\n editor.command.execute(commandName, ...parameters);\n return true;\n }\n }\n return false;\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('space', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBox) {\n return;\n }\n const point = getMarkdownPoint(editor);\n if (!point) {\n return;\n }\n if (executeMarkCommand(editor, point)) {\n event.preventDefault();\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (!(block.isHeading || block.name === 'p')) {\n return;\n }\n if (spaceKeyExecutesBlockCommand(editor, point)) {\n event.preventDefault();\n }\n });\n editor.keystroke.setKeydown('enter', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBox) {\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (!(block.isHeading || block.name === 'p')) {\n return;\n }\n if (block.find('lake-box').length > 0) {\n return;\n }\n if (range.getEndText() !== '') {\n return;\n }\n if (enterKeyExecutesBlockCommand(editor, block)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n // returning false is for unit test\n return false;\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\n\nfunction splitBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n const endText = range.getEndText();\n editor.selection.splitBlock();\n block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (endText === '' && (block.isHeading || block.name === 'blockquote')) {\n editor.selection.setBlocks('<p />');\n return;\n }\n if (block.isList && block.attr('type') === 'checklist') {\n block.find('li').attr('value', 'false');\n }\n}\n\nfunction addOrSplitBlockForBox(editor: Editor): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n splitBlock(editor, block);\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n splitBlock(editor, block);\n } else {\n editor.selection.removeBox();\n }\n return;\n }\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else if (range.isBoxEnd) {\n boxNode.after(newBlock);\n range.shrinkAfter(newBlock);\n } else {\n editor.selection.removeBox();\n }\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('enter', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n editor.fixContent();\n if (range.isBox) {\n addOrSplitBlockForBox(editor);\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const prevNode = range.getPrevNode();\n const nextNode = range.getNextNode();\n if (prevNode.name === 'table' || nextNode.name === 'table') {\n const newBlock = query('<p><br /></p>');\n editor.selection.insertContents(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n if (range.isInoperative) {\n return;\n }\n if (range.isBox) {\n addOrSplitBlockForBox(editor);\n editor.history.save();\n return;\n }\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if (block.isEmpty && block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n editor.history.save();\n return;\n }\n splitBlock(editor, block);\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\n\nfunction addLineBreak(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.startNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n const prevNode = range.getPrevNode();\n const endText = range.getEndText();\n if (prevNode.name !== 'br' && endText === '') {\n editor.selection.insertContents('<br /><br />');\n editor.history.save();\n return;\n }\n }\n editor.selection.insertContents('<br />');\n}\n\nfunction addBlockOrLineBreakForBox(editor: Editor): void {\n const range = editor.selection.range;\n const boxNode = range.startNode.closest('lake-box');\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n if (range.isBoxStart) {\n range.setStartBefore(boxNode);\n range.collapseToStart();\n addLineBreak(editor);\n } else if (range.isBoxEnd) {\n range.setStartAfter(boxNode);\n range.collapseToStart();\n addLineBreak(editor);\n } else {\n editor.selection.removeBox();\n }\n return;\n }\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else if (range.isBoxEnd) {\n boxNode.after(newBlock);\n range.shrinkAfter(newBlock);\n } else {\n editor.selection.removeBox();\n }\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('shift+enter', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n editor.fixContent();\n event.preventDefault();\n if (range.isBox) {\n addBlockOrLineBreakForBox(editor);\n editor.history.save();\n return;\n }\n range.adjust();\n if (range.isInoperative) {\n return;\n }\n if (range.isBox) {\n addBlockOrLineBreakForBox(editor);\n editor.history.save();\n return;\n }\n addLineBreak(editor);\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { getBox } from 'lakelib/utils/get-box';\nimport { appendBreak } from 'lakelib/utils/append-break';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { indentBlock } from 'lakelib/utils/indent-block';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { setBlocks } from 'lakelib/operations/set-blocks';\n\nfunction emptyBlock(range: Range): void {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty && block.first().name !== 'br') {\n block.empty();\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n\nfunction mergeWithPreviousBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let prevBlock = block.prev();\n if (prevBlock.length === 0) {\n if (block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n }\n return;\n }\n if (prevBlock.isBox || prevBlock.name === 'table') {\n if (block.isEmpty) {\n block.remove();\n }\n range.shrinkAfter(prevBlock);\n return;\n }\n if (prevBlock.name === 'br') {\n prevBlock.remove();\n return;\n }\n if (!prevBlock.isBlock) {\n const prevRange = new Range();\n prevRange.selectNodeContents(prevBlock);\n setBlocks(prevRange, '<p />');\n prevBlock = prevRange.startNode.closestBlock();\n }\n if (prevBlock.isEmpty) {\n prevBlock.remove();\n return;\n }\n emptyBlock(range);\n const nextNode = range.getNextNode();\n if (nextNode.name === 'br' && prevBlock.name !== 'p') {\n nextNode.remove();\n range.shrinkAfter(prevBlock);\n return;\n }\n const bookmark = editor.selection.insertBookmark();\n mergeNodes(prevBlock, block);\n fixNumberedList([prevBlock]);\n editor.selection.toBookmark(bookmark);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('backspace', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const box = getBox(boxNode);\n const boxValue = box.value;\n if (\n range.isCollapsed && box.name === 'codeBlock'\n && (boxValue.code === undefined || boxValue.code === '')\n ) {\n event.preventDefault();\n editor.selection.removeBox(box);\n editor.history.save();\n }\n return;\n }\n editor.fixContent();\n if (range.isBoxStart) {\n const boxNode = range.startNode.closest('lake-box');\n const prevNode = boxNode.prev();\n if (prevNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (prevNode.isBlock) {\n if (prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n fixNumberedList(range.getBlocks());\n editor.history.save();\n return;\n }\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n range.adjustBox();\n }\n if (range.isBox) {\n event.preventDefault();\n editor.selection.removeBox();\n editor.history.save();\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n editor.selection.deleteContents();\n if (editor.container.html().trim() === '') {\n editor.setValue('<p><br /><focus /></p>');\n }\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const prevNode = range.getPrevNode();\n if (prevNode.name === 'table') {\n event.preventDefault();\n const newBlock = query('<p><br /></p>');\n prevNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.length > 0 && nextNode.name === 'table') {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n editor.selection.removeBox(prevNode);\n editor.history.save();\n return;\n }\n if ((prevNode.isMark || prevNode.name === 'a') && prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1 && prevNode.parent().isBlock) {\n event.preventDefault();\n const block = prevNode.closestBlock();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.name === 'br' && nextNode.length > 0) {\n event.preventDefault();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n editor.history.save();\n return;\n }\n const startText = range.getStartText();\n if (startText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if (\n block.css('margin-left') !== ''\n || block.css('text-indent') !== ''\n || block.attr('indent') !== ''\n ) {\n indentBlock(block, 'decrease');\n editor.history.save();\n return;\n }\n if (block.isList || block.name === 'blockquote') {\n editor.selection.setBlocks('<p />');\n editor.history.save();\n return;\n }\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { query } from 'lakelib/utils/query';\nimport { mergeNodes } from 'lakelib/utils/merge-nodes';\nimport { fixNumberedList } from 'lakelib/utils/fix-numbered-list';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Range } from 'lakelib/models/range';\nimport { setBlocks } from 'lakelib/operations/set-blocks';\n\nfunction mergeWithNextBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let nextBlock = block.next();\n if (nextBlock.length === 0) {\n editor.history.save();\n return;\n }\n if (nextBlock.isBox) {\n if (block.isEmpty) {\n block.remove();\n }\n range.selectBoxStart(nextBlock);\n editor.history.save();\n return;\n }\n if (nextBlock.name === 'table') {\n nextBlock.remove();\n return;\n }\n if (!nextBlock.isBlock) {\n const nextRange = new Range();\n nextRange.selectNodeContents(nextBlock);\n setBlocks(nextRange, '<p />');\n nextBlock = nextBlock.closestBlock();\n }\n const bookmark = editor.selection.insertBookmark();\n mergeNodes(block, nextBlock);\n fixNumberedList([block]);\n editor.selection.toBookmark(bookmark);\n}\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('delete', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n editor.fixContent();\n if (range.isBoxEnd) {\n const boxNode = range.startNode.closest('lake-box');\n const nextNode = boxNode.next();\n if (nextNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithNextBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (nextNode.isBlock) {\n if (nextNode.isEmpty) {\n event.preventDefault();\n nextNode.remove();\n fixNumberedList(range.getBlocks());\n editor.history.save();\n return;\n }\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n range.adjustBox();\n }\n if (range.isBox) {\n event.preventDefault();\n editor.selection.removeBox();\n editor.history.save();\n return;\n }\n if (!range.isCollapsed) {\n event.preventDefault();\n editor.selection.deleteContents();\n if (editor.container.html().trim() === '') {\n editor.setValue('<p><br /><focus /></p>');\n }\n editor.history.save();\n return;\n }\n if (range.isCollapsed) {\n const nextNode = range.getNextNode();\n if (nextNode.name === 'table') {\n event.preventDefault();\n const newBlock = query('<p><br /></p>');\n nextNode.replaceWith(newBlock);\n range.shrinkBefore(newBlock);\n editor.history.save();\n return;\n }\n }\n range.adjust();\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n editor.selection.removeBox(nextNode);\n editor.history.save();\n return;\n }\n if (nextNode.name === 'br' && nextNode.next().length > 0) {\n event.preventDefault();\n range.setStartBefore(nextNode);\n range.collapseToStart();\n nextNode.remove();\n editor.history.save();\n }\n const endText = range.getEndText();\n if (endText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n mergeWithNextBlock(editor, block);\n editor.history.save();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\nimport { indentBlock } from 'lakelib/utils/indent-block';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('tab', event => {\n if (editor.config.indentWithTab === false) {\n return;\n }\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n event.preventDefault();\n const blocks = range.getBlocks();\n for (const block of blocks) {\n if (block.name !== 'p' || block.css('text-indent') === '2em') {\n indentBlock(block, 'increase');\n } else {\n block.css('text-indent', '2em');\n }\n }\n editor.history.save();\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('left', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n if (prevNode.isInlineBox) {\n range.selectBox(prevNode);\n return;\n }\n range.shrinkAfter(prevNode);\n return;\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n return;\n }\n if (range.isBoxEnd) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n event.preventDefault();\n range.selectBoxStart(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n range.selectBox(prevNode);\n }\n });\n editor.keystroke.setKeydown('right', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n if (range.isBoxEnd) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n if (nextNode.isInlineBox) {\n range.selectBox(nextNode);\n return;\n }\n range.shrinkBefore(nextNode);\n return;\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n return;\n }\n event.preventDefault();\n range.selectBoxEnd(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n range.selectBox(nextNode);\n }\n });\n editor.keystroke.setKeydown('up', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n }\n });\n editor.keystroke.setKeydown('down', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n });\n};\n","import type { Editor } from 'lakelib/editor';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('escape', event => {\n const selection = editor.selection;\n const range = selection.range;\n if (range.isBoxCenter || range.isInsideBox) {\n event.preventDefault();\n const boxNode = range.commonAncestor.closest('lake-box');\n range.selectBoxEnd(boxNode);\n selection.sync();\n return;\n }\n if (editor.hasFocus()) {\n event.preventDefault();\n editor.blur();\n }\n });\n};\n","import { icons } from 'lakelib/icons';\nimport { SlashItem } from './types';\n\nexport const slashItems: SlashItem[] = [\n {\n name: 'heading1',\n type: 'button',\n icon: icons.get('heading1'),\n title: locale => locale.slash.heading1(),\n description: locale => locale.slash.heading1Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h1');\n },\n },\n {\n name: 'heading2',\n type: 'button',\n icon: icons.get('heading2'),\n title: locale => locale.slash.heading2(),\n description: locale => locale.slash.heading2Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h2');\n },\n },\n {\n name: 'heading3',\n type: 'button',\n icon: icons.get('heading3'),\n title: locale => locale.slash.heading3(),\n description: locale => locale.slash.heading3Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h3');\n },\n },\n {\n name: 'heading4',\n type: 'button',\n icon: icons.get('heading4'),\n title: locale => locale.slash.heading4(),\n description: locale => locale.slash.heading4Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h4');\n },\n },\n {\n name: 'heading5',\n type: 'button',\n icon: icons.get('heading5'),\n title: locale => locale.slash.heading5(),\n description: locale => locale.slash.heading5Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h5');\n },\n },\n {\n name: 'heading6',\n type: 'button',\n icon: icons.get('heading6'),\n title: locale => locale.slash.heading6(),\n description: locale => locale.slash.heading6Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h6');\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n title: locale => locale.slash.paragraph(),\n description: locale => locale.slash.paragraphDesc(),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n title: locale => locale.slash.blockQuote(),\n description: locale => locale.slash.blockQuoteDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n title: locale => locale.slash.numberedList(),\n description: locale => locale.slash.numberedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n title: locale => locale.slash.bulletedList(),\n description: locale => locale.slash.bulletedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n title: locale => locale.slash.checklist(),\n description: locale => locale.slash.checklistDesc(),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'table',\n type: 'button',\n icon: icons.get('table'),\n title: locale => locale.slash.table(),\n description: locale => locale.slash.tableDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'infoAlert',\n type: 'button',\n icon: icons.get('info'),\n title: locale => locale.slash.infoAlert(),\n description: locale => locale.slash.infoAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'info');\n },\n },\n {\n name: 'tipAlert',\n type: 'button',\n icon: icons.get('tip'),\n title: locale => locale.slash.tipAlert(),\n description: locale => locale.slash.tipAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'tip');\n },\n },\n {\n name: 'warningAlert',\n type: 'button',\n icon: icons.get('warning'),\n title: locale => locale.slash.warningAlert(),\n description: locale => locale.slash.warningAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'warning');\n },\n },\n {\n name: 'dangerAlert',\n type: 'button',\n icon: icons.get('danger'),\n title: locale => locale.slash.dangerAlert(),\n description: locale => locale.slash.dangerAlertDesc(),\n onClick: editor => {\n editor.command.execute('blockQuote', 'danger');\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n title: locale => locale.slash.hr(),\n description: locale => locale.slash.hrDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n title: locale => locale.slash.codeBlock(),\n description: locale => locale.slash.codeBlockDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n title: locale => locale.slash.video(),\n description: locale => locale.slash.videoDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n title: locale => locale.slash.equation(),\n description: locale => locale.slash.equationDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n title: locale => locale.slash.image(),\n description: locale => locale.slash.imageDesc(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n title: locale => locale.slash.file(),\n description: locale => locale.slash.fileDesc(),\n accept: '*',\n multiple: true,\n },\n];\n","import './slash-menu.css';\nimport { TranslationFunctions } from 'lakelib/i18n/types';\nimport { template } from 'lakelib/utils/template';\nimport { query } from 'lakelib/utils/query';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Menu, MenuConfig } from 'lakelib/ui/menu';\nimport { i18nObject } from 'lakelib/i18n';\nimport { SlashItem } from './types';\nimport { slashItems } from './slash-items';\n\ntype OnSelect = (\n event: Event,\n item: SlashItem,\n fileNode?: Nodes,\n) => void;\n\ninterface SlashMenuConfig extends MenuConfig<string | SlashItem> {\n locale?: TranslationFunctions;\n onSelect?: OnSelect;\n}\n\nfunction emptyCallback() {}\n\nconst slashItemMap = new Map<string, SlashItem>();\n\nfor (const item of slashItems) {\n slashItemMap.set(item.name, item);\n}\n\n// The SlashMenu class, inheriting from the Menu class, represents a list of commands for executing a command.\nexport class SlashMenu extends Menu<string | SlashItem> {\n\n private locale: TranslationFunctions;\n\n private onSelect: OnSelect;\n\n constructor(config: SlashMenuConfig) {\n super(config);\n this.locale = config.locale || i18nObject('en-US');\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-slash-menu');\n }\n\n private getItem(name: string | SlashItem): SlashItem {\n if (typeof name !== 'string') {\n return name;\n }\n const item = slashItemMap.get(name);\n if (!item) {\n throw new Error(`SlashItem \"${name}\" has not been defined yet.`);\n }\n return item;\n }\n\n protected getItemNode(name: string | SlashItem): Nodes {\n const item = this.getItem(name);\n const itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n const itemDescription = typeof item.description === 'string' ? item.description : item.description(this.locale);\n const itemNode = query(template`\n <li name=\"${item.name}\">\n <div class=\"lake-slash-icon\"></div>\n <div class=\"lake-slash-text\">\n <div class=\"lake-slash-title\">${itemTitle}</div>\n <div class=\"lake-slash-description\">${itemDescription}</div>\n </div>\n </li>\n `);\n const icon = item.icon;\n if (icon) {\n itemNode.find('.lake-slash-icon').append(icon);\n }\n if (item.type === 'upload') {\n itemNode.append('<input type=\"file\" />');\n const fileNode = itemNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => this.onSelect(event, item, fileNode));\n itemNode.on('click', () => fileNativeNode.click());\n } else {\n itemNode.on('click', event => this.onSelect(event, item));\n }\n return itemNode;\n }\n\n protected search(keyword: string): (string | SlashItem)[] {\n const localeEnglish = i18nObject('en-US');\n keyword = keyword.toLowerCase();\n const items: (string | SlashItem)[] = [];\n for (const name of this.items) {\n const item = this.getItem(name);\n let itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n itemTitle = itemTitle.toLowerCase();\n let itemTitleEnglish = typeof item.title === 'string' ? item.title : item.title(localeEnglish);\n itemTitleEnglish = itemTitleEnglish.toLowerCase();\n if (\n itemTitle.indexOf(keyword) >= 0\n || itemTitle.replace(/\\s+/g, '').indexOf(keyword) >= 0\n || itemTitleEnglish.indexOf(keyword) >= 0\n || itemTitleEnglish.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(typeof name === 'string' ? item.name : name);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { appendBreak } from 'lakelib/utils/append-break';\nimport { uploadFile } from 'lakelib/utils/upload-file';\nimport { Nodes } from 'lakelib/models/nodes';\nimport { Editor } from 'lakelib/editor';\nimport { SlashMenu } from './slash-menu';\n\nconst defaultItems: string[] = [\n 'heading1',\n 'heading2',\n 'heading3',\n 'heading4',\n 'heading5',\n 'heading6',\n 'paragraph',\n 'blockQuote',\n 'numberedList',\n 'bulletedList',\n 'checklist',\n 'table',\n 'infoAlert',\n 'tipAlert',\n 'warningAlert',\n 'dangerAlert',\n 'hr',\n];\n\nfunction getKeyword(block: Nodes): string | null {\n let text = block.text().trim();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n if (!/^\\//.test(text)) {\n return null;\n }\n return text.substring(1);\n}\n\nfunction emptyBlock(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.commonAncestor.closestBlock();\n block.empty();\n appendBreak(block);\n range.shrinkBefore(block);\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('slash', {\n items: defaultItems,\n });\n if (editor.readonly) {\n return;\n }\n const menu = new SlashMenu({\n locale: editor.locale,\n items: editor.config.slash.items,\n onSelect: (event, item, fileNode) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n emptyBlock(editor);\n if (item.type === 'upload') {\n if (!fileNode) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n } else {\n item.onClick(editor, item.name);\n }\n },\n onShow: () => {\n editor.popup = menu;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const block = range.getBlocks()[0];\n if (\n !block\n || block.find('lake-box').length > 0\n || block.closest('table').length > 0\n ) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n return;\n }\n const slashRange = range.clone();\n slashRange.selectNodeContents(block);\n menu.show(slashRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down', 'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu.visible) {\n if (isKeyHotkey('/', keyboardEvent)) {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n menu.hide();\n return;\n }\n menu.update(keyword);\n });\n return () => {\n menu.unmount();\n };\n};\n","import './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { KeyValue } from './types/object';\nimport { NodePath } from './types/node';\nimport { BoxValue, BoxComponent } from './types/box';\nimport { ActiveItem, SelectionState } from './types/selection';\nimport { CommandItem } from './types/command';\nimport { UnmountPlugin, InitializePlugin } from './types/plugin';\nimport { DropdownMenuItem, DropdownItem } from './types/dropdown';\nimport { ToolbarButtonItem, ToolbarDropdownItem, ToolbarUploadItem, ToolbarItem } from './types/toolbar';\nimport { MentionItem } from './plugins/mention/types';\nimport { SlashButtonItem, SlashUploadItem, SlashItem } from './plugins/slash/types';\nimport { icons } from './icons';\nimport { query } from './utils/query';\nimport { template } from './utils/template';\nimport { toHex } from './utils/to-hex';\nimport { getBox } from './utils/get-box';\nimport { Nodes } from './models/nodes';\nimport { Fragment } from './models/fragment';\nimport { Range } from './models/range';\nimport { Box } from './models/box';\nimport { HTMLParser } from './parsers/html-parser';\nimport { TextParser } from './parsers/text-parser';\nimport { insertBookmark } from './operations/insert-bookmark';\nimport { toBookmark } from './operations/to-bookmark';\nimport { insertContents } from './operations/insert-contents';\nimport { deleteContents } from './operations/delete-contents';\nimport { setBlocks } from './operations/set-blocks';\nimport { splitBlock } from './operations/split-block';\nimport { insertBlock } from './operations/insert-block';\nimport { splitMarks } from './operations/split-marks';\nimport { addMark } from './operations/add-mark';\nimport { removeMark } from './operations/remove-mark';\nimport { insertBox } from './operations/insert-box';\nimport { removeBox } from './operations/remove-box';\nimport { Button } from './ui/button';\nimport { Dropdown } from './ui/dropdown';\nimport { Editor } from './editor';\nimport { Toolbar } from './ui/toolbar';\nimport copy from './plugins/copy';\nimport cut from './plugins/cut';\nimport paste from './plugins/paste';\nimport drop from './plugins/drop';\nimport undo from './plugins/undo';\nimport redo from './plugins/redo';\nimport selectAll from './plugins/select-all';\nimport heading from './plugins/heading';\nimport blockQuote from './plugins/block-quote';\nimport list from './plugins/list';\nimport table from './plugins/table';\nimport align from './plugins/align';\nimport indent from './plugins/indent';\nimport bold from './plugins/bold';\nimport italic from './plugins/italic';\nimport underline from './plugins/underline';\nimport strikethrough from './plugins/strikethrough';\nimport subscript from './plugins/subscript';\nimport superscript from './plugins/superscript';\nimport code from './plugins/code';\nimport fontFamily from './plugins/font-family';\nimport fontSize from './plugins/font-size';\nimport fontColor from './plugins/font-color';\nimport highlight from './plugins/highlight';\nimport removeFormat from './plugins/remove-format';\nimport formatPainter from './plugins/format-painter';\nimport link from './plugins/link';\nimport hr, { hrBox } from './plugins/hr';\nimport codeBlock, { codeBlockBox } from './plugins/code-block';\nimport image, { imageBox } from './plugins/image';\nimport video, { videoBox } from './plugins/video';\nimport file, { fileBox } from './plugins/file';\nimport emoji, { emojiBox } from './plugins/emoji';\nimport equation, { equationBox } from './plugins/equation';\nimport specialCharacter from './plugins/special-character';\nimport mention, { mentionBox } from './plugins/mention';\nimport markdown from './plugins/markdown';\nimport enterKey from './plugins/enter-key';\nimport shiftEnterKey from './plugins/shift-enter-key';\nimport backspaceKey from './plugins/backspace-key';\nimport deleteKey from './plugins/delete-key';\nimport tabKey from './plugins/tab-key';\nimport arrowKeys from './plugins/arrow-keys';\nimport escapeKey from './plugins/escape-key';\nimport slash from './plugins/slash';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(emojiBox);\nEditor.box.add(equationBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(mentionBox);\n\nEditor.plugin.add('copy', copy);\nEditor.plugin.add('cut', cut);\nEditor.plugin.add('paste', paste);\nEditor.plugin.add('drop', drop);\nEditor.plugin.add('undo', undo);\nEditor.plugin.add('redo', redo);\nEditor.plugin.add('selectAll', selectAll);\nEditor.plugin.add('heading', heading);\nEditor.plugin.add('blockQuote', blockQuote);\nEditor.plugin.add('list', list);\nEditor.plugin.add('table', table);\nEditor.plugin.add('align', align);\nEditor.plugin.add('indent', indent);\nEditor.plugin.add('bold', bold);\nEditor.plugin.add('italic', italic);\nEditor.plugin.add('underline', underline);\nEditor.plugin.add('strikethrough', strikethrough);\nEditor.plugin.add('subscript', subscript);\nEditor.plugin.add('superscript', superscript);\nEditor.plugin.add('code', code);\nEditor.plugin.add('fontFamily', fontFamily);\nEditor.plugin.add('fontSize', fontSize);\nEditor.plugin.add('fontColor', fontColor);\nEditor.plugin.add('highlight', highlight);\nEditor.plugin.add('removeFormat', removeFormat);\nEditor.plugin.add('formatPainter', formatPainter);\nEditor.plugin.add('link', link);\nEditor.plugin.add('hr', hr);\nEditor.plugin.add('codeBlock', codeBlock);\nEditor.plugin.add('image', image);\nEditor.plugin.add('video', video);\nEditor.plugin.add('file', file);\nEditor.plugin.add('emoji', emoji);\nEditor.plugin.add('equation', equation);\nEditor.plugin.add('specialCharacter', specialCharacter);\nEditor.plugin.add('mention', mention);\nEditor.plugin.add('markdown', markdown);\nEditor.plugin.add('enterKey', enterKey);\nEditor.plugin.add('shiftEnterKey', shiftEnterKey);\nEditor.plugin.add('backspaceKey', backspaceKey);\nEditor.plugin.add('deleteKey', deleteKey);\nEditor.plugin.add('tabKey', tabKey);\nEditor.plugin.add('arrowKeys', arrowKeys);\nEditor.plugin.add('escapeKey', escapeKey);\nEditor.plugin.add('slash', slash);\n\nexport {\n // constants\n icons,\n // types\n KeyValue,\n NodePath,\n BoxValue,\n BoxComponent,\n ActiveItem,\n SelectionState,\n CommandItem,\n UnmountPlugin,\n InitializePlugin,\n DropdownMenuItem,\n DropdownItem,\n ToolbarButtonItem,\n ToolbarDropdownItem,\n ToolbarUploadItem,\n ToolbarItem,\n MentionItem,\n SlashButtonItem,\n SlashUploadItem,\n SlashItem,\n // classes\n Editor,\n Toolbar,\n Button,\n Dropdown,\n Nodes,\n Fragment,\n Range,\n Box,\n HTMLParser,\n TextParser,\n // functions\n query,\n template,\n toHex,\n getBox,\n insertBookmark,\n toBookmark,\n insertContents,\n deleteContents,\n setBlocks,\n splitBlock,\n insertBlock,\n splitMarks,\n addMark,\n removeMark,\n insertBox,\n removeBox,\n};\n"],"names":["copy","selectAll","undo","redo","heading","blockQuote","list","formatPainter","bold","italic","underline","strikethrough","superscript","subscript","code","removeFormat","fontColor","highlight","link","hr","codeBlock","image","video","emoji","specialCharacter","equation","table","file","initI18nObject","defaultItems","splitBlock","getNestedMark","alignValueMap","tagName","renderError","emptyCallback","getKeyword","emptyBlock"],"mappings":"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","x_google_ignoreList":[112]}
|