@limetech/lime-elements 40.6.0 → 40.6.2

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 (457) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/{adapt-color-contrast-Beo1IEl_.js → adapt-color-contrast-h6iwOfZd.js} +1 -1
  3. package/dist/cjs/{checkbox.template-BPk8WkQF.js → checkbox.template-CoNVC4Nf.js} +2 -2
  4. package/dist/cjs/{component-CFk7Dfoi.js → component-Cz24PdGy.js} +3 -3
  5. package/dist/cjs/{component-BrNWuGdj.js → component-DNiVfYHV.js} +1 -1
  6. package/dist/cjs/{component-y8swlNNR.js → component-GW2n79GH.js} +1 -1
  7. package/dist/cjs/{component-UyqdiWGc.js → component-xiw46M1b.js} +1 -1
  8. package/dist/cjs/{files-DI4jItxi.js → files-DpGigQ8k.js} +1 -1
  9. package/dist/cjs/{format-bytes-CpUKKU86.js → format-bytes-WTHVI718.js} +1 -4
  10. package/dist/cjs/{hotkeys-BtR8uxvl.js → hotkeys-D761KWnZ.js} +1 -0
  11. package/dist/cjs/{image-resize-CG2fitJT.js → image-resize-JlRLB97I.js} +1 -0
  12. package/dist/cjs/{image.template-DY7qwbuy.js → image.template-DlF-f23b.js} +1 -1
  13. package/dist/cjs/{index--B6-r0uo.js → index-BlsqxTB1.js} +1 -7
  14. package/dist/cjs/index.cjs.js +1 -1
  15. package/dist/cjs/{keycodes-k-EdzcMX.js → keycodes-BQ_AERli.js} +4 -0
  16. package/dist/cjs/{language-CaqPKPyW.js → language-v-MMS6ym.js} +1 -1
  17. package/dist/cjs/lime-elements.cjs.js +2 -2
  18. package/dist/cjs/limel-3d-hover-effect-glow.cjs.entry.js +2 -2
  19. package/dist/cjs/limel-action-bar_3.cjs.entry.js +20 -18
  20. package/dist/cjs/limel-ai-avatar.cjs.entry.js +5 -5
  21. package/dist/cjs/limel-badge.cjs.entry.js +3 -3
  22. package/dist/cjs/limel-banner.cjs.entry.js +2 -2
  23. package/dist/cjs/limel-breadcrumbs_6.cjs.entry.js +86 -86
  24. package/dist/cjs/limel-button-group.cjs.entry.js +3 -3
  25. package/dist/cjs/limel-button.cjs.entry.js +4 -4
  26. package/dist/cjs/limel-callout.cjs.entry.js +6 -6
  27. package/dist/cjs/limel-card.cjs.entry.js +8 -7
  28. package/dist/cjs/limel-chart.cjs.entry.js +5 -5
  29. package/dist/cjs/limel-checkbox.cjs.entry.js +12 -10
  30. package/dist/cjs/limel-chip-set.cjs.entry.js +35 -44
  31. package/dist/cjs/limel-chip_2.cjs.entry.js +10 -10
  32. package/dist/cjs/limel-circular-progress.cjs.entry.js +2 -2
  33. package/dist/cjs/limel-code-diff.cjs.entry.js +25 -28
  34. package/dist/cjs/limel-code-editor.cjs.entry.js +17 -12
  35. package/dist/cjs/limel-collapsible-section.cjs.entry.js +8 -8
  36. package/dist/cjs/limel-color-picker-palette.cjs.entry.js +3 -3
  37. package/dist/cjs/limel-color-picker.cjs.entry.js +6 -5
  38. package/dist/cjs/limel-config.cjs.entry.js +3 -3
  39. package/dist/cjs/limel-date-picker.cjs.entry.js +12 -15
  40. package/dist/cjs/limel-dialog.cjs.entry.js +8 -11
  41. package/dist/cjs/limel-dock-button.cjs.entry.js +6 -11
  42. package/dist/cjs/limel-dock.cjs.entry.js +3 -3
  43. package/dist/cjs/limel-drag-handle.cjs.entry.js +6 -6
  44. package/dist/cjs/limel-dynamic-label.cjs.entry.js +1 -1
  45. package/dist/cjs/limel-email-viewer.cjs.entry.js +11 -17
  46. package/dist/cjs/limel-file-dropzone_2.cjs.entry.js +11 -12
  47. package/dist/cjs/limel-file-viewer.cjs.entry.js +1098 -1146
  48. package/dist/cjs/limel-file.cjs.entry.js +17 -16
  49. package/dist/cjs/limel-flatpickr-adapter.cjs.entry.js +100 -94
  50. package/dist/cjs/limel-flex-container.cjs.entry.js +2 -2
  51. package/dist/cjs/limel-form.cjs.entry.js +65 -50
  52. package/dist/cjs/limel-grid.cjs.entry.js +2 -2
  53. package/dist/cjs/limel-header.cjs.entry.js +2 -2
  54. package/dist/cjs/limel-help-content.cjs.entry.js +2 -2
  55. package/dist/cjs/limel-help.cjs.entry.js +3 -3
  56. package/dist/cjs/limel-helper-line_3.cjs.entry.js +14 -16
  57. package/dist/cjs/limel-hotkey_4.cjs.entry.js +23 -23
  58. package/dist/cjs/limel-icon-button.cjs.entry.js +4 -4
  59. package/dist/cjs/limel-icon.cjs.entry.js +15 -13
  60. package/dist/cjs/limel-info-tile.cjs.entry.js +10 -10
  61. package/dist/cjs/limel-list-item.cjs.entry.js +10 -10
  62. package/dist/cjs/limel-markdown.cjs.entry.js +25 -22
  63. package/dist/cjs/limel-masonry-layout.cjs.entry.js +6 -5
  64. package/dist/cjs/limel-menu-item-meta.cjs.entry.js +3 -3
  65. package/dist/cjs/limel-pagination-jump.cjs.entry.js +18 -16
  66. package/dist/cjs/limel-pagination.cjs.entry.js +10 -9
  67. package/dist/cjs/limel-picker.cjs.entry.js +32 -30
  68. package/dist/cjs/limel-popover_2.cjs.entry.js +26 -22
  69. package/dist/cjs/limel-profile-picture.cjs.entry.js +12 -11
  70. package/dist/cjs/limel-progress-flow-item.cjs.entry.js +1 -1
  71. package/dist/cjs/limel-progress-flow.cjs.entry.js +11 -10
  72. package/dist/cjs/limel-prosemirror-adapter.cjs.entry.js +475 -407
  73. package/dist/cjs/limel-radio-button-group.cjs.entry.js +2 -2
  74. package/dist/cjs/limel-radio-button.cjs.entry.js +3 -3
  75. package/dist/cjs/limel-scroller.cjs.entry.js +180 -0
  76. package/dist/cjs/limel-select.cjs.entry.js +20 -20
  77. package/dist/cjs/limel-shortcut.cjs.entry.js +1 -1
  78. package/dist/cjs/limel-slider.cjs.entry.js +18 -27
  79. package/dist/cjs/limel-snackbar.cjs.entry.js +5 -5
  80. package/dist/cjs/limel-split-button.cjs.entry.js +1 -1
  81. package/dist/cjs/limel-switch.cjs.entry.js +3 -3
  82. package/dist/cjs/limel-tab-bar.cjs.entry.js +235 -2036
  83. package/dist/cjs/limel-tab-panel.cjs.entry.js +12 -9
  84. package/dist/cjs/limel-table.cjs.entry.js +527 -106
  85. package/dist/cjs/limel-text-editor-link-menu.cjs.entry.js +16 -15
  86. package/dist/cjs/limel-text-editor.cjs.entry.js +3 -3
  87. package/dist/cjs/loader.cjs.js +2 -2
  88. package/dist/cjs/{make-enter-clickable-NuTMC9MU.js → make-enter-clickable-BZHEWIJD.js} +19 -12
  89. package/dist/cjs/{markdown-exporter-9p7d3Q76.js → markdown-exporter-C-UW43FF.js} +1 -1
  90. package/dist/cjs/{markdown-parser-Cgv5Y9Z4.js → markdown-parser-ssDij8_l.js} +24 -22
  91. package/dist/cjs/{moment-CqRdiK10.js → moment-Cfsz2WF1.js} +1062 -833
  92. package/dist/cjs/{ponyfill-BgIFyUG5.js → ponyfill-CHp7Zocr.js} +0 -1
  93. package/dist/cjs/{random-string-BTzDB2ee.js → random-string-CFCtFh5l.js} +1 -0
  94. package/dist/cjs/{render-list-component-5ZKWpCnM.js → render-list-component-BtAliHQp.js} +3 -5
  95. package/dist/cjs/{sv-BSR4W58y.js → sv-Co78RX70.js} +31 -3
  96. package/dist/cjs/{translations-DFFpR6AZ.js → translations-CNTWud2a.js} +5 -8
  97. package/dist/collection/collection-manifest.json +1 -0
  98. package/dist/collection/components/3d-hover-effect-glow/3d-hover-effect-glow.js +1 -1
  99. package/dist/collection/components/action-bar/action-bar-item/action-bar-item.js +8 -7
  100. package/dist/collection/components/action-bar/action-bar-item/action-bar-overflow-menu.js +1 -1
  101. package/dist/collection/components/action-bar/action-bar.js +6 -5
  102. package/dist/collection/components/ai-avatar/ai-avatar.js +1 -1
  103. package/dist/collection/components/badge/badge.js +2 -2
  104. package/dist/collection/components/banner/banner.js +1 -1
  105. package/dist/collection/components/breadcrumbs/breadcrumbs.js +2 -2
  106. package/dist/collection/components/button/button.js +2 -2
  107. package/dist/collection/components/button-group/button-group.js +1 -1
  108. package/dist/collection/components/callout/callout.js +1 -1
  109. package/dist/collection/components/card/card.js +6 -5
  110. package/dist/collection/components/checkbox/checkbox.js +9 -7
  111. package/dist/collection/components/checkbox/checkbox.template.js +1 -1
  112. package/dist/collection/components/chip/chip.js +1 -1
  113. package/dist/collection/components/chip-set/chip-set-input-helpers.js +18 -21
  114. package/dist/collection/components/chip-set/chip-set.js +7 -13
  115. package/dist/collection/components/circular-progress/circular-progress.js +1 -1
  116. package/dist/collection/components/code-diff/code-diff.js +19 -22
  117. package/dist/collection/components/code-diff/diff-engine.js +2 -2
  118. package/dist/collection/components/code-editor/code-editor.js +8 -3
  119. package/dist/collection/components/collapsible-section/collapsible-section.js +1 -1
  120. package/dist/collection/components/color-picker/color-picker-palette.js +2 -2
  121. package/dist/collection/components/color-picker/color-picker.js +5 -4
  122. package/dist/collection/components/config/config.js +2 -2
  123. package/dist/collection/components/date-picker/date-picker.js +3 -6
  124. package/dist/collection/components/date-picker/flatpickr-adapter/deferred-destroy.js +4 -3
  125. package/dist/collection/components/date-picker/flatpickr-adapter/flatpickr-adapter.js +1 -1
  126. package/dist/collection/components/date-picker/pickers/month-picker.js +40 -36
  127. package/dist/collection/components/date-picker/pickers/quarter-picker.js +35 -30
  128. package/dist/collection/components/date-picker/pickers/year-picker.js +16 -20
  129. package/dist/collection/components/dialog/dialog.js +4 -7
  130. package/dist/collection/components/dock/dock-button/dock-button.js +4 -9
  131. package/dist/collection/components/dock/dock.js +2 -2
  132. package/dist/collection/components/drag-handle/drag-handle.js +1 -1
  133. package/dist/collection/components/email-viewer/email-loader.js +14 -10
  134. package/dist/collection/components/email-viewer/email-viewer.js +1 -1
  135. package/dist/collection/components/email-viewer/sanitize-email-html.js +1 -4
  136. package/dist/collection/components/email-viewer/split-email-address-list.js +4 -10
  137. package/dist/collection/components/file/file.js +11 -10
  138. package/dist/collection/components/file-dropzone/file-dropzone.js +1 -1
  139. package/dist/collection/components/file-input/file-input.js +7 -8
  140. package/dist/collection/components/file-viewer/file-viewer.js +12 -9
  141. package/dist/collection/components/flex-container/flex-container.js +1 -1
  142. package/dist/collection/components/form/fields/schema-field.js +1 -1
  143. package/dist/collection/components/form/form.js +2 -5
  144. package/dist/collection/components/form/form.test-schemas.js +8 -10
  145. package/dist/collection/components/form/templates/array-field.js +7 -9
  146. package/dist/collection/components/form/templates/common.js +19 -19
  147. package/dist/collection/components/form/templates/object-field.js +1 -1
  148. package/dist/collection/components/form/validation-display.js +2 -2
  149. package/dist/collection/components/form/validators/format.js +1 -0
  150. package/dist/collection/components/form/widgets/code-editor.js +6 -9
  151. package/dist/collection/components/form/widgets/date-picker.js +1 -3
  152. package/dist/collection/components/grid/grid.js +1 -1
  153. package/dist/collection/components/header/header.js +1 -1
  154. package/dist/collection/components/help/help-content.js +1 -1
  155. package/dist/collection/components/help/help.js +2 -2
  156. package/dist/collection/components/helper-line/helper-line.js +3 -3
  157. package/dist/collection/components/hotkey/hotkey.js +1 -1
  158. package/dist/collection/components/icon/icon.js +11 -9
  159. package/dist/collection/components/icon-button/icon-button.js +1 -1
  160. package/dist/collection/components/info-tile/info-tile.js +9 -9
  161. package/dist/collection/components/input-field/input-field.js +11 -11
  162. package/dist/collection/components/list/list-renderer.js +5 -7
  163. package/dist/collection/components/list/list.js +2 -2
  164. package/dist/collection/components/list-item/list-item.js +2 -2
  165. package/dist/collection/components/list-item/menu-item-meta/menu-item-meta.js +1 -1
  166. package/dist/collection/components/markdown/hydrate-custom-elements.js +6 -5
  167. package/dist/collection/components/markdown/image-intersection-observer.js +9 -8
  168. package/dist/collection/components/markdown/image-markdown-plugin.js +9 -7
  169. package/dist/collection/components/markdown/link-markdown-plugin.js +11 -10
  170. package/dist/collection/components/markdown/markdown.js +6 -5
  171. package/dist/collection/components/markdown/remove-empty-paragraphs-plugin.js +4 -5
  172. package/dist/collection/components/masonry-layout/masonry-layout.js +5 -4
  173. package/dist/collection/components/menu/menu.js +48 -46
  174. package/dist/collection/components/menu-list/menu-list-renderer.js +8 -8
  175. package/dist/collection/components/menu-list/menu-list.js +1 -1
  176. package/dist/collection/components/menu-surface/menu-surface.js +6 -8
  177. package/dist/collection/components/notched-outline/notched-outline.js +1 -1
  178. package/dist/collection/components/pagination/jump/pagination-jump.js +13 -11
  179. package/dist/collection/components/pagination/pagination.js +5 -4
  180. package/dist/collection/components/picker/picker.js +25 -23
  181. package/dist/collection/components/popover/popover.js +13 -10
  182. package/dist/collection/components/popover-surface/popover-surface.js +1 -1
  183. package/dist/collection/components/portal/contains.js +9 -8
  184. package/dist/collection/components/portal/portal.js +16 -16
  185. package/dist/collection/components/profile-picture/profile-picture.js +4 -3
  186. package/dist/collection/components/progress-flow/progress-flow.js +10 -9
  187. package/dist/collection/components/radio-button-group/radio-button-group.js +1 -1
  188. package/dist/collection/components/radio-button-group/radio-button.js +2 -2
  189. package/dist/collection/components/scroller/scroller.css +317 -0
  190. package/dist/collection/components/scroller/scroller.js +284 -0
  191. package/dist/collection/components/select/select.js +13 -11
  192. package/dist/collection/components/select/select.template.js +1 -3
  193. package/dist/collection/components/slider/get-percentage-class.js +9 -18
  194. package/dist/collection/components/slider/slider.js +2 -2
  195. package/dist/collection/components/tab-bar/tab-bar.css +7 -289
  196. package/dist/collection/components/tab-bar/tab-bar.js +98 -128
  197. package/dist/collection/components/tab-panel/tab-panel.js +11 -8
  198. package/dist/collection/components/table/columns.js +1 -3
  199. package/dist/collection/components/table/element-pool.js +1 -1
  200. package/dist/collection/components/table/table-selection.js +6 -5
  201. package/dist/collection/components/table/table.css +15 -17
  202. package/dist/collection/components/table/table.js +44 -39
  203. package/dist/collection/components/text-editor/link-menu/editor-link-menu.js +11 -10
  204. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-command-utils/list-utils.js +1 -1
  205. package/dist/collection/components/text-editor/prosemirror-adapter/menu/menu-commands.js +6 -10
  206. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/inserter.js +37 -40
  207. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/image/node.js +2 -1
  208. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/link/link-plugin.js +21 -20
  209. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/menu-state-tracking-plugin.js +6 -5
  210. package/dist/collection/components/text-editor/prosemirror-adapter/plugins/trigger/factory-helpers/detect-trigger-removal.js +15 -14
  211. package/dist/collection/components/text-editor/prosemirror-adapter/prosemirror-adapter.js +40 -34
  212. package/dist/collection/components/text-editor/text-editor.js +1 -1
  213. package/dist/collection/components/text-editor/utils/metadata-utils.js +1 -1
  214. package/dist/collection/components/text-editor/utils/plugin-factory.js +3 -3
  215. package/dist/collection/components/tooltip/tooltip-content.js +1 -1
  216. package/dist/collection/components/tooltip/tooltip.js +2 -2
  217. package/dist/collection/global/icon-cache/factory.js +2 -3
  218. package/dist/collection/global/icon-cache/in-memory-icon-cache.js +2 -0
  219. package/dist/collection/global/translations.js +1 -3
  220. package/dist/collection/translations/fr.js +3 -3
  221. package/dist/collection/util/adapt-color-contrast.js +1 -1
  222. package/dist/collection/util/files.js +1 -1
  223. package/dist/collection/util/format-bytes.js +1 -4
  224. package/dist/collection/util/hotkeys.js +1 -0
  225. package/dist/collection/util/image-resize.js +1 -0
  226. package/dist/collection/util/keyboard-navigation.js +144 -0
  227. package/dist/collection/util/keycodes.js +2 -0
  228. package/dist/collection/util/language.js +1 -1
  229. package/dist/collection/util/make-enter-clickable.js +19 -12
  230. package/dist/collection/util/random-string.js +1 -0
  231. package/dist/collection/util/render-list-component.js +2 -4
  232. package/dist/esm/{adapt-color-contrast-Dgcw_h7C.js → adapt-color-contrast-BQoih_t0.js} +1 -1
  233. package/dist/esm/{checkbox.template-Cx_3u92S.js → checkbox.template-IDyv2bgn.js} +2 -2
  234. package/dist/esm/{component-wGVqvUmL.js → component-CVihTrav.js} +3 -3
  235. package/dist/esm/{component-7QB0OUSF.js → component-CrjPGt1I.js} +1 -1
  236. package/dist/esm/{component-D4qgwaTf.js → component-CyFeUQ0l.js} +1 -1
  237. package/dist/esm/{component-B2Vy44Z3.js → component-kP1jCDLp.js} +1 -1
  238. package/dist/esm/{files-DnkFEKoB.js → files-CKnLqPDj.js} +1 -1
  239. package/dist/esm/{format-bytes-u_sd2HMb.js → format-bytes-24yUSW40.js} +1 -4
  240. package/dist/esm/{hotkeys-BxrRWYts.js → hotkeys-DjmlD0Mw.js} +1 -0
  241. package/dist/esm/{image-resize-BTSG--2-.js → image-resize-Dv2HOgWN.js} +1 -0
  242. package/dist/esm/{image.template-wqMwmOF-.js → image.template-BGjw97m_.js} +1 -1
  243. package/dist/esm/{index-Bnc9lzk2.js → index-BU9IJqli.js} +1 -7
  244. package/dist/esm/index.js +1 -1
  245. package/dist/esm/{keycodes-C4_9qUMP.js → keycodes-DQ5DmW_Y.js} +3 -1
  246. package/dist/esm/{language-C3hECvXE.js → language-ChagAaNf.js} +1 -1
  247. package/dist/esm/lime-elements.js +3 -3
  248. package/dist/esm/limel-3d-hover-effect-glow.entry.js +2 -2
  249. package/dist/esm/limel-action-bar_3.entry.js +20 -18
  250. package/dist/esm/limel-ai-avatar.entry.js +5 -5
  251. package/dist/esm/limel-badge.entry.js +3 -3
  252. package/dist/esm/limel-banner.entry.js +2 -2
  253. package/dist/esm/limel-breadcrumbs_6.entry.js +86 -86
  254. package/dist/esm/limel-button-group.entry.js +3 -3
  255. package/dist/esm/limel-button.entry.js +4 -4
  256. package/dist/esm/limel-callout.entry.js +6 -6
  257. package/dist/esm/limel-card.entry.js +8 -7
  258. package/dist/esm/limel-chart.entry.js +5 -5
  259. package/dist/esm/limel-checkbox.entry.js +12 -10
  260. package/dist/esm/limel-chip-set.entry.js +35 -44
  261. package/dist/esm/limel-chip_2.entry.js +10 -10
  262. package/dist/esm/limel-circular-progress.entry.js +2 -2
  263. package/dist/esm/limel-code-diff.entry.js +25 -28
  264. package/dist/esm/limel-code-editor.entry.js +17 -12
  265. package/dist/esm/limel-collapsible-section.entry.js +8 -8
  266. package/dist/esm/limel-color-picker-palette.entry.js +3 -3
  267. package/dist/esm/limel-color-picker.entry.js +6 -5
  268. package/dist/esm/limel-config.entry.js +3 -3
  269. package/dist/esm/limel-date-picker.entry.js +12 -15
  270. package/dist/esm/limel-dialog.entry.js +8 -11
  271. package/dist/esm/limel-dock-button.entry.js +6 -11
  272. package/dist/esm/limel-dock.entry.js +3 -3
  273. package/dist/esm/limel-drag-handle.entry.js +6 -6
  274. package/dist/esm/limel-dynamic-label.entry.js +1 -1
  275. package/dist/esm/limel-email-viewer.entry.js +11 -17
  276. package/dist/esm/limel-file-dropzone_2.entry.js +11 -12
  277. package/dist/esm/limel-file-viewer.entry.js +1098 -1146
  278. package/dist/esm/limel-file.entry.js +17 -16
  279. package/dist/esm/limel-flatpickr-adapter.entry.js +100 -94
  280. package/dist/esm/limel-flex-container.entry.js +2 -2
  281. package/dist/esm/limel-form.entry.js +65 -50
  282. package/dist/esm/limel-grid.entry.js +2 -2
  283. package/dist/esm/limel-header.entry.js +2 -2
  284. package/dist/esm/limel-help-content.entry.js +2 -2
  285. package/dist/esm/limel-help.entry.js +3 -3
  286. package/dist/esm/limel-helper-line_3.entry.js +14 -16
  287. package/dist/esm/limel-hotkey_4.entry.js +23 -23
  288. package/dist/esm/limel-icon-button.entry.js +4 -4
  289. package/dist/esm/limel-icon.entry.js +15 -13
  290. package/dist/esm/limel-info-tile.entry.js +10 -10
  291. package/dist/esm/limel-list-item.entry.js +10 -10
  292. package/dist/esm/limel-markdown.entry.js +25 -22
  293. package/dist/esm/limel-masonry-layout.entry.js +6 -5
  294. package/dist/esm/limel-menu-item-meta.entry.js +3 -3
  295. package/dist/esm/limel-pagination-jump.entry.js +18 -16
  296. package/dist/esm/limel-pagination.entry.js +10 -9
  297. package/dist/esm/limel-picker.entry.js +32 -30
  298. package/dist/esm/limel-popover_2.entry.js +26 -22
  299. package/dist/esm/limel-profile-picture.entry.js +12 -11
  300. package/dist/esm/limel-progress-flow-item.entry.js +1 -1
  301. package/dist/esm/limel-progress-flow.entry.js +11 -10
  302. package/dist/esm/limel-prosemirror-adapter.entry.js +475 -407
  303. package/dist/esm/limel-radio-button-group.entry.js +2 -2
  304. package/dist/esm/limel-radio-button.entry.js +3 -3
  305. package/dist/esm/limel-scroller.entry.js +178 -0
  306. package/dist/esm/limel-select.entry.js +20 -20
  307. package/dist/esm/limel-shortcut.entry.js +1 -1
  308. package/dist/esm/limel-slider.entry.js +18 -27
  309. package/dist/esm/limel-snackbar.entry.js +5 -5
  310. package/dist/esm/limel-split-button.entry.js +1 -1
  311. package/dist/esm/limel-switch.entry.js +3 -3
  312. package/dist/esm/limel-tab-bar.entry.js +235 -2036
  313. package/dist/esm/limel-tab-panel.entry.js +12 -9
  314. package/dist/esm/limel-table.entry.js +527 -106
  315. package/dist/esm/limel-text-editor-link-menu.entry.js +16 -15
  316. package/dist/esm/limel-text-editor.entry.js +3 -3
  317. package/dist/esm/loader.js +3 -3
  318. package/dist/esm/{make-enter-clickable-BgTwPGeH.js → make-enter-clickable-CIf8aGSd.js} +19 -12
  319. package/dist/esm/{markdown-exporter--3_MaqwD.js → markdown-exporter-DblYRMhY.js} +1 -1
  320. package/dist/esm/{markdown-parser-DCf-3dKZ.js → markdown-parser-CAPDx7i8.js} +24 -22
  321. package/dist/esm/{moment-DQRNe8qq.js → moment-_DadZLWp.js} +1062 -833
  322. package/dist/esm/{ponyfill-ChRGk668.js → ponyfill-6YuZiAPi.js} +1 -1
  323. package/dist/esm/{random-string-JbKhhoXs.js → random-string-BrjD-ITe.js} +1 -0
  324. package/dist/esm/{render-list-component-cicbMp0l.js → render-list-component-J1IzNpbv.js} +3 -5
  325. package/dist/esm/{sv-CY-6-yEp.js → sv-DpsDSi7k.js} +31 -3
  326. package/dist/esm/{translations-DMtX4tTX.js → translations-Y4i8PVc9.js} +5 -8
  327. package/dist/lime-elements/index.esm.js +1 -1
  328. package/dist/lime-elements/lime-elements.esm.js +1 -1
  329. package/dist/lime-elements/p-02a06cf7.entry.js +1 -0
  330. package/dist/lime-elements/{p-3916b316.entry.js → p-03cb609e.entry.js} +1 -1
  331. package/dist/lime-elements/p-05038bbb.entry.js +1 -0
  332. package/dist/lime-elements/{p-835149c4.entry.js → p-0d6925f4.entry.js} +1 -1
  333. package/dist/lime-elements/p-0e13ec91.entry.js +1 -0
  334. package/dist/lime-elements/p-0ece667e.entry.js +1 -0
  335. package/dist/lime-elements/{p-19344984.entry.js → p-107654bb.entry.js} +4 -4
  336. package/dist/lime-elements/p-120ca628.entry.js +1 -0
  337. package/dist/lime-elements/{p-BwJGg-WI.js → p-1CgnIGyd.js} +4 -4
  338. package/dist/lime-elements/p-22fd1c87.entry.js +1 -0
  339. package/dist/lime-elements/p-24yUSW40.js +1 -0
  340. package/dist/lime-elements/{p-f717cd7a.entry.js → p-271662d4.entry.js} +1 -1
  341. package/dist/lime-elements/{p-c2a60508.entry.js → p-29c73bdf.entry.js} +1 -1
  342. package/dist/lime-elements/{p-deceda00.entry.js → p-2a902e77.entry.js} +1 -1
  343. package/dist/lime-elements/{p-d0cec424.entry.js → p-2b033dfa.entry.js} +1 -1
  344. package/dist/lime-elements/{p-acba5700.entry.js → p-2b2253d4.entry.js} +1 -1
  345. package/dist/lime-elements/p-2e33d2a4.entry.js +1 -0
  346. package/dist/lime-elements/p-32a050a3.entry.js +1 -0
  347. package/dist/lime-elements/{p-3735111e.entry.js → p-3cfe0eaf.entry.js} +1 -1
  348. package/dist/lime-elements/{p-fbcd99a3.entry.js → p-3d3bdf45.entry.js} +1 -1
  349. package/dist/lime-elements/p-45461ec5.entry.js +1 -0
  350. package/dist/lime-elements/p-45c39fb4.entry.js +1 -0
  351. package/dist/lime-elements/p-45fde7a1.entry.js +1 -0
  352. package/dist/lime-elements/p-48afa6b7.entry.js +1 -0
  353. package/dist/lime-elements/{p-f04f7c8e.entry.js → p-4a88d365.entry.js} +1 -1
  354. package/dist/lime-elements/p-4b75e653.entry.js +1 -0
  355. package/dist/lime-elements/{p-5698e493.entry.js → p-4ecbc9f4.entry.js} +1 -1
  356. package/dist/lime-elements/{p-2e568c56.entry.js → p-54a9f48f.entry.js} +1 -1
  357. package/dist/lime-elements/{p-0fba64eb.entry.js → p-5df21b25.entry.js} +2 -2
  358. package/dist/lime-elements/p-5e448070.entry.js +1 -0
  359. package/dist/lime-elements/{p-408c4dcb.entry.js → p-5f5c6e7d.entry.js} +1 -1
  360. package/dist/lime-elements/{p-052c3bc6.entry.js → p-681cb6de.entry.js} +1 -1
  361. package/dist/lime-elements/{p-ChRGk668.js → p-6YuZiAPi.js} +3 -3
  362. package/dist/lime-elements/{p-90df3e1b.entry.js → p-6d9961f7.entry.js} +1 -1
  363. package/dist/lime-elements/p-74060535.entry.js +159 -0
  364. package/dist/lime-elements/{p-74bd0c1a.entry.js → p-7b4351f6.entry.js} +1 -1
  365. package/dist/lime-elements/{p-3fd7e8aa.entry.js → p-7eab1341.entry.js} +1 -1
  366. package/dist/lime-elements/p-7fa85785.entry.js +23 -0
  367. package/dist/lime-elements/{p-35fa1063.entry.js → p-85318636.entry.js} +1 -1
  368. package/dist/lime-elements/{p-4ffbfc79.entry.js → p-8ac79ef5.entry.js} +1 -1
  369. package/dist/lime-elements/{p-4902fb3f.entry.js → p-9218fa6a.entry.js} +1 -1
  370. package/dist/lime-elements/{p-38b09f87.entry.js → p-9415411e.entry.js} +1 -1
  371. package/dist/lime-elements/{p-be8610ff.entry.js → p-958396b5.entry.js} +1 -1
  372. package/dist/lime-elements/p-95ccd9e7.entry.js +1 -0
  373. package/dist/lime-elements/p-970e0810.entry.js +1 -0
  374. package/dist/lime-elements/{p-cb407bef.entry.js → p-9afa4721.entry.js} +1 -1
  375. package/dist/lime-elements/{p-54dcf46f.entry.js → p-9c8c2fb7.entry.js} +1 -1
  376. package/dist/lime-elements/p-9e084e7c.entry.js +1 -0
  377. package/dist/lime-elements/{p-B8hoCfhT.js → p-B3YP9GOq.js} +1 -1
  378. package/dist/lime-elements/{p-Dgcw_h7C.js → p-BQoih_t0.js} +1 -1
  379. package/dist/lime-elements/{p-Bnc9lzk2.js → p-BU9IJqli.js} +1 -1
  380. package/dist/lime-elements/{p-BN1-aIOw.js → p-BZXGwiAr.js} +1 -1
  381. package/dist/lime-elements/{p-CGVVDGcv.js → p-Bkvc4sus.js} +1 -1
  382. package/dist/lime-elements/{p-BPzhuHcl.js → p-Bvyt2bmV.js} +1 -1
  383. package/dist/lime-elements/{p-DZkKQUDM.js → p-C1FFnUvf.js} +3 -3
  384. package/dist/lime-elements/{p-BgTwPGeH.js → p-CIf8aGSd.js} +1 -1
  385. package/dist/lime-elements/{p-C3hECvXE.js → p-ChagAaNf.js} +1 -1
  386. package/dist/lime-elements/{p-C9yTLqR8.js → p-CmtleG1y.js} +1 -1
  387. package/dist/lime-elements/{p-C4_9qUMP.js → p-DQ5DmW_Y.js} +1 -1
  388. package/dist/lime-elements/p-DTcfed02.js +3 -0
  389. package/dist/lime-elements/{p-BY85K-4J.js → p-DqQOawxc.js} +1 -1
  390. package/dist/lime-elements/{p-CC4Usa-Q.js → p-I0PrvthC.js} +1 -1
  391. package/dist/lime-elements/p-N9vxZMhe.js +1 -0
  392. package/dist/lime-elements/{p-DsDkl4Sy.js → p-ZDFVISfu.js} +3 -3
  393. package/dist/lime-elements/p-a1c69e0c.entry.js +1 -0
  394. package/dist/lime-elements/{p-2daf0482.entry.js → p-a1d1470c.entry.js} +1 -1
  395. package/dist/lime-elements/{p-cef66e53.entry.js → p-a2e6f16e.entry.js} +1 -1
  396. package/dist/lime-elements/{p-36ce4fbc.entry.js → p-a42f8c2d.entry.js} +1 -1
  397. package/dist/lime-elements/p-a550ba18.entry.js +1 -0
  398. package/dist/lime-elements/{p-d146feda.entry.js → p-a65eb58e.entry.js} +1 -1
  399. package/dist/lime-elements/{p-03fb2603.entry.js → p-b22b52a1.entry.js} +1 -1
  400. package/dist/lime-elements/{p-c2a3ca7c.entry.js → p-b6d39581.entry.js} +1 -1
  401. package/dist/lime-elements/{p-8475a3b8.entry.js → p-c439b68b.entry.js} +1 -1
  402. package/dist/lime-elements/p-d19c7a3a.entry.js +1 -0
  403. package/dist/lime-elements/{p-d3bd4b80.entry.js → p-d1b7cc55.entry.js} +3 -3
  404. package/dist/lime-elements/{p-7cbf50fc.entry.js → p-d1e5dd12.entry.js} +1 -1
  405. package/dist/lime-elements/p-de4719a6.entry.js +1 -0
  406. package/dist/lime-elements/{p-b81a2728.entry.js → p-e02e2c5f.entry.js} +1 -1
  407. package/dist/lime-elements/{p-d351b9ae.entry.js → p-e6a34047.entry.js} +1 -1
  408. package/dist/lime-elements/p-eF09GxA_.js +1 -0
  409. package/dist/lime-elements/{p-8fa9c9ea.entry.js → p-ee719744.entry.js} +1 -1
  410. package/dist/lime-elements/p-f3cae1e7.entry.js +1 -0
  411. package/dist/lime-elements/{p-8115da75.entry.js → p-f4a0b1bc.entry.js} +1 -1
  412. package/dist/lime-elements/{p-4855dc9b.entry.js → p-f82f72e7.entry.js} +1 -1
  413. package/dist/lime-elements/{p-2d84ea04.entry.js → p-f97ec7a5.entry.js} +1 -1
  414. package/dist/lime-elements/{p-21109d9b.entry.js → p-fdd674fc.entry.js} +1 -1
  415. package/dist/lime-elements/{p-459eea13.entry.js → p-fdec09e9.entry.js} +1 -1
  416. package/dist/lime-elements/{p-2f57c3fa.entry.js → p-fe492ff3.entry.js} +1 -1
  417. package/dist/lime-elements/{p-65cded0e.entry.js → p-ff1a8b2e.entry.js} +1 -1
  418. package/dist/types/components/chip-set/chip-set-input-helpers.d.ts +1 -1
  419. package/dist/types/components/pagination/jump/pagination-jump.d.ts +1 -1
  420. package/dist/types/components/scroller/scroller.d.ts +67 -0
  421. package/dist/types/components/tab-bar/tab-bar.d.ts +23 -21
  422. package/dist/types/components.d.ts +132 -0
  423. package/dist/types/global/icon-cache/factory.d.ts +2 -2
  424. package/dist/types/global/translations.d.ts +2 -2
  425. package/dist/types/util/keyboard-navigation.d.ts +105 -0
  426. package/dist/types/util/keycodes.d.ts +2 -0
  427. package/package.json +12 -12
  428. package/dist/lime-elements/p-1e93473a.entry.js +0 -1
  429. package/dist/lime-elements/p-20658306.entry.js +0 -1
  430. package/dist/lime-elements/p-26c5c6b9.entry.js +0 -1
  431. package/dist/lime-elements/p-452b9b01.entry.js +0 -1
  432. package/dist/lime-elements/p-4aae63bd.entry.js +0 -1
  433. package/dist/lime-elements/p-507cc8a1.entry.js +0 -159
  434. package/dist/lime-elements/p-531b6a64.entry.js +0 -1
  435. package/dist/lime-elements/p-54793c06.entry.js +0 -1
  436. package/dist/lime-elements/p-5d974afa.entry.js +0 -1
  437. package/dist/lime-elements/p-66b125f2.entry.js +0 -1
  438. package/dist/lime-elements/p-7e212fa7.entry.js +0 -1
  439. package/dist/lime-elements/p-82696d24.entry.js +0 -1
  440. package/dist/lime-elements/p-9ac39039.entry.js +0 -1
  441. package/dist/lime-elements/p-9b631363.entry.js +0 -1
  442. package/dist/lime-elements/p-DQJU9gzh.js +0 -1
  443. package/dist/lime-elements/p-DpJgXIWf.js +0 -1
  444. package/dist/lime-elements/p-a1de9bbe.entry.js +0 -1
  445. package/dist/lime-elements/p-a71f6e87.entry.js +0 -67
  446. package/dist/lime-elements/p-bd7b3f8e.entry.js +0 -1
  447. package/dist/lime-elements/p-c72e5007.entry.js +0 -1
  448. package/dist/lime-elements/p-cafec335.entry.js +0 -1
  449. package/dist/lime-elements/p-d6dadc61.entry.js +0 -1
  450. package/dist/lime-elements/p-d93b7b9f.entry.js +0 -23
  451. package/dist/lime-elements/p-dc9cd793.entry.js +0 -1
  452. package/dist/lime-elements/p-dd62042a.entry.js +0 -1
  453. package/dist/lime-elements/p-u_sd2HMb.js +0 -1
  454. package/dist/lime-elements/p-zo6O9LC9.js +0 -3
  455. /package/dist/lime-elements/{p-JbKhhoXs.js → p-BrjD-ITe.js} +0 -0
  456. /package/dist/lime-elements/{p-BxrRWYts.js → p-DjmlD0Mw.js} +0 -0
  457. /package/dist/lime-elements/{p-BTSG--2-.js → p-Dv2HOgWN.js} +0 -0
