@vc-shell/framework 2.0.0 → 2.0.1

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 (193) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/ai-agent/index.js.map +1 -0
  3. package/dist/chunks/ExtensionPoint.vue_vue_type_style_index_0_lang-B1R06zHa.js.map +1 -0
  4. package/dist/chunks/VcAiAgentPanel.vue_vue_type_style_index_0_lang-D0kWIlz3.js.map +1 -0
  5. package/dist/chunks/{VcTableAdapter.vue_vue_type_style_index_0_lang-D71wkuIU.js → VcTableAdapter.vue_vue_type_style_index_0_lang-Dh7DDZB9.js} +5489 -5528
  6. package/dist/chunks/VcTableAdapter.vue_vue_type_style_index_0_lang-Dh7DDZB9.js.map +1 -0
  7. package/dist/chunks/index-BuTo_Lx8.js.map +1 -0
  8. package/dist/chunks/index-CDUdOax4.js.map +1 -0
  9. package/dist/chunks/vendor-boolbase-DYkUBG-P.js.map +1 -0
  10. package/dist/chunks/vendor-cheerio-DE71XQ9x.js.map +1 -0
  11. package/dist/chunks/vendor-cheerio-select-D-qK1Cpo.js.map +1 -0
  12. package/dist/chunks/vendor-css-select-DqoO1-RK.js.map +1 -0
  13. package/dist/chunks/vendor-css-what-CZZaquJM.js.map +1 -0
  14. package/dist/chunks/vendor-cypress-signalr-mock-itnm2wpA.js.map +1 -0
  15. package/dist/chunks/vendor-d3-array-9cpTrqlO.js.map +1 -0
  16. package/dist/chunks/vendor-d3-axis-D1_DbKLz.js.map +1 -0
  17. package/dist/chunks/vendor-d3-brush-CcKeJp9e.js.map +1 -0
  18. package/dist/chunks/vendor-d3-chord-l0sNRNKZ.js.map +1 -0
  19. package/dist/chunks/vendor-d3-color-BOYE6h_9.js.map +1 -0
  20. package/dist/chunks/vendor-d3-dispatch-fx-WMg0D.js.map +1 -0
  21. package/dist/chunks/vendor-d3-drag-l0sNRNKZ.js.map +1 -0
  22. package/dist/chunks/vendor-d3-ease-Cr34gv04.js.map +1 -0
  23. package/dist/chunks/vendor-d3-force-l0sNRNKZ.js.map +1 -0
  24. package/dist/chunks/vendor-d3-format-DaIwZvFc.js.map +1 -0
  25. package/dist/chunks/vendor-d3-geo-l0sNRNKZ.js.map +1 -0
  26. package/dist/chunks/vendor-d3-geo-projection-l0sNRNKZ.js.map +1 -0
  27. package/dist/chunks/vendor-d3-hierarchy-l0sNRNKZ.js.map +1 -0
  28. package/dist/chunks/vendor-d3-interpolate-BYG2gvO4.js.map +1 -0
  29. package/dist/chunks/vendor-d3-interpolate-path-CpGLvKgS.js.map +1 -0
  30. package/dist/chunks/vendor-d3-path-DJOTitNW.js.map +1 -0
  31. package/dist/chunks/vendor-d3-quadtree-l0sNRNKZ.js.map +1 -0
  32. package/dist/chunks/vendor-d3-sankey-l0sNRNKZ.js.map +1 -0
  33. package/dist/chunks/vendor-d3-scale-CC5rtdt5.js.map +1 -0
  34. package/dist/chunks/vendor-d3-selection-CNMxsYiL.js.map +1 -0
  35. package/dist/chunks/vendor-d3-shape-DBhCDMiV.js.map +1 -0
  36. package/dist/chunks/vendor-d3-time-DAPP210_.js.map +1 -0
  37. package/dist/chunks/vendor-d3-time-format-hD7iE2WG.js.map +1 -0
  38. package/dist/chunks/vendor-d3-timer-C1cUWKPz.js.map +1 -0
  39. package/dist/chunks/vendor-d3-transition-BbNQT7qF.js.map +1 -0
  40. package/dist/chunks/vendor-d3-zoom-CcKeJp9e.js.map +1 -0
  41. package/dist/chunks/vendor-date-fns-BKO3x1R1.js.map +1 -0
  42. package/dist/chunks/vendor-dom-serializer-BbVuF1MQ.js.map +1 -0
  43. package/dist/chunks/vendor-domelementtype-B3sFIGaC.js.map +1 -0
  44. package/dist/chunks/vendor-domhandler-Kufn9M_V.js.map +1 -0
  45. package/dist/chunks/vendor-dompurify-DpIUMBYC.js.map +1 -0
  46. package/dist/chunks/vendor-domutils-DDRq_ial.js.map +1 -0
  47. package/dist/chunks/vendor-elkjs-l0sNRNKZ.js.map +1 -0
  48. package/dist/chunks/vendor-emotion-cache-eEZT5l-Q.js.map +1 -0
  49. package/dist/chunks/vendor-emotion-hash-DImMRhyK.js.map +1 -0
  50. package/dist/chunks/vendor-emotion-memoize-BcEUCz8q.js.map +1 -0
  51. package/dist/chunks/vendor-emotion-serialize-BSDW8NwU.js.map +1 -0
  52. package/dist/chunks/vendor-emotion-sheet-CS8ZBl9s.js.map +1 -0
  53. package/dist/chunks/vendor-emotion-unitless-B7u1PU6w.js.map +1 -0
  54. package/dist/chunks/vendor-emotion-utils-D7refZTM.js.map +1 -0
  55. package/dist/chunks/vendor-emotion-weak-memoize-l0sNRNKZ.js.map +1 -0
  56. package/dist/chunks/vendor-entities-J86Og8IU.js.map +1 -0
  57. package/dist/chunks/vendor-floating-ui-core-BoHdh92a.js.map +1 -0
  58. package/dist/chunks/vendor-floating-ui-dom-BvVXFZ4B.js.map +1 -0
  59. package/dist/chunks/vendor-floating-ui-utils-CidJRIm2.js.map +1 -0
  60. package/dist/chunks/vendor-floating-ui-vue-sCrhit51.js.map +1 -0
  61. package/dist/chunks/vendor-gridstack-Beau2jQ7.js.map +1 -0
  62. package/dist/chunks/vendor-headlessui-vue-Cn-RMs4E.js.map +1 -0
  63. package/dist/chunks/vendor-htmlparser2-BxKKzWLL.js.map +1 -0
  64. package/dist/chunks/vendor-internmap-Q5729_cS.js.map +1 -0
  65. package/dist/chunks/vendor-intlify-core-base-Cf8V01l9.js.map +1 -0
  66. package/dist/chunks/vendor-intlify-message-compiler-h1txdYa8.js.map +1 -0
  67. package/dist/chunks/vendor-intlify-shared-D4BJYR57.js.map +1 -0
  68. package/dist/chunks/vendor-iso-639-1-BEjYyfKo.js.map +1 -0
  69. package/dist/chunks/vendor-juggle-resize-observer-DiSiNbbT.js.map +1 -0
  70. package/dist/chunks/vendor-kdbush-l0sNRNKZ.js.map +1 -0
  71. package/dist/chunks/vendor-leaflet-l0sNRNKZ.js.map +1 -0
  72. package/dist/chunks/vendor-linkify-it-LzoUhj6C.js.map +1 -0
  73. package/dist/chunks/vendor-linkifyjs-dCH9UYes.js.map +1 -0
  74. package/dist/chunks/vendor-lodash-es-CfnUOh0o.js.map +1 -0
  75. package/dist/chunks/vendor-lodash-l0sNRNKZ.js.map +1 -0
  76. package/dist/chunks/vendor-lucide-vue-next-CwUrzD6N.js.map +1 -0
  77. package/dist/chunks/vendor-maplibre-gl-l0sNRNKZ.js.map +1 -0
  78. package/dist/chunks/vendor-markdown-it-Bs9KEWkF.js.map +1 -0
  79. package/dist/chunks/vendor-markdown-it-task-lists-CHKeJZfk.js.map +1 -0
  80. package/dist/chunks/vendor-mdurl-DZFDNdqC.js.map +1 -0
  81. package/dist/chunks/vendor-microsoft-applicationinsights-analytics-js-ufpnHxNR.js.map +1 -0
  82. package/dist/chunks/vendor-microsoft-applicationinsights-cfgsync-js-BmGq5cEx.js.map +1 -0
  83. package/dist/chunks/vendor-microsoft-applicationinsights-channel-js-BdtUi1l8.js.map +1 -0
  84. package/dist/chunks/vendor-microsoft-applicationinsights-core-js-CR3vyuZc.js.map +1 -0
  85. package/dist/chunks/vendor-microsoft-applicationinsights-dependencies-js-DXmYt4tG.js.map +1 -0
  86. package/dist/chunks/vendor-microsoft-applicationinsights-properties-js-CLbNzgkN.js.map +1 -0
  87. package/dist/chunks/vendor-microsoft-applicationinsights-shims-CGX8KXgN.js.map +1 -0
  88. package/dist/chunks/vendor-microsoft-applicationinsights-web-DzgnK2Mn.js.map +1 -0
  89. package/dist/chunks/vendor-microsoft-dynamicproto-js-D7567TLZ.js.map +1 -0
  90. package/dist/chunks/vendor-microsoft-signalr-Bgpbb4fW.js.map +1 -0
  91. package/dist/chunks/vendor-nevware21-ts-async-BxN_lmkD.js.map +1 -0
  92. package/dist/chunks/vendor-nevware21-ts-utils-Dr-hD3q9.js.map +1 -0
  93. package/dist/chunks/vendor-nth-check-D0N1qpsw.js.map +1 -0
  94. package/dist/chunks/vendor-orderedmap-B3SOk52B.js.map +1 -0
  95. package/dist/chunks/vendor-parse5-htmlparser2-tree-adapter-BUDJ887-.js.map +1 -0
  96. package/dist/chunks/vendor-parse5-zq5Hn0y9.js.map +1 -0
  97. package/dist/chunks/vendor-prettier-2Sf6a5jB.js.map +1 -0
  98. package/dist/chunks/vendor-prosemirror-commands-BaRVaTVO.js.map +1 -0
  99. package/dist/chunks/vendor-prosemirror-dropcursor-PuLxL9JM.js.map +1 -0
  100. package/dist/chunks/vendor-prosemirror-gapcursor-C7MEx13L.js.map +1 -0
  101. package/dist/chunks/vendor-prosemirror-history-_AfZxoMt.js.map +1 -0
  102. package/dist/chunks/vendor-prosemirror-keymap-tvZqK1zZ.js.map +1 -0
  103. package/dist/chunks/vendor-prosemirror-markdown-rpUTSG_Q.js.map +1 -0
  104. package/dist/chunks/vendor-prosemirror-model-DAA3avbR.js.map +1 -0
  105. package/dist/chunks/vendor-prosemirror-schema-list-qDgvFydE.js.map +1 -0
  106. package/dist/chunks/vendor-prosemirror-state-BvFA7AjG.js.map +1 -0
  107. package/dist/chunks/vendor-prosemirror-tables-CbmHRq4G.js.map +1 -0
  108. package/dist/chunks/vendor-prosemirror-transform-DVGD47fI.js.map +1 -0
  109. package/dist/chunks/vendor-prosemirror-view-BW4UqvjQ.js.map +1 -0
  110. package/dist/chunks/vendor-punycode-js-CgGegfA_.js.map +1 -0
  111. package/dist/chunks/vendor-rope-sequence-BWC2FSrq.js.map +1 -0
  112. package/dist/chunks/vendor-sortablejs-Bsvu-FKn.js.map +1 -0
  113. package/dist/chunks/vendor-striptags-DtlgQudQ.js.map +1 -0
  114. package/dist/chunks/vendor-stylis-ClfDrgKE.js.map +1 -0
  115. package/dist/chunks/vendor-supercluster-l0sNRNKZ.js.map +1 -0
  116. package/dist/chunks/vendor-swiper-BgqGfw3Y.js.map +1 -0
  117. package/dist/chunks/vendor-tanstack-virtual-core-l0sNRNKZ.js.map +1 -0
  118. package/dist/chunks/vendor-tanstack-vue-virtual-CD9yLWd7.js.map +1 -0
  119. package/dist/chunks/vendor-three-l0sNRNKZ.js.map +1 -0
  120. package/dist/chunks/vendor-throttle-debounce-CX0imT7m.js.map +1 -0
  121. package/dist/chunks/vendor-tiptap-core-CZbeo7XQ.js.map +1 -0
  122. package/dist/chunks/vendor-tiptap-extension-blockquote-B8uwrgnZ.js.map +1 -0
  123. package/dist/chunks/vendor-tiptap-extension-bold-Ch9pbrZY.js.map +1 -0
  124. package/dist/chunks/vendor-tiptap-extension-code-CVh_mZgz.js.map +1 -0
  125. package/dist/chunks/vendor-tiptap-extension-code-block-CfoUSR2N.js.map +1 -0
  126. package/dist/chunks/vendor-tiptap-extension-document-C4tn-v0L.js.map +1 -0
  127. package/dist/chunks/vendor-tiptap-extension-hard-break-CbK1eM89.js.map +1 -0
  128. package/dist/chunks/vendor-tiptap-extension-heading-BlkYF-RD.js.map +1 -0
  129. package/dist/chunks/vendor-tiptap-extension-horizontal-rule-DjMOsQCA.js.map +1 -0
  130. package/dist/chunks/vendor-tiptap-extension-image-BpqLcXdw.js.map +1 -0
  131. package/dist/chunks/vendor-tiptap-extension-italic-YDdh6jEW.js.map +1 -0
  132. package/dist/chunks/vendor-tiptap-extension-link-CETrc0Mo.js.map +1 -0
  133. package/dist/chunks/vendor-tiptap-extension-list-DsiDvJxK.js.map +1 -0
  134. package/dist/chunks/vendor-tiptap-extension-paragraph-Bcss4jc0.js.map +1 -0
  135. package/dist/chunks/vendor-tiptap-extension-placeholder-ClNjQXk_.js.map +1 -0
  136. package/dist/chunks/vendor-tiptap-extension-strike-BZiBed9b.js.map +1 -0
  137. package/dist/chunks/vendor-tiptap-extension-table-QVjcLO_H.js.map +1 -0
  138. package/dist/chunks/vendor-tiptap-extension-table-cell-CuXZTKj8.js.map +1 -0
  139. package/dist/chunks/vendor-tiptap-extension-table-header-CuXZTKj8.js.map +1 -0
  140. package/dist/chunks/vendor-tiptap-extension-table-row-CuXZTKj8.js.map +1 -0
  141. package/dist/chunks/vendor-tiptap-extension-text-Wofhchrp.js.map +1 -0
  142. package/dist/chunks/vendor-tiptap-extension-text-style-Bc6nvmn0.js.map +1 -0
  143. package/dist/chunks/vendor-tiptap-extension-underline-Bo1pXXDN.js.map +1 -0
  144. package/dist/chunks/vendor-tiptap-extensions-D7eaegpB.js.map +1 -0
  145. package/dist/chunks/vendor-tiptap-markdown-18K1hcU0.js.map +1 -0
  146. package/dist/chunks/vendor-tiptap-pm-yqZPZQMU.js.map +1 -0
  147. package/dist/chunks/vendor-tiptap-starter-kit-ny-AoaO_.js.map +1 -0
  148. package/dist/chunks/vendor-tiptap-vue-3-BNAw8onj.js.map +1 -0
  149. package/dist/chunks/vendor-topojson-client-l0sNRNKZ.js.map +1 -0
  150. package/dist/chunks/vendor-truncate-html-ChA1T5zy.js.map +1 -0
  151. package/dist/chunks/vendor-tslib-l0sNRNKZ.js.map +1 -0
  152. package/dist/chunks/vendor-uc-micro-4lbSaZOs.js.map +1 -0
  153. package/dist/chunks/vendor-unovis-dagre-layout-l0sNRNKZ.js.map +1 -0
  154. package/dist/chunks/vendor-unovis-graphlibrary-l0sNRNKZ.js.map +1 -0
  155. package/dist/chunks/vendor-unovis-ts-stSsHr9j.js.map +1 -0
  156. package/dist/chunks/vendor-unovis-vue-CZWGT3-0.js.map +1 -0
  157. package/dist/chunks/vendor-vee-validate-i18n-zT8NxX3R.js.map +1 -0
  158. package/dist/chunks/vendor-vee-validate-rules-4oWUZPpG.js.map +1 -0
  159. package/dist/chunks/vendor-vue-currency-input-CckB4kjx.js.map +1 -0
  160. package/dist/chunks/vendor-vue-demi-CD9yLWd7.js.map +1 -0
  161. package/dist/chunks/vendor-vue-devtools-api-aVYGocXp.js.map +1 -0
  162. package/dist/chunks/vendor-vue-i18n-LO-EJStU.js.map +1 -0
  163. package/dist/chunks/vendor-vue3-application-insights-CAgbt8pk.js.map +1 -0
  164. package/dist/chunks/vendor-vue3-touch-events-DqysuuWh.js.map +1 -0
  165. package/dist/chunks/vendor-vuepic-vue-datepicker-CaZ_qpJp.js.map +1 -0
  166. package/dist/chunks/vendor-vueuse-components-BW7i7Uhb.js.map +1 -0
  167. package/dist/chunks/vendor-vueuse-core-CEdpDfzx.js.map +1 -0
  168. package/dist/chunks/vendor-vueuse-shared-BlCOXw5g.js.map +1 -0
  169. package/dist/chunks/vendor-w3c-keyname-CLxH8j-f.js.map +1 -0
  170. package/dist/chunks/vendor-web-vitals-ByFgAM-8.js.map +1 -0
  171. package/dist/core/notifications/composables/index.d.ts +1 -0
  172. package/dist/core/notifications/composables/index.d.ts.map +1 -1
  173. package/dist/core/notifications/composables/useBroadcastFilter.d.ts +7 -0
  174. package/dist/core/notifications/composables/useBroadcastFilter.d.ts.map +1 -0
  175. package/dist/core/notifications/index.d.ts +1 -0
  176. package/dist/core/notifications/index.d.ts.map +1 -1
  177. package/dist/core/notifications/store.d.ts +5 -1
  178. package/dist/core/notifications/store.d.ts.map +1 -1
  179. package/dist/core/plugins/signalR/index.d.ts +2 -5
  180. package/dist/core/plugins/signalR/index.d.ts.map +1 -1
  181. package/dist/extensions/index.js.map +1 -0
  182. package/dist/framework.js +1746 -1706
  183. package/dist/framework.js.map +1 -0
  184. package/dist/index.css +1 -1
  185. package/dist/index.d.ts +3 -6
  186. package/dist/index.d.ts.map +1 -1
  187. package/dist/shell/_internal/notifications/composables/useContainer/index.d.ts.map +1 -1
  188. package/dist/tsconfig.tsbuildinfo +1 -1
  189. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  190. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
  191. package/dist/ui/index.js +1 -1
  192. package/dist/ui/index.js.map +1 -0
  193. package/package.json +4 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-prosemirror-state-BvFA7AjG.js","sources":["../../../node_modules/prosemirror-state/dist/index.js"],"sourcesContent":["import { Slice, Fragment, Mark, Node } from 'prosemirror-model';\nimport { ReplaceStep, ReplaceAroundStep, Transform } from 'prosemirror-transform';\n\nconst classesById = Object.create(null);\n/**\nSuperclass for editor selections. Every selection type should\nextend this. Should not be instantiated directly.\n*/\nclass Selection {\n /**\n Initialize a selection with the head and anchor and ranges. If no\n ranges are given, constructs a single range across `$anchor` and\n `$head`.\n */\n constructor(\n /**\n The resolved anchor of the selection (the side that stays in\n place when the selection is modified).\n */\n $anchor, \n /**\n The resolved head of the selection (the side that moves when\n the selection is modified).\n */\n $head, ranges) {\n this.$anchor = $anchor;\n this.$head = $head;\n this.ranges = ranges || [new SelectionRange($anchor.min($head), $anchor.max($head))];\n }\n /**\n The selection's anchor, as an unresolved position.\n */\n get anchor() { return this.$anchor.pos; }\n /**\n The selection's head.\n */\n get head() { return this.$head.pos; }\n /**\n The lower bound of the selection's main range.\n */\n get from() { return this.$from.pos; }\n /**\n The upper bound of the selection's main range.\n */\n get to() { return this.$to.pos; }\n /**\n The resolved lower bound of the selection's main range.\n */\n get $from() {\n return this.ranges[0].$from;\n }\n /**\n The resolved upper bound of the selection's main range.\n */\n get $to() {\n return this.ranges[0].$to;\n }\n /**\n Indicates whether the selection contains any content.\n */\n get empty() {\n let ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++)\n if (ranges[i].$from.pos != ranges[i].$to.pos)\n return false;\n return true;\n }\n /**\n Get the content of this selection as a slice.\n */\n content() {\n return this.$from.doc.slice(this.from, this.to, true);\n }\n /**\n Replace the selection with a slice or, if no slice is given,\n delete the selection. Will append to the given transaction.\n */\n replace(tr, content = Slice.empty) {\n // Put the new selection at the position after the inserted\n // content. When that ended in an inline node, search backwards,\n // to get the position after that node. If not, search forward.\n let lastNode = content.content.lastChild, lastParent = null;\n for (let i = 0; i < content.openEnd; i++) {\n lastParent = lastNode;\n lastNode = lastNode.lastChild;\n }\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n tr.replaceRange(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n if (i == 0)\n selectionToInsertionEnd(tr, mapFrom, (lastNode ? lastNode.isInline : lastParent && lastParent.isTextblock) ? -1 : 1);\n }\n }\n /**\n Replace the selection with the given node, appending the changes\n to the given transaction.\n */\n replaceWith(tr, node) {\n let mapFrom = tr.steps.length, ranges = this.ranges;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n let from = mapping.map($from.pos), to = mapping.map($to.pos);\n if (i) {\n tr.deleteRange(from, to);\n }\n else {\n tr.replaceRangeWith(from, to, node);\n selectionToInsertionEnd(tr, mapFrom, node.isInline ? -1 : 1);\n }\n }\n }\n /**\n Find a valid cursor or leaf node selection starting at the given\n position and searching back if `dir` is negative, and forward if\n positive. When `textOnly` is true, only consider cursor\n selections. Will return null when no valid selection position is\n found.\n */\n static findFrom($pos, dir, textOnly = false) {\n let inner = $pos.parent.inlineContent ? new TextSelection($pos)\n : findSelectionIn($pos.node(0), $pos.parent, $pos.pos, $pos.index(), dir, textOnly);\n if (inner)\n return inner;\n for (let depth = $pos.depth - 1; depth >= 0; depth--) {\n let found = dir < 0\n ? findSelectionIn($pos.node(0), $pos.node(depth), $pos.before(depth + 1), $pos.index(depth), dir, textOnly)\n : findSelectionIn($pos.node(0), $pos.node(depth), $pos.after(depth + 1), $pos.index(depth) + 1, dir, textOnly);\n if (found)\n return found;\n }\n return null;\n }\n /**\n Find a valid cursor or leaf node selection near the given\n position. Searches forward first by default, but if `bias` is\n negative, it will search backwards first.\n */\n static near($pos, bias = 1) {\n return this.findFrom($pos, bias) || this.findFrom($pos, -bias) || new AllSelection($pos.node(0));\n }\n /**\n Find the cursor or leaf node selection closest to the start of\n the given document. Will return an\n [`AllSelection`](https://prosemirror.net/docs/ref/#state.AllSelection) if no valid position\n exists.\n */\n static atStart(doc) {\n return findSelectionIn(doc, doc, 0, 0, 1) || new AllSelection(doc);\n }\n /**\n Find the cursor or leaf node selection closest to the end of the\n given document.\n */\n static atEnd(doc) {\n return findSelectionIn(doc, doc, doc.content.size, doc.childCount, -1) || new AllSelection(doc);\n }\n /**\n Deserialize the JSON representation of a selection. Must be\n implemented for custom classes (as a static class method).\n */\n static fromJSON(doc, json) {\n if (!json || !json.type)\n throw new RangeError(\"Invalid input for Selection.fromJSON\");\n let cls = classesById[json.type];\n if (!cls)\n throw new RangeError(`No selection type ${json.type} defined`);\n return cls.fromJSON(doc, json);\n }\n /**\n To be able to deserialize selections from JSON, custom selection\n classes must register themselves with an ID string, so that they\n can be disambiguated. Try to pick something that's unlikely to\n clash with classes from other modules.\n */\n static jsonID(id, selectionClass) {\n if (id in classesById)\n throw new RangeError(\"Duplicate use of selection JSON ID \" + id);\n classesById[id] = selectionClass;\n selectionClass.prototype.jsonID = id;\n return selectionClass;\n }\n /**\n Get a [bookmark](https://prosemirror.net/docs/ref/#state.SelectionBookmark) for this selection,\n which is a value that can be mapped without having access to a\n current document, and later resolved to a real selection for a\n given document again. (This is used mostly by the history to\n track and restore old selections.) The default implementation of\n this method just converts the selection to a text selection and\n returns the bookmark for that.\n */\n getBookmark() {\n return TextSelection.between(this.$anchor, this.$head).getBookmark();\n }\n}\nSelection.prototype.visible = true;\n/**\nRepresents a selected range in a document.\n*/\nclass SelectionRange {\n /**\n Create a range.\n */\n constructor(\n /**\n The lower bound of the range.\n */\n $from, \n /**\n The upper bound of the range.\n */\n $to) {\n this.$from = $from;\n this.$to = $to;\n }\n}\nlet warnedAboutTextSelection = false;\nfunction checkTextSelection($pos) {\n if (!warnedAboutTextSelection && !$pos.parent.inlineContent) {\n warnedAboutTextSelection = true;\n console[\"warn\"](\"TextSelection endpoint not pointing into a node with inline content (\" + $pos.parent.type.name + \")\");\n }\n}\n/**\nA text selection represents a classical editor selection, with a\nhead (the moving side) and anchor (immobile side), both of which\npoint into textblock nodes. It can be empty (a regular cursor\nposition).\n*/\nclass TextSelection extends Selection {\n /**\n Construct a text selection between the given points.\n */\n constructor($anchor, $head = $anchor) {\n checkTextSelection($anchor);\n checkTextSelection($head);\n super($anchor, $head);\n }\n /**\n Returns a resolved position if this is a cursor selection (an\n empty text selection), and null otherwise.\n */\n get $cursor() { return this.$anchor.pos == this.$head.pos ? this.$head : null; }\n map(doc, mapping) {\n let $head = doc.resolve(mapping.map(this.head));\n if (!$head.parent.inlineContent)\n return Selection.near($head);\n let $anchor = doc.resolve(mapping.map(this.anchor));\n return new TextSelection($anchor.parent.inlineContent ? $anchor : $head, $head);\n }\n replace(tr, content = Slice.empty) {\n super.replace(tr, content);\n if (content == Slice.empty) {\n let marks = this.$from.marksAcross(this.$to);\n if (marks)\n tr.ensureMarks(marks);\n }\n }\n eq(other) {\n return other instanceof TextSelection && other.anchor == this.anchor && other.head == this.head;\n }\n getBookmark() {\n return new TextBookmark(this.anchor, this.head);\n }\n toJSON() {\n return { type: \"text\", anchor: this.anchor, head: this.head };\n }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\" || typeof json.head != \"number\")\n throw new RangeError(\"Invalid input for TextSelection.fromJSON\");\n return new TextSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n }\n /**\n Create a text selection from non-resolved positions.\n */\n static create(doc, anchor, head = anchor) {\n let $anchor = doc.resolve(anchor);\n return new this($anchor, head == anchor ? $anchor : doc.resolve(head));\n }\n /**\n Return a text selection that spans the given positions or, if\n they aren't text positions, find a text selection near them.\n `bias` determines whether the method searches forward (default)\n or backwards (negative number) first. Will fall back to calling\n [`Selection.near`](https://prosemirror.net/docs/ref/#state.Selection^near) when the document\n doesn't contain a valid text position.\n */\n static between($anchor, $head, bias) {\n let dPos = $anchor.pos - $head.pos;\n if (!bias || dPos)\n bias = dPos >= 0 ? 1 : -1;\n if (!$head.parent.inlineContent) {\n let found = Selection.findFrom($head, bias, true) || Selection.findFrom($head, -bias, true);\n if (found)\n $head = found.$head;\n else\n return Selection.near($head, bias);\n }\n if (!$anchor.parent.inlineContent) {\n if (dPos == 0) {\n $anchor = $head;\n }\n else {\n $anchor = (Selection.findFrom($anchor, -bias, true) || Selection.findFrom($anchor, bias, true)).$anchor;\n if (($anchor.pos < $head.pos) != (dPos < 0))\n $anchor = $head;\n }\n }\n return new TextSelection($anchor, $head);\n }\n}\nSelection.jsonID(\"text\", TextSelection);\nclass TextBookmark {\n constructor(anchor, head) {\n this.anchor = anchor;\n this.head = head;\n }\n map(mapping) {\n return new TextBookmark(mapping.map(this.anchor), mapping.map(this.head));\n }\n resolve(doc) {\n return TextSelection.between(doc.resolve(this.anchor), doc.resolve(this.head));\n }\n}\n/**\nA node selection is a selection that points at a single node. All\nnodes marked [selectable](https://prosemirror.net/docs/ref/#model.NodeSpec.selectable) can be the\ntarget of a node selection. In such a selection, `from` and `to`\npoint directly before and after the selected node, `anchor` equals\n`from`, and `head` equals `to`..\n*/\nclass NodeSelection extends Selection {\n /**\n Create a node selection. Does not verify the validity of its\n argument.\n */\n constructor($pos) {\n let node = $pos.nodeAfter;\n let $end = $pos.node(0).resolve($pos.pos + node.nodeSize);\n super($pos, $end);\n this.node = node;\n }\n map(doc, mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n let $pos = doc.resolve(pos);\n if (deleted)\n return Selection.near($pos);\n return new NodeSelection($pos);\n }\n content() {\n return new Slice(Fragment.from(this.node), 0, 0);\n }\n eq(other) {\n return other instanceof NodeSelection && other.anchor == this.anchor;\n }\n toJSON() {\n return { type: \"node\", anchor: this.anchor };\n }\n getBookmark() { return new NodeBookmark(this.anchor); }\n /**\n @internal\n */\n static fromJSON(doc, json) {\n if (typeof json.anchor != \"number\")\n throw new RangeError(\"Invalid input for NodeSelection.fromJSON\");\n return new NodeSelection(doc.resolve(json.anchor));\n }\n /**\n Create a node selection from non-resolved positions.\n */\n static create(doc, from) {\n return new NodeSelection(doc.resolve(from));\n }\n /**\n Determines whether the given node may be selected as a node\n selection.\n */\n static isSelectable(node) {\n return !node.isText && node.type.spec.selectable !== false;\n }\n}\nNodeSelection.prototype.visible = false;\nSelection.jsonID(\"node\", NodeSelection);\nclass NodeBookmark {\n constructor(anchor) {\n this.anchor = anchor;\n }\n map(mapping) {\n let { deleted, pos } = mapping.mapResult(this.anchor);\n return deleted ? new TextBookmark(pos, pos) : new NodeBookmark(pos);\n }\n resolve(doc) {\n let $pos = doc.resolve(this.anchor), node = $pos.nodeAfter;\n if (node && NodeSelection.isSelectable(node))\n return new NodeSelection($pos);\n return Selection.near($pos);\n }\n}\n/**\nA selection type that represents selecting the whole document\n(which can not necessarily be expressed with a text selection, when\nthere are for example leaf block nodes at the start or end of the\ndocument).\n*/\nclass AllSelection extends Selection {\n /**\n Create an all-selection over the given document.\n */\n constructor(doc) {\n super(doc.resolve(0), doc.resolve(doc.content.size));\n }\n replace(tr, content = Slice.empty) {\n if (content == Slice.empty) {\n tr.delete(0, tr.doc.content.size);\n let sel = Selection.atStart(tr.doc);\n if (!sel.eq(tr.selection))\n tr.setSelection(sel);\n }\n else {\n super.replace(tr, content);\n }\n }\n toJSON() { return { type: \"all\" }; }\n /**\n @internal\n */\n static fromJSON(doc) { return new AllSelection(doc); }\n map(doc) { return new AllSelection(doc); }\n eq(other) { return other instanceof AllSelection; }\n getBookmark() { return AllBookmark; }\n}\nSelection.jsonID(\"all\", AllSelection);\nconst AllBookmark = {\n map() { return this; },\n resolve(doc) { return new AllSelection(doc); }\n};\n// FIXME we'll need some awareness of text direction when scanning for selections\n// Try to find a selection inside the given node. `pos` points at the\n// position where the search starts. When `text` is true, only return\n// text selections.\nfunction findSelectionIn(doc, node, pos, index, dir, text = false) {\n if (node.inlineContent)\n return TextSelection.create(doc, pos);\n for (let i = index - (dir > 0 ? 0 : 1); dir > 0 ? i < node.childCount : i >= 0; i += dir) {\n let child = node.child(i);\n if (!child.isAtom) {\n let inner = findSelectionIn(doc, child, pos + dir, dir < 0 ? child.childCount : 0, dir, text);\n if (inner)\n return inner;\n }\n else if (!text && NodeSelection.isSelectable(child)) {\n return NodeSelection.create(doc, pos - (dir < 0 ? child.nodeSize : 0));\n }\n pos += child.nodeSize * dir;\n }\n return null;\n}\nfunction selectionToInsertionEnd(tr, startLen, bias) {\n let last = tr.steps.length - 1;\n if (last < startLen)\n return;\n let step = tr.steps[last];\n if (!(step instanceof ReplaceStep || step instanceof ReplaceAroundStep))\n return;\n let map = tr.mapping.maps[last], end;\n map.forEach((_from, _to, _newFrom, newTo) => { if (end == null)\n end = newTo; });\n tr.setSelection(Selection.near(tr.doc.resolve(end), bias));\n}\n\nconst UPDATED_SEL = 1, UPDATED_MARKS = 2, UPDATED_SCROLL = 4;\n/**\nAn editor state transaction, which can be applied to a state to\ncreate an updated state. Use\n[`EditorState.tr`](https://prosemirror.net/docs/ref/#state.EditorState.tr) to create an instance.\n\nTransactions track changes to the document (they are a subclass of\n[`Transform`](https://prosemirror.net/docs/ref/#transform.Transform)), but also other state changes,\nlike selection updates and adjustments of the set of [stored\nmarks](https://prosemirror.net/docs/ref/#state.EditorState.storedMarks). In addition, you can store\nmetadata properties in a transaction, which are extra pieces of\ninformation that client code or plugins can use to describe what a\ntransaction represents, so that they can update their [own\nstate](https://prosemirror.net/docs/ref/#state.StateField) accordingly.\n\nThe [editor view](https://prosemirror.net/docs/ref/#view.EditorView) uses a few metadata\nproperties: it will attach a property `\"pointer\"` with the value\n`true` to selection transactions directly caused by mouse or touch\ninput, a `\"composition\"` property holding an ID identifying the\ncomposition that caused it to transactions caused by composed DOM\ninput, and a `\"uiEvent\"` property of that may be `\"paste\"`,\n`\"cut\"`, or `\"drop\"`.\n*/\nclass Transaction extends Transform {\n /**\n @internal\n */\n constructor(state) {\n super(state.doc);\n // The step count for which the current selection is valid.\n this.curSelectionFor = 0;\n // Bitfield to track which aspects of the state were updated by\n // this transaction.\n this.updated = 0;\n // Object used to store metadata properties for the transaction.\n this.meta = Object.create(null);\n this.time = Date.now();\n this.curSelection = state.selection;\n this.storedMarks = state.storedMarks;\n }\n /**\n The transaction's current selection. This defaults to the editor\n selection [mapped](https://prosemirror.net/docs/ref/#state.Selection.map) through the steps in the\n transaction, but can be overwritten with\n [`setSelection`](https://prosemirror.net/docs/ref/#state.Transaction.setSelection).\n */\n get selection() {\n if (this.curSelectionFor < this.steps.length) {\n this.curSelection = this.curSelection.map(this.doc, this.mapping.slice(this.curSelectionFor));\n this.curSelectionFor = this.steps.length;\n }\n return this.curSelection;\n }\n /**\n Update the transaction's current selection. Will determine the\n selection that the editor gets when the transaction is applied.\n */\n setSelection(selection) {\n if (selection.$from.doc != this.doc)\n throw new RangeError(\"Selection passed to setSelection must point at the current document\");\n this.curSelection = selection;\n this.curSelectionFor = this.steps.length;\n this.updated = (this.updated | UPDATED_SEL) & ~UPDATED_MARKS;\n this.storedMarks = null;\n return this;\n }\n /**\n Whether the selection was explicitly updated by this transaction.\n */\n get selectionSet() {\n return (this.updated & UPDATED_SEL) > 0;\n }\n /**\n Set the current stored marks.\n */\n setStoredMarks(marks) {\n this.storedMarks = marks;\n this.updated |= UPDATED_MARKS;\n return this;\n }\n /**\n Make sure the current stored marks or, if that is null, the marks\n at the selection, match the given set of marks. Does nothing if\n this is already the case.\n */\n ensureMarks(marks) {\n if (!Mark.sameSet(this.storedMarks || this.selection.$from.marks(), marks))\n this.setStoredMarks(marks);\n return this;\n }\n /**\n Add a mark to the set of stored marks.\n */\n addStoredMark(mark) {\n return this.ensureMarks(mark.addToSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Remove a mark or mark type from the set of stored marks.\n */\n removeStoredMark(mark) {\n return this.ensureMarks(mark.removeFromSet(this.storedMarks || this.selection.$head.marks()));\n }\n /**\n Whether the stored marks were explicitly set for this transaction.\n */\n get storedMarksSet() {\n return (this.updated & UPDATED_MARKS) > 0;\n }\n /**\n @internal\n */\n addStep(step, doc) {\n super.addStep(step, doc);\n this.updated = this.updated & ~UPDATED_MARKS;\n this.storedMarks = null;\n }\n /**\n Update the timestamp for the transaction.\n */\n setTime(time) {\n this.time = time;\n return this;\n }\n /**\n Replace the current selection with the given slice.\n */\n replaceSelection(slice) {\n this.selection.replace(this, slice);\n return this;\n }\n /**\n Replace the selection with the given node. When `inheritMarks` is\n true and the content is inline, it inherits the marks from the\n place where it is inserted.\n */\n replaceSelectionWith(node, inheritMarks = true) {\n let selection = this.selection;\n if (inheritMarks)\n node = node.mark(this.storedMarks || (selection.empty ? selection.$from.marks() : (selection.$from.marksAcross(selection.$to) || Mark.none)));\n selection.replaceWith(this, node);\n return this;\n }\n /**\n Delete the selection.\n */\n deleteSelection() {\n this.selection.replace(this);\n return this;\n }\n /**\n Replace the given range, or the selection if no range is given,\n with a text node containing the given string.\n */\n insertText(text, from, to) {\n let schema = this.doc.type.schema;\n if (from == null) {\n if (!text)\n return this.deleteSelection();\n return this.replaceSelectionWith(schema.text(text), true);\n }\n else {\n if (to == null)\n to = from;\n if (!text)\n return this.deleteRange(from, to);\n let marks = this.storedMarks;\n if (!marks) {\n let $from = this.doc.resolve(from);\n marks = to == from ? $from.marks() : $from.marksAcross(this.doc.resolve(to));\n }\n this.replaceRangeWith(from, to, schema.text(text, marks));\n if (!this.selection.empty && this.selection.to == from + text.length)\n this.setSelection(Selection.near(this.selection.$to));\n return this;\n }\n }\n /**\n Store a metadata property in this transaction, keyed either by\n name or by plugin.\n */\n setMeta(key, value) {\n this.meta[typeof key == \"string\" ? key : key.key] = value;\n return this;\n }\n /**\n Retrieve a metadata property for a given name or plugin.\n */\n getMeta(key) {\n return this.meta[typeof key == \"string\" ? key : key.key];\n }\n /**\n Returns true if this transaction doesn't contain any metadata,\n and can thus safely be extended.\n */\n get isGeneric() {\n for (let _ in this.meta)\n return false;\n return true;\n }\n /**\n Indicate that the editor should scroll the selection into view\n when updated to the state produced by this transaction.\n */\n scrollIntoView() {\n this.updated |= UPDATED_SCROLL;\n return this;\n }\n /**\n True when this transaction has had `scrollIntoView` called on it.\n */\n get scrolledIntoView() {\n return (this.updated & UPDATED_SCROLL) > 0;\n }\n}\n\nfunction bind(f, self) {\n return !self || !f ? f : f.bind(self);\n}\nclass FieldDesc {\n constructor(name, desc, self) {\n this.name = name;\n this.init = bind(desc.init, self);\n this.apply = bind(desc.apply, self);\n }\n}\nconst baseFields = [\n new FieldDesc(\"doc\", {\n init(config) { return config.doc || config.schema.topNodeType.createAndFill(); },\n apply(tr) { return tr.doc; }\n }),\n new FieldDesc(\"selection\", {\n init(config, instance) { return config.selection || Selection.atStart(instance.doc); },\n apply(tr) { return tr.selection; }\n }),\n new FieldDesc(\"storedMarks\", {\n init(config) { return config.storedMarks || null; },\n apply(tr, _marks, _old, state) { return state.selection.$cursor ? tr.storedMarks : null; }\n }),\n new FieldDesc(\"scrollToSelection\", {\n init() { return 0; },\n apply(tr, prev) { return tr.scrolledIntoView ? prev + 1 : prev; }\n })\n];\n// Object wrapping the part of a state object that stays the same\n// across transactions. Stored in the state's `config` property.\nclass Configuration {\n constructor(schema, plugins) {\n this.schema = schema;\n this.plugins = [];\n this.pluginsByKey = Object.create(null);\n this.fields = baseFields.slice();\n if (plugins)\n plugins.forEach(plugin => {\n if (this.pluginsByKey[plugin.key])\n throw new RangeError(\"Adding different instances of a keyed plugin (\" + plugin.key + \")\");\n this.plugins.push(plugin);\n this.pluginsByKey[plugin.key] = plugin;\n if (plugin.spec.state)\n this.fields.push(new FieldDesc(plugin.key, plugin.spec.state, plugin));\n });\n }\n}\n/**\nThe state of a ProseMirror editor is represented by an object of\nthis type. A state is a persistent data structure—it isn't\nupdated, but rather a new state value is computed from an old one\nusing the [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) method.\n\nA state holds a number of built-in fields, and plugins can\n[define](https://prosemirror.net/docs/ref/#state.PluginSpec.state) additional fields.\n*/\nclass EditorState {\n /**\n @internal\n */\n constructor(\n /**\n @internal\n */\n config) {\n this.config = config;\n }\n /**\n The schema of the state's document.\n */\n get schema() {\n return this.config.schema;\n }\n /**\n The plugins that are active in this state.\n */\n get plugins() {\n return this.config.plugins;\n }\n /**\n Apply the given transaction to produce a new state.\n */\n apply(tr) {\n return this.applyTransaction(tr).state;\n }\n /**\n @internal\n */\n filterTransaction(tr, ignore = -1) {\n for (let i = 0; i < this.config.plugins.length; i++)\n if (i != ignore) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.filterTransaction && !plugin.spec.filterTransaction.call(plugin, tr, this))\n return false;\n }\n return true;\n }\n /**\n Verbose variant of [`apply`](https://prosemirror.net/docs/ref/#state.EditorState.apply) that\n returns the precise transactions that were applied (which might\n be influenced by the [transaction\n hooks](https://prosemirror.net/docs/ref/#state.PluginSpec.filterTransaction) of\n plugins) along with the new state.\n */\n applyTransaction(rootTr) {\n if (!this.filterTransaction(rootTr))\n return { state: this, transactions: [] };\n let trs = [rootTr], newState = this.applyInner(rootTr), seen = null;\n // This loop repeatedly gives plugins a chance to respond to\n // transactions as new transactions are added, making sure to only\n // pass the transactions the plugin did not see before.\n for (;;) {\n let haveNew = false;\n for (let i = 0; i < this.config.plugins.length; i++) {\n let plugin = this.config.plugins[i];\n if (plugin.spec.appendTransaction) {\n let n = seen ? seen[i].n : 0, oldState = seen ? seen[i].state : this;\n let tr = n < trs.length &&\n plugin.spec.appendTransaction.call(plugin, n ? trs.slice(n) : trs, oldState, newState);\n if (tr && newState.filterTransaction(tr, i)) {\n tr.setMeta(\"appendedTransaction\", rootTr);\n if (!seen) {\n seen = [];\n for (let j = 0; j < this.config.plugins.length; j++)\n seen.push(j < i ? { state: newState, n: trs.length } : { state: this, n: 0 });\n }\n trs.push(tr);\n newState = newState.applyInner(tr);\n haveNew = true;\n }\n if (seen)\n seen[i] = { state: newState, n: trs.length };\n }\n }\n if (!haveNew)\n return { state: newState, transactions: trs };\n }\n }\n /**\n @internal\n */\n applyInner(tr) {\n if (!tr.before.eq(this.doc))\n throw new RangeError(\"Applying a mismatched transaction\");\n let newInstance = new EditorState(this.config), fields = this.config.fields;\n for (let i = 0; i < fields.length; i++) {\n let field = fields[i];\n newInstance[field.name] = field.apply(tr, this[field.name], this, newInstance);\n }\n return newInstance;\n }\n /**\n Accessor that constructs and returns a new [transaction](https://prosemirror.net/docs/ref/#state.Transaction) from this state.\n */\n get tr() { return new Transaction(this); }\n /**\n Create a new state.\n */\n static create(config) {\n let $config = new Configuration(config.doc ? config.doc.type.schema : config.schema, config.plugins);\n let instance = new EditorState($config);\n for (let i = 0; i < $config.fields.length; i++)\n instance[$config.fields[i].name] = $config.fields[i].init(config, instance);\n return instance;\n }\n /**\n Create a new state based on this one, but with an adjusted set\n of active plugins. State fields that exist in both sets of\n plugins are kept unchanged. Those that no longer exist are\n dropped, and those that are new are initialized using their\n [`init`](https://prosemirror.net/docs/ref/#state.StateField.init) method, passing in the new\n configuration object..\n */\n reconfigure(config) {\n let $config = new Configuration(this.schema, config.plugins);\n let fields = $config.fields, instance = new EditorState($config);\n for (let i = 0; i < fields.length; i++) {\n let name = fields[i].name;\n instance[name] = this.hasOwnProperty(name) ? this[name] : fields[i].init(config, instance);\n }\n return instance;\n }\n /**\n Serialize this state to JSON. If you want to serialize the state\n of plugins, pass an object mapping property names to use in the\n resulting JSON object to plugin objects. The argument may also be\n a string or number, in which case it is ignored, to support the\n way `JSON.stringify` calls `toString` methods.\n */\n toJSON(pluginFields) {\n let result = { doc: this.doc.toJSON(), selection: this.selection.toJSON() };\n if (this.storedMarks)\n result.storedMarks = this.storedMarks.map(m => m.toJSON());\n if (pluginFields && typeof pluginFields == 'object')\n for (let prop in pluginFields) {\n if (prop == \"doc\" || prop == \"selection\")\n throw new RangeError(\"The JSON fields `doc` and `selection` are reserved\");\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (state && state.toJSON)\n result[prop] = state.toJSON.call(plugin, this[plugin.key]);\n }\n return result;\n }\n /**\n Deserialize a JSON representation of a state. `config` should\n have at least a `schema` field, and should contain array of\n plugins to initialize the state with. `pluginFields` can be used\n to deserialize the state of plugins, by associating plugin\n instances with the property names they use in the JSON object.\n */\n static fromJSON(config, json, pluginFields) {\n if (!json)\n throw new RangeError(\"Invalid input for EditorState.fromJSON\");\n if (!config.schema)\n throw new RangeError(\"Required config field 'schema' missing\");\n let $config = new Configuration(config.schema, config.plugins);\n let instance = new EditorState($config);\n $config.fields.forEach(field => {\n if (field.name == \"doc\") {\n instance.doc = Node.fromJSON(config.schema, json.doc);\n }\n else if (field.name == \"selection\") {\n instance.selection = Selection.fromJSON(instance.doc, json.selection);\n }\n else if (field.name == \"storedMarks\") {\n if (json.storedMarks)\n instance.storedMarks = json.storedMarks.map(config.schema.markFromJSON);\n }\n else {\n if (pluginFields)\n for (let prop in pluginFields) {\n let plugin = pluginFields[prop], state = plugin.spec.state;\n if (plugin.key == field.name && state && state.fromJSON &&\n Object.prototype.hasOwnProperty.call(json, prop)) {\n instance[field.name] = state.fromJSON.call(plugin, config, json[prop], instance);\n return;\n }\n }\n instance[field.name] = field.init(config, instance);\n }\n });\n return instance;\n }\n}\n\nfunction bindProps(obj, self, target) {\n for (let prop in obj) {\n let val = obj[prop];\n if (val instanceof Function)\n val = val.bind(self);\n else if (prop == \"handleDOMEvents\")\n val = bindProps(val, self, {});\n target[prop] = val;\n }\n return target;\n}\n/**\nPlugins bundle functionality that can be added to an editor.\nThey are part of the [editor state](https://prosemirror.net/docs/ref/#state.EditorState) and\nmay influence that state and the view that contains it.\n*/\nclass Plugin {\n /**\n Create a plugin.\n */\n constructor(\n /**\n The plugin's [spec object](https://prosemirror.net/docs/ref/#state.PluginSpec).\n */\n spec) {\n this.spec = spec;\n /**\n The [props](https://prosemirror.net/docs/ref/#view.EditorProps) exported by this plugin.\n */\n this.props = {};\n if (spec.props)\n bindProps(spec.props, this, this.props);\n this.key = spec.key ? spec.key.key : createKey(\"plugin\");\n }\n /**\n Extract the plugin's state field from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\nconst keys = Object.create(null);\nfunction createKey(name) {\n if (name in keys)\n return name + \"$\" + ++keys[name];\n keys[name] = 0;\n return name + \"$\";\n}\n/**\nA key is used to [tag](https://prosemirror.net/docs/ref/#state.PluginSpec.key) plugins in a way\nthat makes it possible to find them, given an editor state.\nAssigning a key does mean only one plugin of that type can be\nactive in a state.\n*/\nclass PluginKey {\n /**\n Create a plugin key.\n */\n constructor(name = \"key\") { this.key = createKey(name); }\n /**\n Get the active plugin with this key, if any, from an editor\n state.\n */\n get(state) { return state.config.pluginsByKey[this.key]; }\n /**\n Get the plugin's state from an editor state.\n */\n getState(state) { return state[this.key]; }\n}\n\nexport { AllSelection, EditorState, NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection, Transaction };\n"],"names":["classesById","Selection","$anchor","$head","ranges","SelectionRange","i","tr","content","Slice","lastNode","lastParent","mapFrom","$from","$to","mapping","selectionToInsertionEnd","node","from","to","$pos","dir","textOnly","inner","TextSelection","findSelectionIn","depth","found","bias","AllSelection","doc","json","cls","id","selectionClass","warnedAboutTextSelection","checkTextSelection","marks","other","TextBookmark","anchor","head","dPos","NodeSelection","$end","deleted","pos","Fragment","NodeBookmark","sel","AllBookmark","index","text","child","startLen","last","step","ReplaceStep","ReplaceAroundStep","map","end","_from","_to","_newFrom","newTo","UPDATED_SEL","UPDATED_MARKS","UPDATED_SCROLL","Transaction","Transform","state","selection","Mark","mark","time","slice","inheritMarks","schema","key","value","_","bind","f","self","FieldDesc","name","desc","baseFields","config","instance","_marks","_old","prev","Configuration","plugins","plugin","EditorState","ignore","rootTr","trs","newState","seen","haveNew","n","oldState","j","newInstance","fields","field","$config","pluginFields","result","m","prop","Node","bindProps","obj","target","val","Plugin","spec","createKey","keys","PluginKey"],"mappings":"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","x_google_ignoreList":[0]}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vendor-prosemirror-tables-CbmHRq4G.js","sources":["../../../node_modules/prosemirror-tables/dist/index.js"],"sourcesContent":["import { NodeSelection, Plugin, PluginKey, Selection, SelectionRange, TextSelection } from \"prosemirror-state\";\nimport { Fragment, Slice } from \"prosemirror-model\";\nimport { Decoration, DecorationSet } from \"prosemirror-view\";\nimport { keydownHandler } from \"prosemirror-keymap\";\nimport { Transform } from \"prosemirror-transform\";\n\n//#region src/tablemap.ts\nlet readFromCache;\nlet addToCache;\nif (typeof WeakMap != \"undefined\") {\n\tlet cache = /* @__PURE__ */ new WeakMap();\n\treadFromCache = (key) => cache.get(key);\n\taddToCache = (key, value) => {\n\t\tcache.set(key, value);\n\t\treturn value;\n\t};\n} else {\n\tconst cache = [];\n\tconst cacheSize = 10;\n\tlet cachePos = 0;\n\treadFromCache = (key) => {\n\t\tfor (let i = 0; i < cache.length; i += 2) if (cache[i] == key) return cache[i + 1];\n\t};\n\taddToCache = (key, value) => {\n\t\tif (cachePos == cacheSize) cachePos = 0;\n\t\tcache[cachePos++] = key;\n\t\treturn cache[cachePos++] = value;\n\t};\n}\n/**\n* A table map describes the structure of a given table. To avoid\n* recomputing them all the time, they are cached per table node. To\n* be able to do that, positions saved in the map are relative to the\n* start of the table, rather than the start of the document.\n*\n* @public\n*/\nvar TableMap = class {\n\tconstructor(width, height, map, problems) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\tthis.map = map;\n\t\tthis.problems = problems;\n\t}\n\tfindCell(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) {\n\t\t\tconst curPos = this.map[i];\n\t\t\tif (curPos != pos) continue;\n\t\t\tconst left = i % this.width;\n\t\t\tconst top = i / this.width | 0;\n\t\t\tlet right = left + 1;\n\t\t\tlet bottom = top + 1;\n\t\t\tfor (let j = 1; right < this.width && this.map[i + j] == curPos; j++) right++;\n\t\t\tfor (let j = 1; bottom < this.height && this.map[i + this.width * j] == curPos; j++) bottom++;\n\t\t\treturn {\n\t\t\t\tleft,\n\t\t\t\ttop,\n\t\t\t\tright,\n\t\t\t\tbottom\n\t\t\t};\n\t\t}\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tcolCount(pos) {\n\t\tfor (let i = 0; i < this.map.length; i++) if (this.map[i] == pos) return i % this.width;\n\t\tthrow new RangeError(`No cell with offset ${pos} found`);\n\t}\n\tnextCell(pos, axis, dir) {\n\t\tconst { left, right, top, bottom } = this.findCell(pos);\n\t\tif (axis == \"horiz\") {\n\t\t\tif (dir < 0 ? left == 0 : right == this.width) return null;\n\t\t\treturn this.map[top * this.width + (dir < 0 ? left - 1 : right)];\n\t\t} else {\n\t\t\tif (dir < 0 ? top == 0 : bottom == this.height) return null;\n\t\t\treturn this.map[left + this.width * (dir < 0 ? top - 1 : bottom)];\n\t\t}\n\t}\n\trectBetween(a, b) {\n\t\tconst { left: leftA, right: rightA, top: topA, bottom: bottomA } = this.findCell(a);\n\t\tconst { left: leftB, right: rightB, top: topB, bottom: bottomB } = this.findCell(b);\n\t\treturn {\n\t\t\tleft: Math.min(leftA, leftB),\n\t\t\ttop: Math.min(topA, topB),\n\t\t\tright: Math.max(rightA, rightB),\n\t\t\tbottom: Math.max(bottomA, bottomB)\n\t\t};\n\t}\n\tcellsInRect(rect) {\n\t\tconst result = [];\n\t\tconst seen = {};\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst index = row * this.width + col;\n\t\t\tconst pos = this.map[index];\n\t\t\tif (seen[pos]) continue;\n\t\t\tseen[pos] = true;\n\t\t\tif (col == rect.left && col && this.map[index - 1] == pos || row == rect.top && row && this.map[index - this.width] == pos) continue;\n\t\t\tresult.push(pos);\n\t\t}\n\t\treturn result;\n\t}\n\tpositionAt(row, col, table) {\n\t\tfor (let i = 0, rowStart = 0;; i++) {\n\t\t\tconst rowEnd = rowStart + table.child(i).nodeSize;\n\t\t\tif (i == row) {\n\t\t\t\tlet index = col + row * this.width;\n\t\t\t\tconst rowEndIndex = (row + 1) * this.width;\n\t\t\t\twhile (index < rowEndIndex && this.map[index] < rowStart) index++;\n\t\t\t\treturn index == rowEndIndex ? rowEnd - 1 : this.map[index];\n\t\t\t}\n\t\t\trowStart = rowEnd;\n\t\t}\n\t}\n\tstatic get(table) {\n\t\treturn readFromCache(table) || addToCache(table, computeMap(table));\n\t}\n};\nfunction computeMap(table) {\n\tif (table.type.spec.tableRole != \"table\") throw new RangeError(\"Not a table node: \" + table.type.name);\n\tconst width = findWidth(table), height = table.childCount;\n\tconst map = [];\n\tlet mapPos = 0;\n\tlet problems = null;\n\tconst colWidths = [];\n\tfor (let i = 0, e = width * height; i < e; i++) map[i] = 0;\n\tfor (let row = 0, pos = 0; row < height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tpos++;\n\t\tfor (let i = 0;; i++) {\n\t\t\twhile (mapPos < map.length && map[mapPos] != 0) mapPos++;\n\t\t\tif (i == rowNode.childCount) break;\n\t\t\tconst cellNode = rowNode.child(i);\n\t\t\tconst { colspan, rowspan, colwidth } = cellNode.attrs;\n\t\t\tfor (let h = 0; h < rowspan; h++) {\n\t\t\t\tif (h + row >= height) {\n\t\t\t\t\t(problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"overlong_rowspan\",\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: rowspan - h\n\t\t\t\t\t});\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tconst start = mapPos + h * width;\n\t\t\t\tfor (let w = 0; w < colspan; w++) {\n\t\t\t\t\tif (map[start + w] == 0) map[start + w] = pos;\n\t\t\t\t\telse (problems || (problems = [])).push({\n\t\t\t\t\t\ttype: \"collision\",\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tpos,\n\t\t\t\t\t\tn: colspan - w\n\t\t\t\t\t});\n\t\t\t\t\tconst colW = colwidth && colwidth[w];\n\t\t\t\t\tif (colW) {\n\t\t\t\t\t\tconst widthIndex = (start + w) % width * 2, prev = colWidths[widthIndex];\n\t\t\t\t\t\tif (prev == null || prev != colW && colWidths[widthIndex + 1] == 1) {\n\t\t\t\t\t\t\tcolWidths[widthIndex] = colW;\n\t\t\t\t\t\t\tcolWidths[widthIndex + 1] = 1;\n\t\t\t\t\t\t} else if (prev == colW) colWidths[widthIndex + 1]++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tmapPos += colspan;\n\t\t\tpos += cellNode.nodeSize;\n\t\t}\n\t\tconst expectedPos = (row + 1) * width;\n\t\tlet missing = 0;\n\t\twhile (mapPos < expectedPos) if (map[mapPos++] == 0) missing++;\n\t\tif (missing) (problems || (problems = [])).push({\n\t\t\ttype: \"missing\",\n\t\t\trow,\n\t\t\tn: missing\n\t\t});\n\t\tpos++;\n\t}\n\tif (width === 0 || height === 0) (problems || (problems = [])).push({ type: \"zero_sized\" });\n\tconst tableMap = new TableMap(width, height, map, problems);\n\tlet badWidths = false;\n\tfor (let i = 0; !badWidths && i < colWidths.length; i += 2) if (colWidths[i] != null && colWidths[i + 1] < height) badWidths = true;\n\tif (badWidths) findBadColWidths(tableMap, colWidths, table);\n\treturn tableMap;\n}\nfunction findWidth(table) {\n\tlet width = -1;\n\tlet hasRowSpan = false;\n\tfor (let row = 0; row < table.childCount; row++) {\n\t\tconst rowNode = table.child(row);\n\t\tlet rowWidth = 0;\n\t\tif (hasRowSpan) for (let j = 0; j < row; j++) {\n\t\t\tconst prevRow = table.child(j);\n\t\t\tfor (let i = 0; i < prevRow.childCount; i++) {\n\t\t\t\tconst cell = prevRow.child(i);\n\t\t\t\tif (j + cell.attrs.rowspan > row) rowWidth += cell.attrs.colspan;\n\t\t\t}\n\t\t}\n\t\tfor (let i = 0; i < rowNode.childCount; i++) {\n\t\t\tconst cell = rowNode.child(i);\n\t\t\trowWidth += cell.attrs.colspan;\n\t\t\tif (cell.attrs.rowspan > 1) hasRowSpan = true;\n\t\t}\n\t\tif (width == -1) width = rowWidth;\n\t\telse if (width != rowWidth) width = Math.max(width, rowWidth);\n\t}\n\treturn width;\n}\nfunction findBadColWidths(map, colWidths, table) {\n\tif (!map.problems) map.problems = [];\n\tconst seen = {};\n\tfor (let i = 0; i < map.map.length; i++) {\n\t\tconst pos = map.map[i];\n\t\tif (seen[pos]) continue;\n\t\tseen[pos] = true;\n\t\tconst node = table.nodeAt(pos);\n\t\tif (!node) throw new RangeError(`No cell with offset ${pos} found`);\n\t\tlet updated = null;\n\t\tconst attrs = node.attrs;\n\t\tfor (let j = 0; j < attrs.colspan; j++) {\n\t\t\tconst colWidth = colWidths[(i + j) % map.width * 2];\n\t\t\tif (colWidth != null && (!attrs.colwidth || attrs.colwidth[j] != colWidth)) (updated || (updated = freshColWidth(attrs)))[j] = colWidth;\n\t\t}\n\t\tif (updated) map.problems.unshift({\n\t\t\ttype: \"colwidth mismatch\",\n\t\t\tpos,\n\t\t\tcolwidth: updated\n\t\t});\n\t}\n}\nfunction freshColWidth(attrs) {\n\tif (attrs.colwidth) return attrs.colwidth.slice();\n\tconst result = [];\n\tfor (let i = 0; i < attrs.colspan; i++) result.push(0);\n\treturn result;\n}\n\n//#endregion\n//#region src/schema.ts\nfunction getCellAttrs(dom, extraAttrs) {\n\tif (typeof dom === \"string\") return {};\n\tconst widthAttr = dom.getAttribute(\"data-colwidth\");\n\tconst widths = widthAttr && /^\\d+(,\\d+)*$/.test(widthAttr) ? widthAttr.split(\",\").map((s) => Number(s)) : null;\n\tconst colspan = Number(dom.getAttribute(\"colspan\") || 1);\n\tconst result = {\n\t\tcolspan,\n\t\trowspan: Number(dom.getAttribute(\"rowspan\") || 1),\n\t\tcolwidth: widths && widths.length == colspan ? widths : null\n\t};\n\tfor (const prop in extraAttrs) {\n\t\tconst getter = extraAttrs[prop].getFromDOM;\n\t\tconst value = getter && getter(dom);\n\t\tif (value != null) result[prop] = value;\n\t}\n\treturn result;\n}\nfunction setCellAttrs(node, extraAttrs) {\n\tconst attrs = {};\n\tif (node.attrs.colspan != 1) attrs.colspan = node.attrs.colspan;\n\tif (node.attrs.rowspan != 1) attrs.rowspan = node.attrs.rowspan;\n\tif (node.attrs.colwidth) attrs[\"data-colwidth\"] = node.attrs.colwidth.join(\",\");\n\tfor (const prop in extraAttrs) {\n\t\tconst setter = extraAttrs[prop].setDOMAttr;\n\t\tif (setter) setter(node.attrs[prop], attrs);\n\t}\n\treturn attrs;\n}\nfunction validateColwidth(value) {\n\tif (value === null) return;\n\tif (!Array.isArray(value)) throw new TypeError(\"colwidth must be null or an array\");\n\tfor (const item of value) if (typeof item !== \"number\") throw new TypeError(\"colwidth must be null or an array of numbers\");\n}\n/**\n* This function creates a set of [node\n* specs](http://prosemirror.net/docs/ref/#model.SchemaSpec.nodes) for\n* `table`, `table_row`, and `table_cell` nodes types as used by this\n* module. The result can then be added to the set of nodes when\n* creating a schema.\n*\n* @public\n*/\nfunction tableNodes(options) {\n\tconst extraAttrs = options.cellAttributes || {};\n\tconst cellAttrs = {\n\t\tcolspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\trowspan: {\n\t\t\tdefault: 1,\n\t\t\tvalidate: \"number\"\n\t\t},\n\t\tcolwidth: {\n\t\t\tdefault: null,\n\t\t\tvalidate: validateColwidth\n\t\t}\n\t};\n\tfor (const prop in extraAttrs) cellAttrs[prop] = {\n\t\tdefault: extraAttrs[prop].default,\n\t\tvalidate: extraAttrs[prop].validate\n\t};\n\treturn {\n\t\ttable: {\n\t\t\tcontent: \"table_row+\",\n\t\t\ttableRole: \"table\",\n\t\t\tisolating: true,\n\t\t\tgroup: options.tableGroup,\n\t\t\tparseDOM: [{ tag: \"table\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"table\", [\"tbody\", 0]];\n\t\t\t}\n\t\t},\n\t\ttable_row: {\n\t\t\tcontent: \"(table_cell | table_header)*\",\n\t\t\ttableRole: \"row\",\n\t\t\tparseDOM: [{ tag: \"tr\" }],\n\t\t\ttoDOM() {\n\t\t\t\treturn [\"tr\", 0];\n\t\t\t}\n\t\t},\n\t\ttable_cell: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"td\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"td\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t},\n\t\ttable_header: {\n\t\t\tcontent: options.cellContent,\n\t\t\tattrs: cellAttrs,\n\t\t\ttableRole: \"header_cell\",\n\t\t\tisolating: true,\n\t\t\tparseDOM: [{\n\t\t\t\ttag: \"th\",\n\t\t\t\tgetAttrs: (dom) => getCellAttrs(dom, extraAttrs)\n\t\t\t}],\n\t\t\ttoDOM(node) {\n\t\t\t\treturn [\n\t\t\t\t\t\"th\",\n\t\t\t\t\tsetCellAttrs(node, extraAttrs),\n\t\t\t\t\t0\n\t\t\t\t];\n\t\t\t}\n\t\t}\n\t};\n}\n/**\n* @public\n*/\nfunction tableNodeTypes(schema) {\n\tlet result = schema.cached.tableNodeTypes;\n\tif (!result) {\n\t\tresult = schema.cached.tableNodeTypes = {};\n\t\tfor (const name in schema.nodes) {\n\t\t\tconst type = schema.nodes[name], role = type.spec.tableRole;\n\t\t\tif (role) result[role] = type;\n\t\t}\n\t}\n\treturn result;\n}\n\n//#endregion\n//#region src/util.ts\n/**\n* @public\n*/\nconst tableEditingKey = new PluginKey(\"selectingCells\");\n/**\n* @public\n*/\nfunction cellAround($pos) {\n\tfor (let d = $pos.depth - 1; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"row\") return $pos.node(0).resolve($pos.before(d + 1));\n\treturn null;\n}\nfunction cellWrapping($pos) {\n\tfor (let d = $pos.depth; d > 0; d--) {\n\t\tconst role = $pos.node(d).type.spec.tableRole;\n\t\tif (role === \"cell\" || role === \"header_cell\") return $pos.node(d);\n\t}\n\treturn null;\n}\n/**\n* @public\n*/\nfunction isInTable(state) {\n\tconst $head = state.selection.$head;\n\tfor (let d = $head.depth; d > 0; d--) if ($head.node(d).type.spec.tableRole == \"row\") return true;\n\treturn false;\n}\n/**\n* @internal\n*/\nfunction selectionCell(state) {\n\tconst sel = state.selection;\n\tif (\"$anchorCell\" in sel && sel.$anchorCell) return sel.$anchorCell.pos > sel.$headCell.pos ? sel.$anchorCell : sel.$headCell;\n\telse if (\"node\" in sel && sel.node && sel.node.type.spec.tableRole == \"cell\") return sel.$anchor;\n\tconst $cell = cellAround(sel.$head) || cellNear(sel.$head);\n\tif ($cell) return $cell;\n\tthrow new RangeError(`No cell found around position ${sel.head}`);\n}\n/**\n* @public\n*/\nfunction cellNear($pos) {\n\tfor (let after = $pos.nodeAfter, pos = $pos.pos; after; after = after.firstChild, pos++) {\n\t\tconst role = after.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos);\n\t}\n\tfor (let before = $pos.nodeBefore, pos = $pos.pos; before; before = before.lastChild, pos--) {\n\t\tconst role = before.type.spec.tableRole;\n\t\tif (role == \"cell\" || role == \"header_cell\") return $pos.doc.resolve(pos - before.nodeSize);\n\t}\n}\n/**\n* @public\n*/\nfunction pointsAtCell($pos) {\n\treturn $pos.parent.type.spec.tableRole == \"row\" && !!$pos.nodeAfter;\n}\n/**\n* @public\n*/\nfunction moveCellForward($pos) {\n\treturn $pos.node(0).resolve($pos.pos + $pos.nodeAfter.nodeSize);\n}\n/**\n* @internal\n*/\nfunction inSameTable($cellA, $cellB) {\n\treturn $cellA.depth == $cellB.depth && $cellA.pos >= $cellB.start(-1) && $cellA.pos <= $cellB.end(-1);\n}\n/**\n* @public\n*/\nfunction findCell($pos) {\n\treturn TableMap.get($pos.node(-1)).findCell($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction colCount($pos) {\n\treturn TableMap.get($pos.node(-1)).colCount($pos.pos - $pos.start(-1));\n}\n/**\n* @public\n*/\nfunction nextCell($pos, axis, dir) {\n\tconst table = $pos.node(-1);\n\tconst map = TableMap.get(table);\n\tconst tableStart = $pos.start(-1);\n\tconst moved = map.nextCell($pos.pos - tableStart, axis, dir);\n\treturn moved == null ? null : $pos.node(0).resolve(tableStart + moved);\n}\n/**\n* @public\n*/\nfunction removeColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan - n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tresult.colwidth.splice(pos, n);\n\t\tif (!result.colwidth.some((w) => w > 0)) result.colwidth = null;\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction addColSpan(attrs, pos, n = 1) {\n\tconst result = {\n\t\t...attrs,\n\t\tcolspan: attrs.colspan + n\n\t};\n\tif (result.colwidth) {\n\t\tresult.colwidth = result.colwidth.slice();\n\t\tfor (let i = 0; i < n; i++) result.colwidth.splice(pos, 0, 0);\n\t}\n\treturn result;\n}\n/**\n* @public\n*/\nfunction columnIsHeader(map, table, col) {\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let row = 0; row < map.height; row++) if (table.nodeAt(map.map[col + row * map.width]).type != headerCell) return false;\n\treturn true;\n}\n\n//#endregion\n//#region src/cellselection.ts\n/**\n* A [`Selection`](http://prosemirror.net/docs/ref/#state.Selection)\n* subclass that represents a cell selection spanning part of a table.\n* With the plugin enabled, these will be created when the user\n* selects across cells, and will be drawn by giving selected cells a\n* `selectedCell` CSS class.\n*\n* @public\n*/\nvar CellSelection = class CellSelection extends Selection {\n\tconstructor($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst rect = map.rectBetween($anchorCell.pos - tableStart, $headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tconst cells = map.cellsInRect(rect).filter((p) => p != $headCell.pos - tableStart);\n\t\tcells.unshift($headCell.pos - tableStart);\n\t\tconst ranges = cells.map((pos) => {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\tconst from = tableStart + pos + 1;\n\t\t\treturn new SelectionRange(doc.resolve(from), doc.resolve(from + cell.content.size));\n\t\t});\n\t\tsuper(ranges[0].$from, ranges[0].$to, ranges);\n\t\tthis.$anchorCell = $anchorCell;\n\t\tthis.$headCell = $headCell;\n\t}\n\tmap(doc, mapping) {\n\t\tconst $anchorCell = doc.resolve(mapping.map(this.$anchorCell.pos));\n\t\tconst $headCell = doc.resolve(mapping.map(this.$headCell.pos));\n\t\tif (pointsAtCell($anchorCell) && pointsAtCell($headCell) && inSameTable($anchorCell, $headCell)) {\n\t\t\tconst tableChanged = this.$anchorCell.node(-1) != $anchorCell.node(-1);\n\t\t\tif (tableChanged && this.isRowSelection()) return CellSelection.rowSelection($anchorCell, $headCell);\n\t\t\telse if (tableChanged && this.isColSelection()) return CellSelection.colSelection($anchorCell, $headCell);\n\t\t\telse return new CellSelection($anchorCell, $headCell);\n\t\t}\n\t\treturn TextSelection.between($anchorCell, $headCell);\n\t}\n\tcontent() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst rect = map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart);\n\t\tconst seen = {};\n\t\tconst rows = [];\n\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\tconst rowContent = [];\n\t\t\tfor (let index = row * map.width + rect.left, col = rect.left; col < rect.right; col++, index++) {\n\t\t\t\tconst pos = map.map[index];\n\t\t\t\tif (seen[pos]) continue;\n\t\t\t\tseen[pos] = true;\n\t\t\t\tconst cellRect = map.findCell(pos);\n\t\t\t\tlet cell = table.nodeAt(pos);\n\t\t\t\tif (!cell) throw new RangeError(`No cell with offset ${pos} found`);\n\t\t\t\tconst extraLeft = rect.left - cellRect.left;\n\t\t\t\tconst extraRight = cellRect.right - rect.right;\n\t\t\t\tif (extraLeft > 0 || extraRight > 0) {\n\t\t\t\t\tlet attrs = cell.attrs;\n\t\t\t\t\tif (extraLeft > 0) attrs = removeColSpan(attrs, 0, extraLeft);\n\t\t\t\t\tif (extraRight > 0) attrs = removeColSpan(attrs, attrs.colspan - extraRight, extraRight);\n\t\t\t\t\tif (cellRect.left < rect.left) {\n\t\t\t\t\t\tcell = cell.type.createAndFill(attrs);\n\t\t\t\t\t\tif (!cell) throw new RangeError(`Could not create cell with attrs ${JSON.stringify(attrs)}`);\n\t\t\t\t\t} else cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\tif (cellRect.top < rect.top || cellRect.bottom > rect.bottom) {\n\t\t\t\t\tconst attrs = {\n\t\t\t\t\t\t...cell.attrs,\n\t\t\t\t\t\trowspan: Math.min(cellRect.bottom, rect.bottom) - Math.max(cellRect.top, rect.top)\n\t\t\t\t\t};\n\t\t\t\t\tif (cellRect.top < rect.top) cell = cell.type.createAndFill(attrs);\n\t\t\t\t\telse cell = cell.type.create(attrs, cell.content);\n\t\t\t\t}\n\t\t\t\trowContent.push(cell);\n\t\t\t}\n\t\t\trows.push(table.child(row).copy(Fragment.from(rowContent)));\n\t\t}\n\t\tconst fragment = this.isColSelection() && this.isRowSelection() ? table : rows;\n\t\treturn new Slice(Fragment.from(fragment), 1, 1);\n\t}\n\treplace(tr, content = Slice.empty) {\n\t\tconst mapFrom = tr.steps.length, ranges = this.ranges;\n\t\tfor (let i = 0; i < ranges.length; i++) {\n\t\t\tconst { $from, $to } = ranges[i], mapping = tr.mapping.slice(mapFrom);\n\t\t\ttr.replace(mapping.map($from.pos), mapping.map($to.pos), i ? Slice.empty : content);\n\t\t}\n\t\tconst sel = Selection.findFrom(tr.doc.resolve(tr.mapping.slice(mapFrom).map(this.to)), -1);\n\t\tif (sel) tr.setSelection(sel);\n\t}\n\treplaceWith(tr, node) {\n\t\tthis.replace(tr, new Slice(Fragment.from(node), 0, 0));\n\t}\n\tforEachCell(f) {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst cells = map.cellsInRect(map.rectBetween(this.$anchorCell.pos - tableStart, this.$headCell.pos - tableStart));\n\t\tfor (let i = 0; i < cells.length; i++) f(table.nodeAt(cells[i]), tableStart + cells[i]);\n\t}\n\tisColSelection() {\n\t\tconst anchorTop = this.$anchorCell.index(-1);\n\t\tconst headTop = this.$headCell.index(-1);\n\t\tif (Math.min(anchorTop, headTop) > 0) return false;\n\t\tconst anchorBottom = anchorTop + this.$anchorCell.nodeAfter.attrs.rowspan;\n\t\tconst headBottom = headTop + this.$headCell.nodeAfter.attrs.rowspan;\n\t\treturn Math.max(anchorBottom, headBottom) == this.$headCell.node(-1).childCount;\n\t}\n\tstatic colSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.top <= headRect.top) {\n\t\t\tif (anchorRect.top > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.left]);\n\t\t\tif (headRect.bottom < map.height) $headCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + headRect.right - 1]);\n\t\t} else {\n\t\t\tif (headRect.top > 0) $headCell = doc.resolve(tableStart + map.map[headRect.left]);\n\t\t\tif (anchorRect.bottom < map.height) $anchorCell = doc.resolve(tableStart + map.map[map.width * (map.height - 1) + anchorRect.right - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\tisRowSelection() {\n\t\tconst table = this.$anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = this.$anchorCell.start(-1);\n\t\tconst anchorLeft = map.colCount(this.$anchorCell.pos - tableStart);\n\t\tconst headLeft = map.colCount(this.$headCell.pos - tableStart);\n\t\tif (Math.min(anchorLeft, headLeft) > 0) return false;\n\t\tconst anchorRight = anchorLeft + this.$anchorCell.nodeAfter.attrs.colspan;\n\t\tconst headRight = headLeft + this.$headCell.nodeAfter.attrs.colspan;\n\t\treturn Math.max(anchorRight, headRight) == map.width;\n\t}\n\teq(other) {\n\t\treturn other instanceof CellSelection && other.$anchorCell.pos == this.$anchorCell.pos && other.$headCell.pos == this.$headCell.pos;\n\t}\n\tstatic rowSelection($anchorCell, $headCell = $anchorCell) {\n\t\tconst table = $anchorCell.node(-1);\n\t\tconst map = TableMap.get(table);\n\t\tconst tableStart = $anchorCell.start(-1);\n\t\tconst anchorRect = map.findCell($anchorCell.pos - tableStart);\n\t\tconst headRect = map.findCell($headCell.pos - tableStart);\n\t\tconst doc = $anchorCell.node(0);\n\t\tif (anchorRect.left <= headRect.left) {\n\t\t\tif (anchorRect.left > 0) $anchorCell = doc.resolve(tableStart + map.map[anchorRect.top * map.width]);\n\t\t\tif (headRect.right < map.width) $headCell = doc.resolve(tableStart + map.map[map.width * (headRect.top + 1) - 1]);\n\t\t} else {\n\t\t\tif (headRect.left > 0) $headCell = doc.resolve(tableStart + map.map[headRect.top * map.width]);\n\t\t\tif (anchorRect.right < map.width) $anchorCell = doc.resolve(tableStart + map.map[map.width * (anchorRect.top + 1) - 1]);\n\t\t}\n\t\treturn new CellSelection($anchorCell, $headCell);\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\ttype: \"cell\",\n\t\t\tanchor: this.$anchorCell.pos,\n\t\t\thead: this.$headCell.pos\n\t\t};\n\t}\n\tstatic fromJSON(doc, json) {\n\t\treturn new CellSelection(doc.resolve(json.anchor), doc.resolve(json.head));\n\t}\n\tstatic create(doc, anchorCell, headCell = anchorCell) {\n\t\treturn new CellSelection(doc.resolve(anchorCell), doc.resolve(headCell));\n\t}\n\tgetBookmark() {\n\t\treturn new CellBookmark(this.$anchorCell.pos, this.$headCell.pos);\n\t}\n};\nCellSelection.prototype.visible = false;\nSelection.jsonID(\"cell\", CellSelection);\n/**\n* @public\n*/\nvar CellBookmark = class CellBookmark {\n\tconstructor(anchor, head) {\n\t\tthis.anchor = anchor;\n\t\tthis.head = head;\n\t}\n\tmap(mapping) {\n\t\treturn new CellBookmark(mapping.map(this.anchor), mapping.map(this.head));\n\t}\n\tresolve(doc) {\n\t\tconst $anchorCell = doc.resolve(this.anchor), $headCell = doc.resolve(this.head);\n\t\tif ($anchorCell.parent.type.spec.tableRole == \"row\" && $headCell.parent.type.spec.tableRole == \"row\" && $anchorCell.index() < $anchorCell.parent.childCount && $headCell.index() < $headCell.parent.childCount && inSameTable($anchorCell, $headCell)) return new CellSelection($anchorCell, $headCell);\n\t\telse return Selection.near($headCell, 1);\n\t}\n};\nfunction drawCellSelection(state) {\n\tif (!(state.selection instanceof CellSelection)) return null;\n\tconst cells = [];\n\tstate.selection.forEachCell((node, pos) => {\n\t\tcells.push(Decoration.node(pos, pos + node.nodeSize, { class: \"selectedCell\" }));\n\t});\n\treturn DecorationSet.create(state.doc, cells);\n}\nfunction isCellBoundarySelection({ $from, $to }) {\n\tif ($from.pos == $to.pos || $from.pos < $to.pos - 6) return false;\n\tlet afterFrom = $from.pos;\n\tlet beforeTo = $to.pos;\n\tlet depth = $from.depth;\n\tfor (; depth >= 0; depth--, afterFrom++) if ($from.after(depth + 1) < $from.end(depth)) break;\n\tfor (let d = $to.depth; d >= 0; d--, beforeTo--) if ($to.before(d + 1) > $to.start(d)) break;\n\treturn afterFrom == beforeTo && /row|table/.test($from.node(depth).type.spec.tableRole);\n}\nfunction isTextSelectionAcrossCells({ $from, $to }) {\n\tlet fromCellBoundaryNode;\n\tlet toCellBoundaryNode;\n\tfor (let i = $from.depth; i > 0; i--) {\n\t\tconst node = $from.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\tfromCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor (let i = $to.depth; i > 0; i--) {\n\t\tconst node = $to.node(i);\n\t\tif (node.type.spec.tableRole === \"cell\" || node.type.spec.tableRole === \"header_cell\") {\n\t\t\ttoCellBoundaryNode = node;\n\t\t\tbreak;\n\t\t}\n\t}\n\treturn fromCellBoundaryNode !== toCellBoundaryNode && $to.parentOffset === 0;\n}\nfunction normalizeSelection(state, tr, allowTableNodeSelection) {\n\tconst sel = (tr || state).selection;\n\tconst doc = (tr || state).doc;\n\tlet normalize;\n\tlet role;\n\tif (sel instanceof NodeSelection && (role = sel.node.type.spec.tableRole)) {\n\t\tif (role == \"cell\" || role == \"header_cell\") normalize = CellSelection.create(doc, sel.from);\n\t\telse if (role == \"row\") {\n\t\t\tconst $cell = doc.resolve(sel.from + 1);\n\t\t\tnormalize = CellSelection.rowSelection($cell, $cell);\n\t\t} else if (!allowTableNodeSelection) {\n\t\t\tconst map = TableMap.get(sel.node);\n\t\t\tconst start = sel.from + 1;\n\t\t\tconst lastCell = start + map.map[map.width * map.height - 1];\n\t\t\tnormalize = CellSelection.create(doc, start + 1, lastCell);\n\t\t}\n\t} else if (sel instanceof TextSelection && isCellBoundarySelection(sel)) normalize = TextSelection.create(doc, sel.from);\n\telse if (sel instanceof TextSelection && isTextSelectionAcrossCells(sel)) normalize = TextSelection.create(doc, sel.$from.start(), sel.$from.end());\n\tif (normalize) (tr || (tr = state.tr)).setSelection(normalize);\n\treturn tr;\n}\n\n//#endregion\n//#region src/fixtables.ts\n/**\n* @public\n*/\nconst fixTablesKey = new PluginKey(\"fix-tables\");\n/**\n* Helper for iterating through the nodes in a document that changed\n* compared to the given previous document. Useful for avoiding\n* duplicate work on each transaction.\n*\n* @public\n*/\nfunction changedDescendants(old, cur, offset, f) {\n\tconst oldSize = old.childCount, curSize = cur.childCount;\n\touter: for (let i = 0, j = 0; i < curSize; i++) {\n\t\tconst child = cur.child(i);\n\t\tfor (let scan = j, e = Math.min(oldSize, i + 3); scan < e; scan++) if (old.child(scan) == child) {\n\t\t\tj = scan + 1;\n\t\t\toffset += child.nodeSize;\n\t\t\tcontinue outer;\n\t\t}\n\t\tf(child, offset);\n\t\tif (j < oldSize && old.child(j).sameMarkup(child)) changedDescendants(old.child(j), child, offset + 1, f);\n\t\telse child.nodesBetween(0, child.content.size, f, offset + 1);\n\t\toffset += child.nodeSize;\n\t}\n}\n/**\n* Inspect all tables in the given state's document and return a\n* transaction that fixes them, if necessary. If `oldState` was\n* provided, that is assumed to hold a previous, known-good state,\n* which will be used to avoid re-scanning unchanged parts of the\n* document.\n*\n* @public\n*/\nfunction fixTables(state, oldState) {\n\tlet tr;\n\tconst check = (node, pos) => {\n\t\tif (node.type.spec.tableRole == \"table\") tr = fixTable(state, node, pos, tr);\n\t};\n\tif (!oldState) state.doc.descendants(check);\n\telse if (oldState.doc != state.doc) changedDescendants(oldState.doc, state.doc, 0, check);\n\treturn tr;\n}\nfunction fixTable(state, table, tablePos, tr) {\n\tconst map = TableMap.get(table);\n\tif (!map.problems) return tr;\n\tif (!tr) tr = state.tr;\n\tconst mustAdd = [];\n\tfor (let i = 0; i < map.height; i++) mustAdd.push(0);\n\tfor (let i = 0; i < map.problems.length; i++) {\n\t\tconst prob = map.problems[i];\n\t\tif (prob.type == \"collision\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\tconst attrs = cell.attrs;\n\t\t\tfor (let j = 0; j < attrs.rowspan; j++) mustAdd[prob.row + j] += prob.n;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, removeColSpan(attrs, attrs.colspan - prob.n, prob.n));\n\t\t} else if (prob.type == \"missing\") mustAdd[prob.row] += prob.n;\n\t\telse if (prob.type == \"overlong_rowspan\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - prob.n\n\t\t\t});\n\t\t} else if (prob.type == \"colwidth mismatch\") {\n\t\t\tconst cell = table.nodeAt(prob.pos);\n\t\t\tif (!cell) continue;\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tablePos + 1 + prob.pos), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\tcolwidth: prob.colwidth\n\t\t\t});\n\t\t} else if (prob.type == \"zero_sized\") {\n\t\t\tconst pos = tr.mapping.map(tablePos);\n\t\t\ttr.delete(pos, pos + table.nodeSize);\n\t\t}\n\t}\n\tlet first, last;\n\tfor (let i = 0; i < mustAdd.length; i++) if (mustAdd[i]) {\n\t\tif (first == null) first = i;\n\t\tlast = i;\n\t}\n\tfor (let i = 0, pos = tablePos + 1; i < map.height; i++) {\n\t\tconst row = table.child(i);\n\t\tconst end = pos + row.nodeSize;\n\t\tconst add = mustAdd[i];\n\t\tif (add > 0) {\n\t\t\tlet role = \"cell\";\n\t\t\tif (row.firstChild) role = row.firstChild.type.spec.tableRole;\n\t\t\tconst nodes = [];\n\t\t\tfor (let j = 0; j < add; j++) {\n\t\t\t\tconst node = tableNodeTypes(state.schema)[role].createAndFill();\n\t\t\t\tif (node) nodes.push(node);\n\t\t\t}\n\t\t\tconst side = (i == 0 || first == i - 1) && last == i ? pos + 1 : end - 1;\n\t\t\ttr.insert(tr.mapping.map(side), nodes);\n\t\t}\n\t\tpos = end;\n\t}\n\treturn tr.setMeta(fixTablesKey, { fixTables: true });\n}\n\n//#endregion\n//#region src/utils/convert.ts\n/**\n* This function will transform the table node into a matrix of rows and columns\n* respecting merged cells, for example this table:\n*\n* ```\n* ┌──────┬──────┬─────────────┐\n* │ A1 │ B1 │ C1 │\n* ├──────┼──────┴──────┬──────┤\n* │ A2 │ B2 │ │\n* ├──────┼─────────────┤ D1 │\n* │ A3 │ B3 │ C3 │ │\n* └──────┴──────┴──────┴──────┘\n* ```\n*\n* will be converted to the below:\n*\n* ```javascript\n* [\n* [A1, B1, C1, null],\n* [A2, B2, null, D1],\n* [A3, B3, C3, null],\n* ]\n* ```\n* @internal\n*/\nfunction convertTableNodeToArrayOfRows(tableNode) {\n\tconst map = TableMap.get(tableNode);\n\tconst rows = [];\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst row = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cellIndex = rowIndex * colCount$1 + colIndex;\n\t\t\tconst cellPos = map.map[cellIndex];\n\t\t\tif (rowIndex > 0) {\n\t\t\t\tconst topCellIndex = cellIndex - colCount$1;\n\t\t\t\tif (cellPos === map.map[topCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (colIndex > 0) {\n\t\t\t\tconst leftCellIndex = cellIndex - 1;\n\t\t\t\tif (cellPos === map.map[leftCellIndex]) {\n\t\t\t\t\trow.push(null);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\trow.push(tableNode.nodeAt(cellPos));\n\t\t}\n\t\trows.push(row);\n\t}\n\treturn rows;\n}\n/**\n* Convert an array of rows to a table node.\n*\n* @internal\n*/\nfunction convertArrayOfRowsToTableNode(tableNode, arrayOfNodes) {\n\tconst newRows = [];\n\tconst map = TableMap.get(tableNode);\n\tconst rowCount = map.height;\n\tconst colCount$1 = map.width;\n\tfor (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n\t\tconst oldRow = tableNode.child(rowIndex);\n\t\tconst newCells = [];\n\t\tfor (let colIndex = 0; colIndex < colCount$1; colIndex++) {\n\t\t\tconst cell = arrayOfNodes[rowIndex][colIndex];\n\t\t\tif (!cell) continue;\n\t\t\tconst cellPos = map.map[rowIndex * map.width + colIndex];\n\t\t\tconst oldCell = tableNode.nodeAt(cellPos);\n\t\t\tif (!oldCell) continue;\n\t\t\tconst newCell = oldCell.type.createChecked(cell.attrs, cell.content, cell.marks);\n\t\t\tnewCells.push(newCell);\n\t\t}\n\t\tconst newRow = oldRow.type.createChecked(oldRow.attrs, newCells, oldRow.marks);\n\t\tnewRows.push(newRow);\n\t}\n\treturn tableNode.type.createChecked(tableNode.attrs, newRows, tableNode.marks);\n}\n\n//#endregion\n//#region src/utils/move-row-in-array-of-rows.ts\n/**\n* Move a row in an array of rows.\n*\n* @internal\n*/\nfunction moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, directionOverride) {\n\tconst direction = indexesOrigin[0] > indexesTarget[0] ? -1 : 1;\n\tconst rowsExtracted = rows.splice(indexesOrigin[0], indexesOrigin.length);\n\tconst positionOffset = rowsExtracted.length % 2 === 0 ? 1 : 0;\n\tlet target;\n\tif (directionOverride === -1 && direction === 1) target = indexesTarget[0] - 1;\n\telse if (directionOverride === 1 && direction === -1) target = indexesTarget[indexesTarget.length - 1] - positionOffset + 1;\n\telse target = direction === -1 ? indexesTarget[0] : indexesTarget[indexesTarget.length - 1] - positionOffset;\n\trows.splice(target, 0, ...rowsExtracted);\n\treturn rows;\n}\n\n//#endregion\n//#region src/utils/query.ts\n/**\n* Checks if the given object is a `CellSelection` instance.\n*\n* @internal\n*/\nfunction isCellSelection(value) {\n\treturn value instanceof CellSelection;\n}\n/**\n* Find the closest table node for a given position.\n*\n* @public\n*/\nfunction findTable($pos) {\n\treturn findParentNode((node) => node.type.spec.tableRole === \"table\", $pos);\n}\n/**\n* Try to find the anchor and head cell in the same table by using the given\n* anchor and head as hit points, or fallback to the selection's anchor and\n* head.\n*\n* @public\n*/\nfunction findCellRange(selection, anchorHit, headHit) {\n\tvar _ref, _ref2;\n\tif (anchorHit == null && headHit == null && isCellSelection(selection)) return [selection.$anchorCell, selection.$headCell];\n\tconst anchor = (_ref = anchorHit !== null && anchorHit !== void 0 ? anchorHit : headHit) !== null && _ref !== void 0 ? _ref : selection.anchor;\n\tconst head = (_ref2 = headHit !== null && headHit !== void 0 ? headHit : anchorHit) !== null && _ref2 !== void 0 ? _ref2 : selection.head;\n\tconst doc = selection.$head.doc;\n\tconst $anchorCell = findCellPos(doc, anchor);\n\tconst $headCell = findCellPos(doc, head);\n\tif ($anchorCell && $headCell && inSameTable($anchorCell, $headCell)) return [$anchorCell, $headCell];\n\treturn null;\n}\n/**\n* Try to find a resolved pos of a cell by using the given pos as a hit point.\n*\n* @public\n*/\nfunction findCellPos(doc, pos) {\n\tconst $pos = doc.resolve(pos);\n\treturn cellAround($pos) || cellNear($pos);\n}\n/**\n* Find the closest parent node that satisfies the predicate.\n*\n* @internal\n*/\nfunction findParentNode(predicate, $pos) {\n\tfor (let depth = $pos.depth; depth >= 0; depth -= 1) {\n\t\tconst node = $pos.node(depth);\n\t\tif (predicate(node)) return {\n\t\t\tnode,\n\t\t\tpos: depth === 0 ? 0 : $pos.before(depth),\n\t\t\tstart: $pos.start(depth),\n\t\t\tdepth\n\t\t};\n\t}\n\treturn null;\n}\n\n//#endregion\n//#region src/utils/get-cells.ts\n/**\n* Returns an array of cells in a column at the specified column index.\n*\n* @internal\n*/\nfunction getCellsInColumn(columnIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (columnIndex < 0 || columnIndex > map.width - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: columnIndex,\n\t\tright: columnIndex + 1,\n\t\ttop: 0,\n\t\tbottom: map.height\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n/**\n* Returns an array of cells in a row at the specified row index.\n*\n* @internal\n*/\nfunction getCellsInRow(rowIndex, selection) {\n\tconst table = findTable(selection.$from);\n\tif (!table) return;\n\tconst map = TableMap.get(table.node);\n\tif (rowIndex < 0 || rowIndex > map.height - 1) return;\n\treturn map.cellsInRect({\n\t\tleft: 0,\n\t\tright: map.width,\n\t\ttop: rowIndex,\n\t\tbottom: rowIndex + 1\n\t}).map((nodePos) => {\n\t\tconst node = table.node.nodeAt(nodePos);\n\t\tconst pos = nodePos + table.start;\n\t\treturn {\n\t\t\tpos,\n\t\t\tstart: pos + 1,\n\t\t\tnode,\n\t\t\tdepth: table.depth + 2\n\t\t};\n\t});\n}\n\n//#endregion\n//#region src/utils/selection-range.ts\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* column at index `columnIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-column.ts#editor/editor-tables/src/utils/get-selection-range-in-column.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInColumn(tr, startColIndex, endColIndex = startColIndex) {\n\tlet startIndex = startColIndex;\n\tlet endIndex = endColIndex;\n\tfor (let i = startColIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startColIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInColumn(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.colspan + i - 1;\n\t\t\tif (cell.node.attrs.colspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInColumn(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedColumnCells = getCellsInColumn(startIndex, tr.selection);\n\tconst firstRowCells = getCellsInRow(0, tr.selection);\n\tif (!firstSelectedColumnCells || !firstRowCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedColumnCells[firstSelectedColumnCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst columnCells = getCellsInColumn(i, tr.selection);\n\t\tif (columnCells && columnCells.length > 0) {\n\t\t\tfor (let j = firstRowCells.length - 1; j >= 0; j--) if (firstRowCells[j].pos === columnCells[0].pos) {\n\t\t\t\theadCell = columnCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n/**\n* Returns a range of rectangular selection spanning all merged cells around a\n* row at index `rowIndex`.\n*\n* Original implementation from Atlassian (Apache License 2.0)\n*\n* https://bitbucket.org/atlassian/atlassian-frontend-mirror/src/5f91cb871e8248bc3bae5ddc30bb9fd9200fadbb/editor/editor-tables/src/utils/get-selection-range-in-row.ts#editor/editor-tables/src/utils/get-selection-range-in-row.ts\n*\n* @internal\n*/\nfunction getSelectionRangeInRow(tr, startRowIndex, endRowIndex = startRowIndex) {\n\tlet startIndex = startRowIndex;\n\tlet endIndex = endRowIndex;\n\tfor (let i = startRowIndex; i >= 0; i--) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (maybeEndIndex >= startIndex) startIndex = i;\n\t\t\tif (maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tfor (let i = startRowIndex; i <= endIndex; i++) {\n\t\tconst cells = getCellsInRow(i, tr.selection);\n\t\tif (cells) cells.forEach((cell) => {\n\t\t\tconst maybeEndIndex = cell.node.attrs.rowspan + i - 1;\n\t\t\tif (cell.node.attrs.rowspan > 1 && maybeEndIndex > endIndex) endIndex = maybeEndIndex;\n\t\t});\n\t}\n\tconst indexes = [];\n\tfor (let i = startIndex; i <= endIndex; i++) {\n\t\tconst maybeCells = getCellsInRow(i, tr.selection);\n\t\tif (maybeCells && maybeCells.length > 0) indexes.push(i);\n\t}\n\tstartIndex = indexes[0];\n\tendIndex = indexes[indexes.length - 1];\n\tconst firstSelectedRowCells = getCellsInRow(startIndex, tr.selection);\n\tconst firstColumnCells = getCellsInColumn(0, tr.selection);\n\tif (!firstSelectedRowCells || !firstColumnCells) return;\n\tconst $anchor = tr.doc.resolve(firstSelectedRowCells[firstSelectedRowCells.length - 1].pos);\n\tlet headCell;\n\tfor (let i = endIndex; i >= startIndex; i--) {\n\t\tconst rowCells = getCellsInRow(i, tr.selection);\n\t\tif (rowCells && rowCells.length > 0) {\n\t\t\tfor (let j = firstColumnCells.length - 1; j >= 0; j--) if (firstColumnCells[j].pos === rowCells[0].pos) {\n\t\t\t\theadCell = rowCells[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (headCell) break;\n\t\t}\n\t}\n\tif (!headCell) return;\n\treturn {\n\t\t$anchor,\n\t\t$head: tr.doc.resolve(headCell.pos),\n\t\tindexes\n\t};\n}\n\n//#endregion\n//#region src/utils/transpose.ts\n/**\n* Transposes a 2D array by flipping columns to rows.\n*\n* Transposition is a familiar algebra concept where the matrix is flipped\n* along its diagonal. For more details, see:\n* https://en.wikipedia.org/wiki/Transpose\n*\n* @example\n* ```javascript\n* const arr = [\n* ['a1', 'a2', 'a3'],\n* ['b1', 'b2', 'b3'],\n* ['c1', 'c2', 'c3'],\n* ['d1', 'd2', 'd3'],\n* ];\n*\n* const result = transpose(arr);\n* result === [\n* ['a1', 'b1', 'c1', 'd1'],\n* ['a2', 'b2', 'c2', 'd2'],\n* ['a3', 'b3', 'c3', 'd3'],\n* ]\n* ```\n*/\nfunction transpose(array) {\n\treturn array[0].map((_, i) => {\n\t\treturn array.map((column) => column[i]);\n\t});\n}\n\n//#endregion\n//#region src/utils/move-column.ts\n/**\n* Move a column from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveColumn(moveColParams) {\n\tvar _getSelectionRangeInC, _getSelectionRangeInC2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveColParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginColumn = (_getSelectionRangeInC = getSelectionRangeInColumn(tr, originIndex)) === null || _getSelectionRangeInC === void 0 ? void 0 : _getSelectionRangeInC.indexes;\n\tconst indexesTargetColumn = (_getSelectionRangeInC2 = getSelectionRangeInColumn(tr, targetIndex)) === null || _getSelectionRangeInC2 === void 0 ? void 0 : _getSelectionRangeInC2.indexes;\n\tif (!indexesOriginColumn || !indexesTargetColumn) return false;\n\tif (indexesOriginColumn.includes(targetIndex)) return false;\n\tconst newTable = moveTableColumn$1(table.node, indexesOriginColumn, indexesTargetColumn, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(map.height - 1, index, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(0, index, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.colSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableColumn$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = transpose(convertTableNodeToArrayOfRows(table));\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\trows = transpose(rows);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/utils/move-row.ts\n/**\n* Move a row from index `origin` to index `target`.\n*\n* @internal\n*/\nfunction moveRow(moveRowParams) {\n\tvar _getSelectionRangeInR, _getSelectionRangeInR2;\n\tconst { tr, originIndex, targetIndex, select, pos } = moveRowParams;\n\tconst table = findTable(tr.doc.resolve(pos));\n\tif (!table) return false;\n\tconst indexesOriginRow = (_getSelectionRangeInR = getSelectionRangeInRow(tr, originIndex)) === null || _getSelectionRangeInR === void 0 ? void 0 : _getSelectionRangeInR.indexes;\n\tconst indexesTargetRow = (_getSelectionRangeInR2 = getSelectionRangeInRow(tr, targetIndex)) === null || _getSelectionRangeInR2 === void 0 ? void 0 : _getSelectionRangeInR2.indexes;\n\tif (!indexesOriginRow || !indexesTargetRow) return false;\n\tif (indexesOriginRow.includes(targetIndex)) return false;\n\tconst newTable = moveTableRow$1(table.node, indexesOriginRow, indexesTargetRow, 0);\n\ttr.replaceWith(table.pos, table.pos + table.node.nodeSize, newTable);\n\tif (!select) return true;\n\tconst map = TableMap.get(newTable);\n\tconst start = table.start;\n\tconst index = targetIndex;\n\tconst lastCell = map.positionAt(index, map.width - 1, newTable);\n\tconst $lastCell = tr.doc.resolve(start + lastCell);\n\tconst firstCell = map.positionAt(index, 0, newTable);\n\tconst $firstCell = tr.doc.resolve(start + firstCell);\n\ttr.setSelection(CellSelection.rowSelection($lastCell, $firstCell));\n\treturn true;\n}\nfunction moveTableRow$1(table, indexesOrigin, indexesTarget, direction) {\n\tlet rows = convertTableNodeToArrayOfRows(table);\n\trows = moveRowInArrayOfRows(rows, indexesOrigin, indexesTarget, direction);\n\treturn convertArrayOfRowsToTableNode(table, rows);\n}\n\n//#endregion\n//#region src/commands.ts\n/**\n* Helper to get the selected rectangle in a table, if any. Adds table\n* map, table node, and table start offset to the object for\n* convenience.\n*\n* @public\n*/\nfunction selectedRect(state) {\n\tconst sel = state.selection;\n\tconst $pos = selectionCell(state);\n\tconst table = $pos.node(-1);\n\tconst tableStart = $pos.start(-1);\n\tconst map = TableMap.get(table);\n\treturn {\n\t\t...sel instanceof CellSelection ? map.rectBetween(sel.$anchorCell.pos - tableStart, sel.$headCell.pos - tableStart) : map.findCell($pos.pos - tableStart),\n\t\ttableStart,\n\t\tmap,\n\t\ttable\n\t};\n}\n/**\n* Add a column at the given position in a table.\n*\n* @public\n*/\nfunction addColumn(tr, { map, tableStart, table }, col) {\n\tlet refColumn = col > 0 ? -1 : 0;\n\tif (columnIsHeader(map, table, col + refColumn)) refColumn = col == 0 || col == map.width ? null : 0;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = row * map.width + col;\n\t\tif (col > 0 && col < map.width && map.map[index - 1] == map.map[index]) {\n\t\t\tconst pos = map.map[index];\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.map(tableStart + pos), null, addColSpan(cell.attrs, col - map.colCount(pos)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t} else {\n\t\t\tconst type = refColumn == null ? tableNodeTypes(table.type.schema).cell : table.nodeAt(map.map[index + refColumn]).type;\n\t\t\tconst pos = map.positionAt(row, col, table);\n\t\t\ttr.insert(tr.mapping.map(tableStart + pos), type.createAndFill());\n\t\t}\n\t}\n\treturn tr;\n}\n/**\n* Command to add a column before the column with the selection.\n*\n* @public\n*/\nfunction addColumnBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.left));\n\t}\n\treturn true;\n}\n/**\n* Command to add a column after the column with the selection.\n*\n* @public\n*/\nfunction addColumnAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addColumn(state.tr, rect, rect.right));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeColumn(tr, { map, table, tableStart }, col) {\n\tconst mapStart = tr.mapping.maps.length;\n\tfor (let row = 0; row < map.height;) {\n\t\tconst index = row * map.width + col;\n\t\tconst pos = map.map[index];\n\t\tconst cell = table.nodeAt(pos);\n\t\tconst attrs = cell.attrs;\n\t\tif (col > 0 && map.map[index - 1] == pos || col < map.width - 1 && map.map[index + 1] == pos) tr.setNodeMarkup(tr.mapping.slice(mapStart).map(tableStart + pos), null, removeColSpan(attrs, col - map.colCount(pos)));\n\t\telse {\n\t\t\tconst start = tr.mapping.slice(mapStart).map(tableStart + pos);\n\t\t\ttr.delete(start, start + cell.nodeSize);\n\t\t}\n\t\trow += attrs.rowspan;\n\t}\n}\n/**\n* Command function that removes the selected columns from a table.\n*\n* @public\n*/\nfunction deleteColumn(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tconst tr = state.tr;\n\t\tif (rect.left == 0 && rect.right == rect.map.width) return false;\n\t\tfor (let i = rect.right - 1;; i--) {\n\t\t\tremoveColumn(tr, rect, i);\n\t\t\tif (i == rect.left) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction rowIsHeader(map, table, row) {\n\tvar _table$nodeAt;\n\tconst headerCell = tableNodeTypes(table.type.schema).header_cell;\n\tfor (let col = 0; col < map.width; col++) if (((_table$nodeAt = table.nodeAt(map.map[col + row * map.width])) === null || _table$nodeAt === void 0 ? void 0 : _table$nodeAt.type) != headerCell) return false;\n\treturn true;\n}\n/**\n* @public\n*/\nfunction addRow(tr, { map, tableStart, table }, row) {\n\tlet rowPos = tableStart;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst cells = [];\n\tlet refRow = row > 0 ? -1 : 0;\n\tif (rowIsHeader(map, table, row + refRow)) refRow = row == 0 || row == map.height ? null : 0;\n\tfor (let col = 0, index = map.width * row; col < map.width; col++, index++) if (row > 0 && row < map.height && map.map[index] == map.map[index - map.width]) {\n\t\tconst pos = map.map[index];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\ttr.setNodeMarkup(tableStart + pos, null, {\n\t\t\t...attrs,\n\t\t\trowspan: attrs.rowspan + 1\n\t\t});\n\t\tcol += attrs.colspan - 1;\n\t} else {\n\t\tvar _table$nodeAt2;\n\t\tconst type = refRow == null ? tableNodeTypes(table.type.schema).cell : (_table$nodeAt2 = table.nodeAt(map.map[index + refRow * map.width])) === null || _table$nodeAt2 === void 0 ? void 0 : _table$nodeAt2.type;\n\t\tconst node = type === null || type === void 0 ? void 0 : type.createAndFill();\n\t\tif (node) cells.push(node);\n\t}\n\ttr.insert(rowPos, tableNodeTypes(table.type.schema).row.create(null, cells));\n\treturn tr;\n}\n/**\n* Add a table row before the selection.\n*\n* @public\n*/\nfunction addRowBefore(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.top));\n\t}\n\treturn true;\n}\n/**\n* Add a table row after the selection.\n*\n* @public\n*/\nfunction addRowAfter(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state);\n\t\tdispatch(addRow(state.tr, rect, rect.bottom));\n\t}\n\treturn true;\n}\n/**\n* @public\n*/\nfunction removeRow(tr, { map, table, tableStart }, row) {\n\tlet rowPos = 0;\n\tfor (let i = 0; i < row; i++) rowPos += table.child(i).nodeSize;\n\tconst nextRow = rowPos + table.child(row).nodeSize;\n\tconst mapFrom = tr.mapping.maps.length;\n\ttr.delete(rowPos + tableStart, nextRow + tableStart);\n\tconst seen = /* @__PURE__ */ new Set();\n\tfor (let col = 0, index = row * map.width; col < map.width; col++, index++) {\n\t\tconst pos = map.map[index];\n\t\tif (seen.has(pos)) continue;\n\t\tseen.add(pos);\n\t\tif (row > 0 && pos == map.map[index - map.width]) {\n\t\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + tableStart), null, {\n\t\t\t\t...attrs,\n\t\t\t\trowspan: attrs.rowspan - 1\n\t\t\t});\n\t\t\tcol += attrs.colspan - 1;\n\t\t} else if (row < map.height && pos == map.map[index + map.width]) {\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst attrs = cell.attrs;\n\t\t\tconst copy = cell.type.create({\n\t\t\t\t...attrs,\n\t\t\t\trowspan: cell.attrs.rowspan - 1\n\t\t\t}, cell.content);\n\t\t\tconst newPos = map.positionAt(row + 1, col, table);\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(tableStart + newPos), copy);\n\t\t\tcol += attrs.colspan - 1;\n\t\t}\n\t}\n}\n/**\n* Remove the selected rows from a table.\n*\n* @public\n*/\nfunction deleteRow(state, dispatch) {\n\tif (!isInTable(state)) return false;\n\tif (dispatch) {\n\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\tif (rect.top == 0 && rect.bottom == rect.map.height) return false;\n\t\tfor (let i = rect.bottom - 1;; i--) {\n\t\t\tremoveRow(tr, rect, i);\n\t\t\tif (i == rect.top) break;\n\t\t\tconst table = rect.tableStart ? tr.doc.nodeAt(rect.tableStart - 1) : tr.doc;\n\t\t\tif (!table) throw new RangeError(\"No table found\");\n\t\t\trect.table = table;\n\t\t\trect.map = TableMap.get(rect.table);\n\t\t}\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\nfunction isEmpty(cell) {\n\tconst c = cell.content;\n\treturn c.childCount == 1 && c.child(0).isTextblock && c.child(0).childCount == 0;\n}\nfunction cellsOverlapRectangle({ width, height, map }, rect) {\n\tlet indexTop = rect.top * width + rect.left, indexLeft = indexTop;\n\tlet indexBottom = (rect.bottom - 1) * width + rect.left, indexRight = indexTop + (rect.right - rect.left - 1);\n\tfor (let i = rect.top; i < rect.bottom; i++) {\n\t\tif (rect.left > 0 && map[indexLeft] == map[indexLeft - 1] || rect.right < width && map[indexRight] == map[indexRight + 1]) return true;\n\t\tindexLeft += width;\n\t\tindexRight += width;\n\t}\n\tfor (let i = rect.left; i < rect.right; i++) {\n\t\tif (rect.top > 0 && map[indexTop] == map[indexTop - width] || rect.bottom < height && map[indexBottom] == map[indexBottom + width]) return true;\n\t\tindexTop++;\n\t\tindexBottom++;\n\t}\n\treturn false;\n}\n/**\n* Merge the selected cells into a single cell. Only available when\n* the selected cells' outline forms a rectangle.\n*\n* @public\n*/\nfunction mergeCells(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection) || sel.$anchorCell.pos == sel.$headCell.pos) return false;\n\tconst rect = selectedRect(state), { map } = rect;\n\tif (cellsOverlapRectangle(map, rect)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst seen = {};\n\t\tlet content = Fragment.empty;\n\t\tlet mergedPos;\n\t\tlet mergedCell;\n\t\tfor (let row = rect.top; row < rect.bottom; row++) for (let col = rect.left; col < rect.right; col++) {\n\t\t\tconst cellPos = map.map[row * map.width + col];\n\t\t\tconst cell = rect.table.nodeAt(cellPos);\n\t\t\tif (seen[cellPos] || !cell) continue;\n\t\t\tseen[cellPos] = true;\n\t\t\tif (mergedPos == null) {\n\t\t\t\tmergedPos = cellPos;\n\t\t\t\tmergedCell = cell;\n\t\t\t} else {\n\t\t\t\tif (!isEmpty(cell)) content = content.append(cell.content);\n\t\t\t\tconst mapped = tr.mapping.map(cellPos + rect.tableStart);\n\t\t\t\ttr.delete(mapped, mapped + cell.nodeSize);\n\t\t\t}\n\t\t}\n\t\tif (mergedPos == null || mergedCell == null) return true;\n\t\ttr.setNodeMarkup(mergedPos + rect.tableStart, null, {\n\t\t\t...addColSpan(mergedCell.attrs, mergedCell.attrs.colspan, rect.right - rect.left - mergedCell.attrs.colspan),\n\t\t\trowspan: rect.bottom - rect.top\n\t\t});\n\t\tif (content.size > 0) {\n\t\t\tconst end = mergedPos + 1 + mergedCell.content.size;\n\t\t\tconst start = isEmpty(mergedCell) ? mergedPos + 1 : end;\n\t\t\ttr.replaceWith(start + rect.tableStart, end + rect.tableStart, content);\n\t\t}\n\t\ttr.setSelection(new CellSelection(tr.doc.resolve(mergedPos + rect.tableStart)));\n\t\tdispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells. Use the first cell type for the new cells.\n*\n* @public\n*/\nfunction splitCell(state, dispatch) {\n\tconst nodeTypes = tableNodeTypes(state.schema);\n\treturn splitCellWithType(({ node }) => {\n\t\treturn nodeTypes[node.type.spec.tableRole];\n\t})(state, dispatch);\n}\n/**\n* Split a selected cell, whose rowpan or colspan is greater than one,\n* into smaller cells with the cell type (th, td) returned by getType function.\n*\n* @public\n*/\nfunction splitCellWithType(getCellType) {\n\treturn (state, dispatch) => {\n\t\tconst sel = state.selection;\n\t\tlet cellNode;\n\t\tlet cellPos;\n\t\tif (!(sel instanceof CellSelection)) {\n\t\t\tvar _cellAround;\n\t\t\tcellNode = cellWrapping(sel.$from);\n\t\t\tif (!cellNode) return false;\n\t\t\tcellPos = (_cellAround = cellAround(sel.$from)) === null || _cellAround === void 0 ? void 0 : _cellAround.pos;\n\t\t} else {\n\t\t\tif (sel.$anchorCell.pos != sel.$headCell.pos) return false;\n\t\t\tcellNode = sel.$anchorCell.nodeAfter;\n\t\t\tcellPos = sel.$anchorCell.pos;\n\t\t}\n\t\tif (cellNode == null || cellPos == null) return false;\n\t\tif (cellNode.attrs.colspan == 1 && cellNode.attrs.rowspan == 1) return false;\n\t\tif (dispatch) {\n\t\t\tlet baseAttrs = cellNode.attrs;\n\t\t\tconst attrs = [];\n\t\t\tconst colwidth = baseAttrs.colwidth;\n\t\t\tif (baseAttrs.rowspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\trowspan: 1\n\t\t\t};\n\t\t\tif (baseAttrs.colspan > 1) baseAttrs = {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolspan: 1\n\t\t\t};\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tfor (let i = 0; i < rect.right - rect.left; i++) attrs.push(colwidth ? {\n\t\t\t\t...baseAttrs,\n\t\t\t\tcolwidth: colwidth && colwidth[i] ? [colwidth[i]] : null\n\t\t\t} : baseAttrs);\n\t\t\tlet lastCell;\n\t\t\tfor (let row = rect.top; row < rect.bottom; row++) {\n\t\t\t\tlet pos = rect.map.positionAt(row, rect.left, rect.table);\n\t\t\t\tif (row == rect.top) pos += cellNode.nodeSize;\n\t\t\t\tfor (let col = rect.left, i = 0; col < rect.right; col++, i++) {\n\t\t\t\t\tif (col == rect.left && row == rect.top) continue;\n\t\t\t\t\ttr.insert(lastCell = tr.mapping.map(pos + rect.tableStart, 1), getCellType({\n\t\t\t\t\t\tnode: cellNode,\n\t\t\t\t\t\trow,\n\t\t\t\t\t\tcol\n\t\t\t\t\t}).createAndFill(attrs[i]));\n\t\t\t\t}\n\t\t\t}\n\t\t\ttr.setNodeMarkup(cellPos, getCellType({\n\t\t\t\tnode: cellNode,\n\t\t\t\trow: rect.top,\n\t\t\t\tcol: rect.left\n\t\t\t}), attrs[0]);\n\t\t\tif (sel instanceof CellSelection) tr.setSelection(new CellSelection(tr.doc.resolve(sel.$anchorCell.pos), lastCell ? tr.doc.resolve(lastCell) : void 0));\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Returns a command that sets the given attribute to the given value,\n* and is only available when the currently selected cell doesn't\n* already have that attribute set to that value.\n*\n* @public\n*/\nfunction setCellAttr(name, value) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst $cell = selectionCell(state);\n\t\tif ($cell.nodeAfter.attrs[name] === value) return false;\n\t\tif (dispatch) {\n\t\t\tconst tr = state.tr;\n\t\t\tif (state.selection instanceof CellSelection) state.selection.forEachCell((node, pos) => {\n\t\t\t\tif (node.attrs[name] !== value) tr.setNodeMarkup(pos, null, {\n\t\t\t\t\t...node.attrs,\n\t\t\t\t\t[name]: value\n\t\t\t\t});\n\t\t\t});\n\t\t\telse tr.setNodeMarkup($cell.pos, null, {\n\t\t\t\t...$cell.nodeAfter.attrs,\n\t\t\t\t[name]: value\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction deprecated_toggleHeader(type) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst cells = rect.map.cellsInRect(type == \"column\" ? {\n\t\t\t\tleft: rect.left,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.right,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: rect.top,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: rect.bottom\n\t\t\t} : rect);\n\t\t\tconst nodes = cells.map((pos) => rect.table.nodeAt(pos));\n\t\t\tfor (let i = 0; i < cells.length; i++) if (nodes[i].type == types.header_cell) tr.setNodeMarkup(rect.tableStart + cells[i], types.cell, nodes[i].attrs);\n\t\t\tif (tr.steps.length === 0) for (let i = 0; i < cells.length; i++) tr.setNodeMarkup(rect.tableStart + cells[i], types.header_cell, nodes[i].attrs);\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\nfunction isHeaderEnabledByType(type, rect, types) {\n\tconst cellPositions = rect.map.cellsInRect({\n\t\tleft: 0,\n\t\ttop: 0,\n\t\tright: type == \"row\" ? rect.map.width : 1,\n\t\tbottom: type == \"column\" ? rect.map.height : 1\n\t});\n\tfor (let i = 0; i < cellPositions.length; i++) {\n\t\tconst cell = rect.table.nodeAt(cellPositions[i]);\n\t\tif (cell && cell.type !== types.header_cell) return false;\n\t}\n\treturn true;\n}\n/**\n* Toggles between row/column header and normal cells (Only applies to first row/column).\n* For deprecated behavior pass `useDeprecatedLogic` in options with true.\n*\n* @public\n*/\nfunction toggleHeader(type, options) {\n\toptions = options || { useDeprecatedLogic: false };\n\tif (options.useDeprecatedLogic) return deprecated_toggleHeader(type);\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tif (dispatch) {\n\t\t\tconst types = tableNodeTypes(state.schema);\n\t\t\tconst rect = selectedRect(state), tr = state.tr;\n\t\t\tconst isHeaderRowEnabled = isHeaderEnabledByType(\"row\", rect, types);\n\t\t\tconst isHeaderColumnEnabled = isHeaderEnabledByType(\"column\", rect, types);\n\t\t\tconst selectionStartsAt = (type === \"column\" ? isHeaderRowEnabled : type === \"row\" ? isHeaderColumnEnabled : false) ? 1 : 0;\n\t\t\tconst cellsRect = type == \"column\" ? {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: selectionStartsAt,\n\t\t\t\tright: 1,\n\t\t\t\tbottom: rect.map.height\n\t\t\t} : type == \"row\" ? {\n\t\t\t\tleft: selectionStartsAt,\n\t\t\t\ttop: 0,\n\t\t\t\tright: rect.map.width,\n\t\t\t\tbottom: 1\n\t\t\t} : rect;\n\t\t\tconst newType = type == \"column\" ? isHeaderColumnEnabled ? types.cell : types.header_cell : type == \"row\" ? isHeaderRowEnabled ? types.cell : types.header_cell : types.cell;\n\t\t\trect.map.cellsInRect(cellsRect).forEach((relativeCellPos) => {\n\t\t\t\tconst cellPos = relativeCellPos + rect.tableStart;\n\t\t\t\tconst cell = tr.doc.nodeAt(cellPos);\n\t\t\t\tif (cell) tr.setNodeMarkup(cellPos, newType, cell.attrs);\n\t\t\t});\n\t\t\tdispatch(tr);\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Toggles whether the selected row contains header cells.\n*\n* @public\n*/\nconst toggleHeaderRow = toggleHeader(\"row\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected column contains header cells.\n*\n* @public\n*/\nconst toggleHeaderColumn = toggleHeader(\"column\", { useDeprecatedLogic: true });\n/**\n* Toggles whether the selected cells are header cells.\n*\n* @public\n*/\nconst toggleHeaderCell = toggleHeader(\"cell\", { useDeprecatedLogic: true });\nfunction findNextCell($cell, dir) {\n\tif (dir < 0) {\n\t\tconst before = $cell.nodeBefore;\n\t\tif (before) return $cell.pos - before.nodeSize;\n\t\tfor (let row = $cell.index(-1) - 1, rowEnd = $cell.before(); row >= 0; row--) {\n\t\t\tconst rowNode = $cell.node(-1).child(row);\n\t\t\tconst lastChild = rowNode.lastChild;\n\t\t\tif (lastChild) return rowEnd - 1 - lastChild.nodeSize;\n\t\t\trowEnd -= rowNode.nodeSize;\n\t\t}\n\t} else {\n\t\tif ($cell.index() < $cell.parent.childCount - 1) return $cell.pos + $cell.nodeAfter.nodeSize;\n\t\tconst table = $cell.node(-1);\n\t\tfor (let row = $cell.indexAfter(-1), rowStart = $cell.after(); row < table.childCount; row++) {\n\t\t\tconst rowNode = table.child(row);\n\t\t\tif (rowNode.childCount) return rowStart + 1;\n\t\t\trowStart += rowNode.nodeSize;\n\t\t}\n\t}\n\treturn null;\n}\n/**\n* Returns a command for selecting the next (direction=1) or previous\n* (direction=-1) cell in a table.\n*\n* @public\n*/\nfunction goToNextCell(direction) {\n\treturn function(state, dispatch) {\n\t\tif (!isInTable(state)) return false;\n\t\tconst cell = findNextCell(selectionCell(state), direction);\n\t\tif (cell == null) return false;\n\t\tif (dispatch) {\n\t\t\tconst $cell = state.doc.resolve(cell);\n\t\t\tdispatch(state.tr.setSelection(TextSelection.between($cell, moveCellForward($cell))).scrollIntoView());\n\t\t}\n\t\treturn true;\n\t};\n}\n/**\n* Deletes the table around the selection, if any.\n*\n* @public\n*/\nfunction deleteTable(state, dispatch) {\n\tconst $pos = state.selection.$anchor;\n\tfor (let d = $pos.depth; d > 0; d--) if ($pos.node(d).type.spec.tableRole == \"table\") {\n\t\tif (dispatch) dispatch(state.tr.delete($pos.before(d), $pos.after(d)).scrollIntoView());\n\t\treturn true;\n\t}\n\treturn false;\n}\n/**\n* Deletes the content of the selected cells, if they are not empty.\n*\n* @public\n*/\nfunction deleteCellSelection(state, dispatch) {\n\tconst sel = state.selection;\n\tif (!(sel instanceof CellSelection)) return false;\n\tif (dispatch) {\n\t\tconst tr = state.tr;\n\t\tconst baseContent = tableNodeTypes(state.schema).cell.createAndFill().content;\n\t\tsel.forEachCell((cell, pos) => {\n\t\t\tif (!cell.content.eq(baseContent)) tr.replace(tr.mapping.map(pos + 1), tr.mapping.map(pos + cell.nodeSize - 1), new Slice(baseContent, 0, 0));\n\t\t});\n\t\tif (tr.docChanged) dispatch(tr);\n\t}\n\treturn true;\n}\n/**\n* Move a table row from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableRow(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveRow({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n/**\n* Move a table column from index `from` to index `to`.\n*\n* @public\n*/\nfunction moveTableColumn(options) {\n\treturn (state, dispatch) => {\n\t\tconst { from: originIndex, to: targetIndex, select = true, pos = state.selection.from } = options;\n\t\tconst tr = state.tr;\n\t\tif (moveColumn({\n\t\t\ttr,\n\t\t\toriginIndex,\n\t\t\ttargetIndex,\n\t\t\tselect,\n\t\t\tpos\n\t\t})) {\n\t\t\tdispatch === null || dispatch === void 0 || dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t};\n}\n\n//#endregion\n//#region src/copypaste.ts\n/**\n* Get a rectangular area of cells from a slice, or null if the outer\n* nodes of the slice aren't table cells or rows.\n*\n* @internal\n*/\nfunction pastedCells(slice) {\n\tif (slice.size === 0) return null;\n\tlet { content, openStart, openEnd } = slice;\n\twhile (content.childCount == 1 && (openStart > 0 && openEnd > 0 || content.child(0).type.spec.tableRole == \"table\")) {\n\t\topenStart--;\n\t\topenEnd--;\n\t\tcontent = content.child(0).content;\n\t}\n\tconst first = content.child(0);\n\tconst role = first.type.spec.tableRole;\n\tconst schema = first.type.schema, rows = [];\n\tif (role == \"row\") for (let i = 0; i < content.childCount; i++) {\n\t\tlet cells = content.child(i).content;\n\t\tconst left = i ? 0 : Math.max(0, openStart - 1);\n\t\tconst right = i < content.childCount - 1 ? 0 : Math.max(0, openEnd - 1);\n\t\tif (left || right) cells = fitSlice(tableNodeTypes(schema).row, new Slice(cells, left, right)).content;\n\t\trows.push(cells);\n\t}\n\telse if (role == \"cell\" || role == \"header_cell\") rows.push(openStart || openEnd ? fitSlice(tableNodeTypes(schema).row, new Slice(content, openStart, openEnd)).content : content);\n\telse return null;\n\treturn ensureRectangular(schema, rows);\n}\nfunction ensureRectangular(schema, rows) {\n\tconst widths = [];\n\tfor (let i = 0; i < rows.length; i++) {\n\t\tconst row = rows[i];\n\t\tfor (let j = row.childCount - 1; j >= 0; j--) {\n\t\t\tconst { rowspan, colspan } = row.child(j).attrs;\n\t\t\tfor (let r = i; r < i + rowspan; r++) widths[r] = (widths[r] || 0) + colspan;\n\t\t}\n\t}\n\tlet width = 0;\n\tfor (let r = 0; r < widths.length; r++) width = Math.max(width, widths[r]);\n\tfor (let r = 0; r < widths.length; r++) {\n\t\tif (r >= rows.length) rows.push(Fragment.empty);\n\t\tif (widths[r] < width) {\n\t\t\tconst empty = tableNodeTypes(schema).cell.createAndFill();\n\t\t\tconst cells = [];\n\t\t\tfor (let i = widths[r]; i < width; i++) cells.push(empty);\n\t\t\trows[r] = rows[r].append(Fragment.from(cells));\n\t\t}\n\t}\n\treturn {\n\t\theight: rows.length,\n\t\twidth,\n\t\trows\n\t};\n}\nfunction fitSlice(nodeType, slice) {\n\tconst node = nodeType.createAndFill();\n\treturn new Transform(node).replace(0, node.content.size, slice).doc;\n}\n/**\n* Clip or extend (repeat) the given set of cells to cover the given\n* width and height. Will clip rowspan/colspan cells at the edges when\n* they stick out.\n*\n* @internal\n*/\nfunction clipCells({ width, height, rows }, newWidth, newHeight) {\n\tif (width != newWidth) {\n\t\tconst added = [];\n\t\tconst newRows = [];\n\t\tfor (let row = 0; row < rows.length; row++) {\n\t\t\tconst frag = rows[row], cells = [];\n\t\t\tfor (let col = added[row] || 0, i = 0; col < newWidth; i++) {\n\t\t\t\tlet cell = frag.child(i % frag.childCount);\n\t\t\t\tif (col + cell.attrs.colspan > newWidth) cell = cell.type.createChecked(removeColSpan(cell.attrs, cell.attrs.colspan, col + cell.attrs.colspan - newWidth), cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t\tcol += cell.attrs.colspan;\n\t\t\t\tfor (let j = 1; j < cell.attrs.rowspan; j++) added[row + j] = (added[row + j] || 0) + cell.attrs.colspan;\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\twidth = newWidth;\n\t}\n\tif (height != newHeight) {\n\t\tconst newRows = [];\n\t\tfor (let row = 0, i = 0; row < newHeight; row++, i++) {\n\t\t\tconst cells = [], source = rows[i % height];\n\t\t\tfor (let j = 0; j < source.childCount; j++) {\n\t\t\t\tlet cell = source.child(j);\n\t\t\t\tif (row + cell.attrs.rowspan > newHeight) cell = cell.type.create({\n\t\t\t\t\t...cell.attrs,\n\t\t\t\t\trowspan: Math.max(1, newHeight - cell.attrs.rowspan)\n\t\t\t\t}, cell.content);\n\t\t\t\tcells.push(cell);\n\t\t\t}\n\t\t\tnewRows.push(Fragment.from(cells));\n\t\t}\n\t\trows = newRows;\n\t\theight = newHeight;\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\trows\n\t};\n}\nfunction growTable(tr, map, table, start, width, height, mapFrom) {\n\tconst schema = tr.doc.type.schema;\n\tconst types = tableNodeTypes(schema);\n\tlet empty;\n\tlet emptyHead;\n\tif (width > map.width) for (let row = 0, rowEnd = 0; row < map.height; row++) {\n\t\tconst rowNode = table.child(row);\n\t\trowEnd += rowNode.nodeSize;\n\t\tconst cells = [];\n\t\tlet add;\n\t\tif (rowNode.lastChild == null || rowNode.lastChild.type == types.cell) add = empty || (empty = types.cell.createAndFill());\n\t\telse add = emptyHead || (emptyHead = types.header_cell.createAndFill());\n\t\tfor (let i = map.width; i < width; i++) cells.push(add);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(rowEnd - 1 + start), cells);\n\t}\n\tif (height > map.height) {\n\t\tconst cells = [];\n\t\tfor (let i = 0, start$1 = (map.height - 1) * map.width; i < Math.max(map.width, width); i++) {\n\t\t\tconst header = i >= map.width ? false : table.nodeAt(map.map[start$1 + i]).type == types.header_cell;\n\t\t\tcells.push(header ? emptyHead || (emptyHead = types.header_cell.createAndFill()) : empty || (empty = types.cell.createAndFill()));\n\t\t}\n\t\tconst emptyRow = types.row.create(null, Fragment.from(cells)), rows = [];\n\t\tfor (let i = map.height; i < height; i++) rows.push(emptyRow);\n\t\ttr.insert(tr.mapping.slice(mapFrom).map(start + table.nodeSize - 2), rows);\n\t}\n\treturn !!(empty || emptyHead);\n}\nfunction isolateHorizontal(tr, map, table, start, left, right, top, mapFrom) {\n\tif (top == 0 || top == map.height) return false;\n\tlet found = false;\n\tfor (let col = left; col < right; col++) {\n\t\tconst index = top * map.width + col, pos = map.map[index];\n\t\tif (map.map[index - map.width] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst { top: cellTop, left: cellLeft } = map.findCell(pos);\n\t\t\ttr.setNodeMarkup(tr.mapping.slice(mapFrom).map(pos + start), null, {\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: top - cellTop\n\t\t\t});\n\t\t\ttr.insert(tr.mapping.slice(mapFrom).map(map.positionAt(top, cellLeft, table)), cell.type.createAndFill({\n\t\t\t\t...cell.attrs,\n\t\t\t\trowspan: cellTop + cell.attrs.rowspan - top\n\t\t\t}));\n\t\t\tcol += cell.attrs.colspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\nfunction isolateVertical(tr, map, table, start, top, bottom, left, mapFrom) {\n\tif (left == 0 || left == map.width) return false;\n\tlet found = false;\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst index = row * map.width + left, pos = map.map[index];\n\t\tif (map.map[index - 1] == pos) {\n\t\t\tfound = true;\n\t\t\tconst cell = table.nodeAt(pos);\n\t\t\tconst cellLeft = map.colCount(pos);\n\t\t\tconst updatePos = tr.mapping.slice(mapFrom).map(pos + start);\n\t\t\ttr.setNodeMarkup(updatePos, null, removeColSpan(cell.attrs, left - cellLeft, cell.attrs.colspan - (left - cellLeft)));\n\t\t\ttr.insert(updatePos + cell.nodeSize, cell.type.createAndFill(removeColSpan(cell.attrs, 0, left - cellLeft)));\n\t\t\trow += cell.attrs.rowspan - 1;\n\t\t}\n\t}\n\treturn found;\n}\n/**\n* Insert the given set of cells (as returned by `pastedCells`) into a\n* table, at the position pointed at by rect.\n*\n* @internal\n*/\nfunction insertCells(state, dispatch, tableStart, rect, cells) {\n\tlet table = tableStart ? state.doc.nodeAt(tableStart - 1) : state.doc;\n\tif (!table) throw new Error(\"No table found\");\n\tlet map = TableMap.get(table);\n\tconst { top, left } = rect;\n\tconst right = left + cells.width, bottom = top + cells.height;\n\tconst tr = state.tr;\n\tlet mapFrom = 0;\n\tfunction recomp() {\n\t\ttable = tableStart ? tr.doc.nodeAt(tableStart - 1) : tr.doc;\n\t\tif (!table) throw new Error(\"No table found\");\n\t\tmap = TableMap.get(table);\n\t\tmapFrom = tr.mapping.maps.length;\n\t}\n\tif (growTable(tr, map, table, tableStart, right, bottom, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, top, mapFrom)) recomp();\n\tif (isolateHorizontal(tr, map, table, tableStart, left, right, bottom, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, left, mapFrom)) recomp();\n\tif (isolateVertical(tr, map, table, tableStart, top, bottom, right, mapFrom)) recomp();\n\tfor (let row = top; row < bottom; row++) {\n\t\tconst from = map.positionAt(row, left, table), to = map.positionAt(row, right, table);\n\t\ttr.replace(tr.mapping.slice(mapFrom).map(from + tableStart), tr.mapping.slice(mapFrom).map(to + tableStart), new Slice(cells.rows[row - top], 0, 0));\n\t}\n\trecomp();\n\ttr.setSelection(new CellSelection(tr.doc.resolve(tableStart + map.positionAt(top, left, table)), tr.doc.resolve(tableStart + map.positionAt(bottom - 1, right - 1, table))));\n\tdispatch(tr);\n}\n\n//#endregion\n//#region src/input.ts\nconst handleKeyDown = keydownHandler({\n\tArrowLeft: arrow(\"horiz\", -1),\n\tArrowRight: arrow(\"horiz\", 1),\n\tArrowUp: arrow(\"vert\", -1),\n\tArrowDown: arrow(\"vert\", 1),\n\t\"Shift-ArrowLeft\": shiftArrow(\"horiz\", -1),\n\t\"Shift-ArrowRight\": shiftArrow(\"horiz\", 1),\n\t\"Shift-ArrowUp\": shiftArrow(\"vert\", -1),\n\t\"Shift-ArrowDown\": shiftArrow(\"vert\", 1),\n\tBackspace: deleteCellSelection,\n\t\"Mod-Backspace\": deleteCellSelection,\n\tDelete: deleteCellSelection,\n\t\"Mod-Delete\": deleteCellSelection\n});\nfunction maybeSetSelection(state, dispatch, selection) {\n\tif (selection.eq(state.selection)) return false;\n\tif (dispatch) dispatch(state.tr.setSelection(selection).scrollIntoView());\n\treturn true;\n}\n/**\n* @internal\n*/\nfunction arrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tif (sel instanceof CellSelection) return maybeSetSelection(state, dispatch, Selection.near(sel.$headCell, dir));\n\t\tif (axis != \"horiz\" && !sel.empty) return false;\n\t\tconst end = atEndOfCell(view, axis, dir);\n\t\tif (end == null) return false;\n\t\tif (axis == \"horiz\") return maybeSetSelection(state, dispatch, Selection.near(state.doc.resolve(sel.head + dir), dir));\n\t\telse {\n\t\t\tconst $cell = state.doc.resolve(end);\n\t\t\tconst $next = nextCell($cell, axis, dir);\n\t\t\tlet newSel;\n\t\t\tif ($next) newSel = Selection.near($next, 1);\n\t\t\telse if (dir < 0) newSel = Selection.near(state.doc.resolve($cell.before(-1)), -1);\n\t\t\telse newSel = Selection.near(state.doc.resolve($cell.after(-1)), 1);\n\t\t\treturn maybeSetSelection(state, dispatch, newSel);\n\t\t}\n\t};\n}\nfunction shiftArrow(axis, dir) {\n\treturn (state, dispatch, view) => {\n\t\tif (!view) return false;\n\t\tconst sel = state.selection;\n\t\tlet cellSel;\n\t\tif (sel instanceof CellSelection) cellSel = sel;\n\t\telse {\n\t\t\tconst end = atEndOfCell(view, axis, dir);\n\t\t\tif (end == null) return false;\n\t\t\tcellSel = new CellSelection(state.doc.resolve(end));\n\t\t}\n\t\tconst $head = nextCell(cellSel.$headCell, axis, dir);\n\t\tif (!$head) return false;\n\t\treturn maybeSetSelection(state, dispatch, new CellSelection(cellSel.$anchorCell, $head));\n\t};\n}\nfunction handleTripleClick(view, pos) {\n\tconst doc = view.state.doc, $cell = cellAround(doc.resolve(pos));\n\tif (!$cell) return false;\n\tview.dispatch(view.state.tr.setSelection(new CellSelection($cell)));\n\treturn true;\n}\n/**\n* @public\n*/\nfunction handlePaste(view, _, slice) {\n\tif (!isInTable(view.state)) return false;\n\tlet cells = pastedCells(slice);\n\tconst sel = view.state.selection;\n\tif (sel instanceof CellSelection) {\n\t\tif (!cells) cells = {\n\t\t\twidth: 1,\n\t\t\theight: 1,\n\t\t\trows: [Fragment.from(fitSlice(tableNodeTypes(view.state.schema).cell, slice))]\n\t\t};\n\t\tconst table = sel.$anchorCell.node(-1);\n\t\tconst start = sel.$anchorCell.start(-1);\n\t\tconst rect = TableMap.get(table).rectBetween(sel.$anchorCell.pos - start, sel.$headCell.pos - start);\n\t\tcells = clipCells(cells, rect.right - rect.left, rect.bottom - rect.top);\n\t\tinsertCells(view.state, view.dispatch, start, rect, cells);\n\t\treturn true;\n\t} else if (cells) {\n\t\tconst $cell = selectionCell(view.state);\n\t\tconst start = $cell.start(-1);\n\t\tinsertCells(view.state, view.dispatch, start, TableMap.get($cell.node(-1)).findCell($cell.pos - start), cells);\n\t\treturn true;\n\t} else return false;\n}\nfunction handleMouseDown$1(view, startEvent) {\n\tvar _cellUnderMouse;\n\tif (startEvent.button != 0) return;\n\tif (startEvent.ctrlKey || startEvent.metaKey) return;\n\tconst startDOMCell = domInCell(view, startEvent.target);\n\tlet $anchor;\n\tif (startEvent.shiftKey && view.state.selection instanceof CellSelection) {\n\t\tsetCellSelection(view.state.selection.$anchorCell, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (startEvent.shiftKey && startDOMCell && ($anchor = cellAround(view.state.selection.$anchor)) != null && ((_cellUnderMouse = cellUnderMouse(view, startEvent)) === null || _cellUnderMouse === void 0 ? void 0 : _cellUnderMouse.pos) != $anchor.pos) {\n\t\tsetCellSelection($anchor, startEvent);\n\t\tstartEvent.preventDefault();\n\t} else if (!startDOMCell) return;\n\tfunction setCellSelection($anchor$1, event) {\n\t\tlet $head = cellUnderMouse(view, event);\n\t\tconst starting = tableEditingKey.getState(view.state) == null;\n\t\tif (!$head || !inSameTable($anchor$1, $head)) if (starting) $head = $anchor$1;\n\t\telse return;\n\t\tconst selection = new CellSelection($anchor$1, $head);\n\t\tif (starting || !view.state.selection.eq(selection)) {\n\t\t\tconst tr = view.state.tr.setSelection(selection);\n\t\t\tif (starting) tr.setMeta(tableEditingKey, $anchor$1.pos);\n\t\t\tview.dispatch(tr);\n\t\t}\n\t}\n\tfunction stop() {\n\t\tview.root.removeEventListener(\"mouseup\", stop);\n\t\tview.root.removeEventListener(\"dragstart\", stop);\n\t\tview.root.removeEventListener(\"mousemove\", move);\n\t\tif (tableEditingKey.getState(view.state) != null) view.dispatch(view.state.tr.setMeta(tableEditingKey, -1));\n\t}\n\tfunction move(_event) {\n\t\tconst event = _event;\n\t\tconst anchor = tableEditingKey.getState(view.state);\n\t\tlet $anchor$1;\n\t\tif (anchor != null) $anchor$1 = view.state.doc.resolve(anchor);\n\t\telse if (domInCell(view, event.target) != startDOMCell) {\n\t\t\t$anchor$1 = cellUnderMouse(view, startEvent);\n\t\t\tif (!$anchor$1) return stop();\n\t\t}\n\t\tif ($anchor$1) setCellSelection($anchor$1, event);\n\t}\n\tview.root.addEventListener(\"mouseup\", stop);\n\tview.root.addEventListener(\"dragstart\", stop);\n\tview.root.addEventListener(\"mousemove\", move);\n}\nfunction atEndOfCell(view, axis, dir) {\n\tif (!(view.state.selection instanceof TextSelection)) return null;\n\tconst { $head } = view.state.selection;\n\tfor (let d = $head.depth - 1; d >= 0; d--) {\n\t\tconst parent = $head.node(d);\n\t\tif ((dir < 0 ? $head.index(d) : $head.indexAfter(d)) != (dir < 0 ? 0 : parent.childCount)) return null;\n\t\tif (parent.type.spec.tableRole == \"cell\" || parent.type.spec.tableRole == \"header_cell\") {\n\t\t\tconst cellPos = $head.before(d);\n\t\t\tconst dirStr = axis == \"vert\" ? dir > 0 ? \"down\" : \"up\" : dir > 0 ? \"right\" : \"left\";\n\t\t\treturn view.endOfTextblock(dirStr) ? cellPos : null;\n\t\t}\n\t}\n\treturn null;\n}\nfunction domInCell(view, dom) {\n\tfor (; dom && dom != view.dom; dom = dom.parentNode) if (dom.nodeName == \"TD\" || dom.nodeName == \"TH\") return dom;\n\treturn null;\n}\nfunction cellUnderMouse(view, event) {\n\tconst mousePos = view.posAtCoords({\n\t\tleft: event.clientX,\n\t\ttop: event.clientY\n\t});\n\tif (!mousePos) return null;\n\tlet { inside, pos } = mousePos;\n\treturn inside >= 0 && cellAround(view.state.doc.resolve(inside)) || cellAround(view.state.doc.resolve(pos));\n}\n\n//#endregion\n//#region src/tableview.ts\n/**\n* @public\n*/\nvar TableView = class {\n\tconstructor(node, defaultCellMinWidth) {\n\t\tthis.node = node;\n\t\tthis.defaultCellMinWidth = defaultCellMinWidth;\n\t\tthis.dom = document.createElement(\"div\");\n\t\tthis.dom.className = \"tableWrapper\";\n\t\tthis.table = this.dom.appendChild(document.createElement(\"table\"));\n\t\tthis.table.style.setProperty(\"--default-cell-min-width\", `${defaultCellMinWidth}px`);\n\t\tthis.colgroup = this.table.appendChild(document.createElement(\"colgroup\"));\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, defaultCellMinWidth);\n\t\tthis.contentDOM = this.table.appendChild(document.createElement(\"tbody\"));\n\t}\n\tupdate(node) {\n\t\tif (node.type != this.node.type) return false;\n\t\tthis.node = node;\n\t\tupdateColumnsOnResize(node, this.colgroup, this.table, this.defaultCellMinWidth);\n\t\treturn true;\n\t}\n\tignoreMutation(record) {\n\t\treturn record.type == \"attributes\" && (record.target == this.table || this.colgroup.contains(record.target));\n\t}\n};\n/**\n* @public\n*/\nfunction updateColumnsOnResize(node, colgroup, table, defaultCellMinWidth, overrideCol, overrideValue) {\n\tlet totalWidth = 0;\n\tlet fixedWidth = true;\n\tlet nextDOM = colgroup.firstChild;\n\tconst row = node.firstChild;\n\tif (!row) return;\n\tfor (let i = 0, col = 0; i < row.childCount; i++) {\n\t\tconst { colspan, colwidth } = row.child(i).attrs;\n\t\tfor (let j = 0; j < colspan; j++, col++) {\n\t\t\tconst hasWidth = overrideCol == col ? overrideValue : colwidth && colwidth[j];\n\t\t\tconst cssWidth = hasWidth ? hasWidth + \"px\" : \"\";\n\t\t\ttotalWidth += hasWidth || defaultCellMinWidth;\n\t\t\tif (!hasWidth) fixedWidth = false;\n\t\t\tif (!nextDOM) {\n\t\t\t\tconst col$1 = document.createElement(\"col\");\n\t\t\t\tcol$1.style.width = cssWidth;\n\t\t\t\tcolgroup.appendChild(col$1);\n\t\t\t} else {\n\t\t\t\tif (nextDOM.style.width != cssWidth) nextDOM.style.width = cssWidth;\n\t\t\t\tnextDOM = nextDOM.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\twhile (nextDOM) {\n\t\tvar _nextDOM$parentNode;\n\t\tconst after = nextDOM.nextSibling;\n\t\t(_nextDOM$parentNode = nextDOM.parentNode) === null || _nextDOM$parentNode === void 0 || _nextDOM$parentNode.removeChild(nextDOM);\n\t\tnextDOM = after;\n\t}\n\tif (fixedWidth) {\n\t\ttable.style.width = totalWidth + \"px\";\n\t\ttable.style.minWidth = \"\";\n\t} else {\n\t\ttable.style.width = \"\";\n\t\ttable.style.minWidth = totalWidth + \"px\";\n\t}\n}\n\n//#endregion\n//#region src/columnresizing.ts\n/**\n* @public\n*/\nconst columnResizingPluginKey = new PluginKey(\"tableColumnResizing\");\n/**\n* @public\n*/\nfunction columnResizing({ handleWidth = 5, cellMinWidth = 25, defaultCellMinWidth = 100, View = TableView, lastColumnResizable = true } = {}) {\n\tconst plugin = new Plugin({\n\t\tkey: columnResizingPluginKey,\n\t\tstate: {\n\t\t\tinit(_, state) {\n\t\t\t\tvar _plugin$spec;\n\t\t\t\tconst nodeViews = (_plugin$spec = plugin.spec) === null || _plugin$spec === void 0 || (_plugin$spec = _plugin$spec.props) === null || _plugin$spec === void 0 ? void 0 : _plugin$spec.nodeViews;\n\t\t\t\tconst tableName = tableNodeTypes(state.schema).table.name;\n\t\t\t\tif (View && nodeViews) nodeViews[tableName] = (node, view) => {\n\t\t\t\t\treturn new View(node, defaultCellMinWidth, view);\n\t\t\t\t};\n\t\t\t\treturn new ResizeState(-1, false);\n\t\t\t},\n\t\t\tapply(tr, prev) {\n\t\t\t\treturn prev.apply(tr);\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tattributes: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\treturn pluginState && pluginState.activeHandle > -1 ? { class: \"resize-cursor\" } : {};\n\t\t\t},\n\t\t\thandleDOMEvents: {\n\t\t\t\tmousemove: (view, event) => {\n\t\t\t\t\thandleMouseMove(view, event, handleWidth, lastColumnResizable);\n\t\t\t\t},\n\t\t\t\tmouseleave: (view) => {\n\t\t\t\t\thandleMouseLeave(view);\n\t\t\t\t},\n\t\t\t\tmousedown: (view, event) => {\n\t\t\t\t\thandleMouseDown(view, event, cellMinWidth, defaultCellMinWidth);\n\t\t\t\t}\n\t\t\t},\n\t\t\tdecorations: (state) => {\n\t\t\t\tconst pluginState = columnResizingPluginKey.getState(state);\n\t\t\t\tif (pluginState && pluginState.activeHandle > -1) return handleDecorations(state, pluginState.activeHandle);\n\t\t\t},\n\t\t\tnodeViews: {}\n\t\t}\n\t});\n\treturn plugin;\n}\n/**\n* @public\n*/\nvar ResizeState = class ResizeState {\n\tconstructor(activeHandle, dragging) {\n\t\tthis.activeHandle = activeHandle;\n\t\tthis.dragging = dragging;\n\t}\n\tapply(tr) {\n\t\tconst state = this;\n\t\tconst action = tr.getMeta(columnResizingPluginKey);\n\t\tif (action && action.setHandle != null) return new ResizeState(action.setHandle, false);\n\t\tif (action && action.setDragging !== void 0) return new ResizeState(state.activeHandle, action.setDragging);\n\t\tif (state.activeHandle > -1 && tr.docChanged) {\n\t\t\tlet handle = tr.mapping.map(state.activeHandle, -1);\n\t\t\tif (!pointsAtCell(tr.doc.resolve(handle))) handle = -1;\n\t\t\treturn new ResizeState(handle, state.dragging);\n\t\t}\n\t\treturn state;\n\t}\n};\nfunction handleMouseMove(view, event, handleWidth, lastColumnResizable) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState) return;\n\tif (!pluginState.dragging) {\n\t\tconst target = domCellAround(event.target);\n\t\tlet cell = -1;\n\t\tif (target) {\n\t\t\tconst { left, right } = target.getBoundingClientRect();\n\t\t\tif (event.clientX - left <= handleWidth) cell = edgeCell(view, event, \"left\", handleWidth);\n\t\t\telse if (right - event.clientX <= handleWidth) cell = edgeCell(view, event, \"right\", handleWidth);\n\t\t}\n\t\tif (cell != pluginState.activeHandle) {\n\t\t\tif (!lastColumnResizable && cell !== -1) {\n\t\t\t\tconst $cell = view.state.doc.resolve(cell);\n\t\t\t\tconst table = $cell.node(-1);\n\t\t\t\tconst map = TableMap.get(table);\n\t\t\t\tconst tableStart = $cell.start(-1);\n\t\t\t\tif (map.colCount($cell.pos - tableStart) + $cell.nodeAfter.attrs.colspan - 1 == map.width - 1) return;\n\t\t\t}\n\t\t\tupdateHandle(view, cell);\n\t\t}\n\t}\n}\nfunction handleMouseLeave(view) {\n\tif (!view.editable) return;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (pluginState && pluginState.activeHandle > -1 && !pluginState.dragging) updateHandle(view, -1);\n}\nfunction handleMouseDown(view, event, cellMinWidth, defaultCellMinWidth) {\n\tvar _view$dom$ownerDocume;\n\tif (!view.editable) return false;\n\tconst win = (_view$dom$ownerDocume = view.dom.ownerDocument.defaultView) !== null && _view$dom$ownerDocume !== void 0 ? _view$dom$ownerDocume : window;\n\tconst pluginState = columnResizingPluginKey.getState(view.state);\n\tif (!pluginState || pluginState.activeHandle == -1 || pluginState.dragging) return false;\n\tconst cell = view.state.doc.nodeAt(pluginState.activeHandle);\n\tconst width = currentColWidth(view, pluginState.activeHandle, cell.attrs);\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: {\n\t\tstartX: event.clientX,\n\t\tstartWidth: width\n\t} }));\n\tfunction finish(event$1) {\n\t\twin.removeEventListener(\"mouseup\", finish);\n\t\twin.removeEventListener(\"mousemove\", move);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (pluginState$1 === null || pluginState$1 === void 0 ? void 0 : pluginState$1.dragging) {\n\t\t\tupdateColumnWidth(view, pluginState$1.activeHandle, draggedWidth(pluginState$1.dragging, event$1, cellMinWidth));\n\t\t\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setDragging: null }));\n\t\t}\n\t}\n\tfunction move(event$1) {\n\t\tif (!event$1.which) return finish(event$1);\n\t\tconst pluginState$1 = columnResizingPluginKey.getState(view.state);\n\t\tif (!pluginState$1) return;\n\t\tif (pluginState$1.dragging) {\n\t\t\tconst dragged = draggedWidth(pluginState$1.dragging, event$1, cellMinWidth);\n\t\t\tdisplayColumnWidth(view, pluginState$1.activeHandle, dragged, defaultCellMinWidth);\n\t\t}\n\t}\n\tdisplayColumnWidth(view, pluginState.activeHandle, width, defaultCellMinWidth);\n\twin.addEventListener(\"mouseup\", finish);\n\twin.addEventListener(\"mousemove\", move);\n\tevent.preventDefault();\n\treturn true;\n}\nfunction currentColWidth(view, cellPos, { colspan, colwidth }) {\n\tconst width = colwidth && colwidth[colwidth.length - 1];\n\tif (width) return width;\n\tconst dom = view.domAtPos(cellPos);\n\tlet domWidth = dom.node.childNodes[dom.offset].offsetWidth, parts = colspan;\n\tif (colwidth) {\n\t\tfor (let i = 0; i < colspan; i++) if (colwidth[i]) {\n\t\t\tdomWidth -= colwidth[i];\n\t\t\tparts--;\n\t\t}\n\t}\n\treturn domWidth / parts;\n}\nfunction domCellAround(target) {\n\twhile (target && target.nodeName != \"TD\" && target.nodeName != \"TH\") target = target.classList && target.classList.contains(\"ProseMirror\") ? null : target.parentNode;\n\treturn target;\n}\nfunction edgeCell(view, event, side, handleWidth) {\n\tconst offset = side == \"right\" ? -handleWidth : handleWidth;\n\tconst found = view.posAtCoords({\n\t\tleft: event.clientX + offset,\n\t\ttop: event.clientY\n\t});\n\tif (!found) return -1;\n\tconst { pos } = found;\n\tconst $cell = cellAround(view.state.doc.resolve(pos));\n\tif (!$cell) return -1;\n\tif (side == \"right\") return $cell.pos;\n\tconst map = TableMap.get($cell.node(-1)), start = $cell.start(-1);\n\tconst index = map.map.indexOf($cell.pos - start);\n\treturn index % map.width == 0 ? -1 : start + map.map[index - 1];\n}\nfunction draggedWidth(dragging, event, resizeMinWidth) {\n\tconst offset = event.clientX - dragging.startX;\n\treturn Math.max(resizeMinWidth, dragging.startWidth + offset);\n}\nfunction updateHandle(view, value) {\n\tview.dispatch(view.state.tr.setMeta(columnResizingPluginKey, { setHandle: value }));\n}\nfunction updateColumnWidth(view, cell, width) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), map = TableMap.get(table), start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tconst tr = view.state.tr;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst mapIndex = row * map.width + col;\n\t\tif (row && map.map[mapIndex] == map.map[mapIndex - map.width]) continue;\n\t\tconst pos = map.map[mapIndex];\n\t\tconst attrs = table.nodeAt(pos).attrs;\n\t\tconst index = attrs.colspan == 1 ? 0 : col - map.colCount(pos);\n\t\tif (attrs.colwidth && attrs.colwidth[index] == width) continue;\n\t\tconst colwidth = attrs.colwidth ? attrs.colwidth.slice() : zeroes(attrs.colspan);\n\t\tcolwidth[index] = width;\n\t\ttr.setNodeMarkup(start + pos, null, {\n\t\t\t...attrs,\n\t\t\tcolwidth\n\t\t});\n\t}\n\tif (tr.docChanged) view.dispatch(tr);\n}\nfunction displayColumnWidth(view, cell, width, defaultCellMinWidth) {\n\tconst $cell = view.state.doc.resolve(cell);\n\tconst table = $cell.node(-1), start = $cell.start(-1);\n\tconst col = TableMap.get(table).colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tlet dom = view.domAtPos($cell.start(-1)).node;\n\twhile (dom && dom.nodeName != \"TABLE\") dom = dom.parentNode;\n\tif (!dom) return;\n\tupdateColumnsOnResize(table, dom.firstChild, dom, defaultCellMinWidth, col, width);\n}\nfunction zeroes(n) {\n\treturn Array(n).fill(0);\n}\nfunction handleDecorations(state, cell) {\n\tconst decorations = [];\n\tconst $cell = state.doc.resolve(cell);\n\tconst table = $cell.node(-1);\n\tif (!table) return DecorationSet.empty;\n\tconst map = TableMap.get(table);\n\tconst start = $cell.start(-1);\n\tconst col = map.colCount($cell.pos - start) + $cell.nodeAfter.attrs.colspan - 1;\n\tfor (let row = 0; row < map.height; row++) {\n\t\tconst index = col + row * map.width;\n\t\tif ((col == map.width - 1 || map.map[index] != map.map[index + 1]) && (row == 0 || map.map[index] != map.map[index - map.width])) {\n\t\t\tvar _columnResizingPlugin;\n\t\t\tconst cellPos = map.map[index];\n\t\t\tconst pos = start + cellPos + table.nodeAt(cellPos).nodeSize - 1;\n\t\t\tconst dom = document.createElement(\"div\");\n\t\t\tdom.className = \"column-resize-handle\";\n\t\t\tif ((_columnResizingPlugin = columnResizingPluginKey.getState(state)) === null || _columnResizingPlugin === void 0 ? void 0 : _columnResizingPlugin.dragging) decorations.push(Decoration.node(start + cellPos, start + cellPos + table.nodeAt(cellPos).nodeSize, { class: \"column-resize-dragging\" }));\n\t\t\tdecorations.push(Decoration.widget(pos, dom));\n\t\t}\n\t}\n\treturn DecorationSet.create(state.doc, decorations);\n}\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a [plugin](http://prosemirror.net/docs/ref/#state.Plugin)\n* that, when added to an editor, enables cell-selection, handles\n* cell-based copy/paste, and makes sure tables stay well-formed (each\n* row has the same width, and cells don't overlap).\n*\n* You should probably put this plugin near the end of your array of\n* plugins, since it handles mouse and arrow key events in tables\n* rather broadly, and other plugins, like the gap cursor or the\n* column-width dragging plugin, might want to get a turn first to\n* perform more specific behavior.\n*\n* @public\n*/\nfunction tableEditing({ allowTableNodeSelection = false } = {}) {\n\treturn new Plugin({\n\t\tkey: tableEditingKey,\n\t\tstate: {\n\t\t\tinit() {\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tapply(tr, cur) {\n\t\t\t\tconst set = tr.getMeta(tableEditingKey);\n\t\t\t\tif (set != null) return set == -1 ? null : set;\n\t\t\t\tif (cur == null || !tr.docChanged) return cur;\n\t\t\t\tconst { deleted, pos } = tr.mapping.mapResult(cur);\n\t\t\t\treturn deleted ? null : pos;\n\t\t\t}\n\t\t},\n\t\tprops: {\n\t\t\tdecorations: drawCellSelection,\n\t\t\thandleDOMEvents: { mousedown: handleMouseDown$1 },\n\t\t\tcreateSelectionBetween(view) {\n\t\t\t\treturn tableEditingKey.getState(view.state) != null ? view.state.selection : null;\n\t\t\t},\n\t\t\thandleTripleClick,\n\t\t\thandleKeyDown,\n\t\t\thandlePaste\n\t\t},\n\t\tappendTransaction(_, oldState, state) {\n\t\t\treturn normalizeSelection(state, fixTables(state, oldState), allowTableNodeSelection);\n\t\t}\n\t});\n}\n\n//#endregion\nexport { CellBookmark, CellSelection, ResizeState, TableMap, TableView, clipCells as __clipCells, insertCells as __insertCells, pastedCells as __pastedCells, addColSpan, addColumn, addColumnAfter, addColumnBefore, addRow, addRowAfter, addRowBefore, cellAround, cellNear, colCount, columnIsHeader, columnResizing, columnResizingPluginKey, deleteCellSelection, deleteColumn, deleteRow, deleteTable, findCell, findCellPos, findCellRange, findTable, fixTables, fixTablesKey, goToNextCell, handlePaste, inSameTable, isInTable, mergeCells, moveCellForward, moveTableColumn, moveTableRow, nextCell, pointsAtCell, removeColSpan, removeColumn, removeRow, rowIsHeader, selectedRect, selectionCell, setCellAttr, splitCell, splitCellWithType, tableEditing, tableEditingKey, tableNodeTypes, tableNodes, toggleHeader, toggleHeaderCell, toggleHeaderColumn, toggleHeaderRow, updateColumnsOnResize };\n//# sourceMappingURL=index.js.map"],"names":["readFromCache","addToCache","cache","key","value","cachePos","i","TableMap","width","height","map","problems","pos","curPos","left","top","right","bottom","j","axis","dir","a","b","leftA","rightA","topA","bottomA","leftB","rightB","topB","bottomB","rect","result","seen","row","col","index","table","rowStart","rowEnd","rowEndIndex","computeMap","findWidth","mapPos","colWidths","e","rowNode","cellNode","colspan","rowspan","colwidth","h","start","w","colW","widthIndex","prev","expectedPos","missing","tableMap","badWidths","findBadColWidths","hasRowSpan","rowWidth","prevRow","cell","node","updated","attrs","colWidth","freshColWidth","tableNodeTypes","schema","name","type","role","tableEditingKey","PluginKey","cellAround","$pos","d","cellWrapping","isInTable","state","$head","selectionCell","sel","$cell","cellNear","after","before","pointsAtCell","moveCellForward","inSameTable","$cellA","$cellB","nextCell","tableStart","moved","removeColSpan","n","addColSpan","columnIsHeader","headerCell","CellSelection","Selection","$anchorCell","$headCell","doc","cells","p","ranges","from","SelectionRange","mapping","tableChanged","TextSelection","rows","rowContent","cellRect","extraLeft","extraRight","Fragment","fragment","Slice","tr","content","mapFrom","$from","$to","f","anchorTop","headTop","anchorBottom","headBottom","anchorRect","headRect","anchorLeft","headLeft","anchorRight","headRight","other","json","anchorCell","headCell","CellBookmark","anchor","head","drawCellSelection","Decoration","DecorationSet","isCellBoundarySelection","afterFrom","beforeTo","depth","isTextSelectionAcrossCells","fromCellBoundaryNode","toCellBoundaryNode","normalizeSelection","allowTableNodeSelection","normalize","NodeSelection","lastCell","fixTablesKey","changedDescendants","old","cur","offset","oldSize","curSize","outer","child","scan","fixTables","oldState","check","fixTable","tablePos","mustAdd","prob","first","last","end","add","nodes","side","selectedRect","addColumn","refColumn","addColumnBefore","dispatch","addColumnAfter","removeColumn","mapStart","deleteColumn","rowIsHeader","_table$nodeAt","addRow","rowPos","refRow","_table$nodeAt2","addRowBefore","addRowAfter","removeRow","nextRow","copy","newPos","deleteRow","isEmpty","c","cellsOverlapRectangle","indexTop","indexLeft","indexBottom","indexRight","mergeCells","mergedPos","mergedCell","cellPos","mapped","splitCell","nodeTypes","splitCellWithType","getCellType","_cellAround","baseAttrs","setCellAttr","deprecated_toggleHeader","types","isHeaderEnabledByType","cellPositions","toggleHeader","options","isHeaderRowEnabled","isHeaderColumnEnabled","selectionStartsAt","cellsRect","newType","relativeCellPos","toggleHeaderCell","findNextCell","lastChild","goToNextCell","direction","deleteTable","deleteCellSelection","baseContent","pastedCells","slice","openStart","openEnd","fitSlice","ensureRectangular","widths","r","empty","nodeType","Transform","clipCells","newWidth","newHeight","added","newRows","frag","source","growTable","emptyHead","start$1","header","emptyRow","isolateHorizontal","found","cellTop","cellLeft","isolateVertical","updatePos","insertCells","recomp","to","handleKeyDown","keydownHandler","arrow","shiftArrow","maybeSetSelection","selection","view","atEndOfCell","$next","newSel","cellSel","handleTripleClick","handlePaste","_","handleMouseDown$1","startEvent","_cellUnderMouse","startDOMCell","domInCell","$anchor","setCellSelection","cellUnderMouse","$anchor$1","event","starting","stop","move","_event","parent","dirStr","dom","mousePos","inside","TableView","defaultCellMinWidth","updateColumnsOnResize","record","colgroup","overrideCol","overrideValue","totalWidth","fixedWidth","nextDOM","hasWidth","cssWidth","col$1","_nextDOM$parentNode","columnResizingPluginKey","columnResizing","handleWidth","cellMinWidth","View","lastColumnResizable","plugin","Plugin","_plugin$spec","nodeViews","tableName","ResizeState","pluginState","handleMouseMove","handleMouseLeave","handleMouseDown","handleDecorations","activeHandle","dragging","action","handle","target","domCellAround","edgeCell","updateHandle","_view$dom$ownerDocume","win","currentColWidth","finish","event$1","pluginState$1","updateColumnWidth","draggedWidth","dragged","displayColumnWidth","domWidth","parts","resizeMinWidth","mapIndex","zeroes","decorations","_columnResizingPlugin","tableEditing","set","deleted"],"mappings":"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","x_google_ignoreList":[0]}