lakelib 0.1.16 → 0.1.18
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 +17 -12
- package/dist/lake.css +121 -1
- package/dist/lake.min.js +29 -22
- package/dist/lake.min.js.map +1 -1
- package/lib/lake.css +121 -1
- package/lib/lake.js +303 -91
- package/lib/lake.js.map +1 -1
- package/lib/types/boxes/equation.d.ts +2 -0
- package/lib/types/css/index.d.ts +2 -0
- package/lib/types/editor.d.ts +1 -2
- package/lib/types/i18n/en-US/index.d.ts +5 -0
- package/lib/types/i18n/ja/index.d.ts +5 -0
- package/lib/types/i18n/ko/index.d.ts +5 -0
- package/lib/types/i18n/types.d.ts +28 -0
- package/lib/types/i18n/zh-CN/index.d.ts +5 -0
- package/lib/types/index.d.ts +1 -1
- package/lib/types/models/box.d.ts +1 -2
- package/lib/types/models/fragment.d.ts +1 -2
- package/lib/types/models/nodes.d.ts +10 -11
- package/lib/types/models/range.d.ts +1 -1
- package/lib/types/operations/insert-node.d.ts +1 -2
- package/lib/types/parsers/html-parser.d.ts +0 -1
- package/lib/types/plugins/equation.d.ts +3 -0
- package/lib/types/plugins/special-character.d.ts +3 -0
- package/lib/types/types/commands.d.ts +20 -0
- package/lib/types/types/native.d.ts +0 -23
- package/lib/types/ui/commands-popup.d.ts +24 -0
- package/lib/types/ui/toolbar.d.ts +1 -2
- package/lib/types/utils/get-box.d.ts +1 -2
- package/lib/types/utils/query.d.ts +1 -2
- package/lib/types/utils/to-node-list.d.ts +1 -2
- package/package.json +4 -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/template.ts","../src/utils/encode.ts","../src/utils/safe-template.ts","../src/utils/camel-case.ts","../src/utils/in-string.ts","../src/utils/to-base64.ts","../src/utils/from-base64.ts","../src/utils/to-hex.ts","../src/utils/parse-style.ts","../src/utils/normalize-value.ts","../src/utils/denormalize-value.ts","../src/utils/modifier-text.ts","../src/utils/file-size.ts","../src/utils/get-css.ts","../src/utils/to-node-list.ts","../src/types/native.ts","../src/config/tag-names.ts","../src/utils/debug.ts","../src/models/nodes.ts","../src/utils/query.ts","../src/models/range.ts","../src/utils/split-nodes.ts","../src/utils/append-deepest.ts","../src/utils/remove-br.ts","../src/utils/merge-nodes.ts","../src/utils/get-deepest.ts","../src/utils/wrap-node-list.ts","../src/utils/remove-zws.ts","../src/utils/change-tag-name.ts","../src/utils/fix-numbered-list.ts","../src/utils/set-block-indent.ts","../src/utils/morph.ts","../src/utils/node-and-view.ts","../src/storage/box-instances.ts","../src/storage/boxes.ts","../src/storage/editors.ts","../src/ui/button.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/box-toolbar.ts","../src/models/box.ts","../src/utils/get-box.ts","../src/utils/request.ts","../src/utils/upload-file.ts","../src/utils/index.ts","../src/models/fragment.ts","../src/config/element-rules.ts","../src/parsers/html-parser.ts","../src/parsers/text-parser.ts","../src/operations/insert-node.ts","../src/operations/insert-bookmark.ts","../src/operations/to-bookmark.ts","../src/operations/fix-list.ts","../src/operations/delete-contents.ts","../src/operations/insert-fragment.ts","../src/operations/set-blocks.ts","../src/operations/split-block.ts","../src/operations/split-marks.ts","../src/operations/add-mark.ts","../src/operations/remove-mark.ts","../src/operations/insert-link.ts","../src/operations/insert-box.ts","../src/operations/remove-box.ts","../src/managers/selection.ts","../src/managers/command.ts","../src/managers/history.ts","../src/managers/keystroke.ts","../src/managers/box-manager.ts","../src/managers/plugin.ts","../src/editor.ts","../src/config/menu-items.ts","../src/config/toolbar-items.ts","../src/ui/toolbar.ts","../src/boxes/hr.ts","../src/boxes/code-block.ts","../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.6.3_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../src/ui/box-resizer.ts","../src/boxes/image.ts","../src/boxes/video.ts","../src/boxes/file.ts","../src/boxes/emoji.ts","../src/plugins/copy.ts","../src/plugins/cut.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/align.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","../src/ui/link-popup.ts","../src/plugins/link.ts","../src/plugins/hr.ts","../src/plugins/code-block.ts","../src/plugins/image.ts","../src/plugins/video.ts","../src/plugins/file.ts","../src/plugins/emoji.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/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// - open.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// basic\nimport plus from './plus.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 file from './file.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 zoomIn from './zoom-in.svg';\nimport zoomOut from './zoom-out.svg';\nimport circleNotch from './circle-notch.svg';\nimport selectAll from './select-all.svg';\nimport undo from './undo.svg';\nimport redo from './redo.svg';\n// block format\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';\n// mark format\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';\n// items that can be inserted\nimport link from './link.svg';\nimport unlink from './unlink.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 table from './table.svg';\n\nexport const icons: Map<string, string> = new Map([\n ['plus', plus],\n ['more', more],\n ['left', left],\n ['right', right],\n ['down', down],\n ['check', check],\n ['checkCircle', checkCircle],\n ['warningCircle', warningCircle],\n ['file', file],\n ['open', open],\n ['download', download],\n ['copy', copy],\n ['remove', remove],\n ['maximize', maximize],\n ['close', close],\n ['zoomIn', zoomIn],\n ['zoomOut', zoomOut],\n ['circleNotch', circleNotch],\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 ['link', link],\n ['unlink', unlink],\n ['hr', hr],\n ['codeBlock', codeBlock],\n ['image', image],\n ['video', video],\n ['attachment', attachment],\n ['emoji', emoji],\n ['specialCharacter', specialCharacter],\n ['table', table],\n]);\n","export 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 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","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\nexport function safeTemplate(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","export 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","// Search for a specified value within an string and return true or false (false if not found).\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","// Creates a Base64-encoded ASCII string from a string.\nexport function toBase64(value: 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) {\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","// 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// Converting colors 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 { KeyValue } from '../types/object';\nimport { toHex } from './to-hex';\n\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","// 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","// 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","// 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","// 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 { 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","import { NativeNode } from '../types/native';\n\nexport function toNodeList(content: string | NativeNode, valueType?: 'text' | 'html'): NativeNode[] {\n const nodeList: NativeNode[] = [];\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 type NativeNode = Node;\nexport const NativeNode = Node;\n\nexport type NativeRange = Range;\nexport const NativeRange = Range;\n\nexport type NativeSelection = Selection;\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","/* eslint no-console: \"off\" */\n\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 {\n NativeNode,\n} from '../types/native';\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\nexport class Nodes {\n // Returns native nodes that includes element, text node.\n private nodeList: NativeNode[];\n\n // Represents the number of nodes in nodeList.\n public length: number;\n\n constructor(node?: NativeNode | NativeNode[] | 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 // Returns node ID at the first index.\n public get id(): number {\n const node = this.get(0);\n return node.lakeId;\n }\n\n // Returns node name at the first index.\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 // Returns a boolean value indicating whether the 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 === NativeNode.ELEMENT_NODE;\n }\n\n // Returns a boolean value indicating whether the node is a text node.\n public get isText(): boolean {\n if (this.length === 0) {\n return false;\n }\n const node = this.get(0);\n return node.nodeType === NativeNode.TEXT_NODE;\n }\n\n // Returns a boolean value indicating whether the node is a block element.\n public get isBlock(): boolean {\n if (this.length === 0) {\n return false;\n }\n return blockTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a mark element.\n public get isMark(): boolean {\n if (this.length === 0) {\n return false;\n }\n return markTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a void element.\n public get isVoid(): boolean {\n if (this.length === 0) {\n return false;\n }\n return voidTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a heading element.\n public get isHeading(): boolean {\n if (this.length === 0) {\n return false;\n }\n return headingTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a list element.\n public get isList(): boolean {\n if (this.length === 0) {\n return false;\n }\n return listTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a table element.\n public get isTable(): boolean {\n if (this.length === 0) {\n return false;\n }\n return tableTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a bookmark element.\n public get isBookmark(): boolean {\n return this.name === 'lake-bookmark';\n }\n\n // Returns a boolean value indicating whether the node is a box element.\n public get isBox(): boolean {\n return this.name === 'lake-box';\n }\n\n // Returns a boolean value indicating whether the node is a inline box element.\n public get isInlineBox(): boolean {\n return this.isBox && this.attr('type') === 'inline';\n }\n\n // Returns a boolean value indicating whether the node is a block box element.\n public get isBlockBox(): boolean {\n return this.isBox && this.attr('type') === 'block';\n }\n\n // Returns a boolean value indicating whether the element is a root element of contenteditable area.\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 // Returns a boolean value indicating whether the node is ouside the container.\n public get isOutside(): boolean {\n return this.closest('[contenteditable=\"true\"]').length === 0;\n }\n\n // Returns a boolean value indicating whether the node is inside the container.\n public get isInside(): boolean {\n return !this.isOutside && !this.isContainer;\n }\n\n // Returns a boolean value indicating whether the node is a top element inside the container.\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 // Returns a boolean value indicating whether the node is editable or the node is a container.\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 // Returns a boolean value indicating whether the node is indivisible.\n public get isIndivisible(): boolean {\n return this.isContainer || this.isTable;\n }\n\n // Returns a boolean value indicating whether the 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 (this.isElement && isEmptyText) {\n return this.find('lake-box').length === 0;\n }\n return isEmptyText;\n }\n\n // Returns a boolean value indicating whether the node and the target node are siblings.\n public isSibling(target: Nodes): boolean {\n if (this.length === 0) {\n return false;\n }\n const parent = this.get(0).parentNode as HTMLElement;\n return parent && parent === target.parent().get(0);\n }\n\n // Gets a native node at the specified index.\n public get(index: number): NativeNode {\n return this.nodeList[index];\n }\n\n // Gets all native nodes\n public getAll(): NativeNode[] {\n return this.nodeList;\n }\n\n // Reduces the nodes of a Nodes object to the one at the specified index.\n public eq(index: number): Nodes {\n const node = this.get(index);\n return new Nodes(node);\n }\n\n // Iterates over a Nodes object, executing a function for each node.\n public each(callback: (element: NativeNode, 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 // Iterates over a Nodes object, executing a function 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 === NativeNode.ELEMENT_NODE) {\n if (callback(nodes[i] as Element, i) === false) {\n return this;\n }\n }\n }\n return this;\n }\n\n // Reverses the nodes of a Nodes object.\n public reverse(): Nodes {\n const nodes = this.getAll().reverse();\n return new Nodes(nodes);\n }\n\n // Tests whether the element 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 the descendants of the first element which are selected by the specified CSS selector.\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)\n // until it finds a 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() {\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 root element which has contenteditable=\"true\" attribute.\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 && parent.isElement) {\n if (['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 element.\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 element.\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: NativeNode | null = this.get(0);\n while (sibling) {\n i++;\n sibling = sibling.previousSibling;\n }\n return i;\n }\n\n // Returns a path of the first element.\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 of child nodes of the first element.\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 node generator that iterates over the descendants of the first element.\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 // Attaches an event listener for the elements.\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 handlers that were attached 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 the Nodes object 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 // Gets all event listeners attached to the Nodes object.\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 element, 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 element.\n public blur(): this {\n const element = this.get(0) as HTMLElement;\n element.blur();\n return this;\n }\n\n // Returns a duplicate of the first node.\n public clone(deep: boolean = false): Nodes {\n const node = this.get(0);\n return new Nodes(node.cloneNode(deep));\n }\n\n public hasAttr(attributeName: string): boolean {\n const element = this.get(0) as Element;\n return element.hasAttribute(attributeName);\n }\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 public removeAttr(attributeName: string): this {\n return this.eachElement(element => {\n element.removeAttribute(attributeName);\n });\n }\n\n public hasClass(className: string): boolean {\n const element = this.get(0) as Element;\n return inString(element.className, className, ' ');\n }\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 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 public computedCSS(propertyName: string): string {\n const element = this.get(0) as Element;\n return getCSS(element, propertyName);\n }\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 // Returns the width of of the first element.\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 element, which does not include padding.\n public innerWidth() {\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 element.\n public height(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetHeight;\n }\n\n public show(displayType: string = 'block'): this {\n this.css('display', displayType);\n return this;\n }\n\n public hide(): this {\n this.css('display', 'none');\n return this;\n }\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 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 public outerHTML(): string {\n const element = this.get(0) as Element;\n return element.outerHTML;\n }\n\n // Removes all child nodes of each element.\n public empty(): this {\n this.html('');\n return this;\n }\n\n // Inserts the specified content to the beginning of the first element.\n public prepend(content: string | NativeNode | 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 to the end of the first element.\n public append(content: string | NativeNode | 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 | NativeNode | 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 | NativeNode | 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 provided new content.\n public replaceWith(newContent: string | NativeNode | Nodes): this {\n const node = this.get(0);\n if (!node.parentNode) {\n return this;\n }\n let target: NativeNode;\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 each node from the DOM.\n // keepChildren parameter:\n // A boolean value; true only removes each node and keeps all descended nodes; false removes the descendants; if omitted, it defaults to false.\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 // Breaks the first text node into two nodes at the specified offset, keeping both nodes in the tree as siblings.\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 of the first node.\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 of the first node.\n public debug(): void {\n debug(this.toString());\n }\n}\n","import { NativeNode } from '../types/native';\nimport { toNodeList } from './to-node-list';\nimport { Nodes } from '../models/nodes';\n\nexport function query(content: string | NativeNode | Nodes): Nodes {\n if (content instanceof Nodes) {\n return content;\n }\n const nodes = toNodeList(content);\n return new Nodes(nodes);\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 class represents a fragment of a document that can contain nodes and parts of text nodes.\nexport class Range {\n // native range\n private range: NativeRange;\n\n constructor(range?: NativeRange) {\n this.range = range ?? document.createRange();\n }\n\n // Returns a node within which the range starts.\n public get startNode(): Nodes {\n return new Nodes(this.range.startContainer);\n }\n\n // Returns a number representing where in the startNode the range starts.\n public get startOffset(): number {\n return this.range.startOffset;\n }\n\n // Returns a node within which the range ends.\n public get endNode(): Nodes {\n return new Nodes(this.range.endContainer);\n }\n\n // Returns a number representing where in the endNode the range ends.\n public get endOffset(): number {\n return this.range.endOffset;\n }\n\n // Returns the closest node that contains both the startNode and endNode.\n public get commonAncestor(): Nodes {\n return new Nodes(this.range.commonAncestorContainer);\n }\n\n // Returns 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 // Returns a boolean value indicating whether the range's start point is in the box.\n public get isBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n return boxNode.length > 0;\n }\n\n // Returns a boolean value indicating whether the range's common ancestor node is in the start strip of the 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 // Returns a boolean value indicating whether the range's common ancestor node is in the center of the 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 // Returns a boolean value indicating whether the range's common ancestor node is in the end strip of the 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 // Returns a boolean value indicating whether the range's common ancestor node is inside the container of the 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 // Returns 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 // Gets a native 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 {\n const text = range.startNode.text();\n if (range.startOffset < text.length) {\n range.setEnd(range.startNode, range.startOffset + 1);\n } else {\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: rect.y,\n width: width > 0 ? width : 1,\n height: height > 0 ? height : 1,\n });\n }\n\n // Returns −1 if the point is before the range, 0 if the point is in the range, and 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 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 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 // Indicates whether a 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 before a node.\n public setStartBefore(node: Nodes): void {\n this.range.setStartBefore(node.get(0));\n }\n\n // Sets the start position of the range after a 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 before a node.\n public setEndBefore(node: Nodes): void {\n this.range.setEndBefore(node.get(0));\n }\n\n // Sets the end position of the range after a node.\n public setEndAfter(node: Nodes): void {\n this.range.setEndAfter(node.get(0));\n }\n\n // Collapses the range to the start of it.\n public collapseToStart(): void {\n this.range.collapse(true);\n }\n\n // Collapses the range to the end of it.\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 // Sets the range to the center position of the box.\n public selectBox(boxNode: Nodes): void {\n const boxContainer = boxNode.find('.lake-box-container');\n if (boxContainer.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n // Sets the range to the start position of the box.\n public selectBoxStart(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n // Sets the range to the start position of the box.\n public selectBoxEnd(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n // Collapses the range and sets the range to 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 and sets the range to 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 }\n\n // Reduces the boundary of the range.\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 points of the range for the box.\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 beginning or end position of the range for table.\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 point of the range for the block.\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 points of the range.\n public adjust(): void {\n this.adjustBox();\n this.adjustTable();\n this.adjustBlock();\n }\n\n // Returns the previous node of the beginning point 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 next node of the beginning point 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 target boxes relating to 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 target blocks relating to 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 target marks and text nodes relating to the range.\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 // Returns the text of the start part of the closest block divided into two parts by the start point of the range.\n // \"<p>one<anchor />two<focus />three</p>\" returns \"three\".\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 of the end part of the closest block divided into two parts by the end point of the range.\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 range object with boundary points identical to the cloned range.\n public clone(): Range {\n return new Range(this.range.cloneRange());\n }\n\n // Returns a document fragment copying the nodes included in the range.\n public cloneContents(): DocumentFragment {\n return this.range.cloneContents();\n }\n\n // Prints information of the range.\n public debug(): 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 { 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// Appends a node to the deepest element of the specified element.\nexport function appendDeepest(element: Nodes, node: Nodes): void {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n while (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isText || child.isBox) {\n break;\n }\n if (child.isElement && child.children().length === 1 && firstChild.isBookmark) {\n child.prepend(node);\n break;\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n child.append(node);\n break;\n }\n child = firstChild;\n }\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes The <br /> element in the specified block which is empty.\nexport function removeBr(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 { Range } from '../models/range';\nimport { appendDeepest } from './append-deepest';\nimport { query } from './query';\nimport { removeBr } from './remove-br';\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 removeBr(node);\n removeBr(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendDeepest(node, query('<br />'));\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// Returns the deepest element of the specified element.\nexport function getDeepest(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 { getDeepest } from './get-deepest';\nimport { query } from './query';\n\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 = getDeepest(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes Zero-width spaces that are dependent on some other 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 type { Nodes } from '../models/nodes';\nimport { query } from './query';\nimport { safeTemplate } from './safe-template';\n\nexport function changeTagName(element: Nodes, newTagName: string): Nodes {\n const nativeElement = element.get(0) as Element;\n const newElement = query(safeTemplate`<${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 { Nodes } from '../models/nodes';\n\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 type { Nodes } from '../models/nodes';\nimport { fixNumberedList } from './fix-numbered-list';\n\nexport function setBlockIndent(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","/**\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) {\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) {\n return !ctx.deadIds.has(id);\n}\n\nfunction idIsWithinNode(ctx: KeyValue, id: string, targetNode: Node) {\n const idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n}\n\nfunction removeIdsFromConsideration(ctx: KeyValue, node: Node) {\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) {\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) {\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 { Nodes } from '../models/nodes';\n\ntype NodePosition = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n};\n\n// Returns an object that indicates the specified node's position relative to the viewport.\nexport function nodeAndView(node: Nodes): NodePosition {\n const nativeNode = node.get(0) as Element;\n const rect = nativeNode.getBoundingClientRect();\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 const viewport = node.closestScroller();\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 const position: NodePosition = {\n left,\n right: viewportWidth - right,\n top,\n bottom: viewportHeight - bottom,\n };\n return position;\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 type { BoxComponent } from '../types/box';\n\nexport const boxes: Map<string, BoxComponent> = new Map();\n","import type { Editor } from '..';\n\nexport const editors: Map<number, Editor> = new Map();\n","import { safeTemplate } from '../utils/safe-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\nexport class Button {\n private config: ButtonConfig;\n\n private root: Nodes;\n\n public node: Nodes;\n\n constructor(config: ButtonConfig) {\n this.config = config;\n this.root = config.root;\n this.node = query(safeTemplate`\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 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","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: 'Align 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 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 removeColor: 'Remove color',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: 'Link title',\n copy: 'Copy link to clipboard',\n open: 'Open link in new tab',\n save: 'Save',\n unlink: 'Remove link',\n },\n image: {\n view: 'Full screen',\n remove: 'Delete',\n previous: 'Previous',\n next: 'Next',\n close: 'Close (Esc)',\n loadingError: 'The image cannot be loaded',\n zoomOut: 'Zoom out',\n zoomIn: 'Zoom in',\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} 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 align: '对齐方式',\n indent: '缩进',\n fontFamily: '字体',\n fontSize: '文字大小',\n moreStyle: '更多样式',\n fontColor: '文字颜色',\n highlight: '文字背景',\n image: '图片',\n file: '文件',\n emoji: '表情',\n removeColor: '默认',\n },\n link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n image: {\n view: '查看大图',\n remove: '删除',\n previous: '上一张',\n next: '下一张',\n close: '关闭 (Esc)',\n loadingError: '图片加载失败',\n zoomOut: '缩小',\n zoomIn: '放大',\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} 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 align: '文字揃え',\n indent: 'インデント',\n fontFamily: 'フォント',\n fontSize: '文字サイズ',\n moreStyle: 'その他のスタイル',\n fontColor: '文字色',\n highlight: '文字の背景',\n image: '画像',\n file: 'ファイル',\n emoji: '絵文字',\n removeColor: 'デフォルト',\n },\n link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンク文字',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '確認',\n unlink: 'リンクを削除',\n },\n image: {\n view: '大きな画像を見る',\n remove: '削除',\n previous: '前の画像',\n next: '次の画像',\n close: '閉じる (Esc)',\n loadingError: '画像を読み込めません',\n zoomOut: '縮小',\n zoomIn: '拡大',\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} 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 align: '정렬',\n indent: '들여쓰기',\n fontFamily: '글꼴',\n fontSize: '글자 크기',\n moreStyle: '더 많은 스타일',\n fontColor: '글자 색상',\n highlight: '글자 배경',\n image: '이미지',\n file: '파일',\n emoji: '이모지',\n removeColor: '기본색',\n },\n link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '확인',\n unlink: '링크 제거',\n },\n image: {\n view: '큰 이미지 보기',\n remove: '삭제',\n previous: '이전 이미지',\n next: '다음 이미지',\n close: '닫기 (Esc)',\n loadingError: '이미지를 로드할 수 없습니다',\n zoomOut: '축소',\n zoomIn: '확대',\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} 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 { NativeNode } from '../types/native';\nimport { TranslationFunctions } from '../i18n/types';\nimport { DropdownItem, DropdownMenuItem } 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 { template } from '../utils/template';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../../src/i18n';\n\ntype DropdownConfig = DropdownItem & {\n root: Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n placement?: 'top' | 'bottom';\n onSelect: (value: string) => void;\n}\n\nexport class Dropdown {\n private config: DropdownConfig;\n\n private root: Nodes;\n\n private locale: TranslationFunctions;\n\n public 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 const placement = config.placement || 'bottom';\n this.node = query(safeTemplate`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\" placement=\"${placement}\">\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 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 = template`\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 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 documentClickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n const menuNode = this.node.find('.lake-dropdown-menu');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n menuNode.hide();\n document.removeEventListener('click', this.documentClickListener);\n };\n\n private showMenu(): void {\n const config = this.config;\n const dropdownNode = this.node;\n const menuNode = dropdownNode.find('.lake-dropdown-menu');\n if (dropdownNode.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(dropdownNode);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n menuNode.find('li').each(node => {\n const listNode = query(node);\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 (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n const dropdownNativeNode = dropdownNode.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 if (rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow)) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n menuNode.css('visibility', '');\n document.addEventListener('click', this.documentClickListener);\n }\n\n private bindEvents(): void {\n const config = this.config;\n const dropdownNode = this.node;\n const titleNode = dropdownNode.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n const menuNode = dropdownNode.find('.lake-dropdown-menu');\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (dropdownNode.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 (dropdownNode.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 (dropdownNode.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 (dropdownNode.attr('disabled')) {\n return;\n }\n const value = dropdownNode.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 menuNode.on('click', event => {\n event.preventDefault();\n event.stopPropagation();\n const listItem = query(event.target as NativeNode).closest('li');\n if (listItem.length === 0) {\n return;\n }\n const value = listItem.attr('value');\n Dropdown.setValue(dropdownNode, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n dropdownNode.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n menuNode.hide();\n document.removeEventListener('click', this.documentClickListener);\n });\n }\n\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const dropdownNode = this.node;\n const titleNode = dropdownNode.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 const menuNode = query('<ul class=\"lake-dropdown-menu\" />');\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 Dropdown.setValue(dropdownNode, [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.apppendMenuItems(menuNode);\n dropdownNode.append(titleNode);\n dropdownNode.append(menuNode);\n this.root.append(dropdownNode);\n this.bindEvents();\n }\n\n public unmount(): void {\n this.node.remove();\n document.removeEventListener('click', this.documentClickListener);\n }\n}\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n BoxToolbarButtonItem, BoxToolbarDropdownItem,\n BoxToolbarItem, BoxToolbarConfig, BoxToolbarPlacement,\n} from '../types/box-toolbar';\nimport { query } from '../utils/query';\nimport { nodeAndView } from '../utils/node-and-view';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Button } from './button';\nimport { Dropdown } from './dropdown';\nimport { i18nObject } from '../../src/i18n';\n\nexport class BoxToolbar {\n\n private root: Nodes;\n\n private box: Box;\n\n private items: ('|' | BoxToolbarItem)[];\n\n private locale: TranslationFunctions;\n\n private placement: BoxToolbarPlacement;\n\n private buttonItemList: BoxToolbarButtonItem[] = [];\n\n private dropdownItemList: BoxToolbarDropdownItem[] = [];\n\n public container: Nodes;\n\n constructor(config: BoxToolbarConfig) {\n this.root = query(config.root);\n this.box = config.box;\n this.items = config.items;\n this.locale = config.locale || i18nObject('en-US');\n this.placement = config.placement || 'top';\n this.container = query('<div class=\"lake-box-toolbar\" />');\n this.root.addClass('lake-custom-properties');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendButton(item: BoxToolbarButtonItem): 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(this.locale),\n tabIndex: -1,\n onClick: () => {\n item.onClick(this.box, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(item: BoxToolbarDropdownItem): void {\n const dropdown = new Dropdown({\n root: this.container,\n locale: this.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 tabIndex: -1,\n placement: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n item.onSelect(this.box, value);\n },\n });\n dropdown.render();\n }\n\n public updatePosition(): void {\n const boxNode = this.box.node;\n const boxNativeNode = boxNode.get(0) as HTMLElement;\n const boxRect = boxNativeNode.getBoundingClientRect();\n const position = nodeAndView(boxNode);\n if (position.top < 0 || position.bottom + boxRect.height < 0) {\n this.container.hide();\n return;\n }\n this.container.show('flex');\n const boxX = boxRect.x + window.scrollX;\n const boxY = boxRect.y + window.scrollY;\n const left = (boxX + boxRect.width / 2 - this.container.width() / 2).toFixed(1);\n const top = (boxY - this.container.height() - 6).toFixed(1);\n this.container.css({\n left: `${left}px`,\n top: `${top}px`,\n });\n }\n\n // Renders a toolbar for the specified box.\n public render(): void {\n this.root.append(this.container);\n for (const item of this.items) {\n if (item === '|') {\n this.appendDivider();\n } else if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendButton(item);\n } else if (item.type === 'dropdown') {\n this.dropdownItemList.push(item);\n this.appendDropdown(item);\n }\n }\n this.updatePosition();\n }\n\n public unmount(): void {\n this.container.remove();\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport type { Editor } from '../editor';\nimport { NativeNode } from '../types/native';\nimport { BoxType, BoxValue } from '../types/box';\nimport { BoxToolbarItem } from '../types/box-toolbar';\nimport { boxes } from '../storage/boxes';\nimport { editors } from '../storage/editors';\nimport { debug } from '../utils/debug';\nimport { safeTemplate } from '../utils/safe-template';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { query } from '../utils/query';\nimport { morph } from '../utils/morph';\nimport { Nodes } from './nodes';\nimport { BoxToolbar } from '../ui/box-toolbar';\n\nconst framework = safeTemplate`\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\nexport class Box {\n // <lake-box> element\n public node: Nodes;\n\n public event: EventEmitter = new EventEmitter();\n\n constructor(node: string | Nodes | NativeNode) {\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(safeTemplate`<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 // Adds the framework of the box.\n private addFramework(): void {\n let container = this.getContainer();\n if (container.length === 0) {\n this.node.html(framework);\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 // Updates part of the value of the box.\n public updateValue(valueKey: string, valueValue: string): void;\n\n public updateValue(valueKey: BoxValue): void;\n\n public updateValue(valueKey: any, valueValue?: any): void {\n const value = this.value;\n if (typeof valueKey === 'string') {\n value[valueKey] = valueValue;\n } else {\n for (const key of Object.keys(valueKey)) {\n value[key] = valueKey[key];\n }\n }\n this.value = value;\n }\n\n // Returns the editor instance of the box.\n public getEditor(): Editor | undefined {\n const container = this.node.closest('div[contenteditable]');\n return container.length > 0 ? editors.get(container.id) : undefined;\n }\n\n // Returns the container node of the box.\n public getContainer(): Nodes {\n return this.node.find('.lake-box-container');\n }\n\n // Sets a popup toolbar for the box.\n public setToolbar(items: ('|' | BoxToolbarItem)[]): void {\n const editor = this.getEditor();\n let toolbar: BoxToolbar | null = null;\n const scrollListener = () => {\n if (toolbar) {\n toolbar.updatePosition();\n }\n };\n this.event.on('focus', () => {\n toolbar = new BoxToolbar({\n root: editor ? editor.popupContainer : query(document.body),\n box: this,\n items,\n locale: editor ? editor.locale : undefined,\n });\n toolbar.render();\n if (editor) {\n editor.root.on('scroll', scrollListener);\n }\n });\n this.event.on('blur', () => {\n if (toolbar) {\n toolbar.unmount();\n toolbar = null;\n }\n if (editor) {\n editor.root.off('scroll', scrollListener);\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.addFramework();\n const content = component.render(this);\n if (content !== undefined) {\n const container = this.getContainer();\n const newContainer = container.clone(false);\n newContainer.append(content);\n morph(container, newContainer);\n }\n debug(`Box \"${this.name}\" (id: ${this.node.id}) rendered`);\n }\n\n // Destroys a rendered 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 // Returns a HTML string of 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","import { NativeNode } from '../types/native';\nimport { 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 | Nodes | NativeNode): 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","/**\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) {\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) {\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch (e) {\n return text;\n }\n}\n\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 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 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\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","// String\nexport * from './template';\nexport * from './safe-template';\nexport * from './camel-case';\nexport * from './in-string';\nexport * from './encode';\nexport * from './to-base64';\nexport * from './from-base64';\nexport * from './to-hex';\nexport * from './parse-style';\nexport * from './normalize-value';\nexport * from './denormalize-value';\nexport * from './modifier-text';\nexport * from './file-size';\n\n// Native DOM\nexport * from './get-css';\nexport * from './to-node-list';\n\n// Nodes\nexport * from './query';\nexport * from './split-nodes';\nexport * from './merge-nodes';\nexport * from './wrap-node-list';\nexport * from './get-deepest';\nexport * from './append-deepest';\nexport * from './remove-zws';\nexport * from './change-tag-name';\nexport * from './fix-numbered-list';\nexport * from './remove-br';\nexport * from './set-block-indent';\nexport * from './morph';\nexport * from './node-and-view';\n\n// Box\nexport * from './get-box';\n\n// Network\nexport * from './request';\nexport * from './upload-file';\n\n// Other\nexport * from './debug';\n","import { NativeNode } from '../types/native';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\nexport class Fragment {\n // native document fragment\n private fragment: DocumentFragment;\n\n constructor(fragment?: DocumentFragment) {\n this.fragment = fragment ?? document.createDocumentFragment();\n }\n\n // Gets a native fragment.\n public get(): DocumentFragment {\n return this.fragment;\n }\n\n // Returns the descendants of the fragment which are selected by the specified CSS selector.\n public find(selector: string): Nodes {\n const nodeList: NativeNode[] = [];\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 node as the last child.\n public append(node: string | NativeNode | Nodes): void {\n query(node).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 { getElementRules } from '../config/element-rules';\nimport { parseStyle, encode } from '../utils';\nimport { Nodes } from '../models/nodes';\n\nexport class HTMLParser {\n\n private rules: any;\n\n private 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 HTML string and returns the resulting body element.\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 the result as HTML format.\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 the result as node list.\n public getNodeList(): Nodes[] {\n const html = this.getHTML();\n const body = this.parseHTML(html);\n return body.children();\n }\n\n // Returns the result as document fragment.\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';\nimport { HTMLParser } from './html-parser';\n\nexport class TextParser {\n\n private content: string;\n\n constructor(content: string) {\n this.content = content;\n }\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 public getFragment(): DocumentFragment {\n const htmlParser = new HTMLParser(this.getHTML());\n return htmlParser.getFragment();\n }\n}\n","import { NativeNode } from '../types/native';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Inserts a node into the specified range.\nexport function insertNode(range: Range, node: NativeNode | Nodes): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n node = query(node);\n const nativeNode = node.get(0);\n const nativeRange = range.get();\n nativeRange.insertNode(nativeNode);\n nativeRange.setEndAfter(nativeNode);\n nativeRange.collapse(false);\n}\n","import { query } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertNode } from './insert-node';\n\n// Either the method inserts a bookmark into the current position of the collapsed range\n// or the method inserts a pair of bookmarks into the beginning and the 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 { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction removeAndNormalizeNode(node: Nodes, range?: Range) {\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// Sets the specified range to the 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 { fixNumberedList } from '../utils';\nimport { Range } from '../models/range';\n\nexport function fixList(range: Range): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n const blocks = range.getBlocks();\n fixNumberedList(blocks);\n}\n","import { query } from '../utils/query';\nimport { appendDeepest } from '../utils/append-deepest';\nimport { mergeNodes } from '../utils/merge-nodes';\nimport { Range } from '../models/range';\nimport { fixList } from './fix-list';\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 appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\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 toBookmark(range, bookmark);\n fixList(range);\n}\n","import { removeBr } from '../utils/remove-br';\nimport { Range } from '../models/range';\nimport { Fragment } from '../models/fragment';\nimport { deleteContents } from './delete-contents';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\n// Inserts a DocumentFragment object into the specified range.\nexport function insertFragment(range: Range, fragment: DocumentFragment | Fragment): void {\n if (fragment instanceof Fragment) {\n fragment = fragment.get();\n }\n if (range.commonAncestor.isOutside) {\n return;\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const block = range.startNode.closestBlock();\n removeBr(block);\n const bookmark = insertBookmark(range);\n bookmark.focus.before(fragment);\n toBookmark(range, bookmark);\n range.adjustBlock();\n}\n","import { KeyValue } from '../types/object';\nimport { query, getDeepest, wrapNodeList, appendDeepest } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { fixList } from './fix-list';\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 relating to 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 = getDeepest(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 fixList(range);\n return;\n }\n // no block\n const bookmark = insertBookmark(range);\n const nonBlockNodes = getTopNonBlockNodes(range);\n const block = wrapNodeList(nonBlockNodes, valueNode);\n toBookmark(range, bookmark);\n fixList(range);\n if (block.isEmpty) {\n appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\n }\n}\n","import { TwoParts } from '../types/object';\nimport { query, splitNodes, appendDeepest } from '../utils';\nimport { Range } from '../models/range';\nimport { fixList } from './fix-list';\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 appendDeepest(start, query('<br />'));\n }\n if (end) {\n if (end.isEmpty) {\n appendDeepest(end, query('<br />'));\n range.shrinkAfter(end);\n } else {\n range.shrinkBefore(end);\n }\n }\n fixList(range);\n return {\n start,\n end,\n };\n}\n","import { TwoParts, ThreeParts } from '../types/object';\nimport { splitNodes } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Removes empty marks that contain no content.\nfunction 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\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, query, getBox, appendDeepest, removeBr } from '../utils';\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 { insertNode } from './insert-node';\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 an element copied from each last child of the descendants of the specified node.\nfunction copyNestedMarks(node: Nodes): Nodes | null {\n if (!node.isMark) {\n return null;\n }\n let newMark = node.clone();\n let child = node.last();\n while (child.length > 0) {\n if (child.isMark) {\n const newChild = child.clone();\n newMark.append(newChild);\n newMark = newChild;\n }\n child = child.last();\n }\n return newMark;\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 removeBr(block);\n // https://en.wikipedia.org/wiki/Zero-width_space\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const parts = splitMarks(range);\n if (parts.start) {\n const newMark = copyNestedMarks(parts.start);\n if (newMark) {\n if (newMark.name === tagName) {\n newMark.css(cssProperties);\n valueNode = newMark;\n } else {\n appendDeepest(newMark, zeroWidthSpace);\n valueNode.append(newMark);\n }\n }\n }\n if (valueNode.text() === '') {\n valueNode.append(zeroWidthSpace);\n }\n insertNode(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 { appendDeepest, query, removeZWS } from '../utils';\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// Removes empty marks that contain no content.\nfunction 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\n// Returns an element copied from each last child of the descendants of the specified node.\nfunction copyNestedMarks(node: Nodes, tagName?: string): Nodes | null {\n if (!node.isMark || !tagName) {\n return null;\n }\n let newMark = node.clone();\n let child = node.last();\n while (child.length > 0) {\n if (child.isMark && child.name !== tagName) {\n const newChild = child.clone();\n newMark.append(newChild);\n newMark = newChild;\n }\n child = child.last();\n }\n if (newMark.name === tagName) {\n if (newMark.first().length > 0) {\n newMark = newMark.first();\n } else {\n return null;\n }\n }\n return newMark;\n}\n\n// Removes the specified marks from 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 = copyNestedMarks(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 appendDeepest(newMark, 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 { query } from '../utils/query';\nimport { removeBr } from '../utils/remove-br';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertNode } from './insert-node';\nimport { splitMarks } from './split-marks';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './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 const block = range.startNode.closestBlock();\n removeBr(block);\n insertNode(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 { BoxValue } from '../types/box';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { insertFragment } from './insert-fragment';\nimport { splitBlock } from './split-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 const fragment = document.createDocumentFragment();\n fragment.appendChild(box.node.get(0));\n // inline box\n if (box.type === 'inline') {\n insertFragment(range, fragment);\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 // block box\n const parts = splitBlock(range);\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 insertFragment(range, fragment);\n box.render();\n range.selectBoxEnd(box.node);\n if (parts.start && parts.start.isEmpty) {\n parts.start.remove();\n }\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 { appendDeepest, query, getBox } from '../utils';\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\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 appendDeepest(parentNode, query('<br />'));\n range.shrinkAfter(parentNode);\n }\n return box;\n}\n","import { NativeSelection } from '../types/native';\nimport { KeyValue, AppliedItem } from '../types/object';\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 { insertNode } from '../operations/insert-node';\nimport { insertFragment } from '../operations/insert-fragment';\nimport { deleteContents } from '../operations/delete-contents';\nimport { setBlocks } from '../operations/set-blocks';\nimport { splitBlock } from '../operations/split-block';\nimport { splitMarks } from '../operations/split-marks';\nimport { addMark } from '../operations/add-mark';\nimport { removeMark } from '../operations/remove-mark';\nimport { fixList } from '../operations/fix-list';\nimport { insertLink } from '../operations/insert-link';\nimport { insertBox } from '../operations/insert-box';\nimport { removeBox } from '../operations/remove-box';\n\n// Returns the attributes of the element as an key-value object.\nfunction getAttributes(node: Nodes): KeyValue {\n const nativeNode = node.get(0) as Element;\n const attributes: KeyValue = {};\n if (nativeNode.hasAttributes()) {\n for (const attr of nativeNode.attributes) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n}\n\nfunction pushAncestralNodes(appliedItems: AppliedItem[], 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.isInside) {\n break;\n }\n appliedItems.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 pushNextNestedNodes(appliedItems: AppliedItem[], 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 appliedItems.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 caret.\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.getRangeFromNativeSelection();\n }\n\n // Returns the current selected range from the native selection.\n private getRangeFromNativeSelection(): 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 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.getRangeFromNativeSelection();\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 getAppliedItems(): AppliedItem[] {\n const appliedItems: AppliedItem[] = [];\n pushAncestralNodes(appliedItems, this.range);\n pushNextNestedNodes(appliedItems, this.range);\n return appliedItems;\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 insertNode(node: Parameters<typeof insertNode>[1]): ReturnType<typeof insertNode> {\n return insertNode(this.range, node);\n }\n\n public insertFragment(fragment: Parameters<typeof insertFragment>[1]): ReturnType<typeof insertFragment> {\n return insertFragment(this.range, fragment);\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 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 public fixList(): ReturnType<typeof fixList> {\n return fixList(this.range);\n }\n\n public insertLink(value: Parameters<typeof insertLink>[1]): ReturnType<typeof insertLink> {\n return insertLink(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 }\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 outside 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 { AppliedItem } from '../types/object';\nimport { debug } from '../utils/debug';\nimport { Selection } from './selection';\n\ntype CommmandItem = {\n isDisabled?: (AppliedItems: AppliedItem[]) => boolean;\n isSelected?: (appliedItems: AppliedItem[]) => boolean;\n selectedValues?: (AppliedItems: AppliedItem[]) => 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) {\n this.commandMap.set(name, commandItem);\n }\n\n public delete(name: string) {\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 appliedItems = this.selection.getAppliedItems();\n return commandItem.isDisabled(appliedItems);\n }\n\n public isSelected(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isSelected) {\n return false;\n }\n const appliedItems = this.selection.getAppliedItems();\n return commandItem.isSelected(appliedItems);\n }\n\n public selectedValues(name: string): string[] {\n const commandItem = this.getItem(name);\n if (!commandItem.selectedValues) {\n return [];\n }\n const appliedItems = this.selection.getAppliedItems();\n return commandItem.selectedValues(appliedItems);\n }\n\n public execute(name: string, ...data: any[]): void {\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport { NativeNode } from '../types/native';\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// Example:\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: NativeNode) => {\n if (new Nodes(oldNode).name === 'lake-box') {\n return false;\n }\n },\n afterAttributeUpdated: (attributeName: string, nativeNode: NativeNode) => {\n const node = new Nodes(nativeNode);\n if (attributeName === 'value' && node.name === 'lake-box') {\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 - 1];\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 (range.commonAncestor.isOutside) {\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 { createKeybindingsHandler } from 'tinykeys';\nimport { camelCase } from '../utils/camel-case';\nimport { Nodes } from '../models/nodes';\n\ntype EventItem = {\n type: string;\n listener: (event: Event) => void | boolean;\n};\n\nconst shortenedTypeMap = new Map([\n ['#', 'shift+#'],\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 }\n\n private normalizeType(type: string) {\n type = shortenedTypeMap.get(type) ?? type;\n type = type.replace(/(^|\\+|\\s)mod(\\+|\\s|$)/g, '$1$mod$2').\n replace(/shift|control|alt|meta|enter|tab|backspace|delete|space|escape|arrow-left|arrow-right|arrow-up|arrow-down/,\n (match: string) => match.charAt(0).toUpperCase() + camelCase(match.substring(1))).\n replace(/(^|\\+|\\s)([a-z])(\\+|\\s|$)/g,\n (match: string, p1: string, p2: string, p3: string) => `${p1}Key${p2.toUpperCase()}${p3}`);\n return type;\n }\n\n // Sets a keydown shortcut.\n public setKeydown(type: string, listener: EventListener) {\n type = this.normalizeType(type);\n const handler = createKeybindingsHandler({\n [type]: event => listener(event),\n });\n this.keydownEventList.push({\n type,\n listener,\n });\n this.container.on('keydown', handler);\n }\n\n // Sets a keyup shortcut.\n public setKeyup(type: string, listener: EventListener) {\n type = this.normalizeType(type);\n const handler = createKeybindingsHandler({\n [type]: event => listener(event),\n });\n this.keyupEventList.push({\n type,\n listener,\n });\n this.container.on('keyup', handler);\n }\n\n // Executes the keydown shortcuts.\n public keydown(type: string) {\n type = this.normalizeType(type);\n for (const item of this.keydownEventList) {\n if (item.type === type) {\n if (item.listener(new Event(type)) === false) {\n break;\n }\n }\n }\n }\n\n // Executes the keyup shortcuts.\n public keyup(type: string) {\n type = this.normalizeType(type);\n for (const item of this.keyupEventList) {\n if (item.type === type) {\n if (item.listener(new Event(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) {\n boxes.set(component.name, component);\n }\n\n public remove(name: string) {\n boxes.delete(name);\n }\n\n public getNames(): string[] {\n return Array.from(boxes.keys());\n }\n}\n","import type { Editor } from '../editor';\n\ntype PluginFunction = (editor: Editor) => void;\n\nexport class Plugin {\n private pluginList: PluginFunction[] = [];\n\n public add(plugin: PluginFunction) {\n this.pluginList.push(plugin);\n }\n\n public loadAll(editor: Editor) {\n for (const plugin of this.pluginList) {\n plugin(editor);\n }\n }\n}\n","import debounce from 'debounce';\nimport isEqual from 'fast-deep-equal/es6';\nimport EventEmitter from 'eventemitter3';\nimport { version } from '../package.json';\nimport { NativeNode } from './types/native';\nimport { SelectionState } from './types/object';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue, normalizeValue, query, getBox, nodeAndView, debug } from './utils';\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 | Nodes | NativeNode;\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};\n\nexport class Editor {\n private unsavedInputData: string = '';\n\n private unsavedInputCount: number = 0;\n\n private state: SelectionState = {\n appliedItems: [],\n disabledNameMap: new Map(),\n selectedNameMap: new Map(),\n selectedValuesMap: new Map(),\n };\n\n public static version: string = version;\n\n public static box = new BoxManager();\n\n public static plugin = new Plugin();\n\n public root: Nodes;\n\n public toolbar: Toolbar | undefined;\n\n public config: Config;\n\n public containerWrapper: Nodes;\n\n public container: Nodes;\n\n public overlayContainer: Nodes;\n\n public popupContainer: Nodes;\n\n public isComposing: boolean = false;\n\n public readonly: boolean;\n\n public event: EventEmitter = new EventEmitter();\n\n public selection: Selection;\n\n public command: Command;\n\n public history: History;\n\n public keystroke: Keystroke;\n\n public box: BoxManager = Editor.box;\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.popupContainer = query('<div class=\"lake-popup lake-custom-properties\" />');\n this.readonly = this.config.readonly;\n\n this.root.addClass('lake-custom-properties');\n this.container.attr({\n contenteditable: this.readonly ? 'false' : 'true',\n spellcheck: this.config.spellcheck ? 'true' : 'false',\n tabindex: this.config.tabIndex.toString(),\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.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.selection.updateByRange();\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 || targetNode.closest('.lake-popup').length > 0) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private resizeListener: EventListener = () => {\n this.event.emit('resize');\n };\n\n // Updates the classes of all boxes when the current selection of the editor 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.range;\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 of the editor is changed.\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let appliedItems = this.selection.getAppliedItems();\n if (\n appliedItems.length > 0 &&\n appliedItems[0].node.closestContainer().get(0) !== this.container.get(0)\n ) {\n appliedItems = [];\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 (appliedItems.length > 0) {\n for (const name of commandNames) {\n const commandItem = this.command.getItem(name);\n if (commandItem.isDisabled && commandItem.isDisabled(appliedItems)) {\n disabledNameMap.set(name, true);\n }\n if (commandItem.isSelected && commandItem.isSelected(appliedItems)) {\n selectedNameMap.set(name, true);\n }\n if (commandItem.selectedValues) {\n const values = commandItem.selectedValues(appliedItems);\n if (values.length > 0) {\n selectedValuesMap.set(name, values);\n }\n }\n }\n }\n const state: SelectionState = {\n appliedItems,\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) {\n value = denormalizeValue(value);\n const className = 'lake-show-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.shrinkAfter(paragraph);\n }\n const text = stripNode.text();\n stripNode.html('<br />');\n selection.insertNode(document.createTextNode(text));\n }\n\n // Resets the value of unsaved input property.\n private resetUnsavedInputData(): void {\n this.unsavedInputData = '';\n this.unsavedInputCount = 0;\n }\n\n // Binds events about input.\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n });\n this.container.on('compositionend', () => {\n this.isComposing = false;\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n // Here setTimeout is necessary because isComposing is not false after ending composition.\n window.setTimeout(() => {\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n // isComposing is false after ending composition because compositionend event has been emitted.\n if (this.isComposing) {\n this.event.emit('input', inputEvent);\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n this.event.emit('input', inputEvent);\n return;\n }\n if (\n inputEvent.inputType === 'insertText' ||\n inputEvent.inputType === 'insertCompositionText'\n ) {\n this.unsavedInputData += inputEvent.data ?? '';\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 this.event.emit('input', inputEvent);\n return;\n }\n this.history.save();\n this.event.emit('input', inputEvent);\n }, 0);\n });\n }\n\n // Binds events about 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.scrollToCaret();\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 this.selection.sync();\n if (options.inputType !== 'insertText') {\n this.resetUnsavedInputData();\n }\n });\n }\n\n // Returns a boolean value indicating whether the editor has focus.\n public get 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 // Returns translation functions by the specified lang.\n public get locale(): TranslationFunctions {\n return i18nObject(this.config.lang as Locales);\n }\n\n // Fixes wrong content, especially empty tag.\n public fixContent(): boolean {\n let changed = false;\n let children = this.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 = this.container.children();\n if (children.length === 0) {\n this.container.html('<p><br /></p>');\n this.selection.range.shrinkAfter(this.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 this.selection.range.shrinkAfter(paragraph);\n changed = true;\n debug(`Content fixed: void element \"${child.name}\" was wrapped in paragraph`);\n }\n }\n return changed;\n }\n\n // Sets default config for a plugin.\n public setPluginConfig(name: string, config: {[key: string]: any}): void {\n if (!this.config[name]) {\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 // Removes all unused box instances.\n public removeBoxGarbage() {\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 // 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 // Sets focus on the editor.\n public focus(): void {\n this.container.focus();\n }\n\n // Removes focus from the editor.\n public blur(): void {\n this.container.blur();\n }\n\n // Scrolls to the caret or the range of the selection.\n public scrollToCaret(): void {\n const range = this.selection.range;\n if (range.isBox) {\n return;\n }\n // Creates an artificial caret that is the same size as the caret at the current caret 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 artificialCaret = query('<div class=\"lake-artificial-caret\" />');\n const left = rangeRect.x - containerRect.x;\n const top = rangeRect.y - containerRect.y;\n artificialCaret.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-caret').remove();\n this.overlayContainer.append(artificialCaret);\n const position = nodeAndView(artificialCaret);\n // Scrolls the artificial caret element into the visible area of the browser window\n // if it's not already within the visible area of the browser window.\n // If the element is already within the visibposition.rightle area of the browser window, then no scrolling takes place.\n if (position.left < 0 || position.right < 0 || position.top < 0 || position.bottom < 0) {\n (artificialCaret.get(0) as Element).scrollIntoView({\n behavior: 'instant',\n block: 'center',\n inline: 'nearest',\n });\n }\n artificialCaret.remove();\n }\n\n // Sets the specified value 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 value 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 editor area and sets default value 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 query(document.body).append(this.popupContainer);\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n 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 window.addEventListener('resize', this.resizeListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n // Destroys the rendered editor.\n public unmount(): void {\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.empty();\n this.popupContainer.remove();\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 window.removeEventListener('resize', this.resizeListener);\n }\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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: '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: '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: appliedItems => {\n const currentValues = [];\n for (const item of appliedItems) {\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","import type { Editor } from '../editor';\nimport { NativeNode } from '../types/native';\nimport { SelectionState } from '../types/object';\nimport { ToolbarButtonItem, ToolbarDropdownItem, ToolbarUploadItem, ToolbarItem } from '../types/toolbar';\nimport { toolbarItems } from '../config/toolbar-items';\nimport { safeTemplate } from '../utils/safe-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\ntype ToolbarConfig = {\n root: string | Nodes | NativeNode;\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\nexport class Toolbar {\n\n private root: Nodes;\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 public container: Nodes;\n\n constructor(config: ToolbarConfig) {\n this.root = query(config.root);\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 this.root.addClass('lake-custom-properties');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendButton(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) {\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 tabIndex: -1,\n placement: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n }\n\n private appendUpload(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(safeTemplate`\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 => editor.config.onMessage('error', error),\n });\n }\n });\n }\n\n // Updates state of each item such as disabled, selected.\n public updateState(state: SelectionState) {\n const { appliedItems, disabledNameMap, selectedNameMap, selectedValuesMap } = state;\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 && appliedItems.length > 0 ? item.isDisabled(appliedItems) : 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 && appliedItems.length > 0 ? item.isSelected(appliedItems) : 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 && appliedItems.length > 0 ? item.selectedValues(appliedItems) : [];\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 && appliedItems.length > 0 ? item.isDisabled(appliedItems) : 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) {\n this.root.empty();\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.appendButton(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.appendUpload(editor, item);\n }\n }\n }\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils';\n\nexport const hrBox: BoxComponent = {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const rootNode = query('<div class=\"lake-hr\"><hr /></div>');\n box.getContainer().append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: () => '<hr />',\n};\n","import { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { debug, query } from '../utils';\nimport { Dropdown } from '../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) {\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 const codeBlockBox: BoxComponent = {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const rootNode = query('<div class=\"lake-code-block\" />');\n const container = box.getContainer();\n container.css('width', `${editor.container.innerWidth() - 2}px`);\n container.empty();\n container.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 = (value: string) => {\n // Here setTimeout is necessary because isComposing is not false after ending composition.\n window.setTimeout(() => {\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 0);\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 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 const resizeListener = () => {\n container.css('width', `${editor.container.innerWidth() - 2}px`);\n };\n editor.event.on('resize', resizeListener);\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n codeEditor.destroy();\n editor.event.off('resize', resizeListener);\n debug('CodeMirror destroyed');\n });\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 */\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;\r\n return g = { next: verb(0), \"throw\": verb(1), \"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 = {}, 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\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\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 function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\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 __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};\r\n","import { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\ntype BoxResizerConfig = {\n root: Nodes;\n box: Box;\n width: number;\n height: number;\n onResize?: (width: number, height: number) => void;\n onStop: (width: number, height: number) => void;\n};\n\nexport class BoxResizer {\n private config: BoxResizerConfig;\n\n private root: Nodes;\n\n private box: Box;\n\n constructor(config: BoxResizerConfig) {\n this.config = config;\n this.root = config.root;\n this.box = config.box;\n }\n\n private bindEvents(pointerNode: Nodes): void {\n const box = this.box;\n const boxContainer = box.getContainer();\n const resizerNode = pointerNode.closest('.lake-resizer');\n const infoNode = resizerNode.find('.lake-resizer-info');\n const isPlus = pointerNode.attr('class').indexOf('-right') >= 0;\n const initialWidth = boxContainer.width();\n const initialHeight = boxContainer.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 boxContainer.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 pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n clientX = pointerEvent.clientX;\n width = boxContainer.width();\n infoNode.show();\n pointerNode.on('pointermove', pointermoveListener);\n };\n // stop resizing\n const pointerupListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n width = box.getContainer().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 const { width, height }= this.config;\n const resizerNode = query(safeTemplate`\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\">${width} x ${height}</div>\n </div>\n `);\n this.bindEvents(resizerNode.find('.lake-resizer-top-left'));\n this.bindEvents(resizerNode.find('.lake-resizer-top-right'));\n this.bindEvents(resizerNode.find('.lake-resizer-bottom-left'));\n this.bindEvents(resizerNode.find('.lake-resizer-bottom-right'));\n this.root.append(resizerNode);\n }\n}\n","import 'photoswipe/style.css';\nimport PhotoSwipeLightbox, { DataSource } from 'photoswipe/lightbox';\nimport PhotoSwipe from 'photoswipe';\nimport { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { BoxResizer } from '../ui/box-resizer';\n\ntype ImageInfo = {\n node: Nodes;\n width?: number;\n height?: number;\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// Opens full screen view.\nfunction openFullScreen(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 let savedRange: Range;\n lightbox.on('openingAnimationEnd', () => {\n savedRange = editor.selection.range;\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n window.setTimeout(() => {\n if (savedRange) {\n // fix(image): lose focus when zooming in the iOS\n editor.selection.range = savedRange;\n editor.selection.sync();\n }\n box.event.emit('closefullscreen');\n }, 0);\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Displays error icon and filename.\nasync function renderError(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n box.getContainer().css({\n width: '',\n height: '',\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const errorNode = query(safeTemplate`\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 imageIcon = icons.get('image');\n if (imageIcon) {\n errorNode.find('.lake-error-icon').append(imageIcon);\n }\n rootNode.append(buttonGroupNode);\n rootNode.append(errorNode);\n}\n\n// Displays an image with uplaoding progress.\nasync function renderUploading(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(rootNode, 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 box.getContainer().css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const percent = Math.round(value.percent || 0);\n const progressNode = query(safeTemplate`\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 rootNode.append(buttonGroupNode);\n rootNode.append(progressNode);\n rootNode.append(imgNode);\n}\n\n// Displays an image that can be previewed or removed.\nasync function renderDone(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(rootNode, box);\n return;\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 boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-view\" title=\"${editor.locale.image.view()}\"></button>\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const viewButton = buttonGroupNode.find('.lake-button-view');\n const maximizeIcon = icons.get('maximize');\n if (maximizeIcon) {\n viewButton.append(maximizeIcon);\n }\n if (width < 80 || PhotoSwipeLightbox === null) {\n viewButton.hide();\n }\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const imgNode = imageInfo.node;\n imgNode.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n rootNode.append(buttonGroupNode);\n new BoxResizer({\n root: rootNode,\n box,\n width,\n height,\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n rootNode.append(imgNode);\n}\n\nexport const imageBox: BoxComponent = {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 container = box.getContainer();\n if (value.width && value.height && container.find('.lake-progress').length === 0) {\n container.css({\n width: `${value.width}px`,\n height: `${value.height}px`,\n });\n container.empty();\n const placeholderNode = query('<div class=\"lake-image-placeholder\" />');\n container.append(placeholderNode);\n const imageIcon = icons.get('image');\n if (imageIcon) {\n placeholderNode.append(imageIcon);\n }\n }\n if (container.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 container.append('<div />');\n }\n // for test\n if (value.status === 'loading') {\n return;\n }\n const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n let promise: Promise<void>;\n if (value.status === 'uploading') {\n promise = renderUploading(rootNode, box);\n } else if (value.status === 'error') {\n promise = renderError(rootNode, box);\n } else {\n promise = renderDone(rootNode, box);\n }\n promise.then(() => {\n container.empty();\n container.append(rootNode);\n rootNode.find('.lake-button-view').on('click', () => openFullScreen(box));\n if (editor.readonly) {\n rootNode.find('.lake-button-remove').hide();\n } else {\n rootNode.find('.lake-button-remove').on('click', event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n });\n }\n box.event.emit('render');\n });\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: box => {\n const rawValue = box.node.attr('value');\n return safeTemplate`<img src=\"${box.value.url}\" data-lake-value=\"${rawValue}\" />`;\n },\n};\n","import { createKeybindingsHandler } from 'tinykeys';\nimport { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Button } from '../ui/button';\nimport { BoxResizer } from '../ui/box-resizer';\n\nfunction getVideoId(url: string): string {\n const result = /\\w+$/i.exec(url || '');\n return result ? result[0] : '';\n}\n\nfunction getInputValue(videoNode: Nodes, name: string): string {\n const inputElement = videoNode.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n return nativeInputElement.value;\n}\n\nfunction appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const boxContainer = box.getContainer();\n const videoNode = boxContainer.find('.lake-video');\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.video.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n buttonGroupNode.find('.lake-button-remove').on('click', event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n });\n videoNode.append(buttonGroupNode);\n}\n\nfunction showVideo(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(safeTemplate`\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 BoxResizer({\n root: rootNode,\n box,\n width,\n height,\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 const videoBox: BoxComponent = {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(safeTemplate`\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 = getInputValue(formNode, 'url');\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', createKeybindingsHandler({\n 'Enter': event => {\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};\n","import { BoxComponent } from '../types/box';\nimport { BoxToolbarItem } from '../types/box-toolbar';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { fileSize } from '../utils/file-size';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\nconst boxToolbarItems: BoxToolbarItem[] = [\n {\n name: 'download',\n type: 'button',\n icon: icons.get('download'),\n tooltip: locale => locale.file.download(),\n onClick: box => {\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: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n];\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const infoNode = query(safeTemplate`\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(safeTemplate`\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 const fileBox: BoxComponent = {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n if (editor.readonly && ['uploading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const container = box.getContainer();\n const rootNode = query('<div class=\"lake-file\" />');\n rootNode.addClass(`lake-file-${value.status}`);\n appendContent(rootNode, box);\n container.empty();\n container.append(rootNode);\n if (!editor.readonly) {\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n const items = value.status === 'done' ? boxToolbarItems : boxToolbarItems.filter(item => item.name === 'remove');\n box.setToolbar(items);\n } else {\n rootNode.on('click', () => {\n window.open(value.url);\n });\n }\n },\n};\n","import { BoxComponent } from '../types/box';\nimport { query, safeTemplate } from '../utils';\n\nexport const emojiBox: BoxComponent = {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const rootNode = query(safeTemplate`\n <div class=\"lake-emoji\"><img src=\"${value.url}\" title=\"${value.title}\" /></div>\n `);\n box.getContainer().append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n};\n","import type { Editor } from '..';\nimport { getBox } from '../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 '..';\nimport { query } from '../utils';\nimport { getBox } from '../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 { Editor } from '..';\nimport { blockTagNames } from '../config/tag-names';\nimport { getElementRules } from '../config/element-rules';\nimport {\n wrapNodeList, changeTagName, fixNumberedList,\n removeBr, query, getBox, normalizeValue, uploadFile,\n} from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { HTMLParser } from '../parsers/html-parser';\nimport { TextParser } from '../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 removeBr(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.insertNode(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.insertFragment(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 '..';\nimport { query, getBox, safeTemplate } from '../utils';\nimport { Nodes } from '../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(safeTemplate`\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('undo', {\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('redo', {\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 '..';\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('heading', {\n selectedValues: appliedItems => {\n const currentItem = appliedItems.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 '..';\nimport { safeTemplate } from '../utils';\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: appliedItems => !!appliedItems.find(item => item.name === 'blockquote'),\n execute: (type?: string) => {\n if (type && typeList.indexOf(type) >= 0) {\n editor.selection.setBlocks(safeTemplate`<blockquote type=\"${type}\" />`);\n } else {\n editor.selection.setBlocks('<blockquote />');\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\nimport { query } from '../utils/query';\n\nfunction setParagraph(editor: Editor) {\n editor.selection.setBlocks('<p />');\n}\n\nfunction setNumberedList(editor: Editor) {\n editor.selection.setBlocks('<ol><li></li></ol>');\n}\n\nfunction setBulletedList(editor: Editor) {\n editor.selection.setBlocks('<ul><li></li></ul>');\n}\n\nfunction setChecklist(editor: Editor, value: boolean) {\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: appliedItems => {\n let currentValue;\n for (const item of appliedItems) {\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 type { Editor } from '..';\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: appliedItems => {\n let currentValue;\n for (const item of appliedItems) {\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 { Editor } from '..';\nimport { setBlockIndent } from '../utils';\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 setBlockIndent(block, type);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\n\nconst tagName = 'strong';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('bold', {\n isDisabled: appliedItems => !!appliedItems.find(item => item.node.isHeading),\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'i';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('italic', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'u';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('underline', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 's';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('strikethrough', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'sub';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('subscript', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'sup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('superscript', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'code';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('code', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontFamily', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontSize', {\n isDisabled: appliedItems => !!appliedItems.find(item => item.node.isHeading),\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\nimport { toHex } from '../utils';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontColor', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\nimport { toHex } from '../utils';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('highlight', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\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 '..';\nimport { Nodes } from '../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 appliedItems = editor.selection.getAppliedItems();\n for (const item of appliedItems) {\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', (tagetNode: Nodes) => {\n if (tagetNode.isInside && tagetNode.closestContainer().get(0) === editor.container.get(0)) {\n return;\n }\n const buttonNode = tagetNode.closest('button[name=\"formatPainter\"]');\n if (buttonNode.length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","import { createKeybindingsHandler } from 'tinykeys';\nimport { TranslationFunctions } from '../i18n/types';\nimport { icons } from '../icons';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { nodeAndView } from '../utils/node-and-view';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { i18nObject } from '../../src/i18n';\n\ntype LinkPopupConfig = {\n root: Nodes;\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n};\n\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private root: Nodes;\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.root = config.root;\n this.locale = config.locale || i18nObject('en-US');\n this.container = query(safeTemplate`\n <div class=\"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.getInputValue('url');\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.getInputValue('url');\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', createKeybindingsHandler({\n 'Enter': event => {\n event.preventDefault();\n button.node.emit('click');\n },\n }));\n this.container.find('input[name=\"title\"]').on('keydown', createKeybindingsHandler({\n 'Enter': event => {\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 public getInputValue(name: string): string {\n const inputElement = this.container.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n return nativeInputElement.value;\n }\n\n public setInputValue(name: string, value: string): void {\n const inputElement = this.container.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n nativeInputElement.value = value;\n }\n\n public save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.getInputValue('url');\n let title = this.getInputValue('title');\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 public updatePosition(): void {\n if (!this.linkNode) {\n return;\n }\n const position = nodeAndView(this.linkNode);\n if (position.left < 0 || position.right < 0 || position.top < 0 || position.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 // Returns a DOMRect object providing information about the size of an element and its position relative to the viewport.\n const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n // link.x + popup.width > window.width\n if (linkRect.x + this.container.width() > window.innerWidth) {\n // link.x + window.scrollX - (popup.width - link.width)\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n // link.y + link.height + popup.height > window.height\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n // link.y + window.scrollY - popup.height\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 render(): void {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n this.root.append(this.container);\n }\n\n public show(linkNode: Nodes): void {\n if (this.root.find('.lake-link-popup').length === 0) {\n this.render();\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.setInputValue('url', url);\n if (title !== url) {\n this.setInputValue('title', 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 }\n\n public hide(): void {\n this.linkNode = null;\n this.container.hide();\n }\n}\n","import { type Editor } from '..';\nimport { Nodes } from '../models/nodes';\nimport { LinkPopup } from '../ui/link-popup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const popup = new LinkPopup({\n root: editor.popupContainer,\n locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.history.save();\n },\n });\n editor.root.on('scroll', () => {\n popup.updatePosition();\n });\n editor.event.on('resize', () => {\n popup.updatePosition();\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (linkNode.length === 0) {\n popup.hide();\n return;\n }\n if (\n linkNode.isOutside ||\n linkNode.closestContainer().get(0) !== editor.container.get(0) ||\n linkNode.closest('lake-box').length > 0\n ) {\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const linkNode = editor.selection.insertLink(`<a href=\"\">${editor.locale.link.newLink()}</a>`);\n if (!linkNode) {\n return;\n }\n editor.history.save();\n popup.show(linkNode);\n },\n });\n};\n","import type { Editor } from '..';\nimport { query, getBox } from '../utils';\nimport { Fragment } from '../models/fragment';\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 { type Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\nimport { query, getBox } from '../utils';\nimport { Fragment } from '../models/fragment';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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","import type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { Point } from '../types/object';\nimport { Nodes } from '../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 '..';\nimport { query } from '../utils';\nimport { Nodes } from '../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 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 '..';\nimport { query } from '../utils';\nimport { Fragment } from '../models/fragment';\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 const fragment = new Fragment();\n fragment.append('<br /><br />');\n editor.selection.insertFragment(fragment);\n editor.history.save();\n return;\n }\n }\n editor.selection.insertNode(query('<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 '..';\nimport { query, getBox, appendDeepest, mergeNodes, setBlockIndent } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { setBlocks } from '../operations/set-blocks';\n\nfunction removeEmptyMarks(range: Range): void {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty && block.first().name !== 'br') {\n block.empty();\n appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\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) {\n if (block.isEmpty) {\n block.remove();\n }\n range.selectBoxEnd(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 removeEmptyMarks(range);\n const bookmark = editor.selection.insertBookmark();\n mergeNodes(prevBlock, block);\n editor.selection.toBookmark(bookmark);\n editor.selection.fixList();\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 (box.name === 'codeBlock' && (boxValue.code === undefined || boxValue.code === '')) {\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 editor.selection.fixList();\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 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.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 appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\n }\n editor.history.save();\n return;\n }\n if (prevNode.name === 'br' && prevNode.prev().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 setBlockIndent(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 '..';\nimport { mergeNodes } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { setBlocks } from '../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.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 editor.selection.toBookmark(bookmark);\n editor.selection.fixList();\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 editor.selection.fixList();\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 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 '..';\nimport { setBlockIndent } from '../utils';\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 event.preventDefault();\n const blocks = editor.selection.range.getBlocks();\n for (const block of blocks) {\n if (block.name !== 'p' || block.css('text-indent') === '2em') {\n setBlockIndent(block, 'increase');\n } else {\n block.css('text-indent', '2em');\n }\n }\n editor.history.save();\n });\n};\n","import type { Editor } from '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('arrow-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('arrow-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('arrow-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('arrow-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 '..';\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 './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { BoxComponent } from './types/box';\nimport { ToolbarItem } from './types/toolbar';\nimport { DropdownMenuItem } from './types/dropdown';\nimport { icons } from './icons';\nimport * as Utils from './utils';\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 { insertNode } from './operations/insert-node';\nimport { insertFragment} from './operations/insert-fragment';\nimport { deleteContents} from './operations/delete-contents';\nimport { setBlocks} from './operations/set-blocks';\nimport { splitBlock} from './operations/split-block';\nimport { splitMarks} from './operations/split-marks';\nimport { addMark} from './operations/add-mark';\nimport { removeMark} from './operations/remove-mark';\nimport { fixList} from './operations/fix-list';\nimport { insertLink } from './operations/insert-link';\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 { hrBox } from './boxes/hr';\nimport { codeBlockBox } from './boxes/code-block';\nimport { imageBox } from './boxes/image';\nimport { videoBox } from './boxes/video';\nimport { fileBox } from './boxes/file';\nimport { emojiBox } from './boxes/emoji';\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 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 from './plugins/hr';\nimport codeBlock from './plugins/code-block';\nimport image from './plugins/image';\nimport video from './plugins/video';\nimport file from './plugins/file';\nimport emoji from './plugins/emoji';\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';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(emojiBox);\n\nEditor.plugin.add(copy);\nEditor.plugin.add(cut);\nEditor.plugin.add(paste);\nEditor.plugin.add(drop);\nEditor.plugin.add(undo);\nEditor.plugin.add(redo);\nEditor.plugin.add(selectAll);\nEditor.plugin.add(heading);\nEditor.plugin.add(blockQuote);\nEditor.plugin.add(list);\nEditor.plugin.add(align);\nEditor.plugin.add(indent);\nEditor.plugin.add(bold);\nEditor.plugin.add(italic);\nEditor.plugin.add(underline);\nEditor.plugin.add(strikethrough);\nEditor.plugin.add(subscript);\nEditor.plugin.add(superscript);\nEditor.plugin.add(code);\nEditor.plugin.add(fontFamily);\nEditor.plugin.add(fontSize);\nEditor.plugin.add(fontColor);\nEditor.plugin.add(highlight);\nEditor.plugin.add(removeFormat);\nEditor.plugin.add(formatPainter);\nEditor.plugin.add(link);\nEditor.plugin.add(hr);\nEditor.plugin.add(codeBlock);\nEditor.plugin.add(image);\nEditor.plugin.add(video);\nEditor.plugin.add(file);\nEditor.plugin.add(emoji);\nEditor.plugin.add(markdown);\nEditor.plugin.add(enterKey);\nEditor.plugin.add(shiftEnterKey);\nEditor.plugin.add(backspaceKey);\nEditor.plugin.add(deleteKey);\nEditor.plugin.add(tabKey);\nEditor.plugin.add(arrowKeys);\nEditor.plugin.add(escapeKey);\n\nexport {\n Editor,\n Toolbar,\n ToolbarItem,\n DropdownMenuItem,\n BoxComponent,\n icons,\n Utils,\n Nodes,\n Fragment,\n Range,\n Box,\n HTMLParser,\n TextParser,\n insertBookmark,\n toBookmark,\n insertNode,\n insertFragment,\n deleteContents,\n setBlocks,\n splitBlock,\n splitMarks,\n addMark,\n removeMark,\n fixList,\n insertLink,\n insertBox,\n removeBox,\n Button,\n Dropdown,\n};\n"],"names":["file","copy","selectAll","undo","redo","heading","blockQuote","list","formatPainter","bold","italic","underline","strikethrough","superscript","subscript","code","removeFormat","fontColor","highlight","link","hr","codeBlock","image","video","emoji","initI18nObject","splitBlock","removeEmptyMarks","copyNestedMarks","tagName"],"mappings":"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","x_google_ignoreList":[82]}
|
|
1
|
+
{"version":3,"file":"lake.js","sources":["../src/elements/box.ts","../src/elements/bookmark.ts","../src/icons/index.ts","../src/utils/template.ts","../src/utils/encode.ts","../src/utils/safe-template.ts","../src/utils/camel-case.ts","../src/utils/in-string.ts","../src/utils/to-base64.ts","../src/utils/from-base64.ts","../src/utils/to-hex.ts","../src/utils/parse-style.ts","../src/utils/normalize-value.ts","../src/utils/denormalize-value.ts","../src/utils/modifier-text.ts","../src/utils/file-size.ts","../src/utils/get-css.ts","../src/utils/to-node-list.ts","../src/config/tag-names.ts","../src/utils/debug.ts","../src/models/nodes.ts","../src/utils/query.ts","../src/models/range.ts","../src/utils/split-nodes.ts","../src/utils/append-deepest.ts","../src/utils/remove-br.ts","../src/utils/merge-nodes.ts","../src/utils/get-deepest.ts","../src/utils/wrap-node-list.ts","../src/utils/remove-zws.ts","../src/utils/change-tag-name.ts","../src/utils/fix-numbered-list.ts","../src/utils/set-block-indent.ts","../src/utils/morph.ts","../src/utils/node-and-view.ts","../src/storage/box-instances.ts","../src/storage/boxes.ts","../src/storage/editors.ts","../src/ui/button.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/box-toolbar.ts","../src/models/box.ts","../src/utils/get-box.ts","../src/utils/request.ts","../src/utils/upload-file.ts","../src/utils/index.ts","../src/models/fragment.ts","../src/config/element-rules.ts","../src/parsers/html-parser.ts","../src/parsers/text-parser.ts","../src/operations/insert-node.ts","../src/operations/insert-bookmark.ts","../src/operations/to-bookmark.ts","../src/operations/fix-list.ts","../src/operations/delete-contents.ts","../src/operations/insert-fragment.ts","../src/operations/set-blocks.ts","../src/operations/split-block.ts","../src/operations/split-marks.ts","../src/operations/add-mark.ts","../src/operations/remove-mark.ts","../src/operations/insert-link.ts","../src/operations/insert-box.ts","../src/operations/remove-box.ts","../src/managers/selection.ts","../src/managers/command.ts","../src/managers/history.ts","../src/managers/keystroke.ts","../src/managers/box-manager.ts","../src/managers/plugin.ts","../src/editor.ts","../src/config/menu-items.ts","../src/config/toolbar-items.ts","../src/ui/toolbar.ts","../src/boxes/hr.ts","../src/boxes/code-block.ts","../node_modules/.pnpm/@rollup+plugin-typescript@11.1.6_rollup@4.18.0_tslib@2.6.3_typescript@5.4.5/node_modules/tslib/tslib.es6.js","../src/ui/box-resizer.ts","../src/boxes/image.ts","../src/boxes/video.ts","../src/boxes/file.ts","../src/boxes/emoji.ts","../src/boxes/equation.ts","../src/plugins/copy.ts","../src/plugins/cut.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/align.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","../src/ui/link-popup.ts","../src/plugins/link.ts","../src/plugins/hr.ts","../src/plugins/code-block.ts","../src/plugins/image.ts","../src/plugins/video.ts","../src/plugins/file.ts","../src/plugins/emoji.ts","../src/plugins/equation.ts","../src/plugins/special-character.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/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// - open.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// basic\nimport plus from './plus.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 file from './file.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 zoomIn from './zoom-in.svg';\nimport zoomOut from './zoom-out.svg';\nimport circleNotch from './circle-notch.svg';\nimport selectAll from './select-all.svg';\nimport undo from './undo.svg';\nimport redo from './redo.svg';\n// block format\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';\n// mark format\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';\n// items that can be inserted\nimport link from './link.svg';\nimport unlink from './unlink.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\nexport const icons: Map<string, string> = new Map([\n ['plus', plus],\n ['more', more],\n ['left', left],\n ['right', right],\n ['down', down],\n ['check', check],\n ['checkCircle', checkCircle],\n ['warningCircle', warningCircle],\n ['file', file],\n ['open', open],\n ['download', download],\n ['copy', copy],\n ['remove', remove],\n ['maximize', maximize],\n ['close', close],\n ['zoomIn', zoomIn],\n ['zoomOut', zoomOut],\n ['circleNotch', circleNotch],\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 ['link', link],\n ['unlink', unlink],\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]);\n","export 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 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","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\nexport function safeTemplate(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","export 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","// Search for a specified value within an string and return true or false (false if not found).\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","// Creates a Base64-encoded ASCII string from a string.\nexport function toBase64(value: 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) {\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","// 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// Converting colors 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 { KeyValue } from '../types/object';\nimport { toHex } from './to-hex';\n\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","// 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","// 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","// 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","// 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 { 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","export 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","/* eslint no-console: \"off\" */\n\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\nexport class Nodes {\n // Returns native nodes that includes element, text node.\n private nodeList: Node[];\n\n // Represents the number of nodes in nodeList.\n public 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 // Returns node ID at the first index.\n public get id(): number {\n const node = this.get(0);\n return node.lakeId;\n }\n\n // Returns node name at the first index.\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 // Returns a boolean value indicating whether the 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 // Returns a boolean value indicating whether the node is a text node.\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 // Returns a boolean value indicating whether the node is a block element.\n public get isBlock(): boolean {\n if (this.length === 0) {\n return false;\n }\n return blockTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a mark element.\n public get isMark(): boolean {\n if (this.length === 0) {\n return false;\n }\n return markTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a void element.\n public get isVoid(): boolean {\n if (this.length === 0) {\n return false;\n }\n return voidTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a heading element.\n public get isHeading(): boolean {\n if (this.length === 0) {\n return false;\n }\n return headingTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a list element.\n public get isList(): boolean {\n if (this.length === 0) {\n return false;\n }\n return listTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a table element.\n public get isTable(): boolean {\n if (this.length === 0) {\n return false;\n }\n return tableTagNames.has(this.name);\n }\n\n // Returns a boolean value indicating whether the node is a bookmark element.\n public get isBookmark(): boolean {\n return this.name === 'lake-bookmark';\n }\n\n // Returns a boolean value indicating whether the node is a box element.\n public get isBox(): boolean {\n return this.name === 'lake-box';\n }\n\n // Returns a boolean value indicating whether the node is a inline box element.\n public get isInlineBox(): boolean {\n return this.isBox && this.attr('type') === 'inline';\n }\n\n // Returns a boolean value indicating whether the node is a block box element.\n public get isBlockBox(): boolean {\n return this.isBox && this.attr('type') === 'block';\n }\n\n // Returns a boolean value indicating whether the element is a root element of contenteditable area.\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 // Returns a boolean value indicating whether the node is ouside the container.\n public get isOutside(): boolean {\n return this.closest('[contenteditable=\"true\"]').length === 0;\n }\n\n // Returns a boolean value indicating whether the node is inside the container.\n public get isInside(): boolean {\n return !this.isOutside && !this.isContainer;\n }\n\n // Returns a boolean value indicating whether the node is a top element inside the container.\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 // Returns a boolean value indicating whether the node is editable or the node is a container.\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 // Returns a boolean value indicating whether the node is indivisible.\n public get isIndivisible(): boolean {\n return this.isContainer || this.isTable;\n }\n\n // Returns a boolean value indicating whether the 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 boolean value indicating whether the node and the target node are siblings.\n public isSibling(target: Nodes): boolean {\n if (this.length === 0) {\n return false;\n }\n const parent = this.get(0).parentNode as HTMLElement;\n return parent && parent === target.parent().get(0);\n }\n\n // Gets a native node at the specified index.\n public get(index: number): Node {\n return this.nodeList[index];\n }\n\n // Gets all native nodes\n public getAll(): Node[] {\n return this.nodeList;\n }\n\n // Reduces the nodes of a Nodes object to the one at the specified index.\n public eq(index: number): Nodes {\n const node = this.get(index);\n return new Nodes(node);\n }\n\n // Iterates over a Nodes object, executing a function for each node.\n public each(callback: (element: 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 // Iterates over a Nodes object, executing a function 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 // Reverses the nodes of a Nodes object.\n public reverse(): Nodes {\n const nodes = this.getAll().reverse();\n return new Nodes(nodes);\n }\n\n // Tests whether the element 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 the descendants of the first element which are selected by the specified CSS selector.\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)\n // until it finds a 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() {\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 root element which has contenteditable=\"true\" attribute.\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 && parent.isElement) {\n if (['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 element.\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 element.\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 a path of the first element.\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 of child nodes of the first element.\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 node generator that iterates over the descendants of the first element.\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 // Attaches an event listener for the elements.\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 handlers that were attached 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 the Nodes object 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 // Gets all event listeners attached to the Nodes object.\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 element, 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 element.\n public blur(): this {\n const element = this.get(0) as HTMLElement;\n element.blur();\n return this;\n }\n\n // Returns a duplicate of the first node.\n public clone(deep: boolean = false): Nodes {\n const node = this.get(0);\n return new Nodes(node.cloneNode(deep));\n }\n\n public hasAttr(attributeName: string): boolean {\n const element = this.get(0) as Element;\n return element.hasAttribute(attributeName);\n }\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 public removeAttr(attributeName: string): this {\n return this.eachElement(element => {\n element.removeAttribute(attributeName);\n });\n }\n\n public hasClass(className: string): boolean {\n const element = this.get(0) as Element;\n return inString(element.className, className, ' ');\n }\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 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 public computedCSS(propertyName: string): string {\n const element = this.get(0) as Element;\n return getCSS(element, propertyName);\n }\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 // Returns the width of of the first element.\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 element, which does not include padding.\n public innerWidth() {\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 element.\n public height(): number {\n const element = this.get(0) as HTMLElement;\n return element.offsetHeight;\n }\n\n public show(displayType: string = 'block'): this {\n this.css('display', displayType);\n return this;\n }\n\n public hide(): this {\n this.css('display', 'none');\n return this;\n }\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 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 public outerHTML(): string {\n const element = this.get(0) as Element;\n return element.outerHTML;\n }\n\n // Removes all child nodes of each element.\n public empty(): this {\n this.html('');\n return this;\n }\n\n // Inserts the specified content to the beginning of the first element.\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 to the end of the first element.\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 provided 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 each node from the DOM.\n // keepChildren parameter:\n // A boolean value; true only removes each node and keeps all descended nodes; false removes the descendants; if omitted, it defaults to false.\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 // Breaks the first text node into two nodes at the specified offset, keeping both nodes in the tree as siblings.\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 of the first node.\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 of the first node.\n public info(): void {\n debug(this.toString());\n }\n}\n","import { toNodeList } from './to-node-list';\nimport { Nodes } from '../models/nodes';\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","import { NativeRange } from '../types/native';\nimport { debug } from '../utils/debug';\nimport { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\n// The Range class represents a fragment of a document that can contain nodes and parts of text nodes.\nexport class Range {\n // native range\n private range: NativeRange;\n\n constructor(range?: NativeRange) {\n this.range = range ?? document.createRange();\n }\n\n // Returns a node within which the range starts.\n public get startNode(): Nodes {\n return new Nodes(this.range.startContainer);\n }\n\n // Returns a number representing where in the startNode the range starts.\n public get startOffset(): number {\n return this.range.startOffset;\n }\n\n // Returns a node within which the range ends.\n public get endNode(): Nodes {\n return new Nodes(this.range.endContainer);\n }\n\n // Returns a number representing where in the endNode the range ends.\n public get endOffset(): number {\n return this.range.endOffset;\n }\n\n // Returns the closest node that contains both the startNode and endNode.\n public get commonAncestor(): Nodes {\n return new Nodes(this.range.commonAncestorContainer);\n }\n\n // Returns 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 // Returns a boolean value indicating whether the range's start point is in the box.\n public get isBox(): boolean {\n const boxNode = this.commonAncestor.closest('lake-box');\n return boxNode.length > 0;\n }\n\n // Returns a boolean value indicating whether the range's common ancestor node is in the start strip of the 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 // Returns a boolean value indicating whether the range's common ancestor node is in the center of the 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 // Returns a boolean value indicating whether the range's common ancestor node is in the end strip of the 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 // Returns a boolean value indicating whether the range's common ancestor node is inside the container of the 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 // Returns 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 // Gets a native 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: rect.y,\n width: width > 0 ? width : 1,\n height: height > 0 ? height : 1,\n });\n }\n\n // Returns −1 if the point is before the range, 0 if the point is in the range, and 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 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 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 // Indicates whether a 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 before a node.\n public setStartBefore(node: Nodes): void {\n this.range.setStartBefore(node.get(0));\n }\n\n // Sets the start position of the range after a 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 before a node.\n public setEndBefore(node: Nodes): void {\n this.range.setEndBefore(node.get(0));\n }\n\n // Sets the end position of the range after a node.\n public setEndAfter(node: Nodes): void {\n this.range.setEndAfter(node.get(0));\n }\n\n // Collapses the range to the start of it.\n public collapseToStart(): void {\n this.range.collapse(true);\n }\n\n // Collapses the range to the end of it.\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 // Sets the range to the center position of the box.\n public selectBox(boxNode: Nodes): void {\n const boxContainer = boxNode.find('.lake-box-container');\n if (boxContainer.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n // Sets the range to the start position of the box.\n public selectBoxStart(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n // Sets the range to the start position of the box.\n public selectBoxEnd(boxNode: Nodes): void {\n const boxStrip = boxNode.find('.lake-box-strip');\n if (boxStrip.length === 0) {\n throw new Error(`The box cannot be selected because the box \"${boxNode.attr('name')}\" (id=${boxNode.id}) has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n // Collapses the range and sets the range to 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 and sets the range to 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 }\n\n // Reduces the boundary of the range.\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 points of the range for the box.\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 beginning or end position of the range for table.\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 point of the range for the block.\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 points of the range.\n public adjust(): void {\n this.adjustBox();\n this.adjustTable();\n this.adjustBlock();\n }\n\n // Returns the previous node of the beginning point 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 next node of the beginning point 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 target boxes relating to 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 target blocks relating to 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 target marks and text nodes relating to the range.\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 // Returns the text of the start part of the closest block divided into two parts by the start point of the range.\n // \"<p>one<anchor />two<focus />three</p>\" returns \"three\".\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 of the end part of the closest block divided into two parts by the end point of the range.\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 range object with boundary points identical to the cloned range.\n public clone(): Range {\n return new Range(this.range.cloneRange());\n }\n\n // Returns a document fragment copying the nodes included in the range.\n public cloneContents(): DocumentFragment {\n return this.range.cloneContents();\n }\n\n // Prints information of the range.\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 { 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// Appends a node to the deepest element of the specified element.\nexport function appendDeepest(element: Nodes, node: Nodes): void {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n while (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isText || child.isBox) {\n break;\n }\n if (child.isElement && child.children().length === 1 && firstChild.isBookmark) {\n child.prepend(node);\n break;\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n child.append(node);\n break;\n }\n child = firstChild;\n }\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes The <br /> element in the specified block which is empty.\nexport function removeBr(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 { Range } from '../models/range';\nimport { appendDeepest } from './append-deepest';\nimport { query } from './query';\nimport { removeBr } from './remove-br';\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 removeBr(node);\n removeBr(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendDeepest(node, query('<br />'));\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// Returns the deepest element of the specified element.\nexport function getDeepest(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 { getDeepest } from './get-deepest';\nimport { query } from './query';\n\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 = getDeepest(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes Zero-width spaces that are dependent on some other 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 type { Nodes } from '../models/nodes';\nimport { query } from './query';\nimport { safeTemplate } from './safe-template';\n\nexport function changeTagName(element: Nodes, newTagName: string): Nodes {\n const nativeElement = element.get(0) as Element;\n const newElement = query(safeTemplate`<${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 { Nodes } from '../models/nodes';\n\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 type { Nodes } from '../models/nodes';\nimport { fixNumberedList } from './fix-numbered-list';\n\nexport function setBlockIndent(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","/**\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) {\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) {\n return !ctx.deadIds.has(id);\n}\n\nfunction idIsWithinNode(ctx: KeyValue, id: string, targetNode: Node) {\n const idSet = ctx.idMap.get(targetNode) || EMPTY_SET;\n return idSet.has(id);\n}\n\nfunction removeIdsFromConsideration(ctx: KeyValue, node: Node) {\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) {\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) {\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 { Nodes } from '../models/nodes';\n\ntype NodePosition = {\n left: number;\n right: number;\n top: number;\n bottom: number;\n};\n\n// Returns an object that indicates the specified node's position relative to the viewport.\nexport function nodeAndView(node: Nodes): NodePosition {\n const nativeNode = node.get(0) as Element;\n const rect = nativeNode.getBoundingClientRect();\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 const viewport = node.closestScroller();\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 const position: NodePosition = {\n left,\n right: viewportWidth - right,\n top,\n bottom: viewportHeight - bottom,\n };\n return position;\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 type { BoxComponent } from '../types/box';\n\nexport const boxes: Map<string, BoxComponent> = new Map();\n","import type { Editor } from '..';\n\nexport const editors: Map<number, Editor> = new Map();\n","import { safeTemplate } from '../utils/safe-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\nexport class Button {\n private config: ButtonConfig;\n\n private root: Nodes;\n\n public node: Nodes;\n\n constructor(config: ButtonConfig) {\n this.config = config;\n this.root = config.root;\n this.node = query(safeTemplate`\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 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","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: 'Align 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 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: 'Equation',\n removeColor: 'Remove color',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: 'Link title',\n copy: 'Copy link to clipboard',\n open: 'Open link in new tab',\n save: 'Save',\n unlink: 'Remove link',\n },\n image: {\n view: 'Full screen',\n remove: 'Delete',\n previous: 'Previous',\n next: 'Next',\n close: 'Close (Esc)',\n loadingError: 'The image cannot be loaded',\n zoomOut: 'Zoom out',\n zoomIn: 'Zoom in',\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 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 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 link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n image: {\n view: '查看大图',\n remove: '删除',\n previous: '上一张',\n next: '下一张',\n close: '关闭 (Esc)',\n loadingError: '图片加载失败',\n zoomOut: '缩小',\n zoomIn: '放大',\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 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 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 link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンク文字',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '確認',\n unlink: 'リンクを削除',\n },\n image: {\n view: '大きな画像を見る',\n remove: '削除',\n previous: '前の画像',\n next: '次の画像',\n close: '閉じる (Esc)',\n loadingError: '画像を読み込めません',\n zoomOut: '縮小',\n zoomIn: '拡大',\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 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 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 link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '확인',\n unlink: '링크 제거',\n },\n image: {\n view: '큰 이미지 보기',\n remove: '삭제',\n previous: '이전 이미지',\n next: '다음 이미지',\n close: '닫기 (Esc)',\n loadingError: '이미지를 로드할 수 없습니다',\n zoomOut: '축소',\n zoomIn: '확대',\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 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 { DropdownItem, DropdownMenuItem } 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 { template } from '../utils/template';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../../src/i18n';\n\ntype DropdownConfig = DropdownItem & {\n root: Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n placement?: 'top' | 'bottom';\n onSelect: (value: string) => void;\n}\n\nexport class Dropdown {\n private config: DropdownConfig;\n\n private root: Nodes;\n\n private locale: TranslationFunctions;\n\n public 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 const placement = config.placement || 'bottom';\n this.node = query(safeTemplate`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\" placement=\"${placement}\">\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 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 = template`\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 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 documentClickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n const menuNode = this.node.find('.lake-dropdown-menu');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n menuNode.hide();\n document.removeEventListener('click', this.documentClickListener);\n };\n\n private showMenu(): void {\n const config = this.config;\n const dropdownNode = this.node;\n const menuNode = dropdownNode.find('.lake-dropdown-menu');\n if (dropdownNode.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(dropdownNode);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n menuNode.find('li').each(node => {\n const listNode = query(node);\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 (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n const dropdownNativeNode = dropdownNode.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 if (rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow)) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n menuNode.css('visibility', '');\n document.addEventListener('click', this.documentClickListener);\n }\n\n private bindEvents(): void {\n const config = this.config;\n const dropdownNode = this.node;\n const titleNode = dropdownNode.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n const menuNode = dropdownNode.find('.lake-dropdown-menu');\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (dropdownNode.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 (dropdownNode.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 (dropdownNode.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 (dropdownNode.attr('disabled')) {\n return;\n }\n const value = dropdownNode.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 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(dropdownNode, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n dropdownNode.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n menuNode.hide();\n document.removeEventListener('click', this.documentClickListener);\n });\n }\n\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const dropdownNode = this.node;\n const titleNode = dropdownNode.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 const menuNode = query('<ul class=\"lake-dropdown-menu\" />');\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 Dropdown.setValue(dropdownNode, [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.apppendMenuItems(menuNode);\n dropdownNode.append(titleNode);\n dropdownNode.append(menuNode);\n this.root.append(dropdownNode);\n this.bindEvents();\n }\n\n public unmount(): void {\n this.node.remove();\n document.removeEventListener('click', this.documentClickListener);\n }\n}\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n BoxToolbarButtonItem, BoxToolbarDropdownItem,\n BoxToolbarItem, BoxToolbarConfig, BoxToolbarPlacement,\n} from '../types/box-toolbar';\nimport { query } from '../utils/query';\nimport { nodeAndView } from '../utils/node-and-view';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Button } from './button';\nimport { Dropdown } from './dropdown';\nimport { i18nObject } from '../../src/i18n';\n\nexport class BoxToolbar {\n\n private root: Nodes;\n\n private box: Box;\n\n private items: ('|' | BoxToolbarItem)[];\n\n private locale: TranslationFunctions;\n\n private placement: BoxToolbarPlacement;\n\n private buttonItemList: BoxToolbarButtonItem[] = [];\n\n private dropdownItemList: BoxToolbarDropdownItem[] = [];\n\n public container: Nodes;\n\n constructor(config: BoxToolbarConfig) {\n this.root = query(config.root);\n this.box = config.box;\n this.items = config.items;\n this.locale = config.locale || i18nObject('en-US');\n this.placement = config.placement || 'top';\n this.container = query('<div class=\"lake-box-toolbar\" />');\n this.root.addClass('lake-custom-properties');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendButton(item: BoxToolbarButtonItem): 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(this.locale),\n tabIndex: -1,\n onClick: () => {\n item.onClick(this.box, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(item: BoxToolbarDropdownItem): void {\n const dropdown = new Dropdown({\n root: this.container,\n locale: this.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 tabIndex: -1,\n placement: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n item.onSelect(this.box, value);\n },\n });\n dropdown.render();\n }\n\n public updatePosition(): void {\n const boxNode = this.box.node;\n const boxNativeNode = boxNode.get(0) as HTMLElement;\n const boxRect = boxNativeNode.getBoundingClientRect();\n const position = nodeAndView(boxNode);\n if (position.top < 0 || position.bottom + boxRect.height < 0) {\n this.container.hide();\n return;\n }\n this.container.show('flex');\n const boxX = boxRect.x + window.scrollX;\n const boxY = boxRect.y + window.scrollY;\n const left = (boxX + boxRect.width / 2 - this.container.width() / 2).toFixed(1);\n const top = (boxY - this.container.height() - 6).toFixed(1);\n this.container.css({\n left: `${left}px`,\n top: `${top}px`,\n });\n }\n\n // Renders a toolbar for the specified box.\n public render(): void {\n this.root.append(this.container);\n for (const item of this.items) {\n if (item === '|') {\n this.appendDivider();\n } else if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendButton(item);\n } else if (item.type === 'dropdown') {\n this.dropdownItemList.push(item);\n this.appendDropdown(item);\n }\n }\n this.updatePosition();\n }\n\n public unmount(): void {\n this.container.remove();\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport type { Editor } from '../editor';\nimport { BoxType, BoxValue } from '../types/box';\nimport { BoxToolbarItem } from '../types/box-toolbar';\nimport { boxes } from '../storage/boxes';\nimport { editors } from '../storage/editors';\nimport { debug } from '../utils/debug';\nimport { safeTemplate } from '../utils/safe-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 { BoxToolbar } from '../ui/box-toolbar';\n\nconst framework = safeTemplate`\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\nexport class Box {\n // <lake-box> element\n public node: Nodes;\n\n public event: EventEmitter = new EventEmitter();\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(`The box \"${node}\" has not been defined yet.`);\n }\n const type = encode(component.type);\n const name = encode(component.name);\n this.node = query(safeTemplate`<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(`The 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 // Adds the framework of the box.\n private addFramework(): void {\n let container = this.getContainer();\n if (container.length === 0) {\n this.node.html(framework);\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(`The 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 // Updates part of the value of the box.\n public updateValue(valueKey: string, valueValue: string): void;\n\n public updateValue(valueKey: BoxValue): void;\n\n public updateValue(valueKey: any, valueValue?: any): void {\n const value = this.value;\n if (typeof valueKey === 'string') {\n value[valueKey] = valueValue;\n } else {\n for (const key of Object.keys(valueKey)) {\n value[key] = valueKey[key];\n }\n }\n this.value = value;\n }\n\n // Returns an instance of the editor that includes the box.\n public getEditor(): Editor | undefined {\n const container = this.node.closest('div[contenteditable]');\n return container.length > 0 ? editors.get(container.id) : undefined;\n }\n\n // Returns the container node of the box.\n public getContainer(): Nodes {\n return this.node.find('.lake-box-container');\n }\n\n // Sets a popup toolbar for the box.\n public setToolbar(items: ('|' | BoxToolbarItem)[]): void {\n const editor = this.getEditor();\n let toolbar: BoxToolbar | null = null;\n const scrollListener = () => {\n if (toolbar) {\n toolbar.updatePosition();\n }\n };\n this.event.on('focus', () => {\n toolbar = new BoxToolbar({\n root: editor ? editor.popupContainer : query(document.body),\n box: this,\n items,\n locale: editor ? editor.locale : undefined,\n });\n toolbar.render();\n if (editor) {\n editor.root.on('scroll', scrollListener);\n }\n });\n this.event.on('blur', () => {\n if (toolbar) {\n toolbar.unmount();\n toolbar = null;\n }\n if (editor) {\n editor.root.off('scroll', scrollListener);\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.addFramework();\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(`The box \"${this.name}\" (id: ${this.node.id}) rendered`);\n }\n\n // Destroys a rendered 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(`The box \"${this.name}\" (id: ${this.node.id}) unmounted`);\n }\n\n // Returns a HTML string of 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","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","/**\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) {\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) {\n const text = xhr.responseText || xhr.response;\n if (!text) {\n return text;\n }\n\n try {\n return JSON.parse(text);\n } catch (e) {\n return text;\n }\n}\n\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 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 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\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","// String\nexport * from './template';\nexport * from './safe-template';\nexport * from './camel-case';\nexport * from './in-string';\nexport * from './encode';\nexport * from './to-base64';\nexport * from './from-base64';\nexport * from './to-hex';\nexport * from './parse-style';\nexport * from './normalize-value';\nexport * from './denormalize-value';\nexport * from './modifier-text';\nexport * from './file-size';\n\n// Native DOM\nexport * from './get-css';\nexport * from './to-node-list';\n\n// Nodes\nexport * from './query';\nexport * from './split-nodes';\nexport * from './merge-nodes';\nexport * from './wrap-node-list';\nexport * from './get-deepest';\nexport * from './append-deepest';\nexport * from './remove-zws';\nexport * from './change-tag-name';\nexport * from './fix-numbered-list';\nexport * from './remove-br';\nexport * from './set-block-indent';\nexport * from './morph';\nexport * from './node-and-view';\n\n// Box\nexport * from './get-box';\n\n// Network\nexport * from './request';\nexport * from './upload-file';\n\n// Other\nexport * from './debug';\n","import { query } from '../utils/query';\nimport { Nodes } from './nodes';\n\nexport class Fragment {\n // native document fragment\n private fragment: DocumentFragment;\n\n constructor(fragment?: DocumentFragment) {\n this.fragment = fragment ?? document.createDocumentFragment();\n }\n\n // Gets a native fragment.\n public get(): DocumentFragment {\n return this.fragment;\n }\n\n // Returns the descendants of the fragment which are selected by 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 node as the last child.\n public append(node: string | Node | Nodes): void {\n query(node).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 { getElementRules } from '../config/element-rules';\nimport { parseStyle, encode } from '../utils';\nimport { Nodes } from '../models/nodes';\n\nexport class HTMLParser {\n\n private rules: any;\n\n private 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 HTML string and returns the resulting body element.\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 the result as HTML format.\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 document fragment.\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';\nimport { HTMLParser } from './html-parser';\n\nexport class TextParser {\n\n private content: string;\n\n constructor(content: string) {\n this.content = content;\n }\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 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\n// Inserts a node into the specified range.\nexport function insertNode(range: Range, node: Node | Nodes): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n node = query(node);\n const nativeNode = node.get(0);\n const nativeRange = range.get();\n nativeRange.insertNode(nativeNode);\n nativeRange.setEndAfter(nativeNode);\n nativeRange.collapse(false);\n}\n","import { query } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertNode } from './insert-node';\n\n// Either the method inserts a bookmark into the current position of the collapsed range\n// or the method inserts a pair of bookmarks into the beginning and the 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 { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nfunction removeAndNormalizeNode(node: Nodes, range?: Range) {\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// Sets the specified range to the 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 { fixNumberedList } from '../utils';\nimport { Range } from '../models/range';\n\nexport function fixList(range: Range): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n const blocks = range.getBlocks();\n fixNumberedList(blocks);\n}\n","import { query } from '../utils/query';\nimport { appendDeepest } from '../utils/append-deepest';\nimport { mergeNodes } from '../utils/merge-nodes';\nimport { Range } from '../models/range';\nimport { fixList } from './fix-list';\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 appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\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 toBookmark(range, bookmark);\n fixList(range);\n}\n","import { removeBr } from '../utils/remove-br';\nimport { Range } from '../models/range';\nimport { Fragment } from '../models/fragment';\nimport { deleteContents } from './delete-contents';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\n\n// Inserts a DocumentFragment object into the specified range.\nexport function insertFragment(range: Range, fragment: DocumentFragment | Fragment): void {\n if (fragment instanceof Fragment) {\n fragment = fragment.get();\n }\n if (range.commonAncestor.isOutside) {\n return;\n }\n if (range.isCollapsed) {\n range.adjustBox();\n } else {\n deleteContents(range);\n }\n const block = range.startNode.closestBlock();\n removeBr(block);\n const bookmark = insertBookmark(range);\n bookmark.focus.before(fragment);\n toBookmark(range, bookmark);\n range.adjustBlock();\n}\n","import { KeyValue } from '../types/object';\nimport { query, getDeepest, wrapNodeList, appendDeepest } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './to-bookmark';\nimport { fixList } from './fix-list';\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 relating to 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 = getDeepest(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 fixList(range);\n return;\n }\n // no block\n const bookmark = insertBookmark(range);\n const nonBlockNodes = getTopNonBlockNodes(range);\n const block = wrapNodeList(nonBlockNodes, valueNode);\n toBookmark(range, bookmark);\n fixList(range);\n if (block.isEmpty) {\n appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\n }\n}\n","import { TwoParts } from '../types/object';\nimport { query, splitNodes, appendDeepest } from '../utils';\nimport { Range } from '../models/range';\nimport { fixList } from './fix-list';\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 appendDeepest(start, query('<br />'));\n }\n if (end) {\n if (end.isEmpty) {\n appendDeepest(end, query('<br />'));\n range.shrinkAfter(end);\n } else {\n range.shrinkBefore(end);\n }\n }\n fixList(range);\n return {\n start,\n end,\n };\n}\n","import { TwoParts, ThreeParts } from '../types/object';\nimport { splitNodes } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\n// Removes empty marks that contain no content.\nfunction 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\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, query, getBox, appendDeepest, removeBr } from '../utils';\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 { insertNode } from './insert-node';\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 an element copied from each last child of the descendants of the specified node.\nfunction copyNestedMarks(node: Nodes): Nodes | null {\n if (!node.isMark) {\n return null;\n }\n let newMark = node.clone();\n let child = node.last();\n while (child.length > 0) {\n if (child.isMark) {\n const newChild = child.clone();\n newMark.append(newChild);\n newMark = newChild;\n }\n child = child.last();\n }\n return newMark;\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 removeBr(block);\n // https://en.wikipedia.org/wiki/Zero-width_space\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const parts = splitMarks(range);\n if (parts.start) {\n const newMark = copyNestedMarks(parts.start);\n if (newMark) {\n if (newMark.name === tagName) {\n newMark.css(cssProperties);\n valueNode = newMark;\n } else {\n appendDeepest(newMark, zeroWidthSpace);\n valueNode.append(newMark);\n }\n }\n }\n if (valueNode.text() === '') {\n valueNode.append(zeroWidthSpace);\n }\n insertNode(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 { appendDeepest, query, removeZWS } from '../utils';\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// Removes empty marks that contain no content.\nfunction 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\n// Returns an element copied from each last child of the descendants of the specified node.\nfunction copyNestedMarks(node: Nodes, tagName?: string): Nodes | null {\n if (!node.isMark || !tagName) {\n return null;\n }\n let newMark = node.clone();\n let child = node.last();\n while (child.length > 0) {\n if (child.isMark && child.name !== tagName) {\n const newChild = child.clone();\n newMark.append(newChild);\n newMark = newChild;\n }\n child = child.last();\n }\n if (newMark.name === tagName) {\n if (newMark.first().length > 0) {\n newMark = newMark.first();\n } else {\n return null;\n }\n }\n return newMark;\n}\n\n// Removes the specified marks from 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 = copyNestedMarks(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 appendDeepest(newMark, 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 { query } from '../utils/query';\nimport { removeBr } from '../utils/remove-br';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { insertNode } from './insert-node';\nimport { splitMarks } from './split-marks';\nimport { insertBookmark } from './insert-bookmark';\nimport { toBookmark } from './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 const block = range.startNode.closestBlock();\n removeBr(block);\n insertNode(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 { BoxValue } from '../types/box';\nimport { getBox } from '../utils/get-box';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { insertFragment } from './insert-fragment';\nimport { splitBlock } from './split-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 const fragment = document.createDocumentFragment();\n fragment.appendChild(box.node.get(0));\n // inline box\n if (box.type === 'inline') {\n insertFragment(range, fragment);\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 // block box\n const parts = splitBlock(range);\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 insertFragment(range, fragment);\n box.render();\n range.selectBoxEnd(box.node);\n if (parts.start && parts.start.isEmpty) {\n parts.start.remove();\n }\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 { appendDeepest, query, getBox } from '../utils';\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\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 appendDeepest(parentNode, query('<br />'));\n range.shrinkAfter(parentNode);\n }\n return box;\n}\n","import { NativeSelection } from '../types/native';\nimport { KeyValue, AppliedItem } from '../types/object';\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 { insertNode } from '../operations/insert-node';\nimport { insertFragment } from '../operations/insert-fragment';\nimport { deleteContents } from '../operations/delete-contents';\nimport { setBlocks } from '../operations/set-blocks';\nimport { splitBlock } from '../operations/split-block';\nimport { splitMarks } from '../operations/split-marks';\nimport { addMark } from '../operations/add-mark';\nimport { removeMark } from '../operations/remove-mark';\nimport { fixList } from '../operations/fix-list';\nimport { insertLink } from '../operations/insert-link';\nimport { insertBox } from '../operations/insert-box';\nimport { removeBox } from '../operations/remove-box';\n\n// Returns the attributes of the element as an key-value object.\nfunction getAttributes(node: Nodes): KeyValue {\n const nativeNode = node.get(0) as Element;\n const attributes: KeyValue = {};\n if (nativeNode.hasAttributes()) {\n for (const attr of nativeNode.attributes) {\n attributes[attr.name] = attr.value;\n }\n }\n return attributes;\n}\n\nfunction pushAncestralNodes(appliedItems: AppliedItem[], 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.isInside) {\n break;\n }\n appliedItems.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 pushNextNestedNodes(appliedItems: AppliedItem[], 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 appliedItems.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 caret.\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.getRangeFromNativeSelection();\n }\n\n // Returns the current selected range from the native selection.\n private getRangeFromNativeSelection(): 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 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.getRangeFromNativeSelection();\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 getAppliedItems(): AppliedItem[] {\n const appliedItems: AppliedItem[] = [];\n pushAncestralNodes(appliedItems, this.range);\n pushNextNestedNodes(appliedItems, this.range);\n return appliedItems;\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 insertNode(node: Parameters<typeof insertNode>[1]): ReturnType<typeof insertNode> {\n return insertNode(this.range, node);\n }\n\n public insertFragment(fragment: Parameters<typeof insertFragment>[1]): ReturnType<typeof insertFragment> {\n return insertFragment(this.range, fragment);\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 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 public fixList(): ReturnType<typeof fixList> {\n return fixList(this.range);\n }\n\n public insertLink(value: Parameters<typeof insertLink>[1]): ReturnType<typeof insertLink> {\n return insertLink(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 }\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(`The box \"${boxName}\" cannot be inserted outside 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 { AppliedItem } from '../types/object';\nimport { debug } from '../utils/debug';\nimport { Selection } from './selection';\n\ntype CommmandItem = {\n isDisabled?: (AppliedItems: AppliedItem[]) => boolean;\n isSelected?: (appliedItems: AppliedItem[]) => boolean;\n selectedValues?: (AppliedItems: AppliedItem[]) => 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) {\n this.commandMap.set(name, commandItem);\n }\n\n public delete(name: string) {\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 appliedItems = this.selection.getAppliedItems();\n return commandItem.isDisabled(appliedItems);\n }\n\n public isSelected(name: string): boolean {\n const commandItem = this.getItem(name);\n if (!commandItem.isSelected) {\n return false;\n }\n const appliedItems = this.selection.getAppliedItems();\n return commandItem.isSelected(appliedItems);\n }\n\n public selectedValues(name: string): string[] {\n const commandItem = this.getItem(name);\n if (!commandItem.selectedValues) {\n return [];\n }\n const appliedItems = this.selection.getAppliedItems();\n return commandItem.selectedValues(appliedItems);\n }\n\n public execute(name: string, ...data: any[]): void {\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\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// Example:\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 (range.commonAncestor.isOutside) {\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\nconst aliasMap = new Map([\n ['arrow-left', 'left'],\n ['arrow-right', 'right'],\n ['arrow-up', 'up'],\n ['arrow-down', 'down'],\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 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 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 private normalizeType(type: string) {\n type = aliasMap.get(type) ?? type;\n return type;\n }\n\n // Sets a keydown shortcut.\n public setKeydown(type: string, listener: EventListener) {\n type = this.normalizeType(type);\n this.keydownEventList.push({\n type,\n listener,\n });\n }\n\n // Sets a keyup shortcut.\n public setKeyup(type: string, listener: EventListener) {\n type = this.normalizeType(type);\n this.keyupEventList.push({\n type,\n listener,\n });\n }\n\n // Executes the keydown shortcuts.\n public keydown(type: string) {\n type = this.normalizeType(type);\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) {\n type = this.normalizeType(type);\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) {\n boxes.set(component.name, component);\n }\n\n public remove(name: string) {\n boxes.delete(name);\n }\n\n public getNames(): string[] {\n return Array.from(boxes.keys());\n }\n}\n","import type { Editor } from '../editor';\n\ntype PluginFunction = (editor: Editor) => void;\n\nexport class Plugin {\n private pluginList: PluginFunction[] = [];\n\n public add(plugin: PluginFunction) {\n this.pluginList.push(plugin);\n }\n\n public loadAll(editor: Editor) {\n for (const plugin of this.pluginList) {\n plugin(editor);\n }\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/object';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue, normalizeValue, query, getBox, nodeAndView, debug } from './utils';\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};\n\nexport class Editor {\n private unsavedInputData: string = '';\n\n private unsavedInputCount: number = 0;\n\n private state: SelectionState = {\n appliedItems: [],\n disabledNameMap: new Map(),\n selectedNameMap: new Map(),\n selectedValuesMap: new Map(),\n };\n\n public static version: string = version;\n\n public static box = new BoxManager();\n\n public static plugin = new Plugin();\n\n public root: Nodes;\n\n public toolbar: Toolbar | undefined;\n\n public config: Config;\n\n public containerWrapper: Nodes;\n\n public container: Nodes;\n\n public overlayContainer: Nodes;\n\n public popupContainer: Nodes;\n\n public isComposing: boolean = false;\n\n public readonly: boolean;\n\n public event: EventEmitter = new EventEmitter();\n\n public selection: Selection;\n\n public command: Command;\n\n public history: History;\n\n public keystroke: Keystroke;\n\n public box: BoxManager = Editor.box;\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.popupContainer = query('<div class=\"lake-popup lake-custom-properties\" />');\n this.readonly = this.config.readonly;\n\n this.root.addClass('lake-custom-properties');\n this.container.attr({\n contenteditable: this.readonly ? 'false' : 'true',\n spellcheck: this.config.spellcheck ? 'true' : 'false',\n tabindex: this.config.tabIndex.toString(),\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.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.range;\n if (range.commonAncestor.closestContainer().get(0) !== this.container.get(0)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.selection.updateByRange();\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 || targetNode.closest('.lake-popup').length > 0) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private resizeListener: EventListener = () => {\n this.event.emit('resize');\n };\n\n // Updates the classes of all boxes when the current selection of the editor 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.range;\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 of the editor is changed.\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let appliedItems = this.selection.getAppliedItems();\n if (\n appliedItems.length > 0 &&\n appliedItems[0].node.closestContainer().get(0) !== this.container.get(0)\n ) {\n appliedItems = [];\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 (appliedItems.length > 0) {\n for (const name of commandNames) {\n const commandItem = this.command.getItem(name);\n if (commandItem.isDisabled && commandItem.isDisabled(appliedItems)) {\n disabledNameMap.set(name, true);\n }\n if (commandItem.isSelected && commandItem.isSelected(appliedItems)) {\n selectedNameMap.set(name, true);\n }\n if (commandItem.selectedValues) {\n const values = commandItem.selectedValues(appliedItems);\n if (values.length > 0) {\n selectedValuesMap.set(name, values);\n }\n }\n }\n }\n const state: SelectionState = {\n appliedItems,\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) {\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.shrinkAfter(paragraph);\n }\n const text = stripNode.text();\n stripNode.html('<br />');\n selection.insertNode(document.createTextNode(text));\n }\n\n // Resets the value of unsaved input property.\n private resetUnsavedInputData(): void {\n this.unsavedInputData = '';\n this.unsavedInputCount = 0;\n }\n\n // Binds events about input.\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n });\n this.container.on('compositionend', () => {\n this.isComposing = false;\n });\n this.container.on('beforeinput', event => {\n const inputEvent = event as InputEvent;\n // <p><br /><focus /></p>\n // When the caret is positioned behind a <br> tag, the input event is triggered twice after inserting a sharp(#) in composition mode.\n if (this.isComposing && inputEvent.inputType === 'insertText') {\n inputEvent.preventDefault();\n this.isComposing = false;\n this.history.save({\n inputType: 'insertText',\n });\n }\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n // Here setTimeout is necessary because isComposing is not false after ending composition.\n window.setTimeout(() => {\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n // isComposing is false after ending composition because compositionend event has been emitted.\n if (this.isComposing) {\n if (inputEvent.inputType === 'insertCompositionText') {\n this.container.removeClass('lake-placeholder');\n }\n this.event.emit('input', inputEvent);\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n this.event.emit('input', inputEvent);\n return;\n }\n if (\n inputEvent.inputType === 'insertText' ||\n inputEvent.inputType === 'insertCompositionText'\n ) {\n this.unsavedInputData += inputEvent.data ?? '';\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 this.event.emit('input', inputEvent);\n return;\n }\n this.history.save();\n this.event.emit('input', inputEvent);\n }, 0);\n });\n }\n\n // Binds events about 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.scrollToCaret();\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 this.selection.sync();\n if (options.inputType !== 'insertText') {\n this.resetUnsavedInputData();\n }\n });\n }\n\n // Returns a boolean value indicating whether the editor has focus.\n public get 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 // Returns translation functions by the specified lang.\n public get locale(): TranslationFunctions {\n return i18nObject(this.config.lang as Locales);\n }\n\n // Fixes wrong content, especially empty tag.\n public fixContent(): boolean {\n const range = this.selection.range;\n let changed = false;\n let children = this.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 = this.container.children();\n if (children.length === 0) {\n this.container.html('<p><br /></p>');\n range.shrinkAfter(this.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 // In composition mode (e.g., when a user starts entering a Chinese character using a Pinyin IME),\n // uncompleted text is inserted if the caret is positioned behind a <br> tag.\n // To fix this bug, the caret needs to be moved to the front of the <br> tag.\n if (range.isCollapsed) {\n const prevNode = range.getPrevNode();\n const nextNode = range.getNextNode();\n if (prevNode.name === 'br' && nextNode.length === 0) {\n range.setStartBefore(prevNode);\n range.collapseToStart();\n debug('Range fixed: the caret has been moved to the front of the <br> tag');\n }\n }\n return changed;\n }\n\n // Sets default config for a plugin.\n public setPluginConfig(name: string, config: {[key: string]: any}): void {\n if (!this.config[name]) {\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 // Removes all unused box instances.\n public removeBoxGarbage() {\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 // 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 // Sets focus on the editor.\n public focus(): void {\n this.container.focus();\n }\n\n // Removes focus from the editor.\n public blur(): void {\n this.container.blur();\n }\n\n // Scrolls to the caret or the range of the selection.\n public scrollToCaret(): void {\n const range = this.selection.range;\n if (range.isBox) {\n return;\n }\n // Creates an artificial caret that is the same size as the caret at the current caret 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 artificialCaret = query('<div class=\"lake-artificial-caret\" />');\n const left = rangeRect.x - containerRect.x;\n const top = rangeRect.y - containerRect.y;\n artificialCaret.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-caret').remove();\n this.overlayContainer.append(artificialCaret);\n const position = nodeAndView(artificialCaret);\n // Scrolls the artificial caret element into the visible area of the browser window\n // if it's not already within the visible area of the browser window.\n // If the element is already within the visibposition.rightle area of the browser window, then no scrolling takes place.\n if (position.left < 0 || position.right < 0 || position.top < 0 || position.bottom < 0) {\n (artificialCaret.get(0) as Element).scrollIntoView({\n behavior: 'instant',\n block: 'center',\n inline: 'nearest',\n });\n }\n artificialCaret.remove();\n }\n\n // Sets the specified value 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 value 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 editor area and sets default value 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 query(document.body).append(this.popupContainer);\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n 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 window.addEventListener('resize', this.resizeListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n // Destroys the rendered editor.\n public unmount(): void {\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.empty();\n this.popupContainer.remove();\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 window.removeEventListener('resize', this.resizeListener);\n }\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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: appliedItems => !!appliedItems.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: '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: appliedItems => {\n const currentValues = [];\n for (const item of appliedItems) {\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","import type { Editor } from '../editor';\nimport { SelectionState } from '../types/object';\nimport { ToolbarButtonItem, ToolbarDropdownItem, ToolbarUploadItem, ToolbarItem } from '../types/toolbar';\nimport { toolbarItems } from '../config/toolbar-items';\nimport { safeTemplate } from '../utils/safe-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\ntype 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\nexport class Toolbar {\n\n private root: Nodes;\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 public container: Nodes;\n\n constructor(config: ToolbarConfig) {\n this.root = query(config.root);\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 this.root.addClass('lake-custom-properties');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendButton(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) {\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 tabIndex: -1,\n placement: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n }\n\n private appendUpload(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(safeTemplate`\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 => editor.config.onMessage('error', error),\n });\n }\n });\n }\n\n // Updates state of each item such as disabled, selected.\n public updateState(state: SelectionState) {\n const { appliedItems, disabledNameMap, selectedNameMap, selectedValuesMap } = state;\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 && appliedItems.length > 0 ? item.isDisabled(appliedItems) : 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 && appliedItems.length > 0 ? item.isSelected(appliedItems) : 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 && appliedItems.length > 0 ? item.selectedValues(appliedItems) : [];\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 && appliedItems.length > 0 ? item.isDisabled(appliedItems) : 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) {\n this.root.empty();\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.appendButton(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.appendUpload(editor, item);\n }\n }\n }\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\n\nexport const hrBox: BoxComponent = {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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};\n","import { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { debug } from '../utils/debug';\nimport { query } from '../utils/query';\nimport { Dropdown } from '../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) {\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 const codeBlockBox: BoxComponent = {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const rootNode = query('<div class=\"lake-code-block\" />');\n const boxContainer = box.getContainer();\n boxContainer.css('width', `${editor.container.innerWidth() - 2}px`);\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 = (value: string) => {\n // Here setTimeout is necessary because isComposing is not false after ending composition.\n window.setTimeout(() => {\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 0);\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 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 const resizeListener = () => {\n boxContainer.css('width', `${editor.container.innerWidth() - 2}px`);\n };\n editor.event.on('resize', resizeListener);\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n codeEditor.destroy();\n editor.event.off('resize', resizeListener);\n debug('CodeMirror destroyed');\n });\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 */\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;\r\n return g = { next: verb(0), \"throw\": verb(1), \"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 = {}, 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\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\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 function next() {\r\n while (env.stack.length) {\r\n var rec = env.stack.pop();\r\n try {\r\n var result = rec.dispose && rec.dispose.call(rec.value);\r\n if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\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 __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};\r\n","import { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\ntype BoxResizerConfig = {\n root: Nodes;\n box: Box;\n width: number;\n height: number;\n onResize?: (width: number, height: number) => void;\n onStop: (width: number, height: number) => void;\n};\n\nexport class BoxResizer {\n private config: BoxResizerConfig;\n\n private root: Nodes;\n\n private box: Box;\n\n constructor(config: BoxResizerConfig) {\n this.config = config;\n this.root = config.root;\n this.box = config.box;\n }\n\n private bindEvents(pointerNode: Nodes): void {\n const box = this.box;\n const boxContainer = box.getContainer();\n const resizerNode = pointerNode.closest('.lake-resizer');\n const infoNode = resizerNode.find('.lake-resizer-info');\n const isPlus = pointerNode.attr('class').indexOf('-right') >= 0;\n const initialWidth = boxContainer.width();\n const initialHeight = boxContainer.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 boxContainer.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 pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n clientX = pointerEvent.clientX;\n width = boxContainer.width();\n infoNode.show();\n pointerNode.on('pointermove', pointermoveListener);\n };\n // stop resizing\n const pointerupListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n width = box.getContainer().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 const { width, height }= this.config;\n const resizerNode = query(safeTemplate`\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\">${width} x ${height}</div>\n </div>\n `);\n this.bindEvents(resizerNode.find('.lake-resizer-top-left'));\n this.bindEvents(resizerNode.find('.lake-resizer-top-right'));\n this.bindEvents(resizerNode.find('.lake-resizer-bottom-left'));\n this.bindEvents(resizerNode.find('.lake-resizer-bottom-right'));\n this.root.append(resizerNode);\n }\n}\n","import 'photoswipe/style.css';\nimport PhotoSwipeLightbox, { DataSource } from 'photoswipe/lightbox';\nimport PhotoSwipe from 'photoswipe';\nimport { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { getBox } from '../utils/get-box';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Box } from '../models/box';\nimport { BoxResizer } from '../ui/box-resizer';\n\ntype ImageInfo = {\n node: Nodes;\n width?: number;\n height?: number;\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// Opens full screen view.\nfunction openFullScreen(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 let savedRange: Range;\n lightbox.on('openingAnimationEnd', () => {\n savedRange = editor.selection.range;\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n window.setTimeout(() => {\n if (savedRange) {\n // fix(image): lose focus when zooming in the iOS\n editor.selection.range = savedRange;\n editor.selection.sync();\n }\n box.event.emit('closefullscreen');\n }, 0);\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Displays error icon and filename.\nasync function renderError(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n box.getContainer().css({\n width: '',\n height: '',\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const errorNode = query(safeTemplate`\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 imageIcon = icons.get('image');\n if (imageIcon) {\n errorNode.find('.lake-error-icon').append(imageIcon);\n }\n rootNode.append(buttonGroupNode);\n rootNode.append(errorNode);\n}\n\n// Displays an image with uplaoding progress.\nasync function renderUploading(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const imageInfo = await getImageInfo(value.url);\n if (!imageInfo.width || !imageInfo.height) {\n await renderError(rootNode, 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 box.getContainer().css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const percent = Math.round(value.percent || 0);\n const progressNode = query(safeTemplate`\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 rootNode.append(buttonGroupNode);\n rootNode.append(progressNode);\n rootNode.append(imgNode);\n}\n\n// Displays an image that can be previewed or removed.\nasync function renderDone(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(rootNode, box);\n return;\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 boxContainer.css({\n width: `${width}px`,\n height: `${height}px`,\n });\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-view\" title=\"${editor.locale.image.view()}\"></button>\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.image.remove()}\"></button>\n </div>\n `);\n const viewButton = buttonGroupNode.find('.lake-button-view');\n const maximizeIcon = icons.get('maximize');\n if (maximizeIcon) {\n viewButton.append(maximizeIcon);\n }\n if (width < 80 || PhotoSwipeLightbox === null) {\n viewButton.hide();\n }\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n const imgNode = imageInfo.node;\n imgNode.addClass('lake-image-img');\n imgNode.attr({\n draggable: 'false',\n alt: value.name,\n });\n rootNode.append(buttonGroupNode);\n new BoxResizer({\n root: rootNode,\n box,\n width,\n height,\n onStop: (newWidth, newHeight) => {\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n }).render();\n rootNode.append(imgNode);\n}\n\nexport const imageBox: BoxComponent = {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 const rootNode = query('<div class=\"lake-image\" />');\n rootNode.addClass(`lake-image-${value.status}`);\n let promise: Promise<void>;\n if (value.status === 'uploading') {\n promise = renderUploading(rootNode, box);\n } else if (value.status === 'error') {\n promise = renderError(rootNode, box);\n } else {\n promise = renderDone(rootNode, box);\n }\n promise.then(() => {\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.find('.lake-button-view').on('click', () => openFullScreen(box));\n if (editor.readonly) {\n rootNode.find('.lake-button-remove').hide();\n } else {\n rootNode.find('.lake-button-remove').on('click', event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n });\n }\n box.event.emit('render');\n });\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: box => {\n const rawValue = box.node.attr('value');\n return safeTemplate`<img src=\"${box.value.url}\" data-lake-value=\"${rawValue}\" />`;\n },\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Button } from '../ui/button';\nimport { BoxResizer } from '../ui/box-resizer';\n\nfunction getVideoId(url: string): string {\n const result = /\\w+$/i.exec(url || '');\n return result ? result[0] : '';\n}\n\nfunction getInputValue(videoNode: Nodes, name: string): string {\n const inputElement = videoNode.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n return nativeInputElement.value;\n}\n\nfunction appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const boxContainer = box.getContainer();\n const videoNode = boxContainer.find('.lake-video');\n const buttonGroupNode = query(safeTemplate`\n <div class=\"lake-button-group\">\n <button type=\"button\" tabindex=\"-1\" class=\"lake-button-remove\" title=\"${editor.locale.video.remove()}\"></button>\n </div>\n `);\n const removeButton = buttonGroupNode.find('.lake-button-remove');\n const removeIcon = icons.get('remove');\n if (removeIcon) {\n removeButton.append(removeIcon);\n }\n buttonGroupNode.find('.lake-button-remove').on('click', event => {\n event.stopPropagation();\n editor.selection.removeBox(box);\n editor.history.save();\n });\n videoNode.append(buttonGroupNode);\n}\n\nfunction showVideo(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(safeTemplate`\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 BoxResizer({\n root: rootNode,\n box,\n width,\n height,\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 const videoBox: BoxComponent = {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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(safeTemplate`\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 = getInputValue(formNode, 'url');\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};\n","import { BoxComponent } from '../types/box';\nimport { BoxToolbarItem } from '../types/box-toolbar';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { fileSize } from '../utils/file-size';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\n\nconst boxToolbarItems: BoxToolbarItem[] = [\n {\n name: 'download',\n type: 'button',\n icon: icons.get('download'),\n tooltip: locale => locale.file.download(),\n onClick: box => {\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: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n];\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const infoNode = query(safeTemplate`\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(safeTemplate`\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 const fileBox: BoxComponent = {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 const items = value.status === 'done' ? boxToolbarItems : boxToolbarItems.filter(item => item.name === 'remove');\n box.setToolbar(items);\n } else {\n rootNode.on('click', () => {\n window.open(value.url);\n });\n }\n },\n};\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\n\nexport const emojiBox: BoxComponent = {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query(safeTemplate`\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};\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Box } from '../models/box';\nimport { Button } from '../ui/button';\n\nconst defaultExpression = String.raw`\\sqrt{x}`;\n\nfunction renderError(box: Box): void {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 The 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 const equationBox: BoxComponent = {\n type: 'inline',\n name: 'equation',\n render: box => {\n const editor = box.getEditor();\n if (!editor) {\n return;\n }\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 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(safeTemplate`\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 const textareaNativeNode = (textareaNode.get(0) as HTMLTextAreaElement);\n textareaNativeNode.value = defaultCode;\n textareaNode.on('input', () => {\n const code = textareaNativeNode.value.trim();\n viewNode.html(window.katex.renderToString(code || defaultExpression, {\n throwOnError: false,\n }));\n box.updateValue('code', code);\n });\n const button = 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 button.render();\n },\n};\n","import type { Editor } from '..';\nimport { getBox } from '../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 '..';\nimport { query } from '../utils';\nimport { getBox } from '../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 { Editor } from '..';\nimport { blockTagNames } from '../config/tag-names';\nimport { getElementRules } from '../config/element-rules';\nimport {\n wrapNodeList, changeTagName, fixNumberedList,\n removeBr, query, getBox, normalizeValue, uploadFile,\n} from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { HTMLParser } from '../parsers/html-parser';\nimport { TextParser } from '../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 removeBr(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.insertNode(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.insertFragment(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 '..';\nimport { query, getBox, safeTemplate } from '../utils';\nimport { Nodes } from '../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(safeTemplate`\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 '..';\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 '..';\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 '..';\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('heading', {\n selectedValues: appliedItems => {\n const currentItem = appliedItems.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 '..';\nimport { safeTemplate } from '../utils';\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: appliedItems => !!appliedItems.find(item => item.name === 'blockquote'),\n execute: (type?: string) => {\n if (type && typeList.indexOf(type) >= 0) {\n editor.selection.setBlocks(safeTemplate`<blockquote type=\"${type}\" />`);\n } else {\n editor.selection.setBlocks('<blockquote />');\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\nimport { query } from '../utils/query';\n\nfunction setParagraph(editor: Editor) {\n editor.selection.setBlocks('<p />');\n}\n\nfunction setNumberedList(editor: Editor) {\n editor.selection.setBlocks('<ol><li></li></ol>');\n}\n\nfunction setBulletedList(editor: Editor) {\n editor.selection.setBlocks('<ul><li></li></ul>');\n}\n\nfunction setChecklist(editor: Editor, value: boolean) {\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: appliedItems => {\n let currentValue;\n for (const item of appliedItems) {\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 type { Editor } from '..';\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: appliedItems => {\n let currentValue;\n for (const item of appliedItems) {\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 { Editor } from '..';\nimport { setBlockIndent } from '../utils';\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 setBlockIndent(block, type);\n }\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\n\nconst tagName = 'strong';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('bold', {\n isDisabled: appliedItems => !!appliedItems.find(item => item.node.isHeading),\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'i';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('italic', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'u';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('underline', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 's';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('strikethrough', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'sub';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('subscript', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'sup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('superscript', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nconst tagName = 'code';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('code', {\n isSelected: appliedItems => !!appliedItems.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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontFamily', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontSize', {\n isDisabled: appliedItems => !!appliedItems.find(item => item.node.isHeading),\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\nimport { toHex } from '../utils';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('fontColor', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\nimport { toHex } from '../utils';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('highlight', {\n selectedValues: appliedItems => {\n for (const item of appliedItems) {\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 '..';\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 '..';\nimport { Nodes } from '../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 appliedItems = editor.selection.getAppliedItems();\n for (const item of appliedItems) {\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', (tagetNode: Nodes) => {\n if (tagetNode.isInside && tagetNode.closestContainer().get(0) === editor.container.get(0)) {\n return;\n }\n const buttonNode = tagetNode.closest('button[name=\"formatPainter\"]');\n if (buttonNode.length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { TranslationFunctions } from '../i18n/types';\nimport { icons } from '../icons';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { nodeAndView } from '../utils/node-and-view';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { i18nObject } from '../../src/i18n';\n\ntype LinkPopupConfig = {\n root: Nodes;\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n};\n\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private root: Nodes;\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.root = config.root;\n this.locale = config.locale || i18nObject('en-US');\n this.container = query(safeTemplate`\n <div class=\"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.getInputValue('url');\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.getInputValue('url');\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 public getInputValue(name: string): string {\n const inputElement = this.container.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n return nativeInputElement.value;\n }\n\n public setInputValue(name: string, value: string): void {\n const inputElement = this.container.find(`input[name=\"${name}\"]`);\n const nativeInputElement = inputElement.get(0) as HTMLInputElement;\n nativeInputElement.value = value;\n }\n\n public save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.getInputValue('url');\n let title = this.getInputValue('title');\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 public updatePosition(): void {\n if (!this.linkNode) {\n return;\n }\n const position = nodeAndView(this.linkNode);\n if (position.left < 0 || position.right < 0 || position.top < 0 || position.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 // Returns a DOMRect object providing information about the size of an element and its position relative to the viewport.\n const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n // link.x + popup.width > window.width\n if (linkRect.x + this.container.width() > window.innerWidth) {\n // link.x + window.scrollX - (popup.width - link.width)\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n // link.y + link.height + popup.height > window.height\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n // link.y + window.scrollY - popup.height\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 render(): void {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n this.root.append(this.container);\n }\n\n public show(linkNode: Nodes): void {\n if (this.root.find('.lake-link-popup').length === 0) {\n this.render();\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.setInputValue('url', url);\n if (title !== url) {\n this.setInputValue('title', 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 }\n\n public hide(): void {\n this.linkNode = null;\n this.container.hide();\n }\n}\n","import { type Editor } from '..';\nimport { Nodes } from '../models/nodes';\nimport { LinkPopup } from '../ui/link-popup';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n const popup = new LinkPopup({\n root: editor.popupContainer,\n locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.history.save();\n },\n });\n editor.root.on('scroll', () => {\n popup.updatePosition();\n });\n editor.event.on('resize', () => {\n popup.updatePosition();\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (linkNode.length === 0) {\n popup.hide();\n return;\n }\n if (\n linkNode.isOutside ||\n linkNode.closestContainer().get(0) !== editor.container.get(0) ||\n linkNode.closest('lake-box').length > 0\n ) {\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const linkNode = editor.selection.insertLink(`<a href=\"\">${editor.locale.link.newLink()}</a>`);\n if (!linkNode) {\n return;\n }\n editor.history.save();\n popup.show(linkNode);\n },\n });\n};\n","import type { Editor } from '..';\nimport { query, getBox } from '../utils';\nimport { Fragment } from '../models/fragment';\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 { type Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\nimport { query, getBox } from '../utils';\nimport { Fragment } from '../models/fragment';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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","import type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\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 type { Editor } from '..';\nimport { BoxValue } from '../types/box';\n\nexport default (editor: Editor) => {\n if (!window.katex) {\n return;\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.selection.selectBox(box);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\nimport { Fragment } from '../models/fragment';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.command.add('specialCharacter', {\n execute: (value: string) => {\n const fragment = new Fragment();\n fragment.append(document.createTextNode(value));\n editor.selection.insertFragment(fragment);\n editor.history.save();\n },\n });\n};\n","import type { Editor } from '..';\nimport { Point } from '../types/object';\nimport { Nodes } from '../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 '..';\nimport { query } from '../utils';\nimport { Nodes } from '../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 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 '..';\nimport { query } from '../utils';\nimport { Fragment } from '../models/fragment';\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 const fragment = new Fragment();\n fragment.append('<br /><br />');\n editor.selection.insertFragment(fragment);\n editor.history.save();\n return;\n }\n }\n editor.selection.insertNode(query('<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 '..';\nimport { query, getBox, appendDeepest, mergeNodes, setBlockIndent } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { setBlocks } from '../operations/set-blocks';\n\nfunction removeEmptyMarks(range: Range): void {\n const block = range.getBlocks()[0];\n if (block && block.isEmpty && block.first().name !== 'br') {\n block.empty();\n appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\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) {\n if (block.isEmpty) {\n block.remove();\n }\n range.selectBoxEnd(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 removeEmptyMarks(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 editor.selection.toBookmark(bookmark);\n editor.selection.fixList();\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 (box.name === 'codeBlock' && (boxValue.code === undefined || boxValue.code === '')) {\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 editor.selection.fixList();\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 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.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 appendDeepest(block, query('<br />'));\n range.shrinkAfter(block);\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 setBlockIndent(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 '..';\nimport { mergeNodes } from '../utils';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { setBlocks } from '../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.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 editor.selection.toBookmark(bookmark);\n editor.selection.fixList();\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 editor.selection.fixList();\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 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 '..';\nimport { setBlockIndent } from '../utils';\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 setBlockIndent(block, 'increase');\n } else {\n block.css('text-indent', '2em');\n }\n }\n editor.history.save();\n });\n};\n","import type { Editor } from '..';\n\nexport default (editor: Editor) => {\n if (editor.readonly) {\n return;\n }\n editor.keystroke.setKeydown('arrow-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('arrow-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('arrow-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('arrow-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 '..';\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 './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { BoxComponent } from './types/box';\nimport { ToolbarItem } from './types/toolbar';\nimport { DropdownMenuItem } from './types/dropdown';\nimport { icons } from './icons';\nimport * as Utils from './utils';\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 { insertNode } from './operations/insert-node';\nimport { insertFragment} from './operations/insert-fragment';\nimport { deleteContents} from './operations/delete-contents';\nimport { setBlocks} from './operations/set-blocks';\nimport { splitBlock} from './operations/split-block';\nimport { splitMarks} from './operations/split-marks';\nimport { addMark} from './operations/add-mark';\nimport { removeMark} from './operations/remove-mark';\nimport { fixList} from './operations/fix-list';\nimport { insertLink } from './operations/insert-link';\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 { hrBox } from './boxes/hr';\nimport { codeBlockBox } from './boxes/code-block';\nimport { imageBox } from './boxes/image';\nimport { videoBox } from './boxes/video';\nimport { fileBox } from './boxes/file';\nimport { emojiBox } from './boxes/emoji';\nimport { equationBox } from './boxes/equation';\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 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 from './plugins/hr';\nimport codeBlock from './plugins/code-block';\nimport image from './plugins/image';\nimport video from './plugins/video';\nimport file from './plugins/file';\nimport emoji from './plugins/emoji';\nimport equation from './plugins/equation';\nimport specialCharacter from './plugins/special-character';\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';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(emojiBox);\nEditor.box.add(equationBox);\n\nEditor.plugin.add(copy);\nEditor.plugin.add(cut);\nEditor.plugin.add(paste);\nEditor.plugin.add(drop);\nEditor.plugin.add(undo);\nEditor.plugin.add(redo);\nEditor.plugin.add(selectAll);\nEditor.plugin.add(heading);\nEditor.plugin.add(blockQuote);\nEditor.plugin.add(list);\nEditor.plugin.add(align);\nEditor.plugin.add(indent);\nEditor.plugin.add(bold);\nEditor.plugin.add(italic);\nEditor.plugin.add(underline);\nEditor.plugin.add(strikethrough);\nEditor.plugin.add(subscript);\nEditor.plugin.add(superscript);\nEditor.plugin.add(code);\nEditor.plugin.add(fontFamily);\nEditor.plugin.add(fontSize);\nEditor.plugin.add(fontColor);\nEditor.plugin.add(highlight);\nEditor.plugin.add(removeFormat);\nEditor.plugin.add(formatPainter);\nEditor.plugin.add(link);\nEditor.plugin.add(hr);\nEditor.plugin.add(codeBlock);\nEditor.plugin.add(image);\nEditor.plugin.add(video);\nEditor.plugin.add(file);\nEditor.plugin.add(emoji);\nEditor.plugin.add(equation);\nEditor.plugin.add(specialCharacter);\nEditor.plugin.add(markdown);\nEditor.plugin.add(enterKey);\nEditor.plugin.add(shiftEnterKey);\nEditor.plugin.add(backspaceKey);\nEditor.plugin.add(deleteKey);\nEditor.plugin.add(tabKey);\nEditor.plugin.add(arrowKeys);\nEditor.plugin.add(escapeKey);\n\nexport {\n Editor,\n Toolbar,\n ToolbarItem,\n DropdownMenuItem,\n BoxComponent,\n Button,\n Dropdown,\n icons,\n Utils,\n Nodes,\n Fragment,\n Range,\n Box,\n HTMLParser,\n TextParser,\n insertBookmark,\n toBookmark,\n insertNode,\n insertFragment,\n deleteContents,\n setBlocks,\n splitBlock,\n splitMarks,\n addMark,\n removeMark,\n fixList,\n insertLink,\n insertBox,\n removeBox,\n};\n"],"names":["file","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","initI18nObject","splitBlock","removeEmptyMarks","copyNestedMarks","renderError","tagName"],"mappings":"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","x_google_ignoreList":[81]}
|