@@ -1,12 +1,12 @@
1
- import { r as registerInstance, c as createEvent, h, H as Host, a as getElement } from './index-Bnc9lzk2.js';
1
+ import { r as registerInstance, c as createEvent, h, H as Host, a as getElement } from './index-BU9IJqli.js';
2
2
  import { L as LevelMapping, E as EditorMenuTypes, i as isInlineImageTag, M as MouseButtons, e as editorMenuTypesArray } from './types-C_Yu8dOg.js';
3
- import { g as getLinkAttributes, m as markdownToHTML, s as sanitizeHTML } from './markdown-parser-DCf-3dKZ.js';
3
+ import { g as getLinkAttributes, m as markdownToHTML, s as sanitizeHTML } from './markdown-parser-CAPDx7i8.js';
4
4
  import { c as cloneDeep } from './cloneDeep-DAbOtbs8.js';
5
- import { t as translate } from './translations-DMtX4tTX.js';
5
+ import { t as translations } from './translations-Y4i8PVc9.js';
6
6
  import { c as decodeHTML, e as decodeHTMLStrict } from './index-BN64nlbO.js';
7
- import { c as createRandomString } from './random-string-JbKhhoXs.js';
7
+ import { c as createRandomString } from './random-string-BrjD-ITe.js';
8
8
  import { i as isItem } from './is-item-CrvUOVvg.js';
9
- import { c as createFileInfo } from './files-DnkFEKoB.js';
9
+ import { c as createFileInfo } from './files-CKnLqPDj.js';
10
10
  import { i as isEqual } from './isEqual-CE83yS8T.js';
11
11
  import { d as debounce } from './debounce-B67JMchz.js';
12
12
  import './_commonjsHelpers-B85MJLTf.js';
@@ -23,7 +23,7 @@ import './_isIndex-B--C3qwe.js';
23
23
  import './_assignValue-CEFvyZxO.js';
24
24
  import './_defineProperty-C69Btzid.js';
25
25
  import './_getPrototype-B0kMNv1F.js';
26
- import './language-C3hECvXE.js';
26
+ import './language-ChagAaNf.js';
27
27
  import './file-metadata-BHzkIH4g.js';
28
28
  import './icons-Bu_YRgCL.js';
29
29
  import './get-icon-props-CgNJbSP4.js';
