lakelib 0.2.3 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (162) hide show
  1. package/dist/lake.css +164 -166
  2. package/dist/lake.min.js +36 -36
  3. package/dist/lake.min.js.map +1 -1
  4. package/lib/{types/css → css}/index.d.ts +1 -0
  5. package/lib/{types/i18n/ja → i18n/en-US}/index.d.ts +9 -0
  6. package/lib/{types/i18n/en-US → i18n/ja}/index.d.ts +9 -0
  7. package/lib/{types/i18n → i18n}/ko/index.d.ts +9 -0
  8. package/lib/{types/i18n → i18n}/types.d.ts +82 -9
  9. package/lib/{types/i18n → i18n}/zh-CN/index.d.ts +9 -0
  10. package/lib/lake.css +164 -166
  11. package/lib/lake.js +4660 -4510
  12. package/lib/lake.js.map +1 -1
  13. package/lib/{types/models → models}/box.d.ts +5 -3
  14. package/lib/types/{types/object.d.ts → object.d.ts} +3 -3
  15. package/lib/ui/floating-toolbar.d.ts +16 -0
  16. package/lib/{types/ui → ui}/link-popup.d.ts +2 -2
  17. package/lib/{types/ui/box-resizer.d.ts → ui/resizer.d.ts} +6 -6
  18. package/lib/{types/ui → ui}/toolbar.d.ts +2 -2
  19. package/lib/{types/utils → utils}/index.d.ts +1 -1
  20. package/lib/utils/is-visible.d.ts +8 -0
  21. package/package.json +19 -19
  22. package/lib/types/types/box-toolbar.d.ts +0 -22
  23. package/lib/types/ui/box-toolbar.d.ts +0 -30
  24. package/lib/types/utils/node-position.d.ts +0 -9
  25. /package/lib/{types/boxes → boxes}/code-block.d.ts +0 -0
  26. /package/lib/{types/boxes → boxes}/emoji.d.ts +0 -0
  27. /package/lib/{types/boxes → boxes}/equation.d.ts +0 -0
  28. /package/lib/{types/boxes → boxes}/file.d.ts +0 -0
  29. /package/lib/{types/boxes → boxes}/hr.d.ts +0 -0
  30. /package/lib/{types/boxes → boxes}/image.d.ts +0 -0
  31. /package/lib/{types/boxes → boxes}/mention.d.ts +0 -0
  32. /package/lib/{types/boxes → boxes}/video.d.ts +0 -0
  33. /package/lib/{types/config → config}/element-rules.d.ts +0 -0
  34. /package/lib/{types/config → config}/menu-items.d.ts +0 -0
  35. /package/lib/{types/config → config}/slash-items.d.ts +0 -0
  36. /package/lib/{types/config → config}/tag-names.d.ts +0 -0
  37. /package/lib/{types/config → config}/toolbar-items.d.ts +0 -0
  38. /package/lib/{types/editor.d.ts → editor.d.ts} +0 -0
  39. /package/lib/{types/elements → elements}/bookmark.d.ts +0 -0
  40. /package/lib/{types/elements → elements}/box.d.ts +0 -0
  41. /package/lib/{types/i18n → i18n}/index.d.ts +0 -0
  42. /package/lib/{types/icons → icons}/index.d.ts +0 -0
  43. /package/lib/{types/index.d.ts → index.d.ts} +0 -0
  44. /package/lib/{types/managers → managers}/box-manager.d.ts +0 -0
  45. /package/lib/{types/managers → managers}/command.d.ts +0 -0
  46. /package/lib/{types/managers → managers}/history.d.ts +0 -0
  47. /package/lib/{types/managers → managers}/keystroke.d.ts +0 -0
  48. /package/lib/{types/managers → managers}/plugin.d.ts +0 -0
  49. /package/lib/{types/managers → managers}/selection.d.ts +0 -0
  50. /package/lib/{types/models → models}/fragment.d.ts +0 -0
  51. /package/lib/{types/models → models}/nodes.d.ts +0 -0
  52. /package/lib/{types/models → models}/range.d.ts +0 -0
  53. /package/lib/{types/operations → operations}/add-mark.d.ts +0 -0
  54. /package/lib/{types/operations → operations}/delete-contents.d.ts +0 -0
  55. /package/lib/{types/operations → operations}/fix-list.d.ts +0 -0
  56. /package/lib/{types/operations → operations}/insert-bookmark.d.ts +0 -0
  57. /package/lib/{types/operations → operations}/insert-box.d.ts +0 -0
  58. /package/lib/{types/operations → operations}/insert-fragment.d.ts +0 -0
  59. /package/lib/{types/operations → operations}/insert-link.d.ts +0 -0
  60. /package/lib/{types/operations → operations}/insert-node.d.ts +0 -0
  61. /package/lib/{types/operations → operations}/remove-box.d.ts +0 -0
  62. /package/lib/{types/operations → operations}/remove-mark.d.ts +0 -0
  63. /package/lib/{types/operations → operations}/set-blocks.d.ts +0 -0
  64. /package/lib/{types/operations → operations}/split-block.d.ts +0 -0
  65. /package/lib/{types/operations → operations}/split-marks.d.ts +0 -0
  66. /package/lib/{types/operations → operations}/to-bookmark.d.ts +0 -0
  67. /package/lib/{types/parsers → parsers}/html-parser.d.ts +0 -0
  68. /package/lib/{types/parsers → parsers}/text-parser.d.ts +0 -0
  69. /package/lib/{types/plugins → plugins}/align.d.ts +0 -0
  70. /package/lib/{types/plugins → plugins}/arrow-keys.d.ts +0 -0
  71. /package/lib/{types/plugins → plugins}/backspace-key.d.ts +0 -0
  72. /package/lib/{types/plugins → plugins}/block-quote.d.ts +0 -0
  73. /package/lib/{types/plugins → plugins}/bold.d.ts +0 -0
  74. /package/lib/{types/plugins → plugins}/code-block.d.ts +0 -0
  75. /package/lib/{types/plugins → plugins}/code.d.ts +0 -0
  76. /package/lib/{types/plugins → plugins}/copy.d.ts +0 -0
  77. /package/lib/{types/plugins → plugins}/cut.d.ts +0 -0
  78. /package/lib/{types/plugins → plugins}/delete-key.d.ts +0 -0
  79. /package/lib/{types/plugins → plugins}/drop.d.ts +0 -0
  80. /package/lib/{types/plugins → plugins}/emoji.d.ts +0 -0
  81. /package/lib/{types/plugins → plugins}/enter-key.d.ts +0 -0
  82. /package/lib/{types/plugins → plugins}/equation.d.ts +0 -0
  83. /package/lib/{types/plugins → plugins}/escape-key.d.ts +0 -0
  84. /package/lib/{types/plugins → plugins}/file.d.ts +0 -0
  85. /package/lib/{types/plugins → plugins}/font-color.d.ts +0 -0
  86. /package/lib/{types/plugins → plugins}/font-family.d.ts +0 -0
  87. /package/lib/{types/plugins → plugins}/font-size.d.ts +0 -0
  88. /package/lib/{types/plugins → plugins}/format-painter.d.ts +0 -0
  89. /package/lib/{types/plugins → plugins}/heading.d.ts +0 -0
  90. /package/lib/{types/plugins → plugins}/highlight.d.ts +0 -0
  91. /package/lib/{types/plugins → plugins}/hr.d.ts +0 -0
  92. /package/lib/{types/plugins → plugins}/image.d.ts +0 -0
  93. /package/lib/{types/plugins → plugins}/indent.d.ts +0 -0
  94. /package/lib/{types/plugins → plugins}/italic.d.ts +0 -0
  95. /package/lib/{types/plugins → plugins}/link.d.ts +0 -0
  96. /package/lib/{types/plugins → plugins}/list.d.ts +0 -0
  97. /package/lib/{types/plugins → plugins}/markdown.d.ts +0 -0
  98. /package/lib/{types/plugins → plugins}/mention.d.ts +0 -0
  99. /package/lib/{types/plugins → plugins}/paste.d.ts +0 -0
  100. /package/lib/{types/plugins → plugins}/redo.d.ts +0 -0
  101. /package/lib/{types/plugins → plugins}/remove-format.d.ts +0 -0
  102. /package/lib/{types/plugins → plugins}/select-all.d.ts +0 -0
  103. /package/lib/{types/plugins → plugins}/shift-enter-key.d.ts +0 -0
  104. /package/lib/{types/plugins → plugins}/slash.d.ts +0 -0
  105. /package/lib/{types/plugins → plugins}/special-character.d.ts +0 -0
  106. /package/lib/{types/plugins → plugins}/strikethrough.d.ts +0 -0
  107. /package/lib/{types/plugins → plugins}/subscript.d.ts +0 -0
  108. /package/lib/{types/plugins → plugins}/superscript.d.ts +0 -0
  109. /package/lib/{types/plugins → plugins}/tab-key.d.ts +0 -0
  110. /package/lib/{types/plugins → plugins}/underline.d.ts +0 -0
  111. /package/lib/{types/plugins → plugins}/undo.d.ts +0 -0
  112. /package/lib/{types/plugins → plugins}/unlink.d.ts +0 -0
  113. /package/lib/{types/plugins → plugins}/video.d.ts +0 -0
  114. /package/lib/{types/storage → storage}/box-instances.d.ts +0 -0
  115. /package/lib/{types/storage → storage}/boxes.d.ts +0 -0
  116. /package/lib/{types/storage → storage}/editors.d.ts +0 -0
  117. /package/lib/types/{types/box.d.ts → box.d.ts} +0 -0
  118. /package/lib/types/{types/dropdown.d.ts → dropdown.d.ts} +0 -0
  119. /package/lib/types/{types/mention.d.ts → mention.d.ts} +0 -0
  120. /package/lib/types/{types/native.d.ts → native.d.ts} +0 -0
  121. /package/lib/types/{types/node.d.ts → node.d.ts} +0 -0
  122. /package/lib/types/{types/plugin.d.ts → plugin.d.ts} +0 -0
  123. /package/lib/types/{types/request.d.ts → request.d.ts} +0 -0
  124. /package/lib/types/{types/slash.d.ts → slash.d.ts} +0 -0
  125. /package/lib/types/{types/toolbar.d.ts → toolbar.d.ts} +0 -0
  126. /package/lib/{types/ui → ui}/button.d.ts +0 -0
  127. /package/lib/{types/ui → ui}/dropdown.d.ts +0 -0
  128. /package/lib/{types/ui → ui}/mention-menu.d.ts +0 -0
  129. /package/lib/{types/ui → ui}/menu.d.ts +0 -0
  130. /package/lib/{types/ui → ui}/slash-menu.d.ts +0 -0
  131. /package/lib/{types/utils → utils}/append-break.d.ts +0 -0
  132. /package/lib/{types/utils → utils}/camel-case.d.ts +0 -0
  133. /package/lib/{types/utils → utils}/change-tag-name.d.ts +0 -0
  134. /package/lib/{types/utils → utils}/debug.d.ts +0 -0
  135. /package/lib/{types/utils → utils}/denormalize-value.d.ts +0 -0
  136. /package/lib/{types/utils → utils}/encode.d.ts +0 -0
  137. /package/lib/{types/utils → utils}/file-size.d.ts +0 -0
  138. /package/lib/{types/utils → utils}/fix-numbered-list.d.ts +0 -0
  139. /package/lib/{types/utils → utils}/from-base64.d.ts +0 -0
  140. /package/lib/{types/utils → utils}/get-box.d.ts +0 -0
  141. /package/lib/{types/utils → utils}/get-css.d.ts +0 -0
  142. /package/lib/{types/utils → utils}/get-deep-element.d.ts +0 -0
  143. /package/lib/{types/utils → utils}/in-string.d.ts +0 -0
  144. /package/lib/{types/utils → utils}/merge-nodes.d.ts +0 -0
  145. /package/lib/{types/utils → utils}/modifier-text.d.ts +0 -0
  146. /package/lib/{types/utils → utils}/morph.d.ts +0 -0
  147. /package/lib/{types/utils → utils}/normalize-value.d.ts +0 -0
  148. /package/lib/{types/utils → utils}/parse-style.d.ts +0 -0
  149. /package/lib/{types/utils → utils}/query.d.ts +0 -0
  150. /package/lib/{types/utils → utils}/remove-break.d.ts +0 -0
  151. /package/lib/{types/utils → utils}/remove-zws.d.ts +0 -0
  152. /package/lib/{types/utils → utils}/request.d.ts +0 -0
  153. /package/lib/{types/utils → utils}/safe-template.d.ts +0 -0
  154. /package/lib/{types/utils → utils}/scroll-to-node.d.ts +0 -0
  155. /package/lib/{types/utils → utils}/set-block-indent.d.ts +0 -0
  156. /package/lib/{types/utils → utils}/split-nodes.d.ts +0 -0
  157. /package/lib/{types/utils → utils}/template.d.ts +0 -0
  158. /package/lib/{types/utils → utils}/to-base64.d.ts +0 -0
  159. /package/lib/{types/utils → utils}/to-hex.d.ts +0 -0
  160. /package/lib/{types/utils → utils}/to-node-list.d.ts +0 -0
  161. /package/lib/{types/utils → utils}/upload-file.d.ts +0 -0
  162. /package/lib/{types/utils → utils}/wrap-node-list.d.ts +0 -0
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/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-break.ts","../src/utils/remove-break.ts","../src/utils/merge-nodes.ts","../src/utils/get-deep-element.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-position.ts","../src/utils/scroll-to-node.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.21.2_tslib@2.7.0_typescript@5.5.4/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/boxes/mention.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/ui/menu.ts","../src/ui/mention-menu.ts","../src/plugins/mention.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/config/slash-items.ts","../src/ui/slash-menu.ts","../src/plugins/slash.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 question from './question.svg';\nimport more from './more.svg';\nimport left from './left.svg';\nimport right from './right.svg';\nimport down from './down.svg';\nimport check from './check.svg';\nimport checkCircle from './check-circle.svg';\nimport warningCircle from './warning-circle.svg';\nimport 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 ['question', question],\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 ['&', '&amp;'],\n ['<', '&lt;'],\n ['>', '&gt;'],\n ['\"', '&quot;'],\n ['\\xA0', '&nbsp;'],\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(/&quot;/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 // 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 a boolean value indicating whether a node is a descendant of a given node, that is the node itself,\n // one of its direct children (childNodes), one of the children's direct children, and so on.\n public contains(otherNode: Node | Nodes): boolean {\n if (otherNode instanceof Nodes) {\n otherNode = otherNode.get(0);\n }\n const element = this.get(0) as Element;\n return element.contains(otherNode);\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 // 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) {\n if (parent.isElement && ['scroll', 'auto'].indexOf(parent.computedCSS('overflow-y')) >= 0) {\n return parent;\n }\n parent = parent.parent();\n }\n return new Nodes();\n }\n\n // Returns the parent of the first node.\n public parent(): Nodes {\n const node = this.get(0);\n return new Nodes(node.parentNode);\n }\n\n // Returns the immediately preceding sibling of the first node.\n public prev(): Nodes {\n const node = this.get(0);\n return new Nodes(node.previousSibling);\n }\n\n // Returns the immediately following sibling of the first node.\n public next(): Nodes {\n const node = this.get(0);\n return new Nodes(node.nextSibling);\n }\n\n // Returns the first child of the first 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 value(): string;\n\n public value(value: string): this;\n\n public value(value?: string): any {\n if (value === undefined) {\n const inputElement = this.get(0) as HTMLInputElement;\n return inputElement.value;\n }\n return this.eachElement(element => {\n (element as HTMLInputElement).value = value;\n });\n }\n\n 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: height > 0 ? rect.y : 0,\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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n // 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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n // 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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n // Collapses the range 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 this.adjustBr();\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 // Relocates the start and end points of the range for <br /> element.\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 public adjustBr(): void {\n if (!this.isCollapsed) {\n return;\n }\n const prevNode = this.getPrevNode();\n const nextNode = this.getNextNode();\n if (prevNode.name === 'br' && nextNode.length === 0) {\n this.setStartBefore(prevNode);\n this.collapseToStart();\n }\n }\n\n // Returns the 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 \"one\".\n public getStartText(): string {\n const node = this.startNode;\n const offset = this.startOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const startRange = new Range();\n startRange.setStartBefore(block);\n startRange.setEnd(node, offset);\n const container = query('<div />');\n container.append(startRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n // Returns the text 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 new text range from the specified character to the beginning of the current range.\n // The specified character must be preceded by a whitespace or be at the beginning of a paragraph,\n // without being adjacent to other characters. If these conditions are not met, it returns null.\n public getCharacterRange(character: string): Range | null {\n const newRange = this.clone();\n newRange.shrink();\n if (newRange.startOffset === 0) {\n return null;\n }\n if (newRange.startNode.isElement) {\n const textNode = newRange.startNode.children()[newRange.startOffset - 1];\n if (!textNode.isText) {\n return null;\n }\n newRange.setEnd(textNode, textNode.text().length);\n newRange.collapseToEnd();\n }\n const textNode = newRange.startNode;\n const text = textNode.text().slice(0, newRange.startOffset);\n const lastIndexOfNormalSpace = text.lastIndexOf(` ${character}`);\n const lastIndexOfNoBreakSpace = text.lastIndexOf(`\\xA0${character}`);\n const lastIndexOfZeroWidthSpace = text.lastIndexOf(`\\u200B${character}`);\n if (lastIndexOfNormalSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNormalSpace + 1);\n } else if (lastIndexOfNoBreakSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNoBreakSpace + 1);\n } else if (lastIndexOfZeroWidthSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfZeroWidthSpace + 1);\n } else if (text.indexOf(character) === 0) {\n newRange.setStart(textNode, 0);\n } else {\n return null;\n }\n return newRange;\n }\n\n // Returns a 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';\nimport { query } from './query';\n\n// Appends a line break to the end of a block.\n// Example:\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><br /></p> to <p><br /></p>\n// case 3: <p>foo</p> to <p>foo<br /></p>\n// case 4: <ul><li></li></ul> to <ul><li><br /></li></ul>\n// case 5: <p><focus /></p> to <p><focus /><br /></p>\nexport function appendBreak(block: Nodes): Nodes {\n const breakNode = query('<br />');\n let child = block;\n while (child.isBlock) {\n let lastChild = child.last();\n while (lastChild.isText && lastChild.isEmpty) {\n lastChild = lastChild.prev();\n }\n if (!lastChild.isBlock && lastChild.name !== 'br') {\n child.append(breakNode);\n break;\n }\n child = lastChild;\n }\n return breakNode;\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes a line break in the specified empty block.\n// Example:\n// case 1: <p><br /></p> to <p></p>\n// case 2: <p><br /><focus /></p> to <p><focus /></p>\n// case 3: <p><focus /><br /></p> to <p><focus /></p>\nexport function removeBreak(block: Nodes): void {\n if (block.length === 0) {\n return;\n }\n const nodeList: Nodes[] = [];\n let child = block.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (!child.isText || child.text() !== '') {\n nodeList.push(child);\n }\n child = nextNode;\n }\n if (\n nodeList.length === 1 &&nodeList[0].name === 'br' ||\n nodeList.length === 2 && nodeList[0].name === 'br' && nodeList[1].isBookmark\n ) {\n nodeList[0].remove();\n }\n if (nodeList.length === 2 && nodeList[0].isBookmark && nodeList[1].name === 'br') {\n nodeList[1].remove();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { appendBreak } from './append-break';\nimport { removeBreak } from './remove-break';\nimport { Range } from '../models/range';\n\n// Returns a point after the specified node.\nfunction getAfterPoint(node: Nodes): { node: Nodes, offset: number } {\n if (node.isText) {\n return {\n node,\n offset: node.text().length,\n };\n }\n const range = new Range();\n range.setEndAfter(node);\n return {\n node: range.endNode,\n offset: range.endOffset,\n };\n}\n\n// Merges two nodes into one node.\n// Case 1:\n// <p><strong><i>foo</i></strong></p>\n// <p>|bar</p>\n// to\n// <p><strong><i>foo</i></strong>|bar</p>\n//\n// Case 2:\n// <p><strong><i>foo</i></strong></p>\n// <p>|<strong><i>bar</i></strong></p>\n// to\n// <p><strong><i>foo|bar</i></strong></p>\nexport function mergeNodes(node: Nodes, otherNode: Nodes): { node: Nodes, offset: number } {\n const originalOtherNode = otherNode;\n if (['ul', 'ol'].indexOf(node.name) >= 0) {\n const list = node.find('li');\n node = list.eq(list.length - 1);\n }\n if (['ul', 'ol'].indexOf(otherNode.name) >= 0) {\n const list = otherNode.find('li');\n otherNode = list.eq(0);\n }\n if (node.isText || otherNode.isText || node.isVoid || otherNode.isVoid) {\n return getAfterPoint(node);\n }\n removeBreak(node);\n removeBreak(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendBreak(node);\n }\n const nextNode = node.last();\n const nextOtherNode = otherNode.first();\n let child = nextOtherNode;\n while (child.length > 0) {\n const next = child.next();\n node.append(child);\n child = next;\n }\n originalOtherNode.remove();\n if (\n nextNode.length > 0 &&\n nextOtherNode.length > 0 &&\n nextNode.isElement &&\n !nextNode.isBox &&\n nextNode.clone(false).get(0).isEqualNode(nextOtherNode.clone(false).get(0))\n ) {\n return mergeNodes(nextNode, nextOtherNode);\n }\n if (nextNode.length === 0) {\n return {\n node,\n offset: 0,\n };\n }\n return getAfterPoint(nextNode);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Returns the deepest element of the specified element.\nexport function getDeepElement(element: Nodes): Nodes {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n if (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n break;\n }\n child = firstChild;\n }\n return child;\n}\n","import type { Nodes } from '../models/nodes';\nimport { getDeepElement } from './get-deep-element';\nimport { query } from './query';\n\nexport function wrapNodeList(nodeList: Nodes[], wrapper?: Nodes): Nodes {\n wrapper = wrapper ?? query('<p />');\n if (nodeList.length === 0) {\n return wrapper;\n }\n wrapper = wrapper.clone(true);\n const deepestElement = getDeepElement(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import 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 nodePosition(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 { nodePosition } from './node-position';\nimport { Nodes } from '../models/nodes';\n\n// If a node is not visible, scrolls the container that contains this node to its position to make it visible.\n// If the node is visible, then scrolling takes place.\nexport function scrollToNode(node: Nodes, options?: ScrollIntoViewOptions): void {\n const position = nodePosition(node);\n if (position.left < 0 || position.right < 0 || position.top < 0 || position.bottom < 0) {\n (node.get(0) as Element).scrollIntoView(options);\n }\n}\n","import type { Box } from '../models/box';\n\nconst boxInstances: Map<number, Map<number, Box>> = new Map();\n\nexport function getInstanceMap(id: number): Map<number, Box> {\n let instanceMap = boxInstances.get(id);\n if (!instanceMap) {\n instanceMap = new Map();\n boxInstances.set(id, instanceMap);\n return instanceMap;\n }\n return instanceMap;\n}\n","import 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: 'Mathematical formula',\n removeColor: 'Remove color',\n },\n slash: {\n heading1: 'Heading 1',\n heading1Desc: 'Create a heading level 1',\n heading2: 'Heading 2',\n heading2Desc: 'Create a heading level 2',\n heading3: 'Heading 3',\n heading3Desc: 'Create a heading level 3',\n heading4: 'Heading 4',\n heading4Desc: 'Create a heading level 4',\n heading5: 'Heading 5',\n heading5Desc: 'Create a heading level 5',\n heading6: 'Heading 6',\n heading6Desc: 'Create a heading level 6',\n paragraph: 'Paragraph',\n paragraphDesc: 'Create a paragraph',\n blockQuote: 'Block quotation',\n blockQuoteDesc: 'Create a block quotation',\n numberedList: 'Numbered list',\n numberedListDesc: 'Create a numbered list',\n bulletedList: 'Bulleted list',\n bulletedListDesc: 'Create a bulleted list',\n checklist: 'Checklist',\n checklistDesc: 'Create a checklist',\n hr: 'Horizontal line',\n hrDesc: 'Insert a horizontal line',\n codeBlock: 'Code block',\n codeBlockDesc: 'Insert a code block',\n video: 'Video',\n videoDesc: 'Insert a video from YouTube',\n equation: 'Mathematical formula',\n equationDesc: 'Insert a TeX expression',\n image: 'Image',\n imageDesc: 'Upload an image',\n file: 'File',\n fileDesc: 'Upload a file',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: '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 help: 'Supported functions',\n placeholder: 'Type a TeX expression',\n },\n} satisfies BaseTranslation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `撤消 (${modifierText('mod+Z')})`,\n redo: `重做 (${modifierText('mod+Y')})`,\n selectAll: `全选 (${modifierText('mod+A')})`,\n paragraph: '正文',\n blockQuote: '引用',\n numberedList: '编号',\n bulletedList: '项目符号',\n checklist: '任务列表',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n alignJustify: '两端对齐',\n increaseIndent: '增加缩进',\n decreaseIndent: '减少缩进',\n bold: `粗体 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下划线 (${modifierText('mod+U')})`,\n strikethrough: '删除线',\n superscript: '上标',\n subscript: '下标',\n code: '行内代码',\n removeFormat: '清除格式',\n formatPainter: '格式刷',\n link: '链接',\n hr: '分割线',\n video: '视频',\n codeBlock: '代码块',\n heading: '标题',\n heading1: '标题 1',\n heading2: '标题 2',\n heading3: '标题 3',\n heading4: '标题 4',\n heading5: '标题 5',\n heading6: '标题 6',\n list: '列表',\n align: '对齐方式',\n indent: '缩进',\n fontFamily: '字体',\n fontSize: '文字大小',\n moreStyle: '更多样式',\n fontColor: '文字颜色',\n highlight: '文字背景',\n image: '图片',\n file: '文件',\n emoji: '表情',\n equation: '数学公式',\n removeColor: '默认',\n },\n slash: {\n heading1: '标题 1',\n heading1Desc: '创建标题 1',\n heading2: '标题 2',\n heading2Desc: '创建标题 2',\n heading3: '标题 3',\n heading3Desc: '创建标题 3',\n heading4: '标题 4',\n heading4Desc: '创建标题 4',\n heading5: '标题 5',\n heading5Desc: '创建标题 5',\n heading6: '标题 6',\n heading6Desc: '创建标题 6',\n paragraph: '正文',\n paragraphDesc: '把当前段落改成正文',\n blockQuote: '引用',\n blockQuoteDesc: '创建引用',\n numberedList: '编号',\n numberedListDesc: '创建编号列表',\n bulletedList: '项目符号',\n bulletedListDesc: '创建项目符号列表',\n checklist: '任务列表',\n checklistDesc: '创建任务列表',\n hr: '分割线',\n hrDesc: '插入分割线',\n codeBlock: '代码块',\n codeBlockDesc: '插入代码块',\n video: '视频',\n videoDesc: '插入 YouTube 视频',\n equation: '数学公式',\n equationDesc: '支持 TeX 语法',\n image: '图片',\n imageDesc: '上传图片',\n file: '文件',\n fileDesc: '上传文件',\n },\n link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n 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 help: '支持的功能',\n placeholder: '请输入 TeX 表达式',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `元に戻す (${modifierText('mod+Z')})`,\n redo: `やり直し (${modifierText('mod+Y')})`,\n selectAll: `すべて選択 (${modifierText('mod+A')})`,\n paragraph: 'テキスト',\n blockQuote: '引用ブロック',\n numberedList: '番号付きリスト',\n bulletedList: '箇条書きリスト',\n checklist: 'タスクリスト',\n alignLeft: '左揃え',\n alignCenter: '中心揃え',\n alignRight: '右揃え',\n alignJustify: '左右に並べ替え',\n increaseIndent: 'インデントを増やす',\n decreaseIndent: 'インデントを減らす',\n bold: `太字 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下線 (${modifierText('mod+U')})`,\n strikethrough: '取り消し線',\n superscript: '上付き文字',\n subscript: '下付き文字',\n code: 'インラインコード',\n removeFormat: '形式を削除',\n formatPainter: '形式ペインタ',\n link: 'リンク',\n hr: '区切り線',\n video: '動画',\n codeBlock: 'コードブロック',\n heading: 'タイトル',\n heading1: 'タイトル 1',\n heading2: 'タイトル 2',\n heading3: 'タイトル 3',\n heading4: 'タイトル 4',\n heading5: 'タイトル 5',\n heading6: 'タイトル 6',\n list: 'リスト',\n align: '文字揃え',\n indent: 'インデント',\n fontFamily: 'フォント',\n fontSize: '文字サイズ',\n moreStyle: 'その他のスタイル',\n fontColor: '文字色',\n highlight: '文字の背景',\n image: '画像',\n file: 'ファイル',\n emoji: '絵文字',\n equation: '数学公式',\n removeColor: 'デフォルト',\n },\n slash: {\n heading1: 'タイトル 1',\n heading1Desc: 'レベル 1 のタイトルを作成',\n heading2: 'タイトル 2',\n heading2Desc: 'レベル 2 のタイトルを作成',\n heading3: 'タイトル 3',\n heading3Desc: 'レベル 3 のタイトルを作成',\n heading4: 'タイトル 4',\n heading4Desc: 'レベル 4 のタイトルを作成',\n heading5: 'タイトル 5',\n heading5Desc: 'レベル 5 のタイトルを作成',\n heading6: 'タイトル 6',\n heading6Desc: 'レベル 6 のタイトルを作成',\n paragraph: 'テキスト',\n paragraphDesc: '段落を作成',\n blockQuote: '引用ブロック',\n blockQuoteDesc: '引用ブロックを作成',\n numberedList: '番号付きリスト',\n numberedListDesc: '番号付きリストを作成',\n bulletedList: '箇条書きリスト',\n bulletedListDesc: '箇条書きリストを作成',\n checklist: 'タスクリスト',\n checklistDesc: 'タスクリストを作成',\n hr: '区切り線',\n hrDesc: '水平線を挿入',\n codeBlock: 'コードブロック',\n codeBlockDesc: 'コードブロックを挿入',\n video: '動画',\n videoDesc: 'YouTube から動画を挿入',\n equation: '数学公式',\n equationDesc: 'TeX 数式を挿入',\n image: '画像',\n imageDesc: '画像をアップロード',\n file: 'ファイル',\n fileDesc: 'ファイルをアップロード',\n },\n link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンク文字',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '確認',\n unlink: 'リンクを削除',\n },\n 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 help: 'サポートされている機能',\n placeholder: 'TeX 数式を入力してください。',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `작업취소 (${modifierText('mod+Z')})`,\n redo: `작업재개 (${modifierText('mod+Y')})`,\n selectAll: `전체 선택 (${modifierText('mod+A')})`,\n paragraph: '텍스트',\n blockQuote: '인용문',\n numberedList: '순서 목록',\n bulletedList: '비순서 목록',\n checklist: '체크리스트',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n alignJustify: '좌우로 정렬',\n increaseIndent: '들여쓰기 증가',\n decreaseIndent: '들여쓰기 줄이기',\n bold: `굵게 (${modifierText('mod+B')})`,\n italic: `기울임꼴 (${modifierText('mod+I')})`,\n underline: `밑줄 (${modifierText('mod+U')})`,\n strikethrough: '취소선',\n superscript: '위첨자',\n subscript: '아래 첨자',\n code: '인라인 코드',\n removeFormat: '형식 지우기',\n formatPainter: '형식 페인터',\n link: '링크',\n hr: '구분선',\n video: '동영상',\n codeBlock: '코드 블록',\n heading: '제목',\n heading1: '제목 1',\n heading2: '제목 2',\n heading3: '제목 3',\n heading4: '제목 4',\n heading5: '제목 5',\n heading6: '제목 6',\n list: '목록',\n align: '정렬',\n indent: '들여쓰기',\n fontFamily: '글꼴',\n fontSize: '글자 크기',\n moreStyle: '더 많은 스타일',\n fontColor: '글자 색상',\n highlight: '글자 배경',\n image: '이미지',\n file: '파일',\n emoji: '이모지',\n equation: '수학 공식',\n removeColor: '기본색',\n },\n slash: {\n heading1: '제목 1',\n heading1Desc: '1 단계 제목을 작성',\n heading2: '제목 2',\n heading2Desc: '2 단계 제목을 작성',\n heading3: '제목 3',\n heading3Desc: '3 단계 제목을 작성',\n heading4: '제목 4',\n heading4Desc: '4 단계 제목을 작성',\n heading5: '제목 5',\n heading5Desc: '5 단계 제목을 작성',\n heading6: '제목 6',\n heading6Desc: '6 단계 제목을 작성',\n paragraph: '텍스트',\n paragraphDesc: '단락을 작성',\n blockQuote: '인용문',\n blockQuoteDesc: '인용문을 작성',\n numberedList: '순서 목록',\n numberedListDesc: '순서 목록을 작성',\n bulletedList: '비순서 목록',\n bulletedListDesc: '비순서 목록을 작성',\n checklist: '체크리스트',\n checklistDesc: '체크리스트를 작성',\n hr: '구분선',\n hrDesc: '구분선을 삽입',\n codeBlock: '코드 블록',\n codeBlockDesc: '코드 블록을 삽입',\n video: '동영상',\n videoDesc: '유튜브 동영상을 삽입',\n equation: '수학 공식',\n equationDesc: 'TeX 수식을 삽입',\n image: '이미지',\n imageDesc: '이미지를 업로드',\n file: '파일',\n fileDesc: '파일을 업로드',\n },\n link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '확인',\n unlink: '링크 제거',\n },\n 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 help: '지원되는 기능',\n placeholder: 'TeX 수식을 입력하세요',\n },\n} satisfies Translation;\n","import { i18nObject as initI18nObject, type FormattersInitializer } from 'typesafe-i18n';\nimport type { Formatters, Locales, Translations, TranslationFunctions } from './types';\n\nimport enUS from './en-US';\nimport zhCN from './zh-CN';\nimport ja from './ja';\nimport ko from './ko';\n\nconst localeTranslations = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n ja,\n ko,\n};\n\nconst locales: Locales[] = Object.keys(localeTranslations) as Locales[];\n\nconst loadedLocales: Record<Locales, Translations> = {} as Record<Locales, Translations>;\nconst loadedFormatters: Record<Locales, Formatters> = {} as Record<Locales, Formatters>;\n\nconst initFormatters: FormattersInitializer<Locales, Formatters> = () => {\n const formatters: Formatters = {\n // add your formatter functions here\n };\n return formatters;\n};\n\nconst loadFormatters = (locale: Locales): void => {\n loadedFormatters[locale] = initFormatters(locale);\n};\n\nconst loadLocale = (locale: Locales): void => {\n if (loadedLocales[locale]) {\n return;\n }\n loadedLocales[locale] = localeTranslations[locale] as Translations;\n loadFormatters(locale);\n};\n\nconst loadAllLocales = (): void => locales.forEach(loadLocale);\n\nexport const i18nObject = (locale: Locales): TranslationFunctions =>\n initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(\n locale,\n loadedLocales[locale],\n loadedFormatters[locale],\n );\n\nloadAllLocales();\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n DropdownLocation, DropdownDirection,\n DropdownItem, DropdownMenuItem,\n} from '../types/dropdown';\nimport { icons } from '../icons';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { template } from '../utils/template';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ntype DropdownConfig = DropdownItem & {\n root: Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n location?: DropdownLocation;\n direction?: DropdownDirection;\n onSelect: (value: string) => void;\n}\n\nexport class Dropdown {\n private config: DropdownConfig;\n\n private root: Nodes;\n\n private locale: TranslationFunctions;\n\n private location: DropdownLocation;\n\n private direction: DropdownDirection;\n\n private menuNode: Nodes;\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 this.location = config.location || 'local';\n this.direction = config.direction || 'auto';\n this.node = query(safeTemplate`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\">\n <button type=\"button\" name=\"${config.name}\" class=\"lake-dropdown-title\">\n <div class=\"lake-dropdown-${config.icon ? 'icon' : 'text'}\"></div>\n <div class=\"lake-dropdown-down-icon\"></div>\n </button>\n </div>\n `);\n this.menuNode = query('<ul class=\"lake-popup lake-dropdown-menu lake-custom-properties\" />');\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 listNode.on('mouseenter', () => {\n if (listNode.hasClass('lake-dropdown-item-selected')) {\n return;\n }\n listNode.addClass('lake-dropdown-item-hovered');\n });\n listNode.on('mouseleave', () => {\n listNode.removeClass('lake-dropdown-item-hovered');\n });\n if (config.menuType === 'character') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').text(menuItem.value);\n } else if (config.menuType === 'color') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').css('background-color', menuItem.value);\n }\n if (menuItem.icon) {\n const menuIconNode = query('<div class=\"lake-dropdown-menu-icon\"></div>');\n menuIconNode.append(menuItem.icon);\n listNode.prepend(menuIconNode);\n }\n const checkIcon = icons.get('check');\n if (checkIcon) {\n const checkNode = query('<div class=\"lake-dropdown-menu-check\"></div>');\n checkNode.append(checkIcon);\n listNode.prepend(checkNode);\n }\n }\n }\n\n private clickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n this.hideMenu();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private appendMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n const titleNode = this.node.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n menuNode.addClass(`lake-${config.menuType}-dropdown-menu`);\n if (config.menuWidth) {\n menuNode.css('width', config.menuWidth);\n }\n if (config.menuHeight) {\n menuNode.addClass('lake-dropdown-menu-with-scroll');\n menuNode.css('height', config.menuHeight);\n }\n this.apppendMenuItems(menuNode);\n if (this.location === 'local') {\n this.node.append(menuNode);\n } else {\n query(document.body).append(menuNode);\n }\n menuNode.on('click', event => {\n event.preventDefault();\n event.stopPropagation();\n const listItem = query(event.target as Node).closest('li');\n if (listItem.length === 0) {\n return;\n }\n const value = listItem.attr('value');\n Dropdown.setValue(this.node, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n this.node.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n this.hideMenu();\n });\n }\n\n private updatePosition(): void {\n const menuNode = this.menuNode;\n const dropdownNativeNode = this.node.get(0) as HTMLElement;\n const dropdownRect = dropdownNativeNode.getBoundingClientRect();\n // A overflow width on the left side, greater than 0 indicates an overflow.\n const leftOverflow = menuNode.width() - (dropdownRect.x + dropdownRect.width);\n // A overflow width on the right side, greater than 0 indicates an overflow.\n const rightOverflow = dropdownRect.x + menuNode.width() - window.innerWidth;\n const rightToLeft = rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow);\n if (this.location === 'local') {\n if (rightToLeft) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n if (this.direction === 'top') {\n menuNode.css('top', 'auto');\n menuNode.css('bottom', `${dropdownRect.height}px`);\n }\n return;\n }\n // A overflow width on the bottom side, greater than 0 indicates an overflow.\n const bottomOverflow = dropdownRect.y + dropdownRect.height + menuNode.height() - window.innerHeight;\n const dropdownX = dropdownRect.x + window.scrollX;\n const dropdownY = dropdownRect.y + window.scrollY;\n if (rightToLeft) {\n menuNode.css('left', `${dropdownX - menuNode.width() + dropdownRect.width}px`);\n } else {\n menuNode.css('left', `${dropdownX}px`);\n }\n if (bottomOverflow > 0) {\n menuNode.css('top', `${dropdownY - menuNode.height()}px`);\n } else {\n menuNode.css('top', `${dropdownY + dropdownRect.height}px`);\n }\n }\n\n private showMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n if (!menuNode.get(0).isConnected) {\n this.appendMenu();\n }\n if (this.node.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(this.node);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n menuNode.find('li').each(node => {\n const listNode = query(node);\n if (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n this.updatePosition();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n menuNode.css('visibility', '');\n }\n\n private hideMenu(): void {\n this.menuNode.hide();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n }\n\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const titleNode = this.node.find('.lake-dropdown-title');\n if (!config.downIcon) {\n titleNode.addClass('lake-dropdown-title-no-down');\n }\n if (config.width) {\n titleNode.css('width', config.width);\n }\n const tooltip = typeof config.tooltip === 'string' ? config.tooltip : config.tooltip(this.locale);\n titleNode.attr('title', tooltip);\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n if (config.icon) {\n iconNode.append(config.icon);\n }\n if (config.accentIcon) {\n iconNode.append(config.accentIcon);\n }\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n if (config.downIcon) {\n downIconNode.append(config.downIcon);\n }\n Dropdown.setValue(this.node, [defaultValue]);\n if (textNode.length > 0) {\n const menuMap = Dropdown.getMenuMap(config.menuItems, this.locale);\n textNode.text(menuMap.get(defaultValue) ?? defaultValue);\n }\n if (config.menuType === 'color') {\n this.updateColorAccent(titleNode, defaultValue);\n }\n this.node.append(titleNode);\n this.root.append(this.node);\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n iconNode.addClass('lake-dropdown-icon-hovered');\n });\n iconNode.on('mouseleave', () => {\n iconNode.removeClass('lake-dropdown-icon-hovered');\n });\n downIconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n downIconNode.addClass('lake-dropdown-down-icon-hovered');\n });\n downIconNode.on('mouseleave', () => {\n downIconNode.removeClass('lake-dropdown-down-icon-hovered');\n });\n } else {\n titleNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n titleNode.addClass('lake-dropdown-title-hovered');\n });\n titleNode.on('mouseleave', () => {\n titleNode.removeClass('lake-dropdown-title-hovered');\n });\n }\n if (config.menuType === 'color') {\n iconNode.on('click', event => {\n event.preventDefault();\n if (this.node.attr('disabled')) {\n return;\n }\n const value = this.node.attr('color') || config.defaultValue || '';\n config.onSelect(value);\n });\n }\n const triggerNode = (config.menuType === 'color' && downIconNode) ? downIconNode : titleNode;\n triggerNode.on('click', event => {\n event.preventDefault();\n this.showMenu();\n });\n }\n\n public unmount(): void {\n this.hideMenu();\n this.node.remove();\n }\n}\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n BoxToolbarButtonItem, BoxToolbarDropdownItem,\n BoxToolbarItem, BoxToolbarPlacement,\n} from '../types/box-toolbar';\nimport { query } from '../utils/query';\nimport { nodePosition } from '../utils/node-position';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Button } from './button';\nimport { Dropdown } from './dropdown';\nimport { i18nObject } from '../i18n';\n\ntype BoxToolbarConfig = {\n box: Box;\n items: ('|' | BoxToolbarItem)[];\n locale?: TranslationFunctions;\n placement?: BoxToolbarPlacement;\n};\n\nexport class BoxToolbar {\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 private dropdownList: Dropdown[] = [];\n\n public container: Nodes;\n\n constructor(config: BoxToolbarConfig) {\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-popup lake-box-toolbar 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 direction: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n item.onSelect(this.box, value);\n },\n });\n dropdown.render();\n this.dropdownList.push(dropdown);\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\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 = nodePosition(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 query(document.body).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 const viewport = this.box.node.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n }\n\n // Destroys the toolbar.\n public unmount(): void {\n for (const dropdown of this.dropdownList) {\n dropdown.unmount();\n }\n const viewport = this.box.node.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n window.removeEventListener('resize', this.resizeListener);\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(`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 an instance of the editor that includes the box.\n public getEditor(): Editor {\n const container = this.node.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error(`Box \"${this.name}\" (id=${this.node.id}) is not rendered in the editor.`);\n }\n return editor;\n }\n\n // Returns the container 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 let editor: Editor | undefined;\n try {\n editor = this.getEditor();\n } catch { /* empty */ }\n let toolbar: BoxToolbar | null = null;\n this.event.on('focus', () => {\n toolbar = new BoxToolbar({\n box: this,\n items,\n locale: editor ? editor.locale : undefined,\n });\n toolbar.render();\n });\n this.event.on('blur', () => {\n if (toolbar) {\n toolbar.unmount();\n toolbar = null;\n }\n });\n }\n\n // Renders the contents of the box.\n public render(): void {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return;\n }\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.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(`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 { 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 {\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 if (option.file) {\n const filename = option.filename || 'file';\n if (option.file instanceof Blob) {\n formData.append(filename, option.file, (option.file as any).name);\n } else {\n formData.append(filename, option.file);\n }\n }\n\n xhr.onerror = (e) => {\n if (option.onError) {\n option.onError(e);\n }\n };\n\n xhr.onload = () => {\n // allow success when 2xx status\n // see https://github.com/react-component/upload/issues/34\n if (xhr.status < 200 || xhr.status >= 300) {\n if (!option.onError) {\n return;\n }\n return option.onError(getError(option, xhr), getBody(xhr));\n }\n if (!option.onSuccess) {\n return;\n }\n return option.onSuccess(getBody(xhr), xhr);\n };\n\n xhr.open(option.method, option.action, true);\n\n // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n const headers = option.headers || {};\n\n // when set headers['X-Requested-With'] = null , can close default XHR header\n // see https://github.com/react-component/upload/issues/33\n if (headers['X-Requested-With'] !== null) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n Object.keys(headers).forEach(h => {\n if (headers[h] !== null) {\n xhr.setRequestHeader(h, headers[h]);\n }\n });\n\n xhr.send(formData);\n\n return xhr;\n}\n","import type { Editor } from '../editor';\nimport { debug } from '../utils/debug';\nimport { request } from '../utils/request';\nimport { Box } from '../models/box';\n\ntype UploadConfig = {\n editor: Editor;\n name: string;\n file: File;\n onError?: (error: string)=> void;\n onSuccess?: ()=> void;\n};\n\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-deep-element';\nexport * from './remove-zws';\nexport * from './change-tag-name';\nexport * from './fix-numbered-list';\nexport * from './append-break';\nexport * from './remove-break';\nexport * from './set-block-indent';\nexport * from './morph';\nexport * from './node-position';\nexport * from './scroll-to-node';\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, '&quot;')}; `;\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 { appendBreak } from '../utils/append-break';\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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const prevBlock = block.prev();\n if (prevBlock.length === 0) {\n return;\n }\n const bookmark = insertBookmark(range);\n mergeNodes(prevBlock, block);\n toBookmark(range, bookmark);\n fixList(range);\n}\n","import { removeBreak } from '../utils/remove-break';\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 removeBreak(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, getDeepElement, wrapNodeList, appendBreak } 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 = getDeepElement(block);\n let child = node.first();\n while(child.length > 0) {\n const nextNode = child.next();\n deepestBlock.append(child);\n if (deepestBlock.name === child.name || child.name === 'li') {\n child.remove(true);\n }\n child = nextNode;\n }\n node.replaceWith(block);\n }\n }\n toBookmark(range, bookmark);\n 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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n","import { TwoParts } from '../types/object';\nimport { splitNodes, appendBreak } 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 appendBreak(start);\n }\n if (end) {\n if (end.isEmpty) {\n appendBreak(end);\n }\n range.shrinkBefore(end);\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, getDeepElement, removeBreak } 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 removeBreak(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 const deepestMark = getDeepElement(newMark);\n deepestMark.append(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 { getDeepElement, 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 const deepestMark = getDeepElement(newMark);\n deepestMark.append(zeroWidthSpace);\n parts.start.after(newMark);\n removeEmptyMarks(parts.start);\n range.shrinkAfter(newMark);\n return;\n }\n splitMarks(range);\n const marks = range.getMarks();\n const bookmark = insertBookmark(range);\n for (const mark of marks) {\n if (!tagName || mark.name === tagName) {\n const parentNode = mark.parent();\n mark.remove(!mark.isEmpty);\n if (parentNode.length > 0) {\n parentNode.get(0).normalize();\n }\n }\n }\n removeZWS(range.commonAncestor);\n toBookmark(range, bookmark);\n}\n","import { query } from '../utils/query';\nimport { removeBreak } from '../utils/remove-break';\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 removeBreak(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 { splitMarks } from './split-marks';\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 splitMarks(range);\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 { appendBreak, 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 const breakNode = appendBreak(parentNode);\n range.setStartBefore(breakNode);\n range.collapseToStart();\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.getCurrentRange();\n }\n\n // Returns a range object currently selected.\n public getCurrentRange(): Range {\n if (this.selection.rangeCount > 0) {\n const range = this.selection.getRangeAt(0);\n return new Range(range);\n }\n return new Range();\n }\n\n // Adds the saved range to the native selection.\n public sync(): void {\n if (!this.container.contains(this.range.commonAncestor)) {\n return;\n }\n this.selection.removeAllRanges();\n this.selection.addRange(this.range.get());\n }\n\n // Updates the saved range with the range of the native selection.\n public updateByRange(): void {\n const newRange = this.getCurrentRange();\n if (!this.container.contains(newRange.commonAncestor)) {\n return;\n }\n if (\n this.range.startNode.get(0) === newRange.startNode.get(0) &&\n this.range.startOffset === newRange.startOffset &&\n this.range.endNode.get(0) === newRange.endNode.get(0) &&\n this.range.endOffset === newRange.endOffset\n ) {\n return;\n }\n this.range = newRange;\n }\n\n // Updates the saved range with the range represented by the bookmark.\n public updateByBookmark(): void {\n const range = this.range;\n const container = this.container;\n const boxFocus = container.find('lake-box[focus]');\n if (boxFocus.length > 0) {\n toBookmark(range, {\n anchor: new Nodes(),\n focus: boxFocus,\n });\n this.sync();\n return;\n }\n const anchor = container.find('lake-bookmark[type=\"anchor\"]');\n const focus = container.find('lake-bookmark[type=\"focus\"]');\n toBookmark(range, {\n anchor,\n focus,\n });\n this.sync();\n }\n\n public 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 this.sync();\n }\n\n // Inserts a box into the position of the selection.\n public insertBox(boxName: Parameters<typeof insertBox>[1], boxValue?: Parameters<typeof insertBox>[2]): Box {\n const box = insertBox(this.range, boxName, boxValue);\n if (!box) {\n throw new Error(`Box \"${boxName}\" cannot be inserted 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 container = this.selection.container;\n const range = this.selection.range;\n if (!container.contains(range.commonAncestor)) {\n range.shrinkAfter(container);\n }\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\n}\n","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 (!this.container.contains(range.commonAncestor)) {\n return newContainer;\n }\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const boxNodePath = boxNode.path();\n const newBoxNode = newContainer.find(boxNodePath);\n const newRange = range.clone();\n newRange.selectBox(newBoxNode);\n insertBookmark(newRange);\n return newContainer;\n }\n const startNodePath = range.startNode.path();\n const endNodePath = range.endNode.path();\n const newStartNode = newContainer.find(startNodePath);\n const newEndNode = newContainer.find(endNodePath);\n const newRange = range.clone();\n newRange.setStart(newStartNode, range.startOffset);\n newRange.setEnd(newEndNode, range.endOffset);\n insertBookmark(newRange);\n return newContainer;\n }\n\n public undo(): void {\n if (!this.list[this.index - 2]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index > 1) {\n const prevItem = this.list[this.index - 2];\n if (!prevItem) {\n break;\n }\n this.index--;\n const prevValue = this.getValue(prevItem);\n if (this.removeBookmark(prevValue) !== this.removeBookmark(value)) {\n this.morphContainer(prevItem);\n this.event.emit('undo', prevValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History undone (index: ${this.index})`);\n }\n\n public redo(): void {\n if (!this.list[this.index]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index < this.list.length) {\n const nextItem = this.list[this.index];\n if (!nextItem) {\n break;\n }\n this.index++;\n const nextValue = this.getValue(nextItem);\n if (this.removeBookmark(nextValue) !== this.removeBookmark(value)) {\n this.morphContainer(nextItem);\n this.event.emit('redo', nextValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History redone (index: ${this.index})`);\n }\n\n public continue(): void {\n this.canSave = true;\n }\n\n public pause(): void {\n this.canSave = false;\n }\n\n public save(options: SaveOptions = {}): void {\n const inputType = options.inputType ?? '';\n const update = options.update ?? false;\n const emitEvent = options.emitEvent ?? true;\n if (!this.canSave) {\n return;\n }\n const item = this.cloneContainer();\n const value = this.getValue(item);\n if (\n this.list[this.index - 1] &&\n this.removeBookmark(this.getValue(this.list[this.index - 1])) === this.removeBookmark(value)\n ) {\n return;\n }\n if (update) {\n this.list.splice(this.index - 1, Infinity, item);\n } else {\n this.list.splice(this.index, Infinity, item);\n this.index++;\n }\n if (this.list.length > this.limit) {\n this.list.shift();\n this.index = this.list.length;\n }\n debug(`History saved (index: ${this.index}, inputType: \"${inputType}\", update: ${update}, emitEvent: ${emitEvent})`);\n if (emitEvent) {\n this.event.emit('save', denormalizeValue(value), {\n inputType,\n update,\n emitEvent,\n });\n }\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Nodes } from '../models/nodes';\n\ntype EventItem = {\n type: string;\n listener: (event: KeyboardEvent) => void | boolean;\n};\n\nexport class Keystroke {\n private container: Nodes;\n\n private keydownEventList: EventItem[] = [];\n\n private keyupEventList: EventItem[] = [];\n\n constructor(container: Nodes) {\n this.container = container;\n this.container.on('keydown', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keydownEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n this.container.on('keyup', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keyupEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n }\n\n // Sets a keydown shortcut.\n public setKeydown(type: string, listener: EventListener) {\n this.keydownEventList.push({\n type,\n listener,\n });\n }\n\n // Sets a keyup shortcut.\n public setKeyup(type: string, listener: EventListener) {\n this.keyupEventList.push({\n type,\n listener,\n });\n }\n\n // Executes the keydown shortcuts.\n public keydown(type: string) {\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 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';\nimport { InitializePlugin, UnmountPlugin } from '../types/plugin';\n\nexport class Plugin {\n private pluginMap: Map<string, InitializePlugin> = new Map();\n\n public add(name: string, plugin: InitializePlugin) {\n if (this.pluginMap.get(name)) {\n throw new Error(`Plugin \"${name}\" is already defined.`);\n }\n this.pluginMap.set(name, plugin);\n }\n\n public loadAll(editor: Editor) {\n const unmountPluginMap: Map<string, UnmountPlugin> = new Map();\n for (const name of this.pluginMap.keys()) {\n const plugin = this.pluginMap.get(name);\n if (plugin && editor.config[name] !== false) {\n const result = plugin(editor);\n if (result) {\n unmountPluginMap.set(name, result);\n }\n }\n }\n return unmountPluginMap;\n }\n}\n","import debounce from 'debounce';\nimport isEqual from 'fast-deep-equal/es6';\nimport EventEmitter from 'eventemitter3';\nimport { version } from '../package.json';\nimport { SelectionState } from './types/object';\nimport { UnmountPlugin } from './types/plugin';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue, normalizeValue, query, getBox, scrollToNode, 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 slash: false,\n mention: false,\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 private unmountPluginMap: Map<string, UnmountPlugin> = new Map();\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 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 public popup: any = null;\n\n constructor(config: EditorConfig) {\n if (!config.root) {\n throw new Error('The root of the config must be specified.');\n }\n this.root = query(config.root);\n this.toolbar = config.toolbar;\n this.config = { ...defaultConfig };\n for (const key of Object.keys(config)) {\n this.config[key] = config[key];\n }\n this.containerWrapper = query('<div class=\"lake-container-wrapper\" />');\n this.container = query('<div class=\"lake-container\" />');\n this.overlayContainer = query('<div class=\"lake-overlay\" />');\n this.readonly = this.config.readonly;\n\n this.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 'data-readonly': this.readonly ? 'true' : 'false',\n });\n if (this.config.placeholder !== '') {\n this.container.attr('placeholder', this.config.placeholder);\n }\n\n this.selection = new Selection(this.container);\n this.command = new Command(this.selection);\n this.history = new History(this.selection);\n this.history.limit = this.config.historySize;\n this.keystroke = new Keystroke(this.container);\n\n editors.set(this.container.id, this);\n }\n\n private copyListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.updateSelectionRange();\n this.updateBoxSelectionStyle();\n this.emitStateChangeEvent();\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private updateSelectionRange = debounce(() => {\n this.selection.updateByRange();\n }, 1, {\n immediate: true,\n });\n\n // Updates the classes of all boxes when the current selection 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.getCurrentRange();\n const clonedRange = range.clone();\n clonedRange.adjustBox();\n this.container.find('lake-box').each(boxNativeNode => {\n const box = getBox(boxNativeNode);\n const boxContainer = box.getContainer();\n if (boxContainer.length === 0) {\n return;\n }\n if (range.compareBeforeNode(boxContainer) < 0 && range.compareAfterNode(boxContainer) > 0) {\n if (!(range.isCollapsed && range.startNode.get(0) === boxContainer.get(0) && range.startOffset === 0)) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-activated');\n box.event.emit('focus');\n return;\n }\n }\n if (clonedRange.intersectsNode(box.node)) {\n boxContainer.removeClass('lake-box-activated');\n if (range.isCollapsed) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.addClass('lake-box-focused');\n box.event.emit('focus');\n } else {\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-selected');\n box.event.emit('blur');\n }\n return;\n }\n boxContainer.removeClass('lake-box-activated');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.removeClass('lake-box-selected');\n box.event.emit('blur');\n });\n }, 50, {\n immediate: true,\n });\n\n // Triggers the statechange event when the current selection of the editor is changed.\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let appliedItems = this.selection.getAppliedItems();\n if (appliedItems.length > 0 && !this.container.contains(appliedItems[0].node)) {\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.setStart(paragraph, 0);\n range.collapseToStart();\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 // Handles input event.\n private handleInputEvent(event: InputEvent | CompositionEvent) {\n this.selection.updateByRange();\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n return;\n }\n const inputType = event instanceof CompositionEvent ? 'insertText' : event.inputType;\n if (inputType === 'insertText') {\n const inputData = event.data ?? '';\n if (inputData.length > 1) {\n this.history.save({\n inputType: 'insertText',\n update: false,\n });\n return;\n }\n this.unsavedInputData += inputData;\n this.unsavedInputCount++;\n if (this.unsavedInputData.length < this.config.minChangeSize) {\n this.history.save({\n inputType: 'insertText',\n update: this.unsavedInputCount > 1,\n });\n } else {\n this.history.save({\n inputType: 'insertText',\n update: true,\n });\n this.resetUnsavedInputData();\n }\n return;\n }\n this.history.save();\n }\n\n // Binds events about inputting text.\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n this.container.removeClass('lake-placeholder');\n });\n this.container.on('compositionend', event => {\n this.isComposing = false;\n this.handleInputEvent(event as CompositionEvent);\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n this.isComposing = inputEvent.isComposing;\n if (this.isComposing) {\n return;\n }\n this.handleInputEvent(event as InputEvent);\n });\n }\n\n // 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 if (options.inputType !== 'insertText') {\n this.selection.sync();\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.shrinkBefore(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 range.adjustBr();\n return changed;\n }\n\n // Sets default config for a plugin.\n public setPluginConfig(name: string, config: {[key: string]: any}): void {\n if (typeof this.config[name] !== 'object') {\n this.config[name] = {};\n }\n for (const key of Object.keys(config)) {\n if (this.config[name][key] === undefined) {\n this.config[name][key] = config[key];\n }\n }\n }\n\n // 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 scrollToNode(artificialCaret, {\n behavior: 'instant',\n block: 'nearest',\n inline: 'nearest',\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 this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.unmountPluginMap = Editor.plugin.loadAll(this);\n if (!this.readonly) {\n this.selection.updateByBookmark();\n this.history.save({\n emitEvent: false,\n });\n }\n this.renderBoxes();\n if (this.toolbar) {\n this.toolbar.render(this);\n }\n document.addEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.addEventListener('cut', this.cutListener);\n document.addEventListener('paste', this.pasteListener);\n document.addEventListener('selectionchange', this.selectionchangeListener);\n document.addEventListener('click', this.clickListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n // Destroys the editor.\n public unmount(): void {\n // Executes delayed executions immediately.\n this.updateSelectionRange.flush();\n this.updateBoxSelectionStyle.flush();\n this.emitStateChangeEvent.flush();\n for (const name of this.unmountPluginMap.keys()) {\n const unmountPlugin = this.unmountPluginMap.get(name);\n if (unmountPlugin) {\n unmountPlugin();\n debug(`Plugin \"${name}\" unmounted`);\n }\n }\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.removeBoxGarbage();\n this.container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n const box = getBox(boxNode);\n box.unmount();\n });\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.off();\n this.root.removeClass('lake-custom-properties');\n this.root.empty();\n document.removeEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.removeEventListener('cut', this.cutListener);\n document.removeEventListener('paste', this.pasteListener);\n document.removeEventListener('selectionchange', this.selectionchangeListener);\n document.removeEventListener('click', this.clickListener);\n }\n }\n}\n","import { 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 public 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 private dropdownList: Dropdown[] = [];\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 appendNormalButton(editor: Editor, item: ToolbarButtonItem): void {\n const button = new Button({\n root: this.container,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n item.onClick(editor, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(editor: Editor, item: ToolbarDropdownItem) {\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 location: 'local',\n direction: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n this.dropdownList.push(dropdown);\n }\n\n private appendUploadButton(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(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 => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\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.append(this.container);\n for (const name of this.items) {\n if (name === '|') {\n this.appendDivider();\n } else {\n let item;\n if (typeof name === 'string') {\n item = toolbarItemMap.get(name);\n if (!item) {\n throw new Error(`ToolbarItem \"${name}\" has not been defined yet.`);\n }\n } else {\n item = name;\n }\n if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendNormalButton(editor, item);\n } else if (item.type === 'dropdown') {\n this.allMenuMap.set(item.name, Dropdown.getMenuMap(item.menuItems, editor.locale));\n this.dropdownItemList.push(item);\n this.appendDropdown(editor, item);\n } else if (item.type === 'upload') {\n this.appendUploadButton(editor, item);\n }\n }\n }\n }\n\n // Destroys the toolbar.\n public unmount(): void {\n for (const dropdown of this.dropdownList) {\n dropdown.unmount();\n }\n this.root.removeClass('lake-custom-properties');\n this.container.remove();\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\n\nexport default {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-hr\"><hr /></div>');\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: () => '<hr />',\n} as BoxComponent;\n","import debounce from 'debounce';\nimport { 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 default {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-code-block\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const codeBlockNativeNode = rootNode.get(0) as HTMLElement;\n if (!codeBlockNativeNode) {\n return;\n }\n // begin to create CodeMirror\n const CodeMirror = window.LakeCodeMirror;\n if (!CodeMirror) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n rootNode.addClass('lake-code-block-error');\n rootNode.text(`\n The code cannot be displayed because window.LakeCodeMirror is not found.\n Please check if the \"lake-codemirror\" library is added to this page.\n `.trim());\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n return;\n }\n const {\n EditorState, Compartment, EditorView,\n keymap, history, defaultKeymap, historyKeymap,\n indentWithTab, syntaxHighlighting,\n } = CodeMirror;\n const defaultLangItems = CodeMirror.langItems;\n const codeBlockConfig = editor.config.codeBlock;\n const langItems = defaultLangItems.filter(\n (item: any) => codeBlockConfig.langList.indexOf(item.value) >= 0,\n );\n // language menu items\n const langItemMap: Map<string, any> = new Map();\n for (const item of langItems) {\n langItemMap.set(item.value, item);\n }\n const boxValue = box.value;\n const langItem = langItemMap.get(boxValue.lang);\n const language = new Compartment();\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n const updateListener = EditorView.updateListener.of((update: any) => {\n if (!update.docChanged) {\n return;\n }\n changeHandler(update.state.doc.toString());\n });\n const codeEditor = new EditorView({\n parent: codeBlockNativeNode,\n doc: boxValue.code ?? '',\n extensions: [\n EditorState.readOnly.of(editor.readonly),\n EditorView.editable.of(!editor.readonly),\n history(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n indentWithTab,\n ]),\n syntaxHighlighting(getHighlightStyle(CodeMirror)),\n language.of(langItem && langItem.component ? langItem.component() : []),\n updateListener,\n ],\n });\n rootNode.find('[contenteditable=\"true\"]').attr('tabindex', '-1');\n const dropdown = new Dropdown({\n root: rootNode,\n name: 'langType',\n downIcon: icons.get('down'),\n defaultValue: langItem ? boxValue.lang : codeBlockConfig.defaultLang,\n tooltip: editor.locale.codeBlock.langType(),\n location: 'global',\n menuType: 'list',\n menuHeight: '200px',\n menuItems: langItems.map((item: any) => ({\n value: item.value,\n text: item.text,\n })),\n onSelect: value => {\n box.updateValue({\n lang: value,\n });\n box.unmount();\n box.render();\n editor.selection.selectBox(box);\n editor.history.save();\n },\n });\n dropdown.render();\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n dropdown.unmount();\n codeEditor.destroy();\n debug('CodeMirror destroyed');\n });\n },\n} as BoxComponent;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\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 var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport 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 try {\n // Test case throws an exception on Firefox.\n pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n } catch { /* empty */ }\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 { 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 const dataSource: DataSource = [];\n let currentIndex = 0;\n const allImageBox = editor.container.find('lake-box[name=\"image\"]');\n allImageBox.each((node, index) => {\n const imageBox = getBox(node);\n const imageValue = imageBox.value;\n if (imageValue.status !== 'done') {\n return;\n }\n dataSource.push({\n id: index,\n src: imageValue.originalUrl || imageValue.url,\n width: imageValue.originalWidth || imageValue.width,\n height: imageValue.originalHeight || imageValue.height,\n alt: imageValue.name,\n });\n if (box.node.id === imageBox.node.id) {\n currentIndex = index;\n }\n });\n const lightbox = new PhotoSwipeLightbox({\n pswpModule: PhotoSwipe,\n dataSource,\n mainClass: 'lake-pswp',\n zoom: false,\n returnFocus: false,\n arrowPrevSVG: icons.get('left'),\n arrowNextSVG: icons.get('right'),\n closeSVG: icons.get('close'),\n arrowPrevTitle: editor.locale.image.previous(),\n arrowNextTitle: editor.locale.image.next(),\n closeTitle: editor.locale.image.close(),\n errorMsg: editor.locale.image.loadingError(),\n });\n lightbox.on('uiRegister', () => {\n const pswp: any = lightbox.pswp;\n pswp.ui.registerElement({\n name: 'zoom-out-button',\n order: 8,\n isButton: true,\n title: editor.locale.image.zoomOut(),\n html: icons.get('zoomOut'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel - step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n pswp.ui.registerElement({\n name: 'zoom-in-button',\n order: 9,\n isButton: true,\n title: editor.locale.image.zoomIn(),\n html: icons.get('zoomIn'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel + step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n });\n lightbox.addFilter('thumbEl', (thumbnail, itemData) => {\n const imgNode = allImageBox.eq(itemData.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.get(0) as HTMLElement;\n }\n return thumbnail as HTMLElement;\n });\n lightbox.addFilter('placeholderSrc', (placeholderSrc, slide) => {\n const imgNode = allImageBox.eq(slide.data.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.attr('src');\n }\n return placeholderSrc;\n });\n lightbox.on('openingAnimationEnd', () => {\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n box.event.emit('closefullscreen');\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Displays error icon and filename.\nasync function renderError(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\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 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 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 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 default {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'loading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n if (value.width && value.height && boxContainer.find('.lake-progress').length === 0) {\n boxContainer.css({\n width: `${value.width}px`,\n height: `${value.height}px`,\n });\n boxContainer.empty();\n const placeholderNode = query('<div class=\"lake-image-placeholder\" />');\n boxContainer.append(placeholderNode);\n const imageIcon = icons.get('image');\n if (imageIcon) {\n placeholderNode.append(imageIcon);\n }\n }\n if (boxContainer.first().length === 0) {\n // The following code is for unit testing because some test cases need to\n // select the content of the box before it is completely loaded.\n // Example:\n // range.setStart(box.getContainer(), 1);\n boxContainer.append('<div />');\n }\n // for test\n if (value.status === 'loading') {\n return;\n }\n 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} as BoxComponent;\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 { 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 appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\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 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 default {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n const locale = editor.locale;\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-video\" />');\n boxContainer.empty();\n boxContainer.css({\n width: '',\n height: '',\n });\n boxContainer.append(rootNode);\n if (!value.url) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const formNode = query(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 = formNode.find('input[name=\"url\"]').value();\n if (url.indexOf('https://www.youtube.com/') < 0 || getVideoId(url) === '') {\n editor.config.onMessage('error', locale.video.urlError());\n return;\n }\n box.updateValue('url', url);\n editor.history.save();\n formNode.remove();\n showVideo(box);\n },\n });\n formNode.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n button.render();\n rootNode.append(formNode);\n appendButtonGroup(box);\n } else {\n showVideo(box);\n }\n },\n} as BoxComponent;\n","import { 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 editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n];\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\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 default {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-file\" />');\n rootNode.addClass(`lake-file-${value.status}`);\n appendContent(rootNode, box);\n boxContainer.empty();\n boxContainer.append(rootNode);\n if (!editor.readonly) {\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n 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} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\n\nexport default {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query(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} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\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.readonly) {\n box.node.hide();\n return;\n }\n const defaultCode = (box.value.code || '').trim();\n const rootNode = box.getContainer().find('.lake-equation');\n rootNode.addClass('lake-equation-error');\n rootNode.text(defaultCode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n editor.config.onMessage('warning', `\n Box \"${box.name}\" (id: ${box.node.id}) failed to display because window.katex was not found.\n Please check if the \"katex\" library is added to this page.\n `.trim());\n}\n\nexport default {\n type: 'inline',\n name: 'equation',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-equation\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const katex = window.katex;\n if (!katex) {\n renderError(box);\n return;\n }\n const equationConfig = editor.config.equation;\n const defaultCode = (box.value.code || '').trim();\n const viewNode = query('<div class=\"lake-equation-view\" />');\n rootNode.append(viewNode);\n viewNode.html(window.katex.renderToString(defaultCode || defaultExpression, {\n throwOnError: false,\n }));\n viewNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n const formNode = query(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 textareaNode.value(defaultCode);\n textareaNode.on('input', () => {\n const code = textareaNode.value().trim();\n viewNode.html(window.katex.renderToString(code || defaultExpression, {\n throwOnError: false,\n }));\n box.updateValue('code', code);\n });\n const saveButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'save',\n type: 'primary',\n text: editor.locale.equation.save(),\n onClick: () => {\n editor.selection.range.selectBoxEnd(box.node);\n editor.selection.sync();\n editor.history.save();\n },\n });\n saveButton.render();\n const helpButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'help',\n icon: icons.get('question'),\n tooltip: editor.locale.equation.help(),\n onClick: () => {\n window.open(equationConfig.helpUrl);\n },\n });\n helpButton.render();\n },\n} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\n\nexport default {\n type: 'inline',\n name: 'mention',\n render: box => {\n const editor = box.getEditor();\n const { getProfileUrl } = editor.config.mention;\n const value = box.value;\n const url = getProfileUrl ? getProfileUrl(value) : '#';\n const boxContainer = box.getContainer();\n const rootNode = query(safeTemplate`\n <div class=\"lake-mention\"><a href=\"${url}\">@${value.nickname ?? value.name}</a></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n if (!editor.readonly) {\n rootNode.find('a').on('click', (event: Event) => {\n event.preventDefault();\n });\n }\n },\n} as BoxComponent;\n","import 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 removeBreak, 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 removeBreak(block);\n }\n if (block.isEmpty && block.name === 'p') {\n block.replaceWith(otherNode);\n otherNode.find('lake-box').each(node => {\n getBox(node).render();\n });\n range.shrinkAfter(otherNode);\n return;\n }\n let child = otherNode.first();\n while(child.length > 0) {\n if (child.name === 'li') {\n child = child.first();\n }\n const nextSibling = child.next();\n editor.selection.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', (targetNode: Nodes) => {\n if (editor.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"formatPainter\"]').length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","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 { nodePosition } from '../utils/node-position';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { i18nObject } from '../i18n';\n\ntype LinkPopupConfig = {\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n onShow?: () => void;\n onHide?: () => void;\n};\n\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private locale: TranslationFunctions;\n\n private linkNode: Nodes | null = null;\n\n public container: Nodes;\n\n constructor(config?: LinkPopupConfig) {\n this.config = config || {};\n this.locale = this.config.locale || i18nObject('en-US');\n this.container = query(safeTemplate`\n <div class=\"lake-popup lake-link-popup lake-custom-properties\">\n <div class=\"lake-row\">${this.locale.link.url()}</div>\n <div class=\"lake-row lake-url-row\">\n <input type=\"text\" name=\"url\" />\n </div>\n <div class=\"lake-row\">${this.locale.link.title()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"title\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n }\n\n // Writes the specified text to the system clipboard\n private async writeClipboardText(text: string): Promise<boolean> {\n let error = false;\n try {\n if (window.LAKE_TEST) {\n error = window.LAKE_ERROR;\n } else {\n await navigator.clipboard.writeText(text);\n }\n } catch {\n error = true;\n }\n return new Promise(resolve => {\n resolve(error);\n });\n }\n\n // Copy link to clipboard\n private appendCopyButton(): void {\n const config = this.config;\n let timeoutId: number | null = null;\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'copy',\n icon: icons.get('copy'),\n tooltip: this.locale.link.copy(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n this.writeClipboardText(url).then((error: boolean) => {\n const svgNode = this.container.find('button[name=\"copy\"] svg');\n svgNode.hide();\n if (error) {\n svgNode.eq(2).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n return;\n }\n svgNode.eq(1).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n }\n timeoutId = window.setTimeout(() => {\n svgNode.hide();\n svgNode.eq(0).show('inline');\n }, 2000);\n });\n },\n });\n button.render();\n const copyDoneIcon = icons.get('checkCircle');\n if (copyDoneIcon) {\n button.node.append(copyDoneIcon);\n }\n const copyErrorIcon = icons.get('warningCircle');\n if (copyErrorIcon) {\n button.node.append(copyErrorIcon);\n }\n }\n\n // Open link in new tab\n private appendOpenButton(): void {\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'open',\n icon: icons.get('open'),\n tooltip: this.locale.link.open(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n window.open(url);\n },\n });\n button.render();\n }\n\n // Save link\n private appendSaveButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'save',\n icon: icons.get('check'),\n text: this.locale.link.save(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const linkNode = this.linkNode;\n this.save();\n this.hide();\n if (this.config.onSave) {\n this.config.onSave(linkNode);\n }\n },\n });\n button.render();\n this.container.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n this.container.find('input[name=\"title\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n }\n\n // Remove link\n private appendUnlinkButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'unlink',\n icon: icons.get('unlink'),\n text: this.locale.link.unlink(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const lastChild = this.linkNode.last();\n this.linkNode.remove(true);\n this.hide();\n if (this.config.onRemove) {\n this.config.onRemove(lastChild);\n }\n },\n });\n button.render();\n }\n\n private scrollListener = () => this.position();\n\n private resizeListener = () => this.position();\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n let title = this.container.find('input[name=\"title\"]').value();\n if (url === '' && title === '') {\n this.linkNode.remove();\n return;\n }\n if (title === '') {\n title = url;\n }\n this.linkNode.attr('href', url);\n this.linkNode.text(title);\n }\n\n public position(): void {\n if (!this.linkNode) {\n return;\n }\n const position = nodePosition(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 const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n if (linkRect.x + this.container.width() > window.innerWidth) {\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n this.container.css('top', `${linkY - this.container.height()}px`);\n } else {\n this.container.css('top', `${linkY + linkRect.height}px`);\n }\n }\n\n public show(linkNode: Nodes): void {\n if (!this.container.get(0).isConnected) {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n query(document.body).append(this.container);\n }\n if (this.linkNode && this.linkNode.get(0) === linkNode.get(0)) {\n return;\n }\n this.linkNode = linkNode;\n const url = linkNode.attr('href');\n const title = linkNode.text();\n this.container.find('input[name=\"url\"]').value(url);\n if (title !== url) {\n this.container.find('input[name=\"title\"]').value(title);\n }\n this.container.css('visibility', 'hidden');\n this.container.show();\n this.position();\n this.container.css('visibility', '');\n this.container.find('input[name=\"url\"]').focus();\n const viewport = linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n if (this.config.onShow) {\n this.config.onShow();\n }\n }\n\n public hide(): void {\n if (this.linkNode) {\n const viewport = this.linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n }\n this.linkNode = null;\n this.container.hide();\n window.removeEventListener('resize', this.resizeListener);\n if (this.config.onHide) {\n this.config.onHide();\n }\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { 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 locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onShow: () => {\n editor.popup = popup;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (popup.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (\n linkNode.length === 0 ||\n !editor.container.contains(linkNode) ||\n linkNode.closest('lake-box').length > 0\n ) {\n if (!popup.visible) {\n return;\n }\n editor.selection.sync();\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const 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 return () => popup.unmount();\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 editor.setPluginConfig('equation', {\n helpUrl: 'https://katex.org/docs/supported',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('equation', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('equation', value);\n editor.history.save();\n const boxContainer = box.getContainer();\n boxContainer.addClass('lake-box-activated');\n boxContainer.find('textarea').focus();\n },\n });\n};\n","import type { Editor } from '..';\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 { isKeyHotkey } from 'is-hotkey';\nimport { query } from '../utils/query';\nimport { scrollToNode } from '../utils/scroll-to-node';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nexport type MenuConfig<Item> = {\n items: Item[];\n onShow?: () => void;\n onHide?: () => void;\n};\n\nconst emptyCallback = () => {};\n\nexport abstract class Menu<Item> {\n\n private horizontalDirection: 'left' | 'right' = 'right';\n\n private verticalDirection: 'top' | 'bottom' = 'bottom';\n\n private onShow: () => void;\n\n private onHide: () => void;\n\n protected items: Item[];\n\n protected range: Range | null = null;\n\n protected noMouseEvent: boolean = false;\n\n public container: Nodes;\n\n constructor(config: MenuConfig<Item>) {\n this.items = config.items;\n this.onShow = config.onShow || emptyCallback;\n this.onHide = config.onHide || emptyCallback;\n this.container = query('<ul class=\"lake-popup lake-menu lake-custom-properties\" />');\n }\n\n protected abstract getItemNode(item: Item): Nodes;\n\n protected abstract search(keyword: string): Item[];\n\n private appendItemNode(itemNode: Nodes): void {\n itemNode.on('mouseenter', () => {\n if (this.noMouseEvent) {\n return;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n itemNode.addClass('lake-menu-item-selected');\n });\n itemNode.on('mouseleave', () => {\n if (this.noMouseEvent) {\n return;\n }\n itemNode.removeClass('lake-menu-item-selected');\n });\n this.container.append(itemNode);\n }\n\n private appendItems(items: Item[]): void {\n this.container.empty();\n for (const item of items) {\n const itemNode = this.getItemNode(item);\n itemNode.addClass('lake-menu-item');\n this.appendItemNode(itemNode);\n }\n }\n\n private selectFirstItemNodeIfNeeded(): void {\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n this.container.find('.lake-menu-item').eq(0).addClass('lake-menu-item-selected');\n }\n }\n\n private keydownListener = (event: KeyboardEvent) => {\n if (isKeyHotkey('escape', event)) {\n event.preventDefault();\n this.hide();\n return;\n }\n const isDownKey = isKeyHotkey('down', event);\n const isUpKey = isKeyHotkey('up', event);\n const isEnterKey = isKeyHotkey('enter', event);\n if (!isDownKey && !isUpKey && !isEnterKey) {\n return;\n }\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n const firstItem = this.container.find('.lake-menu-item').eq(0);\n scrollToNode(firstItem, {\n behavior: 'instant',\n block: 'start',\n });\n firstItem.addClass('lake-menu-item-selected');\n return;\n }\n this.noMouseEvent = true;\n if (isDownKey) {\n event.preventDefault();\n let nextItemNode = selectedItemNode.next();\n if (nextItemNode.length === 0) {\n nextItemNode = this.container.find('.lake-menu-item').eq(0);\n }\n scrollToNode(nextItemNode, {\n behavior: 'instant',\n block: 'end',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n nextItemNode.addClass('lake-menu-item-selected');\n } else if (isUpKey) {\n event.preventDefault();\n let prevItemNode = selectedItemNode.prev();\n if (prevItemNode.length === 0) {\n const itemNode = this.container.find('.lake-menu-item');\n prevItemNode = itemNode.eq(itemNode.length - 1);\n }\n scrollToNode(prevItemNode, {\n behavior: 'instant',\n block: 'start',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n prevItemNode.addClass('lake-menu-item-selected');\n } else if (isEnterKey) {\n event.preventDefault();\n selectedItemNode.emit('click');\n }\n window.setTimeout(() => {\n this.noMouseEvent = false;\n }, 50);\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n if (this.container.contains(targetNode)) {\n return;\n }\n this.hide();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(keepDirection: boolean = false): void {\n if (!this.range || this.range.isCollapsed) {\n return;\n }\n const rangeRect = this.range.get().getBoundingClientRect();\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n if (!keepDirection) {\n if (rangeRect.x + this.container.width() > window.innerWidth) {\n this.horizontalDirection = 'left';\n } else {\n this.horizontalDirection = 'right';\n }\n if (rangeRect.y + rangeRect.height + this.container.height() > window.innerHeight) {\n this.verticalDirection = 'top';\n } else {\n this.verticalDirection = 'bottom';\n }\n }\n if (this.horizontalDirection === 'left') {\n this.container.css('left', `${rangeX - this.container.width() + rangeRect.width}px`);\n } else {\n this.container.css('left', `${rangeX}px`);\n }\n if (this.verticalDirection === 'top') {\n this.container.css('top', `${rangeY - this.container.height() - 5}px`);\n } else {\n this.container.css('top', `${rangeY + rangeRect.height + 5}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public update(keyword: string): void {\n const items = this.search(keyword);\n if (items.length === 0) {\n this.hide();\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n this.container.css('visibility', '');\n }\n\n public show(range: Range, keyword?: string): void {\n if (range.isCollapsed) {\n return;\n }\n if (this.items.length === 0) {\n return;\n }\n if (!this.container.get(0).isConnected) {\n query(document.body).append(this.container);\n }\n // append all items for fixing the container's width\n this.appendItems(this.items);\n this.selectFirstItemNodeIfNeeded();\n this.range = range;\n this.container.css('visibility', 'hidden');\n this.container.show();\n (this.container.get(0) as Element).scrollTo(0, 0);\n this.updatePosition();\n // fix the container's width\n this.container.css('width', '');\n this.container.css('width', `${this.container.width()}px`);\n const viewport = range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('keydown', this.keydownListener, true);\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n if (keyword) {\n const items = this.search(keyword);\n if (items.length === 0) {\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n }\n this.container.css('visibility', '');\n this.onShow();\n }\n\n public hide(): void {\n if (this.range) {\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n }\n this.range = null;\n this.container.hide();\n document.removeEventListener('keydown', this.keydownListener, true);\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n this.onHide();\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { MentionItem } from '../types/mention';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Menu, MenuConfig } from './menu';\n\ntype OnSelect = (event: Event, item: MentionItem) => void;\n\ntype MentionMenuConfig = MenuConfig<MentionItem> & {\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\nexport class MentionMenu extends Menu<MentionItem> {\n\n private onSelect: OnSelect;\n\n constructor(config: MentionMenuConfig) {\n super(config);\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-mention-menu');\n }\n\n protected getItemNode(item: MentionItem): Nodes {\n const itemNode = query(safeTemplate`\n <li>\n <div class=\"lake-mention-avatar\"></div>\n <div class=\"lake-mention-nickname\">${item.nickname ?? item.name}</div>\n <div class=\"lake-mention-name\">(${item.name})</div>\n </li>\n `);\n const avatarNode = itemNode.find('.lake-mention-avatar');\n if (item.avatar) {\n avatarNode.append(item.avatar);\n } else {\n avatarNode.remove();\n }\n if (!item.nickname) {\n itemNode.find('.lake-mention-name').remove();\n }\n itemNode.on('click', event => this.onSelect(event, item));\n return itemNode;\n }\n\n protected search(keyword: string): MentionItem[] {\n keyword = keyword.toLowerCase();\n const items: MentionItem[] = [];\n for (const item of this.items) {\n const nickname = item.nickname ?? item.name;\n if (\n item.name.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(item);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { MentionItem } from '../types/mention';\nimport type { Editor, Range } from '..';\nimport { request } from '../utils/request';\nimport { MentionMenu } from '../ui/mention-menu';\n\nfunction getKeyword(range: Range): string | null {\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return null;\n }\n let text = targetRange.startNode.text().slice(targetRange.startOffset + 1, targetRange.endOffset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n return text;\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('mention', {\n requestMethod: 'GET',\n items: [],\n getProfileUrl: (value: MentionItem) => `/${value.name}`,\n });\n if (editor.readonly) {\n return;\n }\n const { requestAction, requestMethod, items } = editor.config.mention;\n let menu: MentionMenu | null = null;\n const selectListener = (event: Event, item: MentionItem) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n const targetRange = editor.selection.range.getCharacterRange('@');\n if (targetRange) {\n targetRange.get().deleteContents();\n }\n editor.selection.insertBox('mention', item);\n editor.history.save();\n };\n const showListener = () => {\n editor.popup = menu;\n };\n const hideListener = () => {\n editor.popup = null;\n };\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return;\n }\n const keyword = getKeyword(range);\n if (keyword === null) {\n return;\n }\n if (!menu) {\n if (requestAction) {\n request({\n onSuccess: body => {\n if (!body.data) {\n return;\n }\n menu = new MentionMenu({\n items: body.data,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n },\n action: requestAction,\n method: requestMethod,\n });\n } else {\n menu = new MentionMenu({\n items,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n }\n return;\n }\n menu.show(targetRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu || !menu.visible) {\n if (keyboardEvent.key === '@') {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const keyword = getKeyword(range);\n if (keyword === null) {\n if (menu) {\n menu.hide();\n }\n return;\n }\n if (menu) {\n menu.update(keyword);\n }\n });\n return () => {\n if (menu) {\n menu.unmount();\n }\n };\n};\n","import type { Editor } from '..';\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 { getBox, appendBreak, 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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n\nfunction mergeWithPreviousBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let prevBlock = block.prev();\n if (prevBlock.length === 0) {\n if (block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n }\n return;\n }\n if (prevBlock.isBox) {\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 (\n range.isCollapsed && box.name === 'codeBlock' &&\n (boxValue.code === undefined || boxValue.code === '')\n ) {\n event.preventDefault();\n editor.selection.removeBox(box);\n editor.history.save();\n }\n return;\n }\n editor.fixContent();\n if (range.isBoxStart) {\n const boxNode = range.startNode.closest('lake-box');\n const prevNode = boxNode.prev();\n if (prevNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (prevNode.isBlock) {\n if (prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n 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.isMark || prevNode.name === 'a') && prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1 && prevNode.parent().isBlock) {\n event.preventDefault();\n const block = prevNode.closestBlock();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.name === 'br' && nextNode.length > 0) {\n event.preventDefault();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n editor.history.save();\n return;\n }\n const startText = range.getStartText();\n if (startText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if(\n block.css('margin-left') !== '' ||\n block.css('text-indent') !== '' ||\n block.attr('indent') !== ''\n ) {\n 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('left', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n if (prevNode.isInlineBox) {\n range.selectBox(prevNode);\n return;\n }\n range.shrinkAfter(prevNode);\n return;\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n return;\n }\n if (range.isBoxEnd) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n event.preventDefault();\n range.selectBoxStart(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n range.selectBox(prevNode);\n }\n });\n editor.keystroke.setKeydown('right', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n if (range.isBoxEnd) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n if (nextNode.isInlineBox) {\n range.selectBox(nextNode);\n return;\n }\n range.shrinkBefore(nextNode);\n return;\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n return;\n }\n event.preventDefault();\n range.selectBoxEnd(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n range.selectBox(nextNode);\n }\n });\n editor.keystroke.setKeydown('up', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n }\n });\n editor.keystroke.setKeydown('down', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n });\n};\n","import type { Editor } from '..';\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 { SlashItem } from '../types/slash';\nimport { icons } from '../icons';\n\nexport const slashItems: SlashItem[] = [\n {\n name: 'heading1',\n type: 'button',\n icon: icons.get('heading1'),\n title: locale => locale.slash.heading1(),\n description: locale => locale.slash.heading1Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h1');\n },\n },\n {\n name: 'heading2',\n type: 'button',\n icon: icons.get('heading2'),\n title: locale => locale.slash.heading2(),\n description: locale => locale.slash.heading2Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h2');\n },\n },\n {\n name: 'heading3',\n type: 'button',\n icon: icons.get('heading3'),\n title: locale => locale.slash.heading3(),\n description: locale => locale.slash.heading3Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h3');\n },\n },\n {\n name: 'heading4',\n type: 'button',\n icon: icons.get('heading4'),\n title: locale => locale.slash.heading4(),\n description: locale => locale.slash.heading4Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h4');\n },\n },\n {\n name: 'heading5',\n type: 'button',\n icon: icons.get('heading5'),\n title: locale => locale.slash.heading5(),\n description: locale => locale.slash.heading5Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h5');\n },\n },\n {\n name: 'heading6',\n type: 'button',\n icon: icons.get('heading6'),\n title: locale => locale.slash.heading6(),\n description: locale => locale.slash.heading6Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h6');\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n title: locale => locale.slash.paragraph(),\n description: locale => locale.slash.paragraphDesc(),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n title: locale => locale.slash.blockQuote(),\n description: locale => locale.slash.blockQuoteDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n title: locale => locale.slash.numberedList(),\n description: locale => locale.slash.numberedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n title: locale => locale.slash.bulletedList(),\n description: locale => locale.slash.bulletedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n title: locale => locale.slash.checklist(),\n description: locale => locale.slash.checklistDesc(),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n title: locale => locale.slash.hr(),\n description: locale => locale.slash.hrDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n title: locale => locale.slash.codeBlock(),\n description: locale => locale.slash.codeBlockDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n title: locale => locale.slash.video(),\n description: locale => locale.slash.videoDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n title: locale => locale.slash.equation(),\n description: locale => locale.slash.equationDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n title: locale => locale.slash.image(),\n description: locale => locale.slash.imageDesc(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n title: locale => locale.slash.file(),\n description: locale => locale.slash.fileDesc(),\n accept: '*',\n multiple: true,\n },\n];\n","import { TranslationFunctions } from '../i18n/types';\nimport { SlashItem } from '../types/slash';\nimport { slashItems } from '../config/slash-items';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Menu, MenuConfig } from './menu';\nimport { i18nObject } from '../i18n';\n\ntype OnSelect = (\n event: Event,\n item: SlashItem,\n fileNode?: Nodes,\n) => void;\n\ntype SlashMenuConfig = MenuConfig<string | SlashItem> & {\n locale?: TranslationFunctions;\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\nconst slashItemMap: Map<string, SlashItem> = new Map();\n\nfor (const item of slashItems) {\n slashItemMap.set(item.name, item);\n}\n\nexport class SlashMenu extends Menu<string | SlashItem> {\n\n private locale: TranslationFunctions;\n\n private onSelect: OnSelect;\n\n constructor(config: SlashMenuConfig) {\n super(config);\n this.locale = config.locale || i18nObject('en-US');\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-slash-menu');\n }\n\n private getItem(name: string | SlashItem): SlashItem {\n if (typeof name !== 'string') {\n return name;\n }\n const item = slashItemMap.get(name);\n if (!item) {\n throw new Error(`SlashItem \"${name}\" has not been defined yet.`);\n }\n return item;\n }\n\n protected getItemNode(name: string | SlashItem): Nodes {\n const item = this.getItem(name);\n const itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n const itemDescription = typeof item.description === 'string' ? item.description : item.description(this.locale);\n const itemNode = query(safeTemplate`\n <li name=\"${item.name}\">\n <div class=\"lake-slash-icon\"></div>\n <div class=\"lake-slash-text\">\n <div class=\"lake-slash-title\">${itemTitle}</div>\n <div class=\"lake-slash-description\">${itemDescription}</div>\n </div>\n </li>\n `);\n const icon = item.icon;\n if (icon) {\n itemNode.find('.lake-slash-icon').append(icon);\n }\n if (item.type === 'upload') {\n itemNode.append('<input type=\"file\" />');\n const fileNode = itemNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => this.onSelect(event, item, fileNode));\n itemNode.on('click', () => fileNativeNode.click());\n } else {\n itemNode.on('click', event => this.onSelect(event, item));\n }\n return itemNode;\n }\n\n protected search(keyword: string): (string | SlashItem)[] {\n const localeEnglish = i18nObject('en-US');\n keyword = keyword.toLowerCase();\n const items: (string | SlashItem)[] = [];\n for (const name of this.items) {\n const item = this.getItem(name);\n let itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n itemTitle = itemTitle.toLowerCase();\n let itemTitleEnglish = typeof item.title === 'string' ? item.title : item.title(localeEnglish);\n itemTitleEnglish = itemTitleEnglish.toLowerCase();\n if (\n itemTitle.indexOf(keyword) >= 0 ||\n itemTitle.replace(/\\s+/g, '').indexOf(keyword) >= 0 ||\n itemTitleEnglish.indexOf(keyword) >= 0 ||\n itemTitleEnglish.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(typeof name === 'string' ? item.name : name);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport type { Editor } from '..';\nimport { appendBreak } from '../utils/append-break';\nimport { uploadFile } from '../utils/upload-file';\nimport { Nodes } from '../models/nodes';\nimport { SlashMenu } from '../ui/slash-menu';\n\nconst defaultItems: string[] = [\n 'heading1',\n 'heading2',\n 'heading3',\n 'heading4',\n 'heading5',\n 'heading6',\n 'paragraph',\n 'blockQuote',\n 'numberedList',\n 'bulletedList',\n 'checklist',\n 'hr',\n];\n\nfunction getKeyword(block: Nodes): string | null {\n let text = block.text().trim();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n if (!/^\\//.test(text)) {\n return null;\n }\n return text.substring(1);\n}\n\nfunction emptyBlock(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.commonAncestor.closestBlock();\n block.empty();\n appendBreak(block);\n range.shrinkBefore(block);\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('slash', {\n items: defaultItems,\n });\n if (editor.readonly) {\n return;\n }\n const menu = new SlashMenu({\n locale: editor.locale,\n items: editor.config.slash.items,\n onSelect: (event, item, fileNode) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n emptyBlock(editor);\n if (item.type === 'upload') {\n if (!fileNode) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n } else {\n item.onClick(editor, item.name);\n }\n },\n onShow: () => {\n editor.popup = menu;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (block.find('lake-box').length > 0) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n return;\n }\n const slashRange = range.clone();\n slashRange.selectNodeContents(block);\n menu.show(slashRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu.visible) {\n if (isKeyHotkey('/', keyboardEvent)) {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n menu.hide();\n return;\n }\n menu.update(keyword);\n });\n return () => {\n menu.unmount();\n };\n};\n","import './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { BoxComponent, BoxValue } from './types/box';\nimport { ToolbarItem } from './types/toolbar';\nimport { DropdownMenuItem } from './types/dropdown';\nimport { MentionItem } from './types/mention';\nimport { SlashItem } from './types/slash';\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 mentionBox from './boxes/mention';\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 mention from './plugins/mention';\nimport markdown from './plugins/markdown';\nimport enterKey from './plugins/enter-key';\nimport shiftEnterKey from './plugins/shift-enter-key';\nimport backspaceKey from './plugins/backspace-key';\nimport deleteKey from './plugins/delete-key';\nimport tabKey from './plugins/tab-key';\nimport arrowKeys from './plugins/arrow-keys';\nimport escapeKey from './plugins/escape-key';\nimport slash from './plugins/slash';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(emojiBox);\nEditor.box.add(equationBox);\nEditor.box.add(mentionBox);\n\nEditor.plugin.add('copy', copy);\nEditor.plugin.add('cut', cut);\nEditor.plugin.add('paste', paste);\nEditor.plugin.add('drop', drop);\nEditor.plugin.add('undo', undo);\nEditor.plugin.add('redo', redo);\nEditor.plugin.add('selectAll', selectAll);\nEditor.plugin.add('heading', heading);\nEditor.plugin.add('blockQuote', blockQuote);\nEditor.plugin.add('list', list);\nEditor.plugin.add('align', align);\nEditor.plugin.add('indent', indent);\nEditor.plugin.add('bold', bold);\nEditor.plugin.add('italic', italic);\nEditor.plugin.add('underline', underline);\nEditor.plugin.add('strikethrough', strikethrough);\nEditor.plugin.add('subscript', subscript);\nEditor.plugin.add('superscript', superscript);\nEditor.plugin.add('code', code);\nEditor.plugin.add('fontFamily', fontFamily);\nEditor.plugin.add('fontSize', fontSize);\nEditor.plugin.add('fontColor', fontColor);\nEditor.plugin.add('highlight', highlight);\nEditor.plugin.add('removeFormat', removeFormat);\nEditor.plugin.add('formatPainter', formatPainter);\nEditor.plugin.add('link', link);\nEditor.plugin.add('hr', hr);\nEditor.plugin.add('codeBlock', codeBlock);\nEditor.plugin.add('image', image);\nEditor.plugin.add('video', video);\nEditor.plugin.add('file', file);\nEditor.plugin.add('emoji', emoji);\nEditor.plugin.add('equation', equation);\nEditor.plugin.add('specialCharacter', specialCharacter);\nEditor.plugin.add('mention', mention);\nEditor.plugin.add('markdown', markdown);\nEditor.plugin.add('enterKey', enterKey);\nEditor.plugin.add('shiftEnterKey', shiftEnterKey);\nEditor.plugin.add('backspaceKey', backspaceKey);\nEditor.plugin.add('deleteKey', deleteKey);\nEditor.plugin.add('tabKey', tabKey);\nEditor.plugin.add('arrowKeys', arrowKeys);\nEditor.plugin.add('escapeKey', escapeKey);\nEditor.plugin.add('slash', slash);\n\nexport {\n Editor,\n Toolbar,\n ToolbarItem,\n DropdownMenuItem,\n MentionItem,\n SlashItem,\n BoxComponent,\n BoxValue,\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","defaultItems","renderError","tagName","emptyCallback","getKeyword"],"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-break.ts","../src/utils/remove-break.ts","../src/utils/merge-nodes.ts","../src/utils/get-deep-element.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/is-visible.ts","../src/utils/scroll-to-node.ts","../src/storage/box-instances.ts","../src/storage/boxes.ts","../src/storage/editors.ts","../src/config/menu-items.ts","../src/config/toolbar-items.ts","../src/utils/request.ts","../src/utils/upload-file.ts","../src/ui/button.ts","../src/i18n/en-US/index.ts","../src/i18n/zh-CN/index.ts","../src/i18n/ja/index.ts","../src/i18n/ko/index.ts","../src/i18n/index.ts","../src/ui/dropdown.ts","../src/ui/toolbar.ts","../src/ui/floating-toolbar.ts","../src/models/box.ts","../src/utils/get-box.ts","../src/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/boxes/hr.ts","../src/boxes/code-block.ts","../node_modules/.pnpm/@rollup+plugin-typescript@12.1.1_rollup@4.24.0_tslib@2.8.0_typescript@5.6.3/node_modules/tslib/tslib.es6.js","../src/ui/resizer.ts","../src/boxes/image.ts","../src/boxes/video.ts","../src/boxes/file.ts","../src/boxes/emoji.ts","../src/boxes/equation.ts","../src/boxes/mention.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/ui/menu.ts","../src/ui/mention-menu.ts","../src/plugins/mention.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/config/slash-items.ts","../src/ui/slash-menu.ts","../src/plugins/slash.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// - table-merge.svg\n// - table-split.svg\n//\n// Phosphor Icons (https://phosphoricons.com/).\n// - other icons\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\n// common\nimport plus from './plus.svg';\nimport question from './question.svg';\nimport more from './more.svg';\nimport left from './left.svg';\nimport right from './right.svg';\nimport down from './down.svg';\nimport check from './check.svg';\nimport checkCircle from './check-circle.svg';\nimport warningCircle from './warning-circle.svg';\nimport open from './open.svg';\nimport download from './download.svg';\nimport copy from './copy.svg';\nimport remove from './remove.svg';\nimport maximize from './maximize.svg';\nimport close from './close.svg';\nimport resize from './resize.svg';\nimport circleNotch from './circle-notch.svg';\n// toolbar\nimport selectAll from './select-all.svg';\nimport undo from './undo.svg';\nimport redo from './redo.svg';\nimport heading from './heading.svg';\nimport heading1 from './heading1.svg';\nimport heading2 from './heading2.svg';\nimport heading3 from './heading3.svg';\nimport heading4 from './heading4.svg';\nimport heading5 from './heading5.svg';\nimport heading6 from './heading6.svg';\nimport paragraph from './paragraph.svg';\nimport blockQuote from './block-quote.svg';\nimport list from './list.svg';\nimport numberedList from './numbered-list.svg';\nimport bulletedList from './bulleted-list.svg';\nimport checklist from './checklist.svg';\nimport alignLeft from './align-left.svg';\nimport alignCenter from './align-center.svg';\nimport alignRight from './align-right.svg';\nimport alignJustify from './align-justify.svg';\nimport increaseIndent from './increase-indent.svg';\nimport decreaseIndent from './decrease-indent.svg';\nimport formatPainter from './format-painter.svg';\nimport bold from './bold.svg';\nimport italic from './italic.svg';\nimport underline from './underline.svg';\nimport strikethrough from './strikethrough.svg';\nimport superscript from './superscript.svg';\nimport subscript from './subscript.svg';\nimport code from './code.svg';\nimport removeFormat from './remove-format.svg';\nimport moreStyle from './more-style.svg';\nimport fontColor from './font-color.svg';\nimport fontColorAccent from './font-color-accent.svg';\nimport highlight from './highlight.svg';\nimport highlightAccent from './highlight-accent.svg';\nimport link from './link.svg';\nimport hr from './hr.svg';\nimport codeBlock from './code-block.svg';\nimport image from './image.svg';\nimport video from './video.svg';\nimport attachment from './attachment.svg';\nimport emoji from './emoji.svg';\nimport specialCharacter from './special-character.svg';\nimport equation from './equation.svg';\nimport table from './table.svg';\n// link\nimport unlink from './unlink.svg';\n// image\nimport imageBroken from './image-broken.svg';\nimport zoomIn from './zoom-in.svg';\nimport zoomOut from './zoom-out.svg';\nimport caption from './caption.svg';\n// file\nimport file from './file.svg';\n// table\nimport tableColumn from './table-column.svg';\nimport tableRow from './table-row.svg';\nimport tableMerge from './table-merge.svg';\nimport tableSplit from './table-split.svg';\n\nexport const icons: Map<string, string> = new Map([\n // common\n ['plus', plus],\n ['question', question],\n ['more', more],\n ['left', left],\n ['right', right],\n ['down', down],\n ['check', check],\n ['checkCircle', checkCircle],\n ['warningCircle', warningCircle],\n ['open', open],\n ['download', download],\n ['copy', copy],\n ['remove', remove],\n ['maximize', maximize],\n ['close', close],\n ['resize', resize],\n ['circleNotch', circleNotch],\n // toolbar\n ['selectAll', selectAll],\n ['undo', undo],\n ['redo', redo],\n ['heading', heading],\n ['heading1', heading1],\n ['heading2', heading2],\n ['heading3', heading3],\n ['heading4', heading4],\n ['heading5', heading5],\n ['heading6', heading6],\n ['paragraph', paragraph],\n ['blockQuote', blockQuote],\n ['list', list],\n ['numberedList', numberedList],\n ['bulletedList', bulletedList],\n ['checklist', checklist],\n ['alignLeft', alignLeft],\n ['alignCenter', alignCenter],\n ['alignRight', alignRight],\n ['alignJustify', alignJustify],\n ['increaseIndent', increaseIndent],\n ['decreaseIndent', decreaseIndent],\n ['formatPainter', formatPainter],\n ['bold', bold],\n ['italic', italic],\n ['underline', underline],\n ['strikethrough', strikethrough],\n ['superscript', superscript],\n ['subscript', subscript],\n ['code', code],\n ['removeFormat', removeFormat],\n ['moreStyle', moreStyle],\n ['fontColor', fontColor],\n ['fontColorAccent', fontColorAccent],\n ['highlight', highlight],\n ['highlightAccent', highlightAccent],\n ['link', link],\n ['hr', hr],\n ['codeBlock', codeBlock],\n ['image', image],\n ['video', video],\n ['attachment', attachment],\n ['emoji', emoji],\n ['specialCharacter', specialCharacter],\n ['equation', equation],\n ['table', table],\n // link\n ['unlink', unlink],\n // image\n ['imageBroken', imageBroken],\n ['zoomIn', zoomIn],\n ['zoomOut', zoomOut],\n ['caption', caption],\n // file\n ['file', file],\n // table\n ['tableColumn', tableColumn],\n ['tableRow', tableRow],\n ['tableMerge', tableMerge],\n ['tableSplit', tableSplit],\n]);\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 ['&', '&amp;'],\n ['<', '&lt;'],\n ['>', '&gt;'],\n ['\"', '&quot;'],\n ['\\xA0', '&nbsp;'],\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(/&quot;/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 // 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 a boolean value indicating whether a node is a descendant of a given node, that is the node itself,\n // one of its direct children (childNodes), one of the children's direct children, and so on.\n public contains(otherNode: Node | Nodes): boolean {\n if (otherNode instanceof Nodes) {\n otherNode = otherNode.get(0);\n }\n const element = this.get(0) as Element;\n return element.contains(otherNode);\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 // 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) {\n if (parent.isElement && ['scroll', 'auto'].indexOf(parent.computedCSS('overflow-y')) >= 0) {\n return parent;\n }\n parent = parent.parent();\n }\n return new Nodes();\n }\n\n // Returns the parent of the first node.\n public parent(): Nodes {\n const node = this.get(0);\n return new Nodes(node.parentNode);\n }\n\n // Returns the immediately preceding sibling of the first node.\n public prev(): Nodes {\n const node = this.get(0);\n return new Nodes(node.previousSibling);\n }\n\n // Returns the immediately following sibling of the first node.\n public next(): Nodes {\n const node = this.get(0);\n return new Nodes(node.nextSibling);\n }\n\n // Returns the first child of the first 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 value(): string;\n\n public value(value: string): this;\n\n public value(value?: string): any {\n if (value === undefined) {\n const inputElement = this.get(0) as HTMLInputElement;\n return inputElement.value;\n }\n return this.eachElement(element => {\n (element as HTMLInputElement).value = value;\n });\n }\n\n 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: height > 0 ? rect.y : 0,\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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.setStart(boxContainer, 0);\n this.collapseToStart();\n }\n\n // 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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(0));\n this.collapseToStart();\n }\n\n // 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(`Box \"${boxNode.attr('name')}\" (id=${boxNode.id}) cannot be selected because it has not been rendered yet.`);\n }\n this.selectNodeContents(boxStrip.eq(1));\n this.collapseToStart();\n }\n\n // Collapses the range 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 this.adjustBr();\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 // Relocates the start and end points of the range for <br /> element.\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 public adjustBr(): void {\n if (!this.isCollapsed) {\n return;\n }\n const prevNode = this.getPrevNode();\n const nextNode = this.getNextNode();\n if (prevNode.name === 'br' && nextNode.length === 0) {\n this.setStartBefore(prevNode);\n this.collapseToStart();\n }\n }\n\n // Returns the 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 \"one\".\n public getStartText(): string {\n const node = this.startNode;\n const offset = this.startOffset;\n let block = node.closestBlock();\n if (block.isOutside) {\n block = node.closestContainer();\n }\n if (block.length === 0) {\n return '';\n }\n const startRange = new Range();\n startRange.setStartBefore(block);\n startRange.setEnd(node, offset);\n const container = query('<div />');\n container.append(startRange.cloneContents());\n const text = container.text();\n if (text === '' && container.find('lake-box').length > 0) {\n return '\\u200B';\n }\n return text;\n }\n\n // Returns the text 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 new text range from the specified character to the beginning of the current range.\n // The specified character must be preceded by a whitespace or be at the beginning of a paragraph,\n // without being adjacent to other characters. If these conditions are not met, it returns null.\n public getCharacterRange(character: string): Range | null {\n const newRange = this.clone();\n newRange.shrink();\n if (newRange.startOffset === 0) {\n return null;\n }\n if (newRange.startNode.isElement) {\n const textNode = newRange.startNode.children()[newRange.startOffset - 1];\n if (!textNode.isText) {\n return null;\n }\n newRange.setEnd(textNode, textNode.text().length);\n newRange.collapseToEnd();\n }\n const textNode = newRange.startNode;\n const text = textNode.text().slice(0, newRange.startOffset);\n const lastIndexOfNormalSpace = text.lastIndexOf(` ${character}`);\n const lastIndexOfNoBreakSpace = text.lastIndexOf(`\\xA0${character}`);\n const lastIndexOfZeroWidthSpace = text.lastIndexOf(`\\u200B${character}`);\n if (lastIndexOfNormalSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNormalSpace + 1);\n } else if (lastIndexOfNoBreakSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfNoBreakSpace + 1);\n } else if (lastIndexOfZeroWidthSpace >= 0) {\n newRange.setStart(textNode, lastIndexOfZeroWidthSpace + 1);\n } else if (text.indexOf(character) === 0) {\n newRange.setStart(textNode, 0);\n } else {\n return null;\n }\n return newRange;\n }\n\n // Returns a 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';\nimport { query } from './query';\n\n// Appends a line break to the end of a block.\n// Example:\n// case 1: <p></p> to <p><br /></p>\n// case 2: <p><br /></p> to <p><br /></p>\n// case 3: <p>foo</p> to <p>foo<br /></p>\n// case 4: <ul><li></li></ul> to <ul><li><br /></li></ul>\n// case 5: <p><focus /></p> to <p><focus /><br /></p>\nexport function appendBreak(block: Nodes): Nodes {\n const breakNode = query('<br />');\n let child = block;\n while (child.isBlock) {\n let lastChild = child.last();\n while (lastChild.isText && lastChild.isEmpty) {\n lastChild = lastChild.prev();\n }\n if (!lastChild.isBlock && lastChild.name !== 'br') {\n child.append(breakNode);\n break;\n }\n child = lastChild;\n }\n return breakNode;\n}\n","import type { Nodes } from '../models/nodes';\n\n// Removes a line break in the specified empty block.\n// Example:\n// case 1: <p><br /></p> to <p></p>\n// case 2: <p><br /><focus /></p> to <p><focus /></p>\n// case 3: <p><focus /><br /></p> to <p><focus /></p>\nexport function removeBreak(block: Nodes): void {\n if (block.length === 0) {\n return;\n }\n const nodeList: Nodes[] = [];\n let child = block.first();\n while (child.length > 0) {\n const nextNode = child.next();\n if (!child.isText || child.text() !== '') {\n nodeList.push(child);\n }\n child = nextNode;\n }\n if (\n nodeList.length === 1 &&nodeList[0].name === 'br' ||\n nodeList.length === 2 && nodeList[0].name === 'br' && nodeList[1].isBookmark\n ) {\n nodeList[0].remove();\n }\n if (nodeList.length === 2 && nodeList[0].isBookmark && nodeList[1].name === 'br') {\n nodeList[1].remove();\n }\n}\n","import type { Nodes } from '../models/nodes';\nimport { appendBreak } from './append-break';\nimport { removeBreak } from './remove-break';\nimport { Range } from '../models/range';\n\n// Returns a point after the specified node.\nfunction getAfterPoint(node: Nodes): { node: Nodes, offset: number } {\n if (node.isText) {\n return {\n node,\n offset: node.text().length,\n };\n }\n const range = new Range();\n range.setEndAfter(node);\n return {\n node: range.endNode,\n offset: range.endOffset,\n };\n}\n\n// Merges two nodes into one node.\n// Case 1:\n// <p><strong><i>foo</i></strong></p>\n// <p>|bar</p>\n// to\n// <p><strong><i>foo</i></strong>|bar</p>\n//\n// Case 2:\n// <p><strong><i>foo</i></strong></p>\n// <p>|<strong><i>bar</i></strong></p>\n// to\n// <p><strong><i>foo|bar</i></strong></p>\nexport function mergeNodes(node: Nodes, otherNode: Nodes): { node: Nodes, offset: number } {\n const originalOtherNode = otherNode;\n if (['ul', 'ol'].indexOf(node.name) >= 0) {\n const list = node.find('li');\n node = list.eq(list.length - 1);\n }\n if (['ul', 'ol'].indexOf(otherNode.name) >= 0) {\n const list = otherNode.find('li');\n otherNode = list.eq(0);\n }\n if (node.isText || otherNode.isText || node.isVoid || otherNode.isVoid) {\n return getAfterPoint(node);\n }\n removeBreak(node);\n removeBreak(otherNode);\n if (node.isBlock && node.isEmpty && otherNode.isEmpty) {\n appendBreak(node);\n }\n const nextNode = node.last();\n const nextOtherNode = otherNode.first();\n let child = nextOtherNode;\n while (child.length > 0) {\n const next = child.next();\n node.append(child);\n child = next;\n }\n originalOtherNode.remove();\n if (\n nextNode.length > 0 &&\n nextOtherNode.length > 0 &&\n nextNode.isElement &&\n !nextNode.isBox &&\n nextNode.clone(false).get(0).isEqualNode(nextOtherNode.clone(false).get(0))\n ) {\n return mergeNodes(nextNode, nextOtherNode);\n }\n if (nextNode.length === 0) {\n return {\n node,\n offset: 0,\n };\n }\n return getAfterPoint(nextNode);\n}\n","import type { Nodes } from '../models/nodes';\n\n// Returns the deepest element of the specified element.\nexport function getDeepElement(element: Nodes): Nodes {\n let child = element;\n while (child.length > 0) {\n let firstChild = child.first();\n if (firstChild.isText && firstChild.isEmpty) {\n firstChild = firstChild.next();\n }\n if (child.isElement && !child.isVoid && firstChild.length === 0) {\n break;\n }\n child = firstChild;\n }\n return child;\n}\n","import type { Nodes } from '../models/nodes';\nimport { getDeepElement } from './get-deep-element';\nimport { query } from './query';\n\nexport function wrapNodeList(nodeList: Nodes[], wrapper?: Nodes): Nodes {\n wrapper = wrapper ?? query('<p />');\n if (nodeList.length === 0) {\n return wrapper;\n }\n wrapper = wrapper.clone(true);\n const deepestElement = getDeepElement(wrapper);\n nodeList[0].before(wrapper);\n for (const node of nodeList) {\n deepestElement.append(node);\n }\n return wrapper;\n}\n","import 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';\nimport { Range } from '../models/range';\n\n// Returns an object indicating whether the specified node or range is visible.\nexport function isVisible(target: Nodes | Range): {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n} {\n let rect: DOMRect;\n let viewport: Nodes;\n if (target instanceof Nodes) {\n const nativeNode = target.get(0) as Element;\n rect = nativeNode.getBoundingClientRect();\n viewport = target.closestScroller();\n } else {\n rect = target.get().getBoundingClientRect();\n viewport = target.commonAncestor.closestScroller();\n }\n let left = rect.left;\n let right = rect.right;\n let top = rect.top;\n let bottom = rect.bottom;\n let viewportWidth = window.innerWidth;\n let viewportHeight = window.innerHeight;\n if (viewport.length > 0) {\n const nativeViewport = viewport.get(0) as Element;\n const viewportRect = nativeViewport.getBoundingClientRect();\n const offsetLeft = viewportRect.x;\n const offsetTop = viewportRect.y;\n left -= offsetLeft;\n right -= offsetLeft;\n top -= offsetTop;\n bottom -= offsetTop;\n viewportWidth = viewportRect.width;\n viewportHeight = viewportRect.height;\n }\n return {\n left: left >= 0 && viewportWidth - left >= 0,\n right: right >= 0 && viewportWidth - right >= 0,\n top: top >= 0 && viewportHeight - top >= 0,\n bottom: bottom >= 0 && viewportHeight - bottom >= 0,\n };\n}\n","import { isVisible } from './is-visible';\nimport { Nodes } from '../models/nodes';\n\n// If the specified node is not visible, scrolls the container that contains the node to its position to make it visible.\nexport function scrollToNode(node: Nodes, options?: ScrollIntoViewOptions): void {\n const visible = isVisible(node);\n if (!visible.left || !visible.right || !visible.top || !visible.bottom) {\n (node.get(0) as Element).scrollIntoView(options);\n }\n}\n","import type { Box } from '../models/box';\n\nconst boxInstances: Map<number, Map<number, Box>> = new Map();\n\nexport function getInstanceMap(id: number): Map<number, Box> {\n let instanceMap = boxInstances.get(id);\n if (!instanceMap) {\n instanceMap = new Map();\n boxInstances.set(id, instanceMap);\n return instanceMap;\n }\n return instanceMap;\n}\n","import 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 { 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","/**\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 {\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 if (option.file) {\n const filename = option.filename || 'file';\n if (option.file instanceof Blob) {\n formData.append(filename, option.file, (option.file as any).name);\n } else {\n formData.append(filename, option.file);\n }\n }\n\n xhr.onerror = (e) => {\n if (option.onError) {\n option.onError(e);\n }\n };\n\n xhr.onload = () => {\n // allow success when 2xx status\n // see https://github.com/react-component/upload/issues/34\n if (xhr.status < 200 || xhr.status >= 300) {\n if (!option.onError) {\n return;\n }\n return option.onError(getError(option, xhr), getBody(xhr));\n }\n if (!option.onSuccess) {\n return;\n }\n return option.onSuccess(getBody(xhr), xhr);\n };\n\n xhr.open(option.method, option.action, true);\n\n // Has to be after `.open()`. See https://github.com/enyo/dropzone/issues/179\n if (option.withCredentials && 'withCredentials' in xhr) {\n xhr.withCredentials = true;\n }\n\n const headers = option.headers || {};\n\n // when set headers['X-Requested-With'] = null , can close default XHR header\n // see https://github.com/react-component/upload/issues/33\n if (headers['X-Requested-With'] !== null) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n Object.keys(headers).forEach(h => {\n if (headers[h] !== null) {\n xhr.setRequestHeader(h, headers[h]);\n }\n });\n\n xhr.send(formData);\n\n return xhr;\n}\n","import type { Editor } from '../editor';\nimport { debug } from '../utils/debug';\nimport { request } from '../utils/request';\nimport { Box } from '../models/box';\n\ntype UploadConfig = {\n editor: Editor;\n name: string;\n file: File;\n onError?: (error: string)=> void;\n onSuccess?: ()=> void;\n};\n\nexport function uploadFile(config: UploadConfig): Box {\n const { editor, name, file, onError, onSuccess} = config;\n const { requestMethod, requestAction, requestTypes } = editor.config[name];\n if (requestTypes.indexOf(file.type) < 0) {\n if (onError) {\n onError(`File \"${file.name}\" is not allowed for uploading.`);\n }\n throw new Error(`Cannot upload file \"${file.name}\" because its type \"${file.type}\" is not found in ['${requestTypes.join('\\', \\'')}'].`);\n }\n const box = editor.selection.insertBox(name, {\n url: URL.createObjectURL(file),\n status: 'uploading',\n name: file.name,\n size: file.size,\n type: file.type,\n lastModified: file.lastModified,\n });\n let xhr: XMLHttpRequest | null = request({\n onProgress: e => {\n const percentNode = box.node.find('.lake-percent');\n const percent = Math.round(e.percent);\n percentNode.text(`${percent < 100 ? percent : 99} %`);\n },\n onError: (error, body) => {\n xhr = null;\n debug(error.toString(), body);\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError(error.toString());\n }\n },\n onSuccess: body => {\n xhr = null;\n if (!body.url) {\n box.updateValue('status', 'error');\n box.render();\n if (onError) {\n onError('Cannot find the url field.');\n }\n return;\n }\n box.updateValue({\n status: 'done',\n url: body.url,\n });\n box.render();\n editor.history.save();\n if (onSuccess) {\n onSuccess();\n }\n },\n file,\n action: requestAction,\n method: requestMethod,\n });\n box.event.on('beforeunmount', () => {\n if (xhr) {\n xhr.abort();\n debug('Upload canceled');\n }\n });\n return box;\n}\n","import { 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: '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: 'Mathematical formula',\n removeColor: 'Remove color',\n },\n slash: {\n heading1: 'Heading 1',\n heading1Desc: 'Create a heading level 1',\n heading2: 'Heading 2',\n heading2Desc: 'Create a heading level 2',\n heading3: 'Heading 3',\n heading3Desc: 'Create a heading level 3',\n heading4: 'Heading 4',\n heading4Desc: 'Create a heading level 4',\n heading5: 'Heading 5',\n heading5Desc: 'Create a heading level 5',\n heading6: 'Heading 6',\n heading6Desc: 'Create a heading level 6',\n paragraph: 'Paragraph',\n paragraphDesc: 'Create a paragraph',\n blockQuote: 'Block quotation',\n blockQuoteDesc: 'Create a block quotation',\n numberedList: 'Numbered list',\n numberedListDesc: 'Create a numbered list',\n bulletedList: 'Bulleted list',\n bulletedListDesc: 'Create a bulleted list',\n checklist: 'Checklist',\n checklistDesc: 'Create a checklist',\n hr: 'Horizontal line',\n hrDesc: 'Insert a horizontal line',\n codeBlock: 'Code block',\n codeBlockDesc: 'Insert a code block',\n video: 'Video',\n videoDesc: 'Insert a video from YouTube',\n equation: 'Mathematical formula',\n equationDesc: 'Insert a TeX expression',\n image: 'Image',\n imageDesc: 'Upload an image',\n file: 'File',\n fileDesc: 'Upload a file',\n },\n link: {\n newLink: 'New link',\n url: 'Link URL',\n title: 'Text to display',\n copy: 'Copy link to clipboard',\n open: 'Open link in new tab',\n save: 'Save',\n unlink: 'Remove link',\n },\n image: {\n view: 'Full screen',\n remove: 'Delete',\n previous: 'Previous',\n next: 'Next',\n close: 'Close (Esc)',\n loadingError: 'Unable to load image.',\n zoomOut: 'Zoom out',\n zoomIn: 'Zoom in',\n align: 'Alignment',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n resize: 'Resize image',\n pageWidth: 'Page width',\n originalWidth: 'Original image width',\n imageWidth: '{0} image width',\n open: 'Open image in new tab',\n },\n file: {\n download: 'Download',\n remove: 'Delete',\n },\n video: {\n embed: 'Embed video',\n remove: 'Delete',\n description: 'Paste a link to embed a video from YouTube.',\n url: 'Link',\n urlError: 'Please enter a valid link.',\n },\n codeBlock: {\n langType: 'Select language',\n },\n equation: {\n save: 'Done',\n help: 'Supported functions',\n placeholder: 'Type a TeX expression',\n },\n} satisfies BaseTranslation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `撤消 (${modifierText('mod+Z')})`,\n redo: `重做 (${modifierText('mod+Y')})`,\n selectAll: `全选 (${modifierText('mod+A')})`,\n paragraph: '正文',\n blockQuote: '引用',\n numberedList: '编号',\n bulletedList: '项目符号',\n checklist: '任务列表',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n alignJustify: '两端对齐',\n increaseIndent: '增加缩进',\n decreaseIndent: '减少缩进',\n bold: `粗体 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下划线 (${modifierText('mod+U')})`,\n strikethrough: '删除线',\n superscript: '上标',\n subscript: '下标',\n code: '行内代码',\n removeFormat: '清除格式',\n formatPainter: '格式刷',\n link: '链接',\n hr: '分割线',\n video: '视频',\n codeBlock: '代码块',\n heading: '标题',\n heading1: '标题 1',\n heading2: '标题 2',\n heading3: '标题 3',\n heading4: '标题 4',\n heading5: '标题 5',\n heading6: '标题 6',\n list: '列表',\n align: '对齐方式',\n indent: '缩进',\n fontFamily: '字体',\n fontSize: '文字大小',\n moreStyle: '更多样式',\n fontColor: '文字颜色',\n highlight: '文字背景',\n image: '图片',\n file: '文件',\n emoji: '表情',\n equation: '数学公式',\n removeColor: '默认',\n },\n slash: {\n heading1: '标题 1',\n heading1Desc: '创建标题 1',\n heading2: '标题 2',\n heading2Desc: '创建标题 2',\n heading3: '标题 3',\n heading3Desc: '创建标题 3',\n heading4: '标题 4',\n heading4Desc: '创建标题 4',\n heading5: '标题 5',\n heading5Desc: '创建标题 5',\n heading6: '标题 6',\n heading6Desc: '创建标题 6',\n paragraph: '正文',\n paragraphDesc: '把当前段落改成正文',\n blockQuote: '引用',\n blockQuoteDesc: '创建引用',\n numberedList: '编号',\n numberedListDesc: '创建编号列表',\n bulletedList: '项目符号',\n bulletedListDesc: '创建项目符号列表',\n checklist: '任务列表',\n checklistDesc: '创建任务列表',\n hr: '分割线',\n hrDesc: '插入分割线',\n codeBlock: '代码块',\n codeBlockDesc: '插入代码块',\n video: '视频',\n videoDesc: '插入 YouTube 视频',\n equation: '数学公式',\n equationDesc: '支持 TeX 语法',\n image: '图片',\n imageDesc: '上传图片',\n file: '文件',\n fileDesc: '上传文件',\n },\n link: {\n newLink: '新链接',\n url: '链接 URL',\n title: '链接文本',\n copy: '复制到剪贴板',\n open: '打开链接',\n save: '确定',\n unlink: '取消链接',\n },\n image: {\n view: '查看大图',\n remove: '删除',\n previous: '上一张',\n next: '下一张',\n close: '关闭 (Esc)',\n loadingError: '图片加载失败',\n zoomOut: '缩小',\n zoomIn: '放大',\n align: '对齐方式',\n alignLeft: '左对齐',\n alignCenter: '居中',\n alignRight: '右对齐',\n resize: '调整图片大小',\n pageWidth: '图片适应页面大小',\n originalWidth: '图片原始大小',\n imageWidth: '{0} 图片大小',\n open: '在新标签页中打开图片',\n },\n file: {\n download: '下载',\n remove: '删除',\n },\n video: {\n embed: '嵌入视频',\n remove: '删除',\n description: '在下面的输入框里,粘贴 YouTube 链接。',\n url: '链接',\n urlError: '请输入有效的链接。',\n },\n codeBlock: {\n langType: '选择代码语言',\n },\n equation: {\n save: '确定',\n help: '支持的功能',\n placeholder: '请输入 TeX 表达式',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `元に戻す (${modifierText('mod+Z')})`,\n redo: `やり直し (${modifierText('mod+Y')})`,\n selectAll: `すべて選択 (${modifierText('mod+A')})`,\n paragraph: '本文',\n blockQuote: '引用',\n numberedList: '番号付きリスト',\n bulletedList: '箇条書きリスト',\n checklist: 'チェックリスト',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n alignJustify: '両端揃え',\n increaseIndent: 'インデントを増やす',\n decreaseIndent: 'インデントを減らす',\n bold: `太字 (${modifierText('mod+B')})`,\n italic: `斜体 (${modifierText('mod+I')})`,\n underline: `下線 (${modifierText('mod+U')})`,\n strikethrough: '取り消し線',\n superscript: '上付き文字',\n subscript: '下付き文字',\n code: 'インラインコード',\n removeFormat: '形式を削除',\n formatPainter: '形式ペインタ',\n link: 'リンク',\n hr: '区切り線',\n video: '動画',\n codeBlock: 'コードブロック',\n heading: '見出し',\n heading1: '見出し 1',\n heading2: '見出し 2',\n heading3: '見出し 3',\n heading4: '見出し 4',\n heading5: '見出し 5',\n heading6: '見出し 6',\n list: 'リスト',\n align: '整列',\n indent: 'インデント',\n fontFamily: 'フォント',\n fontSize: 'フォントサイズ',\n moreStyle: 'その他のスタイル',\n fontColor: '文字色',\n highlight: 'ハイライト',\n image: '画像',\n file: 'ファイル',\n emoji: '絵文字',\n equation: '数式',\n removeColor: 'デフォルト',\n },\n slash: {\n heading1: '見出し 1',\n heading1Desc: 'レベル 1 の見出しを作成',\n heading2: '見出し 2',\n heading2Desc: 'レベル 2 の見出しを作成',\n heading3: '見出し 3',\n heading3Desc: 'レベル 3 の見出しを作成',\n heading4: '見出し 4',\n heading4Desc: 'レベル 4 の見出しを作成',\n heading5: '見出し 5',\n heading5Desc: 'レベル 5 の見出しを作成',\n heading6: '見出し 6',\n heading6Desc: 'レベル 6 の見出しを作成',\n paragraph: '本文',\n paragraphDesc: '段落を作成',\n blockQuote: '引用',\n blockQuoteDesc: '引用を作成',\n numberedList: '番号付きリスト',\n numberedListDesc: '番号付きリストを作成',\n bulletedList: '箇条書きリスト',\n bulletedListDesc: '箇条書きリストを作成',\n checklist: 'チェックリスト',\n checklistDesc: 'チェックリストを作成',\n hr: '区切り線',\n hrDesc: '水平線を挿入',\n codeBlock: 'コードブロック',\n codeBlockDesc: 'コードブロックを挿入',\n video: '動画',\n videoDesc: 'YouTube から動画を挿入',\n equation: '数式',\n equationDesc: 'TeX 数式を挿入',\n image: '画像',\n imageDesc: '画像をアップロード',\n file: 'ファイル',\n fileDesc: 'ファイルをアップロード',\n },\n link: {\n newLink: '新しいリンク',\n url: 'リンク URL',\n title: 'リンクテキスト',\n copy: 'クリップボードにコピー',\n open: 'リンクを開く',\n save: '保存',\n unlink: 'リンクを削除',\n },\n image: {\n view: '大きな画像を見る',\n remove: '削除',\n previous: '前の画像',\n next: '次の画像',\n close: '閉じる (Esc)',\n loadingError: '画像を読み込めません',\n zoomOut: '縮小',\n zoomIn: '拡大',\n align: '整列',\n alignLeft: '左揃え',\n alignCenter: '中央揃え',\n alignRight: '右揃え',\n resize: '画像サイズを調整',\n pageWidth: 'ページ幅',\n originalWidth: '画像の元のサイズ',\n imageWidth: '{0} 画像サイズ',\n open: '新しいタブで画像を開く',\n },\n file: {\n download: 'ダウンロード',\n remove: '削除',\n },\n video: {\n embed: '動画を埋め込む',\n remove: '削除',\n description: '下の入力欄に YouTube リンクを貼り付けてください。',\n url: 'リンク',\n urlError: '有効なリンクを入力してください。',\n },\n codeBlock: {\n langType: 'コード言語を選択',\n },\n equation: {\n save: '保存',\n help: 'サポートされている機能',\n placeholder: 'TeX 数式を入力してください。',\n },\n} satisfies Translation;\n","import type { Translation } from '../types';\nimport { modifierText } from '../../utils/modifier-text';\n\nexport default {\n toolbar: {\n undo: `작업취소 (${modifierText('mod+Z')})`,\n redo: `다시 실행 (${modifierText('mod+Y')})`,\n selectAll: `전체 선택 (${modifierText('mod+A')})`,\n paragraph: '텍스트',\n blockQuote: '인용문',\n numberedList: '순서 목록',\n bulletedList: '비순서 목록',\n checklist: '체크리스트',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n alignJustify: '좌우로 정렬',\n increaseIndent: '들여쓰기 증가',\n decreaseIndent: '들여쓰기 줄이기',\n bold: `굵게 (${modifierText('mod+B')})`,\n italic: `기울임꼴 (${modifierText('mod+I')})`,\n underline: `밑줄 (${modifierText('mod+U')})`,\n strikethrough: '취소선',\n superscript: '위첨자',\n subscript: '아래 첨자',\n code: '인라인 코드',\n removeFormat: '형식 지우기',\n formatPainter: '형식 복사기',\n link: '링크',\n hr: '구분선',\n video: '동영상',\n codeBlock: '코드 블록',\n heading: '제목',\n heading1: '제목 1',\n heading2: '제목 2',\n heading3: '제목 3',\n heading4: '제목 4',\n heading5: '제목 5',\n heading6: '제목 6',\n list: '목록',\n align: '정렬',\n indent: '들여쓰기',\n fontFamily: '글꼴',\n fontSize: '글자 크기',\n moreStyle: '더 많은 스타일',\n fontColor: '글자 색상',\n highlight: '글자 배경',\n image: '이미지',\n file: '파일',\n emoji: '이모지',\n equation: '수학 공식',\n removeColor: '기본 색상',\n },\n slash: {\n heading1: '제목 1',\n heading1Desc: '1 단계 제목을 작성',\n heading2: '제목 2',\n heading2Desc: '2 단계 제목을 작성',\n heading3: '제목 3',\n heading3Desc: '3 단계 제목을 작성',\n heading4: '제목 4',\n heading4Desc: '4 단계 제목을 작성',\n heading5: '제목 5',\n heading5Desc: '5 단계 제목을 작성',\n heading6: '제목 6',\n heading6Desc: '6 단계 제목을 작성',\n paragraph: '텍스트',\n paragraphDesc: '단락을 작성',\n blockQuote: '인용문',\n blockQuoteDesc: '인용문을 작성',\n numberedList: '순서 목록',\n numberedListDesc: '순서 목록을 작성',\n bulletedList: '비순서 목록',\n bulletedListDesc: '비순서 목록을 작성',\n checklist: '체크리스트',\n checklistDesc: '체크리스트를 작성',\n hr: '구분선',\n hrDesc: '구분선을 삽입',\n codeBlock: '코드 블록',\n codeBlockDesc: '코드 블록을 삽입',\n video: '동영상',\n videoDesc: '유튜브 동영상을 삽입',\n equation: '수학 공식',\n equationDesc: 'TeX 수식을 삽입',\n image: '이미지',\n imageDesc: '이미지를 업로드',\n file: '파일',\n fileDesc: '파일을 업로드',\n },\n link: {\n newLink: '새 링크',\n url: '링크 URL',\n title: '링크 텍스트',\n copy: '클립보드에 복사',\n open: '링크 열기',\n save: '저장',\n unlink: '링크 제거',\n },\n image: {\n view: '큰 이미지 보기',\n remove: '삭제',\n previous: '이전 이미지',\n next: '다음 이미지',\n close: '닫기 (Esc)',\n loadingError: '이미지를 로드할 수 없습니다',\n zoomOut: '축소',\n zoomIn: '확대',\n align: '정렬',\n alignLeft: '왼쪽 정렬',\n alignCenter: '가운데 정렬',\n alignRight: '오른쪽 정렬',\n resize: '이미지 크기 조정',\n pageWidth: '페이지 너비',\n originalWidth: '원본 이미지 크기',\n imageWidth: '{0} 이미지 크기',\n open: '새 탭에서 이미지 열기',\n },\n file: {\n download: '다운로드',\n remove: '삭제',\n },\n video: {\n embed: '동영상 삽입',\n remove: '삭제',\n description: '아래 입력란에 YouTube 링크를 붙여넣으세요.',\n url: '링크',\n urlError: '유효한 링크를 입력하세요.',\n },\n codeBlock: {\n langType: '코드 언어 선택',\n },\n equation: {\n save: '저장',\n help: '지원되는 기능',\n placeholder: 'TeX 수식을 입력하세요',\n },\n} satisfies Translation;\n","import { i18nObject as initI18nObject, type FormattersInitializer } from 'typesafe-i18n';\nimport type { Formatters, Locales, Translations, TranslationFunctions } from './types';\n\nimport enUS from './en-US';\nimport zhCN from './zh-CN';\nimport ja from './ja';\nimport ko from './ko';\n\nconst localeTranslations = {\n 'en-US': enUS,\n 'zh-CN': zhCN,\n ja,\n ko,\n};\n\nconst locales: Locales[] = Object.keys(localeTranslations) as Locales[];\n\nconst loadedLocales: Record<Locales, Translations> = {} as Record<Locales, Translations>;\nconst loadedFormatters: Record<Locales, Formatters> = {} as Record<Locales, Formatters>;\n\nconst initFormatters: FormattersInitializer<Locales, Formatters> = () => {\n const formatters: Formatters = {\n // add your formatter functions here\n };\n return formatters;\n};\n\nconst loadFormatters = (locale: Locales): void => {\n loadedFormatters[locale] = initFormatters(locale);\n};\n\nconst loadLocale = (locale: Locales): void => {\n if (loadedLocales[locale]) {\n return;\n }\n loadedLocales[locale] = localeTranslations[locale] as Translations;\n loadFormatters(locale);\n};\n\nconst loadAllLocales = (): void => locales.forEach(loadLocale);\n\nexport const i18nObject = (locale: Locales): TranslationFunctions =>\n initI18nObject<Locales, Translations, TranslationFunctions, Formatters>(\n locale,\n loadedLocales[locale],\n loadedFormatters[locale],\n );\n\nloadAllLocales();\n","import { TranslationFunctions } from '../i18n/types';\nimport {\n DropdownLocation, DropdownDirection,\n DropdownItem, DropdownMenuItem,\n} from '../types/dropdown';\nimport { icons } from '../icons';\nimport { encode } from '../utils/encode';\nimport { toBase64 } from '../utils/to-base64';\nimport { fromBase64 } from '../utils/from-base64';\nimport { template } from '../utils/template';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { i18nObject } from '../i18n';\n\ntype DropdownConfig = DropdownItem & {\n root: Nodes;\n locale?: TranslationFunctions;\n tabIndex?: number;\n location?: DropdownLocation;\n direction?: DropdownDirection;\n onSelect: (value: string) => void;\n}\n\nexport class Dropdown {\n private config: DropdownConfig;\n\n private root: Nodes;\n\n private locale: TranslationFunctions;\n\n private location: DropdownLocation;\n\n private direction: DropdownDirection;\n\n private menuNode: Nodes;\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 this.location = config.location || 'local';\n this.direction = config.direction || 'auto';\n this.node = query(safeTemplate`\n <div class=\"lake-dropdown lake-${config.menuType}-dropdown\" name=\"${config.name}\">\n <button type=\"button\" name=\"${config.name}\" class=\"lake-dropdown-title\">\n <div class=\"lake-dropdown-${config.icon ? 'icon' : 'text'}\"></div>\n <div class=\"lake-dropdown-down-icon\"></div>\n </button>\n </div>\n `);\n this.menuNode = query('<ul class=\"lake-popup lake-dropdown-menu\" />');\n if (config.tabIndex !== undefined) {\n const titleNode = this.node.find('.lake-dropdown-title');\n titleNode.attr('tabindex', config.tabIndex.toString());\n }\n }\n\n // Returns the value of the node.\n public static getValue(node: Nodes): string[] {\n const value = node.attr('value');\n if (value === '') {\n return [];\n }\n return JSON.parse(fromBase64(value));\n }\n\n // Updates the value of the node.\n public static setValue(node: Nodes, value: string[]): void {\n node.attr('value', toBase64(JSON.stringify(value)));\n }\n\n public static getMenuMap(menuItems: DropdownMenuItem[], locale: TranslationFunctions): Map<string, string> {\n const menuMap: Map<string, string> = new Map();\n for (const menuItem of menuItems) {\n // remove HTML tags\n let text = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(locale);\n text = text.replace(/<[^>]*>/g, '');\n menuMap.set(menuItem.value, text);\n }\n return menuMap;\n }\n\n private updateColorAccent(titleNode: Nodes, value: string): void {\n const svgNode = titleNode.find('.lake-dropdown-icon svg').eq(1);\n const lineNode = svgNode.find('line');\n if (lineNode.length > 0) {\n lineNode.attr('stroke', value);\n } else {\n svgNode.find('path').attr('fill', value);\n }\n }\n\n private apppendMenuItems(menuNode: Nodes): void {\n const config = this.config;\n for (const menuItem of config.menuItems) {\n const menuText = typeof menuItem.text === 'string' ? menuItem.text : menuItem.text(this.locale);\n const listContent = 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 listNode.on('mouseenter', () => {\n if (listNode.hasClass('lake-dropdown-item-selected')) {\n return;\n }\n listNode.addClass('lake-dropdown-item-hovered');\n });\n listNode.on('mouseleave', () => {\n listNode.removeClass('lake-dropdown-item-hovered');\n });\n if (config.menuType === 'character') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').text(menuItem.value);\n } else if (config.menuType === 'color') {\n listNode.attr('title', menuText);\n listNode.find('.lake-dropdown-menu-text').css('background-color', menuItem.value);\n }\n if (menuItem.icon) {\n const menuIconNode = query('<div class=\"lake-dropdown-menu-icon\"></div>');\n menuIconNode.append(menuItem.icon);\n listNode.prepend(menuIconNode);\n }\n const checkIcon = icons.get('check');\n if (checkIcon) {\n const checkNode = query('<div class=\"lake-dropdown-menu-check\"></div>');\n checkNode.append(checkIcon);\n listNode.prepend(checkNode);\n }\n }\n }\n\n private clickListener = (event: Event) => {\n const targetNode = new Nodes(event.target as Element);\n const titleNode = this.node.find('.lake-dropdown-title');\n if (targetNode.closest('.lake-dropdown-title').get(0) === titleNode.get(0)) {\n return;\n }\n this.hideMenu();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private appendMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n const titleNode = this.node.find('.lake-dropdown-title');\n const textNode = titleNode.find('.lake-dropdown-text');\n menuNode.addClass(`lake-${config.menuType}-dropdown-menu`);\n if (config.menuWidth) {\n menuNode.css('width', config.menuWidth);\n }\n if (config.menuHeight) {\n menuNode.addClass('lake-dropdown-menu-with-scroll');\n menuNode.css('height', config.menuHeight);\n }\n this.apppendMenuItems(menuNode);\n if (this.location === 'local') {\n this.node.append(menuNode);\n } else {\n query(document.body).append(menuNode);\n }\n menuNode.on('click', event => {\n event.preventDefault();\n event.stopPropagation();\n const listItem = query(event.target as Node).closest('li');\n if (listItem.length === 0) {\n return;\n }\n const value = listItem.attr('value');\n Dropdown.setValue(this.node, [value]);\n if (textNode.length > 0) {\n textNode.text(listItem.text());\n }\n if (config.menuType === 'color' && value !== '') {\n this.node.attr('color', value);\n this.updateColorAccent(titleNode, value);\n }\n config.onSelect(value);\n this.hideMenu();\n });\n }\n\n private updatePosition(): void {\n const menuNode = this.menuNode;\n const dropdownNativeNode = this.node.get(0) as HTMLElement;\n const dropdownRect = dropdownNativeNode.getBoundingClientRect();\n // A overflow width on the left side, greater than 0 indicates an overflow.\n const leftOverflow = menuNode.width() - (dropdownRect.x + dropdownRect.width);\n // A overflow width on the right side, greater than 0 indicates an overflow.\n const rightOverflow = dropdownRect.x + menuNode.width() - window.innerWidth;\n const rightToLeft = rightOverflow + 50 > 0 && (leftOverflow < 0 || leftOverflow < rightOverflow);\n if (this.location === 'local') {\n if (rightToLeft) {\n menuNode.css('left', 'auto');\n menuNode.css('right', '0');\n } else {\n menuNode.css('left', '');\n menuNode.css('right', '');\n }\n if (this.direction === 'top') {\n menuNode.css('top', 'auto');\n menuNode.css('bottom', `${dropdownRect.height}px`);\n }\n return;\n }\n // A overflow width on the bottom side, greater than 0 indicates an overflow.\n const bottomOverflow = dropdownRect.y + dropdownRect.height + menuNode.height() - window.innerHeight;\n const dropdownX = dropdownRect.x + window.scrollX;\n const dropdownY = dropdownRect.y + window.scrollY;\n if (rightToLeft) {\n menuNode.css('left', `${dropdownX - menuNode.width() + dropdownRect.width}px`);\n } else {\n menuNode.css('left', `${dropdownX}px`);\n }\n if (bottomOverflow > 0) {\n menuNode.css('top', `${dropdownY - menuNode.height()}px`);\n } else {\n menuNode.css('top', `${dropdownY + dropdownRect.height}px`);\n }\n }\n\n private showMenu(): void {\n const config = this.config;\n const menuNode = this.menuNode;\n if (!menuNode.get(0).isConnected) {\n this.appendMenu();\n }\n if (this.node.attr('disabled')) {\n return;\n }\n const currentValues = Dropdown.getValue(this.node);\n menuNode.find('.lake-dropdown-menu-check').css('visibility', 'hidden');\n menuNode.find('li').each(node => {\n const listNode = query(node);\n if (currentValues.indexOf(listNode.attr('value')) >= 0) {\n listNode.find('.lake-dropdown-menu-check').css('visibility', 'visible');\n }\n });\n menuNode.css('visibility', 'hidden');\n menuNode.show(config.menuType === 'list' ? 'block' : 'flex');\n this.updatePosition();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n menuNode.css('visibility', '');\n }\n\n private hideMenu(): void {\n this.menuNode.hide();\n const viewport = this.node.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n }\n\n public render(): void {\n const config = this.config;\n const defaultValue = config.defaultValue ?? '';\n const titleNode = this.node.find('.lake-dropdown-title');\n if (!config.downIcon) {\n titleNode.addClass('lake-dropdown-title-no-down');\n }\n if (config.width) {\n titleNode.css('width', config.width);\n }\n const tooltip = typeof config.tooltip === 'string' ? config.tooltip : config.tooltip(this.locale);\n titleNode.attr('title', tooltip);\n const textNode = titleNode.find('.lake-dropdown-text');\n const iconNode = titleNode.find('.lake-dropdown-icon');\n if (config.icon) {\n iconNode.append(config.icon);\n }\n if (config.accentIcon) {\n iconNode.append(config.accentIcon);\n }\n const downIconNode = titleNode.find('.lake-dropdown-down-icon');\n if (config.downIcon) {\n downIconNode.append(config.downIcon);\n }\n Dropdown.setValue(this.node, [defaultValue]);\n if (textNode.length > 0) {\n const menuMap = Dropdown.getMenuMap(config.menuItems, this.locale);\n textNode.text(menuMap.get(defaultValue) ?? defaultValue);\n }\n if (config.menuType === 'color') {\n this.updateColorAccent(titleNode, defaultValue);\n }\n this.node.append(titleNode);\n this.root.append(this.node);\n if (config.menuType === 'color') {\n iconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n iconNode.addClass('lake-dropdown-icon-hovered');\n });\n iconNode.on('mouseleave', () => {\n iconNode.removeClass('lake-dropdown-icon-hovered');\n });\n downIconNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n downIconNode.addClass('lake-dropdown-down-icon-hovered');\n });\n downIconNode.on('mouseleave', () => {\n downIconNode.removeClass('lake-dropdown-down-icon-hovered');\n });\n } else {\n titleNode.on('mouseenter', () => {\n if (this.node.attr('disabled')) {\n return;\n }\n titleNode.addClass('lake-dropdown-title-hovered');\n });\n titleNode.on('mouseleave', () => {\n titleNode.removeClass('lake-dropdown-title-hovered');\n });\n }\n if (config.menuType === 'color') {\n iconNode.on('click', event => {\n event.preventDefault();\n if (this.node.attr('disabled')) {\n return;\n }\n const value = this.node.attr('color') || config.defaultValue || '';\n config.onSelect(value);\n });\n }\n const triggerNode = (config.menuType === 'color' && downIconNode) ? downIconNode : titleNode;\n triggerNode.on('click', event => {\n event.preventDefault();\n this.showMenu();\n });\n }\n\n public unmount(): void {\n this.hideMenu();\n this.node.remove();\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\nexport type ToolbarConfig = {\n root?: string | Node | Nodes;\n items?: (string | ToolbarItem)[];\n placement?: ToolbarPlacement;\n};\n\nconst defaultItems: string[] = [\n 'undo',\n 'redo',\n '|',\n 'heading',\n '|',\n 'formatPainter',\n 'removeFormat',\n 'bold',\n 'moreStyle',\n '|',\n 'fontColor',\n 'highlight',\n '|',\n 'align',\n 'list',\n 'indent',\n 'link',\n 'blockQuote',\n 'hr',\n];\n\nconst toolbarItemMap: Map<string, ToolbarItem> = new Map();\n\nfor (const item of toolbarItems) {\n toolbarItemMap.set(item.name, item);\n}\n\nexport class Toolbar {\n\n public 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 private dropdownList: Dropdown[] = [];\n\n public container: Nodes;\n\n constructor(config: ToolbarConfig) {\n this.root = query(config.root || document.body);\n this.items = config.items || defaultItems;\n if (config.placement) {\n this.placement = config.placement;\n }\n this.container = query('<div class=\"lake-toolbar\" />');\n }\n\n private appendDivider(): void {\n this.container.append('<div class=\"lake-toolbar-divider\" />');\n }\n\n private appendNormalButton(editor: Editor, item: ToolbarButtonItem): void {\n const button = new Button({\n root: this.container,\n name: item.name,\n icon: item.icon,\n tooltip: typeof item.tooltip === 'string' ? item.tooltip : item.tooltip(editor.locale),\n tabIndex: -1,\n onClick: () => {\n editor.focus();\n item.onClick(editor, item.name);\n },\n });\n button.render();\n }\n\n private appendDropdown(editor: Editor, item: ToolbarDropdownItem) {\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 location: 'local',\n direction: this.placement === 'top' ? 'bottom' : 'top',\n onSelect: value => {\n editor.focus();\n item.onSelect(editor, value);\n },\n });\n dropdown.render();\n this.dropdownList.push(dropdown);\n }\n\n private appendUploadButton(editor: Editor, item: ToolbarUploadItem): void {\n const uploadNode = query(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 => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n });\n }\n\n // Updates state of each item such as disabled, selected.\n public updateState(state: SelectionState) {\n const { appliedItems } = state;\n const disabledNameMap = state.disabledNameMap || new Map();\n const selectedNameMap = state.selectedNameMap || new Map();\n const selectedValuesMap = state.selectedValuesMap || new Map();\n for (const item of this.buttonItemList) {\n const selectedClass = 'lake-button-selected';\n const buttonNode = this.container.find(`button[name=\"${item.name}\"]`);\n let isDisabled = disabledNameMap.get(item.name);\n if (isDisabled === undefined) {\n isDisabled = item.isDisabled ? item.isDisabled(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 ? 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 ? 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 ? 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.append(this.container);\n for (const name of this.items) {\n if (name === '|') {\n this.appendDivider();\n } else {\n let item;\n if (typeof name === 'string') {\n item = toolbarItemMap.get(name);\n if (!item) {\n throw new Error(`ToolbarItem \"${name}\" has not been defined yet.`);\n }\n } else {\n item = name;\n }\n if (item.type === 'button') {\n this.buttonItemList.push(item);\n this.appendNormalButton(editor, item);\n } else if (item.type === 'dropdown') {\n this.allMenuMap.set(item.name, Dropdown.getMenuMap(item.menuItems, editor.locale));\n this.dropdownItemList.push(item);\n this.appendDropdown(editor, item);\n } else if (item.type === 'upload') {\n this.appendUploadButton(editor, item);\n }\n }\n }\n }\n\n // Destroys the toolbar.\n public unmount(): void {\n for (const dropdown of this.dropdownList) {\n dropdown.unmount();\n }\n this.container.remove();\n }\n}\n","import { editors } from '../storage/editors';\nimport { isVisible } from '../utils/is-visible';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\nimport { Toolbar, ToolbarConfig } from './toolbar';\n\ntype FloatingToolbarConfig = ToolbarConfig & {\n target: Nodes | Range;\n};\n\nexport class FloatingToolbar extends Toolbar {\n\n private range: Range;\n\n constructor(config: FloatingToolbarConfig) {\n super(config);\n if (config.target instanceof Nodes) {\n const range = new Range();\n range.selectNodeContents(config.target);\n this.range = range;\n } else {\n this.range = config.target;\n }\n this.container.removeClass('lake-toolbar');\n this.container.addClass('lake-popup');\n this.container.addClass('lake-floating-toolbar');\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n public updatePosition(): void {\n const visible = isVisible(this.range);\n if (!visible.top) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n this.container.show('flex');\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n const left = (rangeX + rangeRect.width / 2 - this.container.width() / 2).toFixed(1);\n const top = (rangeY - this.container.height() - 6).toFixed(1);\n this.container.css({\n left: `${left}px`,\n top: `${top}px`,\n });\n }\n\n // Renders a floating toolbar for the specified range.\n public render(): void {\n const container = this.range.commonAncestor.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error('The range must be within the editor.');\n }\n super.render(editor);\n this.updatePosition();\n this.updateState({\n appliedItems: [],\n });\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n }\n\n // Destroys the floating toolbar.\n public unmount(): void {\n super.unmount();\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n window.removeEventListener('resize', this.resizeListener);\n }\n}\n","import EventEmitter from 'eventemitter3';\nimport type { Editor } from '../editor';\nimport { BoxType, BoxValue } from '../types/box';\nimport { ToolbarItem } from '../types/toolbar';\nimport { boxes } from '../storage/boxes';\nimport { editors } from '../storage/editors';\nimport { debug } from '../utils/debug';\nimport { 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 { FloatingToolbar } from '../ui/floating-toolbar';\n\n// The Box class represents an embedded content, which is used to enhance editing capability.\nexport class Box {\n // <lake-box> element\n public node: Nodes;\n\n public event: EventEmitter = new EventEmitter();\n\n public toolbar: FloatingToolbar | null = null;\n\n constructor(node: string | Node | Nodes) {\n if (typeof node === 'string') {\n const component = boxes.get(node);\n if (component === undefined) {\n throw new Error(`Box \"${node}\" has not been defined yet.`);\n }\n const type = encode(component.type);\n const name = encode(component.name);\n this.node = query(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 private initiate(): void {\n let container = this.getContainer();\n if (container.length === 0) {\n this.node.html(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 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 an instance of the editor that includes the box.\n public getEditor(): Editor {\n const container = this.node.closest('div[contenteditable]');\n const editor = container.length > 0 ? editors.get(container.id) : undefined;\n if (!editor) {\n throw new Error(`Box \"${this.name}\" (id=${this.node.id}) is not rendered in the editor.`);\n }\n return editor;\n }\n\n // Returns the container node of the box.\n public getContainer(): Nodes {\n return this.node.find('.lake-box-container');\n }\n\n // Sets a floating toolbar for the box.\n public setToolbar(items: ToolbarItem[]): void {\n const editor = this.getEditor();\n this.event.on('focus', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.toolbar = new FloatingToolbar({\n target: this.node,\n items,\n });\n this.toolbar.render();\n const appliedItems = editor.selection.getAppliedItems();\n this.toolbar.updateState({\n appliedItems,\n });\n });\n this.event.on('blur', () => {\n if (this.toolbar) {\n this.toolbar.unmount();\n this.toolbar = null;\n }\n });\n }\n\n // Renders the contents of the box.\n public render(): void {\n const component = boxes.get(this.name);\n if (component === undefined) {\n return;\n }\n this.event.emit('beforeunmount');\n this.event.removeAllListeners();\n this.initiate();\n const content = component.render(this);\n if (content !== undefined) {\n const container = this.getContainer();\n container.empty();\n container.append(content);\n }\n debug(`Box \"${this.name}\" (id: ${this.node.id}) rendered`);\n }\n\n // Destroys 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 { 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","// 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-deep-element';\nexport * from './remove-zws';\nexport * from './change-tag-name';\nexport * from './fix-numbered-list';\nexport * from './append-break';\nexport * from './remove-break';\nexport * from './set-block-indent';\nexport * from './morph';\nexport * from './is-visible';\nexport * from './scroll-to-node';\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, '&quot;')}; `;\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 { appendBreak } from '../utils/append-break';\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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const prevBlock = block.prev();\n if (prevBlock.length === 0) {\n return;\n }\n const bookmark = insertBookmark(range);\n mergeNodes(prevBlock, block);\n toBookmark(range, bookmark);\n fixList(range);\n}\n","import { removeBreak } from '../utils/remove-break';\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 removeBreak(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, getDeepElement, wrapNodeList, appendBreak } 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 = getDeepElement(block);\n let child = node.first();\n while(child.length > 0) {\n const nextNode = child.next();\n deepestBlock.append(child);\n if (deepestBlock.name === child.name || child.name === 'li') {\n child.remove(true);\n }\n child = nextNode;\n }\n node.replaceWith(block);\n }\n }\n toBookmark(range, bookmark);\n 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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n","import { TwoParts } from '../types/object';\nimport { splitNodes, appendBreak } 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 appendBreak(start);\n }\n if (end) {\n if (end.isEmpty) {\n appendBreak(end);\n }\n range.shrinkBefore(end);\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, getDeepElement, removeBreak } 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 a nested mark copied from ancestors of the specified node.\nfunction getNestedMark(node: Nodes): Nodes | null {\n let parent = node;\n if (parent.isText) {\n parent = parent.parent();\n }\n let mark: Nodes | null = null;\n while (parent.length > 0) {\n if (!parent.isMark) {\n break;\n }\n if (mark) {\n const newMark = parent.clone();\n newMark.append(mark);\n mark = newMark;\n } else {\n mark = parent.clone();\n }\n parent = parent.parent();\n }\n return mark;\n}\n\n// Returns the topmost mark element or the closest element with the same tag name as the specified node.\nfunction getUpperMark(node: Nodes, tagName: string): Nodes {\n const nodeText = node.text();\n let parent = node;\n while(parent.length > 0) {\n const nextParent = parent.parent();\n if (\n !nextParent.isMark ||\n nodeText !== nextParent.text() ||\n !parent.isText && parent.name === tagName && parent.attr('style') !== ''\n ) {\n break;\n }\n parent = nextParent;\n }\n return parent;\n}\n\n// Adds the specified mark to the texts of the range.\nexport function addMark(range: Range, value: string | Nodes): void {\n if (range.commonAncestor.isOutside) {\n return;\n }\n let valueNode = query(value);\n const tagName = valueNode.name;\n const styleValue = valueNode.attr('style');\n const cssProperties = parseStyle(styleValue);\n if (range.isCollapsed) {\n if (range.isBox) {\n const boxNode = range.startNode.closest('lake-box');\n const box = getBox(boxNode);\n if (box.type === 'block') {\n const newBlock = query('<p><br /></p>');\n if (range.isBoxStart) {\n boxNode.before(newBlock);\n } else {\n boxNode.after(newBlock);\n }\n range.shrinkAfter(newBlock);\n } else {\n range.adjustBox();\n }\n }\n const block = range.startNode.closestBlock();\n removeBreak(block);\n // https://en.wikipedia.org/wiki/Zero-width_space\n const zeroWidthSpace = new Nodes(document.createTextNode('\\u200B'));\n const newMark = getNestedMark(range.startNode);\n splitMarks(range);\n if (newMark) {\n let child = newMark;\n while(child.length > 0) {\n if (child.name === tagName) {\n child.css(cssProperties);\n }\n child = child.first();\n }\n if (newMark.name === tagName) {\n valueNode = newMark;\n } else {\n valueNode.append(newMark);\n }\n }\n if (valueNode.text() === '') {\n const deepestMark = getDeepElement(valueNode);\n deepestMark.append(zeroWidthSpace);\n }\n 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 { getDeepElement, 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 a nested mark copied from each last child of the descendants of the specified node.\nfunction getNestedMark(node: Nodes, tagName?: string): Nodes | null {\n if (!node.isMark || !tagName) {\n return null;\n }\n let mark: Nodes | null = null;\n let deepestMark: Nodes | null = null;\n let child = node;\n while (child.length > 0) {\n if (!child.isMark) {\n break;\n }\n if (child.name !== tagName) {\n if (deepestMark) {\n const newMark = child.clone();\n deepestMark.append(newMark);\n deepestMark = newMark;\n } else {\n mark = child.clone();\n deepestMark = mark;\n }\n }\n child = child.last();\n }\n return mark;\n}\n\n// Removes the specified marks 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 = getNestedMark(parts.start, tagName);\n if (!newMark) {\n parts.start.after(zeroWidthSpace);\n removeEmptyMarks(parts.start);\n if (zeroWidthSpace.prev().isText) {\n range.setStartAfter(zeroWidthSpace.prev());\n range.collapseToStart();\n zeroWidthSpace.remove();\n return;\n }\n range.setStartAfter(zeroWidthSpace);\n range.collapseToStart();\n return;\n }\n const deepestMark = getDeepElement(newMark);\n deepestMark.append(zeroWidthSpace);\n parts.start.after(newMark);\n removeEmptyMarks(parts.start);\n range.shrinkAfter(newMark);\n return;\n }\n splitMarks(range);\n const marks = range.getMarks();\n const bookmark = insertBookmark(range);\n for (const mark of marks) {\n if (!tagName || mark.name === tagName) {\n const parentNode = mark.parent();\n mark.remove(!mark.isEmpty);\n if (parentNode.length > 0) {\n parentNode.get(0).normalize();\n }\n }\n }\n removeZWS(range.commonAncestor);\n toBookmark(range, bookmark);\n}\n","import { query } from '../utils/query';\nimport { removeBreak } from '../utils/remove-break';\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 removeBreak(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 { splitMarks } from './split-marks';\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 splitMarks(range);\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 { appendBreak, 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 const breakNode = appendBreak(parentNode);\n range.setStartBefore(breakNode);\n range.collapseToStart();\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.getCurrentRange();\n }\n\n // Returns a range object currently selected.\n public getCurrentRange(): Range {\n if (this.selection.rangeCount > 0) {\n const range = this.selection.getRangeAt(0);\n return new Range(range);\n }\n return new Range();\n }\n\n // Adds the saved range to the native selection.\n public sync(): void {\n if (!this.container.contains(this.range.commonAncestor)) {\n return;\n }\n this.selection.removeAllRanges();\n this.selection.addRange(this.range.get());\n }\n\n // Updates the saved range with the range of the native selection.\n public updateByRange(): void {\n const newRange = this.getCurrentRange();\n if (!this.container.contains(newRange.commonAncestor)) {\n return;\n }\n if (\n this.range.startNode.get(0) === newRange.startNode.get(0) &&\n this.range.startOffset === newRange.startOffset &&\n this.range.endNode.get(0) === newRange.endNode.get(0) &&\n this.range.endOffset === newRange.endOffset\n ) {\n return;\n }\n this.range = newRange;\n }\n\n // Updates the saved range with the range represented by the bookmark.\n public updateByBookmark(): void {\n const range = this.range;\n const container = this.container;\n const boxFocus = container.find('lake-box[focus]');\n if (boxFocus.length > 0) {\n toBookmark(range, {\n anchor: new Nodes(),\n focus: boxFocus,\n });\n this.sync();\n return;\n }\n const anchor = container.find('lake-bookmark[type=\"anchor\"]');\n const focus = container.find('lake-bookmark[type=\"focus\"]');\n toBookmark(range, {\n anchor,\n focus,\n });\n this.sync();\n }\n\n public 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 this.sync();\n }\n\n // Inserts a box into the position of the selection.\n public insertBox(boxName: Parameters<typeof insertBox>[1], boxValue?: Parameters<typeof insertBox>[2]): Box {\n const box = insertBox(this.range, boxName, boxValue);\n if (!box) {\n throw new Error(`Box \"${boxName}\" cannot be inserted 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 container = this.selection.container;\n const range = this.selection.range;\n if (!container.contains(range.commonAncestor)) {\n range.shrinkAfter(container);\n }\n const commandItem = this.getItem(name);\n commandItem.execute.apply(this, data);\n debug(`Command \"${name}\" executed`);\n }\n}\n","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 (!this.container.contains(range.commonAncestor)) {\n return newContainer;\n }\n if (range.isInsideBox) {\n const boxNode = range.commonAncestor.closest('lake-box');\n const boxNodePath = boxNode.path();\n const newBoxNode = newContainer.find(boxNodePath);\n const newRange = range.clone();\n newRange.selectBox(newBoxNode);\n insertBookmark(newRange);\n return newContainer;\n }\n const startNodePath = range.startNode.path();\n const endNodePath = range.endNode.path();\n const newStartNode = newContainer.find(startNodePath);\n const newEndNode = newContainer.find(endNodePath);\n const newRange = range.clone();\n newRange.setStart(newStartNode, range.startOffset);\n newRange.setEnd(newEndNode, range.endOffset);\n insertBookmark(newRange);\n return newContainer;\n }\n\n public undo(): void {\n if (!this.list[this.index - 2]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index > 1) {\n const prevItem = this.list[this.index - 2];\n if (!prevItem) {\n break;\n }\n this.index--;\n const prevValue = this.getValue(prevItem);\n if (this.removeBookmark(prevValue) !== this.removeBookmark(value)) {\n this.morphContainer(prevItem);\n this.event.emit('undo', prevValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History undone (index: ${this.index})`);\n }\n\n public redo(): void {\n if (!this.list[this.index]) {\n return;\n }\n this.selection.insertBookmark();\n const value = this.getValue(this.container);\n while (this.index < this.list.length) {\n const nextItem = this.list[this.index];\n if (!nextItem) {\n break;\n }\n this.index++;\n const nextValue = this.getValue(nextItem);\n if (this.removeBookmark(nextValue) !== this.removeBookmark(value)) {\n this.morphContainer(nextItem);\n this.event.emit('redo', nextValue);\n break;\n }\n }\n this.selection.updateByBookmark();\n debug(`History redone (index: ${this.index})`);\n }\n\n public continue(): void {\n this.canSave = true;\n }\n\n public pause(): void {\n this.canSave = false;\n }\n\n public save(options: SaveOptions = {}): void {\n const inputType = options.inputType ?? '';\n const update = options.update ?? false;\n const emitEvent = options.emitEvent ?? true;\n if (!this.canSave) {\n return;\n }\n const item = this.cloneContainer();\n const value = this.getValue(item);\n if (\n this.list[this.index - 1] &&\n this.removeBookmark(this.getValue(this.list[this.index - 1])) === this.removeBookmark(value)\n ) {\n return;\n }\n if (update) {\n this.list.splice(this.index - 1, Infinity, item);\n } else {\n this.list.splice(this.index, Infinity, item);\n this.index++;\n }\n if (this.list.length > this.limit) {\n this.list.shift();\n this.index = this.list.length;\n }\n debug(`History saved (index: ${this.index}, inputType: \"${inputType}\", update: ${update}, emitEvent: ${emitEvent})`);\n if (emitEvent) {\n this.event.emit('save', denormalizeValue(value), {\n inputType,\n update,\n emitEvent,\n });\n }\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { Nodes } from '../models/nodes';\n\ntype EventItem = {\n type: string;\n listener: (event: KeyboardEvent) => void | boolean;\n};\n\nexport class Keystroke {\n private container: Nodes;\n\n private keydownEventList: EventItem[] = [];\n\n private keyupEventList: EventItem[] = [];\n\n constructor(container: Nodes) {\n this.container = container;\n this.container.on('keydown', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keydownEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n this.container.on('keyup', event => {\n const keyboardEvent = event as KeyboardEvent;\n if (keyboardEvent.isComposing) {\n return;\n }\n if (keyboardEvent.defaultPrevented) {\n return;\n }\n for (const item of this.keyupEventList) {\n if (isKeyHotkey(item.type, keyboardEvent)) {\n if (item.listener(keyboardEvent) === false) {\n break;\n }\n }\n }\n });\n }\n\n // Sets a keydown shortcut.\n public setKeydown(type: string, listener: EventListener) {\n this.keydownEventList.push({\n type,\n listener,\n });\n }\n\n // Sets a keyup shortcut.\n public setKeyup(type: string, listener: EventListener) {\n this.keyupEventList.push({\n type,\n listener,\n });\n }\n\n // Executes the keydown shortcuts.\n public keydown(type: string) {\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 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';\nimport { InitializePlugin, UnmountPlugin } from '../types/plugin';\n\nexport class Plugin {\n private pluginMap: Map<string, InitializePlugin> = new Map();\n\n public add(name: string, plugin: InitializePlugin) {\n if (this.pluginMap.get(name)) {\n throw new Error(`Plugin \"${name}\" is already defined.`);\n }\n this.pluginMap.set(name, plugin);\n }\n\n public loadAll(editor: Editor) {\n const unmountPluginMap: Map<string, UnmountPlugin> = new Map();\n for (const name of this.pluginMap.keys()) {\n const plugin = this.pluginMap.get(name);\n if (plugin && editor.config[name] !== false) {\n const result = plugin(editor);\n if (result) {\n unmountPluginMap.set(name, result);\n }\n }\n }\n return unmountPluginMap;\n }\n}\n","import debounce from 'debounce';\nimport isEqual from 'fast-deep-equal/es6';\nimport EventEmitter from 'eventemitter3';\nimport { version } from '../package.json';\nimport { SelectionState } from './types/object';\nimport { UnmountPlugin } from './types/plugin';\nimport { Locales, TranslationFunctions } from './i18n/types';\nimport { getInstanceMap } from './storage/box-instances';\nimport { editors } from './storage/editors';\nimport { denormalizeValue, normalizeValue, query, getBox, scrollToNode, 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 slash: false,\n mention: false,\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 private unmountPluginMap: Map<string, UnmountPlugin> = new Map();\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 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 public popup: any = null;\n\n constructor(config: EditorConfig) {\n if (!config.root) {\n throw new Error('The root of the config must be specified.');\n }\n this.root = query(config.root);\n this.toolbar = config.toolbar;\n this.config = { ...defaultConfig };\n for (const key of Object.keys(config)) {\n this.config[key] = config[key];\n }\n this.containerWrapper = query('<div class=\"lake-container-wrapper\" />');\n this.container = query('<div class=\"lake-container\" />');\n this.overlayContainer = query('<div class=\"lake-overlay\" />');\n this.readonly = this.config.readonly;\n\n this.container.attr({\n contenteditable: this.readonly ? 'false' : 'true',\n spellcheck: this.config.spellcheck ? 'true' : 'false',\n tabindex: this.config.tabIndex.toString(),\n 'data-readonly': this.readonly ? 'true' : 'false',\n });\n if (this.config.placeholder !== '') {\n this.container.attr('placeholder', this.config.placeholder);\n }\n\n this.selection = new Selection(this.container);\n this.command = new Command(this.selection);\n this.history = new History(this.selection);\n this.history.limit = this.config.historySize;\n this.keystroke = new Keystroke(this.container);\n\n editors.set(this.container.id, this);\n }\n\n private copyListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('copy', event);\n };\n\n private cutListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('cut', event);\n };\n\n private pasteListener: EventListener = event => {\n const range = this.selection.getCurrentRange();\n if (!this.container.contains(range.commonAncestor)) {\n return;\n }\n this.event.emit('paste', event);\n };\n\n private selectionchangeListener: EventListener = () => {\n this.updateSelectionRange();\n this.updateBoxSelectionStyle();\n this.emitStateChangeEvent();\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n this.event.emit('click', targetNode);\n };\n\n private updateSelectionRange = debounce(() => {\n this.selection.updateByRange();\n }, 1, {\n immediate: true,\n });\n\n // Updates the classes of all boxes when the current selection is changed.\n private updateBoxSelectionStyle = debounce(() => {\n // The editor has been unmounted.\n if (this.root.first().length === 0) {\n return;\n }\n const range = this.selection.getCurrentRange();\n const clonedRange = range.clone();\n clonedRange.adjustBox();\n this.container.find('lake-box').each(boxNativeNode => {\n const box = getBox(boxNativeNode);\n const boxContainer = box.getContainer();\n if (boxContainer.length === 0) {\n return;\n }\n if (range.compareBeforeNode(boxContainer) < 0 && range.compareAfterNode(boxContainer) > 0) {\n if (!(range.isCollapsed && range.startNode.get(0) === boxContainer.get(0) && range.startOffset === 0)) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-activated');\n box.event.emit('focus');\n return;\n }\n }\n if (clonedRange.intersectsNode(box.node)) {\n boxContainer.removeClass('lake-box-activated');\n if (range.isCollapsed) {\n boxContainer.removeClass('lake-box-hovered');\n boxContainer.removeClass('lake-box-selected');\n boxContainer.addClass('lake-box-focused');\n box.event.emit('focus');\n } else {\n boxContainer.removeClass('lake-box-focused');\n boxContainer.addClass('lake-box-selected');\n box.event.emit('blur');\n }\n return;\n }\n boxContainer.removeClass('lake-box-activated');\n boxContainer.removeClass('lake-box-focused');\n boxContainer.removeClass('lake-box-selected');\n box.event.emit('blur');\n });\n }, 50, {\n immediate: true,\n });\n\n // Triggers the statechange event when the current selection is changed.\n private emitStateChangeEvent = debounce(() => {\n const commandNames = this.command.getNames();\n let appliedItems = this.selection.getAppliedItems();\n if (appliedItems.length > 0 && !this.container.contains(appliedItems[0].node)) {\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.setStart(paragraph, 0);\n range.collapseToStart();\n }\n const text = stripNode.text();\n stripNode.html('<br />');\n selection.insertNode(document.createTextNode(text));\n }\n\n // Resets the value of \"unsavedInputData\" property.\n private resetUnsavedInputData(): void {\n this.unsavedInputData = '';\n this.unsavedInputCount = 0;\n }\n\n // Handles input event.\n private handleInputEvent(event: InputEvent | CompositionEvent) {\n this.selection.updateByRange();\n const range = this.selection.range;\n if (range.isInsideBox) {\n return;\n }\n if (range.isBoxStart || range.isBoxEnd) {\n this.moveBoxStripText();\n this.history.save();\n return;\n }\n const inputType = event instanceof CompositionEvent ? 'insertText' : event.inputType;\n if (inputType === 'insertText') {\n const inputData = event.data ?? '';\n if (inputData.length > 1) {\n this.history.save({\n inputType: 'insertText',\n update: false,\n });\n return;\n }\n this.unsavedInputData += inputData;\n this.unsavedInputCount++;\n if (this.unsavedInputData.length < this.config.minChangeSize) {\n this.history.save({\n inputType: 'insertText',\n update: this.unsavedInputCount > 1,\n });\n } else {\n this.history.save({\n inputType: 'insertText',\n update: true,\n });\n this.resetUnsavedInputData();\n }\n return;\n }\n this.history.save();\n }\n\n // Binds events for inputting text.\n private bindInputEvents(): void {\n this.container.on('compositionstart', () => {\n this.isComposing = true;\n this.container.removeClass('lake-placeholder');\n });\n this.container.on('compositionend', event => {\n this.isComposing = false;\n this.handleInputEvent(event as CompositionEvent);\n });\n this.container.on('input', event => {\n const inputEvent = event as InputEvent;\n this.isComposing = inputEvent.isComposing;\n if (this.isComposing) {\n return;\n }\n this.handleInputEvent(event as InputEvent);\n });\n }\n\n // Binds events for history.\n private bindHistoryEvents(): void {\n const executeCommonMethods = (value: string) => {\n if (this.fixContent()) {\n this.history.save({\n update: true,\n emitEvent: false,\n });\n value = this.getValue();\n }\n this.emitStateChangeEvent();\n this.togglePlaceholderClass(value);\n this.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 if (options.inputType !== 'insertText') {\n this.selection.sync();\n this.resetUnsavedInputData();\n }\n });\n }\n\n // Returns a boolean value indicating whether the editor is focused.\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 for the specified language.\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.shrinkBefore(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 range.adjustBr();\n return changed;\n }\n\n // Sets default config for a plugin.\n public setPluginConfig(name: string, config: {[key: string]: any}): void {\n if (typeof this.config[name] !== 'object') {\n this.config[name] = {};\n }\n for (const key of Object.keys(config)) {\n if (this.config[name][key] === undefined) {\n this.config[name][key] = config[key];\n }\n }\n }\n\n // 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 const range = this.selection.range;\n if (this.container.contains(range.commonAncestor) && range.isBox) {\n return;\n }\n this.container.focus();\n }\n\n // Removes focus from the editor.\n public blur(): void {\n this.container.blur();\n }\n\n // 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 scrollToNode(artificialCaret, {\n behavior: 'instant',\n block: 'nearest',\n inline: 'nearest',\n });\n artificialCaret.remove();\n }\n\n // Sets the specified content to the editor.\n public setValue(value: string): void {\n value = normalizeValue(value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.container.empty();\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.renderBoxes();\n this.selection.updateByBookmark();\n }\n\n // Returns the content of the editor.\n public getValue(): string {\n const item = this.history.cloneContainer();\n let value = new HTMLParser(item).getHTML();\n value = denormalizeValue(value);\n return value;\n }\n\n // Renders an editor area and sets default content to it.\n public render(): void {\n const value = normalizeValue(this.config.value);\n const htmlParser = new HTMLParser(value);\n const fragment = htmlParser.getFragment();\n this.root.empty();\n this.root.append(this.containerWrapper);\n this.containerWrapper.append(this.container);\n this.containerWrapper.append(this.overlayContainer);\n this.togglePlaceholderClass(htmlParser.getHTML());\n this.container.append(fragment);\n this.unmountPluginMap = Editor.plugin.loadAll(this);\n if (!this.readonly) {\n this.selection.updateByBookmark();\n this.history.save({\n emitEvent: false,\n });\n }\n this.renderBoxes();\n if (this.toolbar) {\n this.toolbar.render(this);\n }\n document.addEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.addEventListener('cut', this.cutListener);\n document.addEventListener('paste', this.pasteListener);\n document.addEventListener('selectionchange', this.selectionchangeListener);\n document.addEventListener('click', this.clickListener);\n this.bindInputEvents();\n this.bindHistoryEvents();\n }\n }\n\n // Destroys the editor.\n public unmount(): void {\n // Executes delayed executions immediately.\n this.updateSelectionRange.flush();\n this.updateBoxSelectionStyle.flush();\n this.emitStateChangeEvent.flush();\n for (const name of this.unmountPluginMap.keys()) {\n const unmountPlugin = this.unmountPluginMap.get(name);\n if (unmountPlugin) {\n unmountPlugin();\n debug(`Plugin \"${name}\" unmounted`);\n }\n }\n if (this.toolbar) {\n this.toolbar.unmount();\n }\n this.removeBoxGarbage();\n this.container.find('lake-box').each(boxNativeNode => {\n const boxNode = query(boxNativeNode);\n const box = getBox(boxNode);\n box.unmount();\n });\n this.event.removeAllListeners();\n this.history.event.removeAllListeners();\n this.root.off();\n this.root.empty();\n document.removeEventListener('copy', this.copyListener);\n if (!this.readonly) {\n document.removeEventListener('cut', this.cutListener);\n document.removeEventListener('paste', this.pasteListener);\n document.removeEventListener('selectionchange', this.selectionchangeListener);\n document.removeEventListener('click', this.clickListener);\n }\n }\n}\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\n\nexport default {\n type: 'block',\n name: 'hr',\n render: box => {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-hr\"><hr /></div>');\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n },\n html: () => '<hr />',\n} as BoxComponent;\n","import debounce from 'debounce';\nimport { 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 default {\n type: 'block',\n name: 'codeBlock',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-code-block\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const codeBlockNativeNode = rootNode.get(0) as HTMLElement;\n if (!codeBlockNativeNode) {\n return;\n }\n // begin to create CodeMirror\n const CodeMirror = window.LakeCodeMirror;\n if (!CodeMirror) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n rootNode.addClass('lake-code-block-error');\n rootNode.text(`\n The code cannot be displayed because window.LakeCodeMirror is not found.\n Please check if the \"lake-codemirror\" library is added to this page.\n `.trim());\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n return;\n }\n const {\n EditorState, Compartment, EditorView,\n keymap, history, defaultKeymap, historyKeymap,\n indentWithTab, syntaxHighlighting,\n } = CodeMirror;\n const defaultLangItems = CodeMirror.langItems;\n const codeBlockConfig = editor.config.codeBlock;\n const langItems = defaultLangItems.filter(\n (item: any) => codeBlockConfig.langList.indexOf(item.value) >= 0,\n );\n // language menu items\n const langItemMap: Map<string, any> = new Map();\n for (const item of langItems) {\n langItemMap.set(item.value, item);\n }\n const boxValue = box.value;\n const langItem = langItemMap.get(boxValue.lang);\n const language = new Compartment();\n const changeHandler = debounce((value: string) => {\n editor.selection.updateByRange();\n if (editor.isComposing) {\n return;\n }\n box.updateValue('code', value);\n editor.history.save();\n }, 1, {\n immediate: false,\n });\n const updateListener = EditorView.updateListener.of((update: any) => {\n if (!update.docChanged) {\n return;\n }\n changeHandler(update.state.doc.toString());\n });\n const codeEditor = new EditorView({\n parent: codeBlockNativeNode,\n doc: boxValue.code ?? '',\n extensions: [\n EditorState.readOnly.of(editor.readonly),\n EditorView.editable.of(!editor.readonly),\n history(),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n indentWithTab,\n ]),\n syntaxHighlighting(getHighlightStyle(CodeMirror)),\n language.of(langItem && langItem.component ? langItem.component() : []),\n updateListener,\n ],\n });\n rootNode.find('[contenteditable=\"true\"]').attr('tabindex', '-1');\n const dropdown = new Dropdown({\n root: rootNode,\n name: 'langType',\n downIcon: icons.get('down'),\n defaultValue: langItem ? boxValue.lang : codeBlockConfig.defaultLang,\n tooltip: editor.locale.codeBlock.langType(),\n location: 'global',\n menuType: 'list',\n menuHeight: '200px',\n menuItems: langItems.map((item: any) => ({\n value: item.value,\n text: item.text,\n })),\n onSelect: value => {\n box.updateValue({\n lang: value,\n });\n box.unmount();\n box.render();\n editor.selection.selectBox(box);\n editor.history.save();\n },\n });\n dropdown.render();\n rootNode.on('click', () => {\n if (codeEditor.hasFocus) {\n return;\n }\n codeEditor.focus();\n });\n box.event.on('beforeunmount', () => {\n dropdown.unmount();\n codeEditor.destroy();\n debug('CodeMirror destroyed');\n });\n },\n} as BoxComponent;\n","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\r\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\r\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\r\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\r\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\r\n var _, done = false;\r\n for (var i = decorators.length - 1; i >= 0; i--) {\r\n var context = {};\r\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\r\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\r\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\r\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\r\n if (kind === \"accessor\") {\r\n if (result === void 0) continue;\r\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\r\n if (_ = accept(result.get)) descriptor.get = _;\r\n if (_ = accept(result.set)) descriptor.set = _;\r\n if (_ = accept(result.init)) initializers.unshift(_);\r\n }\r\n else if (_ = accept(result)) {\r\n if (kind === \"field\") initializers.unshift(_);\r\n else descriptor[key] = _;\r\n }\r\n }\r\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\r\n done = true;\r\n};\r\n\r\nexport function __runInitializers(thisArg, initializers, value) {\r\n var useValue = arguments.length > 2;\r\n for (var i = 0; i < initializers.length; i++) {\r\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\r\n }\r\n return useValue ? value : void 0;\r\n};\r\n\r\nexport function __propKey(x) {\r\n return typeof x === \"symbol\" ? x : \"\".concat(x);\r\n};\r\n\r\nexport function __setFunctionName(f, name, prefix) {\r\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\r\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\r\n};\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\r\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\r\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\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 var r, s = 0;\r\n function next() {\r\n while (r = env.stack.pop()) {\r\n try {\r\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\r\n if (r.dispose) {\r\n var result = r.dispose.call(r.value);\r\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\r\n }\r\n else s |= 1;\r\n }\r\n catch (e) {\r\n fail(e);\r\n }\r\n }\r\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\r\n if (env.hasError) throw env.error;\r\n }\r\n return next();\r\n}\r\n\r\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\r\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\r\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\r\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\r\n });\r\n }\r\n return path;\r\n}\r\n\r\nexport default {\r\n __extends: __extends,\r\n __assign: __assign,\r\n __rest: __rest,\r\n __decorate: __decorate,\r\n __param: __param,\r\n __esDecorate: __esDecorate,\r\n __runInitializers: __runInitializers,\r\n __propKey: __propKey,\r\n __setFunctionName: __setFunctionName,\r\n __metadata: __metadata,\r\n __awaiter: __awaiter,\r\n __generator: __generator,\r\n __createBinding: __createBinding,\r\n __exportStar: __exportStar,\r\n __values: __values,\r\n __read: __read,\r\n __spread: __spread,\r\n __spreadArrays: __spreadArrays,\r\n __spreadArray: __spreadArray,\r\n __await: __await,\r\n __asyncGenerator: __asyncGenerator,\r\n __asyncDelegator: __asyncDelegator,\r\n __asyncValues: __asyncValues,\r\n __makeTemplateObject: __makeTemplateObject,\r\n __importStar: __importStar,\r\n __importDefault: __importDefault,\r\n __classPrivateFieldGet: __classPrivateFieldGet,\r\n __classPrivateFieldSet: __classPrivateFieldSet,\r\n __classPrivateFieldIn: __classPrivateFieldIn,\r\n __addDisposableResource: __addDisposableResource,\r\n __disposeResources: __disposeResources,\r\n __rewriteRelativeImportExtension: __rewriteRelativeImportExtension,\r\n};\r\n","import { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { Nodes } from '../models/nodes';\n\ntype ResizerConfig = {\n root: Nodes;\n target: Nodes;\n width: number;\n height: number;\n onResize?: (width: number, height: number) => void;\n onStop: (width: number, height: number) => void;\n};\n\nexport class Resizer {\n private config: ResizerConfig;\n\n private root: Nodes;\n\n private target: Nodes;\n\n public container: Nodes;\n\n constructor(config: ResizerConfig) {\n this.config = config;\n this.root = config.root;\n this.target = config.target;\n this.container = query(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\">${config.width} x ${config.height}</div>\n </div>\n `);\n }\n\n private bindEvents(pointerNode: Nodes): void {\n const target = this.target;\n const infoNode = this.container.find('.lake-resizer-info');\n const isPlus = pointerNode.attr('class').indexOf('-right') >= 0;\n const initialWidth = target.width();\n const initialHeight = target.height();\n const rate = initialHeight / initialWidth;\n let clientX = 0;\n let width = 0;\n // resizing box\n const pointermoveListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const diffX = pointerEvent.clientX - clientX;\n const newWidth = Math.round(isPlus ? width + diffX : width - diffX);\n const newHeight = Math.round(rate * newWidth);\n infoNode.text(`${newWidth} x ${newHeight}`);\n target.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n if (this.config.onResize) {\n this.config.onResize(newWidth, newHeight);\n }\n };\n // start resizing\n const pointerdownListener = (event: Event) => {\n const pointerEvent = event as PointerEvent;\n const pointerNativeNode = pointerNode.get(0) as Element;\n // The capture will be implicitly released after a pointerup or pointercancel event.\n // https://developer.mozilla.org/en-US/docs/Web/API/Element/setPointerCapture\n try {\n // Test case throws an exception on Firefox.\n pointerNativeNode.setPointerCapture(pointerEvent.pointerId);\n } catch { /* empty */ }\n clientX = pointerEvent.clientX;\n width = target.width();\n infoNode.show();\n pointerNode.on('pointermove', pointermoveListener);\n };\n // stop resizing\n const pointerupListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n width = target.width();\n const height = Math.round(rate * width);\n this.config.onStop(width, height);\n };\n // cancel resizing\n const pointercancelListner = () => {\n pointerNode.off('pointermove');\n infoNode.hide();\n };\n pointerNode.on('pointerdown', pointerdownListener);\n pointerNode.on('pointerup', pointerupListner);\n pointerNode.on('pointercancel', pointercancelListner);\n }\n\n public render(): void {\n this.bindEvents(this.container.find('.lake-resizer-top-left'));\n this.bindEvents(this.container.find('.lake-resizer-top-right'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-left'));\n this.bindEvents(this.container.find('.lake-resizer-bottom-right'));\n this.root.append(this.container);\n }\n}\n","import 'photoswipe/style.css';\nimport PhotoSwipeLightbox, { DataSource } from 'photoswipe/lightbox';\nimport PhotoSwipe from 'photoswipe';\nimport { BoxComponent } from '../types/box';\nimport { ToolbarItem } from '../types/toolbar';\nimport { icons } from '../icons';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\nimport { getBox } from '../utils/get-box';\nimport { Nodes } from '../models/nodes';\nimport { Box } from '../models/box';\nimport { Resizer } from '../ui/resizer';\n\ntype ImageInfo = {\n node: Nodes;\n width?: number;\n height?: number;\n};\n\nconst alignValueMap: {[key: string]: string} = {\n start: 'left',\n end: 'right',\n};\n\nfunction setFloatingToolbar(box: Box): void {\n const items: ToolbarItem[] = [\n {\n name: 'align',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('alignLeft'),\n tooltip: locale => locale.image.align(),\n menuType: 'list',\n menuItems: [\n { value: 'left', text: locale => locale.image.alignLeft() },\n { value: 'center', text: locale => locale.image.alignCenter() },\n { value: 'right', text: locale => locale.image.alignRight() },\n ],\n selectedValues: 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 onSelect: (editor, value) => {\n editor.command.execute('align', value);\n },\n },\n {\n name: 'resize',\n type: 'dropdown',\n downIcon: icons.get('down'),\n icon: icons.get('resize'),\n tooltip: locale => locale.image.resize(),\n menuType: 'list',\n menuItems: [\n { value: 'page', text: locale => locale.image.pageWidth() },\n { value: '1.00', text: locale => locale.image.originalWidth() },\n { value: '0.75', text: locale => locale.image.imageWidth('75%') },\n { value: '0.50', text: locale => locale.image.imageWidth('50%') },\n { value: '0.25', text: locale => locale.image.imageWidth('25%') },\n ],\n selectedValues: () => {\n const { originalWidth, width } = box.value;\n const editor = box.getEditor();\n const pageWidth = editor.container.innerWidth() - 2;\n let currentValue = '';\n if (width === pageWidth) {\n currentValue = 'page';\n } else {\n currentValue = (width / originalWidth).toFixed(2);\n }\n return [currentValue];\n },\n onSelect: (editor, value) => {\n const { originalWidth, originalHeight } = box.value;\n const boxContainer = box.getContainer();\n const rate = originalHeight / originalWidth;\n let newWidth: number;\n if (value === 'page') {\n newWidth = editor.container.innerWidth() - 2;\n } else {\n newWidth = Math.round(originalWidth * Number(value));\n }\n const newHeight = Math.round(rate * newWidth);\n boxContainer.css({\n width: `${newWidth}px`,\n height: `${newHeight}px`,\n });\n box.updateValue({\n width: newWidth,\n height: newHeight,\n });\n editor.history.save();\n },\n },\n {\n name: 'open',\n type: 'button',\n icon: icons.get('open'),\n tooltip: locale => locale.image.open(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n ];\n box.setToolbar(items);\n}\n\n// Loads an image and get its width and height.\nasync function getImageInfo(url: string): Promise<ImageInfo> {\n const node = query('<img />');\n node.css({\n position: 'absolute',\n top: '0',\n left: '-8888px',\n 'z-index': '-1',\n visibility: 'hidden',\n });\n return new Promise(resolve => {\n node.on('load', () => {\n const imgNativeNode = node.get(0) as HTMLImageElement;\n const width = imgNativeNode.width;\n const height = imgNativeNode.height;\n node.remove();\n node.removeAttr('style');\n resolve({\n node,\n width,\n height,\n });\n });\n node.on('error', () => {\n node.remove();\n resolve({\n node,\n });\n });\n node.attr('src', url);\n query(document.body).append(node);\n });\n}\n\n// Opens full screen view.\nfunction openFullScreen(box: Box): void {\n const editor = box.getEditor();\n const dataSource: DataSource = [];\n let currentIndex = 0;\n const allImageBox = editor.container.find('lake-box[name=\"image\"]');\n allImageBox.each((node, index) => {\n const imageBox = getBox(node);\n const imageValue = imageBox.value;\n if (imageValue.status !== 'done') {\n return;\n }\n dataSource.push({\n id: index,\n src: imageValue.originalUrl || imageValue.url,\n width: imageValue.originalWidth || imageValue.width,\n height: imageValue.originalHeight || imageValue.height,\n alt: imageValue.name,\n });\n if (box.node.id === imageBox.node.id) {\n currentIndex = index;\n }\n });\n const lightbox = new PhotoSwipeLightbox({\n pswpModule: PhotoSwipe,\n dataSource,\n mainClass: 'lake-pswp',\n zoom: false,\n returnFocus: false,\n arrowPrevSVG: icons.get('left'),\n arrowNextSVG: icons.get('right'),\n closeSVG: icons.get('close'),\n arrowPrevTitle: editor.locale.image.previous(),\n arrowNextTitle: editor.locale.image.next(),\n closeTitle: editor.locale.image.close(),\n errorMsg: editor.locale.image.loadingError(),\n });\n lightbox.on('uiRegister', () => {\n const pswp: any = lightbox.pswp;\n pswp.ui.registerElement({\n name: 'zoom-out-button',\n order: 8,\n isButton: true,\n title: editor.locale.image.zoomOut(),\n html: icons.get('zoomOut'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel - step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n pswp.ui.registerElement({\n name: 'zoom-in-button',\n order: 9,\n isButton: true,\n title: editor.locale.image.zoomIn(),\n html: icons.get('zoomIn'),\n onClick: () => {\n const currSlide = pswp.currSlide;\n const step = (currSlide.zoomLevels.max - currSlide.zoomLevels.min) / 5;\n const destZoomLevel = currSlide.currZoomLevel + step;\n currSlide.zoomTo(destZoomLevel, undefined, 333);\n },\n });\n });\n lightbox.addFilter('thumbEl', (thumbnail, itemData) => {\n const imgNode = allImageBox.eq(itemData.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.get(0) as HTMLElement;\n }\n return thumbnail as HTMLElement;\n });\n lightbox.addFilter('placeholderSrc', (placeholderSrc, slide) => {\n const imgNode = allImageBox.eq(slide.data.id).find('.lake-image-img');\n if (imgNode.length > 0) {\n return imgNode.attr('src');\n }\n return placeholderSrc;\n });\n lightbox.on('openingAnimationEnd', () => {\n box.event.emit('openfullscreen');\n });\n lightbox.on('destroy', () => {\n box.event.emit('closefullscreen');\n });\n lightbox.init();\n lightbox.loadAndOpen(currentIndex);\n}\n\n// Displays error icon and filename.\nasync function renderError(rootNode: Nodes, box: Box): Promise<void> {\n const editor = box.getEditor();\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 imageBrokenIcon = icons.get('imageBroken');\n if (imageBrokenIcon) {\n errorNode.find('.lake-error-icon').append(imageBrokenIcon);\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 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 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 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 Resizer({\n root: rootNode,\n target: boxContainer,\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 default {\n type: 'inline',\n name: 'image',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'loading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n if (value.width && value.height && boxContainer.find('.lake-progress').length === 0) {\n boxContainer.css({\n width: `${value.width}px`,\n height: `${value.height}px`,\n });\n boxContainer.empty();\n const placeholderNode = query('<div class=\"lake-image-placeholder\" />');\n boxContainer.append(placeholderNode);\n const imageIcon = icons.get('image');\n if (imageIcon) {\n placeholderNode.append(imageIcon);\n }\n }\n if (boxContainer.first().length === 0) {\n // The following code is for unit testing because some test cases need to\n // select the content of the box before it is completely loaded.\n // Example:\n // range.setStart(box.getContainer(), 1);\n boxContainer.append('<div />');\n }\n // for test\n if (value.status === 'loading') {\n return;\n }\n 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 if (value.status === 'done') {\n setFloatingToolbar(box);\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} as BoxComponent;\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 { Box } from '../models/box';\nimport { Button } from '../ui/button';\nimport { Resizer } from '../ui/resizer';\n\nfunction getVideoId(url: string): string {\n const result = /\\w+$/i.exec(url || '');\n return result ? result[0] : '';\n}\n\nfunction appendButtonGroup(box: Box): void {\n const editor = box.getEditor();\n const boxContainer = box.getContainer();\n const 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 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 Resizer({\n root: rootNode,\n target: boxContainer,\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 default {\n type: 'inline',\n name: 'video',\n render: box => {\n const editor = box.getEditor();\n const locale = editor.locale;\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-video\" />');\n boxContainer.empty();\n boxContainer.css({\n width: '',\n height: '',\n });\n boxContainer.append(rootNode);\n if (!value.url) {\n if (editor.readonly) {\n box.node.hide();\n return;\n }\n const formNode = query(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 = formNode.find('input[name=\"url\"]').value();\n if (url.indexOf('https://www.youtube.com/') < 0 || getVideoId(url) === '') {\n editor.config.onMessage('error', locale.video.urlError());\n return;\n }\n box.updateValue('url', url);\n editor.history.save();\n formNode.remove();\n showVideo(box);\n },\n });\n formNode.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n button.render();\n rootNode.append(formNode);\n appendButtonGroup(box);\n } else {\n showVideo(box);\n }\n },\n} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { ToolbarItem } from '../types/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\nfunction setFloatingToolbar(box: Box): void {\n let items: ToolbarItem[] = [\n {\n name: 'download',\n type: 'button',\n icon: icons.get('download'),\n tooltip: locale => locale.file.download(),\n onClick: () => {\n window.open(box.value.url);\n },\n },\n {\n name: 'remove',\n type: 'button',\n icon: icons.get('remove'),\n tooltip: locale => locale.file.remove(),\n onClick: editor => {\n editor.selection.removeBox(box);\n editor.history.save();\n },\n },\n ];\n if (box.value.status !== 'done') {\n items = items.filter(item => item.name === 'remove');\n }\n box.setToolbar(items);\n}\n\nasync function appendContent(rootNode: Nodes, box: Box): Promise<void> {\n const value = box.value;\n const infoNode = query(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 default {\n type: 'inline',\n name: 'file',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n if (editor.readonly && ['uploading', 'error'].indexOf(value.status) >= 0) {\n box.node.hide();\n return;\n }\n const boxContainer = box.getContainer();\n const rootNode = query('<div class=\"lake-file\" />');\n rootNode.addClass(`lake-file-${value.status}`);\n appendContent(rootNode, box);\n boxContainer.empty();\n boxContainer.append(rootNode);\n if (!editor.readonly) {\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n setFloatingToolbar(box);\n } else {\n rootNode.on('click', () => {\n window.open(value.url);\n });\n }\n },\n} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\n\nexport default {\n type: 'inline',\n name: 'emoji',\n render: box => {\n const editor = box.getEditor();\n const value = box.value;\n const boxContainer = box.getContainer();\n const rootNode = query(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} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { icons } from '../icons';\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.readonly) {\n box.node.hide();\n return;\n }\n const defaultCode = (box.value.code || '').trim();\n const rootNode = box.getContainer().find('.lake-equation');\n rootNode.addClass('lake-equation-error');\n rootNode.text(defaultCode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n editor.config.onMessage('warning', `\n Box \"${box.name}\" (id: ${box.node.id}) failed to display because window.katex was not found.\n Please check if the \"katex\" library is added to this page.\n `.trim());\n}\n\nexport default {\n type: 'inline',\n name: 'equation',\n render: box => {\n const editor = box.getEditor();\n const rootNode = query('<div class=\"lake-equation\" />');\n const boxContainer = box.getContainer();\n boxContainer.empty();\n boxContainer.append(rootNode);\n const katex = window.katex;\n if (!katex) {\n renderError(box);\n return;\n }\n const equationConfig = editor.config.equation;\n const defaultCode = (box.value.code || '').trim();\n const viewNode = query('<div class=\"lake-equation-view\" />');\n rootNode.append(viewNode);\n viewNode.html(window.katex.renderToString(defaultCode || defaultExpression, {\n throwOnError: false,\n }));\n viewNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n const formNode = query(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 textareaNode.value(defaultCode);\n textareaNode.on('input', () => {\n const code = textareaNode.value().trim();\n viewNode.html(window.katex.renderToString(code || defaultExpression, {\n throwOnError: false,\n }));\n box.updateValue('code', code);\n });\n const saveButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'save',\n type: 'primary',\n text: editor.locale.equation.save(),\n onClick: () => {\n editor.selection.range.selectBoxEnd(box.node);\n editor.selection.sync();\n editor.history.save();\n },\n });\n saveButton.render();\n const helpButton = new Button({\n root: formNode.find('.lake-button-row'),\n name: 'help',\n icon: icons.get('question'),\n tooltip: editor.locale.equation.help(),\n onClick: () => {\n window.open(equationConfig.helpUrl);\n },\n });\n helpButton.render();\n },\n} as BoxComponent;\n","import { BoxComponent } from '../types/box';\nimport { query } from '../utils/query';\nimport { safeTemplate } from '../utils/safe-template';\n\nexport default {\n type: 'inline',\n name: 'mention',\n render: box => {\n const editor = box.getEditor();\n const { getProfileUrl } = editor.config.mention;\n const value = box.value;\n const url = getProfileUrl ? getProfileUrl(value) : '#';\n const boxContainer = box.getContainer();\n const rootNode = query(safeTemplate`\n <div class=\"lake-mention\"><a href=\"${url}\">@${value.nickname ?? value.name}</a></div>\n `);\n boxContainer.empty();\n boxContainer.append(rootNode);\n rootNode.on('click', () => {\n editor.selection.selectBox(box);\n });\n if (!editor.readonly) {\n rootNode.find('a').on('click', (event: Event) => {\n event.preventDefault();\n });\n }\n },\n} as BoxComponent;\n","import 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 removeBreak, 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 removeBreak(block);\n }\n if (block.isEmpty && block.name === 'p') {\n block.replaceWith(otherNode);\n otherNode.find('lake-box').each(node => {\n getBox(node).render();\n });\n range.shrinkAfter(otherNode);\n return;\n }\n let child = otherNode.first();\n while(child.length > 0) {\n if (child.name === 'li') {\n child = child.first();\n }\n const nextSibling = child.next();\n editor.selection.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', (targetNode: Nodes) => {\n if (editor.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"formatPainter\"]').length > 0) {\n return;\n }\n editor.container.removeClass(formatPainterClassName);\n markList = [];\n });\n};\n","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 { isVisible } from '../utils/is-visible';\nimport { Nodes } from '../models/nodes';\nimport { Button } from './button';\nimport { i18nObject } from '../i18n';\n\ntype LinkPopupConfig = {\n locale?: TranslationFunctions;\n onCopy?: (error: boolean) => void;\n onSave?: (node: Nodes) => void;\n onRemove?: (node: Nodes) => void;\n onShow?: () => void;\n onHide?: () => void;\n};\n\nexport class LinkPopup {\n\n private config: LinkPopupConfig;\n\n private locale: TranslationFunctions;\n\n private linkNode: Nodes | null = null;\n\n public container: Nodes;\n\n constructor(config?: LinkPopupConfig) {\n this.config = config || {};\n this.locale = this.config.locale || i18nObject('en-US');\n this.container = query(safeTemplate`\n <div class=\"lake-popup lake-link-popup\">\n <div class=\"lake-row\">${this.locale.link.url()}</div>\n <div class=\"lake-row lake-url-row\">\n <input type=\"text\" name=\"url\" />\n </div>\n <div class=\"lake-row\">${this.locale.link.title()}</div>\n <div class=\"lake-row\">\n <input type=\"text\" name=\"title\" />\n </div>\n <div class=\"lake-row lake-button-row\"></div>\n </div>\n `);\n }\n\n // Writes the specified text to the system clipboard\n private async writeClipboardText(text: string): Promise<boolean> {\n let error = false;\n try {\n if (window.LAKE_TEST) {\n error = window.LAKE_ERROR;\n } else {\n await navigator.clipboard.writeText(text);\n }\n } catch {\n error = true;\n }\n return new Promise(resolve => {\n resolve(error);\n });\n }\n\n // Copy link to clipboard\n private appendCopyButton(): void {\n const config = this.config;\n let timeoutId: number | null = null;\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'copy',\n icon: icons.get('copy'),\n tooltip: this.locale.link.copy(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n this.writeClipboardText(url).then((error: boolean) => {\n const svgNode = this.container.find('button[name=\"copy\"] svg');\n svgNode.hide();\n if (error) {\n svgNode.eq(2).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n return;\n }\n svgNode.eq(1).show('inline');\n if (config.onCopy) {\n config.onCopy(error);\n }\n if (timeoutId) {\n window.clearTimeout(timeoutId);\n }\n timeoutId = window.setTimeout(() => {\n svgNode.hide();\n svgNode.eq(0).show('inline');\n }, 2000);\n });\n },\n });\n button.render();\n const copyDoneIcon = icons.get('checkCircle');\n if (copyDoneIcon) {\n button.node.append(copyDoneIcon);\n }\n const copyErrorIcon = icons.get('warningCircle');\n if (copyErrorIcon) {\n button.node.append(copyErrorIcon);\n }\n }\n\n // Open link in new tab\n private appendOpenButton(): void {\n const button = new Button({\n root: this.container.find('.lake-url-row'),\n name: 'open',\n icon: icons.get('open'),\n tooltip: this.locale.link.open(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n window.open(url);\n },\n });\n button.render();\n }\n\n // Save link\n private appendSaveButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'save',\n icon: icons.get('check'),\n text: this.locale.link.save(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const linkNode = this.linkNode;\n this.save();\n this.hide();\n if (this.config.onSave) {\n this.config.onSave(linkNode);\n }\n },\n });\n button.render();\n this.container.find('input[name=\"url\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n this.container.find('input[name=\"title\"]').on('keydown', event => {\n if (isKeyHotkey('enter', event as KeyboardEvent)) {\n event.preventDefault();\n button.node.emit('click');\n }\n });\n }\n\n // Remove link\n private appendUnlinkButton(): void {\n const button = new Button({\n root: this.container.find('.lake-button-row'),\n name: 'unlink',\n icon: icons.get('unlink'),\n text: this.locale.link.unlink(),\n onClick: () => {\n if (!this.linkNode) {\n return;\n }\n const lastChild = this.linkNode.last();\n this.linkNode.remove(true);\n this.hide();\n if (this.config.onRemove) {\n this.config.onRemove(lastChild);\n }\n },\n });\n button.render();\n }\n\n private save(): void {\n if (!this.linkNode) {\n return;\n }\n const url = this.container.find('input[name=\"url\"]').value();\n let title = this.container.find('input[name=\"title\"]').value();\n if (url === '' && title === '') {\n this.linkNode.remove();\n return;\n }\n if (title === '') {\n title = url;\n }\n this.linkNode.attr('href', url);\n this.linkNode.text(title);\n }\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(): void {\n if (!this.linkNode) {\n return;\n }\n const visible = isVisible(this.linkNode);\n if (!visible.bottom) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const linkNativeNode = this.linkNode.get(0) as HTMLElement;\n const linkRect = linkNativeNode.getBoundingClientRect();\n const linkX = linkRect.x + window.scrollX;\n const linkY = linkRect.y + window.scrollY;\n if (linkRect.x + this.container.width() > window.innerWidth) {\n this.container.css('left', `${linkX - this.container.width() + linkRect.width}px`);\n } else {\n this.container.css('left', `${linkX}px`);\n }\n if (linkRect.y + linkRect.height + this.container.height() > window.innerHeight) {\n this.container.css('top', `${linkY - this.container.height()}px`);\n } else {\n this.container.css('top', `${linkY + linkRect.height}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public show(linkNode: Nodes): void {\n if (!this.container.get(0).isConnected) {\n this.appendCopyButton();\n this.appendOpenButton();\n this.appendSaveButton();\n this.appendUnlinkButton();\n query(document.body).append(this.container);\n }\n if (this.linkNode && this.linkNode.get(0) === linkNode.get(0)) {\n return;\n }\n this.linkNode = linkNode;\n const url = linkNode.attr('href');\n const title = linkNode.text();\n this.container.find('input[name=\"url\"]').value(url);\n if (title !== url) {\n this.container.find('input[name=\"title\"]').value(title);\n }\n this.container.css('visibility', 'hidden');\n this.container.show();\n this.updatePosition();\n this.container.css('visibility', '');\n this.container.find('input[name=\"url\"]').focus();\n const viewport = linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n window.addEventListener('resize', this.resizeListener);\n if (this.config.onShow) {\n this.config.onShow();\n }\n }\n\n public hide(): void {\n if (this.linkNode) {\n const viewport = this.linkNode.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n }\n this.linkNode = null;\n this.container.hide();\n window.removeEventListener('resize', this.resizeListener);\n if (this.config.onHide) {\n this.config.onHide();\n }\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { 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 locale: editor.locale,\n onSave: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onRemove: node => {\n const range = editor.selection.range;\n range.setStartAfter(node);\n range.collapseToStart();\n editor.selection.sync();\n editor.history.save();\n },\n onShow: () => {\n editor.popup = popup;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n editor.event.on('click', (targetNode: Nodes) => {\n if (popup.container.contains(targetNode)) {\n return;\n }\n if (targetNode.closest('button[name=\"link\"]').length > 0) {\n return;\n }\n const linkNode = targetNode.closest('a');\n if (\n linkNode.length === 0 ||\n !editor.container.contains(linkNode) ||\n linkNode.closest('lake-box').length > 0\n ) {\n if (!popup.visible) {\n return;\n }\n editor.selection.sync();\n popup.hide();\n return;\n }\n popup.show(linkNode);\n });\n editor.command.add('link', {\n execute: () => {\n const 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 return () => popup.unmount();\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 editor.setPluginConfig('equation', {\n helpUrl: 'https://katex.org/docs/supported',\n });\n if (editor.readonly) {\n return;\n }\n editor.command.add('equation', {\n execute: (value: BoxValue) => {\n const box = editor.selection.insertBox('equation', value);\n editor.history.save();\n const boxContainer = box.getContainer();\n boxContainer.addClass('lake-box-activated');\n boxContainer.find('textarea').focus();\n },\n });\n};\n","import type { Editor } from '..';\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 { isKeyHotkey } from 'is-hotkey';\nimport { query } from '../utils/query';\nimport { isVisible } from '../utils/is-visible';\nimport { scrollToNode } from '../utils/scroll-to-node';\nimport { Nodes } from '../models/nodes';\nimport { Range } from '../models/range';\n\nexport type MenuConfig<Item> = {\n items: Item[];\n onShow?: () => void;\n onHide?: () => void;\n};\n\nconst emptyCallback = () => {};\n\nexport abstract class Menu<Item> {\n\n private horizontalDirection: 'left' | 'right' = 'right';\n\n private verticalDirection: 'top' | 'bottom' = 'bottom';\n\n private onShow: () => void;\n\n private onHide: () => void;\n\n protected items: Item[];\n\n protected range: Range | null = null;\n\n protected noMouseEvent: boolean = false;\n\n public container: Nodes;\n\n constructor(config: MenuConfig<Item>) {\n this.items = config.items;\n this.onShow = config.onShow || emptyCallback;\n this.onHide = config.onHide || emptyCallback;\n this.container = query('<ul class=\"lake-popup lake-menu\" />');\n }\n\n protected abstract getItemNode(item: Item): Nodes;\n\n protected abstract search(keyword: string): Item[];\n\n private appendItemNode(itemNode: Nodes): void {\n itemNode.on('mouseenter', () => {\n if (this.noMouseEvent) {\n return;\n }\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n itemNode.addClass('lake-menu-item-selected');\n });\n itemNode.on('mouseleave', () => {\n if (this.noMouseEvent) {\n return;\n }\n itemNode.removeClass('lake-menu-item-selected');\n });\n this.container.append(itemNode);\n }\n\n private appendItems(items: Item[]): void {\n this.container.empty();\n for (const item of items) {\n const itemNode = this.getItemNode(item);\n itemNode.addClass('lake-menu-item');\n this.appendItemNode(itemNode);\n }\n }\n\n private selectFirstItemNodeIfNeeded(): void {\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n this.container.find('.lake-menu-item').eq(0).addClass('lake-menu-item-selected');\n }\n }\n\n private keydownListener = (event: KeyboardEvent) => {\n if (isKeyHotkey('escape', event)) {\n event.preventDefault();\n this.hide();\n return;\n }\n const isDownKey = isKeyHotkey('down', event);\n const isUpKey = isKeyHotkey('up', event);\n const isEnterKey = isKeyHotkey('enter', event);\n if (!isDownKey && !isUpKey && !isEnterKey) {\n return;\n }\n const selectedItemNode = this.container.find('.lake-menu-item-selected');\n if (selectedItemNode.length === 0) {\n const firstItem = this.container.find('.lake-menu-item').eq(0);\n scrollToNode(firstItem, {\n behavior: 'instant',\n block: 'start',\n });\n firstItem.addClass('lake-menu-item-selected');\n return;\n }\n this.noMouseEvent = true;\n if (isDownKey) {\n event.preventDefault();\n let nextItemNode = selectedItemNode.next();\n if (nextItemNode.length === 0) {\n nextItemNode = this.container.find('.lake-menu-item').eq(0);\n }\n scrollToNode(nextItemNode, {\n behavior: 'instant',\n block: 'end',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n nextItemNode.addClass('lake-menu-item-selected');\n } else if (isUpKey) {\n event.preventDefault();\n let prevItemNode = selectedItemNode.prev();\n if (prevItemNode.length === 0) {\n const itemNode = this.container.find('.lake-menu-item');\n prevItemNode = itemNode.eq(itemNode.length - 1);\n }\n scrollToNode(prevItemNode, {\n behavior: 'instant',\n block: 'start',\n });\n this.container.find('.lake-menu-item').removeClass('lake-menu-item-selected');\n prevItemNode.addClass('lake-menu-item-selected');\n } else if (isEnterKey) {\n event.preventDefault();\n selectedItemNode.emit('click');\n }\n window.setTimeout(() => {\n this.noMouseEvent = false;\n }, 50);\n };\n\n private clickListener: EventListener = event => {\n const targetNode = new Nodes(event.target as Element);\n if (!targetNode.get(0).isConnected) {\n return;\n }\n if (this.container.contains(targetNode)) {\n return;\n }\n this.hide();\n };\n\n private scrollListener = () => this.updatePosition();\n\n private resizeListener = () => this.updatePosition();\n\n private updatePosition(keepDirection: boolean = false): void {\n if (!this.range || this.range.isCollapsed) {\n return;\n }\n const visible = isVisible(this.range);\n if (!visible.bottom) {\n this.container.css('visibility', 'hidden');\n return;\n }\n this.container.css('visibility', '');\n const rangeRect = this.range.get().getBoundingClientRect();\n const rangeX = rangeRect.x + window.scrollX;\n const rangeY = rangeRect.y + window.scrollY;\n if (!keepDirection) {\n if (rangeRect.x + this.container.width() > window.innerWidth) {\n this.horizontalDirection = 'left';\n } else {\n this.horizontalDirection = 'right';\n }\n if (rangeRect.y + rangeRect.height + this.container.height() + 5 > window.innerHeight) {\n this.verticalDirection = 'top';\n } else {\n this.verticalDirection = 'bottom';\n }\n }\n if (this.horizontalDirection === 'left') {\n this.container.css('left', `${rangeX - this.container.width() + rangeRect.width}px`);\n } else {\n this.container.css('left', `${rangeX}px`);\n }\n if (this.verticalDirection === 'top') {\n this.container.css('top', `${rangeY - this.container.height() - 5}px`);\n } else {\n this.container.css('top', `${rangeY + rangeRect.height + 5}px`);\n }\n }\n\n public get visible(): boolean {\n return this.container.get(0).isConnected && this.container.computedCSS('display') !== 'none';\n }\n\n public update(keyword: string): void {\n const items = this.search(keyword);\n if (items.length === 0) {\n this.hide();\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n this.container.css('visibility', '');\n }\n\n public show(range: Range, keyword?: string): void {\n if (range.isCollapsed) {\n return;\n }\n if (this.items.length === 0) {\n return;\n }\n if (!this.container.get(0).isConnected) {\n query(document.body).append(this.container);\n }\n // append all items for fixing the container's width\n this.appendItems(this.items);\n this.selectFirstItemNodeIfNeeded();\n this.range = range;\n this.container.css('visibility', 'hidden');\n this.container.show();\n (this.container.get(0) as Element).scrollTo(0, 0);\n this.updatePosition();\n // fix the container's width\n this.container.css('width', '');\n this.container.css('width', `${this.container.width() + 10}px`);\n const viewport = range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.on('scroll', this.scrollListener);\n }\n document.addEventListener('keydown', this.keydownListener, true);\n document.addEventListener('click', this.clickListener);\n window.addEventListener('resize', this.resizeListener);\n if (keyword) {\n const items = this.search(keyword);\n if (items.length === 0) {\n return;\n }\n this.appendItems(items);\n this.selectFirstItemNodeIfNeeded();\n this.updatePosition(true);\n }\n this.container.css('visibility', '');\n this.onShow();\n }\n\n public hide(): void {\n if (this.range) {\n const viewport = this.range.commonAncestor.closestScroller();\n if (viewport.length > 0) {\n viewport.off('scroll', this.scrollListener);\n }\n }\n this.range = null;\n this.container.hide();\n document.removeEventListener('keydown', this.keydownListener, true);\n document.removeEventListener('click', this.clickListener);\n window.removeEventListener('resize', this.resizeListener);\n this.onHide();\n }\n\n public unmount(): void {\n this.hide();\n this.container.remove();\n }\n}\n","import { MentionItem } from '../types/mention';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Menu, MenuConfig } from './menu';\n\ntype OnSelect = (event: Event, item: MentionItem) => void;\n\ntype MentionMenuConfig = MenuConfig<MentionItem> & {\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\nexport class MentionMenu extends Menu<MentionItem> {\n\n private onSelect: OnSelect;\n\n constructor(config: MentionMenuConfig) {\n super(config);\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-mention-menu');\n }\n\n protected getItemNode(item: MentionItem): Nodes {\n const itemNode = query(safeTemplate`\n <li>\n <div class=\"lake-mention-avatar\"></div>\n <div class=\"lake-mention-nickname\">${item.nickname ?? item.name}</div>\n <div class=\"lake-mention-name\">(${item.name})</div>\n </li>\n `);\n const avatarNode = itemNode.find('.lake-mention-avatar');\n if (item.avatar) {\n avatarNode.append(item.avatar);\n } else {\n avatarNode.remove();\n }\n if (!item.nickname) {\n itemNode.find('.lake-mention-name').remove();\n }\n itemNode.on('click', event => this.onSelect(event, item));\n return itemNode;\n }\n\n protected search(keyword: string): MentionItem[] {\n keyword = keyword.toLowerCase();\n const items: MentionItem[] = [];\n for (const item of this.items) {\n const nickname = item.nickname ?? item.name;\n if (\n item.name.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.toLowerCase().indexOf(keyword) >= 0 ||\n nickname.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(item);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport { MentionItem } from '../types/mention';\nimport type { Editor, Range } from '..';\nimport { request } from '../utils/request';\nimport { MentionMenu } from '../ui/mention-menu';\n\nfunction getKeyword(range: Range): string | null {\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return null;\n }\n let text = targetRange.startNode.text().slice(targetRange.startOffset + 1, targetRange.endOffset);\n text = text.replace(/[\\u200B\\u2060]/g, '');\n return text;\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('mention', {\n requestMethod: 'GET',\n items: [],\n getProfileUrl: (value: MentionItem) => `/${value.name}`,\n });\n if (editor.readonly) {\n return;\n }\n const { requestAction, requestMethod, items } = editor.config.mention;\n let menu: MentionMenu | null = null;\n const selectListener = (event: Event, item: MentionItem) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n const targetRange = editor.selection.range.getCharacterRange('@');\n if (targetRange) {\n targetRange.get().deleteContents();\n }\n editor.selection.insertBox('mention', item);\n editor.history.save();\n };\n const showListener = () => {\n editor.popup = menu;\n };\n const hideListener = () => {\n editor.popup = null;\n };\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const targetRange = range.getCharacterRange('@');\n if (targetRange === null) {\n return;\n }\n const keyword = getKeyword(range);\n if (keyword === null) {\n return;\n }\n if (!menu) {\n if (requestAction) {\n request({\n onSuccess: body => {\n if (!body.data) {\n return;\n }\n menu = new MentionMenu({\n items: body.data,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n },\n action: requestAction,\n method: requestMethod,\n });\n } else {\n menu = new MentionMenu({\n items,\n onSelect: selectListener,\n onShow: showListener,\n onHide: hideListener,\n });\n menu.show(targetRange, keyword);\n }\n return;\n }\n menu.show(targetRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu || !menu.visible) {\n if (keyboardEvent.key === '@') {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const keyword = getKeyword(range);\n if (keyword === null) {\n if (menu) {\n menu.hide();\n }\n return;\n }\n if (menu) {\n menu.update(keyword);\n }\n });\n return () => {\n if (menu) {\n menu.unmount();\n }\n };\n};\n","import type { Editor } from '..';\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 { getBox, appendBreak, 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 const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n}\n\nfunction mergeWithPreviousBlock(editor: Editor, block: Nodes): void {\n const range = editor.selection.range;\n let prevBlock = block.prev();\n if (prevBlock.length === 0) {\n if (block.name !== 'p') {\n editor.selection.setBlocks('<p />');\n }\n return;\n }\n if (prevBlock.isBox) {\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 (\n range.isCollapsed && box.name === 'codeBlock' &&\n (boxValue.code === undefined || boxValue.code === '')\n ) {\n event.preventDefault();\n editor.selection.removeBox(box);\n editor.history.save();\n }\n return;\n }\n editor.fixContent();\n if (range.isBoxStart) {\n const boxNode = range.startNode.closest('lake-box');\n const prevNode = boxNode.prev();\n if (prevNode.length === 0) {\n const block = boxNode.closestBlock();\n if (block.length > 0 && !block.isContainer) {\n event.preventDefault();\n mergeWithPreviousBlock(editor, block);\n editor.history.save();\n }\n return;\n }\n if (prevNode.isBlock) {\n if (prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n 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.isMark || prevNode.name === 'a') && prevNode.isEmpty) {\n event.preventDefault();\n prevNode.remove();\n editor.history.save();\n return;\n }\n if (prevNode.isText && prevNode.text().length === 1 && prevNode.parent().isBlock) {\n event.preventDefault();\n const block = prevNode.closestBlock();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n if (block.isEmpty) {\n const breakNode = appendBreak(block);\n range.setStartBefore(breakNode);\n range.collapseToStart();\n }\n editor.history.save();\n return;\n }\n const nextNode = range.getNextNode();\n if (prevNode.name === 'br' && nextNode.length > 0) {\n event.preventDefault();\n range.setStartBefore(prevNode);\n range.collapseToStart();\n prevNode.remove();\n editor.history.save();\n return;\n }\n const startText = range.getStartText();\n if (startText === '') {\n event.preventDefault();\n let block = range.getBlocks()[0];\n if (!block) {\n editor.selection.setBlocks('<p />');\n block = range.getBlocks()[0];\n }\n if(\n block.css('margin-left') !== '' ||\n block.css('text-indent') !== '' ||\n block.attr('indent') !== ''\n ) {\n 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('left', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n if (prevNode.isInlineBox) {\n range.selectBox(prevNode);\n return;\n }\n range.shrinkAfter(prevNode);\n return;\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n return;\n }\n if (range.isBoxEnd) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n event.preventDefault();\n range.selectBoxStart(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const prevNode = range.getPrevNode();\n if (prevNode.isBox) {\n event.preventDefault();\n range.selectBox(prevNode);\n }\n });\n editor.keystroke.setKeydown('right', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (range.isBoxStart) {\n event.preventDefault();\n range.selectBox(boxNode);\n return;\n }\n if (range.isBoxEnd) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n if (nextNode.isInlineBox) {\n range.selectBox(nextNode);\n return;\n }\n range.shrinkBefore(nextNode);\n return;\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n return;\n }\n event.preventDefault();\n range.selectBoxEnd(boxNode);\n return;\n }\n if (!range.isCollapsed) {\n return;\n }\n const nextNode = range.getNextNode();\n if (nextNode.isBox) {\n event.preventDefault();\n range.selectBox(nextNode);\n }\n });\n editor.keystroke.setKeydown('up', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const prevNode = boxNode.prev();\n if (prevNode.isBlock || prevNode.isBox) {\n event.preventDefault();\n range.shrinkAfter(prevNode);\n return;\n }\n }\n range.setStartBefore(boxNode);\n range.collapseToStart();\n }\n });\n editor.keystroke.setKeydown('down', event => {\n const range = editor.selection.range;\n if (range.isInsideBox) {\n return;\n }\n const boxNode = range.commonAncestor.closest('lake-box');\n if (boxNode.length > 0) {\n if (boxNode.isBlockBox) {\n const nextNode = boxNode.next();\n if (nextNode.isBlock || nextNode.isBox) {\n event.preventDefault();\n range.shrinkBefore(nextNode);\n return;\n }\n }\n range.setStartAfter(boxNode);\n range.collapseToStart();\n }\n });\n};\n","import type { Editor } from '..';\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 { SlashItem } from '../types/slash';\nimport { icons } from '../icons';\n\nexport const slashItems: SlashItem[] = [\n {\n name: 'heading1',\n type: 'button',\n icon: icons.get('heading1'),\n title: locale => locale.slash.heading1(),\n description: locale => locale.slash.heading1Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h1');\n },\n },\n {\n name: 'heading2',\n type: 'button',\n icon: icons.get('heading2'),\n title: locale => locale.slash.heading2(),\n description: locale => locale.slash.heading2Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h2');\n },\n },\n {\n name: 'heading3',\n type: 'button',\n icon: icons.get('heading3'),\n title: locale => locale.slash.heading3(),\n description: locale => locale.slash.heading3Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h3');\n },\n },\n {\n name: 'heading4',\n type: 'button',\n icon: icons.get('heading4'),\n title: locale => locale.slash.heading4(),\n description: locale => locale.slash.heading4Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h4');\n },\n },\n {\n name: 'heading5',\n type: 'button',\n icon: icons.get('heading5'),\n title: locale => locale.slash.heading5(),\n description: locale => locale.slash.heading5Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h5');\n },\n },\n {\n name: 'heading6',\n type: 'button',\n icon: icons.get('heading6'),\n title: locale => locale.slash.heading6(),\n description: locale => locale.slash.heading6Desc(),\n onClick: editor => {\n editor.command.execute('heading', 'h6');\n },\n },\n {\n name: 'paragraph',\n type: 'button',\n icon: icons.get('paragraph'),\n title: locale => locale.slash.paragraph(),\n description: locale => locale.slash.paragraphDesc(),\n onClick: editor => {\n editor.command.execute('heading', 'p');\n },\n },\n {\n name: 'blockQuote',\n type: 'button',\n icon: icons.get('blockQuote'),\n title: locale => locale.slash.blockQuote(),\n description: locale => locale.slash.blockQuoteDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'numberedList',\n type: 'button',\n icon: icons.get('numberedList'),\n title: locale => locale.slash.numberedList(),\n description: locale => locale.slash.numberedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'numbered');\n },\n },\n {\n name: 'bulletedList',\n type: 'button',\n icon: icons.get('bulletedList'),\n title: locale => locale.slash.bulletedList(),\n description: locale => locale.slash.bulletedListDesc(),\n onClick: editor => {\n editor.command.execute('list', 'bulleted');\n },\n },\n {\n name: 'checklist',\n type: 'button',\n icon: icons.get('checklist'),\n title: locale => locale.slash.checklist(),\n description: locale => locale.slash.checklistDesc(),\n onClick: editor => {\n editor.command.execute('list', 'checklist');\n },\n },\n {\n name: 'hr',\n type: 'button',\n icon: icons.get('hr'),\n title: locale => locale.slash.hr(),\n description: locale => locale.slash.hrDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'codeBlock',\n type: 'button',\n icon: icons.get('codeBlock'),\n title: locale => locale.slash.codeBlock(),\n description: locale => locale.slash.codeBlockDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'video',\n type: 'button',\n icon: icons.get('video'),\n title: locale => locale.slash.video(),\n description: locale => locale.slash.videoDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'equation',\n type: 'button',\n icon: icons.get('equation'),\n title: locale => locale.slash.equation(),\n description: locale => locale.slash.equationDesc(),\n onClick: (editor, value) => {\n editor.command.execute(value);\n },\n },\n {\n name: 'image',\n type: 'upload',\n icon: icons.get('image'),\n title: locale => locale.slash.image(),\n description: locale => locale.slash.imageDesc(),\n accept: 'image/*',\n multiple: true,\n },\n {\n name: 'file',\n type: 'upload',\n icon: icons.get('attachment'),\n title: locale => locale.slash.file(),\n description: locale => locale.slash.fileDesc(),\n accept: '*',\n multiple: true,\n },\n];\n","import { TranslationFunctions } from '../i18n/types';\nimport { SlashItem } from '../types/slash';\nimport { slashItems } from '../config/slash-items';\nimport { safeTemplate } from '../utils/safe-template';\nimport { query } from '../utils/query';\nimport { Nodes } from '../models/nodes';\nimport { Menu, MenuConfig } from './menu';\nimport { i18nObject } from '../i18n';\n\ntype OnSelect = (\n event: Event,\n item: SlashItem,\n fileNode?: Nodes,\n) => void;\n\ntype SlashMenuConfig = MenuConfig<string | SlashItem> & {\n locale?: TranslationFunctions;\n onSelect?: OnSelect;\n};\n\nconst emptyCallback = () => {};\n\nconst slashItemMap: Map<string, SlashItem> = new Map();\n\nfor (const item of slashItems) {\n slashItemMap.set(item.name, item);\n}\n\nexport class SlashMenu extends Menu<string | SlashItem> {\n\n private locale: TranslationFunctions;\n\n private onSelect: OnSelect;\n\n constructor(config: SlashMenuConfig) {\n super(config);\n this.locale = config.locale || i18nObject('en-US');\n this.onSelect = config.onSelect || emptyCallback;\n this.container.addClass('lake-slash-menu');\n }\n\n private getItem(name: string | SlashItem): SlashItem {\n if (typeof name !== 'string') {\n return name;\n }\n const item = slashItemMap.get(name);\n if (!item) {\n throw new Error(`SlashItem \"${name}\" has not been defined yet.`);\n }\n return item;\n }\n\n protected getItemNode(name: string | SlashItem): Nodes {\n const item = this.getItem(name);\n const itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n const itemDescription = typeof item.description === 'string' ? item.description : item.description(this.locale);\n const itemNode = query(safeTemplate`\n <li name=\"${item.name}\">\n <div class=\"lake-slash-icon\"></div>\n <div class=\"lake-slash-text\">\n <div class=\"lake-slash-title\">${itemTitle}</div>\n <div class=\"lake-slash-description\">${itemDescription}</div>\n </div>\n </li>\n `);\n const icon = item.icon;\n if (icon) {\n itemNode.find('.lake-slash-icon').append(icon);\n }\n if (item.type === 'upload') {\n itemNode.append('<input type=\"file\" />');\n const fileNode = itemNode.find('input[type=\"file\"]');\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n if (item.accept) {\n fileNode.attr('accept', item.accept);\n }\n if (item.multiple === true) {\n fileNode.attr('multiple', 'true');\n }\n fileNode.on('click', event => event.stopPropagation());\n fileNode.on('change', event => this.onSelect(event, item, fileNode));\n itemNode.on('click', () => fileNativeNode.click());\n } else {\n itemNode.on('click', event => this.onSelect(event, item));\n }\n return itemNode;\n }\n\n protected search(keyword: string): (string | SlashItem)[] {\n const localeEnglish = i18nObject('en-US');\n keyword = keyword.toLowerCase();\n const items: (string | SlashItem)[] = [];\n for (const name of this.items) {\n const item = this.getItem(name);\n let itemTitle = typeof item.title === 'string' ? item.title : item.title(this.locale);\n itemTitle = itemTitle.toLowerCase();\n let itemTitleEnglish = typeof item.title === 'string' ? item.title : item.title(localeEnglish);\n itemTitleEnglish = itemTitleEnglish.toLowerCase();\n if (\n itemTitle.indexOf(keyword) >= 0 ||\n itemTitle.replace(/\\s+/g, '').indexOf(keyword) >= 0 ||\n itemTitleEnglish.indexOf(keyword) >= 0 ||\n itemTitleEnglish.replace(/\\s+/g, '').indexOf(keyword) >= 0\n ) {\n items.push(typeof name === 'string' ? item.name : name);\n }\n }\n return items;\n }\n}\n","import { isKeyHotkey } from 'is-hotkey';\nimport type { Editor } from '..';\nimport { appendBreak } from '../utils/append-break';\nimport { uploadFile } from '../utils/upload-file';\nimport { Nodes } from '../models/nodes';\nimport { SlashMenu } from '../ui/slash-menu';\n\nconst defaultItems: string[] = [\n 'heading1',\n 'heading2',\n 'heading3',\n 'heading4',\n 'heading5',\n 'heading6',\n 'paragraph',\n 'blockQuote',\n 'numberedList',\n 'bulletedList',\n 'checklist',\n 'hr',\n];\n\nfunction getKeyword(block: Nodes): string | null {\n let text = block.text().trim();\n text = text.replace(/[\\u200B\\u2060]/g, '');\n if (!/^\\//.test(text)) {\n return null;\n }\n return text.substring(1);\n}\n\nfunction emptyBlock(editor: Editor): void {\n const range = editor.selection.range;\n const block = range.commonAncestor.closestBlock();\n block.empty();\n appendBreak(block);\n range.shrinkBefore(block);\n}\n\nexport default (editor: Editor) => {\n editor.setPluginConfig('slash', {\n items: defaultItems,\n });\n if (editor.readonly) {\n return;\n }\n const menu = new SlashMenu({\n locale: editor.locale,\n items: editor.config.slash.items,\n onSelect: (event, item, fileNode) => {\n if (menu) {\n menu.hide();\n }\n editor.focus();\n emptyBlock(editor);\n if (item.type === 'upload') {\n if (!fileNode) {\n return;\n }\n const target = event.target as HTMLInputElement;\n const fileNativeNode = fileNode.get(0) as HTMLInputElement;\n const files = target.files || [];\n for (const file of files) {\n uploadFile({\n editor,\n name: item.name,\n file,\n onError: error => {\n fileNativeNode.value = '';\n editor.config.onMessage('error', error);\n },\n onSuccess: () => {\n fileNativeNode.value = '';\n },\n });\n }\n } else {\n item.onClick(editor, item.name);\n }\n },\n onShow: () => {\n editor.popup = menu;\n },\n onHide: () => {\n editor.popup = null;\n },\n });\n const showMenu = () => {\n const range = editor.selection.range;\n if (!range.isCollapsed) {\n return;\n }\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n if (block.find('lake-box').length > 0) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n return;\n }\n const slashRange = range.clone();\n slashRange.selectNodeContents(block);\n menu.show(slashRange, keyword);\n };\n editor.container.on('keyup', event => {\n if (editor.isComposing) {\n return;\n }\n const keyboardEvent = event as KeyboardEvent;\n if (isKeyHotkey(['down' ,'up', 'enter'], keyboardEvent)) {\n return;\n }\n if (!menu.visible) {\n if (isKeyHotkey('/', keyboardEvent)) {\n showMenu();\n return;\n }\n if (isKeyHotkey(['backspace', 'delete'], keyboardEvent)) {\n showMenu();\n } else {\n return;\n }\n }\n const range = editor.selection.range;\n const block = range.getBlocks()[0];\n if (!block) {\n return;\n }\n const keyword = getKeyword(block);\n if (keyword === null) {\n menu.hide();\n return;\n }\n menu.update(keyword);\n });\n return () => {\n menu.unmount();\n };\n};\n","import './css';\nimport './elements/box';\nimport './elements/bookmark';\nimport { BoxComponent, BoxValue } from './types/box';\nimport { ToolbarItem } from './types/toolbar';\nimport { DropdownMenuItem } from './types/dropdown';\nimport { MentionItem } from './types/mention';\nimport { SlashItem } from './types/slash';\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 mentionBox from './boxes/mention';\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 mention from './plugins/mention';\nimport markdown from './plugins/markdown';\nimport enterKey from './plugins/enter-key';\nimport shiftEnterKey from './plugins/shift-enter-key';\nimport backspaceKey from './plugins/backspace-key';\nimport deleteKey from './plugins/delete-key';\nimport tabKey from './plugins/tab-key';\nimport arrowKeys from './plugins/arrow-keys';\nimport escapeKey from './plugins/escape-key';\nimport slash from './plugins/slash';\n\nEditor.box.add(hrBox);\nEditor.box.add(codeBlockBox);\nEditor.box.add(imageBox);\nEditor.box.add(videoBox);\nEditor.box.add(fileBox);\nEditor.box.add(emojiBox);\nEditor.box.add(equationBox);\nEditor.box.add(mentionBox);\n\nEditor.plugin.add('copy', copy);\nEditor.plugin.add('cut', cut);\nEditor.plugin.add('paste', paste);\nEditor.plugin.add('drop', drop);\nEditor.plugin.add('undo', undo);\nEditor.plugin.add('redo', redo);\nEditor.plugin.add('selectAll', selectAll);\nEditor.plugin.add('heading', heading);\nEditor.plugin.add('blockQuote', blockQuote);\nEditor.plugin.add('list', list);\nEditor.plugin.add('align', align);\nEditor.plugin.add('indent', indent);\nEditor.plugin.add('bold', bold);\nEditor.plugin.add('italic', italic);\nEditor.plugin.add('underline', underline);\nEditor.plugin.add('strikethrough', strikethrough);\nEditor.plugin.add('subscript', subscript);\nEditor.plugin.add('superscript', superscript);\nEditor.plugin.add('code', code);\nEditor.plugin.add('fontFamily', fontFamily);\nEditor.plugin.add('fontSize', fontSize);\nEditor.plugin.add('fontColor', fontColor);\nEditor.plugin.add('highlight', highlight);\nEditor.plugin.add('removeFormat', removeFormat);\nEditor.plugin.add('formatPainter', formatPainter);\nEditor.plugin.add('link', link);\nEditor.plugin.add('hr', hr);\nEditor.plugin.add('codeBlock', codeBlock);\nEditor.plugin.add('image', image);\nEditor.plugin.add('video', video);\nEditor.plugin.add('file', file);\nEditor.plugin.add('emoji', emoji);\nEditor.plugin.add('equation', equation);\nEditor.plugin.add('specialCharacter', specialCharacter);\nEditor.plugin.add('mention', mention);\nEditor.plugin.add('markdown', markdown);\nEditor.plugin.add('enterKey', enterKey);\nEditor.plugin.add('shiftEnterKey', shiftEnterKey);\nEditor.plugin.add('backspaceKey', backspaceKey);\nEditor.plugin.add('deleteKey', deleteKey);\nEditor.plugin.add('tabKey', tabKey);\nEditor.plugin.add('arrowKeys', arrowKeys);\nEditor.plugin.add('escapeKey', escapeKey);\nEditor.plugin.add('slash', slash);\n\nexport {\n Editor,\n Toolbar,\n ToolbarItem,\n DropdownMenuItem,\n MentionItem,\n SlashItem,\n BoxComponent,\n BoxValue,\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":["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","file","initI18nObject","defaultItems","splitBlock","removeEmptyMarks","getNestedMark","alignValueMap","setFloatingToolbar","renderError","tagName","emptyCallback","getKeyword"],"mappings":"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","x_google_ignoreList":[82]}