@@ -6871,15 +6871,15 @@ function scanFor(node, off, targetNode, targetOff, dir) {
6871
6871
  return true;
6872
6872
  if (off == (dir < 0 ? 0 : nodeSize(node))) {
6873
6873
  let parent = node.parentNode;
6874
- if (!parent || parent.nodeType != 1 || hasBlockDesc(node) || atomElements.test(node.nodeName) ||
6874
+ if (!parent || !isElt(parent) || hasBlockDesc(node) || atomElements.test(node.nodeName) ||
6875
6875
  node.contentEditable == "false")
6876
6876
  return false;
6877
6877
  off = domIndex(node) + (dir < 0 ? 0 : 1);
6878
6878
  node = parent;
6879
6879
  }
6880
- else if (node.nodeType == 1) {
6880
+ else if (isElt(node)) {
6881
6881
  let child = node.childNodes[off + (dir < 0 ? -1 : 0)];
6882
- if (child.nodeType == 1 && child.contentEditable == "false") {
6882
+ if (isElt(child) && child.contentEditable == "false") {
6883
6883
  if ((_a = child.pmViewDesc) === null || _a === void 0 ? void 0 : _a.ignoreForSelection)
6884
6884
  off += dir;
6885
6885
  else
@@ -6898,11 +6898,16 @@ function scanFor(node, off, targetNode, targetOff, dir) {
6898
6898
  function nodeSize(node) {
6899
6899
  return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
6900
6900
  }
6901
+ function isElt(node) { return node.nodeType == 1; }
6902
+ function isText(node) { return node.nodeType == 3; }
6903
+ function contains(parent, child) {
6904
+ return child ? parent.contains(isElt(child) ? child : child.parentNode) : false;
6905
+ }
6901
6906
  function textNodeBefore$1(node, offset) {
6902
6907
  for (;;) {
6903
- if (node.nodeType == 3 && offset)
6908
+ if (isText(node) && offset)
6904
6909
  return node;
6905
- if (node.nodeType == 1 && offset > 0) {
6910
+ if (isElt(node) && offset > 0) {
6906
6911
  if (node.contentEditable == "false")
6907
6912
  return null;
6908
6913
  node = node.childNodes[offset - 1];
@@ -6919,9 +6924,9 @@ function textNodeBefore$1(node, offset) {
6919
6924
  }
6920
6925
  function textNodeAfter$1(node, offset) {
6921
6926
  for (;;) {
6922
- if (node.nodeType == 3 && offset < node.nodeValue.length)
6927
+ if (isText(node) && offset < node.nodeValue.length)
6923
6928
  return node;
6924
- if (node.nodeType == 1 && offset < node.childNodes.length) {
6929
+ if (isElt(node) && offset < node.childNodes.length) {
6925
6930
  if (node.contentEditable == "false")
6926
6931
  return null;
6927
6932
  node = node.childNodes[offset];
@@ -7036,18 +7041,20 @@ function clientRect(node) {
7036
7041
  top: rect.top, bottom: rect.top + node.clientHeight * scaleY };
7037
7042
  }
7038
7043
  function scrollRectIntoView(view, rect, startDOM) {
7044
+ // Skip empty rects with all sides at 0, for example, when the element has no CSS box (display: none)
7045
+ if (!nonZero(rect) && rect.left == 0)
7046
+ return;
7039
7047
  let scrollThreshold = view.someProp("scrollThreshold") || 0, scrollMargin = view.someProp("scrollMargin") || 5;
7040
7048
  let doc = view.dom.ownerDocument;
7041
7049
  for (let parent = startDOM || view.dom;;) {
7042
7050
  if (!parent)
7043
7051
  break;
7044
- if (parent.nodeType != 1) {
7052
+ if (!isElt(parent)) {
7045
7053
  parent = parentNode(parent);
7046
7054
  continue;
7047
7055
  }
7048
- let elt = parent;
7049
- let atTop = elt == doc.body;
7050
- let bounding = atTop ? windowRect(doc) : clientRect(elt);
7056
+ let atTop = parent == doc.body;
7057
+ let bounding = atTop ? windowRect(doc) : clientRect(parent);
7051
7058
  let moveX = 0, moveY = 0;
7052
7059
  if (rect.top < bounding.top + getSide(scrollThreshold, "top"))
7053
7060
  moveY = -(bounding.top - rect.top + getSide(scrollMargin, "top"));
@@ -7064,12 +7071,12 @@ function scrollRectIntoView(view, rect, startDOM) {
7064
7071
  doc.defaultView.scrollBy(moveX, moveY);
7065
7072
  }
7066
7073
  else {
7067
- let startX = elt.scrollLeft, startY = elt.scrollTop;
7074
+ let startX = parent.scrollLeft, startY = parent.scrollTop;
7068
7075
  if (moveY)
7069
- elt.scrollTop += moveY;
7076
+ parent.scrollTop += moveY;
7070
7077
  if (moveX)
7071
- elt.scrollLeft += moveX;
7072
- let dX = elt.scrollLeft - startX, dY = elt.scrollTop - startY;
7078
+ parent.scrollLeft += moveX;
7079
+ let dX = parent.scrollLeft - startX, dY = parent.scrollTop - startY;
7073
7080
  rect = { left: rect.left - dX, top: rect.top - dY, right: rect.right - dX, bottom: rect.bottom - dY };
7074
7081
  }
7075
7082
  }
@@ -7144,14 +7151,15 @@ function focusPreventScroll(dom) {
7144
7151
  }
7145
7152
  }
7146
7153
  function findOffsetInNode(node, coords) {
7147
- let closest, dxClosest = 2e8, coordsClosest, offset = 0;
7154
+ let closest;
7155
+ let dxClosest = 2e8, coordsClosest, offset = 0;
7148
7156
  let rowBot = coords.top, rowTop = coords.top;
7149
7157
  let firstBelow, coordsBelow;
7150
7158
  for (let child = node.firstChild, childIndex = 0; child; child = child.nextSibling, childIndex++) {
7151
7159
  let rects;
7152
- if (child.nodeType == 1)
7160
+ if (isElt(child))
7153
7161
  rects = child.getClientRects();
7154
- else if (child.nodeType == 3)
7162
+ else if (isText(child))
7155
7163
  rects = textRange(child).getClientRects();
7156
7164
  else
7157
7165
  continue;
@@ -7165,11 +7173,11 @@ function findOffsetInNode(node, coords) {
7165
7173
  if (dx < dxClosest) {
7166
7174
  closest = child;
7167
7175
  dxClosest = dx;
7168
- coordsClosest = dx && closest.nodeType == 3 ? {
7176
+ coordsClosest = dx && isText(closest) ? {
7169
7177
  left: rect.right < coords.left ? rect.right : rect.left,
7170
7178
  top: coords.top
7171
7179
  } : coords;
7172
- if (child.nodeType == 1 && dx)
7180
+ if (isElt(child) && dx)
7173
7181
  offset = childIndex + (coords.left >= (rect.left + rect.right) / 2 ? 1 : 0);
7174
7182
  continue;
7175
7183
  }
@@ -7188,9 +7196,9 @@ function findOffsetInNode(node, coords) {
7188
7196
  coordsClosest = coordsBelow;
7189
7197
  dxClosest = 0;
7190
7198
  }
7191
- if (closest && closest.nodeType == 3)
7199
+ if (closest && isText(closest))
7192
7200
  return findOffsetInText(closest, coordsClosest);
7193
- if (!closest || (dxClosest && closest.nodeType == 1))
7201
+ if (!closest || dxClosest)
7194
7202
  return { node, offset };
7195
7203
  return findOffsetInNode(closest, coordsClosest);
7196
7204
  }
@@ -7223,7 +7231,7 @@ function targetKludge(dom, coords) {
7223
7231
  }
7224
7232
  function posFromElement(view, elt, coords) {
7225
7233
  let { node, offset } = findOffsetInNode(elt, coords), bias = -1;
7226
- if (node.nodeType == 1 && !node.firstChild) {
7234
+ if (isElt(node) && !node.firstChild) {
7227
7235
  let rect = node.getBoundingClientRect();
7228
7236
  bias = rect.left != rect.right && coords.left > (rect.left + rect.right) / 2 ? 1 : -1;
7229
7237
  }
@@ -7243,7 +7251,7 @@ function posFromCaret(view, node, offset, coords) {
7243
7251
  let desc = view.docView.nearestDesc(cur, true), rect;
7244
7252
  if (!desc)
7245
7253
  return null;
7246
- if (desc.dom.nodeType == 1 && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&
7254
+ if (isElt(desc.dom) && (desc.node.isBlock && desc.parent || !desc.contentDOM) &&
7247
7255
  // Ignore elements with zero-size bounding rectangles
7248
7256
  ((rect = desc.dom.getBoundingClientRect()).width || rect.height)) {
7249
7257
  if (desc.node.isBlock && desc.parent && !/^T(R|BODY|HEAD|FOOT)$/.test(desc.dom.nodeName)) {
@@ -7270,7 +7278,7 @@ function elementFromPoint(element, coords, box) {
7270
7278
  if (len && box.top < box.bottom) {
7271
7279
  for (let startI = Math.max(0, Math.min(len - 1, Math.floor(len * (coords.top - box.top) / (box.bottom - box.top)) - 2)), i = startI;;) {
7272
7280
  let child = element.childNodes[i];
7273
- if (child.nodeType == 1) {
7281
+ if (isElt(child)) {
7274
7282
  let rects = child.getClientRects();
7275
7283
  for (let j = 0; j < rects.length; j++) {
7276
7284
  let rect = rects[j];
@@ -7293,7 +7301,7 @@ function posAtCoords(view, coords) {
7293
7301
  let elt = (view.root.elementFromPoint ? view.root : doc)
7294
7302
  .elementFromPoint(coords.left, coords.top);
7295
7303
  let pos;
7296
- if (!elt || !view.dom.contains(elt.nodeType != 1 ? elt.parentNode : elt)) {
7304
+ if (!elt || !view.dom.contains(elt)) {
7297
7305
  let box = view.dom.getBoundingClientRect();
7298
7306
  if (!inRect(coords, box))
7299
7307
  return null;
@@ -7309,7 +7317,7 @@ function posAtCoords(view, coords) {
7309
7317
  }
7310
7318
  elt = targetKludge(elt, coords);
7311
7319
  if (node) {
7312
- if (gecko && node.nodeType == 1) {
7320
+ if (gecko && isElt(node)) {
7313
7321
  // Firefox will sometimes return offsets into <input> nodes, which
7314
7322
  // have no actual children, from caretPositionFromPoint (#953)
7315
7323
  offset = Math.min(offset, node.childNodes.length);
@@ -7324,18 +7332,18 @@ function posAtCoords(view, coords) {
7324
7332
  }
7325
7333
  let prev;
7326
7334
  // When clicking above the right side of an uneditable node, Chrome will report a cursor position after that node.
7327
- if (webkit && offset && node.nodeType == 1 && (prev = node.childNodes[offset - 1]).nodeType == 1 &&
7335
+ if (webkit && offset && isElt(node) && isElt(prev = node.childNodes[offset - 1]) &&
7328
7336
  prev.contentEditable == "false" && prev.getBoundingClientRect().top >= coords.top)
7329
7337
  offset--;
7330
7338
  // Suspiciously specific kludge to work around caret*FromPoint
7331
7339
  // never returning a position at the end of the document
7332
- if (node == view.dom && offset == node.childNodes.length - 1 && node.lastChild.nodeType == 1 &&
7340
+ if (node == view.dom && offset == node.childNodes.length - 1 && isElt(node.lastChild) &&
7333
7341
  coords.top > node.lastChild.getBoundingClientRect().bottom)
7334
7342
  pos = view.state.doc.content.size;
7335
7343
  // Ignore positions directly after a BR, since caret*FromPoint
7336
7344
  // 'round up' positions that would be more accurately placed
7337
7345
  // before the BR node.
7338
- else if (offset == 0 || node.nodeType != 1 || node.childNodes[offset - 1].nodeName != "BR")
7346
+ else if (offset == 0 || !isElt(node) || node.childNodes[offset - 1].nodeName != "BR")
7339
7347
  pos = posFromCaret(view, node, offset, coords);
7340
7348
  }
7341
7349
  if (pos == null)
@@ -7361,7 +7369,7 @@ const BIDI = /[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/;
7361
7369
  function coordsAtPos(view, pos, side) {
7362
7370
  let { node, offset, atom } = view.docView.domFromPos(pos, side < 0 ? -1 : 1);
7363
7371
  let supportEmptyRange = webkit || gecko;
7364
- if (node.nodeType == 3) {
7372
+ if (isText(node)) {
7365
7373
  // These browsers support querying empty text ranges. Prefer that in
7366
7374
  // bidi context or when at the end of a node.
7367
7375
  if (supportEmptyRange && (BIDI.test(node.nodeValue) || (side < 0 ? !offset : offset == node.nodeValue.length))) {
@@ -7403,12 +7411,12 @@ function coordsAtPos(view, pos, side) {
7403
7411
  if (!$dom.parent.inlineContent) {
7404
7412
  if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
7405
7413
  let before = node.childNodes[offset - 1];
7406
- if (before.nodeType == 1)
7414
+ if (isElt(before))
7407
7415
  return flattenH(before.getBoundingClientRect(), false);
7408
7416
  }
7409
7417
  if (atom == null && offset < nodeSize(node)) {
7410
7418
  let after = node.childNodes[offset];
7411
- if (after.nodeType == 1)
7419
+ if (isElt(after))
7412
7420
  return flattenH(after.getBoundingClientRect(), true);
7413
7421
  }
7414
7422
  return flattenH(node.getBoundingClientRect(), side >= 0);
@@ -7416,10 +7424,10 @@ function coordsAtPos(view, pos, side) {
7416
7424
  // Inline, not in text node (this is not Bidi-safe)
7417
7425
  if (atom == null && offset && (side < 0 || offset == nodeSize(node))) {
7418
7426
  let before = node.childNodes[offset - 1];
7419
- let target = before.nodeType == 3 ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))
7427
+ let target = isText(before) ? textRange(before, nodeSize(before) - (supportEmptyRange ? 0 : 1))
7420
7428
  // BR nodes tend to only return the rectangle before them.
7421
7429
  // Only use them if they are the last element in their parent
7422
- : before.nodeType == 1 && (before.nodeName != "BR" || !before.nextSibling) ? before : null;
7430
+ : isElt(before) && (before.nodeName != "BR" || !before.nextSibling) ? before : null;
7423
7431
  if (target)
7424
7432
  return flattenV(singleRect(target, 1), false);
7425
7433
  }
@@ -7427,13 +7435,13 @@ function coordsAtPos(view, pos, side) {
7427
7435
  let after = node.childNodes[offset];
7428
7436
  while (after.pmViewDesc && after.pmViewDesc.ignoreForCoords)
7429
7437
  after = after.nextSibling;
7430
- let target = !after ? null : after.nodeType == 3 ? textRange(after, 0, (supportEmptyRange ? 0 : 1))
7431
- : after.nodeType == 1 ? after : null;
7438
+ let target = !after ? null : isText(after) ? textRange(after, 0, (supportEmptyRange ? 0 : 1))
7439
+ : isElt(after) ? after : null;
7432
7440
  if (target)
7433
7441
  return flattenV(singleRect(target, -1), true);
7434
7442
  }
7435
7443
  // All else failed, just try to get a rectangle for the target node
7436
- return flattenV(singleRect(node.nodeType == 3 ? textRange(node) : node, -side), side >= 0);
7444
+ return flattenV(singleRect(isText(node) ? textRange(node) : node, -side), side >= 0);
7437
7445
  }
7438
7446
  function flattenV(rect, left) {
7439
7447
  if (rect.width == 0)
@@ -7483,9 +7491,9 @@ function endOfTextblockVertical(view, state, dir) {
7483
7491
  let coords = coordsAtPos(view, $pos.pos, 1);
7484
7492
  for (let child = dom.firstChild; child; child = child.nextSibling) {
7485
7493
  let boxes;
7486
- if (child.nodeType == 1)
7494
+ if (isElt(child))
7487
7495
  boxes = child.getClientRects();
7488
- else if (child.nodeType == 3)
7496
+ else if (isText(child))
7489
7497
  boxes = textRange(child, 0, child.nodeValue.length).getClientRects();
7490
7498
  else
7491
7499
  continue;
@@ -7525,8 +7533,7 @@ function endOfTextblockHorizontal(view, state, dir) {
7525
7533
  sel.modify("move", dir, "character");
7526
7534
  let parentDOM = $head.depth ? view.docView.domAfterPos($head.before()) : view.dom;
7527
7535
  let { focusNode: newNode, focusOffset: newOff } = view.domSelectionRange();
7528
- let result = newNode && !parentDOM.contains(newNode.nodeType == 1 ? newNode : newNode.parentNode) ||
7529
- (oldNode == newNode && oldOff == newOff);
7536
+ let result = newNode && !contains(parentDOM, newNode) || (oldNode == newNode && oldOff == newOff);
7530
7537
  // Restore the previous selection
7531
7538
  try {
7532
7539
  sel.collapse(anchorNode, anchorOffset);
@@ -7590,7 +7597,7 @@ class ViewDesc {
7590
7597
  // When parsing in-editor content (in domchange.js), we allow
7591
7598
  // descriptions to determine the parse rules that should be used to
7592
7599
  // parse them.
7593
- parseRule() { return null; }
7600
+ parseRule(addedNodes) { return null; }
7594
7601
  // Used by the editor's event handler to ignore events that come
7595
7602
  // from certain descs.
7596
7603
  stopEvent(event) { return false; }
@@ -7634,7 +7641,7 @@ class ViewDesc {
7634
7641
  localPosFromDOM(dom, offset, bias) {
7635
7642
  // If the DOM position is in the content, use the child desc after
7636
7643
  // it to figure out a position.
7637
- if (this.contentDOM && this.contentDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode)) {
7644
+ if (this.contentDOM && contains(this.contentDOM, dom)) {
7638
7645
  if (bias < 0) {
7639
7646
  let domBefore, desc;
7640
7647
  if (dom == this.contentDOM) {
@@ -7672,7 +7679,7 @@ class ViewDesc {
7672
7679
  atEnd = offset > domIndex(this.contentDOM);
7673
7680
  }
7674
7681
  else if (this.contentDOM && this.contentDOM != this.dom && this.dom.contains(this.contentDOM)) {
7675
- atEnd = dom.compareDocumentPosition(this.contentDOM) & 2;
7682
+ atEnd = !!(dom.compareDocumentPosition(this.contentDOM) & 4);
7676
7683
  }
7677
7684
  else if (this.dom.firstChild) {
7678
7685
  if (offset == 0)
@@ -7702,7 +7709,7 @@ class ViewDesc {
7702
7709
  if (desc && (!onlyNodes || desc.node)) {
7703
7710
  // If dom is outside of this desc's nodeDOM, don't count it.
7704
7711
  if (first && (nodeDOM = desc.nodeDOM) &&
7705
- !(nodeDOM.nodeType == 1 ? nodeDOM.contains(dom.nodeType == 1 ? dom : dom.parentNode) : nodeDOM == dom))
7712
+ !(isElt(nodeDOM) ? contains(nodeDOM, dom) : nodeDOM == dom))
7706
7713
  first = false;
7707
7714
  else
7708
7715
  return desc;
@@ -7752,7 +7759,7 @@ class ViewDesc {
7752
7759
  let i = 0, offset = 0;
7753
7760
  for (let curPos = 0; i < this.children.length; i++) {
7754
7761
  let child = this.children[i], end = curPos + child.size;
7755
- if (end > pos || child instanceof TrailingHackViewDesc) {
7762
+ if (end > pos) {
7756
7763
  offset = pos - curPos;
7757
7764
  break;
7758
7765
  }
@@ -7762,7 +7769,11 @@ class ViewDesc {
7762
7769
  if (offset)
7763
7770
  return this.children[i].domFromPos(offset - this.children[i].border, side);
7764
7771
  // Go back if there were any zero-length widgets with side >= 0 before this point
7765
- for (let prev; i && !(prev = this.children[i - 1]).size && prev instanceof WidgetViewDesc && prev.side >= 0; i--) { }
7772
+ for (; i > 0; i--) {
7773
+ let prev = this.children[i - 1];
7774
+ if (prev.size || !(prev instanceof BufferHackViewDesc || prev instanceof WidgetViewDesc && prev.side >= 0))
7775
+ break;
7776
+ }
7766
7777
  // Scan towards the first useable node
7767
7778
  if (side <= 0) {
7768
7779
  let prev, enter = true;
@@ -7839,7 +7850,7 @@ class ViewDesc {
7839
7850
  }
7840
7851
  domAfterPos(pos) {
7841
7852
  let { node, offset } = this.domFromPos(pos, 0);
7842
- if (node.nodeType != 1 || offset == node.childNodes.length)
7853
+ if (!isElt(node) || offset == node.childNodes.length)
7843
7854
  throw new RangeError("No node after pos " + pos);
7844
7855
  return node.childNodes[offset];
7845
7856
  }
@@ -7868,7 +7879,7 @@ class ViewDesc {
7868
7879
  // reported position in such situations (#1092).
7869
7880
  if ((gecko || safari) && anchor == head) {
7870
7881
  let { node, offset } = anchorDOM;
7871
- if (node.nodeType == 3) {
7882
+ if (isText(node)) {
7872
7883
  brKludge = !!(offset && node.nodeValue[offset - 1] == "\n");
7873
7884
  // Issue #1128
7874
7885
  if (brKludge && offset == node.nodeValue.length) {
@@ -7891,7 +7902,7 @@ class ViewDesc {
7891
7902
  }
7892
7903
  // Firefox can act strangely when the selection is in front of an
7893
7904
  // uneditable node. See #1163 and https://bugzilla.mozilla.org/show_bug.cgi?id=1709536
7894
- if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && selRange.focusNode.nodeType == 1) {
7905
+ if (gecko && selRange.focusNode && selRange.focusNode != headDOM.node && isElt(selRange.focusNode)) {
7895
7906
  let after = selRange.focusNode.childNodes[selRange.focusOffset];
7896
7907
  if (after && after.contentEditable == "false")
7897
7908
  force = true;
@@ -7990,13 +8001,12 @@ class WidgetViewDesc extends ViewDesc {
7990
8001
  return self.parent.posBeforeChild(self);
7991
8002
  });
7992
8003
  if (!widget.type.spec.raw) {
7993
- if (dom.nodeType != 1) {
7994
- let wrap = document.createElement("span");
7995
- wrap.appendChild(dom);
7996
- dom = wrap;
7997
- }
7998
- dom.contentEditable = "false";
7999
- dom.classList.add("ProseMirror-widget");
8004
+ let elt = isElt(dom) ? dom : document.createElement("span");
8005
+ if (elt != dom)
8006
+ elt.appendChild(dom);
8007
+ if (!elt.hasAttribute("contenteditable"))
8008
+ elt.contentEditable = "false";
8009
+ elt.classList.add("ProseMirror-widget");
8000
8010
  }
8001
8011
  super(parent, [], dom, null);
8002
8012
  this.widget = widget;
@@ -8102,7 +8112,7 @@ class MarkViewDesc extends ViewDesc {
8102
8112
  // correspond to an actual node in the document. Unlike mark descs,
8103
8113
  // they populate their child array themselves.
8104
8114
  class NodeViewDesc extends ViewDesc {
8105
- constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos) {
8115
+ constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM) {
8106
8116
  super(parent, [], dom, contentDOM);
8107
8117
  this.node = node;
8108
8118
  this.outerDeco = outerDeco;
@@ -8132,7 +8142,7 @@ class NodeViewDesc extends ViewDesc {
8132
8142
  if (node.isText) {
8133
8143
  if (!dom)
8134
8144
  dom = document.createTextNode(node.text);
8135
- else if (dom.nodeType != 3)
8145
+ else if (!isText(dom))
8136
8146
  throw new RangeError("Text must be rendered as a DOM text node");
8137
8147
  }
8138
8148
  else if (!dom) {
@@ -8148,13 +8158,13 @@ class NodeViewDesc extends ViewDesc {
8148
8158
  let nodeDOM = dom;
8149
8159
  dom = applyOuterDeco(dom, outerDeco, node);
8150
8160
  if (spec)
8151
- return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec, view, pos + 1);
8161
+ return descObj = new CustomNodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, spec);
8152
8162
  else if (node.isText)
8153
- return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM, view);
8163
+ return new TextViewDesc(parent, node, outerDeco, innerDeco, dom, nodeDOM);
8154
8164
  else
8155
- return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM, view, pos + 1);
8165
+ return new NodeViewDesc(parent, node, outerDeco, innerDeco, dom, contentDOM || null, nodeDOM);
8156
8166
  }
8157
- parseRule() {
8167
+ parseRule(addedNodes) {
8158
8168
  // Experimental kludge to allow opt-in re-parsing of nodes
8159
8169
  if (this.node.type.spec.reparseInView)
8160
8170
  return null;
@@ -8182,8 +8192,14 @@ class NodeViewDesc extends ViewDesc {
8182
8192
  break;
8183
8193
  }
8184
8194
  }
8185
- if (!rule.contentElement)
8186
- rule.getContent = () => Fragment.empty;
8195
+ if (!rule.contentElement) {
8196
+ let found = addedNodes &&
8197
+ addedNodes.find(n => isElt(n) && addedNodes.indexOf(n.parentNode) < 0 && this.dom.contains(n));
8198
+ if (found)
8199
+ rule.contentElement = found;
8200
+ else
8201
+ rule.getContent = () => Fragment.empty;
8202
+ }
8187
8203
  }
8188
8204
  return rule;
8189
8205
  }
@@ -8203,6 +8219,7 @@ class NodeViewDesc extends ViewDesc {
8203
8219
  let localComposition = composition && composition.pos > -1 ? composition : null;
8204
8220
  let compositionInChild = composition && composition.pos < 0;
8205
8221
  let updater = new ViewTreeUpdater(this, localComposition && localComposition.node, view);
8222
+ let addBuffers = this.node.inlineContent, atBufferPos = addBuffers && this.node.isBlock;
8206
8223
  iterDeco(this.node, this.innerDeco, (widget, i, insideNode) => {
8207
8224
  if (widget.spec.marks)
8208
8225
  updater.syncToMarks(widget.spec.marks, inline, view, i);
@@ -8214,6 +8231,8 @@ class NodeViewDesc extends ViewDesc {
8214
8231
  }, (child, outerDeco, innerDeco, i) => {
8215
8232
  // Make sure the wrapping mark descs match the node's marks.
8216
8233
  updater.syncToMarks(child.marks, inline, view, i);
8234
+ if (atBufferPos && child.isAtom && !child.isText)
8235
+ updater.addHackNode("IMG", updater.top);
8217
8236
  // Try several strategies for drawing this node
8218
8237
  let compIndex;
8219
8238
  if (updater.findNodeMatch(child, outerDeco, innerDeco, i)) ;
@@ -8227,6 +8246,8 @@ class NodeViewDesc extends ViewDesc {
8227
8246
  updater.addNode(child, outerDeco, innerDeco, view, off);
8228
8247
  }
8229
8248
  off += child.nodeSize;
8249
+ if (addBuffers)
8250
+ atBufferPos = child.isAtom && !child.isText;
8230
8251
  });
8231
8252
  // Drop all remaining descs after the current position.
8232
8253
  updater.syncToMarks([], inline, view, 0);
@@ -8305,7 +8326,7 @@ class NodeViewDesc extends ViewDesc {
8305
8326
  updateOuterDeco(outerDeco) {
8306
8327
  if (sameOuterDeco(outerDeco, this.outerDeco))
8307
8328
  return;
8308
- let needsWrap = this.nodeDOM.nodeType != 1;
8329
+ let needsWrap = !isElt(this.nodeDOM);
8309
8330
  let oldDOM = this.dom;
8310
8331
  this.dom = patchOuterDeco(this.dom, this.nodeDOM, computeOuterDeco(this.outerDeco, this.node, needsWrap), computeOuterDeco(outerDeco, this.node, needsWrap));
8311
8332
  if (this.dom != oldDOM) {
@@ -8316,7 +8337,7 @@ class NodeViewDesc extends ViewDesc {
8316
8337
  }
8317
8338
  // Mark this node as being the selected node.
8318
8339
  selectNode() {
8319
- if (this.nodeDOM.nodeType == 1) {
8340
+ if (isElt(this.nodeDOM)) {
8320
8341
  this.nodeDOM.classList.add("ProseMirror-selectednode");
8321
8342
  if (this.contentDOM || !this.node.type.spec.draggable)
8322
8343
  this.nodeDOM.draggable = true;
@@ -8324,7 +8345,7 @@ class NodeViewDesc extends ViewDesc {
8324
8345
  }
8325
8346
  // Remove selected node marking from this node.
8326
8347
  deselectNode() {
8327
- if (this.nodeDOM.nodeType == 1) {
8348
+ if (isElt(this.nodeDOM)) {
8328
8349
  this.nodeDOM.classList.remove("ProseMirror-selectednode");
8329
8350
  if (this.contentDOM || !this.node.type.spec.draggable)
8330
8351
  this.nodeDOM.removeAttribute("draggable");
@@ -8336,14 +8357,14 @@ class NodeViewDesc extends ViewDesc {
8336
8357
  // and used by the view class.
8337
8358
  function docViewDesc(doc, outerDeco, innerDeco, dom, view) {
8338
8359
  applyOuterDeco(dom, outerDeco, doc);
8339
- let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom, view, 0);
8360
+ let docView = new NodeViewDesc(undefined, doc, outerDeco, innerDeco, dom, dom, dom);
8340
8361
  if (docView.contentDOM)
8341
8362
  docView.updateChildren(view, 0);
8342
8363
  return docView;
8343
8364
  }
8344
8365
  class TextViewDesc extends NodeViewDesc {
8345
- constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM, view) {
8346
- super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM, view, 0);
8366
+ constructor(parent, node, outerDeco, innerDeco, dom, nodeDOM) {
8367
+ super(parent, node, outerDeco, innerDeco, dom, null, nodeDOM);
8347
8368
  }
8348
8369
  parseRule() {
8349
8370
  let skip = this.nodeDOM.parentNode;
@@ -8383,9 +8404,9 @@ class TextViewDesc extends NodeViewDesc {
8383
8404
  ignoreMutation(mutation) {
8384
8405
  return mutation.type != "characterData" && mutation.type != "selection";
8385
8406
  }
8386
- slice(from, to, view) {
8407
+ slice(from, to, _view) {
8387
8408
  let node = this.node.cut(from, to), dom = document.createTextNode(node.text);
8388
- return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom, view);
8409
+ return new TextViewDesc(this.parent, node, this.outerDeco, this.innerDeco, dom, dom);
8389
8410
  }
8390
8411
  markDirty(from, to) {
8391
8412
  super.markDirty(from, to);
@@ -8395,9 +8416,9 @@ class TextViewDesc extends NodeViewDesc {
8395
8416
  get domAtom() { return false; }
8396
8417
  isText(text) { return this.node.text == text; }
8397
8418
  }
8398
- // A dummy desc used to tag trailing BR or IMG nodes created to work
8419
+ // A dummy desc used to tag extra BR or IMG nodes created to work
8399
8420
  // around contentEditable terribleness.
8400
- class TrailingHackViewDesc extends ViewDesc {
8421
+ class BufferHackViewDesc extends ViewDesc {
8401
8422
  parseRule() { return { ignore: true }; }
8402
8423
  matchesHack(nodeName) { return this.dirty == NOT_DIRTY && this.dom.nodeName == nodeName; }
8403
8424
  get domAtom() { return true; }
@@ -8407,8 +8428,8 @@ class TrailingHackViewDesc extends ViewDesc {
8407
8428
  // extra checks only have to be made for nodes that are actually
8408
8429
  // customized.
8409
8430
  class CustomNodeViewDesc extends NodeViewDesc {
8410
- constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec, view, pos) {
8411
- super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, view, pos);
8431
+ constructor(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM, spec) {
8432
+ super(parent, node, outerDeco, innerDeco, dom, contentDOM, nodeDOM);
8412
8433
  this.spec = spec;
8413
8434
  }
8414
8435
  // A custom `update` method gets to decide whether the update goes
@@ -8570,7 +8591,7 @@ function patchAttributes(dom, prev, cur) {
8570
8591
  }
8571
8592
  }
8572
8593
  function applyOuterDeco(dom, deco, node) {
8573
- return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, dom.nodeType != 1));
8594
+ return patchOuterDeco(dom, dom, noDeco, computeOuterDeco(deco, node, !isElt(dom)));
8574
8595
  }
8575
8596
  function sameOuterDeco(a, b) {
8576
8597
  if (a.length != b.length)
@@ -8645,6 +8666,19 @@ class ViewTreeUpdater {
8645
8666
  break;
8646
8667
  }
8647
8668
  }
8669
+ // When nothing matches, try to update the mark view at this position
8670
+ // in place, so a custom mark view can adapt to a changed mark without
8671
+ // re-creating its DOM.
8672
+ if (found < 0 && this.index < this.top.children.length) {
8673
+ let cur = this.top.children[this.index];
8674
+ if (cur instanceof MarkViewDesc && cur.dirty != NODE_DIRTY &&
8675
+ cur.mark.type == marks[depth].type && cur.spec.update &&
8676
+ !this.isLocked(cur.dom) && cur.spec.update(marks[depth])) {
8677
+ cur.mark = marks[depth];
8678
+ found = this.index;
8679
+ this.changed = true;
8680
+ }
8681
+ }
8648
8682
  if (found > -1) {
8649
8683
  if (found > this.index) {
8650
8684
  this.changed = true;
@@ -8820,7 +8854,7 @@ class ViewTreeUpdater {
8820
8854
  }
8821
8855
  if (nodeName == "BR")
8822
8856
  dom.className = "ProseMirror-trailingBreak";
8823
- let hack = new TrailingHackViewDesc(this.top, [], dom, null);
8857
+ let hack = new BufferHackViewDesc(this.top, [], dom, null);
8824
8858
  if (parent != this.top)
8825
8859
  parent.children.push(hack);
8826
8860
  else
@@ -8829,7 +8863,7 @@ class ViewTreeUpdater {
8829
8863
  }
8830
8864
  }
8831
8865
  isLocked(node) {
8832
- return this.lock && (node == this.lock || node.nodeType == 1 && node.contains(this.lock.parentNode));
8866
+ return this.lock && (node == this.lock || isElt(node) && node.contains(this.lock.parentNode));
8833
8867
  }
8834
8868
  }
8835
8869
  // Iterate from the end of the fragment and array of descs to find
@@ -9031,12 +9065,27 @@ function selectionFromDOM(view, origin = null) {
9031
9065
  anchor = head;
9032
9066
  while (nearestDesc && !nearestDesc.node)
9033
9067
  nearestDesc = nearestDesc.parent;
9034
- let nearestDescNode = nearestDesc.node;
9035
- if (nearestDesc && nearestDescNode.isAtom && NodeSelection.isSelectable(nearestDescNode) && nearestDesc.parent
9036
- && !(nearestDescNode.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {
9068
+ if (nearestDesc && nearestDesc.node.isAtom && NodeSelection.isSelectable(nearestDesc.node) &&
9069
+ nearestDesc.parent &&
9070
+ !(nearestDesc.node.isInline && isOnEdge(domSel.focusNode, domSel.focusOffset, nearestDesc.dom))) {
9037
9071
  let pos = nearestDesc.posBefore;
9038
9072
  selection = new NodeSelection(head == pos ? $head : doc.resolve(pos));
9039
9073
  }
9074
+ else if (gecko && origin == "key" && head > view.state.selection.to &&
9075
+ isElt(domSel.focusNode) && domSel.focusOffset == domSel.focusNode.childNodes.length &&
9076
+ nearestDesc && nearestDesc.posAtStart > view.state.selection.to) {
9077
+ // Firefox will jump across scrollable wrapper nodes on keyboard
9078
+ // cursor motion (#1594). This tries to detect this situation
9079
+ // and work around it.
9080
+ for (let scan = domSel.focusNode;; scan = scan.parentNode) {
9081
+ if (getComputedStyle(scan).overflow != "visible") {
9082
+ selection = Selection.findFrom(doc.resolve(nearestDesc.posAtStart), 1);
9083
+ break;
9084
+ }
9085
+ if (scan == nearestDesc.dom || scan.nextSibling || !scan.parentNode || !isElt(scan.parentNode))
9086
+ break;
9087
+ }
9088
+ }
9040
9089
  }
9041
9090
  else {
9042
9091
  if (domSel instanceof view.dom.ownerDocument.defaultView.Selection && domSel.rangeCount > 1) {
@@ -9073,14 +9122,14 @@ function selectionToDOM(view, force = false) {
9073
9122
  syncNodeSelection(view, sel);
9074
9123
  if (!editorOwnsSelection(view))
9075
9124
  return;
9076
- // The delayed drag selection causes issues with Cell Selections
9077
- // in Safari. And the drag selection delay is to workarond issues
9078
- // which only present in Chrome.
9079
- if (!force && view.input.mouseDown && view.input.mouseDown.allowDefault && chrome) {
9125
+ // Need to delay selection normalization during a native selection
9126
+ // drag on Chrome, or it will cause further dragging to glitch.
9127
+ let mouseDown = view.input.mouseDown;
9128
+ if (!force && chrome && mouseDown) {
9080
9129
  let domSel = view.domSelectionRange(), curSel = view.domObserver.currentSelection;
9081
9130
  if (domSel.anchorNode && curSel.anchorNode &&
9082
- isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset)) {
9083
- view.input.mouseDown.delayedSelectionSync = true;
9131
+ isEquivalentPosition(domSel.anchorNode, domSel.anchorOffset, curSel.anchorNode, curSel.anchorOffset) &&
9132
+ mouseDown.delaySelUpdate()) {
9084
9133
  view.domObserver.setCurSelection();
9085
9134
  return;
9086
9135
  }
@@ -9222,8 +9271,7 @@ function hasSelection(view) {
9222
9271
  // Firefox will raise 'permission denied' errors when accessing
9223
9272
  // properties of `sel.anchorNode` when it's in a generated CSS
9224
9273
  // element.
9225
- return view.dom.contains(sel.anchorNode.nodeType == 3 ? sel.anchorNode.parentNode : sel.anchorNode) &&
9226
- (view.editable || view.dom.contains(sel.focusNode.nodeType == 3 ? sel.focusNode.parentNode : sel.focusNode));
9274
+ return contains(view.dom, sel.anchorNode) && (view.editable || contains(view.dom, sel.focusNode));
9227
9275
  }
9228
9276
  catch (_) {
9229
9277
  return false;
@@ -9274,15 +9322,14 @@ function selectHorizontally(view, dir, mods) {
9274
9322
  if (NodeSelection.isSelectable(node)) {
9275
9323
  return apply(view, new NodeSelection(dir < 0 ? view.state.doc.resolve($head.pos - node.nodeSize) : $head));
9276
9324
  }
9277
- else if (webkit) {
9325
+ else {
9278
9326
  // Chrome and Safari will introduce extra pointless cursor
9279
- // positions around inline uneditable nodes, so we have to
9280
- // take over and move the cursor past them (#937)
9327
+ // positions around inline uneditable nodes (#937), and
9328
+ // Firefox will sometimes just plain refuse to move across
9329
+ // them (#1592), so in this situation we move the cursor
9330
+ // ourselves.
9281
9331
  return apply(view, new TextSelection(view.state.doc.resolve(dir < 0 ? nodePos : nodePos + node.nodeSize)));
9282
9332
  }
9283
- else {
9284
- return false;
9285
- }
9286
9333
  }
9287
9334
  }
9288
9335
  else if (sel instanceof NodeSelection && sel.node.isInline) {
@@ -9295,12 +9342,10 @@ function selectHorizontally(view, dir, mods) {
9295
9342
  return false;
9296
9343
  }
9297
9344
  }
9298
- function nodeLen(node) {
9299
- return node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length;
9300
- }
9301
9345
  function isIgnorable(dom, dir) {
9302
9346
  let desc = dom.pmViewDesc;
9303
- return desc && desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != "BR");
9347
+ return desc ? desc.size == 0 && (dir < 0 || dom.nextSibling || dom.nodeName != "BR")
9348
+ : isElt(dom) && dom.contentEditable == "false";
9304
9349
  }
9305
9350
  function skipIgnoredNodes(view, dir) {
9306
9351
  return dir < 0 ? skipIgnoredNodesBefore(view) : skipIgnoredNodesAfter(view);
@@ -9316,25 +9361,23 @@ function skipIgnoredNodesBefore(view) {
9316
9361
  // Gecko will do odd things when the selection is directly in front
9317
9362
  // of a non-editable node, so in that case, move it into the next
9318
9363
  // node if possible. Issue prosemirror/prosemirror#832.
9319
- if (gecko && node.nodeType == 1 && offset < nodeLen(node) && isIgnorable(node.childNodes[offset], -1))
9364
+ if (gecko && isElt(node) && offset < nodeSize(node) && isIgnorable(node.childNodes[offset], -1))
9320
9365
  force = true;
9321
9366
  for (;;) {
9322
9367
  if (offset > 0) {
9323
- if (node.nodeType != 1) {
9368
+ if (!isElt(node))
9324
9369
  break;
9370
+ let before = node.childNodes[offset - 1];
9371
+ if (isIgnorable(before, -1)) {
9372
+ moveNode = node;
9373
+ moveOffset = --offset;
9374
+ }
9375
+ else if (isText(before)) {
9376
+ node = before;
9377
+ offset = node.nodeValue.length;
9325
9378
  }
9326
9379
  else {
9327
- let before = node.childNodes[offset - 1];
9328
- if (isIgnorable(before, -1)) {
9329
- moveNode = node;
9330
- moveOffset = --offset;
9331
- }
9332
- else if (before.nodeType == 3) {
9333
- node = before;
9334
- offset = node.nodeValue.length;
9335
- }
9336
- else
9337
- break;
9380
+ break;
9338
9381
  }
9339
9382
  }
9340
9383
  else if (isBlockNode(node)) {
@@ -9355,7 +9398,7 @@ function skipIgnoredNodesBefore(view) {
9355
9398
  }
9356
9399
  else {
9357
9400
  node = prev;
9358
- offset = nodeLen(node);
9401
+ offset = nodeSize(node);
9359
9402
  }
9360
9403
  }
9361
9404
  }
@@ -9371,19 +9414,20 @@ function skipIgnoredNodesAfter(view) {
9371
9414
  let node = sel.focusNode, offset = sel.focusOffset;
9372
9415
  if (!node)
9373
9416
  return;
9374
- let len = nodeLen(node);
9417
+ let len = nodeSize(node);
9375
9418
  let moveNode, moveOffset;
9376
9419
  for (;;) {
9377
9420
  if (offset < len) {
9378
- if (node.nodeType != 1)
9421
+ if (!isElt(node))
9379
9422
  break;
9380
9423
  let after = node.childNodes[offset];
9381
9424
  if (isIgnorable(after, 1)) {
9382
9425
  moveNode = node;
9383
9426
  moveOffset = ++offset;
9384
9427
  }
9385
- else
9428
+ else {
9386
9429
  break;
9430
+ }
9387
9431
  }
9388
9432
  else if (isBlockNode(node)) {
9389
9433
  break;
@@ -9404,7 +9448,7 @@ function skipIgnoredNodesAfter(view) {
9404
9448
  else {
9405
9449
  node = next;
9406
9450
  offset = 0;
9407
- len = nodeLen(node);
9451
+ len = nodeSize(node);
9408
9452
  }
9409
9453
  }
9410
9454
  }
@@ -9422,9 +9466,9 @@ function textNodeAfter(node, offset) {
9422
9466
  }
9423
9467
  while (node && offset < node.childNodes.length) {
9424
9468
  let next = node.childNodes[offset];
9425
- if (next.nodeType == 3)
9469
+ if (isText(next))
9426
9470
  return next;
9427
- if (next.nodeType == 1 && next.contentEditable == "false")
9471
+ if (isElt(next) && next.contentEditable == "false")
9428
9472
  break;
9429
9473
  node = next;
9430
9474
  offset = 0;
@@ -9437,16 +9481,16 @@ function textNodeBefore(node, offset) {
9437
9481
  }
9438
9482
  while (node && offset) {
9439
9483
  let next = node.childNodes[offset - 1];
9440
- if (next.nodeType == 3)
9484
+ if (isText(next))
9441
9485
  return next;
9442
- if (next.nodeType == 1 && next.contentEditable == "false")
9486
+ if (isElt(next) && next.contentEditable == "false")
9443
9487
  break;
9444
9488
  node = next;
9445
9489
  offset = node.childNodes.length;
9446
9490
  }
9447
9491
  }
9448
9492
  function setSelFocus(view, node, offset) {
9449
- if (node.nodeType != 3) {
9493
+ if (!isText(node)) {
9450
9494
  let before, after;
9451
9495
  if (after = textNodeAfter(node, offset)) {
9452
9496
  node = after;
@@ -9556,8 +9600,8 @@ function safariDownArrowBug(view) {
9556
9600
  if (!safari || view.state.selection.$head.parentOffset > 0)
9557
9601
  return false;
9558
9602
  let { focusNode, focusOffset } = view.domSelectionRange();
9559
- if (focusNode && focusNode.nodeType == 1 && focusOffset == 0 &&
9560
- focusNode.firstChild && focusNode.firstChild.contentEditable == "false") {
9603
+ if (focusNode && isElt(focusNode) && focusOffset == 0 &&
9604
+ focusNode.firstChild && isElt(focusNode.firstChild) && focusNode.firstChild.contentEditable == "false") {
9561
9605
  let child = focusNode.firstChild;
9562
9606
  switchEditable(view, child, "true");
9563
9607
  setTimeout(() => switchEditable(view, child, "false"), 20);
@@ -9628,7 +9672,7 @@ function serializeForClipboard(view, slice) {
9628
9672
  let doc = detachedDoc(), wrap = doc.createElement("div");
9629
9673
  wrap.appendChild(serializer.serializeFragment(content, { document: doc }));
9630
9674
  let firstChild = wrap.firstChild, needsWrap, wrappers = 0;
9631
- while (firstChild && firstChild.nodeType == 1 && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
9675
+ while (firstChild && isElt(firstChild) && (needsWrap = wrapMap[firstChild.nodeName.toLowerCase()])) {
9632
9676
  for (let i = needsWrap.length - 1; i >= 0; i--) {
9633
9677
  let wrapper = doc.createElement(needsWrap[i]);
9634
9678
  while (wrap.firstChild)
@@ -9638,7 +9682,7 @@ function serializeForClipboard(view, slice) {
9638
9682
  }
9639
9683
  firstChild = wrap.firstChild;
9640
9684
  }
9641
- if (firstChild && firstChild.nodeType == 1)
9685
+ if (firstChild && isElt(firstChild))
9642
9686
  firstChild.setAttribute("data-pm-slice", `${openStart} ${openEnd}${wrappers ? ` -${wrappers}` : ""} ${JSON.stringify(context)}`);
9643
9687
  let text = view.someProp("clipboardTextSerializer", f => f(slice, view)) ||
9644
9688
  slice.content.textBetween(0, slice.content.size, "\n\n");
@@ -9684,7 +9728,7 @@ function parseFromClipboard(view, text, html, plainText, $context) {
9684
9728
  if (sliceData && sliceData[3])
9685
9729
  for (let i = +sliceData[3]; i > 0; i--) {
9686
9730
  let child = dom.firstChild;
9687
- while (child && child.nodeType != 1)
9731
+ while (child && !isElt(child))
9688
9732
  child = child.nextSibling;
9689
9733
  if (!child)
9690
9734
  break;
@@ -9813,9 +9857,8 @@ const wrapMap = {
9813
9857
  td: ["table", "tbody", "tr"],
9814
9858
  th: ["table", "tbody", "tr"]
9815
9859
  };
9816
- let _detachedDoc = null;
9817
9860
  function detachedDoc() {
9818
- return _detachedDoc || (_detachedDoc = document.implementation.createHTMLDocument("title"));
9861
+ return document.implementation.createHTMLDocument("title");
9819
9862
  }
9820
9863
  let _policy = null;
9821
9864
  function maybeWrapTrusted(html) {
@@ -9825,15 +9868,21 @@ function maybeWrapTrusted(html) {
9825
9868
  // With the require-trusted-types-for CSP, Chrome will block
9826
9869
  // innerHTML, even on a detached document. This wraps the string in
9827
9870
  // a way that makes the browser allow us to use its parser again.
9828
- if (!_policy)
9829
- _policy = trustedTypes.defaultPolicy || trustedTypes.createPolicy("ProseMirrorClipboard", { createHTML: (s) => s });
9871
+ if (!_policy) {
9872
+ if (_policy = trustedTypes.defaultPolicy)
9873
+ try {
9874
+ return _policy.createHTML(html);
9875
+ }
9876
+ catch (_a) { }
9877
+ _policy = trustedTypes.createPolicy("ProseMirrorClipboard", { createHTML: (s) => s });
9878
+ }
9830
9879
  return _policy.createHTML(html);
9831
9880
  }
9832
9881
  function readHTML(html) {
9833
9882
  let metas = /^(\s*<meta [^>]*>)*/.exec(html);
9834
9883
  if (metas)
9835
9884
  html = html.slice(metas[0].length);
9836
- let elt = detachedDoc().createElement("div");
9885
+ let doc = detachedDoc(), elt = doc.body;
9837
9886
  let firstTag = /<([a-z][^>\s]+)/i.exec(html), wrap;
9838
9887
  if (wrap = firstTag && wrapMap[firstTag[1].toLowerCase()])
9839
9888
  html = wrap.map(n => "<" + n + ">").join("") + html + wrap.map(n => "</" + n + ">").reverse().join("");
@@ -9841,6 +9890,18 @@ function readHTML(html) {
9841
9890
  if (wrap)
9842
9891
  for (let i = 0; i < wrap.length; i++)
9843
9892
  elt = elt.querySelector(wrap[i]) || elt;
9893
+ // Inline styles defined in the pasted content, so that parse rules pick them up
9894
+ for (let i = 0; i < doc.styleSheets.length; i++) {
9895
+ let style = doc.styleSheets[i];
9896
+ for (let j = 0; j < style.rules.length; j++) {
9897
+ let rule = style.rules[j];
9898
+ if (rule instanceof CSSStyleRule) {
9899
+ let matches = elt.querySelectorAll(rule.selectorText);
9900
+ for (let k = 0; k < matches.length; k++)
9901
+ matches[k].style.cssText += rule.style.cssText;
9902
+ }
9903
+ }
9904
+ }
9844
9905
  return elt;
9845
9906
  }
9846
9907
  // Webkit browsers do some hard-to-predict replacement of regular
@@ -9871,7 +9932,12 @@ function addContext(slice, context) {
9871
9932
  let type = schema.nodes[array[i]];
9872
9933
  if (!type || type.hasRequiredAttrs())
9873
9934
  break;
9874
- content = Fragment.from(type.create(array[i + 1], content));
9935
+ try {
9936
+ content = Fragment.from(type.create(array[i + 1], content));
9937
+ }
9938
+ catch (e) {
9939
+ break;
9940
+ }
9875
9941
  openStart++;
9876
9942
  openEnd++;
9877
9943
  }
@@ -9932,6 +9998,8 @@ function setSelectionOrigin(view, origin) {
9932
9998
  view.input.lastSelectionTime = Date.now();
9933
9999
  }
9934
10000
  function destroyInput(view) {
10001
+ if (view.input.mouseDown)
10002
+ view.input.mouseDown.done();
9935
10003
  view.domObserver.stop();
9936
10004
  for (let type in view.input.eventHandlers)
9937
10005
  view.dom.removeEventListener(type, view.input.eventHandlers[type]);
@@ -9970,7 +10038,7 @@ function dispatchEvent(view, event) {
9970
10038
  editHandlers.keydown = (view, _event) => {
9971
10039
  let event = _event;
9972
10040
  view.input.shiftKey = event.keyCode == 16 || event.shiftKey;
9973
- if (inOrNearComposition(view, event))
10041
+ if (inOrNearComposition(view))
9974
10042
  return;
9975
10043
  view.input.lastKeyCode = event.keyCode;
9976
10044
  view.input.lastKeyCodeTime = Date.now();
@@ -10008,7 +10076,7 @@ editHandlers.keyup = (view, event) => {
10008
10076
  };
10009
10077
  editHandlers.keypress = (view, _event) => {
10010
10078
  let event = _event;
10011
- if (inOrNearComposition(view, event) || !event.charCode ||
10079
+ if (inOrNearComposition(view) || !event.charCode ||
10012
10080
  event.ctrlKey && !event.altKey || mac$4 && event.metaKey)
10013
10081
  return;
10014
10082
  if (view.someProp("handleKeyPress", f => f(view, event))) {
@@ -10102,26 +10170,28 @@ function handleTripleClick$1(view, pos, inside, event) {
10102
10170
  function defaultTripleClick(view, inside, event) {
10103
10171
  if (event.button != 0)
10104
10172
  return false;
10105
- let doc = view.state.doc;
10106
- if (inside == -1) {
10107
- if (doc.inlineContent) {
10108
- updateSelection(view, TextSelection.create(doc, 0, doc.content.size));
10109
- return true;
10110
- }
10173
+ let selection = selectionForTripleClick(view, inside, true), doc = view.state.doc;
10174
+ if (!selection)
10111
10175
  return false;
10112
- }
10176
+ updateSelection(view, selection);
10177
+ if (selection instanceof TextSelection && doc.eq(view.state.doc))
10178
+ view.input.mouseDown = new TripleClickDrag(view, selection);
10179
+ return true;
10180
+ }
10181
+ function selectionForTripleClick(view, inside, selectNodes) {
10182
+ let doc = view.state.doc;
10183
+ if (inside == -1)
10184
+ return doc.inlineContent ? TextSelection.create(doc, 0, doc.content.size) : null;
10113
10185
  let $pos = doc.resolve(inside);
10114
10186
  for (let i = $pos.depth + 1; i > 0; i--) {
10115
10187
  let node = i > $pos.depth ? $pos.nodeAfter : $pos.node(i);
10116
10188
  let nodePos = $pos.before(i);
10117
10189
  if (node.inlineContent)
10118
- updateSelection(view, TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size));
10119
- else if (NodeSelection.isSelectable(node))
10120
- updateSelection(view, NodeSelection.create(doc, nodePos));
10121
- else
10122
- continue;
10123
- return true;
10190
+ return TextSelection.create(doc, nodePos + 1, nodePos + 1 + node.content.size);
10191
+ else if (selectNodes && NodeSelection.isSelectable(node))
10192
+ return NodeSelection.create(doc, nodePos);
10124
10193
  }
10194
+ return null;
10125
10195
  }
10126
10196
  function forceDOMFlush(view) {
10127
10197
  return endComposition(view);
@@ -10140,13 +10210,13 @@ handlers.mousedown = (view, _event) => {
10140
10210
  type = "tripleClick";
10141
10211
  }
10142
10212
  view.input.lastClick = { time: now, x: event.clientX, y: event.clientY, type, button: event.button };
10213
+ if (view.input.mouseDown)
10214
+ view.input.mouseDown.done();
10143
10215
  let pos = view.posAtCoords(eventCoords(event));
10144
10216
  if (!pos)
10145
10217
  return;
10146
10218
  if (type == "singleClick") {
10147
- if (view.input.mouseDown)
10148
- view.input.mouseDown.done();
10149
- view.input.mouseDown = new MouseDown(view, pos, event, !!flushed);
10219
+ view.input.mouseDown = new LeftMouseDown(view, pos, event, !!flushed);
10150
10220
  }
10151
10221
  else if ((type == "doubleClick" ? handleDoubleClick : handleTripleClick$1)(view, pos.pos, pos.inside, event)) {
10152
10222
  event.preventDefault();
@@ -10156,13 +10226,34 @@ handlers.mousedown = (view, _event) => {
10156
10226
  }
10157
10227
  };
10158
10228
  class MouseDown {
10159
- constructor(view, pos, event, flushed) {
10229
+ constructor(view) {
10160
10230
  this.view = view;
10231
+ this.mightDrag = null;
10232
+ view.root.addEventListener("mouseup", this.up = this.up.bind(this));
10233
+ view.root.addEventListener("mousemove", this.move = this.move.bind(this));
10234
+ }
10235
+ up(event) {
10236
+ this.done();
10237
+ }
10238
+ move(event) {
10239
+ if (event.buttons == 0)
10240
+ this.done();
10241
+ }
10242
+ done() {
10243
+ this.view.root.removeEventListener("mouseup", this.up);
10244
+ this.view.root.removeEventListener("mousemove", this.move);
10245
+ if (this.view.input.mouseDown == this)
10246
+ this.view.input.mouseDown = null;
10247
+ }
10248
+ delaySelUpdate() { return false; }
10249
+ }
10250
+ class LeftMouseDown extends MouseDown {
10251
+ constructor(view, pos, event, flushed) {
10252
+ super(view);
10161
10253
  this.pos = pos;
10162
10254
  this.event = event;
10163
10255
  this.flushed = flushed;
10164
10256
  this.delayedSelectionSync = false;
10165
- this.mightDrag = null;
10166
10257
  this.startDoc = view.state.doc;
10167
10258
  this.selectNode = !!event[selectNodeModifier];
10168
10259
  this.allowDefault = event.shiftKey;
@@ -10178,7 +10269,7 @@ class MouseDown {
10178
10269
  }
10179
10270
  const target = flushed ? null : event.target;
10180
10271
  const targetDesc = target ? view.docView.nearestDesc(target, true) : null;
10181
- this.target = targetDesc && targetDesc.nodeDOM.nodeType == 1 ? targetDesc.nodeDOM : null;
10272
+ this.target = targetDesc && isElt(targetDesc.nodeDOM) ? targetDesc.nodeDOM : null;
10182
10273
  let { selection } = view.state;
10183
10274
  if (event.button == 0 &&
10184
10275
  (targetNode.type.spec.draggable && targetNode.type.spec.selectable !== false ||
@@ -10200,13 +10291,10 @@ class MouseDown {
10200
10291
  }, 20);
10201
10292
  this.view.domObserver.start();
10202
10293
  }
10203
- view.root.addEventListener("mouseup", this.up = this.up.bind(this));
10204
- view.root.addEventListener("mousemove", this.move = this.move.bind(this));
10205
10294
  setSelectionOrigin(view, "pointer");
10206
10295
  }
10207
10296
  done() {
10208
- this.view.root.removeEventListener("mouseup", this.up);
10209
- this.view.root.removeEventListener("mousemove", this.move);
10297
+ super.done();
10210
10298
  if (this.mightDrag && this.target) {
10211
10299
  this.view.domObserver.stop();
10212
10300
  if (this.mightDrag.addAttr)
@@ -10216,8 +10304,10 @@ class MouseDown {
10216
10304
  this.view.domObserver.start();
10217
10305
  }
10218
10306
  if (this.delayedSelectionSync)
10219
- setTimeout(() => selectionToDOM(this.view));
10220
- this.view.input.mouseDown = null;
10307
+ setTimeout(() => {
10308
+ if (!this.view.isDestroyed)
10309
+ selectionToDOM(this.view);
10310
+ });
10221
10311
  }
10222
10312
  up(event) {
10223
10313
  this.done();
@@ -10256,14 +10346,41 @@ class MouseDown {
10256
10346
  move(event) {
10257
10347
  this.updateAllowDefault(event);
10258
10348
  setSelectionOrigin(this.view, "pointer");
10259
- if (event.buttons == 0)
10260
- this.done();
10349
+ super.move(event);
10261
10350
  }
10262
10351
  updateAllowDefault(event) {
10263
10352
  if (!this.allowDefault && (Math.abs(this.event.x - event.clientX) > 4 ||
10264
10353
  Math.abs(this.event.y - event.clientY) > 4))
10265
10354
  this.allowDefault = true;
10266
10355
  }
10356
+ delaySelUpdate() {
10357
+ if (!this.allowDefault)
10358
+ return false;
10359
+ this.delayedSelectionSync = true;
10360
+ return true;
10361
+ }
10362
+ }
10363
+ class TripleClickDrag extends MouseDown {
10364
+ constructor(view, startSelection) {
10365
+ super(view);
10366
+ this.startSelection = startSelection;
10367
+ this.startDoc = view.state.doc;
10368
+ }
10369
+ move(event) {
10370
+ if (event.buttons == 0 || this.view.isDestroyed || !this.view.state.doc.eq(this.startDoc)) {
10371
+ this.done();
10372
+ return;
10373
+ }
10374
+ event.preventDefault();
10375
+ setSelectionOrigin(this.view, "pointer");
10376
+ let pos = this.view.posAtCoords(eventCoords(event));
10377
+ let target = pos && selectionForTripleClick(this.view, pos.inside, false);
10378
+ if (!target)
10379
+ return;
10380
+ let { doc } = this.view.state, start = this.startSelection;
10381
+ let [anchor, head] = target.from < start.from ? [start.to, target.from] : [start.from, target.to];
10382
+ updateSelection(this.view, TextSelection.create(doc, anchor, head));
10383
+ }
10267
10384
  }
10268
10385
  handlers.touchstart = view => {
10269
10386
  view.input.lastTouch = Date.now();
@@ -10288,7 +10405,7 @@ function inOrNearComposition(view, event) {
10288
10405
  // This guards against the case where compositionend is triggered without the keyboard
10289
10406
  // (e.g. character confirmation may be done with the mouse), and keydown is triggered
10290
10407
  // afterwards- we wouldn't want to ignore the keydown event in this case.
10291
- if (safari && Math.abs(event.timeStamp - view.input.compositionEndedAt) < 500) {
10408
+ if (safari && Math.abs(Date.now() - view.input.compositionEndedAt) < 500) {
10292
10409
  view.input.compositionEndedAt = -2e8;
10293
10410
  return true;
10294
10411
  }
@@ -10300,7 +10417,7 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
10300
10417
  if (!view.composing) {
10301
10418
  view.domObserver.flush();
10302
10419
  let { state } = view, $pos = state.selection.$to;
10303
- if (state.selection instanceof TextSelection &&
10420
+ if (state.selection instanceof TextSelection && state.selection.empty &&
10304
10421
  (state.storedMarks ||
10305
10422
  (!$pos.textOffset && $pos.parentOffset && $pos.nodeBefore.marks.some(m => m.type.spec.inclusive === false)) ||
10306
10423
  chrome && windows$1 && selectionBeforeUneditable(view))) { // Issue #1500
@@ -10316,11 +10433,11 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
10316
10433
  // inside if necessary.
10317
10434
  if (gecko && state.selection.empty && $pos.parentOffset && !$pos.textOffset && $pos.nodeBefore.marks.length) {
10318
10435
  let sel = view.domSelectionRange();
10319
- for (let node = sel.focusNode, offset = sel.focusOffset; node && node.nodeType == 1 && offset != 0;) {
10436
+ for (let node = sel.focusNode, offset = sel.focusOffset; node && isElt(node) && offset != 0;) {
10320
10437
  let before = offset < 0 ? node.lastChild : node.childNodes[offset - 1];
10321
10438
  if (!before)
10322
10439
  break;
10323
- if (before.nodeType == 3) {
10440
+ if (isText(before)) {
10324
10441
  let sel = view.domSelection();
10325
10442
  if (sel)
10326
10443
  sel.collapse(before, before.nodeValue.length);
@@ -10339,15 +10456,15 @@ editHandlers.compositionstart = editHandlers.compositionupdate = view => {
10339
10456
  };
10340
10457
  function selectionBeforeUneditable(view) {
10341
10458
  let { focusNode, focusOffset } = view.domSelectionRange();
10342
- if (!focusNode || focusNode.nodeType != 1 || focusOffset >= focusNode.childNodes.length)
10459
+ if (!focusNode || !isElt(focusNode) || focusOffset >= focusNode.childNodes.length)
10343
10460
  return false;
10344
10461
  let next = focusNode.childNodes[focusOffset];
10345
- return next.nodeType == 1 && next.contentEditable == "false";
10462
+ return isElt(next) && next.contentEditable == "false";
10346
10463
  }
10347
10464
  editHandlers.compositionend = (view, event) => {
10348
10465
  if (view.composing) {
10349
10466
  view.input.composing = false;
10350
- view.input.compositionEndedAt = event.timeStamp;
10467
+ view.input.compositionEndedAt = Date.now();
10351
10468
  view.input.compositionPendingChanges = view.domObserver.pendingRecords().length ? view.input.compositionID : 0;
10352
10469
  view.input.compositionNode = null;
10353
10470
  if (view.input.badSafariComposition)
@@ -10366,7 +10483,7 @@ function scheduleComposeEnd(view, delay) {
10366
10483
  function clearComposition(view) {
10367
10484
  if (view.composing) {
10368
10485
  view.input.composing = false;
10369
- view.input.compositionEndedAt = timestampFromCustomEvent();
10486
+ view.input.compositionEndedAt = Date.now();
10370
10487
  }
10371
10488
  while (view.input.compositionNodes.length > 0)
10372
10489
  view.input.compositionNodes.pop().markParentsDirty();
@@ -10392,11 +10509,6 @@ function findCompositionNode(view) {
10392
10509
  }
10393
10510
  return textBefore || textAfter;
10394
10511
  }
10395
- function timestampFromCustomEvent() {
10396
- let event = document.createEvent("Event");
10397
- event.initEvent("event", true, true);
10398
- return event.timeStamp;
10399
- }
10400
10512
  /**
10401
10513
  @internal
10402
10514
  */
@@ -10549,7 +10661,7 @@ handlers.dragstart = (view, _event) => {
10549
10661
  else if (mouseDown && mouseDown.mightDrag) {
10550
10662
  node = NodeSelection.create(view.state.doc, mouseDown.mightDrag.pos);
10551
10663
  }
10552
- else if (event.target && event.target.nodeType == 1) {
10664
+ else if (event.target && isElt(event.target)) {
10553
10665
  let desc = view.docView.nearestDesc(event.target, true);
10554
10666
  if (desc && desc.node.type.spec.draggable && desc != view.docView)
10555
10667
  node = NodeSelection.create(view.state.doc, desc.posBefore);
@@ -10666,8 +10778,8 @@ handlers.beforeinput = (view, _event) => {
10666
10778
  // We should probably do more with beforeinput events, but support
10667
10779
  // is so spotty that I'm still waiting to see where they are going.
10668
10780
  // Very specific hack to deal with backspace sometimes failing on
10669
- // Chrome Android when after an uneditable node.
10670
- if (chrome && android && event.inputType == "deleteContentBackward") {
10781
+ // Chrome and Firefox Android when after an uneditable node.
10782
+ if (android && event.inputType == "deleteContentBackward") {
10671
10783
  view.domObserver.flushSoon();
10672
10784
  let { domChangeCount } = view.input;
10673
10785
  setTimeout(() => {
@@ -11520,7 +11632,7 @@ class DOMObserver {
11520
11632
  let desc = container && this.view.docView.nearestDesc(container);
11521
11633
  if (desc && desc.ignoreMutation({
11522
11634
  type: "selection",
11523
- target: container.nodeType == 3 ? container.parentNode : container
11635
+ target: isText(container) ? container.parentNode : container
11524
11636
  })) {
11525
11637
  this.setCurSelection();
11526
11638
  return true;
@@ -11553,13 +11665,16 @@ class DOMObserver {
11553
11665
  }
11554
11666
  }
11555
11667
  }
11556
- if (added.some(n => n.nodeName == "BR") && (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46)) {
11668
+ if (added.some(n => n.nodeName == "BR") &&
11669
+ (view.input.lastKeyCode == 8 || view.input.lastKeyCode == 46 ||
11670
+ chrome && (view.composing || view.input.compositionEndedAt > Date.now() - 50) &&
11671
+ mutations.some(m => m.type == "childList" && m.removedNodes.length))) {
11557
11672
  // Browsers sometimes insert a bogus break node if you
11558
11673
  // backspace out the last bit of text before an inline-flex node (#1552)
11559
11674
  for (let node of added)
11560
11675
  if (node.nodeName == "BR" && node.parentNode) {
11561
11676
  let after = node.nextSibling;
11562
- while (after && after.nodeType == 1) {
11677
+ while (after && isElt(after)) {
11563
11678
  if (after.contentEditable == "false") {
11564
11679
  node.parentNode.removeChild(node);
11565
11680
  break;
@@ -11632,7 +11747,7 @@ class DOMObserver {
11632
11747
  for (let i = 0; i < mut.addedNodes.length; i++) {
11633
11748
  let node = mut.addedNodes[i];
11634
11749
  added.push(node);
11635
- if (node.nodeType == 3)
11750
+ if (isText(node))
11636
11751
  this.lastChangedTextNode = node;
11637
11752
  }
11638
11753
  if (desc.contentDOM && desc.contentDOM != desc.dom && !desc.contentDOM.contains(mut.target))
@@ -11747,8 +11862,7 @@ function fixUpBadSafariComposition(view, addedNodes) {
11747
11862
  let parent = nextCell;
11748
11863
  for (;;) {
11749
11864
  let first = parent.firstChild;
11750
- if (!first || first.nodeType != 1 || first.contentEditable == "false" ||
11751
- /^(BR|IMG)$/.test(first.nodeName))
11865
+ if (!first || !isElt(first) || first.contentEditable == "false" || /^(BR|IMG)$/.test(first.nodeName))
11752
11866
  break;
11753
11867
  parent = first;
11754
11868
  }
@@ -11768,12 +11882,12 @@ function fixUpBadSafariComposition(view, addedNodes) {
11768
11882
  // that the DOM represents. If any changes came in in the meantime,
11769
11883
  // the modification is mapped over those before it is applied, in
11770
11884
  // readDOMChange.
11771
- function parseBetween(view, from_, to_) {
11885
+ function parseBetween(view, from_, to_, addedNodes) {
11772
11886
  let { node: parent, fromOffset, toOffset, from, to } = view.docView.parseRange(from_, to_);
11773
11887
  let domSel = view.domSelectionRange();
11774
11888
  let find;
11775
11889
  let anchor = domSel.anchorNode;
11776
- if (anchor && view.dom.contains(anchor.nodeType == 1 ? anchor : anchor.parentNode)) {
11890
+ if (anchor && contains(view.dom, anchor)) {
11777
11891
  find = [{ node: anchor, offset: domSel.anchorOffset }];
11778
11892
  if (!selectionCollapsed(domSel))
11779
11893
  find.push({ node: domSel.focusNode, offset: domSel.focusOffset });
@@ -11802,7 +11916,7 @@ function parseBetween(view, from_, to_) {
11802
11916
  to: toOffset,
11803
11917
  preserveWhitespace: $from.parent.type.whitespace == "pre" ? "full" : true,
11804
11918
  findPositions: find,
11805
- ruleFromNode,
11919
+ ruleFromNode: ruleFromNode(addedNodes),
11806
11920
  context: $from
11807
11921
  });
11808
11922
  if (find && find[0].pos != null) {
@@ -11813,10 +11927,10 @@ function parseBetween(view, from_, to_) {
11813
11927
  }
11814
11928
  return { doc, sel, from, to };
11815
11929
  }
11816
- function ruleFromNode(dom) {
11930
+ const ruleFromNode = (added) => (dom) => {
11817
11931
  let desc = dom.pmViewDesc;
11818
11932
  if (desc) {
11819
- return desc.parseRule();
11933
+ return desc.parseRule(added);
11820
11934
  }
11821
11935
  else if (dom.nodeName == "BR" && dom.parentNode) {
11822
11936
  // Safari replaces the list item or table cell with a BR
@@ -11835,7 +11949,7 @@ function ruleFromNode(dom) {
11835
11949
  return { ignore: true };
11836
11950
  }
11837
11951
  return null;
11838
- }
11952
+ };
11839
11953
  const isInline = /^(a|abbr|acronym|b|bd[io]|big|br|button|cite|code|data(list)?|del|dfn|em|i|img|ins|kbd|label|map|mark|meter|output|q|ruby|s|samp|small|span|strong|su[bp]|time|u|tt|var)$/i;
11840
11954
  function readDOMChange(view, from, to, typeOver, addedNodes) {
11841
11955
  let compositionID = view.input.compositionPendingChanges || (view.composing ? view.input.compositionID : 0);
@@ -11864,7 +11978,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
11864
11978
  from = $before.before(shared + 1);
11865
11979
  to = view.state.doc.resolve(to).after(shared + 1);
11866
11980
  let sel = view.state.selection;
11867
- let parse = parseBetween(view, from, to);
11981
+ let parse = parseBetween(view, from, to, addedNodes);
11868
11982
  let doc = view.state.doc, compare = doc.slice(parse.from, parse.to);
11869
11983
  let preferredPos, preferredSide;
11870
11984
  // Prefer anchoring to end when Backspace is pressed
@@ -11881,7 +11995,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
11881
11995
  if (change)
11882
11996
  view.input.domChangeCount++;
11883
11997
  if ((ios && view.input.lastIOSEnter > Date.now() - 225 || android) &&
11884
- addedNodes.some(n => n.nodeType == 1 && !isInline.test(n.nodeName)) &&
11998
+ addedNodes.some(n => isElt(n) && !isInline.test(n.nodeName)) &&
11885
11999
  (!change || change.endA >= change.endB) &&
11886
12000
  view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
11887
12001
  view.input.lastIOSEnter = 0;
@@ -11939,9 +12053,7 @@ function readDOMChange(view, from, to, typeOver, addedNodes) {
11939
12053
  // as being an iOS enter press), just dispatch an Enter key instead.
11940
12054
  if (((ios && view.input.lastIOSEnter > Date.now() - 225 &&
11941
12055
  (!inlineChange || addedNodes.some(n => n.nodeName == "DIV" || n.nodeName == "P"))) ||
11942
- (!inlineChange && $from.pos < parse.doc.content.size &&
11943
- (!$from.sameParent($to) || !$from.parent.inlineContent) &&
11944
- $from.pos < $to.pos && !/\S/.test(parse.doc.textBetween($from.pos, $to.pos, "", "")))) &&
12056
+ (!inlineChange && looksLikeEnter(parse.doc, $from.pos, $to.pos))) &&
11945
12057
  view.someProp("handleKeyDown", f => f(view, keyEvent(13, "Enter")))) {
11946
12058
  view.input.lastIOSEnter = 0;
11947
12059
  return;
@@ -12092,6 +12204,16 @@ function looksLikeBackspace(old, start, end, $newStart, $newEnd) {
12092
12204
  // The fragments after the join point must match
12093
12205
  return $newStart.parent.content.cut($newStart.parentOffset).eq($next.parent.content);
12094
12206
  }
12207
+ function looksLikeEnter(content, from, to) {
12208
+ let newTextlines = 0, newLeaves = 0;
12209
+ content.nodesBetween(from, to, (node, pos) => {
12210
+ if (node.isTextblock && pos >= from && pos < to)
12211
+ newTextlines++;
12212
+ else if (node.isText ? /\S/.test(node.text.slice(Math.max(0, from - pos), Math.min(node.nodeSize, to - pos))) : node.isLeaf)
12213
+ newLeaves++;
12214
+ });
12215
+ return newLeaves == 0 && newTextlines == 1;
12216
+ }
12095
12217
  function skipClosingAndOpening($pos, fromEnd, mayOpen) {
12096
12218
  let depth = $pos.depth, end = fromEnd ? $pos.end() : $pos.pos;
12097
12219
  while (depth > 0 && (fromEnd || $pos.indexAfter(depth) == $pos.node(depth).childCount)) {
@@ -12109,38 +12231,28 @@ function skipClosingAndOpening($pos, fromEnd, mayOpen) {
12109
12231
  return end;
12110
12232
  }
12111
12233
  function findDiff(a, b, pos, preferredPos, preferredSide) {
12112
- let start = a.findDiffStart(b, pos);
12234
+ let start = a.findDiffStart(b, pos), lenA = pos + a.size, lenB = pos + b.size;
12113
12235
  if (start == null)
12114
12236
  return null;
12115
- let { a: endA, b: endB } = a.findDiffEnd(b, pos + a.size, pos + b.size);
12237
+ let { a: endA, b: endB } = a.findDiffEnd(b, lenA, lenB);
12116
12238
  if (preferredSide == "end") {
12117
12239
  let adjust = Math.max(0, start - Math.min(endA, endB));
12118
12240
  preferredPos -= endA + adjust - start;
12119
12241
  }
12120
- if (endA < start && a.size < b.size) {
12242
+ if (endA < start && lenA < lenB) {
12121
12243
  let move = preferredPos <= start && preferredPos >= endA ? start - preferredPos : 0;
12122
12244
  start -= move;
12123
- if (start && start < b.size && isSurrogatePair(b.textBetween(start - 1, start + 1)))
12124
- start += move ? 1 : -1;
12125
12245
  endB = start + (endB - endA);
12126
12246
  endA = start;
12127
12247
  }
12128
12248
  else if (endB < start) {
12129
12249
  let move = preferredPos <= start && preferredPos >= endB ? start - preferredPos : 0;
12130
12250
  start -= move;
12131
- if (start && start < a.size && isSurrogatePair(a.textBetween(start - 1, start + 1)))
12132
- start += move ? 1 : -1;
12133
12251
  endA = start + (endA - endB);
12134
12252
  endB = start;
12135
12253
  }
12136
12254
  return { start, endA, endB };
12137
12255
  }
12138
- function isSurrogatePair(str) {
12139
- if (str.length != 2)
12140
- return false;
12141
- let a = str.charCodeAt(0), b = str.charCodeAt(1);
12142
- return a >= 0xDC00 && a <= 0xDFFF && b >= 0xD800 && b <= 0xDBFF;
12143
- }
12144
12256
  /**
12145
12257
  An editor view manages the DOM structure that represents an
12146
12258
  editable document. Its state and behavior are determined by its
@@ -12332,9 +12444,10 @@ class EditorView {
12332
12444
  // a DOM selection change and the "selectionchange" event for it
12333
12445
  // can cause a spurious DOM selection update, disrupting mouse
12334
12446
  // drag selection.
12447
+ let mouseDown = this.input.mouseDown;
12335
12448
  if (forceSelUpdate ||
12336
- !(this.input.mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&
12337
- anchorInRightPlace(this))) {
12449
+ !(mouseDown && this.domObserver.currentSelection.eq(this.domSelectionRange()) &&
12450
+ anchorInRightPlace(this) && mouseDown.delaySelUpdate())) {
12338
12451
  selectionToDOM(this, forceSelUpdate);
12339
12452
  }
12340
12453
  else {
@@ -12361,11 +12474,11 @@ class EditorView {
12361
12474
  */
12362
12475
  scrollToSelection() {
12363
12476
  let startDOM = this.domSelectionRange().focusNode;
12364
- if (!startDOM || !this.dom.contains(startDOM.nodeType == 1 ? startDOM : startDOM.parentNode)) ;
12477
+ if (!startDOM || !contains(this.dom, startDOM)) ;
12365
12478
  else if (this.someProp("handleScrollToSelection", f => f(this))) ;
12366
12479
  else if (this.state.selection instanceof NodeSelection) {
12367
12480
  let target = this.docView.domAfterPos(this.state.selection.from);
12368
- if (target.nodeType == 1)
12481
+ if (isElt(target))
12369
12482
  scrollRectIntoView(this, target.getBoundingClientRect(), startDOM);
12370
12483
  }
12371
12484
  else {
@@ -12630,7 +12743,7 @@ class EditorView {
12630
12743
  @internal
12631
12744
  */
12632
12745
  domSelectionRange() {
12633
- let sel = this.domSelection();
12746
+ let sel = this.dom.isConnected !== false && this.domSelection();
12634
12747
  if (!sel)
12635
12748
  return { focusNode: null, focusOffset: 0, anchorNode: null, anchorOffset: 0 };
12636
12749
  return safari && this.root.nodeType === 11 &&
@@ -13918,7 +14031,7 @@ const convertListsAndWrapRuns = (tr, state, targetType, startIndex, endIndex) =>
13918
14031
  const inRange = i >= startIndex && i <= endIndex;
13919
14032
  const isList = isListNode(child, state.schema);
13920
14033
  if (inRange && child.type === state.schema.nodes.paragraph) {
13921
- runStart = runStart !== null && runStart !== void 0 ? runStart : pos;
14034
+ runStart !== null && runStart !== void 0 ? runStart : (runStart = pos);
13922
14035
  runEnd = pos + child.nodeSize;
13923
14036
  }
13924
14037
  else if (runStart !== null && runEnd !== null) {
@@ -14025,17 +14138,13 @@ const toggleNodeType = (schema, type, attrs = {}, shouldWrap = false) => {
14025
14138
  }
14026
14139
  return true;
14027
14140
  }
14028
- else {
14029
- if (hasActiveWrap) {
14030
- return lift(state, dispatch);
14031
- }
14032
- if (shouldWrap) {
14033
- return wrapIn(nodeType, attrs)(state, dispatch);
14034
- }
14035
- else {
14036
- return setBlockType(nodeType, attrs)(state, dispatch);
14037
- }
14141
+ if (hasActiveWrap) {
14142
+ return lift(state, dispatch);
14143
+ }
14144
+ if (shouldWrap) {
14145
+ return wrapIn(nodeType, attrs)(state, dispatch);
14038
14146
  }
14147
+ return setBlockType(nodeType, attrs)(state, dispatch);
14039
14148
  }
14040
14149
  return false;
14041
14150
  };
@@ -14440,7 +14549,7 @@ function buildInlineImageDOMAttrs(attrs) {
14440
14549
  }
14441
14550
  function getStatusHTML(state, alt, language) {
14442
14551
  const key = state === 'failed' ? 'failed' : 'loading';
14443
- const text = translate.get(`editor-image-view.${key}`, language, {
14552
+ const text = translations.get(`editor-image-view.${key}`, language, {
14444
14553
  filename: alt || 'file',
14445
14554
  });
14446
14555
  return `<span>${text}</span>`;
@@ -14552,7 +14661,8 @@ function createImageParseDOM(inlineImages) {
14552
14661
  return rules;
14553
14662
  }
14554
14663
  function isEditorImageState(state) {
14555
- return state === 'loading' || state === 'failed' || state === 'success';
14664
+ const states = ['loading', 'failed', 'success'];
14665
+ return states.includes(state);
14556
14666
  }
14557
14667
  function getOrCreateImageElement(fileInfoId, node) {
14558
14668
  let img = imageCache.get(fileInfoId);
@@ -14570,7 +14680,7 @@ function createStatusSpanForState(state, node, language) {
14570
14680
  return createStatusSpan(statusKey, node, language);
14571
14681
  }
14572
14682
  function createStatusSpan(key, node, language) {
14573
- const text = translate.get(`editor-image-view.${key}`, language, {
14683
+ const text = translations.get(`editor-image-view.${key}`, language, {
14574
14684
  filename: node.attrs.alt || 'file',
14575
14685
  });
14576
14686
  const span = document.createElement('span');
@@ -15177,54 +15287,6 @@ var ucmicro = /*#__PURE__*/Object.freeze({
15177
15287
  Z: Z
15178
15288
  });
15179
15289
 
15180
- // Generated using scripts/write-encode-map.ts
15181
- function restoreDiff(arr) {
15182
- for (let i = 1; i < arr.length; i++) {
15183
- arr[i][0] += arr[i - 1][0] + 1;
15184
- }
15185
- return arr;
15186
- }
15187
- // prettier-ignore
15188
- new Map(/* #__PURE__ */ restoreDiff([[9, "&Tab;"], [0, "&NewLine;"], [22, "&excl;"], [0, "&quot;"], [0, "&num;"], [0, "&dollar;"], [0, "&percnt;"], [0, "&amp;"], [0, "&apos;"], [0, "&lpar;"], [0, "&rpar;"], [0, "&ast;"], [0, "&plus;"], [0, "&comma;"], [1, "&period;"], [0, "&sol;"], [10, "&colon;"], [0, "&semi;"], [0, { v: "&lt;", n: 8402, o: "&nvlt;" }], [0, { v: "&equals;", n: 8421, o: "&bne;" }], [0, { v: "&gt;", n: 8402, o: "&nvgt;" }], [0, "&quest;"], [0, "&commat;"], [26, "&lbrack;"], [0, "&bsol;"], [0, "&rbrack;"], [0, "&Hat;"], [0, "&lowbar;"], [0, "&DiacriticalGrave;"], [5, { n: 106, o: "&fjlig;" }], [20, "&lbrace;"], [0, "&verbar;"], [0, "&rbrace;"], [34, "&nbsp;"], [0, "&iexcl;"], [0, "&cent;"], [0, "&pound;"], [0, "&curren;"], [0, "&yen;"], [0, "&brvbar;"], [0, "&sect;"], [0, "&die;"], [0, "&copy;"], [0, "&ordf;"], [0, "&laquo;"], [0, "&not;"], [0, "&shy;"], [0, "&circledR;"], [0, "&macr;"], [0, "&deg;"], [0, "&PlusMinus;"], [0, "&sup2;"], [0, "&sup3;"], [0, "&acute;"], [0, "&micro;"], [0, "&para;"], [0, "&centerdot;"], [0, "&cedil;"], [0, "&sup1;"], [0, "&ordm;"], [0, "&raquo;"], [0, "&frac14;"], [0, "&frac12;"], [0, "&frac34;"], [0, "&iquest;"], [0, "&Agrave;"], [0, "&Aacute;"], [0, "&Acirc;"], [0, "&Atilde;"], [0, "&Auml;"], [0, "&angst;"], [0, "&AElig;"], [0, "&Ccedil;"], [0, "&Egrave;"], [0, "&Eacute;"], [0, "&Ecirc;"], [0, "&Euml;"], [0, "&Igrave;"], [0, "&Iacute;"], [0, "&Icirc;"], [0, "&Iuml;"], [0, "&ETH;"], [0, "&Ntilde;"], [0, "&Ograve;"], [0, "&Oacute;"], [0, "&Ocirc;"], [0, "&Otilde;"], [0, "&Ouml;"], [0, "&times;"], [0, "&Oslash;"], [0, "&Ugrave;"], [0, "&Uacute;"], [0, "&Ucirc;"], [0, "&Uuml;"], [0, "&Yacute;"], [0, "&THORN;"], [0, "&szlig;"], [0, "&agrave;"], [0, "&aacute;"], [0, "&acirc;"], [0, "&atilde;"], [0, "&auml;"], [0, "&aring;"], [0, "&aelig;"], [0, "&ccedil;"], [0, "&egrave;"], [0, "&eacute;"], [0, "&ecirc;"], [0, "&euml;"], [0, "&igrave;"], [0, "&iacute;"], [0, "&icirc;"], [0, "&iuml;"], [0, "&eth;"], [0, "&ntilde;"], [0, "&ograve;"], [0, "&oacute;"], [0, "&ocirc;"], [0, "&otilde;"], [0, "&ouml;"], [0, "&div;"], [0, "&oslash;"], [0, "&ugrave;"], [0, "&uacute;"], [0, "&ucirc;"], [0, "&uuml;"], [0, "&yacute;"], [0, "&thorn;"], [0, "&yuml;"], [0, "&Amacr;"], [0, "&amacr;"], [0, "&Abreve;"], [0, "&abreve;"], [0, "&Aogon;"], [0, "&aogon;"], [0, "&Cacute;"], [0, "&cacute;"], [0, "&Ccirc;"], [0, "&ccirc;"], [0, "&Cdot;"], [0, "&cdot;"], [0, "&Ccaron;"], [0, "&ccaron;"], [0, "&Dcaron;"], [0, "&dcaron;"], [0, "&Dstrok;"], [0, "&dstrok;"], [0, "&Emacr;"], [0, "&emacr;"], [2, "&Edot;"], [0, "&edot;"], [0, "&Eogon;"], [0, "&eogon;"], [0, "&Ecaron;"], [0, "&ecaron;"], [0, "&Gcirc;"], [0, "&gcirc;"], [0, "&Gbreve;"], [0, "&gbreve;"], [0, "&Gdot;"], [0, "&gdot;"], [0, "&Gcedil;"], [1, "&Hcirc;"], [0, "&hcirc;"], [0, "&Hstrok;"], [0, "&hstrok;"], [0, "&Itilde;"], [0, "&itilde;"], [0, "&Imacr;"], [0, "&imacr;"], [2, "&Iogon;"], [0, "&iogon;"], [0, "&Idot;"], [0, "&imath;"], [0, "&IJlig;"], [0, "&ijlig;"], [0, "&Jcirc;"], [0, "&jcirc;"], [0, "&Kcedil;"], [0, "&kcedil;"], [0, "&kgreen;"], [0, "&Lacute;"], [0, "&lacute;"], [0, "&Lcedil;"], [0, "&lcedil;"], [0, "&Lcaron;"], [0, "&lcaron;"], [0, "&Lmidot;"], [0, "&lmidot;"], [0, "&Lstrok;"], [0, "&lstrok;"], [0, "&Nacute;"], [0, "&nacute;"], [0, "&Ncedil;"], [0, "&ncedil;"], [0, "&Ncaron;"], [0, "&ncaron;"], [0, "&napos;"], [0, "&ENG;"], [0, "&eng;"], [0, "&Omacr;"], [0, "&omacr;"], [2, "&Odblac;"], [0, "&odblac;"], [0, "&OElig;"], [0, "&oelig;"], [0, "&Racute;"], [0, "&racute;"], [0, "&Rcedil;"], [0, "&rcedil;"], [0, "&Rcaron;"], [0, "&rcaron;"], [0, "&Sacute;"], [0, "&sacute;"], [0, "&Scirc;"], [0, "&scirc;"], [0, "&Scedil;"], [0, "&scedil;"], [0, "&Scaron;"], [0, "&scaron;"], [0, "&Tcedil;"], [0, "&tcedil;"], [0, "&Tcaron;"], [0, "&tcaron;"], [0, "&Tstrok;"], [0, "&tstrok;"], [0, "&Utilde;"], [0, "&utilde;"], [0, "&Umacr;"], [0, "&umacr;"], [0, "&Ubreve;"], [0, "&ubreve;"], [0, "&Uring;"], [0, "&uring;"], [0, "&Udblac;"], [0, "&udblac;"], [0, "&Uogon;"], [0, "&uogon;"], [0, "&Wcirc;"], [0, "&wcirc;"], [0, "&Ycirc;"], [0, "&ycirc;"], [0, "&Yuml;"], [0, "&Zacute;"], [0, "&zacute;"], [0, "&Zdot;"], [0, "&zdot;"], [0, "&Zcaron;"], [0, "&zcaron;"], [19, "&fnof;"], [34, "&imped;"], [63, "&gacute;"], [65, "&jmath;"], [142, "&circ;"], [0, "&caron;"], [16, "&breve;"], [0, "&DiacriticalDot;"], [0, "&ring;"], [0, "&ogon;"], [0, "&DiacriticalTilde;"], [0, "&dblac;"], [51, "&DownBreve;"], [127, "&Alpha;"], [0, "&Beta;"], [0, "&Gamma;"], [0, "&Delta;"], [0, "&Epsilon;"], [0, "&Zeta;"], [0, "&Eta;"], [0, "&Theta;"], [0, "&Iota;"], [0, "&Kappa;"], [0, "&Lambda;"], [0, "&Mu;"], [0, "&Nu;"], [0, "&Xi;"], [0, "&Omicron;"], [0, "&Pi;"], [0, "&Rho;"], [1, "&Sigma;"], [0, "&Tau;"], [0, "&Upsilon;"], [0, "&Phi;"], [0, "&Chi;"], [0, "&Psi;"], [0, "&ohm;"], [7, "&alpha;"], [0, "&beta;"], [0, "&gamma;"], [0, "&delta;"], [0, "&epsi;"], [0, "&zeta;"], [0, "&eta;"], [0, "&theta;"], [0, "&iota;"], [0, "&kappa;"], [0, "&lambda;"], [0, "&mu;"], [0, "&nu;"], [0, "&xi;"], [0, "&omicron;"], [0, "&pi;"], [0, "&rho;"], [0, "&sigmaf;"], [0, "&sigma;"], [0, "&tau;"], [0, "&upsi;"], [0, "&phi;"], [0, "&chi;"], [0, "&psi;"], [0, "&omega;"], [7, "&thetasym;"], [0, "&Upsi;"], [2, "&phiv;"], [0, "&piv;"], [5, "&Gammad;"], [0, "&digamma;"], [18, "&kappav;"], [0, "&rhov;"], [3, "&epsiv;"], [0, "&backepsilon;"], [10, "&IOcy;"], [0, "&DJcy;"], [0, "&GJcy;"], [0, "&Jukcy;"], [0, "&DScy;"], [0, "&Iukcy;"], [0, "&YIcy;"], [0, "&Jsercy;"], [0, "&LJcy;"], [0, "&NJcy;"], [0, "&TSHcy;"], [0, "&KJcy;"], [1, "&Ubrcy;"], [0, "&DZcy;"], [0, "&Acy;"], [0, "&Bcy;"], [0, "&Vcy;"], [0, "&Gcy;"], [0, "&Dcy;"], [0, "&IEcy;"], [0, "&ZHcy;"], [0, "&Zcy;"], [0, "&Icy;"], [0, "&Jcy;"], [0, "&Kcy;"], [0, "&Lcy;"], [0, "&Mcy;"], [0, "&Ncy;"], [0, "&Ocy;"], [0, "&Pcy;"], [0, "&Rcy;"], [0, "&Scy;"], [0, "&Tcy;"], [0, "&Ucy;"], [0, "&Fcy;"], [0, "&KHcy;"], [0, "&TScy;"], [0, "&CHcy;"], [0, "&SHcy;"], [0, "&SHCHcy;"], [0, "&HARDcy;"], [0, "&Ycy;"], [0, "&SOFTcy;"], [0, "&Ecy;"], [0, "&YUcy;"], [0, "&YAcy;"], [0, "&acy;"], [0, "&bcy;"], [0, "&vcy;"], [0, "&gcy;"], [0, "&dcy;"], [0, "&iecy;"], [0, "&zhcy;"], [0, "&zcy;"], [0, "&icy;"], [0, "&jcy;"], [0, "&kcy;"], [0, "&lcy;"], [0, "&mcy;"], [0, "&ncy;"], [0, "&ocy;"], [0, "&pcy;"], [0, "&rcy;"], [0, "&scy;"], [0, "&tcy;"], [0, "&ucy;"], [0, "&fcy;"], [0, "&khcy;"], [0, "&tscy;"], [0, "&chcy;"], [0, "&shcy;"], [0, "&shchcy;"], [0, "&hardcy;"], [0, "&ycy;"], [0, "&softcy;"], [0, "&ecy;"], [0, "&yucy;"], [0, "&yacy;"], [1, "&iocy;"], [0, "&djcy;"], [0, "&gjcy;"], [0, "&jukcy;"], [0, "&dscy;"], [0, "&iukcy;"], [0, "&yicy;"], [0, "&jsercy;"], [0, "&ljcy;"], [0, "&njcy;"], [0, "&tshcy;"], [0, "&kjcy;"], [1, "&ubrcy;"], [0, "&dzcy;"], [7074, "&ensp;"], [0, "&emsp;"], [0, "&emsp13;"], [0, "&emsp14;"], [1, "&numsp;"], [0, "&puncsp;"], [0, "&ThinSpace;"], [0, "&hairsp;"], [0, "&NegativeMediumSpace;"], [0, "&zwnj;"], [0, "&zwj;"], [0, "&lrm;"], [0, "&rlm;"], [0, "&dash;"], [2, "&ndash;"], [0, "&mdash;"], [0, "&horbar;"], [0, "&Verbar;"], [1, "&lsquo;"], [0, "&CloseCurlyQuote;"], [0, "&lsquor;"], [1, "&ldquo;"], [0, "&CloseCurlyDoubleQuote;"], [0, "&bdquo;"], [1, "&dagger;"], [0, "&Dagger;"], [0, "&bull;"], [2, "&nldr;"], [0, "&hellip;"], [9, "&permil;"], [0, "&pertenk;"], [0, "&prime;"], [0, "&Prime;"], [0, "&tprime;"], [0, "&backprime;"], [3, "&lsaquo;"], [0, "&rsaquo;"], [3, "&oline;"], [2, "&caret;"], [1, "&hybull;"], [0, "&frasl;"], [10, "&bsemi;"], [7, "&qprime;"], [7, { v: "&MediumSpace;", n: 8202, o: "&ThickSpace;" }], [0, "&NoBreak;"], [0, "&af;"], [0, "&InvisibleTimes;"], [0, "&ic;"], [72, "&euro;"], [46, "&tdot;"], [0, "&DotDot;"], [37, "&complexes;"], [2, "&incare;"], [4, "&gscr;"], [0, "&hamilt;"], [0, "&Hfr;"], [0, "&Hopf;"], [0, "&planckh;"], [0, "&hbar;"], [0, "&imagline;"], [0, "&Ifr;"], [0, "&lagran;"], [0, "&ell;"], [1, "&naturals;"], [0, "&numero;"], [0, "&copysr;"], [0, "&weierp;"], [0, "&Popf;"], [0, "&Qopf;"], [0, "&realine;"], [0, "&real;"], [0, "&reals;"], [0, "&rx;"], [3, "&trade;"], [1, "&integers;"], [2, "&mho;"], [0, "&zeetrf;"], [0, "&iiota;"], [2, "&bernou;"], [0, "&Cayleys;"], [1, "&escr;"], [0, "&Escr;"], [0, "&Fouriertrf;"], [1, "&Mellintrf;"], [0, "&order;"], [0, "&alefsym;"], [0, "&beth;"], [0, "&gimel;"], [0, "&daleth;"], [12, "&CapitalDifferentialD;"], [0, "&dd;"], [0, "&ee;"], [0, "&ii;"], [10, "&frac13;"], [0, "&frac23;"], [0, "&frac15;"], [0, "&frac25;"], [0, "&frac35;"], [0, "&frac45;"], [0, "&frac16;"], [0, "&frac56;"], [0, "&frac18;"], [0, "&frac38;"], [0, "&frac58;"], [0, "&frac78;"], [49, "&larr;"], [0, "&ShortUpArrow;"], [0, "&rarr;"], [0, "&darr;"], [0, "&harr;"], [0, "&updownarrow;"], [0, "&nwarr;"], [0, "&nearr;"], [0, "&LowerRightArrow;"], [0, "&LowerLeftArrow;"], [0, "&nlarr;"], [0, "&nrarr;"], [1, { v: "&rarrw;", n: 824, o: "&nrarrw;" }], [0, "&Larr;"], [0, "&Uarr;"], [0, "&Rarr;"], [0, "&Darr;"], [0, "&larrtl;"], [0, "&rarrtl;"], [0, "&LeftTeeArrow;"], [0, "&mapstoup;"], [0, "&map;"], [0, "&DownTeeArrow;"], [1, "&hookleftarrow;"], [0, "&hookrightarrow;"], [0, "&larrlp;"], [0, "&looparrowright;"], [0, "&harrw;"], [0, "&nharr;"], [1, "&lsh;"], [0, "&rsh;"], [0, "&ldsh;"], [0, "&rdsh;"], [1, "&crarr;"], [0, "&cularr;"], [0, "&curarr;"], [2, "&circlearrowleft;"], [0, "&circlearrowright;"], [0, "&leftharpoonup;"], [0, "&DownLeftVector;"], [0, "&RightUpVector;"], [0, "&LeftUpVector;"], [0, "&rharu;"], [0, "&DownRightVector;"], [0, "&dharr;"], [0, "&dharl;"], [0, "&RightArrowLeftArrow;"], [0, "&udarr;"], [0, "&LeftArrowRightArrow;"], [0, "&leftleftarrows;"], [0, "&upuparrows;"], [0, "&rightrightarrows;"], [0, "&ddarr;"], [0, "&leftrightharpoons;"], [0, "&Equilibrium;"], [0, "&nlArr;"], [0, "&nhArr;"], [0, "&nrArr;"], [0, "&DoubleLeftArrow;"], [0, "&DoubleUpArrow;"], [0, "&DoubleRightArrow;"], [0, "&dArr;"], [0, "&DoubleLeftRightArrow;"], [0, "&DoubleUpDownArrow;"], [0, "&nwArr;"], [0, "&neArr;"], [0, "&seArr;"], [0, "&swArr;"], [0, "&lAarr;"], [0, "&rAarr;"], [1, "&zigrarr;"], [6, "&larrb;"], [0, "&rarrb;"], [15, "&DownArrowUpArrow;"], [7, "&loarr;"], [0, "&roarr;"], [0, "&hoarr;"], [0, "&forall;"], [0, "&comp;"], [0, { v: "&part;", n: 824, o: "&npart;" }], [0, "&exist;"], [0, "&nexist;"], [0, "&empty;"], [1, "&Del;"], [0, "&Element;"], [0, "&NotElement;"], [1, "&ni;"], [0, "&notni;"], [2, "&prod;"], [0, "&coprod;"], [0, "&sum;"], [0, "&minus;"], [0, "&MinusPlus;"], [0, "&dotplus;"], [1, "&Backslash;"], [0, "&lowast;"], [0, "&compfn;"], [1, "&radic;"], [2, "&prop;"], [0, "&infin;"], [0, "&angrt;"], [0, { v: "&ang;", n: 8402, o: "&nang;" }], [0, "&angmsd;"], [0, "&angsph;"], [0, "&mid;"], [0, "&nmid;"], [0, "&DoubleVerticalBar;"], [0, "&NotDoubleVerticalBar;"], [0, "&and;"], [0, "&or;"], [0, { v: "&cap;", n: 65024, o: "&caps;" }], [0, { v: "&cup;", n: 65024, o: "&cups;" }], [0, "&int;"], [0, "&Int;"], [0, "&iiint;"], [0, "&conint;"], [0, "&Conint;"], [0, "&Cconint;"], [0, "&cwint;"], [0, "&ClockwiseContourIntegral;"], [0, "&awconint;"], [0, "&there4;"], [0, "&becaus;"], [0, "&ratio;"], [0, "&Colon;"], [0, "&dotminus;"], [1, "&mDDot;"], [0, "&homtht;"], [0, { v: "&sim;", n: 8402, o: "&nvsim;" }], [0, { v: "&backsim;", n: 817, o: "&race;" }], [0, { v: "&ac;", n: 819, o: "&acE;" }], [0, "&acd;"], [0, "&VerticalTilde;"], [0, "&NotTilde;"], [0, { v: "&eqsim;", n: 824, o: "&nesim;" }], [0, "&sime;"], [0, "&NotTildeEqual;"], [0, "&cong;"], [0, "&simne;"], [0, "&ncong;"], [0, "&ap;"], [0, "&nap;"], [0, "&ape;"], [0, { v: "&apid;", n: 824, o: "&napid;" }], [0, "&backcong;"], [0, { v: "&asympeq;", n: 8402, o: "&nvap;" }], [0, { v: "&bump;", n: 824, o: "&nbump;" }], [0, { v: "&bumpe;", n: 824, o: "&nbumpe;" }], [0, { v: "&doteq;", n: 824, o: "&nedot;" }], [0, "&doteqdot;"], [0, "&efDot;"], [0, "&erDot;"], [0, "&Assign;"], [0, "&ecolon;"], [0, "&ecir;"], [0, "&circeq;"], [1, "&wedgeq;"], [0, "&veeeq;"], [1, "&triangleq;"], [2, "&equest;"], [0, "&ne;"], [0, { v: "&Congruent;", n: 8421, o: "&bnequiv;" }], [0, "&nequiv;"], [1, { v: "&le;", n: 8402, o: "&nvle;" }], [0, { v: "&ge;", n: 8402, o: "&nvge;" }], [0, { v: "&lE;", n: 824, o: "&nlE;" }], [0, { v: "&gE;", n: 824, o: "&ngE;" }], [0, { v: "&lnE;", n: 65024, o: "&lvertneqq;" }], [0, { v: "&gnE;", n: 65024, o: "&gvertneqq;" }], [0, { v: "&ll;", n: new Map(/* #__PURE__ */ restoreDiff([[824, "&nLtv;"], [7577, "&nLt;"]])) }], [0, { v: "&gg;", n: new Map(/* #__PURE__ */ restoreDiff([[824, "&nGtv;"], [7577, "&nGt;"]])) }], [0, "&between;"], [0, "&NotCupCap;"], [0, "&nless;"], [0, "&ngt;"], [0, "&nle;"], [0, "&nge;"], [0, "&lesssim;"], [0, "&GreaterTilde;"], [0, "&nlsim;"], [0, "&ngsim;"], [0, "&LessGreater;"], [0, "&gl;"], [0, "&NotLessGreater;"], [0, "&NotGreaterLess;"], [0, "&pr;"], [0, "&sc;"], [0, "&prcue;"], [0, "&sccue;"], [0, "&PrecedesTilde;"], [0, { v: "&scsim;", n: 824, o: "&NotSucceedsTilde;" }], [0, "&NotPrecedes;"], [0, "&NotSucceeds;"], [0, { v: "&sub;", n: 8402, o: "&NotSubset;" }], [0, { v: "&sup;", n: 8402, o: "&NotSuperset;" }], [0, "&nsub;"], [0, "&nsup;"], [0, "&sube;"], [0, "&supe;"], [0, "&NotSubsetEqual;"], [0, "&NotSupersetEqual;"], [0, { v: "&subne;", n: 65024, o: "&varsubsetneq;" }], [0, { v: "&supne;", n: 65024, o: "&varsupsetneq;" }], [1, "&cupdot;"], [0, "&UnionPlus;"], [0, { v: "&sqsub;", n: 824, o: "&NotSquareSubset;" }], [0, { v: "&sqsup;", n: 824, o: "&NotSquareSuperset;" }], [0, "&sqsube;"], [0, "&sqsupe;"], [0, { v: "&sqcap;", n: 65024, o: "&sqcaps;" }], [0, { v: "&sqcup;", n: 65024, o: "&sqcups;" }], [0, "&CirclePlus;"], [0, "&CircleMinus;"], [0, "&CircleTimes;"], [0, "&osol;"], [0, "&CircleDot;"], [0, "&circledcirc;"], [0, "&circledast;"], [1, "&circleddash;"], [0, "&boxplus;"], [0, "&boxminus;"], [0, "&boxtimes;"], [0, "&dotsquare;"], [0, "&RightTee;"], [0, "&dashv;"], [0, "&DownTee;"], [0, "&bot;"], [1, "&models;"], [0, "&DoubleRightTee;"], [0, "&Vdash;"], [0, "&Vvdash;"], [0, "&VDash;"], [0, "&nvdash;"], [0, "&nvDash;"], [0, "&nVdash;"], [0, "&nVDash;"], [0, "&prurel;"], [1, "&LeftTriangle;"], [0, "&RightTriangle;"], [0, { v: "&LeftTriangleEqual;", n: 8402, o: "&nvltrie;" }], [0, { v: "&RightTriangleEqual;", n: 8402, o: "&nvrtrie;" }], [0, "&origof;"], [0, "&imof;"], [0, "&multimap;"], [0, "&hercon;"], [0, "&intcal;"], [0, "&veebar;"], [1, "&barvee;"], [0, "&angrtvb;"], [0, "&lrtri;"], [0, "&bigwedge;"], [0, "&bigvee;"], [0, "&bigcap;"], [0, "&bigcup;"], [0, "&diam;"], [0, "&sdot;"], [0, "&sstarf;"], [0, "&divideontimes;"], [0, "&bowtie;"], [0, "&ltimes;"], [0, "&rtimes;"], [0, "&leftthreetimes;"], [0, "&rightthreetimes;"], [0, "&backsimeq;"], [0, "&curlyvee;"], [0, "&curlywedge;"], [0, "&Sub;"], [0, "&Sup;"], [0, "&Cap;"], [0, "&Cup;"], [0, "&fork;"], [0, "&epar;"], [0, "&lessdot;"], [0, "&gtdot;"], [0, { v: "&Ll;", n: 824, o: "&nLl;" }], [0, { v: "&Gg;", n: 824, o: "&nGg;" }], [0, { v: "&leg;", n: 65024, o: "&lesg;" }], [0, { v: "&gel;", n: 65024, o: "&gesl;" }], [2, "&cuepr;"], [0, "&cuesc;"], [0, "&NotPrecedesSlantEqual;"], [0, "&NotSucceedsSlantEqual;"], [0, "&NotSquareSubsetEqual;"], [0, "&NotSquareSupersetEqual;"], [2, "&lnsim;"], [0, "&gnsim;"], [0, "&precnsim;"], [0, "&scnsim;"], [0, "&nltri;"], [0, "&NotRightTriangle;"], [0, "&nltrie;"], [0, "&NotRightTriangleEqual;"], [0, "&vellip;"], [0, "&ctdot;"], [0, "&utdot;"], [0, "&dtdot;"], [0, "&disin;"], [0, "&isinsv;"], [0, "&isins;"], [0, { v: "&isindot;", n: 824, o: "&notindot;" }], [0, "&notinvc;"], [0, "&notinvb;"], [1, { v: "&isinE;", n: 824, o: "&notinE;" }], [0, "&nisd;"], [0, "&xnis;"], [0, "&nis;"], [0, "&notnivc;"], [0, "&notnivb;"], [6, "&barwed;"], [0, "&Barwed;"], [1, "&lceil;"], [0, "&rceil;"], [0, "&LeftFloor;"], [0, "&rfloor;"], [0, "&drcrop;"], [0, "&dlcrop;"], [0, "&urcrop;"], [0, "&ulcrop;"], [0, "&bnot;"], [1, "&profline;"], [0, "&profsurf;"], [1, "&telrec;"], [0, "&target;"], [5, "&ulcorn;"], [0, "&urcorn;"], [0, "&dlcorn;"], [0, "&drcorn;"], [2, "&frown;"], [0, "&smile;"], [9, "&cylcty;"], [0, "&profalar;"], [7, "&topbot;"], [6, "&ovbar;"], [1, "&solbar;"], [60, "&angzarr;"], [51, "&lmoustache;"], [0, "&rmoustache;"], [2, "&OverBracket;"], [0, "&bbrk;"], [0, "&bbrktbrk;"], [37, "&OverParenthesis;"], [0, "&UnderParenthesis;"], [0, "&OverBrace;"], [0, "&UnderBrace;"], [2, "&trpezium;"], [4, "&elinters;"], [59, "&blank;"], [164, "&circledS;"], [55, "&boxh;"], [1, "&boxv;"], [9, "&boxdr;"], [3, "&boxdl;"], [3, "&boxur;"], [3, "&boxul;"], [3, "&boxvr;"], [7, "&boxvl;"], [7, "&boxhd;"], [7, "&boxhu;"], [7, "&boxvh;"], [19, "&boxH;"], [0, "&boxV;"], [0, "&boxdR;"], [0, "&boxDr;"], [0, "&boxDR;"], [0, "&boxdL;"], [0, "&boxDl;"], [0, "&boxDL;"], [0, "&boxuR;"], [0, "&boxUr;"], [0, "&boxUR;"], [0, "&boxuL;"], [0, "&boxUl;"], [0, "&boxUL;"], [0, "&boxvR;"], [0, "&boxVr;"], [0, "&boxVR;"], [0, "&boxvL;"], [0, "&boxVl;"], [0, "&boxVL;"], [0, "&boxHd;"], [0, "&boxhD;"], [0, "&boxHD;"], [0, "&boxHu;"], [0, "&boxhU;"], [0, "&boxHU;"], [0, "&boxvH;"], [0, "&boxVh;"], [0, "&boxVH;"], [19, "&uhblk;"], [3, "&lhblk;"], [3, "&block;"], [8, "&blk14;"], [0, "&blk12;"], [0, "&blk34;"], [13, "&square;"], [8, "&blacksquare;"], [0, "&EmptyVerySmallSquare;"], [1, "&rect;"], [0, "&marker;"], [2, "&fltns;"], [1, "&bigtriangleup;"], [0, "&blacktriangle;"], [0, "&triangle;"], [2, "&blacktriangleright;"], [0, "&rtri;"], [3, "&bigtriangledown;"], [0, "&blacktriangledown;"], [0, "&dtri;"], [2, "&blacktriangleleft;"], [0, "&ltri;"], [6, "&loz;"], [0, "&cir;"], [32, "&tridot;"], [2, "&bigcirc;"], [8, "&ultri;"], [0, "&urtri;"], [0, "&lltri;"], [0, "&EmptySmallSquare;"], [0, "&FilledSmallSquare;"], [8, "&bigstar;"], [0, "&star;"], [7, "&phone;"], [49, "&female;"], [1, "&male;"], [29, "&spades;"], [2, "&clubs;"], [1, "&hearts;"], [0, "&diamondsuit;"], [3, "&sung;"], [2, "&flat;"], [0, "&natural;"], [0, "&sharp;"], [163, "&check;"], [3, "&cross;"], [8, "&malt;"], [21, "&sext;"], [33, "&VerticalSeparator;"], [25, "&lbbrk;"], [0, "&rbbrk;"], [84, "&bsolhsub;"], [0, "&suphsol;"], [28, "&LeftDoubleBracket;"], [0, "&RightDoubleBracket;"], [0, "&lang;"], [0, "&rang;"], [0, "&Lang;"], [0, "&Rang;"], [0, "&loang;"], [0, "&roang;"], [7, "&longleftarrow;"], [0, "&longrightarrow;"], [0, "&longleftrightarrow;"], [0, "&DoubleLongLeftArrow;"], [0, "&DoubleLongRightArrow;"], [0, "&DoubleLongLeftRightArrow;"], [1, "&longmapsto;"], [2, "&dzigrarr;"], [258, "&nvlArr;"], [0, "&nvrArr;"], [0, "&nvHarr;"], [0, "&Map;"], [6, "&lbarr;"], [0, "&bkarow;"], [0, "&lBarr;"], [0, "&dbkarow;"], [0, "&drbkarow;"], [0, "&DDotrahd;"], [0, "&UpArrowBar;"], [0, "&DownArrowBar;"], [2, "&Rarrtl;"], [2, "&latail;"], [0, "&ratail;"], [0, "&lAtail;"], [0, "&rAtail;"], [0, "&larrfs;"], [0, "&rarrfs;"], [0, "&larrbfs;"], [0, "&rarrbfs;"], [2, "&nwarhk;"], [0, "&nearhk;"], [0, "&hksearow;"], [0, "&hkswarow;"], [0, "&nwnear;"], [0, "&nesear;"], [0, "&seswar;"], [0, "&swnwar;"], [8, { v: "&rarrc;", n: 824, o: "&nrarrc;" }], [1, "&cudarrr;"], [0, "&ldca;"], [0, "&rdca;"], [0, "&cudarrl;"], [0, "&larrpl;"], [2, "&curarrm;"], [0, "&cularrp;"], [7, "&rarrpl;"], [2, "&harrcir;"], [0, "&Uarrocir;"], [0, "&lurdshar;"], [0, "&ldrushar;"], [2, "&LeftRightVector;"], [0, "&RightUpDownVector;"], [0, "&DownLeftRightVector;"], [0, "&LeftUpDownVector;"], [0, "&LeftVectorBar;"], [0, "&RightVectorBar;"], [0, "&RightUpVectorBar;"], [0, "&RightDownVectorBar;"], [0, "&DownLeftVectorBar;"], [0, "&DownRightVectorBar;"], [0, "&LeftUpVectorBar;"], [0, "&LeftDownVectorBar;"], [0, "&LeftTeeVector;"], [0, "&RightTeeVector;"], [0, "&RightUpTeeVector;"], [0, "&RightDownTeeVector;"], [0, "&DownLeftTeeVector;"], [0, "&DownRightTeeVector;"], [0, "&LeftUpTeeVector;"], [0, "&LeftDownTeeVector;"], [0, "&lHar;"], [0, "&uHar;"], [0, "&rHar;"], [0, "&dHar;"], [0, "&luruhar;"], [0, "&ldrdhar;"], [0, "&ruluhar;"], [0, "&rdldhar;"], [0, "&lharul;"], [0, "&llhard;"], [0, "&rharul;"], [0, "&lrhard;"], [0, "&udhar;"], [0, "&duhar;"], [0, "&RoundImplies;"], [0, "&erarr;"], [0, "&simrarr;"], [0, "&larrsim;"], [0, "&rarrsim;"], [0, "&rarrap;"], [0, "&ltlarr;"], [1, "&gtrarr;"], [0, "&subrarr;"], [1, "&suplarr;"], [0, "&lfisht;"], [0, "&rfisht;"], [0, "&ufisht;"], [0, "&dfisht;"], [5, "&lopar;"], [0, "&ropar;"], [4, "&lbrke;"], [0, "&rbrke;"], [0, "&lbrkslu;"], [0, "&rbrksld;"], [0, "&lbrksld;"], [0, "&rbrkslu;"], [0, "&langd;"], [0, "&rangd;"], [0, "&lparlt;"], [0, "&rpargt;"], [0, "&gtlPar;"], [0, "&ltrPar;"], [3, "&vzigzag;"], [1, "&vangrt;"], [0, "&angrtvbd;"], [6, "&ange;"], [0, "&range;"], [0, "&dwangle;"], [0, "&uwangle;"], [0, "&angmsdaa;"], [0, "&angmsdab;"], [0, "&angmsdac;"], [0, "&angmsdad;"], [0, "&angmsdae;"], [0, "&angmsdaf;"], [0, "&angmsdag;"], [0, "&angmsdah;"], [0, "&bemptyv;"], [0, "&demptyv;"], [0, "&cemptyv;"], [0, "&raemptyv;"], [0, "&laemptyv;"], [0, "&ohbar;"], [0, "&omid;"], [0, "&opar;"], [1, "&operp;"], [1, "&olcross;"], [0, "&odsold;"], [1, "&olcir;"], [0, "&ofcir;"], [0, "&olt;"], [0, "&ogt;"], [0, "&cirscir;"], [0, "&cirE;"], [0, "&solb;"], [0, "&bsolb;"], [3, "&boxbox;"], [3, "&trisb;"], [0, "&rtriltri;"], [0, { v: "&LeftTriangleBar;", n: 824, o: "&NotLeftTriangleBar;" }], [0, { v: "&RightTriangleBar;", n: 824, o: "&NotRightTriangleBar;" }], [11, "&iinfin;"], [0, "&infintie;"], [0, "&nvinfin;"], [4, "&eparsl;"], [0, "&smeparsl;"], [0, "&eqvparsl;"], [5, "&blacklozenge;"], [8, "&RuleDelayed;"], [1, "&dsol;"], [9, "&bigodot;"], [0, "&bigoplus;"], [0, "&bigotimes;"], [1, "&biguplus;"], [1, "&bigsqcup;"], [5, "&iiiint;"], [0, "&fpartint;"], [2, "&cirfnint;"], [0, "&awint;"], [0, "&rppolint;"], [0, "&scpolint;"], [0, "&npolint;"], [0, "&pointint;"], [0, "&quatint;"], [0, "&intlarhk;"], [10, "&pluscir;"], [0, "&plusacir;"], [0, "&simplus;"], [0, "&plusdu;"], [0, "&plussim;"], [0, "&plustwo;"], [1, "&mcomma;"], [0, "&minusdu;"], [2, "&loplus;"], [0, "&roplus;"], [0, "&Cross;"], [0, "&timesd;"], [0, "&timesbar;"], [1, "&smashp;"], [0, "&lotimes;"], [0, "&rotimes;"], [0, "&otimesas;"], [0, "&Otimes;"], [0, "&odiv;"], [0, "&triplus;"], [0, "&triminus;"], [0, "&tritime;"], [0, "&intprod;"], [2, "&amalg;"], [0, "&capdot;"], [1, "&ncup;"], [0, "&ncap;"], [0, "&capand;"], [0, "&cupor;"], [0, "&cupcap;"], [0, "&capcup;"], [0, "&cupbrcap;"], [0, "&capbrcup;"], [0, "&cupcup;"], [0, "&capcap;"], [0, "&ccups;"], [0, "&ccaps;"], [2, "&ccupssm;"], [2, "&And;"], [0, "&Or;"], [0, "&andand;"], [0, "&oror;"], [0, "&orslope;"], [0, "&andslope;"], [1, "&andv;"], [0, "&orv;"], [0, "&andd;"], [0, "&ord;"], [1, "&wedbar;"], [6, "&sdote;"], [3, "&simdot;"], [2, { v: "&congdot;", n: 824, o: "&ncongdot;" }], [0, "&easter;"], [0, "&apacir;"], [0, { v: "&apE;", n: 824, o: "&napE;" }], [0, "&eplus;"], [0, "&pluse;"], [0, "&Esim;"], [0, "&Colone;"], [0, "&Equal;"], [1, "&ddotseq;"], [0, "&equivDD;"], [0, "&ltcir;"], [0, "&gtcir;"], [0, "&ltquest;"], [0, "&gtquest;"], [0, { v: "&leqslant;", n: 824, o: "&nleqslant;" }], [0, { v: "&geqslant;", n: 824, o: "&ngeqslant;" }], [0, "&lesdot;"], [0, "&gesdot;"], [0, "&lesdoto;"], [0, "&gesdoto;"], [0, "&lesdotor;"], [0, "&gesdotol;"], [0, "&lap;"], [0, "&gap;"], [0, "&lne;"], [0, "&gne;"], [0, "&lnap;"], [0, "&gnap;"], [0, "&lEg;"], [0, "&gEl;"], [0, "&lsime;"], [0, "&gsime;"], [0, "&lsimg;"], [0, "&gsiml;"], [0, "&lgE;"], [0, "&glE;"], [0, "&lesges;"], [0, "&gesles;"], [0, "&els;"], [0, "&egs;"], [0, "&elsdot;"], [0, "&egsdot;"], [0, "&el;"], [0, "&eg;"], [2, "&siml;"], [0, "&simg;"], [0, "&simlE;"], [0, "&simgE;"], [0, { v: "&LessLess;", n: 824, o: "&NotNestedLessLess;" }], [0, { v: "&GreaterGreater;", n: 824, o: "&NotNestedGreaterGreater;" }], [1, "&glj;"], [0, "&gla;"], [0, "&ltcc;"], [0, "&gtcc;"], [0, "&lescc;"], [0, "&gescc;"], [0, "&smt;"], [0, "&lat;"], [0, { v: "&smte;", n: 65024, o: "&smtes;" }], [0, { v: "&late;", n: 65024, o: "&lates;" }], [0, "&bumpE;"], [0, { v: "&PrecedesEqual;", n: 824, o: "&NotPrecedesEqual;" }], [0, { v: "&sce;", n: 824, o: "&NotSucceedsEqual;" }], [2, "&prE;"], [0, "&scE;"], [0, "&precneqq;"], [0, "&scnE;"], [0, "&prap;"], [0, "&scap;"], [0, "&precnapprox;"], [0, "&scnap;"], [0, "&Pr;"], [0, "&Sc;"], [0, "&subdot;"], [0, "&supdot;"], [0, "&subplus;"], [0, "&supplus;"], [0, "&submult;"], [0, "&supmult;"], [0, "&subedot;"], [0, "&supedot;"], [0, { v: "&subE;", n: 824, o: "&nsubE;" }], [0, { v: "&supE;", n: 824, o: "&nsupE;" }], [0, "&subsim;"], [0, "&supsim;"], [2, { v: "&subnE;", n: 65024, o: "&varsubsetneqq;" }], [0, { v: "&supnE;", n: 65024, o: "&varsupsetneqq;" }], [2, "&csub;"], [0, "&csup;"], [0, "&csube;"], [0, "&csupe;"], [0, "&subsup;"], [0, "&supsub;"], [0, "&subsub;"], [0, "&supsup;"], [0, "&suphsub;"], [0, "&supdsub;"], [0, "&forkv;"], [0, "&topfork;"], [0, "&mlcp;"], [8, "&Dashv;"], [1, "&Vdashl;"], [0, "&Barv;"], [0, "&vBar;"], [0, "&vBarv;"], [1, "&Vbar;"], [0, "&Not;"], [0, "&bNot;"], [0, "&rnmid;"], [0, "&cirmid;"], [0, "&midcir;"], [0, "&topcir;"], [0, "&nhpar;"], [0, "&parsim;"], [9, { v: "&parsl;", n: 8421, o: "&nparsl;" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "&Ascr;"], [1, "&Cscr;"], [0, "&Dscr;"], [2, "&Gscr;"], [2, "&Jscr;"], [0, "&Kscr;"], [2, "&Nscr;"], [0, "&Oscr;"], [0, "&Pscr;"], [0, "&Qscr;"], [1, "&Sscr;"], [0, "&Tscr;"], [0, "&Uscr;"], [0, "&Vscr;"], [0, "&Wscr;"], [0, "&Xscr;"], [0, "&Yscr;"], [0, "&Zscr;"], [0, "&ascr;"], [0, "&bscr;"], [0, "&cscr;"], [0, "&dscr;"], [1, "&fscr;"], [1, "&hscr;"], [0, "&iscr;"], [0, "&jscr;"], [0, "&kscr;"], [0, "&lscr;"], [0, "&mscr;"], [0, "&nscr;"], [1, "&pscr;"], [0, "&qscr;"], [0, "&rscr;"], [0, "&sscr;"], [0, "&tscr;"], [0, "&uscr;"], [0, "&vscr;"], [0, "&wscr;"], [0, "&xscr;"], [0, "&yscr;"], [0, "&zscr;"], [52, "&Afr;"], [0, "&Bfr;"], [1, "&Dfr;"], [0, "&Efr;"], [0, "&Ffr;"], [0, "&Gfr;"], [2, "&Jfr;"], [0, "&Kfr;"], [0, "&Lfr;"], [0, "&Mfr;"], [0, "&Nfr;"], [0, "&Ofr;"], [0, "&Pfr;"], [0, "&Qfr;"], [1, "&Sfr;"], [0, "&Tfr;"], [0, "&Ufr;"], [0, "&Vfr;"], [0, "&Wfr;"], [0, "&Xfr;"], [0, "&Yfr;"], [1, "&afr;"], [0, "&bfr;"], [0, "&cfr;"], [0, "&dfr;"], [0, "&efr;"], [0, "&ffr;"], [0, "&gfr;"], [0, "&hfr;"], [0, "&ifr;"], [0, "&jfr;"], [0, "&kfr;"], [0, "&lfr;"], [0, "&mfr;"], [0, "&nfr;"], [0, "&ofr;"], [0, "&pfr;"], [0, "&qfr;"], [0, "&rfr;"], [0, "&sfr;"], [0, "&tfr;"], [0, "&ufr;"], [0, "&vfr;"], [0, "&wfr;"], [0, "&xfr;"], [0, "&yfr;"], [0, "&zfr;"], [0, "&Aopf;"], [0, "&Bopf;"], [1, "&Dopf;"], [0, "&Eopf;"], [0, "&Fopf;"], [0, "&Gopf;"], [1, "&Iopf;"], [0, "&Jopf;"], [0, "&Kopf;"], [0, "&Lopf;"], [0, "&Mopf;"], [1, "&Oopf;"], [3, "&Sopf;"], [0, "&Topf;"], [0, "&Uopf;"], [0, "&Vopf;"], [0, "&Wopf;"], [0, "&Xopf;"], [0, "&Yopf;"], [1, "&aopf;"], [0, "&bopf;"], [0, "&copf;"], [0, "&dopf;"], [0, "&eopf;"], [0, "&fopf;"], [0, "&gopf;"], [0, "&hopf;"], [0, "&iopf;"], [0, "&jopf;"], [0, "&kopf;"], [0, "&lopf;"], [0, "&mopf;"], [0, "&nopf;"], [0, "&oopf;"], [0, "&popf;"], [0, "&qopf;"], [0, "&ropf;"], [0, "&sopf;"], [0, "&topf;"], [0, "&uopf;"], [0, "&vopf;"], [0, "&wopf;"], [0, "&xopf;"], [0, "&yopf;"], [0, "&zopf;"]])) }], [8906, "&fflig;"], [0, "&filig;"], [0, "&fllig;"], [0, "&ffilig;"], [0, "&ffllig;"]]));
15189
-
15190
- /** The level of entities to support. */
15191
- var EntityLevel;
15192
- (function (EntityLevel) {
15193
- /** Support only XML entities. */
15194
- EntityLevel[EntityLevel["XML"] = 0] = "XML";
15195
- /** Support HTML entities, which are a superset of XML entities. */
15196
- EntityLevel[EntityLevel["HTML"] = 1] = "HTML";
15197
- })(EntityLevel || (EntityLevel = {}));
15198
- var EncodingMode;
15199
- (function (EncodingMode) {
15200
- /**
15201
- * The output is UTF-8 encoded. Only characters that need escaping within
15202
- * XML will be escaped.
15203
- */
15204
- EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8";
15205
- /**
15206
- * The output consists only of ASCII characters. Characters that need
15207
- * escaping within HTML, and characters that aren't ASCII characters will
15208
- * be escaped.
15209
- */
15210
- EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII";
15211
- /**
15212
- * Encode all characters that have an equivalent entity, as well as all
15213
- * characters that are not ASCII characters.
15214
- */
15215
- EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive";
15216
- /**
15217
- * Encode all characters that have to be escaped in HTML attributes,
15218
- * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
15219
- */
15220
- EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute";
15221
- /**
15222
- * Encode all characters that have to be escaped in HTML text,
15223
- * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.
15224
- */
15225
- EncodingMode[EncodingMode["Text"] = 4] = "Text";
15226
- })(EncodingMode || (EncodingMode = {}));
15227
-
15228
15290
  // Utilities
15229
15291
  //
15230
15292
 
@@ -25518,12 +25580,11 @@ const updateLink = (view, updateLinkCallback) => {
25518
25580
  const fromInNode = Math.max(0, from - pos);
25519
25581
  const toInNode = Math.min(node.text.length, to - pos);
25520
25582
  text += node.text.slice(fromInNode, toInNode);
25521
- // eslint-disable-next-line unicorn/no-array-for-each
25522
- node.marks.forEach((mark) => {
25583
+ for (const mark of node.marks) {
25523
25584
  if (mark.type.name === 'link') {
25524
25585
  href = mark.attrs.href;
25525
25586
  }
25526
- });
25587
+ }
25527
25588
  });
25528
25589
  if (updateLinkCallback) {
25529
25590
  updateLinkCallback(text, href);
@@ -25540,8 +25601,8 @@ const findStart = (doc, pos, href) => {
25540
25601
  while (pos > 0) {
25541
25602
  const node = doc.nodeAt(pos - 1);
25542
25603
  if (!(node === null || node === void 0 ? void 0 : node.isText) ||
25543
- !node.marks.some((mark) => mark.type.name === EditorMenuTypes.Link &&
25544
- mark.attrs.href === href)) {
25604
+ node.marks.every((mark) => mark.type.name !== EditorMenuTypes.Link ||
25605
+ mark.attrs.href !== href)) {
25545
25606
  break;
25546
25607
  }
25547
25608
  pos--;
@@ -25559,8 +25620,8 @@ const findEnd = (doc, pos, href) => {
25559
25620
  while (pos < doc.content.size) {
25560
25621
  const node = doc.nodeAt(pos);
25561
25622
  if (!(node === null || node === void 0 ? void 0 : node.isText) ||
25562
- !node.marks.some((mark) => mark.type.name === EditorMenuTypes.Link &&
25563
- mark.attrs.href === href)) {
25623
+ node.marks.every((mark) => mark.type.name !== EditorMenuTypes.Link ||
25624
+ mark.attrs.href !== href)) {
25564
25625
  break;
25565
25626
  }
25566
25627
  pos++;
@@ -25696,16 +25757,17 @@ const createNodesWithLinksAndBreaks = (text, schema) => {
25696
25757
  if (line.length > 0) {
25697
25758
  nodes.push(...createNodesWithLinks(line, schema));
25698
25759
  }
25699
- if (index < lines.length - 1) {
25700
- const hb = schema.nodes.hard_break;
25701
- if (hb) {
25702
- nodes.push(hb.create());
25703
- }
25704
- else {
25705
- // Fallback: if schema lacks hard_break, defer to default paste behavior
25706
- // (Do NOT throw; keep behavior stable across versions)
25707
- console.warn('hard_break node not found in schema');
25708
- }
25760
+ if (index >= lines.length - 1) {
25761
+ continue;
25762
+ }
25763
+ const hb = schema.nodes.hard_break;
25764
+ if (hb) {
25765
+ nodes.push(hb.create());
25766
+ }
25767
+ else {
25768
+ // Fallback: if schema lacks hard_break, defer to default paste behavior
25769
+ // (Do NOT throw; keep behavior stable across versions)
25770
+ console.warn('hard_break node not found in schema');
25709
25771
  }
25710
25772
  }
25711
25773
  return nodes;
@@ -25842,10 +25904,11 @@ const createLinkPlugin = (updateLinkCallback) => {
25842
25904
  }
25843
25905
  // Prevent unhandled navigation and bubbling for link clicks
25844
25906
  const link = event.target.closest('a');
25845
- if (link) {
25846
- event.preventDefault();
25847
- event.stopPropagation();
25907
+ if (!link) {
25908
+ return;
25848
25909
  }
25910
+ event.preventDefault();
25911
+ event.stopPropagation();
25849
25912
  },
25850
25913
  },
25851
25914
  },
@@ -25916,11 +25979,12 @@ const replaceImageNodeByFileInfoId = (view, fileInfoId, buildNode) => {
25916
25979
  if (found) {
25917
25980
  return false;
25918
25981
  }
25919
- if (node.attrs.fileInfoId === fileInfoId) {
25920
- tr.replaceWith(pos, pos + node.nodeSize, buildNode(node));
25921
- found = true;
25922
- return false;
25982
+ if (node.attrs.fileInfoId !== fileInfoId) {
25983
+ return true;
25923
25984
  }
25985
+ tr.replaceWith(pos, pos + node.nodeSize, buildNode(node));
25986
+ found = true;
25987
+ return false;
25924
25988
  });
25925
25989
  if (found) {
25926
25990
  dispatch(tr);
@@ -25992,24 +26056,20 @@ const isImageNode$1 = (node) => {
25992
26056
  if (node.type.name === 'image') {
25993
26057
  return true;
25994
26058
  }
25995
- let found = false;
25996
- // eslint-disable-next-line unicorn/no-array-for-each
25997
- node.content.forEach((child) => {
26059
+ for (const child of node.children) {
25998
26060
  if (isImageNode$1(child)) {
25999
- found = true;
26061
+ return true;
26000
26062
  }
26001
- });
26002
- return found;
26063
+ }
26064
+ return false;
26003
26065
  }
26004
- else if (node instanceof Fragment) {
26005
- let found = false;
26006
- // eslint-disable-next-line unicorn/no-array-for-each
26007
- node.forEach((child) => {
26066
+ if (node instanceof Fragment) {
26067
+ for (const child of node.content) {
26008
26068
  if (isImageNode$1(child)) {
26009
- found = true;
26069
+ return true;
26010
26070
  }
26011
- });
26012
- return found;
26071
+ }
26072
+ return false;
26013
26073
  }
26014
26074
  return false;
26015
26075
  };
@@ -26020,8 +26080,7 @@ const isImageNode$1 = (node) => {
26020
26080
  */
26021
26081
  const filterImageNodes = (fragment) => {
26022
26082
  const filteredChildren = [];
26023
- // eslint-disable-next-line unicorn/no-array-for-each
26024
- fragment.forEach((child) => {
26083
+ for (const child of fragment.content) {
26025
26084
  if (!isImageNode$1(child)) {
26026
26085
  if (child.content.size > 0) {
26027
26086
  const filteredContent = filterImageNodes(child.content);
@@ -26032,7 +26091,7 @@ const filterImageNodes = (fragment) => {
26032
26091
  filteredChildren.push(child);
26033
26092
  }
26034
26093
  }
26035
- });
26094
+ }
26036
26095
  return Fragment.fromArray(filteredChildren);
26037
26096
  };
26038
26097
  /**
@@ -26072,27 +26131,28 @@ function handlePastedImages(view, clipboardData, inlineImages) {
26072
26131
  let isImageFilePasted = false;
26073
26132
  const files = [...(clipboardData.files || [])];
26074
26133
  for (const file of files) {
26075
- if (isImageFile(file, clipboardData)) {
26076
- isImageFilePasted = true;
26077
- const reader = new FileReader();
26078
- reader.onloadend = () => {
26079
- const base64Data = reader.result;
26080
- const fileInfo = createFileInfo(file);
26081
- if (inlineImages) {
26082
- // Once inline images are configured they own the paste
26083
- // lifecycle; never fall back to the legacy imagePasted
26084
- // event. Without an upload handler the paste is a no-op.
26085
- if (inlineImages.upload) {
26086
- runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
26087
- }
26088
- return;
26089
- }
26090
- view.dom.dispatchEvent(new CustomEvent('imagePasted', {
26091
- detail: imageInserterFactory(view, base64Data, fileInfo),
26092
- }));
26093
- };
26094
- reader.readAsDataURL(file);
26134
+ if (!isImageFile(file, clipboardData)) {
26135
+ continue;
26095
26136
  }
26137
+ isImageFilePasted = true;
26138
+ const reader = new FileReader();
26139
+ reader.onloadend = () => {
26140
+ const base64Data = reader.result;
26141
+ const fileInfo = createFileInfo(file);
26142
+ if (inlineImages) {
26143
+ // Once inline images are configured they own the paste
26144
+ // lifecycle; never fall back to the legacy imagePasted
26145
+ // event. Without an upload handler the paste is a no-op.
26146
+ if (inlineImages.upload) {
26147
+ runInlineImageUpload(view, file, base64Data, fileInfo, inlineImages);
26148
+ }
26149
+ return;
26150
+ }
26151
+ view.dom.dispatchEvent(new CustomEvent('imagePasted', {
26152
+ detail: imageInserterFactory(view, base64Data, fileInfo),
26153
+ }));
26154
+ };
26155
+ reader.readAsDataURL(file);
26096
26156
  }
26097
26157
  return isImageFilePasted;
26098
26158
  }
@@ -26152,7 +26212,7 @@ class ImageView {
26152
26212
  const handle = document.createElement('div');
26153
26213
  handle.className = `resize-handle ${position}`;
26154
26214
  handle.setAttribute('role', 'slider');
26155
- handle.setAttribute('aria-label', translate.get('editor-image-view.resize-handle', this.language));
26215
+ handle.setAttribute('aria-label', translations.get('editor-image-view.resize-handle', this.language));
26156
26216
  handle.setAttribute('tabindex', '0');
26157
26217
  handle.setAttribute('aria-valuemin', MIN_WIDTH.toString());
26158
26218
  handle.setAttribute('aria-valuenow', this.img.offsetWidth.toString());
@@ -26193,7 +26253,7 @@ class ImageView {
26193
26253
  this.createLoadingState = () => {
26194
26254
  this.dom.setAttribute('aria-live', 'polite');
26195
26255
  this.dom.setAttribute('aria-busy', 'true');
26196
- this.dom.setAttribute('aria-label', translate.get('editor-image-view.loading', this.language, {
26256
+ this.dom.setAttribute('aria-label', translations.get('editor-image-view.loading', this.language, {
26197
26257
  filename: this.node.attrs.alt || 'file',
26198
26258
  }));
26199
26259
  const spinnerElement = document.createElement('limel-linear-progress');
@@ -26203,7 +26263,7 @@ class ImageView {
26203
26263
  this.createSuccessState = () => {
26204
26264
  this.dom.setAttribute('aria-live', 'polite');
26205
26265
  this.dom.setAttribute('aria-busy', 'false');
26206
- this.dom.setAttribute('aria-label', translate.get('editor-image-view.success', this.language, {
26266
+ this.dom.setAttribute('aria-label', translations.get('editor-image-view.success', this.language, {
26207
26267
  filename: this.node.attrs.alt || 'file',
26208
26268
  }));
26209
26269
  const bottomRightHandle = this.createResizeHandle('bottom-right');
@@ -26214,7 +26274,7 @@ class ImageView {
26214
26274
  this.createFailedState = () => {
26215
26275
  this.dom.setAttribute('aria-live', 'assertive');
26216
26276
  this.dom.setAttribute('aria-busy', 'false');
26217
- this.dom.setAttribute('aria-label', translate.get('editor-image-view.failed', this.language, {
26277
+ this.dom.setAttribute('aria-label', translations.get('editor-image-view.failed', this.language, {
26218
26278
  filename: this.node.attrs.alt || 'file',
26219
26279
  }));
26220
26280
  };
@@ -26286,7 +26346,7 @@ const getMenuItemStates = (menuTypes, menuCommandFactory, view) => {
26286
26346
  const allowedTypes = {};
26287
26347
  for (const type of menuTypes) {
26288
26348
  const command = menuCommandFactory.getCommand(type);
26289
- activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state)) || false;
26349
+ activeTypes[type] = !!((_a = command === null || command === void 0 ? void 0 : command.active) === null || _a === void 0 ? void 0 : _a.call(command, view.state));
26290
26350
  allowedTypes[type] = !!((_c = (_b = command === null || command === void 0 ? void 0 : command.allowed) === null || _b === void 0 ? void 0 : _b.call(command, view.state)) !== null && _c !== void 0 ? _c : true);
26291
26351
  }
26292
26352
  return { active: activeTypes, allowed: allowedTypes };
@@ -26307,11 +26367,12 @@ const createMenuStateTrackingPlugin = (menuTypes, menuCommandFactory, updateCall
26307
26367
  update: (view) => {
26308
26368
  const oldItemStates = actionBarPluginKey.getState(view.state);
26309
26369
  const menuItemStates = getMenuItemStates(menuTypes, menuCommandFactory, view);
26310
- if (!isEqual(oldItemStates, menuItemStates)) {
26311
- const tr = view.state.tr.setMeta(actionBarPluginKey, menuItemStates);
26312
- view.dispatch(tr);
26313
- updateCallback(menuItemStates.active, menuItemStates.allowed);
26370
+ if (isEqual(oldItemStates, menuItemStates)) {
26371
+ return;
26314
26372
  }
26373
+ const tr = view.state.tr.setMeta(actionBarPluginKey, menuItemStates);
26374
+ view.dispatch(tr);
26375
+ updateCallback(menuItemStates.active, menuItemStates.allowed);
26315
26376
  },
26316
26377
  }),
26317
26378
  });
@@ -26537,20 +26598,21 @@ const detectTriggerRemoval = (transaction, activeTrigger, resetActiveTrigger, co
26537
26598
  return false;
26538
26599
  }
26539
26600
  for (const step of transaction.steps) {
26540
- if (step instanceof ReplaceStep) {
26541
- const { from, to, slice } = step; // Access properties specific to ReplaceStep
26542
- // Check if the step affects the trigger position
26543
- if (from <= activeTrigger.position &&
26544
- to >= activeTrigger.position) {
26545
- const text = slice.content.textBetween(0, slice.content.size, '');
26546
- // Check if the trigger character has been removed
26547
- // `text` is the text after the step has been applied
26548
- if (!text.includes(activeTrigger.character)) {
26549
- resetActiveTrigger();
26550
- sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
26551
- return true;
26552
- }
26553
- }
26601
+ if (!(step instanceof ReplaceStep)) {
26602
+ continue;
26603
+ }
26604
+ const { from, to, slice } = step; // Access properties specific to ReplaceStep
26605
+ // Check if the step affects the trigger position
26606
+ if (!(from <= activeTrigger.position && to >= activeTrigger.position)) {
26607
+ continue;
26608
+ }
26609
+ const text = slice.content.textBetween(0, slice.content.size, '');
26610
+ // Check if the trigger character has been removed
26611
+ // `text` is the text after the step has been applied
26612
+ if (!text.includes(activeTrigger.character)) {
26613
+ resetActiveTrigger();
26614
+ sendTriggerEvent('triggerStop', view, contentConverter, activeTrigger, '');
26615
+ return true;
26554
26616
  }
26555
26617
  }
26556
26618
  return false;
@@ -28022,9 +28084,9 @@ const createNodeSpec = (config) => {
28022
28084
  tag: tag,
28023
28085
  getAttrs: (dom) => {
28024
28086
  const attributes = {};
28025
- // eslint-disable-next-line unicorn/no-array-for-each
28026
- config.attributes.forEach((attribute) => (attributes[attribute] =
28027
- dom.getAttribute(attribute)));
28087
+ for (const attribute of config.attributes) {
28088
+ attributes[attribute] = dom.getAttribute(attribute);
28089
+ }
28028
28090
  return attributes;
28029
28091
  },
28030
28092
  },
@@ -28205,7 +28267,7 @@ function areFrequencyMapsEqual(map1, map2) {
28205
28267
  if (map1.size !== map2.size) {
28206
28268
  return false;
28207
28269
  }
28208
- for (const [key, count] of map1.entries()) {
28270
+ for (const [key, count] of map1) {
28209
28271
  if (map2.get(key) !== count) {
28210
28272
  return false;
28211
28273
  }
@@ -28277,7 +28339,7 @@ const ProsemirrorAdapter = class {
28277
28339
  if (isItem(item)) {
28278
28340
  const translationId = menuTranslationIDs[item.value];
28279
28341
  if (translationId) {
28280
- newItem.text = translate.get(translationId, this.language);
28342
+ newItem.text = translations.get(translationId, this.language);
28281
28343
  }
28282
28344
  }
28283
28345
  return newItem;
@@ -28287,7 +28349,9 @@ const ProsemirrorAdapter = class {
28287
28349
  .map(this.getTranslatedItem)
28288
28350
  .map((item) => {
28289
28351
  if (isItem(item)) {
28290
- return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value], disabled: !allowedTypes[item.value] });
28352
+ return Object.assign(Object.assign({}, item), { selected: activeTypes[item.value],
28353
+ // eslint-disable-next-line unicorn/no-computed-property-existence-check -- reads a boolean value, not key existence
28354
+ disabled: !allowedTypes[item.value] });
28291
28355
  }
28292
28356
  return item;
28293
28357
  });
@@ -28344,35 +28408,38 @@ const ProsemirrorAdapter = class {
28344
28408
  };
28345
28409
  this.handleFocus = () => {
28346
28410
  var _a;
28347
- if (!this.disabled) {
28348
- (_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
28349
- // Workaround: On some focus interactions (especially clicking the first line and the last line),
28350
- // ProseMirror does not dispatch a transaction or update the selection. This can cause
28351
- // the cursor to fall back to the end of the document instead of placing it where the user clicked.
28352
- //
28353
- // To detect this, we wait one tick after focus. If no transaction has fired by then,
28354
- // we assume the selection is unresolved and manually move the cursor to the last clicked position.
28355
- //
28356
- // The clicked position is only meaningful for the focus event that the
28357
- // click itself triggered, so it is consumed here and cleared on blur.
28358
- // Focus regained without a click (e.g. switching back to the window)
28359
- // must leave the selection untouched.
28360
- this.transactionFired = false;
28361
- this.focusRestoreTimeout = setTimeout(() => {
28362
- const clickedPos = this.lastClickedPos;
28363
- this.lastClickedPos = null;
28364
- if (!this.transactionFired &&
28365
- clickedPos !== null &&
28366
- clickedPos <= this.view.state.doc.content.size) {
28367
- const { doc, tr } = this.view.state;
28368
- const resolvedPos = doc.resolve(clickedPos);
28369
- const selection = Selection.near(resolvedPos);
28370
- tr.setMeta('pointer', true);
28371
- this.view.dispatch(tr.setSelection(selection));
28372
- }
28373
- }, 0);
28411
+ if (this.disabled) {
28412
+ return;
28374
28413
  }
28414
+ (_a = this.view) === null || _a === void 0 ? void 0 : _a.focus();
28415
+ // Workaround: On some focus interactions (especially clicking the first line and the last line),
28416
+ // ProseMirror does not dispatch a transaction or update the selection. This can cause
28417
+ // the cursor to fall back to the end of the document instead of placing it where the user clicked.
28418
+ //
28419
+ // To detect this, we wait one tick after focus. If no transaction has fired by then,
28420
+ // we assume the selection is unresolved and manually move the cursor to the last clicked position.
28421
+ //
28422
+ // The clicked position is only meaningful for the focus event that the
28423
+ // click itself triggered, so it is consumed here and cleared on blur.
28424
+ // Focus regained without a click (e.g. switching back to the window)
28425
+ // must leave the selection untouched.
28426
+ this.transactionFired = false;
28427
+ this.focusRestoreTimeout = setTimeout(() => {
28428
+ const clickedPos = this.lastClickedPos;
28429
+ this.lastClickedPos = null;
28430
+ if (this.transactionFired ||
28431
+ clickedPos === null ||
28432
+ clickedPos > this.view.state.doc.content.size) {
28433
+ return;
28434
+ }
28435
+ const { doc, tr } = this.view.state;
28436
+ const resolvedPos = doc.resolve(clickedPos);
28437
+ const selection = Selection.near(resolvedPos);
28438
+ tr.setMeta('pointer', true);
28439
+ this.view.dispatch(tr.setSelection(selection));
28440
+ }, 0);
28375
28441
  };
28442
+ // eslint-disable-next-line unicorn/prefer-default-parameters -- a default parameter would not cover an empty string
28376
28443
  this.handleNewLinkSelection = (text, href) => {
28377
28444
  this.link.text = text;
28378
28445
  this.link.href = href || 'https://';
@@ -28499,13 +28566,13 @@ const ProsemirrorAdapter = class {
28499
28566
  (_e = this.view) === null || _e === void 0 ? void 0 : _e.destroy();
28500
28567
  }
28501
28568
  render() {
28502
- return (h(Host, { key: '19a2071a0e50b4c9e95006ae12e44ec14df7460b', onFocus: this.handleFocus }, h("div", { key: 'f1215347c7eaf79cd16c9219c124ace3ebb22fc7', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
28569
+ return (h(Host, { key: '16ef71481dea1fcefa1735e5a6350f47bf1d78ca', onFocus: this.handleFocus }, h("div", { key: '3b6598d8efd561afb6191d3d650f3a32e86f6904', id: "editor" }), this.renderToolbar(), this.renderLinkMenu()));
28503
28570
  }
28504
28571
  renderToolbar() {
28505
28572
  if (this.actionBarItems.length === 0 || this.ui === 'no-toolbar') {
28506
28573
  return;
28507
28574
  }
28508
- return (h("div", { class: "toolbar" }, h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel: translate.get('editor-menu.toolbar', this.language), actions: this.actionBarItems, onItemSelected: this.handleActionBarItem })));
28575
+ return (h("div", { class: "toolbar" }, h("limel-action-bar", { ref: (el) => (this.actionBarElement = el), accessibleLabel: translations.get('editor-menu.toolbar', this.language), actions: this.actionBarItems, onItemSelected: this.handleActionBarItem })));
28509
28576
  }
28510
28577
  renderLinkMenu() {
28511
28578
  if (!this.isLinkMenuOpen) {
@@ -28618,17 +28685,18 @@ const ProsemirrorAdapter = class {
28618
28685
  }
28619
28686
  }
28620
28687
  metadataEmitter(metadata) {
28621
- if (hasMetadataChanged(this.metadata, metadata)) {
28622
- this.removeImagesFromCache(this.metadata, metadata);
28623
- this.metadata = metadata;
28624
- this.metadataChange.emit(metadata);
28688
+ if (!hasMetadataChanged(this.metadata, metadata)) {
28689
+ return;
28625
28690
  }
28691
+ this.removeImagesFromCache(this.metadata, metadata);
28692
+ this.metadata = metadata;
28693
+ this.metadataChange.emit(metadata);
28626
28694
  }
28627
28695
  // When the deprecated metadata events are removed, this cache eviction
28628
28696
  // must be kept: re-derive the removed fileInfoIds from the node attrs so
28629
28697
  // pasted images still get evicted from `imageCache` when deleted.
28630
28698
  removeImagesFromCache(oldMetadata, newMetadata) {
28631
- const removedImages = oldMetadata.images.filter((oldImage) => !newMetadata.images.some((newImage) => newImage.fileInfoId === oldImage.fileInfoId));
28699
+ const removedImages = oldMetadata.images.filter((oldImage) => newMetadata.images.every((newImage) => newImage.fileInfoId !== oldImage.fileInfoId));
28632
28700
  for (const image of removedImages) {
28633
28701
  imageCache.delete(image.fileInfoId);
28634
28702
  this.imageRemoved.emit(image);