@heartlandone/vega 2.71.0 → 2.72.0-RTE-table-preview

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 (694) hide show
  1. package/dist/cjs/{app-globals-837be7a6.js → app-globals-4d077e56.js} +19 -17
  2. package/dist/cjs/{child-nodes-event-prevent-slimmer-f8840f1b.js → child-nodes-event-prevent-slimmer-871855df.js} +1 -1
  3. package/dist/cjs/{code-block-bb4cbafa.js → code-block-bf3642ef.js} +29 -67
  4. package/dist/cjs/column-operation-1cac8386.js +1325 -0
  5. package/dist/cjs/{component-value-history-controller-slimmer.abstract-cf7b4bda.js → component-value-history-controller-slimmer.abstract-ebecb74a.js} +28 -7
  6. package/dist/cjs/{date-required-rule-4e1f84fd.js → date-required-rule-99cca681.js} +3 -3
  7. package/dist/cjs/{design-token-00fe8d2f.js → design-token-ac429fe9.js} +6 -7
  8. package/dist/cjs/{dom-node-subject-observer-factory-f040608b.js → dom-node-subject-observer-factory-1c8f7880.js} +5 -1
  9. package/dist/cjs/{dto-renderer-manager-c917dade.js → dto-renderer-manager-04428a77.js} +6 -4
  10. package/dist/cjs/{element-appender-slimmer-f8e89f37.js → element-appender-slimmer-1b062054.js} +52 -14
  11. package/dist/cjs/{event-emit-slimmer-7afe8d78.js → event-emit-slimmer-f7255138.js} +2 -2
  12. package/dist/cjs/{form-field-controller-slimmer-f865d397.js → form-field-controller-slimmer-57525f26.js} +3 -3
  13. package/dist/cjs/{image-annotation-action-8843adbf.js → image-annotation-action-7fa5d30d.js} +3 -3
  14. package/dist/cjs/index-58ea899e.js +12 -8
  15. package/dist/cjs/{index-4b896e76.js → index-c7fbf32b.js} +2 -2
  16. package/dist/cjs/index.cjs.js +37 -36
  17. package/dist/cjs/{inject-keyboard-manager-13c66257.js → inject-keyboard-manager-a6101379.js} +1 -1
  18. package/dist/cjs/{internal-vega-event-manager-45d451de.js → internal-vega-event-manager-0e1ba774.js} +3 -2
  19. package/dist/cjs/{keyboard-manager-af0d08a6.js → keyboard-manager-d8adb0ed.js} +1 -1
  20. package/dist/cjs/{keyboard-manager-slimmer-62f072cd.js → keyboard-manager-slimmer-15e65357.js} +1 -1
  21. package/dist/cjs/{language-extension-99c6fb40.js → language-extension-6ad0b5a0.js} +4 -4
  22. package/dist/cjs/loader.cjs.js +15 -13
  23. package/dist/cjs/month-view-generator-706c5477.js +102 -0
  24. package/dist/cjs/{public-rules-759c745b.js → public-rules-76bcf49c.js} +15 -15
  25. package/dist/cjs/{range-0b597850.js → range-449bcdd0.js} +1 -1
  26. package/dist/cjs/{responsive-format-facade-1d9c13a9.js → responsive-format-facade-e61c7f7e.js} +4 -4
  27. package/dist/cjs/{rich-text-editor-required-rule-92d0640e.js → rich-text-editor-required-rule-40216fee.js} +1 -1
  28. package/dist/cjs/{string-format-strategy.abstract-07a95352.js → string-format-strategy.abstract-a8264fca.js} +1 -1
  29. package/dist/cjs/{string-input-formatter-slimmer-8236b5e1.js → string-input-formatter-slimmer-4332d1c7.js} +4 -4
  30. package/dist/cjs/{string-mask-strategy-6bdad95e.js → string-mask-strategy-4e7d3780.js} +2 -2
  31. package/dist/cjs/{style-formatter-1daa8371.js → style-formatter-e2a0ad27.js} +2 -2
  32. package/dist/cjs/{sub-state-notify-slimmer-78682046.js → sub-state-notify-slimmer-9fe1ab65.js} +2 -2
  33. package/dist/cjs/{sub-state-observer-slimmer-73aecfff.js → sub-state-observer-slimmer-2f6f4d28.js} +2 -2
  34. package/dist/cjs/{function-extension-28a4d781.js → table-extension-1f162c4c.js} +1950 -20
  35. package/dist/cjs/{time-required-rule-ccf178e7.js → time-required-rule-9d39a620.js} +3 -3
  36. package/dist/cjs/{type-guard-f12b5bae.js → type-guard-69d2cf01.js} +1224 -1
  37. package/dist/cjs/{valid-credit-card-number-rule-ce5c9147.js → valid-credit-card-number-rule-9f40d1d9.js} +1 -1
  38. package/dist/cjs/vega-accordion.cjs.entry.js +13 -12
  39. package/dist/cjs/vega-app-header-button.cjs.entry.js +18 -17
  40. package/dist/cjs/vega-banner.cjs.entry.js +3 -3
  41. package/dist/cjs/vega-box.cjs.entry.js +17 -16
  42. package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
  43. package/dist/cjs/vega-button-circle.cjs.entry.js +17 -16
  44. package/dist/cjs/vega-button-group_2.cjs.entry.js +60 -10
  45. package/dist/cjs/vega-button-link.cjs.entry.js +5 -5
  46. package/dist/cjs/vega-button.cjs.entry.js +17 -15
  47. package/dist/cjs/vega-calendar_4.cjs.entry.js +87 -909
  48. package/dist/cjs/vega-card.cjs.entry.js +16 -15
  49. package/dist/cjs/vega-carousel.cjs.entry.js +16 -14
  50. package/dist/cjs/vega-checkbox_2.cjs.entry.js +7 -7
  51. package/dist/cjs/vega-chip.cjs.entry.js +18 -17
  52. package/dist/cjs/vega-code-block.cjs.entry.js +13 -13
  53. package/dist/cjs/vega-color-picker.cjs.entry.js +6 -6
  54. package/dist/cjs/vega-combo-box.cjs.entry.js +13 -13
  55. package/dist/cjs/vega-date-picker_2.cjs.entry.js +1759 -1568
  56. package/dist/cjs/vega-dialog_2.cjs.entry.js +22 -21
  57. package/dist/cjs/vega-divider.cjs.entry.js +12 -11
  58. package/dist/cjs/vega-dropdown_5.cjs.entry.js +21 -31
  59. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  60. package/dist/cjs/vega-field-label.cjs.entry.js +3 -3
  61. package/dist/cjs/vega-file-uploader.cjs.entry.js +6 -6
  62. package/dist/cjs/vega-flag-icon.cjs.entry.js +12 -11
  63. package/dist/cjs/vega-flex.cjs.entry.js +17 -16
  64. package/dist/cjs/vega-font.cjs.entry.js +16 -15
  65. package/dist/cjs/vega-form.cjs.entry.js +9 -9
  66. package/dist/cjs/vega-grid.cjs.entry.js +16 -15
  67. package/dist/cjs/vega-icon.cjs.entry.js +16 -15
  68. package/dist/cjs/vega-image-uploader.cjs.entry.js +18 -16
  69. package/dist/cjs/vega-input-credit-card.cjs.entry.js +14 -14
  70. package/dist/cjs/vega-input-numeric.cjs.entry.js +13 -13
  71. package/dist/cjs/vega-input-passcode.cjs.entry.js +12 -12
  72. package/dist/cjs/vega-input-phone-number.cjs.entry.js +19 -18
  73. package/dist/cjs/vega-input-range.cjs.entry.js +7 -7
  74. package/dist/cjs/vega-input-select.cjs.entry.js +16 -15
  75. package/dist/cjs/vega-input.cjs.entry.js +11 -11
  76. package/dist/cjs/{vega-internal-event-id-6d4a2c53.js → vega-internal-event-id-a5ef414b.js} +6 -4
  77. package/dist/cjs/vega-item-toggle.cjs.entry.js +3 -3
  78. package/dist/cjs/vega-left-nav_5.cjs.entry.js +20 -19
  79. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +13 -11
  80. package/dist/cjs/vega-page-notification_2.cjs.entry.js +1 -1
  81. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +4 -4
  82. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +2 -2
  83. package/dist/cjs/vega-pagination.cjs.entry.js +15 -13
  84. package/dist/cjs/vega-popover_2.cjs.entry.js +24 -23
  85. package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +905 -0
  86. package/dist/cjs/vega-radio_2.cjs.entry.js +10 -10
  87. package/dist/cjs/vega-rich-text-content.cjs.entry.js +9 -8
  88. package/dist/cjs/{vega-rich-text-editor_4.cjs.entry.js → vega-rich-text-editor_5.cjs.entry.js} +766 -279
  89. package/dist/cjs/vega-rich-text-table-selection-widget.cjs.entry.js +184 -0
  90. package/dist/cjs/vega-segment-control.cjs.entry.js +3 -3
  91. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +18 -16
  92. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +8 -8
  93. package/dist/cjs/vega-sidenav_3.cjs.entry.js +18 -16
  94. package/dist/cjs/vega-signature-capture.cjs.entry.js +15 -14
  95. package/dist/cjs/vega-stepper.cjs.entry.js +7 -7
  96. package/dist/cjs/vega-tab-group_2.cjs.entry.js +4 -4
  97. package/dist/cjs/vega-table_11.cjs.entry.js +39 -38
  98. package/dist/cjs/vega-textarea.cjs.entry.js +7 -7
  99. package/dist/cjs/vega-time-picker_2.cjs.entry.js +40 -39
  100. package/dist/cjs/vega-toggle-switch.cjs.entry.js +6 -6
  101. package/dist/cjs/vega-tooltip_2.cjs.entry.js +16 -14
  102. package/dist/cjs/vega.cjs.js +15 -13
  103. package/dist/collection/collection-manifest.json +23 -13
  104. package/dist/collection/components/vega-button/vega-button.css +4 -0
  105. package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.js +7 -0
  106. package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.js +25 -2
  107. package/dist/collection/components/vega-button-group/vega-button-group-item/vega-button-group-item.js +31 -2
  108. package/dist/collection/components/vega-button-group/vega-button-group.js +37 -0
  109. package/dist/collection/components/vega-button-link/vega-button-link.css +4 -0
  110. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.js +149 -0
  111. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-format-controller.js +3 -1
  112. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-keyboard-controller.js +1 -1
  113. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-value-controller.js +10 -26
  114. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.js +107 -445
  115. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-input-renderer-base.abstract.js +5 -1
  116. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-range-input-renderer.js +24 -17
  117. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-renderer.js +15 -20
  118. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-single-input-renderer.js +6 -17
  119. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/constants.js +14 -0
  120. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/dto/calendar-selection.js +126 -0
  121. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-allow-repick-controller.js +70 -0
  122. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.js +204 -0
  123. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-min-max-date-controller.js +56 -0
  124. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.js +191 -0
  125. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-state-base.abstract.js +54 -0
  126. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-today-controller.js +37 -0
  127. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.js +76 -0
  128. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.js +192 -0
  129. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +168 -0
  130. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +669 -278
  131. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.js +667 -3
  132. package/dist/collection/components/vega-date-picker/vega-date-picker.css +0 -11
  133. package/dist/collection/components/vega-date-picker/vega-date-picker.js +23 -40
  134. package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.js +3 -15
  135. package/dist/collection/components/vega-input-phone-number/slimmers/renderers/phone-number-input-renderer.js +1 -1
  136. package/dist/collection/components/vega-input-select/vega-input-select.js +1 -1
  137. package/dist/collection/components/vega-popover/vega-popover.js +14 -4
  138. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/dto/internal-progress-tracker-step.js +75 -0
  139. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.js +88 -0
  140. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.js +153 -0
  141. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-steps-controller.js +125 -0
  142. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-render-mode-controller.js +40 -0
  143. package/dist/collection/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.js +94 -0
  144. package/dist/collection/components/vega-progress-tracker/vega-progress-tracker-step/slimmers/controllers/vega-progress-tracker-step-state-controller.js +43 -0
  145. package/dist/collection/components/vega-progress-tracker/vega-progress-tracker-step/vega-progress-tracker-step.css +79 -0
  146. package/dist/collection/components/vega-progress-tracker/vega-progress-tracker-step/vega-progress-tracker-step.js +84 -0
  147. package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.css +69 -153
  148. package/dist/collection/components/vega-progress-tracker/vega-progress-tracker.js +88 -85
  149. package/dist/collection/components/vega-rich-text-editor/dto/annotations/text-style-annotation.js +11 -63
  150. package/dist/collection/components/vega-rich-text-editor/dto/blocks/block.abstract.js +15 -1
  151. package/dist/collection/components/vega-rich-text-editor/extensions/base-extension-renderer.js +2 -1
  152. package/dist/collection/components/vega-rich-text-editor/extensions/extension.abstract.js +8 -0
  153. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-children-remove-interceptor.js +42 -0
  154. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-content-delete-interceptor.js +25 -0
  155. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-row-insert-interceptor.js +23 -0
  156. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-block-strategy.js +25 -0
  157. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-column-strategy.js +57 -0
  158. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-row-strategy.js +57 -0
  159. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-block-strategy.js +54 -0
  160. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-column-strategy.js +42 -0
  161. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-row-strategy.js +117 -0
  162. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/select-table-column-strategy.js +22 -0
  163. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/table-column-strategy.abstract.js +19 -0
  164. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-row-strategy.js +133 -0
  165. package/dist/collection/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-table-column-strategy.js +99 -0
  166. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-block-action.js +13 -0
  167. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-column-action.js +13 -0
  168. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/delete-table-row-action.js +18 -0
  169. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-block-action.js +13 -0
  170. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-column-action.js +19 -0
  171. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/insert-table-row-action.js +26 -0
  172. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/select-table-column-action.js +13 -0
  173. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-annotations-action.js +18 -0
  174. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-caption-action.js +13 -0
  175. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/table-cell-annotations-action.js +18 -0
  176. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/toggle-header-row-action.js +13 -0
  177. package/dist/collection/components/vega-rich-text-editor/extensions/table/actions/toggle-header-table-column-action.js +15 -0
  178. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.js +91 -0
  179. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.js +57 -0
  180. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.js +120 -0
  181. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-head-cell-annotation.js +40 -0
  182. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-block.js +117 -0
  183. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-body-block.js +55 -0
  184. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.js +65 -0
  185. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.js +63 -0
  186. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-block.js +59 -0
  187. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.js +46 -0
  188. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-row-block.js +59 -0
  189. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-body-renderer.js +15 -0
  190. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.js +22 -0
  191. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-cell-renderer.js +74 -0
  192. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.js +99 -0
  193. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-head-cell-renderer.js +12 -0
  194. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-head-renderer.js +15 -0
  195. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.js +103 -0
  196. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-row-renderer.js +15 -0
  197. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.js +145 -0
  198. package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/caption-operation.js +78 -0
  199. package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/column-operation.js +109 -0
  200. package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/row-operation.js +132 -0
  201. package/dist/collection/components/vega-rich-text-editor/extensions/table/setting-event-handlers/setting-event-handler.abstract.js +44 -0
  202. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-extension.js +118 -0
  203. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-icon.js +3 -0
  204. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-selection.js +348 -0
  205. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.js +229 -0
  206. package/dist/collection/components/vega-rich-text-editor/extensions/table/utils/utils.js +102 -0
  207. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/controllers/selection-widget-keyboard-controller.js +36 -0
  208. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/renderers/selection-widget-renderer.js +83 -0
  209. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.css +41 -0
  210. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.js +80 -0
  211. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/assets/icon.js +20 -0
  212. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/caption-button-slimmer.js +27 -0
  213. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/cell-properties-button-slimmer.js +26 -0
  214. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/column-button-slimmer.js +86 -0
  215. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.js +101 -0
  216. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-properties-button-slimmer.js +26 -0
  217. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.js +75 -0
  218. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/vega-rich-text-table-setting-renderer.js +50 -0
  219. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.css +20 -0
  220. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.js +166 -0
  221. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/insert-token-node-strategy.js +5 -1
  222. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.js +12 -1
  223. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.js +16 -10
  224. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node.js +1 -1
  225. package/dist/collection/components/vega-rich-text-editor/public-api.js +1 -0
  226. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/extension-controller.js +20 -0
  227. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/selection-controller.js +23 -2
  228. package/dist/collection/components/vega-rich-text-editor/test/dto/annotation-style.test.js +2 -1
  229. package/dist/collection/components/vega-rich-text-editor/test/dto/annotations.test.js +9 -0
  230. package/dist/collection/components/vega-rich-text-editor/test/dto/blocks/text-block.test.js +1 -1
  231. package/dist/collection/components/vega-rich-text-editor/test/dto/content-state.test.js +15 -15
  232. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/caption-operation.test.js +99 -0
  233. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-annotation.test.js +89 -0
  234. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-caption-annotations.test.js +79 -0
  235. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-cell-annotation.test.js +128 -0
  236. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-dto.test.js +517 -0
  237. package/dist/collection/components/vega-rich-text-editor/test/extensions/table/table-test-utils.js +172 -0
  238. package/dist/collection/components/vega-rich-text-editor/test/spec-utils.js +5 -2
  239. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.css +4 -0
  240. package/dist/collection/constants/regex.js +1 -0
  241. package/dist/collection/constants/ui.js +3 -0
  242. package/dist/collection/global/scripts/before-vega-load.js +2 -0
  243. package/dist/collection/helpers/calendar/calendar-date.js +273 -1
  244. package/dist/collection/helpers/calendar/calendar-period/calendar-period.abstract.js +9 -0
  245. package/dist/collection/helpers/calendar/calendar-period/month-period.js +16 -4
  246. package/dist/collection/helpers/calendar/test/calendar-date.test.js +73 -0
  247. package/dist/collection/helpers/calendar/test/calendar-period/day-period.test.js +9 -0
  248. package/dist/collection/helpers/calendar/test/calendar-period/month-period.test.js +41 -0
  249. package/dist/collection/helpers/calendar/test/calendar-period/week-period.test.js +11 -0
  250. package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +3 -2
  251. package/dist/collection/helpers/event-manager/event-id/vega-event-id.js +3 -1
  252. package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +5 -2
  253. package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +2 -1
  254. package/dist/collection/helpers/slimmers/position-calculation/position-calculation-controller.js +7 -0
  255. package/dist/collection/helpers/ui/element-appender.js +35 -5
  256. package/dist/collection/types/type-guard.js +10 -0
  257. package/dist/collection/utils/date.js +14 -3
  258. package/dist/collection/utils/e2e-utils.js +8 -2
  259. package/dist/collection/utils/spec-utils.js +4 -3
  260. package/dist/collection/utils/test/date.test.js +2 -0
  261. package/dist/esm/{app-globals-fd4b7d97.js → app-globals-e7a8d0cc.js} +9 -7
  262. package/dist/esm/{child-nodes-event-prevent-slimmer-76331524.js → child-nodes-event-prevent-slimmer-9ae34332.js} +1 -1
  263. package/dist/esm/{code-block-ecb4491b.js → code-block-3d3a9030.js} +30 -68
  264. package/dist/esm/column-operation-4a93bf52.js +1300 -0
  265. package/dist/esm/{component-value-history-controller-slimmer.abstract-5d618b88.js → component-value-history-controller-slimmer.abstract-d84e7bab.js} +28 -7
  266. package/dist/esm/{date-required-rule-8944f3bf.js → date-required-rule-a9980386.js} +1 -1
  267. package/dist/esm/{design-token-2d77e8f5.js → design-token-1575f6d9.js} +4 -5
  268. package/dist/esm/{dom-node-subject-observer-factory-dca87b70.js → dom-node-subject-observer-factory-f81f215f.js} +4 -2
  269. package/dist/esm/{dto-renderer-manager-d862ae78.js → dto-renderer-manager-23784148.js} +5 -5
  270. package/dist/esm/{element-appender-slimmer-6791c332.js → element-appender-slimmer-1a50e184.js} +51 -13
  271. package/dist/esm/{event-emit-slimmer-4e28e9f8.js → event-emit-slimmer-966716fa.js} +2 -2
  272. package/dist/esm/{form-field-controller-slimmer-bf071b75.js → form-field-controller-slimmer-0020997d.js} +4 -4
  273. package/dist/esm/{image-annotation-action-d0af138c.js → image-annotation-action-dba16587.js} +3 -3
  274. package/dist/esm/index-090d31ca.js +12 -8
  275. package/dist/esm/{index-c943d263.js → index-d72e7fb3.js} +2 -2
  276. package/dist/esm/index.js +21 -21
  277. package/dist/esm/{inject-keyboard-manager-ffd351b9.js → inject-keyboard-manager-9241968c.js} +1 -1
  278. package/dist/esm/{internal-vega-event-manager-516aa721.js → internal-vega-event-manager-4f51b17c.js} +3 -2
  279. package/dist/esm/{keyboard-manager-5d8f3582.js → keyboard-manager-89acac79.js} +1 -1
  280. package/dist/esm/{keyboard-manager-slimmer-f39214e4.js → keyboard-manager-slimmer-e303cb7d.js} +1 -1
  281. package/dist/esm/{language-extension-8f51f5ff.js → language-extension-710fe56d.js} +2 -2
  282. package/dist/esm/loader.js +17 -15
  283. package/dist/esm/month-view-generator-4bec99fd.js +98 -0
  284. package/dist/esm/{page-resize-observer-slimmer-0bf7fbf3.js → page-resize-observer-slimmer-8744cb44.js} +1 -1
  285. package/dist/esm/polyfills/core-js.js +0 -0
  286. package/dist/esm/polyfills/dom.js +0 -0
  287. package/dist/esm/polyfills/es5-html-element.js +0 -0
  288. package/dist/esm/polyfills/index.js +0 -0
  289. package/dist/esm/polyfills/system.js +0 -0
  290. package/dist/esm/{public-rules-d10e76f4.js → public-rules-522ba4b1.js} +15 -15
  291. package/dist/esm/{range-f7b9e2fb.js → range-cdd85d30.js} +1 -1
  292. package/dist/esm/{responsive-format-facade-267935ae.js → responsive-format-facade-405f90d2.js} +6 -6
  293. package/dist/esm/{rich-text-editor-required-rule-774b822b.js → rich-text-editor-required-rule-7d2d9615.js} +1 -1
  294. package/dist/esm/{string-format-strategy.abstract-452f4398.js → string-format-strategy.abstract-75540c16.js} +1 -1
  295. package/dist/esm/{string-input-formatter-slimmer-3acd240c.js → string-input-formatter-slimmer-96ccc8cf.js} +4 -4
  296. package/dist/esm/{string-mask-strategy-6232a1c1.js → string-mask-strategy-4a18ed1a.js} +2 -2
  297. package/dist/esm/{style-formatter-3f88c491.js → style-formatter-52cd20f7.js} +2 -2
  298. package/dist/esm/{sub-state-notify-slimmer-56380f02.js → sub-state-notify-slimmer-97953a87.js} +2 -2
  299. package/dist/esm/{sub-state-observer-slimmer-3504e2f2.js → sub-state-observer-slimmer-3f2b954f.js} +2 -2
  300. package/dist/esm/{function-extension-8d39db56.js → table-extension-164b0d6c.js} +1952 -23
  301. package/dist/esm/{time-required-rule-a01163b5.js → time-required-rule-8ec1faf5.js} +1 -1
  302. package/dist/esm/{type-guard-12f7654b.js → type-guard-b48aec98.js} +1204 -2
  303. package/dist/esm/{ui-8424715a.js → ui-28fd4193.js} +1 -1
  304. package/dist/esm/{valid-credit-card-number-rule-81443274.js → valid-credit-card-number-rule-96eaf9b1.js} +1 -1
  305. package/dist/esm/vega-accordion.entry.js +15 -14
  306. package/dist/esm/vega-app-header-button.entry.js +20 -19
  307. package/dist/esm/vega-banner.entry.js +3 -3
  308. package/dist/esm/vega-box.entry.js +19 -18
  309. package/dist/esm/vega-breadcrumb.entry.js +4 -4
  310. package/dist/esm/vega-button-circle.entry.js +19 -18
  311. package/dist/esm/vega-button-group_2.entry.js +60 -10
  312. package/dist/esm/vega-button-link.entry.js +5 -5
  313. package/dist/esm/vega-button.entry.js +19 -17
  314. package/dist/esm/vega-calendar_4.entry.js +46 -868
  315. package/dist/esm/vega-card.entry.js +18 -17
  316. package/dist/esm/vega-carousel.entry.js +18 -16
  317. package/dist/esm/vega-checkbox_2.entry.js +9 -9
  318. package/dist/esm/vega-chip.entry.js +20 -19
  319. package/dist/esm/vega-code-block.entry.js +14 -14
  320. package/dist/esm/vega-color-picker.entry.js +8 -8
  321. package/dist/esm/vega-combo-box.entry.js +15 -15
  322. package/dist/esm/vega-date-picker_2.entry.js +1746 -1555
  323. package/dist/esm/vega-dialog_2.entry.js +18 -17
  324. package/dist/esm/vega-divider.entry.js +14 -13
  325. package/dist/esm/vega-dropdown_5.entry.js +21 -31
  326. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  327. package/dist/esm/vega-field-label.entry.js +3 -3
  328. package/dist/esm/vega-file-uploader.entry.js +8 -8
  329. package/dist/esm/vega-flag-icon.entry.js +14 -13
  330. package/dist/esm/vega-flex.entry.js +19 -18
  331. package/dist/esm/vega-font.entry.js +18 -17
  332. package/dist/esm/vega-form.entry.js +11 -11
  333. package/dist/esm/vega-grid.entry.js +18 -17
  334. package/dist/esm/vega-icon.entry.js +18 -17
  335. package/dist/esm/vega-image-uploader.entry.js +19 -17
  336. package/dist/esm/vega-input-credit-card.entry.js +16 -16
  337. package/dist/esm/vega-input-numeric.entry.js +15 -15
  338. package/dist/esm/vega-input-passcode.entry.js +14 -14
  339. package/dist/esm/vega-input-phone-number.entry.js +18 -17
  340. package/dist/esm/vega-input-range.entry.js +9 -9
  341. package/dist/esm/vega-input-select.entry.js +17 -16
  342. package/dist/esm/vega-input.entry.js +13 -13
  343. package/dist/esm/{vega-internal-event-id-5c3e5f7f.js → vega-internal-event-id-54ce7562.js} +4 -3
  344. package/dist/esm/vega-item-toggle.entry.js +4 -4
  345. package/dist/esm/vega-left-nav_5.entry.js +18 -17
  346. package/dist/esm/vega-loader-wrapper_2.entry.js +13 -11
  347. package/dist/esm/vega-page-notification_2.entry.js +1 -1
  348. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +4 -4
  349. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +2 -2
  350. package/dist/esm/vega-pagination.entry.js +17 -15
  351. package/dist/esm/vega-popover_2.entry.js +24 -23
  352. package/dist/esm/vega-progress-tracker_2.entry.js +900 -0
  353. package/dist/esm/vega-radio_2.entry.js +12 -12
  354. package/dist/esm/vega-rich-text-content.entry.js +10 -9
  355. package/dist/esm/{vega-rich-text-editor_4.entry.js → vega-rich-text-editor_5.entry.js} +767 -281
  356. package/dist/esm/vega-rich-text-table-selection-widget.entry.js +180 -0
  357. package/dist/esm/vega-segment-control.entry.js +5 -5
  358. package/dist/esm/vega-selection-chip_2.entry.js +20 -18
  359. package/dist/esm/vega-selection-tile_2.entry.js +10 -10
  360. package/dist/esm/vega-sidenav_3.entry.js +16 -14
  361. package/dist/esm/vega-signature-capture.entry.js +17 -16
  362. package/dist/esm/vega-stepper.entry.js +9 -9
  363. package/dist/esm/vega-tab-group_2.entry.js +6 -6
  364. package/dist/esm/vega-table_11.entry.js +16 -15
  365. package/dist/esm/vega-text.entry.js +2 -2
  366. package/dist/esm/vega-textarea.entry.js +9 -9
  367. package/dist/esm/vega-time-picker_2.entry.js +21 -20
  368. package/dist/esm/vega-toggle-switch.entry.js +8 -8
  369. package/dist/esm/vega-tooltip_2.entry.js +18 -16
  370. package/dist/esm/vega.js +17 -15
  371. package/dist/sri/vega-sri-manifest.json +342 -346
  372. package/dist/types/components/vega-button-group/types.d.ts +2 -1
  373. package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/controllers/vega-button-group-item-sub-state-controller.d.ts +1 -0
  374. package/dist/types/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.d.ts +11 -0
  375. package/dist/types/components/vega-button-group/vega-button-group-item/vega-button-group-item.d.ts +7 -0
  376. package/dist/types/components/vega-button-group/vega-button-group.d.ts +8 -0
  377. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-open-state-controller.d.ts +60 -0
  378. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-value-controller.d.ts +3 -4
  379. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +29 -124
  380. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-input-renderer-base.abstract.d.ts +1 -0
  381. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-range-input-renderer.d.ts +5 -5
  382. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-renderer.d.ts +2 -3
  383. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-single-input-renderer.d.ts +1 -4
  384. package/dist/types/components/vega-date-picker/types.d.ts +9 -0
  385. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/constants.d.ts +1 -0
  386. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/dto/calendar-selection.d.ts +62 -0
  387. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-allow-repick-controller.d.ts +31 -0
  388. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.d.ts +78 -0
  389. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-min-max-date-controller.d.ts +20 -0
  390. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-selection-controller.d.ts +75 -0
  391. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-state-base.abstract.d.ts +29 -0
  392. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-today-controller.d.ts +15 -0
  393. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +18 -0
  394. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.d.ts +40 -0
  395. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.d.ts +32 -0
  396. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.d.ts +182 -0
  397. package/dist/types/components/vega-date-picker/vega-date-picker.d.ts +6 -14
  398. package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.d.ts +0 -4
  399. package/dist/types/components/vega-popover/vega-popover.d.ts +2 -1
  400. package/dist/types/components/vega-progress-tracker/slimmers/controllers/dto/internal-progress-tracker-step.d.ts +55 -0
  401. package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.d.ts +27 -0
  402. package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-step-controller.d.ts +63 -0
  403. package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-steps-controller.d.ts +39 -0
  404. package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-render-mode-controller.d.ts +21 -0
  405. package/dist/types/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.d.ts +21 -0
  406. package/dist/types/components/vega-progress-tracker/type.d.ts +1 -0
  407. package/dist/types/components/vega-progress-tracker/vega-progress-tracker-step/slimmers/controllers/vega-progress-tracker-step-state-controller.d.ts +12 -0
  408. package/dist/types/components/vega-progress-tracker/vega-progress-tracker-step/vega-progress-tracker-step.d.ts +22 -0
  409. package/dist/types/components/vega-progress-tracker/vega-progress-tracker.d.ts +24 -10
  410. package/dist/types/components/vega-rich-text-editor/dto/annotations/annotation.abstract.d.ts +2 -5
  411. package/dist/types/components/vega-rich-text-editor/dto/annotations/block-annotation.abstract.d.ts +3 -3
  412. package/dist/types/components/vega-rich-text-editor/dto/annotations/text-style-annotation.d.ts +7 -0
  413. package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +10 -6
  414. package/dist/types/components/vega-rich-text-editor/extensions/extension.abstract.d.ts +5 -0
  415. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-children-remove-interceptor.d.ts +25 -0
  416. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-cell-content-delete-interceptor.d.ts +20 -0
  417. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-interceptors/prevent-row-insert-interceptor.d.ts +19 -0
  418. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-block-strategy.d.ts +14 -0
  419. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-column-strategy.d.ts +31 -0
  420. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/delete-table-row-strategy.d.ts +28 -0
  421. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-block-strategy.d.ts +27 -0
  422. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-column-strategy.d.ts +19 -0
  423. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/insert-table-row-strategy.d.ts +27 -0
  424. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/select-table-column-strategy.d.ts +12 -0
  425. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/table-column-strategy.abstract.d.ts +20 -0
  426. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-row-strategy.d.ts +41 -0
  427. package/dist/types/components/vega-rich-text-editor/extensions/table/action-handler-strategies/toggle-header-table-column-strategy.d.ts +45 -0
  428. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-block-action.d.ts +12 -0
  429. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-column-action.d.ts +15 -0
  430. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/delete-table-row-action.d.ts +17 -0
  431. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-block-action.d.ts +20 -0
  432. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-column-action.d.ts +23 -0
  433. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/insert-table-row-action.d.ts +23 -0
  434. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/select-table-column-action.d.ts +18 -0
  435. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-annotations-action.d.ts +16 -0
  436. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-caption-action.d.ts +14 -0
  437. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/table-cell-annotations-action.d.ts +16 -0
  438. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/toggle-header-row-action.d.ts +12 -0
  439. package/dist/types/components/vega-rich-text-editor/extensions/table/actions/toggle-header-table-column-action.d.ts +16 -0
  440. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.d.ts +64 -0
  441. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.d.ts +26 -0
  442. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.d.ts +66 -0
  443. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-head-cell-annotation.d.ts +22 -0
  444. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-block.d.ts +78 -0
  445. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-body-block.d.ts +42 -0
  446. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.d.ts +41 -0
  447. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.d.ts +45 -0
  448. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-block.d.ts +42 -0
  449. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.d.ts +30 -0
  450. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-row-block.d.ts +44 -0
  451. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-body-renderer.d.ts +12 -0
  452. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.d.ts +13 -0
  453. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-cell-renderer.d.ts +37 -0
  454. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.d.ts +51 -0
  455. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-head-cell-renderer.d.ts +12 -0
  456. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-head-renderer.d.ts +12 -0
  457. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.d.ts +39 -0
  458. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-row-renderer.d.ts +12 -0
  459. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.d.ts +65 -0
  460. package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/caption-operation.d.ts +36 -0
  461. package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/column-operation.d.ts +55 -0
  462. package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/row-operation.d.ts +61 -0
  463. package/dist/types/components/vega-rich-text-editor/extensions/table/setting-event-handlers/setting-event-handler.abstract.d.ts +46 -0
  464. package/dist/types/components/vega-rich-text-editor/extensions/table/table-extension.d.ts +31 -0
  465. package/dist/types/components/vega-rich-text-editor/extensions/table/table-icon.d.ts +3 -0
  466. package/dist/types/components/vega-rich-text-editor/extensions/table/table-selection.d.ts +142 -0
  467. package/dist/types/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.d.ts +85 -0
  468. package/dist/types/components/vega-rich-text-editor/extensions/table/utils/utils.d.ts +53 -0
  469. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/controllers/selection-widget-keyboard-controller.d.ts +15 -0
  470. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/slimmers/renderers/selection-widget-renderer.d.ts +31 -0
  471. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-selection-widget/vega-rich-text-table-selection-widget.d.ts +27 -0
  472. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/assets/icon.d.ts +2 -0
  473. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/caption-button-slimmer.d.ts +11 -0
  474. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/cell-properties-button-slimmer.d.ts +11 -0
  475. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/column-button-slimmer.d.ts +28 -0
  476. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.d.ts +36 -0
  477. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-properties-button-slimmer.d.ts +11 -0
  478. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.d.ts +36 -0
  479. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/vega-rich-text-table-setting-renderer.d.ts +11 -0
  480. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.d.ts +46 -0
  481. package/dist/types/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.d.ts +7 -0
  482. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-extension.d.ts +1 -1
  483. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.d.ts +7 -0
  484. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.d.ts +2 -2
  485. package/dist/types/components/vega-rich-text-editor/interface.d.ts +26 -3
  486. package/dist/types/components/vega-rich-text-editor/public-api.d.ts +1 -0
  487. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/extension-controller.d.ts +4 -0
  488. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/selection-controller.d.ts +19 -6
  489. package/dist/types/components/vega-rich-text-editor/test/extensions/table/caption-operation.test.d.ts +1 -0
  490. package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-annotation.test.d.ts +1 -0
  491. package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-caption-annotations.test.d.ts +1 -0
  492. package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-cell-annotation.test.d.ts +1 -0
  493. package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-dto.test.d.ts +1 -0
  494. package/dist/types/components/vega-rich-text-editor/test/extensions/table/table-test-utils.d.ts +11 -0
  495. package/dist/types/components/vega-rich-text-editor/test/spec-utils.d.ts +4 -0
  496. package/dist/types/components.d.ts +286 -6
  497. package/dist/types/constants/regex.d.ts +1 -0
  498. package/dist/types/constants/ui.d.ts +1 -1
  499. package/dist/types/helpers/calendar/calendar-date.d.ts +86 -2
  500. package/dist/types/helpers/calendar/calendar-period/calendar-period.abstract.d.ts +7 -0
  501. package/dist/types/helpers/event-manager/event-id/vega-event-id.d.ts +3 -1
  502. package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +5 -2
  503. package/dist/types/helpers/ui/element-appender.d.ts +14 -0
  504. package/dist/types/types/components.type.d.ts +5 -0
  505. package/dist/types/types/type-guard.d.ts +8 -0
  506. package/dist/types/utils/date.d.ts +11 -2
  507. package/dist/types/utils/e2e-utils.d.ts +7 -0
  508. package/dist/types/utils/spec-utils.d.ts +2 -1
  509. package/dist/vega/index.esm.js +1 -1
  510. package/dist/vega/p-09561e90.entry.js +1 -0
  511. package/dist/vega/p-095c778c.entry.js +1 -0
  512. package/dist/vega/{p-e6351dab.entry.js → p-0bca50ab.entry.js} +1 -1
  513. package/dist/vega/{p-7d9cd9c8.js → p-10ac8b57.js} +1 -1
  514. package/dist/vega/{p-dde03224.entry.js → p-11a7daad.entry.js} +1 -1
  515. package/dist/vega/{p-447c7590.js → p-1282b67e.js} +1 -1
  516. package/dist/vega/{p-7b42da4f.entry.js → p-137e5c70.entry.js} +1 -1
  517. package/dist/vega/p-161b9c5b.js +1 -0
  518. package/dist/vega/p-174db33b.js +1 -0
  519. package/dist/vega/p-1815e753.entry.js +1 -0
  520. package/dist/vega/{p-1bb0c934.js → p-18bcfd7a.js} +1 -1
  521. package/dist/vega/p-194722fe.entry.js +1 -0
  522. package/dist/vega/{p-de97c6d9.js → p-1be7c6c4.js} +1 -1
  523. package/dist/vega/p-1c33d25e.entry.js +1 -0
  524. package/dist/vega/p-1dd07d64.entry.js +1 -0
  525. package/dist/vega/{p-a6010b93.entry.js → p-1e0d8228.entry.js} +1 -1
  526. package/dist/vega/p-207cfa6a.js +1 -0
  527. package/dist/vega/p-218e29c2.js +1 -0
  528. package/dist/vega/{p-75b5894f.entry.js → p-2249b040.entry.js} +1 -1
  529. package/dist/vega/p-23183d4d.js +1 -0
  530. package/dist/vega/p-238ec2b9.entry.js +1 -0
  531. package/dist/vega/p-2428457e.entry.js +1 -0
  532. package/dist/vega/p-263ad7b6.js +1 -0
  533. package/dist/vega/{p-ea96635b.entry.js → p-2688bc6f.entry.js} +1 -1
  534. package/dist/vega/{p-8350506e.js → p-26a43b4c.js} +1 -1
  535. package/dist/vega/p-285815b5.entry.js +1 -0
  536. package/dist/vega/{p-cac6239b.entry.js → p-2c07b213.entry.js} +1 -1
  537. package/dist/vega/{p-c0223a17.entry.js → p-31a65402.entry.js} +1 -1
  538. package/dist/vega/p-34a1a0c5.entry.js +1 -0
  539. package/dist/vega/{p-19522949.js → p-3d85411d.js} +1 -1
  540. package/dist/vega/p-3f561dd5.entry.js +1 -0
  541. package/dist/vega/{p-74168615.js → p-40f39194.js} +1 -1
  542. package/dist/vega/p-475f7bda.js +1 -0
  543. package/dist/vega/p-4785203e.entry.js +1 -0
  544. package/dist/vega/p-5051f0c1.entry.js +1 -0
  545. package/dist/vega/p-529daab4.entry.js +1 -0
  546. package/dist/vega/p-53c6ce54.entry.js +1 -0
  547. package/dist/vega/{p-db57dddc.js → p-5504ebdf.js} +1 -1
  548. package/dist/vega/p-5585d2b5.js +1 -0
  549. package/dist/vega/{p-98fb9eaa.entry.js → p-56ce0c4b.entry.js} +1 -1
  550. package/dist/vega/p-58f5da43.js +1 -0
  551. package/dist/vega/{p-2f09c6aa.js → p-596895ec.js} +1 -1
  552. package/dist/vega/{p-fde50319.js → p-5b472921.js} +1 -1
  553. package/dist/vega/p-5d7e908a.entry.js +1 -0
  554. package/dist/vega/p-5f377954.js +1 -1
  555. package/dist/vega/{p-a0467b83.js → p-5fb6a3b5.js} +1 -1
  556. package/dist/vega/p-63c84ff6.entry.js +1 -0
  557. package/dist/vega/p-6961fac0.entry.js +1 -0
  558. package/dist/vega/{p-35cd469a.entry.js → p-699e46d1.entry.js} +1 -1
  559. package/dist/vega/p-6aa7ace9.js +1 -0
  560. package/dist/vega/p-6b631ff1.entry.js +1 -0
  561. package/dist/vega/{p-71f9c4d4.js → p-6c1ef2ed.js} +1 -1
  562. package/dist/vega/p-6ee3b103.js +1 -0
  563. package/dist/vega/{p-4a467973.js → p-71f2235e.js} +1 -1
  564. package/dist/vega/p-776b2f3d.entry.js +1 -0
  565. package/dist/vega/p-7ac32e71.js +1 -0
  566. package/dist/vega/p-7e6c5eb8.entry.js +1 -0
  567. package/dist/vega/{p-61d9cdf9.entry.js → p-7eaa8ac0.entry.js} +1 -1
  568. package/dist/vega/p-8014cb45.entry.js +1 -0
  569. package/dist/vega/p-877b36ae.entry.js +1 -0
  570. package/dist/vega/{p-18e8c54a.entry.js → p-883c5174.entry.js} +1 -1
  571. package/dist/vega/{p-58769a72.entry.js → p-8b969a71.entry.js} +1 -1
  572. package/dist/vega/p-8f6d42b0.entry.js +1 -0
  573. package/dist/vega/{p-7c1d08db.entry.js → p-8feb1298.entry.js} +1 -1
  574. package/dist/vega/p-95188267.entry.js +1 -0
  575. package/dist/vega/p-96aa0f3b.js +1 -0
  576. package/dist/vega/p-9a83a6b0.js +1 -0
  577. package/dist/vega/{p-52efaadb.entry.js → p-9e2cf904.entry.js} +1 -1
  578. package/dist/vega/p-9e545fde.entry.js +1 -0
  579. package/dist/vega/p-9f4364ec.entry.js +1 -0
  580. package/dist/vega/p-a33dc7eb.entry.js +1 -0
  581. package/dist/vega/p-a3a80712.js +1 -0
  582. package/dist/vega/{p-924b4e24.js → p-a4ec6575.js} +1 -1
  583. package/dist/vega/{p-3925c16b.js → p-a8dad05d.js} +1 -1
  584. package/dist/vega/{p-b9798158.js → p-b47df664.js} +1 -1
  585. package/dist/vega/{p-652626b6.entry.js → p-b737b93a.entry.js} +1 -1
  586. package/dist/vega/p-baa44cf5.entry.js +1 -0
  587. package/dist/vega/p-badc14cc.entry.js +1 -0
  588. package/dist/vega/{p-3c865f86.entry.js → p-bc2451f7.entry.js} +1 -1
  589. package/dist/vega/p-bdb5362c.entry.js +1 -0
  590. package/dist/vega/p-be33db7b.js +1 -0
  591. package/dist/vega/p-bfe01850.js +1 -0
  592. package/dist/vega/p-c141b10e.entry.js +1 -0
  593. package/dist/vega/p-c465b6dd.entry.js +1 -0
  594. package/dist/vega/{p-8fae8f9e.js → p-d1d0f08a.js} +1 -1
  595. package/dist/vega/{p-ad65f65f.entry.js → p-d6032515.entry.js} +1 -1
  596. package/dist/vega/{p-91d71ae9.entry.js → p-d69a6454.entry.js} +1 -1
  597. package/dist/vega/p-d6cc786a.entry.js +1 -0
  598. package/dist/vega/p-d85d7862.entry.js +1 -0
  599. package/dist/vega/p-d991fb11.js +1 -0
  600. package/dist/vega/{p-c2f21426.entry.js → p-da77d71f.entry.js} +1 -1
  601. package/dist/vega/{p-9ce249a9.js → p-de70aac1.js} +1 -1
  602. package/dist/vega/p-e47ae7bc.entry.js +1 -0
  603. package/dist/vega/p-e8495b6c.entry.js +1 -0
  604. package/dist/vega/{p-0f7dec29.entry.js → p-e8654ab5.entry.js} +1 -1
  605. package/dist/vega/p-e94701e2.entry.js +1 -0
  606. package/dist/vega/{p-3e040167.entry.js → p-e9e1293a.entry.js} +1 -1
  607. package/dist/vega/p-ef48178e.entry.js +1 -0
  608. package/dist/vega/{p-8c6b6ad7.entry.js → p-f729743c.entry.js} +1 -1
  609. package/dist/vega/{p-1f26de89.js → p-fb6b3b98.js} +1 -1
  610. package/dist/vega/p-fca7c998.entry.js +1 -0
  611. package/dist/vega/vega.esm.js +1 -1
  612. package/package.json +2 -3
  613. package/style/vega-icons.css +17266 -0
  614. package/dist/cjs/date-0a6bb035.js +0 -95
  615. package/dist/cjs/mobilefriendly-aa2e50e9.js +0 -13
  616. package/dist/cjs/remote-invocation-registry-fc22fdd0.js +0 -65
  617. package/dist/cjs/state-background-color-formatter-aa5570f6.js +0 -85
  618. package/dist/cjs/vega-progress-tracker.cjs.entry.js +0 -252
  619. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-controller.js +0 -282
  620. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-element-appender-controller.js +0 -35
  621. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-mobile-controller.js +0 -53
  622. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-month-year-change-event-controller.js +0 -139
  623. package/dist/collection/components/vega-date-picker/slimmers/controllers/vega-date-picker-zindex-controller.js +0 -49
  624. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.js +0 -341
  625. package/dist/esm/date-c55b97f0.js +0 -87
  626. package/dist/esm/mobilefriendly-c5d0573d.js +0 -11
  627. package/dist/esm/remote-invocation-registry-d69245c2.js +0 -63
  628. package/dist/esm/state-background-color-formatter-0f01d27a.js +0 -82
  629. package/dist/esm/vega-progress-tracker.entry.js +0 -248
  630. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-calendar-controller.d.ts +0 -96
  631. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-element-appender-controller.d.ts +0 -12
  632. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-mobile-controller.d.ts +0 -18
  633. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-month-year-change-event-controller.d.ts +0 -46
  634. package/dist/types/components/vega-date-picker/slimmers/controllers/vega-date-picker-zindex-controller.d.ts +0 -15
  635. package/dist/types/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.d.ts +0 -97
  636. package/dist/vega/p-08835909.js +0 -1
  637. package/dist/vega/p-0cdb38d3.js +0 -1
  638. package/dist/vega/p-0e5297b9.entry.js +0 -1
  639. package/dist/vega/p-0feceaac.entry.js +0 -1
  640. package/dist/vega/p-115b42e6.entry.js +0 -1
  641. package/dist/vega/p-1372b984.js +0 -1
  642. package/dist/vega/p-1739a877.entry.js +0 -1
  643. package/dist/vega/p-1a59703b.entry.js +0 -1
  644. package/dist/vega/p-1e92737c.entry.js +0 -1
  645. package/dist/vega/p-235bf01b.entry.js +0 -1
  646. package/dist/vega/p-257ff60b.entry.js +0 -1
  647. package/dist/vega/p-25a3fad7.entry.js +0 -1
  648. package/dist/vega/p-2622f0a8.entry.js +0 -1
  649. package/dist/vega/p-26c4f07c.entry.js +0 -1
  650. package/dist/vega/p-2ec7e020.entry.js +0 -1
  651. package/dist/vega/p-308aa2e3.js +0 -1
  652. package/dist/vega/p-330c224f.entry.js +0 -1
  653. package/dist/vega/p-33f3f306.js +0 -1
  654. package/dist/vega/p-35252108.js +0 -1
  655. package/dist/vega/p-37020002.entry.js +0 -1
  656. package/dist/vega/p-379f1b40.entry.js +0 -1
  657. package/dist/vega/p-38cb2b40.js +0 -1
  658. package/dist/vega/p-4e13a26f.js +0 -1
  659. package/dist/vega/p-54e56f0d.entry.js +0 -1
  660. package/dist/vega/p-5972c101.entry.js +0 -1
  661. package/dist/vega/p-5d827fe5.js +0 -1
  662. package/dist/vega/p-5e708ad5.entry.js +0 -1
  663. package/dist/vega/p-65a9af84.entry.js +0 -1
  664. package/dist/vega/p-67eb405d.entry.js +0 -1
  665. package/dist/vega/p-67f159c3.js +0 -1
  666. package/dist/vega/p-69aec6af.entry.js +0 -1
  667. package/dist/vega/p-71ddccf2.entry.js +0 -1
  668. package/dist/vega/p-77e64f26.js +0 -1
  669. package/dist/vega/p-785d9ac3.entry.js +0 -1
  670. package/dist/vega/p-796d840c.entry.js +0 -1
  671. package/dist/vega/p-7a590741.entry.js +0 -1
  672. package/dist/vega/p-824a06ba.js +0 -1
  673. package/dist/vega/p-85f9a980.js +0 -1
  674. package/dist/vega/p-867a4970.js +0 -1
  675. package/dist/vega/p-880569ec.entry.js +0 -1
  676. package/dist/vega/p-8ac2f43f.entry.js +0 -1
  677. package/dist/vega/p-8ff96b8c.entry.js +0 -13
  678. package/dist/vega/p-9794fd88.entry.js +0 -1
  679. package/dist/vega/p-9e59345f.entry.js +0 -1
  680. package/dist/vega/p-a10b9f2e.js +0 -12
  681. package/dist/vega/p-a630ce73.entry.js +0 -1
  682. package/dist/vega/p-b1faebe0.js +0 -1
  683. package/dist/vega/p-b27fcac4.entry.js +0 -1
  684. package/dist/vega/p-b5ba0c11.js +0 -1
  685. package/dist/vega/p-b8b9ed2c.js +0 -1
  686. package/dist/vega/p-b9b81702.entry.js +0 -1
  687. package/dist/vega/p-bcc396c2.entry.js +0 -1
  688. package/dist/vega/p-bccee21e.js +0 -1
  689. package/dist/vega/p-bfb86c3e.entry.js +0 -1
  690. package/dist/vega/p-c224b44c.js +0 -1
  691. package/dist/vega/p-c6ae78f2.entry.js +0 -1
  692. package/dist/vega/p-cbabb07a.entry.js +0 -1
  693. package/dist/vega/p-fb320b50.entry.js +0 -1
  694. package/dist/vega/p-ff470366.entry.js +0 -1
@@ -1,17 +1,23 @@
1
1
  import { I as InjectVegaTelemetrySlimmer, c as createPublicAPIRuntimeMetricsSlimmer, g as generateUUID } from './create-public-api-runtime-metrics-slimmer-bedf3a1e.js';
2
- import { a as arrayToClassString, g as getDeviceType, D as DeviceType } from './ui-bb99c0c2.js';
2
+ import { a as arrayToClassString, g as getDeviceType, D as DeviceType, f as findParent } from './ui-bb99c0c2.js';
3
3
  import { L as LogUtility, I as InjectVegaSlimmer } from './global-slimmer-registry-17c4efd4.js';
4
4
  import { c as createDynamicSlimmer } from './dynamic-slimmer-90b8af32.js';
5
- import { P as PageResizeObserverSlimmer } from './page-resize-observer-slimmer-0bf7fbf3.js';
5
+ import { P as PageResizeObserverSlimmer } from './page-resize-observer-slimmer-8744cb44.js';
6
6
  import { V as VegaInternalThemeManager } from './dark-mode-style-controller-de88a117.js';
7
- import { i as internalVegaEventManager } from './internal-vega-event-manager-516aa721.js';
7
+ import { i as internalVegaEventManager } from './internal-vega-event-manager-4f51b17c.js';
8
8
  import { c as convertToNumber } from './number-4398f2e1.js';
9
- import { R as RTEDTORendererManager, a as RTEDTOActionStrategyManager, E as ElementToDTOClassStrategyManager, U as UpdateCursorPositionAction, b as ElementToDTOStrategy, h as htmlElementToAnnotationGenerator, c as RTEListItemBlock, V as VegaRTEContent, B as BlockToRTEBlockStrategyAbstract, I as InsertNewParagraphAction, d as RTEImageBlock } from './dto-renderer-manager-d862ae78.js';
10
- import { s as stateEntityRenderingRegistry, A as ActionHandleStrategyRegistry, a as ActionHandlerInterceptorRegistry, R as RTEDTOClassManager, M as ModifyContentAction, b as RTETextNode, c as ModifyContentActionType, d as ActionHandleStrategy, e as RTETextBlock, f as RTEBlock, g as RTEAnnotationStyle, I as InsertChildrenAfterAction, h as AppendChildrenAction, i as RTENode, j as InsertChildrenBeforeAction, k as InternalAnnotationTypeEnum } from './code-block-ecb4491b.js';
9
+ import { R as RTEDTORendererManager, a as RTEDTOActionStrategyManager, E as ElementToDTOClassStrategyManager, U as UpdateCursorPositionAction, b as ElementToDTOStrategy, h as htmlElementToAnnotationGenerator, c as RTEListItemBlock, V as VegaRTEContent, B as BlockToRTEBlockStrategyAbstract, I as InsertNewParagraphAction, d as RTEImageBlock, e as InsertChildrenBeforeStrategy, P as PasteContentStrategy } from './dto-renderer-manager-23784148.js';
10
+ import { s as stateEntityRenderingRegistry, A as ActionHandleStrategyRegistry, a as ActionHandlerInterceptorRegistry, R as RTEDTOClassManager, M as ModifyContentAction, b as RTETextNode, c as ModifyContentActionType, d as ActionHandleStrategy, C as CustomAttributeAnnotation, e as RTETextBlock, f as RTEBlock, g as RTEAnnotationStyle, I as InsertChildrenAfterAction, h as AppendChildrenAction, i as RTENode, j as InsertChildrenBeforeAction, k as InternalAnnotationTypeEnum, B as BlockAnnotation, l as RemoveChildrenAction } from './code-block-3d3a9030.js';
11
+ import { i as isNonNullable } from './type-guard-b48aec98.js';
12
+ import './translation-96e5debd.js';
11
13
  import { a as VegaInternalIconManager } from './internal-icon-manager-f0486245.js';
12
- import { i as isNonNullable } from './type-guard-12f7654b.js';
14
+ import { R as RTETableExtensionAnnotationTypeEnum, S as SettingEventHandler, T as TableSettingType, a as RowOperationEventHandler, C as ColumnOperationEventHandler, r as remoteInvocationRegistry, b as RTETableBlock, g as generateTableBody, c as RTETableCellBlock, d as RTETableRowBlock, I as InsertTableRowDirection, e as RTETableBodyBlock, f as RTETableHeadBlock, h as getParentBlockByType, i as RTETableHeadCellBlock, j as TableColumnStrategy, k as getAllTableRows, l as InsertTableColumnDirection, m as getDefaultCellBlockTemplate, n as getFirstNode, o as INSERT_TABLE_ROW, D as DELETE_TABLE_ROW, p as TOGGLE_HEADER_ROW, q as INSERT_TABLE_COLUMN, s as DELETE_TABLE_COLUMN, t as TOGGLE_HEADER_TABLE_COLUMN, u as ToggleHeaderTableColumnStrategy, v as SELECT_TABLE_COLUMN } from './column-operation-4a93bf52.js';
15
+ import { c as cleanObject } from './object-66c37948.js';
13
16
  import { V as VegaRTEBaseRenderer } from './base-renderer-101f6d04.js';
14
- import { D as DomNodeSubjectObserverFactory, V as VegaDropdownClick, a as VegaClick } from './dom-node-subject-observer-factory-dca87b70.js';
17
+ import { D as DomNodeSubjectObserverFactory, V as VegaDropdownClick, a as VegaClick, d as domNodeSubjectFactory, b as VegaPopoverShow, c as VegaPopoverHide } from './dom-node-subject-observer-factory-f81f215f.js';
18
+ import { V as VegaInternalPopoverUpdateTarget } from './vega-internal-event-id-54ce7562.js';
19
+ import { d as debounce } from './timer-9321173b.js';
20
+ import { t as tryGetDocument } from './try-get-document-bef0f526.js';
15
21
 
16
22
  const VegaLoaderRuntimeMetricsPayloadDefinition = [
17
23
  {
@@ -1317,9 +1323,10 @@ class VegaRTEExtensionRenderer extends VegaRTEBaseRenderer {
1317
1323
  * @returns {VegaRTERenderResult} - The rendered DOM element.
1318
1324
  */
1319
1325
  render(renderData, rteContext, createElement) {
1326
+ var _a;
1320
1327
  const element = this.doRender(createElement, renderData, rteContext);
1321
1328
  this.fallbackRegisterRef(element, renderData);
1322
- this.appendChildren(element, renderData, rteContext, createElement);
1329
+ this.appendChildren(((_a = element.childrenContainerGetter) === null || _a === void 0 ? void 0 : _a.call(element)) || element, renderData, rteContext, createElement);
1323
1330
  return element;
1324
1331
  }
1325
1332
  /**
@@ -1434,6 +1441,12 @@ class VegaRTEExtension {
1434
1441
  initialExtension(context) {
1435
1442
  this.extensionContext = context;
1436
1443
  }
1444
+ /**
1445
+ * Callback method invoked when the extension is destroyed.
1446
+ * Override this method to perform any necessary cleanup.
1447
+ */
1448
+ destroyExtension() {
1449
+ }
1437
1450
  /**
1438
1451
  * Collect custom styles for the extension renderers.
1439
1452
  * If custom nodes have special styles, override this method to provide the styles.
@@ -1876,7 +1889,7 @@ class RTETokenNode extends RTETextNode {
1876
1889
  * @returns {string} - The HTML representation of the token node.
1877
1890
  */
1878
1891
  toHtml() {
1879
- return `<span class="token" contenteditable="false" template-token-key="${this.token}" token-key="${this.token}" ${super.generateAttributeString()}>${this.text}</span>`;
1892
+ return `<span class="token" contenteditable="false" template-token-key="${this.token}" token-key="${this.token}"${super.generateAttributeString()}>${this.text}</span>`;
1880
1893
  }
1881
1894
  }
1882
1895
 
@@ -1898,22 +1911,14 @@ class RTETokenNodeRenderer extends VegaRTEExtensionRenderer {
1898
1911
  */
1899
1912
  doRender(createElement, node, editorContent) {
1900
1913
  const { id, token } = node;
1901
- return createElement('span', {
1902
- 'key': id,
1903
- 'template-token-key': token,
1904
- 'token-key': token,
1905
- 'contenteditable': 'false',
1906
- 'style': node.getStyles(),
1907
- 'class': `token ${node.getClasses()}`,
1908
- 'ref': this.useRef(node),
1914
+ return createElement('span', Object.assign(Object.assign({ 'key': id, 'template-token-key': token, 'token-key': token, 'contenteditable': 'false', 'style': node.getStyles(), 'class': `token ${node.getClasses()}` }, this.additionalAttributes(node)), { 'ref': this.useRef(node),
1909
1915
  // eslint-disable-next-line jsdoc/require-jsdoc
1910
1916
  'onClick': (event) => {
1911
1917
  event.preventDefault();
1912
1918
  if (editorContent && editorContent.editable !== false) {
1913
1919
  this.handleTokenElementClick(event, node);
1914
1920
  }
1915
- },
1916
- }, node.text);
1921
+ } }), node.text);
1917
1922
  }
1918
1923
  /**
1919
1924
  * Sets the RTE extension context.
@@ -1943,6 +1948,20 @@ class RTETokenNodeRenderer extends VegaRTEExtensionRenderer {
1943
1948
  this.extensionContext.host.value.apply(new UpdateCursorPositionAction(node, undefined, true));
1944
1949
  }
1945
1950
  }
1951
+ /**
1952
+ * Additional attributes for the token node.
1953
+ *
1954
+ * @param {RTETokenNode} node - The token node.
1955
+ * @returns {Record<string, string>} Additional attributes
1956
+ */
1957
+ additionalAttributes(node) {
1958
+ const annotation = node.getCustomAttributesAnnotation();
1959
+ let result = { wrapped: 'true' };
1960
+ if (annotation) {
1961
+ result = Object.assign(Object.assign({}, result), annotation.render());
1962
+ }
1963
+ return result;
1964
+ }
1946
1965
  }
1947
1966
 
1948
1967
  /**
@@ -1969,7 +1988,10 @@ class InsertTokenNodeStrategy extends ActionHandleStrategy {
1969
1988
  handleAction(action, block) {
1970
1989
  const { rteRange, token } = action;
1971
1990
  if (rteRange && rteRange.startNode) {
1972
- const tokenNode = new RTETokenNode(generateUUID(), token.key, token.label, block);
1991
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1992
+ const { key, label, customAttrs = { wrapped: 'true' } } = token;
1993
+ const tokenNode = new RTETokenNode(generateUUID(), key, label, block);
1994
+ tokenNode.annotationMap.set('CUSTOM_ATTRIBUTE', new CustomAttributeAnnotation(customAttrs));
1973
1995
  block.apply(new InsertNodeToNearestRootAction(rteRange, tokenNode));
1974
1996
  action.actionHandleResult = true;
1975
1997
  }
@@ -2013,13 +2035,13 @@ class SpanToTokenNodeStrategy extends ElementToDTOStrategy {
2013
2035
  const annotations = htmlElementToAnnotationGenerator.generate(RTETextNode, element);
2014
2036
  // Exclude customAttribute and customClass from annotations
2015
2037
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2016
- const restAnnotations = __rest(annotations, ["customAttribute", "customClass"]);
2038
+ const { customAttribute, customClass } = annotations, restAnnotations = __rest(annotations, ["customAttribute", "customClass"]);
2017
2039
  return {
2018
2040
  id: generateUUID(),
2019
2041
  type: 'token',
2020
2042
  token: tokenKey,
2021
2043
  text,
2022
- annotations: Object.assign({}, restAnnotations),
2044
+ annotations: Object.assign(Object.assign({}, restAnnotations), { customAttribute: this.createCustomAttrs(customAttribute) }),
2023
2045
  };
2024
2046
  }
2025
2047
  /**
@@ -2033,6 +2055,16 @@ class SpanToTokenNodeStrategy extends ElementToDTOStrategy {
2033
2055
  shouldProceedToElementChildren() {
2034
2056
  return false;
2035
2057
  }
2058
+ /**
2059
+ * Creates custom attributes record from the given custom attribute object, clean some fixed attributes.
2060
+ *
2061
+ * @param {Record<string, string>} customAttribute - The custom attribute object
2062
+ * @returns {Record<string, string>} The processed custom attributes
2063
+ */
2064
+ createCustomAttrs(customAttribute) {
2065
+ const result = Object.assign(Object.assign({}, customAttribute), { 'contenteditable': null, 'template-token-key': null, 'token-key': null, 'wrapped': customAttribute.wrapped === 'false' ? 'false' : 'true' });
2066
+ return cleanObject(result);
2067
+ }
2036
2068
  }
2037
2069
 
2038
2070
  const spanToTokenNodeStrategy = new SpanToTokenNodeStrategy();
@@ -2884,4 +2916,1901 @@ class VegaRTEFunctionExtension extends VegaRTEExtension {
2884
2916
  VegaRTEExtension.registerActionHandlerInterceptor(RTETextBlock.name, ModifyContentActionType.PASTE_CONTENT, new PreventPasteContentInterceptor());
2885
2917
  })();
2886
2918
 
2887
- export { ActionHandlerInterceptor as A, InsertNodeToNearestRootAction as I, RTETokenToolbarButtonRenderer as R, VegaLoader as V, VegaNotify as a, VegaThemeManager as b, VegaDialog as c, VegaEventManager$1 as d, VegaZIndexManager$1 as e, VegaSkeletonLoader as f, VegaRTETokenExtension as g, VegaRTEFunctionExtension as h, VegaRTEToolbarButtonRenderer as i, VegaRTEExtension as j, VegaRTEExtensionRenderer as k, RTETokenNode as l, RTETokenNodeRenderer as m, InternalVegaZIndexManager$1 as n };
2919
+ const tableBlockStylesCss = ".v-rte--extension-table-container{display:table}table.v-rte--extension-table{border-collapse:collapse}table.v-rte--extension-table th,table.v-rte--extension-table td{border:1px solid #ddd;padding:12px;text-align:left;vertical-align:middle;min-width:30px;position:relative}table.v-rte--extension-table th{background-color:#f2f2f2}.rte-table-setting-popover,.rte-table-dynamic-popover{display:block}table.v-rte--extension-table .v-rte-table-cell-focused::after,table.v-rte--extension-table .v-rte-table-cell-selected::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background-color:rgba(158, 207, 250, 0.3)}table.v-rte--extension-table:has(.v-rte-table-cell-selected){caret-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::selection{background-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::-moz-selection{background-color:transparent}.v-rte--extension-table-caption{padding:8px;border:1px solid #ddd;border-bottom:none;background-color:#f7f7f7;position:relative;display:table-caption;caption-side:top;min-height:22px;text-align:center;word-break:break-word;overflow-wrap:break-word}.v-rte--extension-table-caption.showPlaceholder::before{position:absolute;left:0;right:0;content:attr(data-placeholder);font-family:'Inter', sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0;color:rgba(var(--v-text-input-placeholder, 176, 180, 181, 1));text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.rte-cell-properties-popover,.rte-table-properties-popover{display:none}";
2920
+
2921
+ const DELETE_TABLE_BLOCK = 'DELETE_TABLE_BLOCK';
2922
+ /**
2923
+ * Action to delete a table block
2924
+ */
2925
+ class DeleteTableBlockAction extends ModifyContentAction {
2926
+ constructor(target) {
2927
+ super();
2928
+ this.isFlushable = true;
2929
+ this.type = DELETE_TABLE_BLOCK;
2930
+ this.tableBlock = target;
2931
+ }
2932
+ }
2933
+
2934
+ /**
2935
+ * Class representing a table caption annotation in the rich text editor.
2936
+ */
2937
+ class RTETableCaptionAnnotation extends BlockAnnotation {
2938
+ constructor() {
2939
+ super(...arguments);
2940
+ this.type = RTETableExtensionAnnotationTypeEnum.CAPTION;
2941
+ }
2942
+ /**
2943
+ * @inheritDoc
2944
+ */
2945
+ clone() {
2946
+ return new RTETableCaptionAnnotation();
2947
+ }
2948
+ /**
2949
+ * @inheritDoc
2950
+ */
2951
+ renderClass(options) {
2952
+ if (options === null || options === void 0 ? void 0 : options.standalone)
2953
+ return null;
2954
+ return 'v-rte--extension-table-caption';
2955
+ }
2956
+ /**
2957
+ * @inheritDoc
2958
+ */
2959
+ renderStyle(options) {
2960
+ if (!(options === null || options === void 0 ? void 0 : options.standalone))
2961
+ return null;
2962
+ return {
2963
+ padding: '8px',
2964
+ border: '1px solid #ddd',
2965
+ borderBottom: 'none',
2966
+ backgroundColor: '#f7f7f7',
2967
+ position: 'relative',
2968
+ textAlign: 'center',
2969
+ minHeight: '22px',
2970
+ };
2971
+ }
2972
+ /**
2973
+ * @inheritDoc
2974
+ */
2975
+ toJSON() {
2976
+ return {
2977
+ caption: {
2978
+ padding: '8px 12px',
2979
+ border: '1px solid #ddd',
2980
+ borderBottom: 'none',
2981
+ backgroundColor: '#f7f7f7',
2982
+ position: 'relative',
2983
+ textAlign: 'center',
2984
+ minHeight: '22px',
2985
+ },
2986
+ };
2987
+ }
2988
+ }
2989
+
2990
+ /**
2991
+ * Represents the optional caption block for a table.
2992
+ */
2993
+ class RTETableCaptionBlock extends RTEBlock {
2994
+ constructor(id) {
2995
+ super(id);
2996
+ this.type = 'table-caption';
2997
+ this.annotationMap.set(RTETableExtensionAnnotationTypeEnum.CAPTION, new RTETableCaptionAnnotation());
2998
+ }
2999
+ /**
3000
+ * @inheritDoc
3001
+ */
3002
+ static from(block, options) {
3003
+ const captionBlock = new RTETableCaptionBlock(block.id);
3004
+ super.convertAnnotationsToMap(captionBlock.annotationMap, Object.assign({}, block.annotations));
3005
+ captionBlock.children = super.generateBlockChildren(block.children, options, captionBlock);
3006
+ return captionBlock;
3007
+ }
3008
+ /**
3009
+ * @inheritDoc
3010
+ */
3011
+ clone(parent) {
3012
+ const clonedBlock = new RTETableCaptionBlock(this.id);
3013
+ clonedBlock.children = this.children.map((child) => child.clone(clonedBlock));
3014
+ clonedBlock.parent = parent;
3015
+ return clonedBlock;
3016
+ }
3017
+ /**
3018
+ * @inheritDoc
3019
+ */
3020
+ getLastNode() {
3021
+ return this.children[this.children.length - 1].getLastNode();
3022
+ }
3023
+ /**
3024
+ * @inheritDoc
3025
+ */
3026
+ isNotEmpty() {
3027
+ return this.children.length > 0 && this.children.some((child) => child.isNotEmpty());
3028
+ }
3029
+ /**
3030
+ * @inheritDoc
3031
+ */
3032
+ toHtml() {
3033
+ const childrenHtml = this.children.map((child) => child.toHtml()).join('');
3034
+ const attrStr = super.generateAttributeString();
3035
+ return `<caption${attrStr}>${childrenHtml}</caption>`;
3036
+ }
3037
+ /**
3038
+ * @inheritDoc
3039
+ */
3040
+ toJSON() {
3041
+ return Object.assign(Object.assign({}, super.toJSON()), { type: this.type, children: this.children.map((child) => child.toJSON()) });
3042
+ }
3043
+ }
3044
+ (() => {
3045
+ ActionHandleStrategyRegistry.register(ModifyContentActionType.INSERT_CHILDREN_BEFORE, RTETableCaptionBlock.name, new InsertChildrenBeforeStrategy());
3046
+ ActionHandleStrategyRegistry.register(ModifyContentActionType.PASTE_CONTENT, RTETableCaptionBlock.name, new PasteContentStrategy());
3047
+ })();
3048
+
3049
+ const TOGGLE_TABLE_CAPTION = 'TOGGLE_TABLE_CAPTION';
3050
+ /**
3051
+ * Action payload for toggling the optional table caption block.
3052
+ */
3053
+ class TableCaptionAction extends ModifyContentAction {
3054
+ constructor(shouldEnable) {
3055
+ super();
3056
+ this.type = TOGGLE_TABLE_CAPTION;
3057
+ this.isFlushable = true;
3058
+ this.shouldEnable = shouldEnable;
3059
+ }
3060
+ }
3061
+
3062
+ /**
3063
+ * Event handler for row operations in a table.
3064
+ */
3065
+ class CaptionOperationEventHandler extends SettingEventHandler {
3066
+ /**
3067
+ * @inheritDoc
3068
+ */
3069
+ canHandle(action) {
3070
+ return action[0] === TableSettingType.CAPTION;
3071
+ }
3072
+ /**
3073
+ * Toggle caption state for the target table block when the caption menu item is clicked.
3074
+ *
3075
+ * @param {Array<string>} action - Table setting payload, e.g. ['CAPTION', 'rte-table-caption'].
3076
+ * @param {RTEExtensionContext} _extensionContext - Current editor extension context (unused here).
3077
+ * @param {RTETableBlock} tableBlock - Table block that owns the caption.
3078
+ */
3079
+ execute(action, _extensionContext, tableBlock) {
3080
+ const shouldEnable = action[1] === 'rte-table-caption';
3081
+ const toggleAction = new TableCaptionAction(shouldEnable);
3082
+ const existingCaption = tableBlock.getCaption();
3083
+ if (shouldEnable) {
3084
+ const hydratedCaption = existingCaption && existingCaption.isNotEmpty()
3085
+ ? existingCaption
3086
+ : this.createCaptionBlock(existingCaption === null || existingCaption === void 0 ? void 0 : existingCaption.id);
3087
+ if (!existingCaption || hydratedCaption !== existingCaption) {
3088
+ tableBlock.setCaption(hydratedCaption);
3089
+ }
3090
+ toggleAction.nextFocusNode = hydratedCaption.getLastNode();
3091
+ }
3092
+ else {
3093
+ if (existingCaption) {
3094
+ tableBlock.setCaption(null);
3095
+ toggleAction.nextFocusNode = tableBlock.getFirstNode();
3096
+ }
3097
+ }
3098
+ this.syncCursorPosition(tableBlock, toggleAction.nextFocusNode);
3099
+ }
3100
+ /**
3101
+ * Applies a cursor update action so the editor focuses on the resolved node.
3102
+ *
3103
+ * @param {RTETableBlock} block - Table block currently being toggled.
3104
+ * @param {Nullable<RTENode>} focusNode - Target node that should receive the caret.
3105
+ */
3106
+ syncCursorPosition(block, focusNode) {
3107
+ super.syncCursorPosition(block, focusNode);
3108
+ }
3109
+ /**
3110
+ * Build a fresh caption block with a default paragraph + placeholder text.
3111
+ *
3112
+ * @param {string} id - table-caption id
3113
+ * @returns {RTETableCaptionBlock} Newly created caption DTO ready for rendering.
3114
+ */
3115
+ createCaptionBlock(id) {
3116
+ const captionData = {
3117
+ id: id !== null && id !== void 0 ? id : generateUUID(),
3118
+ type: 'table-caption',
3119
+ children: [
3120
+ {
3121
+ id: generateUUID(),
3122
+ type: 'paragraph',
3123
+ nodes: [
3124
+ {
3125
+ id: generateUUID(),
3126
+ type: 'text',
3127
+ text: '',
3128
+ },
3129
+ ],
3130
+ },
3131
+ ],
3132
+ };
3133
+ return RTETableCaptionBlock.from(captionData);
3134
+ }
3135
+ }
3136
+
3137
+ /**
3138
+ * Centralizes the popover rendering and interaction logic for table settings.
3139
+ */
3140
+ class TableSettingPopoverRenderer {
3141
+ constructor() {
3142
+ this.settingHandlers = [
3143
+ new RowOperationEventHandler(),
3144
+ new CaptionOperationEventHandler(),
3145
+ new ColumnOperationEventHandler(),
3146
+ ];
3147
+ /**
3148
+ * Show table setting popover when table is clicked.
3149
+ * Only the popover belonging to the nearest table will be shown,
3150
+ * which avoids outer tables showing their popover when an inner (nested) table is clicked.
3151
+ *
3152
+ * @param {MouseEvent} event - The MouseEvent that triggered the table action
3153
+ * @param {HTMLElement} trigger - The element that can triggered the popover open.
3154
+ */
3155
+ this.handleTableClick = (event, trigger) => {
3156
+ const target = event.target;
3157
+ const ownTrigger = target.closest('.v-rte--extension-table-popover-trigger');
3158
+ if (trigger !== ownTrigger) {
3159
+ void this.popoverRef.hide();
3160
+ void this.tableDynamicPopover.hide();
3161
+ return;
3162
+ }
3163
+ void this.tableDynamicPopover.hide();
3164
+ if (!this.popoverShow) {
3165
+ remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), ownTrigger);
3166
+ void this.popoverRef.show();
3167
+ }
3168
+ };
3169
+ /**
3170
+ * Sync the selected cells from the table selection to the table setting component.
3171
+ */
3172
+ this.syncSelectedCells = () => {
3173
+ if (this.tableSettingRef) {
3174
+ const selectedCells = this.getTableSelectedCells();
3175
+ this.tableSettingRef.selectedCells = selectedCells;
3176
+ }
3177
+ };
3178
+ /**
3179
+ * Receive setting menu click events.
3180
+ *
3181
+ * @param {CustomEvent<Array<string>>} event - The custom event emitted from the setting menu.
3182
+ */
3183
+ this.handleSettingMenuClick = (event) => {
3184
+ const handler = this.settingHandlers.find((handler) => handler.canHandle(event.detail));
3185
+ if (handler) {
3186
+ handler.execute(event.detail, this.extensionContext, this.tableData);
3187
+ if (event.detail[0] === TableSettingType.CAPTION) {
3188
+ this.updateTableSettingCaption();
3189
+ }
3190
+ }
3191
+ if (event.detail[0] === TableSettingType.TABLE_PROPERTIES ||
3192
+ event.detail[0] === TableSettingType.CELL_PROPERTIES) {
3193
+ void this.popoverRef.hide();
3194
+ void this.tableDynamicPopover.show(event.detail[0]);
3195
+ }
3196
+ };
3197
+ /**
3198
+ * Handles the popover show event to sync the selected table cells to the table setting component.
3199
+ */
3200
+ this.handleTableSettingPopoverShow = () => {
3201
+ this.syncSelectedCells();
3202
+ this.popoverShow = true;
3203
+ };
3204
+ }
3205
+ /**
3206
+ * Injects the RTE extension context.
3207
+ *
3208
+ * @param {RTETableExtensionContext} context - The RTE extension context.
3209
+ */
3210
+ injectRTEExtensionContext(context) {
3211
+ this.extensionContext = context;
3212
+ }
3213
+ /**
3214
+ * Render the popover host and inject the table-setting component with refs wired up.
3215
+ *
3216
+ * @param {VegaRTECreateElementFunction} h - The create element function.
3217
+ * @param {RTETableBlock} renderData - The table block to render.
3218
+ * @param {TableDynamicPopoverRenderer} tableDynamicPopover - Renderer used to show
3219
+ * the secondary table popover (for example, table-properties-specific settings).
3220
+ * @returns {VegaRTERenderResult} The rendered popover structure.
3221
+ */
3222
+ render(h, renderData, tableDynamicPopover) {
3223
+ this.tableData = renderData;
3224
+ this.tableDynamicPopover = tableDynamicPopover;
3225
+ return h('vega-popover', {
3226
+ trigger: 'click',
3227
+ isScreenPosition: true,
3228
+ class: 'rte-table-setting-popover',
3229
+ // eslint-disable-next-line jsdoc/require-jsdoc
3230
+ ref: (popover) => {
3231
+ this.popoverRef = popover;
3232
+ if (this.popoverRef) {
3233
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverShow, this.handleTableSettingPopoverShow);
3234
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverHide, () => (this.popoverShow = false));
3235
+ }
3236
+ },
3237
+ }, [
3238
+ h('div', { slot: 'popover' }, [
3239
+ h('vega-rich-text-table-setting', {
3240
+ // eslint-disable-next-line jsdoc/require-jsdoc
3241
+ ref: (el) => {
3242
+ this.tableSettingRef = el;
3243
+ },
3244
+ selectedCells: this.getTableSelectedCells(),
3245
+ onVegaClick: this.handleSettingMenuClick,
3246
+ }),
3247
+ ]),
3248
+ ]);
3249
+ }
3250
+ /**
3251
+ * Updates the table setting component caption state to match the given table data.
3252
+ */
3253
+ updateTableSettingCaption() {
3254
+ const hasCaption = this.tableData.hasCaption();
3255
+ if (this.tableSettingRef && this.tableSettingRef.hasCaption !== hasCaption) {
3256
+ this.tableSettingRef.hasCaption = hasCaption;
3257
+ }
3258
+ }
3259
+ /**
3260
+ * Collects and returns the currently selected table cells.
3261
+ *
3262
+ * @returns {RTETableCellBlock[]} The array of currently selected table cell blocks.
3263
+ */
3264
+ getTableSelectedCells() {
3265
+ let selectedCells = [];
3266
+ if (this.extensionContext && this.extensionContext.tableSelection) {
3267
+ const { tableSelection } = this.extensionContext;
3268
+ selectedCells = tableSelection.getSelectedCells();
3269
+ }
3270
+ return selectedCells;
3271
+ }
3272
+ }
3273
+
3274
+ const CONTENT_CLASS_MAP = {
3275
+ [TableSettingType.TABLE_PROPERTIES]: 'rte-table-properties-popover',
3276
+ [TableSettingType.CELL_PROPERTIES]: 'rte-cell-properties-popover',
3277
+ };
3278
+ /**
3279
+ * Renderer for a generic, dynamically positioned popover used within table-related extensions.
3280
+ *
3281
+ * - The popover target is based on the current cursor/selection position.
3282
+ * - The popover content is rendered dynamic content.
3283
+ */
3284
+ class TableDynamicPopoverRenderer {
3285
+ /**
3286
+ * Shows the popover. Before showing, it will refresh the target so
3287
+ * that the popover is positioned relative to the latest cursor position.
3288
+ *
3289
+ * @param {string} type - The table setting type determining which
3290
+ * content variant to display (for example, table properties or cell properties).
3291
+ */
3292
+ async show(type) {
3293
+ let target = this.getTableRef();
3294
+ const cells = this.extensionContext.tableSelection.getSelectedCells();
3295
+ if (type !== TableSettingType.TABLE_PROPERTIES && cells.length === 1) {
3296
+ target = stateEntityRenderingRegistry.getDOMByEntity(cells[0]);
3297
+ }
3298
+ this.updateContent(type);
3299
+ remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), target);
3300
+ await this.popoverRef.show();
3301
+ }
3302
+ /**
3303
+ * hide the popover.
3304
+ */
3305
+ async hide() {
3306
+ await this.popoverRef.hide();
3307
+ }
3308
+ /**
3309
+ * Injects the RTE extension context.
3310
+ *
3311
+ * @param {RTETableExtensionContext} context - The RTE extension context.
3312
+ */
3313
+ injectRTEExtensionContext(context) {
3314
+ this.extensionContext = context;
3315
+ }
3316
+ /**
3317
+ * Renders a vega-popover whose target and content are provided dynamically by callers.
3318
+ *
3319
+ * @param {VegaRTECreateElementFunction} h - The create element function.
3320
+ * @param {() => HTMLElement} getTableRef - Current table DOM reference
3321
+ * @returns {VegaRTERenderResult} The rendered popover host.
3322
+ */
3323
+ render(h, getTableRef) {
3324
+ this.getTableRef = getTableRef;
3325
+ return h('vega-popover', {
3326
+ trigger: 'click',
3327
+ isScreenPosition: true,
3328
+ class: 'rte-table-dynamic-popover',
3329
+ // eslint-disable-next-line jsdoc/require-jsdoc
3330
+ ref: (popover) => {
3331
+ this.popoverRef = popover;
3332
+ },
3333
+ }, [
3334
+ h('div', {
3335
+ slot: 'popover',
3336
+ class: 'rte-table-dynamic-popover-content',
3337
+ // eslint-disable-next-line jsdoc/require-jsdoc
3338
+ ref: (ref) => (this.contentRef = ref),
3339
+ }, [
3340
+ h('div', {
3341
+ class: CONTENT_CLASS_MAP[TableSettingType.TABLE_PROPERTIES],
3342
+ }, 'table-properties'),
3343
+ h('div', {
3344
+ class: CONTENT_CLASS_MAP[TableSettingType.CELL_PROPERTIES],
3345
+ }, 'cell-properties'),
3346
+ ]),
3347
+ ]);
3348
+ }
3349
+ /**
3350
+ * Updates the visibility of the pre-rendered content blocks based on type.
3351
+ *
3352
+ * @param {string} type - The table setting type determining which content variant should be visible.
3353
+ */
3354
+ updateContent(type) {
3355
+ if (type !== this.currentType) {
3356
+ this.currentType = type;
3357
+ this.contentRef.childNodes.forEach((child) => {
3358
+ if (child.classList.contains(CONTENT_CLASS_MAP[this.currentType])) {
3359
+ child.style.display = 'block';
3360
+ }
3361
+ else {
3362
+ child.style.display = 'none';
3363
+ }
3364
+ });
3365
+ }
3366
+ }
3367
+ }
3368
+
3369
+ /**
3370
+ * Renderer for the RTETableBlock.
3371
+ */
3372
+ class RTETableBlockRenderer extends VegaRTEExtensionRenderer {
3373
+ constructor() {
3374
+ super(...arguments);
3375
+ this.extensionContext = null;
3376
+ }
3377
+ /**
3378
+ * @inheritDoc
3379
+ */
3380
+ doRender(h, renderData, rteContext) {
3381
+ const tableSettingPopoverRenderer = new TableSettingPopoverRenderer();
3382
+ const tableDynamicPopoverRenderer = new TableDynamicPopoverRenderer();
3383
+ if (this.extensionContext) {
3384
+ tableSettingPopoverRenderer.injectRTEExtensionContext(this.extensionContext);
3385
+ tableDynamicPopoverRenderer.injectRTEExtensionContext(this.extensionContext);
3386
+ }
3387
+ let tableRef;
3388
+ const table = this.renderTable(h, renderData);
3389
+ const tableSettingPopover = tableSettingPopoverRenderer.render(h, renderData, tableDynamicPopoverRenderer);
3390
+ const tableDynamicPopover = tableDynamicPopoverRenderer.render(h, () => tableRef);
3391
+ const tableAnnotation = renderData.getAnnotationByType(RTETableExtensionAnnotationTypeEnum.TABLE);
3392
+ const children = rteContext.editable
3393
+ ? [
3394
+ h('vega-rich-text-table-selection-widget', {
3395
+ // eslint-disable-next-line jsdoc/require-jsdoc
3396
+ onVegaRemove: (e) => {
3397
+ e.stopPropagation();
3398
+ this.handleTableRemove(renderData);
3399
+ },
3400
+ // eslint-disable-next-line jsdoc/require-jsdoc
3401
+ onClick: (event) => tableSettingPopoverRenderer.handleTableClick(event, tableRef),
3402
+ // eslint-disable-next-line jsdoc/require-jsdoc
3403
+ onMouseLeave: () => {
3404
+ tableSettingPopoverRenderer.syncSelectedCells();
3405
+ },
3406
+ }, [
3407
+ h('vega-box', {
3408
+ class: 'v-rte--extension-table-popover-trigger',
3409
+ // eslint-disable-next-line jsdoc/require-jsdoc
3410
+ ref: (ref) => (tableRef = ref),
3411
+ }, [table, tableSettingPopover, tableDynamicPopover]),
3412
+ ]),
3413
+ ]
3414
+ : [table];
3415
+ const result = h('div', {
3416
+ class: 'v-rte--extension-table-container',
3417
+ style: Object.assign({}, (tableAnnotation && tableAnnotation.renderAlignmentStyle())),
3418
+ }, children);
3419
+ /**
3420
+ * The getter for the children container.
3421
+ *
3422
+ * @returns {VegaRTERenderResult} - The children container render result.
3423
+ */
3424
+ result.childrenContainerGetter = () => table;
3425
+ return result;
3426
+ }
3427
+ /**
3428
+ * @inheritDoc
3429
+ */
3430
+ injectRTEScopeStyles() {
3431
+ return tableBlockStylesCss;
3432
+ }
3433
+ /**
3434
+ * Injects the RTE extension context.
3435
+ *
3436
+ * @param {RTETableExtensionContext} context - The RTE extension context.
3437
+ */
3438
+ injectExtensionContext(context) {
3439
+ this.extensionContext = context;
3440
+ }
3441
+ /**
3442
+ * Renders the table element.
3443
+ *
3444
+ * @param {VegaRTECreateElementFunction} h - The create element function.
3445
+ * @param {RTETableBlock} renderData - The table block to render.
3446
+ * @returns {VegaRTERenderResult} - The rendered table element.
3447
+ */
3448
+ renderTable(h, renderData) {
3449
+ var _a;
3450
+ return h('table', Object.assign(Object.assign({ key: renderData.id }, (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(), class: [RTETableBlockRenderer.EXTENSION_TABLE_CLASS, renderData.getClasses()].join(' '),
3451
+ // eslint-disable-next-line jsdoc/require-jsdoc
3452
+ ref: (ref) => {
3453
+ this.useRef(renderData)(ref);
3454
+ } }));
3455
+ }
3456
+ /**
3457
+ * Handles the removal of the table block.
3458
+ *
3459
+ * @param {RTETableBlock} renderData - The table block to remove.
3460
+ */
3461
+ handleTableRemove(renderData) {
3462
+ renderData.parent.apply(new DeleteTableBlockAction(renderData));
3463
+ }
3464
+ }
3465
+ RTETableBlockRenderer.EXTENSION_TABLE_CLASS = 'v-rte--extension-table';
3466
+
3467
+ /**
3468
+ * Renders a logic control block in the rich text editor.
3469
+ */
3470
+ class RTETableHeadRenderer extends VegaRTEExtensionRenderer {
3471
+ /**
3472
+ * @inheritDoc
3473
+ */
3474
+ doRender(h, renderData) {
3475
+ return h('thead', {
3476
+ key: renderData.id,
3477
+ ref: this.useRef(renderData),
3478
+ });
3479
+ }
3480
+ }
3481
+
3482
+ /**
3483
+ * Renders a logic control block in the rich text editor.
3484
+ */
3485
+ class RTETableRowBlockRenderer extends VegaRTEExtensionRenderer {
3486
+ /**
3487
+ * @inheritDoc
3488
+ */
3489
+ doRender(h, renderData) {
3490
+ return h('tr', {
3491
+ key: renderData.id,
3492
+ ref: this.useRef(renderData),
3493
+ });
3494
+ }
3495
+ }
3496
+
3497
+ /**
3498
+ * Renders a table cell block in the rich text editor.
3499
+ */
3500
+ class RTETableCellRenderer extends VegaRTEExtensionRenderer {
3501
+ /**
3502
+ * @inheritDoc
3503
+ */
3504
+ doRender(h, renderData, rteContext) {
3505
+ return this.renderByCellType(h, renderData, rteContext, 'td');
3506
+ }
3507
+ /**
3508
+ * Injects the extension context
3509
+ *
3510
+ * @param {RTETableExtensionContext} context - extension context
3511
+ */
3512
+ injectExtensionContext(context) {
3513
+ this.extensionContext = context;
3514
+ }
3515
+ /**
3516
+ * Renders the table cell based on its type (td or th).
3517
+ *
3518
+ * @param {VegaRTECreateElementFunction} h - The create element function.
3519
+ * @param {RTETableCellBlock} renderData - The table cell block to render.
3520
+ * @param {RTERenderContext} rteContext - The rte editor context.
3521
+ * @param {'td' | 'th'} elementType - The type of table cell element ('td' or 'th').
3522
+ * @returns {VegaRTERenderResult} - The rendered table cell element.
3523
+ */
3524
+ renderByCellType(h, renderData, rteContext, elementType) {
3525
+ var _a;
3526
+ return h(elementType, Object.assign(Object.assign(Object.assign({ key: renderData.id, ref: this.useRef(renderData) }, (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(rteContext), class: renderData.getClasses() }), (rteContext.editable ? this.onSelectionListeners(renderData) : undefined)));
3527
+ }
3528
+ /**
3529
+ * Returns the mouse event listeners for selection handling.
3530
+ *
3531
+ * @param {RTETableCellBlock} renderData - The table cell block to render.
3532
+ * @returns {RTETableSelectionListenersType} - The mouse event listeners.
3533
+ */
3534
+ onSelectionListeners(renderData) {
3535
+ return {
3536
+ /**
3537
+ * Handles the mouse down event to focus a cell.
3538
+ *
3539
+ * @param {MouseEvent} event - The mouse event.
3540
+ */
3541
+ onMouseDown: (event) => {
3542
+ const targetParentTable = findParent(event.target, 'table');
3543
+ const currentTable = findParent(event.currentTarget, 'table');
3544
+ const inCurrentTable = currentTable === targetParentTable;
3545
+ const cellRef = event.target.closest('td, th');
3546
+ if (inCurrentTable && cellRef) {
3547
+ this.extensionContext.tableSelection.focusCell(cellRef);
3548
+ }
3549
+ },
3550
+ /**
3551
+ * Handles the mouse move event to start selection.
3552
+ *
3553
+ * @param {MouseEvent} event - The mouse event.
3554
+ */
3555
+ onMouseMove: (event) => {
3556
+ event.stopPropagation();
3557
+ event.preventDefault();
3558
+ this.extensionContext.tableSelection.dragOver(renderData);
3559
+ },
3560
+ /**
3561
+ * Handles the mouse up event to end selection.
3562
+ */
3563
+ onMouseUp: () => {
3564
+ this.extensionContext.tableSelection.endDrag();
3565
+ },
3566
+ };
3567
+ }
3568
+ }
3569
+
3570
+ /**
3571
+ * Renders a table body block in the rich text editor.
3572
+ */
3573
+ class RTETableBodyRenderer extends VegaRTEExtensionRenderer {
3574
+ /**
3575
+ * @inheritDoc
3576
+ */
3577
+ doRender(h, renderData) {
3578
+ return h('tbody', {
3579
+ key: renderData.id,
3580
+ ref: this.useRef(renderData),
3581
+ });
3582
+ }
3583
+ }
3584
+
3585
+ /**
3586
+ * Renders a head cell block in the rich text editor.
3587
+ */
3588
+ class RTETableHeadCellRenderer extends RTETableCellRenderer {
3589
+ /**
3590
+ * @inheritDoc
3591
+ */
3592
+ doRender(h, renderData, rteContext) {
3593
+ return super.renderByCellType(h, renderData, rteContext, 'th');
3594
+ }
3595
+ }
3596
+
3597
+ const INSERT_TABLE_BLOCK = 'INSERT_TABLE_BLOCK';
3598
+ /**
3599
+ * Action to insert a table block into the rich text editor.
3600
+ */
3601
+ class InsertTableBlockAction extends ModifyContentAction {
3602
+ constructor(rowCount, columnCount) {
3603
+ super();
3604
+ this.type = INSERT_TABLE_BLOCK;
3605
+ this.rowCount = rowCount;
3606
+ this.columnCount = columnCount;
3607
+ }
3608
+ }
3609
+
3610
+ const tableIcon = {
3611
+ icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Pro 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license (Commercial License) Copyright 2023 Fonticons, Inc. --><path fill="currentColor" d="M48 264V160H232V264H48zm0 48H232V432H64c-8.8 0-16-7.2-16-16V312zM280 432V312H464V416c0 8.8-7.2 16-16 16H280zM464 264H280V160H464V264zM64 32C28.7 32 0 60.7 0 96V416c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V96c0-35.3-28.7-64-64-64H64z"/></svg>`,
3612
+ };
3613
+
3614
+ /**
3615
+ * Function toolbar button renderer class.
3616
+ */
3617
+ class RTETableToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
3618
+ constructor() {
3619
+ super(...arguments);
3620
+ this.hoveredRows = 1;
3621
+ this.hoveredCols = 1;
3622
+ }
3623
+ /**
3624
+ * Injects the extension context
3625
+ *
3626
+ * @param {RTETableExtensionContext} context - extension context
3627
+ */
3628
+ injectExtensionContext(context) {
3629
+ this.extensionContext = context;
3630
+ }
3631
+ /**
3632
+ * @inheritDoc
3633
+ */
3634
+ render(h, editorContext) {
3635
+ return this.renderTablePicker(h, super.renderButton(h, editorContext, {
3636
+ showArrowIcon: true,
3637
+ icon: 'rte-table',
3638
+ }));
3639
+ }
3640
+ /**
3641
+ * Overrides the isDisabled method to determine if the button should be disabled.
3642
+ *
3643
+ * @returns {boolean} - true if the button should be disabled, false otherwise.
3644
+ */
3645
+ isDisabled() {
3646
+ const { host, getSelectedNodes } = this.extensionContext;
3647
+ const focusNode = getSelectedNodes()[0];
3648
+ let enableInsert = true;
3649
+ if (focusNode) {
3650
+ enableInsert =
3651
+ ActionHandleStrategyRegistry.canHandle(INSERT_TABLE_BLOCK, focusNode.parent) &&
3652
+ ActionHandleStrategyRegistry.canHandle(ModifyContentActionType.INSERT_CHILDREN_AFTER, focusNode.parent.parent);
3653
+ }
3654
+ return host.disabled || !enableInsert;
3655
+ }
3656
+ /**
3657
+ * @inheritDoc
3658
+ */
3659
+ handleButtonClick() {
3660
+ }
3661
+ /* istanbul ignore next */
3662
+ /**
3663
+ * @inheritDoc
3664
+ */
3665
+ handleDropdownClick() {
3666
+ }
3667
+ /**
3668
+ * Renders the table size picker popover.
3669
+ *
3670
+ * @param {VegaRTECreateElementFunction} h - Create element function.
3671
+ * @param {VegaRTERenderResult} children - The children elements to render inside the popover.
3672
+ * @returns {VegaRTERenderResult} - The render result for the table size picker popover.
3673
+ */
3674
+ renderTablePicker(h, children) {
3675
+ return h('vega-popover', {
3676
+ trigger: 'click',
3677
+ alignment: 'start',
3678
+ placement: 'bottom',
3679
+ showArrow: false,
3680
+ // eslint-disable-next-line jsdoc/require-jsdoc
3681
+ ref: (ref) => {
3682
+ if (ref) {
3683
+ this.tablePickerPopoverRef = ref;
3684
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaPopoverShow, () => {
3685
+ this.resetPicker();
3686
+ });
3687
+ }
3688
+ },
3689
+ }, [
3690
+ h('div', { slot: 'popover' }, [this.generatePickerStyles(h), this.generateTableSizeGrid(h)]),
3691
+ h('div', { slot: 'popover-content' }, children),
3692
+ ]);
3693
+ }
3694
+ /**
3695
+ * Generates the table size picker grid.
3696
+ *
3697
+ * @param {VegaRTECreateElementFunction} h - Create element function.
3698
+ * @returns {VegaRTERenderResult} - The render result for the table size picker.
3699
+ */
3700
+ generateTableSizeGrid(h) {
3701
+ const rows = 10;
3702
+ const cols = 10;
3703
+ const gridCells = [];
3704
+ for (let r = 1; r <= rows; r++) {
3705
+ for (let c = 1; c <= cols; c++) {
3706
+ gridCells.push(h('button', {
3707
+ 'class': `rte-table-picker__cell`,
3708
+ 'data-row': r,
3709
+ 'data-col': c,
3710
+ 'onMouseenter': this.handlePickerCellHover.bind(this, r, c),
3711
+ 'onClick': this.handlePickerClick.bind(this, r, c),
3712
+ }, []));
3713
+ }
3714
+ }
3715
+ return h('div', { class: 'rte-table-picker' }, [
3716
+ h('div', {
3717
+ class: 'rte-table-picker__grid',
3718
+ // eslint-disable-next-line jsdoc/require-jsdoc
3719
+ ref: (ref) => {
3720
+ if (ref) {
3721
+ this.tablePickerGridRef = ref;
3722
+ }
3723
+ },
3724
+ style: {
3725
+ gridTemplateColumns: `repeat(${cols}, 16px)`,
3726
+ gridTemplateRows: `repeat(${rows}, 16px)`,
3727
+ },
3728
+ }, gridCells),
3729
+ h('div', {
3730
+ class: 'rte-table-picker__hint',
3731
+ }, h('vega-hint', {
3732
+ // eslint-disable-next-line jsdoc/require-jsdoc
3733
+ ref: (ref) => {
3734
+ if (ref) {
3735
+ this.selectedHintRef = ref;
3736
+ }
3737
+ },
3738
+ }, [`${this.hoveredRows} × ${this.hoveredCols}`])),
3739
+ ]);
3740
+ }
3741
+ /**
3742
+ * Generates the styles for the table size picker.
3743
+ *
3744
+ * @param {VegaRTECreateElementFunction} h - Create element function.
3745
+ * @returns {VegaRTERenderResult} - The render result for the styles.
3746
+ */
3747
+ generatePickerStyles(h) {
3748
+ return h('style', {}, [
3749
+ // eslint-disable-next-line spellcheck/spell-checker
3750
+ `
3751
+ .rte-table-picker__grid { display: grid; gap: 2px; }
3752
+ .rte-table-picker__cell {
3753
+ box-sizing: border-box;
3754
+ border: 1px solid #ccc;
3755
+ background-color: transparent;
3756
+ cursor: pointer;
3757
+ }
3758
+ .rte-table-picker__cell:hover {
3759
+ background-color: #cae1fc;
3760
+ }
3761
+ .rte-table-picker__cell.active {
3762
+ background-color: #cae1fc;
3763
+ }
3764
+ .rte-table-picker__hint {
3765
+ text-align: center;
3766
+ }
3767
+ `,
3768
+ ]);
3769
+ }
3770
+ /**
3771
+ * Creates a table block with the specified number of rows and columns.
3772
+ *
3773
+ * @param {number} row - The number of rows for the table.
3774
+ * @param {number} column - The number of columns for the table.
3775
+ */
3776
+ createTable(row, column) {
3777
+ const { host, getSelectedNodes } = this.extensionContext;
3778
+ const focusNode = getSelectedNodes()[0];
3779
+ const action = new InsertTableBlockAction(row, column);
3780
+ if (!focusNode) {
3781
+ host.value.apply(action);
3782
+ }
3783
+ else if (focusNode.parent) {
3784
+ focusNode.parent.apply(action);
3785
+ }
3786
+ if (action.nextFocusNode) {
3787
+ host.value.apply(new UpdateCursorPositionAction(action.nextFocusNode, 1));
3788
+ }
3789
+ }
3790
+ /**
3791
+ * Handles the click event on a picker cell.
3792
+ *
3793
+ * @param {number} r - The number of rows selected.
3794
+ * @param {number} c - The number of columns selected.
3795
+ */
3796
+ handlePickerClick(r, c) {
3797
+ this.createTable(r, c);
3798
+ void this.tablePickerPopoverRef.hide();
3799
+ }
3800
+ /**
3801
+ * Handles the hover event on a picker cell.
3802
+ *
3803
+ * @param {number} r - The number of rows being hovered over.
3804
+ * @param {number} c - The number of columns being hovered over.
3805
+ */
3806
+ handlePickerCellHover(r, c) {
3807
+ this.hoveredRows = r;
3808
+ this.hoveredCols = c;
3809
+ Array.from(this.tablePickerGridRef.children).forEach((cell) => {
3810
+ const rIndex = Number(cell.dataset.row);
3811
+ const cIndex = Number(cell.dataset.col);
3812
+ if (rIndex <= this.hoveredRows && cIndex <= this.hoveredCols) {
3813
+ cell.classList.add('active');
3814
+ }
3815
+ else {
3816
+ cell.classList.remove('active');
3817
+ }
3818
+ });
3819
+ this.selectedHintRef.textContent = `${this.hoveredRows} × ${this.hoveredCols}`;
3820
+ }
3821
+ /**
3822
+ * Resets the table picker to its initial state.
3823
+ */
3824
+ resetPicker() {
3825
+ this.handlePickerCellHover(1, 1);
3826
+ }
3827
+ }
3828
+ (() => {
3829
+ VegaInternalIconManager.register({ 'rte-table': tableIcon });
3830
+ })();
3831
+
3832
+ /**
3833
+ * Strategy to handle the insertion of a block into the rich text editor.
3834
+ */
3835
+ class InsertTableBlockStrategy extends ActionHandleStrategy {
3836
+ /**
3837
+ * @inheritDoc
3838
+ */
3839
+ handleAction(action, target) {
3840
+ const tableBlock = this.createTableBlock(action.rowCount, action.columnCount);
3841
+ const emptyParagraph = super.createNewParagraph('');
3842
+ const referenceBlock = this.getReferenceBlock(target);
3843
+ if (referenceBlock) {
3844
+ referenceBlock.parent.apply(new InsertChildrenAfterAction(referenceBlock, tableBlock, emptyParagraph));
3845
+ }
3846
+ else {
3847
+ target.apply(new AppendChildrenAction([tableBlock, emptyParagraph]));
3848
+ }
3849
+ action.nextFocusNode = tableBlock.getFirstNode();
3850
+ }
3851
+ /**
3852
+ * Create a table block with the specified number of rows and columns.
3853
+ *
3854
+ * @param {number} row - The number of rows in the table.
3855
+ * @param {number} column - The number of columns in the table.
3856
+ * @returns {RTETableBlock} The created table block.
3857
+ */
3858
+ createTableBlock(row, column) {
3859
+ const normalizedRowCount = Math.max(row, 1);
3860
+ const normalizedColumnCount = Math.max(column, 1);
3861
+ return RTETableBlock.from({
3862
+ id: generateUUID(),
3863
+ type: 'table-block',
3864
+ children: [generateTableBody(normalizedRowCount, normalizedColumnCount)],
3865
+ });
3866
+ }
3867
+ /**
3868
+ * We need to get the correct block if the current target is a block element to avoid nesting blocks.
3869
+ *
3870
+ * @param {RTEBlock} currentTarget - The current target block or content.
3871
+ * @returns {Nullable<RTEBlock>} The reference block.
3872
+ */
3873
+ getReferenceBlock(currentTarget) {
3874
+ if (!(currentTarget instanceof VegaRTEContent)) {
3875
+ return currentTarget;
3876
+ }
3877
+ }
3878
+ }
3879
+
3880
+ /**
3881
+ * Interceptor to prevent deletion of a table cell if it is the cell with empty content.
3882
+ */
3883
+ class PreventCellContentDeleteInterceptor extends ActionHandlerInterceptor {
3884
+ /**
3885
+ * Prevent deletion if the target block is the only child of a table cell and is empty.
3886
+ *
3887
+ * @param {DeleteBlockContentAction} _action - the action to be intercepted
3888
+ * @param {RTETextBlock} target - the target block
3889
+ * @returns {boolean} - true if the deletion should be intercepted, false otherwise
3890
+ */
3891
+ canIntercept(_action, target) {
3892
+ const cell = target.parent;
3893
+ return cell instanceof RTETableCellBlock && cell.children.length === 1 && !target.isNotEmpty();
3894
+ }
3895
+ /**
3896
+ * @inheritDoc
3897
+ */
3898
+ intercept() {
3899
+ }
3900
+ }
3901
+
3902
+ /**
3903
+ * Strategy to handle the deletion of a table block from the parent.
3904
+ */
3905
+ class DeleteTableBlockStrategy extends ActionHandleStrategy {
3906
+ /**
3907
+ * Deletes the specified table block and updates the cursor position.
3908
+ *
3909
+ * @param {DeleteTableBlockAction} action - The action containing the table block to delete.
3910
+ */
3911
+ handleAction(action) {
3912
+ const tableBlock = action.tableBlock;
3913
+ const parent = tableBlock.parent;
3914
+ const root = super.getRootContent(tableBlock);
3915
+ const newParagraph = super.createNewParagraph('');
3916
+ parent.apply(new InsertChildrenAfterAction(tableBlock, newParagraph));
3917
+ parent.apply(new RemoveChildrenAction(tableBlock));
3918
+ if (root) {
3919
+ root.apply(new UpdateCursorPositionAction(newParagraph.getLastNode()));
3920
+ }
3921
+ }
3922
+ }
3923
+
3924
+ /**
3925
+ * Interceptor to prevent removal of all children from a cell, ensuring at least one child remains.
3926
+ */
3927
+ class PreventCellChildrenRemoveInterceptor extends ActionHandlerInterceptor {
3928
+ /**
3929
+ * Prevent removal if the target cell would be left empty after the action.
3930
+ *
3931
+ * @param {RemoveChildrenAction} action - the action to be intercepted
3932
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} target - the target cell block
3933
+ * @returns {boolean} - true if the removal should be intercepted, false otherwise
3934
+ */
3935
+ canIntercept(action, target) {
3936
+ return action.entityToBeRemoved && target.children.length === 1;
3937
+ }
3938
+ /**
3939
+ * Add a new empty text node to the cell to prevent it from removal.
3940
+ *
3941
+ * @param {ActionHandlerExecution} _execution - the original execution function
3942
+ * @param {RemoveChildrenAction} action - the action to be intercepted
3943
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} target - the target cell block
3944
+ */
3945
+ intercept(_execution, action, target) {
3946
+ if (!(action.entityToBeRemoved instanceof RTETextBlock)) {
3947
+ const newParagraph = RTETextBlock.from({
3948
+ id: generateUUID(),
3949
+ type: 'paragraph',
3950
+ nodes: [{ id: generateUUID(), type: 'text', text: '' }],
3951
+ });
3952
+ target.children = [];
3953
+ target.apply(new AppendChildrenAction([newParagraph]));
3954
+ return;
3955
+ }
3956
+ action.entityToBeRemoved.apply(new AppendChildrenAction([
3957
+ new RTETextNode(generateUUID(), '', action.entityToBeRemoved),
3958
+ ]));
3959
+ }
3960
+ }
3961
+
3962
+ /**
3963
+ * Strategy class for handling the insertion of a new row into a table.
3964
+ */
3965
+ class InsertTableRowStrategy extends ActionHandleStrategy {
3966
+ /**
3967
+ * @inheritDoc
3968
+ */
3969
+ handleAction(action, target) {
3970
+ const { insertDirection, selectedRows } = action;
3971
+ // The reference block will control where to insert the new row
3972
+ let refBlock = insertDirection === InsertTableRowDirection.ABOVE
3973
+ ? selectedRows[0]
3974
+ : selectedRows[selectedRows.length - 1];
3975
+ // The row need to be inserted is a header row
3976
+ if (this.shouldInsertHeaderRow(refBlock, insertDirection)) {
3977
+ const headerBlock = RTETableRowBlock.from({
3978
+ id: generateUUID(),
3979
+ type: 'table-row',
3980
+ children: refBlock.children.map((item) => {
3981
+ return this.getDefaultCellBlockTemplate(item.type);
3982
+ }),
3983
+ });
3984
+ if (insertDirection === InsertTableRowDirection.ABOVE) {
3985
+ refBlock.parent.apply(new InsertChildrenBeforeAction(refBlock, headerBlock));
3986
+ }
3987
+ else {
3988
+ refBlock.parent.apply(new InsertChildrenAfterAction(refBlock, headerBlock));
3989
+ }
3990
+ }
3991
+ else {
3992
+ let direction = insertDirection;
3993
+ let tableBody = target.children.find((block) => block instanceof RTETableBodyBlock);
3994
+ // Should insert into body if reference block is in head row and body exists
3995
+ if (refBlock.parent instanceof RTETableHeadBlock && tableBody) {
3996
+ refBlock = tableBody.children[0];
3997
+ direction = InsertTableRowDirection.ABOVE;
3998
+ }
3999
+ const refBlockIsHeaderRow = refBlock.parent instanceof RTETableHeadBlock;
4000
+ const rowBlock = RTETableRowBlock.from({
4001
+ id: generateUUID(),
4002
+ type: 'table-row',
4003
+ children: refBlock.children.map((item) => {
4004
+ return this.getDefaultCellBlockTemplate(refBlockIsHeaderRow ? 'table-cell' : item.type);
4005
+ }),
4006
+ });
4007
+ if (!tableBody) {
4008
+ tableBody = RTETableBodyBlock.from({
4009
+ id: generateUUID(),
4010
+ type: 'table-body',
4011
+ children: [],
4012
+ });
4013
+ tableBody.apply(new AppendChildrenAction([rowBlock]));
4014
+ target.apply(new AppendChildrenAction([tableBody]));
4015
+ }
4016
+ else {
4017
+ if (direction === InsertTableRowDirection.ABOVE) {
4018
+ tableBody.apply(new InsertChildrenBeforeAction(refBlock, rowBlock));
4019
+ }
4020
+ else {
4021
+ tableBody.apply(new InsertChildrenAfterAction(refBlock, rowBlock));
4022
+ }
4023
+ }
4024
+ }
4025
+ }
4026
+ /**
4027
+ * Checks if a header row should be inserted based on the selected rows and position.
4028
+ *
4029
+ * @param {RTETableRowBlock} refBlock - The reference table row block.
4030
+ * @param {InsertTableRowDirection} direction - The direction to insert the new row (above or below).
4031
+ * @returns {boolean} True if a header row should be inserted, false otherwise.
4032
+ */
4033
+ shouldInsertHeaderRow(refBlock, direction) {
4034
+ if (direction === InsertTableRowDirection.ABOVE) {
4035
+ return refBlock.parent instanceof RTETableHeadBlock;
4036
+ }
4037
+ else {
4038
+ const parentBlock = refBlock.parent;
4039
+ return (parentBlock instanceof RTETableHeadBlock &&
4040
+ parentBlock.children[parentBlock.children.length - 1] !== refBlock);
4041
+ }
4042
+ }
4043
+ /**
4044
+ * Get the default cell block template.
4045
+ *
4046
+ * @param {string} cellType - The type of the cell block.
4047
+ * @returns {VegaRTETableCellBlock | VegaRTETableHeadCellBlock} The default cell block template.
4048
+ */
4049
+ getDefaultCellBlockTemplate(cellType) {
4050
+ const id = generateUUID();
4051
+ return {
4052
+ id,
4053
+ type: cellType,
4054
+ children: [
4055
+ {
4056
+ id: `${id}-p`,
4057
+ type: 'paragraph',
4058
+ nodes: [
4059
+ {
4060
+ id: `${id}-p-t`,
4061
+ type: 'text',
4062
+ text: '',
4063
+ },
4064
+ ],
4065
+ },
4066
+ ],
4067
+ };
4068
+ }
4069
+ }
4070
+
4071
+ const TABLE_CAPTION_PLACEHOLDER_TEXT = 'Enter table caption';
4072
+ /**
4073
+ * Renderer for the optional table caption node.
4074
+ */
4075
+ class RTETableCaptionRenderer extends VegaRTEExtensionRenderer {
4076
+ /**
4077
+ * @inheritDoc
4078
+ */
4079
+ doRender(h, renderData) {
4080
+ return h('caption', {
4081
+ 'key': renderData.id,
4082
+ 'ref': this.useRef(renderData),
4083
+ 'style': renderData.getStyles(),
4084
+ 'class': [renderData.getClasses(), renderData.isNotEmpty() ? null : 'showPlaceholder']
4085
+ .filter(isNonNullable)
4086
+ .join(' '),
4087
+ 'data-placeholder': TABLE_CAPTION_PLACEHOLDER_TEXT,
4088
+ });
4089
+ }
4090
+ }
4091
+
4092
+ /**
4093
+ * Strategy class for handling the deletion of table rows.
4094
+ */
4095
+ class DeleteTableRowStrategy extends ActionHandleStrategy {
4096
+ /**
4097
+ * @inheritDoc
4098
+ */
4099
+ handleAction(action, target) {
4100
+ const { rowsToBeRemoved } = action;
4101
+ const futureFocusRow = this.getFutureFocusRow(rowsToBeRemoved[0], rowsToBeRemoved[rowsToBeRemoved.length - 1], target);
4102
+ rowsToBeRemoved.forEach((row) => {
4103
+ this.removeRow(row);
4104
+ });
4105
+ if (futureFocusRow) {
4106
+ const root = this.getRootContent(target);
4107
+ if (root) {
4108
+ const focusNode = futureFocusRow.getLastNode();
4109
+ root.apply(new UpdateCursorPositionAction(focusNode, focusNode.getRangeEndOffset()));
4110
+ }
4111
+ }
4112
+ }
4113
+ /**
4114
+ * Removes the specified row from its parent table section.
4115
+ * // TODO: Add handling for when selected row has or in merge column.
4116
+ *
4117
+ * @param {RTETableRowBlock} rowToBeRemoved The row to be removed.
4118
+ */
4119
+ removeRow(rowToBeRemoved) {
4120
+ rowToBeRemoved.parent.apply(new RemoveChildrenAction(rowToBeRemoved));
4121
+ }
4122
+ /**
4123
+ * Get the future focus row after deletion.
4124
+ *
4125
+ * @param {RTETableRowBlock} startRow - The first row to be deleted.
4126
+ * @param {RTETableRowBlock} endRow - The last row to be deleted.
4127
+ * @param {RTETableBlock} table - The table containing the rows.
4128
+ * @returns {Nullable<RTETableRowBlock>} The row to be focused after deletion.
4129
+ */
4130
+ getFutureFocusRow(startRow, endRow, table) {
4131
+ const allRows = table.children
4132
+ .filter((item) => item instanceof RTETableHeadBlock || item instanceof RTETableBodyBlock)
4133
+ .flatMap((block) => block.children);
4134
+ const startIndex = allRows.indexOf(startRow);
4135
+ const endIndex = allRows.indexOf(endRow);
4136
+ if (allRows[startIndex - 1]) {
4137
+ return allRows[startIndex - 1];
4138
+ }
4139
+ else if (allRows[endIndex + 1]) {
4140
+ return allRows[endIndex + 1];
4141
+ }
4142
+ }
4143
+ }
4144
+
4145
+ /**
4146
+ * Table selection helper used for mouse drag selection of cells.
4147
+ */
4148
+ class RTETableSelection {
4149
+ constructor() {
4150
+ /**
4151
+ * Indicates whether the user is currently performing a drag selection.
4152
+ */
4153
+ this.dragging = false;
4154
+ /**
4155
+ * Anchor cell where the drag selection started.
4156
+ */
4157
+ this.anchorCell = null;
4158
+ /**
4159
+ * Collection of currently selected cells.
4160
+ */
4161
+ this.selectedCells = new Set();
4162
+ this.syncRTESelectionWithDebounce = debounce(this.syncRTESelection, 100, this);
4163
+ this.handleSelectionChangeWithDebounce = debounce(this.handleSelectionChange, 10, this);
4164
+ /**
4165
+ * Recursively filter and collect selected table cell blocks within the given node.
4166
+ *
4167
+ * @param {Range} range - The current selection range.
4168
+ * @param {Node} node - The current node to check for selection.
4169
+ * @returns {RTETableCellBlock[]} A list of selected table cell blocks.
4170
+ */
4171
+ this.filterSelectedCell = (range, node) => {
4172
+ const selectedCells = new Set();
4173
+ if (range.intersectsNode(node)) {
4174
+ if (node.nodeType === Node.TEXT_NODE) {
4175
+ const focusedNodeDto = stateEntityRenderingRegistry.getEntityByDOM(node.parentElement);
4176
+ if (focusedNodeDto) {
4177
+ const cell = getParentBlockByType(focusedNodeDto.parent, RTETableCellBlock);
4178
+ if (cell) {
4179
+ selectedCells.add(cell);
4180
+ return Array.from(selectedCells);
4181
+ }
4182
+ }
4183
+ }
4184
+ node.childNodes.forEach((child) => this.filterSelectedCell(range, child).forEach((cell) => {
4185
+ selectedCells.add(cell);
4186
+ }));
4187
+ }
4188
+ return Array.from(selectedCells);
4189
+ };
4190
+ /**
4191
+ * Update the styles of the selected cells.
4192
+ *
4193
+ * @param {RTETableCellBlock} cell - The cell to update style for.
4194
+ * @param {number} total - The total number of selected cells.
4195
+ */
4196
+ this.updateSelectedStyles = (cell, total) => {
4197
+ const selectedClass = total === 1 ? 'v-rte-table-cell-focused' : 'v-rte-table-cell-selected';
4198
+ const cellRef = stateEntityRenderingRegistry.getDOMByEntity(cell);
4199
+ if (cellRef) {
4200
+ cellRef.classList.add(selectedClass);
4201
+ }
4202
+ };
4203
+ /**
4204
+ * Handles the document mouse up event to finish drag selection.
4205
+ */
4206
+ this.handleDocMouseUp = () => {
4207
+ this.endDrag();
4208
+ const safeDocument = tryGetDocument();
4209
+ if (safeDocument) {
4210
+ safeDocument.removeEventListener('mouseup', this.handleDocMouseUp);
4211
+ }
4212
+ };
4213
+ /**
4214
+ * Resets the table selection when clicking outside the table.
4215
+ */
4216
+ this.handleContentClick = () => {
4217
+ this.clearSelection();
4218
+ const editorContent =
4219
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
4220
+ this.context.host.shadowRoot.querySelector('.rich-text-editor-container');
4221
+ if (editorContent) {
4222
+ editorContent.removeEventListener('mousedown', this.handleContentClick, true);
4223
+ }
4224
+ };
4225
+ }
4226
+ /**
4227
+ * Compute all cells inside the rectangle defined by the start and end cells.
4228
+ *
4229
+ * Note: this only performs the calculation and does not modify the internal `selectedCells` set,
4230
+ * so callers can decide how to apply the result.
4231
+ *
4232
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} anchor - Drag start cell (anchor cell).
4233
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} focus - Current drag focus cell.
4234
+ * @returns {(RTETableCellBlock | RTETableHeadCellBlock)[]} All cells in the rectangular selection area.
4235
+ */
4236
+ static computeRectRange(anchor, focus) {
4237
+ // Collect all row blocks (from both head and body) under the same table,
4238
+ // then compute the rectangle over this flattened row list.
4239
+ const anchorRow = anchor.parent;
4240
+ const focusRow = focus.parent;
4241
+ const anchorSection = anchorRow.parent;
4242
+ const focusSection = focusRow.parent;
4243
+ const anchorTable = anchorSection.parent;
4244
+ const focusTable = focusSection.parent;
4245
+ // If they are not in the same table at all, just return empty.
4246
+ if (anchorTable !== focusTable) {
4247
+ return [];
4248
+ }
4249
+ // Flatten head rows (if any) + body rows into a single ordered list.
4250
+ const allRows = [];
4251
+ const tableChildren = anchorTable.children;
4252
+ tableChildren.forEach((section) => {
4253
+ section.children.forEach((row) => allRows.push(row));
4254
+ });
4255
+ const anchorRowIndex = allRows.indexOf(anchorRow);
4256
+ const focusRowIndex = allRows.indexOf(focusRow);
4257
+ const startRow = Math.min(anchorRowIndex, focusRowIndex);
4258
+ const endRow = Math.max(anchorRowIndex, focusRowIndex);
4259
+ const anchorColIndex = anchorRow.children.indexOf(anchor);
4260
+ const focusColIndex = focusRow.children.indexOf(focus);
4261
+ const startCol = Math.min(anchorColIndex, focusColIndex);
4262
+ const endCol = Math.max(anchorColIndex, focusColIndex);
4263
+ const result = [];
4264
+ for (let r = startRow; r <= endRow; r++) {
4265
+ const row = allRows[r];
4266
+ for (let c = startCol; c <= endCol; c++) {
4267
+ const cell = row.children[c];
4268
+ if (cell) {
4269
+ result.push(cell);
4270
+ }
4271
+ }
4272
+ }
4273
+ return result;
4274
+ }
4275
+ /**
4276
+ * Clean up event listeners.
4277
+ */
4278
+ destroy() {
4279
+ this.removeSelectionChangeListener();
4280
+ }
4281
+ /**
4282
+ * Inject the extension context and set up selection change listener.
4283
+ *
4284
+ * @param {RTEExtensionContext} context - The extension context.
4285
+ */
4286
+ init(context) {
4287
+ this.context = context;
4288
+ this.addSelectionChangeListener();
4289
+ }
4290
+ /**
4291
+ * Set the selected cells to the given list, replacing any existing selection.
4292
+ *
4293
+ * @param {RTETableCellBlock} cells - The cells to select.
4294
+ */
4295
+ setSelectedCells(cells) {
4296
+ this.updateSelectedCells(cells);
4297
+ }
4298
+ /**
4299
+ * Get all currently selected cells.
4300
+ *
4301
+ * @returns {(RTETableCellBlock | RTETableHeadCellBlock)[]} A flat list of selected cells.
4302
+ */
4303
+ getSelectedCells() {
4304
+ return Array.from(this.selectedCells);
4305
+ }
4306
+ /**
4307
+ * Handle mouse down on a cell: start drag selection from the given cell.
4308
+ *
4309
+ * @param {HTMLElement} cellRef - The cell where the drag starts.
4310
+ */
4311
+ focusCell(cellRef) {
4312
+ const cellBlock = stateEntityRenderingRegistry.getEntityByDOM(cellRef);
4313
+ if (cellBlock) {
4314
+ this.anchorCell = cellBlock;
4315
+ this.setSelectedCells([cellBlock]);
4316
+ this.addListeners();
4317
+ }
4318
+ }
4319
+ /**
4320
+ * Handle drag over a cell (typically called on `mouseenter` while dragging).
4321
+ * Maintains a rectangular selection between the anchor cell and the current cell.
4322
+ *
4323
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} cell - The cell currently under the drag.
4324
+ */
4325
+ dragOver(cell) {
4326
+ if (!this.anchorCell) {
4327
+ return;
4328
+ }
4329
+ // Always compute the rectangle strictly from the original anchorCell
4330
+ // (the cell where startDrag was first called) to the current cell.
4331
+ const rectCells = RTETableSelection.computeRectRange(this.anchorCell, cell);
4332
+ if (rectCells.length > 1) {
4333
+ this.startDrag();
4334
+ }
4335
+ if (this.dragging) {
4336
+ this.preventTextSelection(rectCells);
4337
+ this.updateSelectedCells(rectCells, { debounceSync: true });
4338
+ }
4339
+ }
4340
+ /**
4341
+ * Handle mouse up: stop drag selection.
4342
+ */
4343
+ endDrag() {
4344
+ this.dragging = false;
4345
+ // Reset anchor after drag ends so the next drag can start from a new cell.
4346
+ this.anchorCell = null;
4347
+ }
4348
+ /**
4349
+ * Clear the current selection state without changing the drag flag.
4350
+ */
4351
+ clearSelection() {
4352
+ this.selectedCells.forEach((cell) => {
4353
+ const cellRef = stateEntityRenderingRegistry.getDOMByEntity(cell);
4354
+ if (cellRef) {
4355
+ cellRef.classList.remove('v-rte-table-cell-selected', 'v-rte-table-cell-focused');
4356
+ }
4357
+ });
4358
+ this.selectedCells.clear();
4359
+ }
4360
+ /**
4361
+ * Add a selectionchange listener to the document to handle cell click selection.
4362
+ */
4363
+ addSelectionChangeListener() {
4364
+ const safeDocument = tryGetDocument();
4365
+ if (safeDocument) {
4366
+ safeDocument.addEventListener('selectionchange', this.handleSelectionChangeWithDebounce);
4367
+ }
4368
+ }
4369
+ /**
4370
+ * Remove the selectionchange listener from the document.
4371
+ */
4372
+ removeSelectionChangeListener() {
4373
+ const safeDocument = tryGetDocument();
4374
+ if (safeDocument) {
4375
+ safeDocument.removeEventListener('selectionchange', this.handleSelectionChangeWithDebounce);
4376
+ }
4377
+ }
4378
+ /**
4379
+ * Handle selection change events from the document for the cell click selection.
4380
+ */
4381
+ handleSelectionChange() {
4382
+ if (this.dragging) {
4383
+ this.syncRTESelectionWithDebounce();
4384
+ return;
4385
+ }
4386
+ const selection = this.context.getSelection();
4387
+ if (selection.rangeCount > 0) {
4388
+ const range = selection.getRangeAt(0);
4389
+ const commonAncestorContainer = range.commonAncestorContainer;
4390
+ const rangeInTable = !!findParent(commonAncestorContainer, `table.${RTETableBlockRenderer.EXTENSION_TABLE_CLASS}`);
4391
+ if (rangeInTable) {
4392
+ const selectedCells = this.filterSelectedCell(range, commonAncestorContainer);
4393
+ this.setSelectedCells(selectedCells);
4394
+ }
4395
+ }
4396
+ }
4397
+ /**
4398
+ * Mark the beginning of a drag operation.
4399
+ */
4400
+ startDrag() {
4401
+ this.dragging = true;
4402
+ }
4403
+ /**
4404
+ * Add the given cells to the current selection set.
4405
+ *
4406
+ * @param {RTETableCellBlock[]} cells - The cells to add to the selection.
4407
+ * @param {{ debounceSync?: boolean }} [options] - Options for updating selection.
4408
+ * @param {boolean} [options.debounceSync] - Whether to debounce the RTE selection sync.
4409
+ */
4410
+ updateSelectedCells(cells, { debounceSync } = {}) {
4411
+ this.clearSelection();
4412
+ cells.forEach((cell) => {
4413
+ this.selectedCells.add(cell);
4414
+ this.updateSelectedStyles(cell, cells.length);
4415
+ });
4416
+ if (debounceSync) {
4417
+ this.syncRTESelectionWithDebounce();
4418
+ }
4419
+ else {
4420
+ this.syncRTESelection();
4421
+ }
4422
+ }
4423
+ /**
4424
+ * Synchronizes the rich text editor selection with the selected table cells.
4425
+ */
4426
+ syncRTESelection() {
4427
+ const cells = Array.from(this.selectedCells);
4428
+ const nodes = cells
4429
+ .flatMap((cell) => {
4430
+ return cell.children.flatMap((block) => {
4431
+ return block.children.flatMap((node) => {
4432
+ // TODO: Nested table deletion will track in https://gethired.atlassian.net/browse/VD-7860
4433
+ if (node instanceof RTENode) {
4434
+ return node;
4435
+ }
4436
+ });
4437
+ });
4438
+ })
4439
+ .filter(isNonNullable);
4440
+ if (cells.length > 1) {
4441
+ this.context.setSelectedNodes(nodes, {
4442
+ startNode: nodes[0],
4443
+ endNode: nodes[nodes.length - 1],
4444
+ startOffset: 0,
4445
+ endOffset: nodes[nodes.length - 1].getRangeEndOffset(),
4446
+ });
4447
+ }
4448
+ }
4449
+ /**
4450
+ * Prevents text selection during drag operations.
4451
+ *
4452
+ * @param {RTETableCellBlock[]} selectedCells - The currently selected table cells.
4453
+ */
4454
+ preventTextSelection(selectedCells) {
4455
+ const selection = this.context.getSelection();
4456
+ selection.removeAllRanges();
4457
+ if (selectedCells.length > 0) {
4458
+ const startContainer = stateEntityRenderingRegistry.getDOMByEntity(selectedCells[0]);
4459
+ if (startContainer) {
4460
+ const newRange = new Range();
4461
+ newRange.setStart(startContainer, 0);
4462
+ newRange.setEnd(startContainer, 0);
4463
+ selection.addRange(newRange);
4464
+ }
4465
+ }
4466
+ }
4467
+ /**
4468
+ * Adds a mouse up listener to the document to finish drag selection.
4469
+ *
4470
+ */
4471
+ addListeners() {
4472
+ const safeDocument = tryGetDocument();
4473
+ if (safeDocument) {
4474
+ safeDocument.addEventListener('mouseup', this.handleDocMouseUp);
4475
+ }
4476
+ const editorContent =
4477
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
4478
+ this.context.host.shadowRoot.querySelector('.rich-text-editor-container');
4479
+ if (editorContent) {
4480
+ editorContent.addEventListener('mousedown', this.handleContentClick, true);
4481
+ }
4482
+ }
4483
+ }
4484
+
4485
+ /**
4486
+ * Strategy class for handling converting selected rows to header rows or reverting them back to normal rows.
4487
+ */
4488
+ class ToggleHeaderRowStrategy extends ActionHandleStrategy {
4489
+ /**
4490
+ * @inheritDoc
4491
+ */
4492
+ handleAction(action, target) {
4493
+ const { selectedRows } = action;
4494
+ const headerRows = [];
4495
+ const bodyRows = [];
4496
+ for (const row of selectedRows) {
4497
+ if (row.parent instanceof RTETableBodyBlock) {
4498
+ bodyRows.push(row);
4499
+ }
4500
+ else {
4501
+ headerRows.push(row);
4502
+ }
4503
+ }
4504
+ if (bodyRows.length > 0) {
4505
+ this.convertToHeaderRows(bodyRows, target);
4506
+ }
4507
+ else {
4508
+ this.revertToBodyRows(headerRows, target);
4509
+ }
4510
+ const root = this.getRootContent(target);
4511
+ if (root) {
4512
+ const focusNode = selectedRows[0].getFirstNode();
4513
+ focusNode && root.apply(new UpdateCursorPositionAction(focusNode, 0));
4514
+ }
4515
+ }
4516
+ /**
4517
+ * Converts normal rows to header rows.
4518
+ *
4519
+ * @param {RTETableRowBlock[]} rows - The table row blocks to convert.
4520
+ * @param {RTETableBlock} table - The table block containing the rows.
4521
+ */
4522
+ convertToHeaderRows(rows, table) {
4523
+ let tableHead = table.children.find((block) => block instanceof RTETableHeadBlock);
4524
+ const tableBody = rows[0].parent;
4525
+ if (!tableHead) {
4526
+ tableHead = RTETableHeadBlock.from({
4527
+ id: generateUUID(),
4528
+ type: 'table-head',
4529
+ children: [],
4530
+ });
4531
+ table.apply(new InsertChildrenBeforeAction(tableBody, tableHead));
4532
+ }
4533
+ const endIndex = tableBody.children.indexOf(rows[rows.length - 1]);
4534
+ const shouldConvertRows = tableBody.children.slice(0, endIndex + 1);
4535
+ for (let i = 0; i < shouldConvertRows.length; i++) {
4536
+ const rowBlock = shouldConvertRows[i];
4537
+ rowBlock.children = rowBlock.children.map((cell) => this.convertTdToTh(cell));
4538
+ tableBody.apply(new RemoveChildrenAction(rowBlock));
4539
+ }
4540
+ tableHead.apply(new AppendChildrenAction(shouldConvertRows));
4541
+ }
4542
+ /**
4543
+ * Converts header rows back to normal rows.
4544
+ *
4545
+ * @param {RTETableRowBlock[]} rows - The table row blocks to convert.
4546
+ * @param {RTETableBlock} table - The table block containing the rows.
4547
+ */
4548
+ revertToBodyRows(rows, table) {
4549
+ let tableBody = table.children.find((block) => block instanceof RTETableBodyBlock);
4550
+ const tableHead = rows[0].parent;
4551
+ if (!tableBody) {
4552
+ tableBody = RTETableBodyBlock.from({
4553
+ id: generateUUID(),
4554
+ type: 'table-body',
4555
+ children: [],
4556
+ });
4557
+ table.apply(new InsertChildrenAfterAction(tableHead, tableBody));
4558
+ }
4559
+ const firstBodyRow = tableBody.children[0];
4560
+ const startIndex = tableHead.children.indexOf(rows[0]);
4561
+ const shouldConvertRows = tableHead.children.slice(startIndex);
4562
+ for (let i = 0; i < shouldConvertRows.length; i++) {
4563
+ const rowBlock = shouldConvertRows[i];
4564
+ tableHead.apply(new RemoveChildrenAction(rowBlock));
4565
+ rowBlock.children = this.convertThToTd(rowBlock, firstBodyRow);
4566
+ if (firstBodyRow) {
4567
+ tableBody.apply(new InsertChildrenBeforeAction(firstBodyRow, rowBlock));
4568
+ }
4569
+ }
4570
+ if (!firstBodyRow) {
4571
+ tableBody.apply(new AppendChildrenAction(shouldConvertRows));
4572
+ }
4573
+ }
4574
+ /**
4575
+ * Converts a table data cell to a table header cell.
4576
+ *
4577
+ * @param {RTETableHeadCellBlock} cell - The table cell block to convert.
4578
+ * @returns {RTETableHeadCellBlock} The converted table header cell block.
4579
+ */
4580
+ convertTdToTh(cell) {
4581
+ if (cell instanceof RTETableHeadCellBlock) {
4582
+ return cell;
4583
+ }
4584
+ const headCell = RTETableHeadCellBlock.from(cell.toJSON());
4585
+ headCell.parent = cell.parent;
4586
+ return headCell;
4587
+ }
4588
+ /**
4589
+ * Converts table header cells to table body cells.
4590
+ *
4591
+ * @param {RTETableRowBlock} row - The table row block containing the cells.
4592
+ * @param {Nullable<RTETableRowBlock>} referenceRow - The reference row for comparison.
4593
+ * @returns {RTETableCellBlock[]} The converted table body cell blocks.
4594
+ */
4595
+ convertThToTd(row, referenceRow) {
4596
+ return row.children.map((cell, index) => {
4597
+ let bodyCell = cell;
4598
+ if (!referenceRow || referenceRow.children[index].type !== cell.type) {
4599
+ const cellJSON = cell.toJSON();
4600
+ bodyCell = RTETableCellBlock.from(cellJSON);
4601
+ }
4602
+ bodyCell.parent = row;
4603
+ return bodyCell;
4604
+ });
4605
+ }
4606
+ }
4607
+
4608
+ /**
4609
+ * Strategy to handle the insertion of a table column into the RTETable.
4610
+ */
4611
+ class InsertTableColumnStrategy extends TableColumnStrategy {
4612
+ /**
4613
+ * @inheritDoc
4614
+ */
4615
+ handleAction(action, target) {
4616
+ const insertDirection = action.insertDirection;
4617
+ const [startCellIndex, endCellIndex] = this.getBoundaryCellIndexOfRow(action.tableCellInsertRange);
4618
+ const allTableRows = getAllTableRows(target);
4619
+ allTableRows.forEach((row) => {
4620
+ if (insertDirection === InsertTableColumnDirection.LEFT) {
4621
+ const newCell = this.generateTableCell(row.children[startCellIndex]);
4622
+ row.apply(new InsertChildrenBeforeAction(row.children[startCellIndex], newCell));
4623
+ }
4624
+ else {
4625
+ const newCell = this.generateTableCell(row.children[endCellIndex + 1] || row.children[endCellIndex]);
4626
+ row.apply(new InsertChildrenAfterAction(row.children[endCellIndex], newCell));
4627
+ }
4628
+ });
4629
+ }
4630
+ /**
4631
+ * Generate a new table cell based on the original cell type.
4632
+ *
4633
+ * @param {RTETableCellBlock | RTETableHeadCellBlock} originalCell The original table cell block to base the new cell on.
4634
+ * @returns {RTETableCellBlock | RTETableHeadCellBlock} The newly generated table cell block.
4635
+ */
4636
+ generateTableCell(originalCell) {
4637
+ if (originalCell instanceof RTETableHeadCellBlock) {
4638
+ return RTETableHeadCellBlock.from(getDefaultCellBlockTemplate(originalCell.type));
4639
+ }
4640
+ return RTETableCellBlock.from(getDefaultCellBlockTemplate(originalCell.type));
4641
+ }
4642
+ }
4643
+
4644
+ /**
4645
+ * Strategy to handle the deletion of table column from the parent.
4646
+ */
4647
+ class DeleteTableColumnStrategy extends TableColumnStrategy {
4648
+ /**
4649
+ * Deletes the specified table column and updates the cursor position.
4650
+ *
4651
+ * @param {DeleteTableColumnAction} action - The action containing the table column to delete.
4652
+ * @param {RTETableBlock} target - The target table block from which the column will be deleted.
4653
+ */
4654
+ handleAction(action, target) {
4655
+ const [startCellIndex, endCellIndex] = this.getBoundaryCellIndexOfRow(action.tableCellDeleteRange);
4656
+ const allTableRows = getAllTableRows(target);
4657
+ // Find the next focusable cell before deletion
4658
+ const nextFocusableCell = this.findNextFocusableCell(action.tableCellDeleteRange, [startCellIndex, endCellIndex]);
4659
+ allTableRows.forEach((row) => {
4660
+ this.deleteCellsInRow(row, startCellIndex, endCellIndex);
4661
+ });
4662
+ const root = this.getRootContent(target);
4663
+ const nextFocusNode = getFirstNode(nextFocusableCell);
4664
+ if (root && nextFocusNode) {
4665
+ root.apply(new UpdateCursorPositionAction(nextFocusNode));
4666
+ }
4667
+ }
4668
+ /**
4669
+ * Find the next focusable cell either after the deleted range or before it.
4670
+ *
4671
+ * @param {RTETableCellBlock[]} tableCellBlockDeleteRange - The range of table cell blocks to be deleted.
4672
+ * @param {number[]} indexRange - The start and end indices of the cells to be deleted.
4673
+ * @returns {Nullable<RTETableCellBlock | RTETableHeadCellBlock>} The next focusable cell.
4674
+ */
4675
+ findNextFocusableCell(tableCellBlockDeleteRange, indexRange) {
4676
+ const cellAfterEndOfRange = tableCellBlockDeleteRange[tableCellBlockDeleteRange.length - 1].parent.children[indexRange[indexRange.length - 1] + 1];
4677
+ const cellBeforeStartOfRange = tableCellBlockDeleteRange[0].parent.children[indexRange[0] - 1];
4678
+ return cellAfterEndOfRange !== null && cellAfterEndOfRange !== void 0 ? cellAfterEndOfRange : cellBeforeStartOfRange;
4679
+ }
4680
+ /**
4681
+ * Deletes cells in a given row from start index to end index.
4682
+ *
4683
+ * @param {RTETableRowBlock} row - The table row block.
4684
+ * @param {number} startCellIndex - The start index of the cell to delete.
4685
+ * @param {number} endCellIndex - The end index of the cell to delete.
4686
+ */
4687
+ deleteCellsInRow(row, startCellIndex, endCellIndex) {
4688
+ const needDeleteCells = [];
4689
+ for (let index = startCellIndex; index <= endCellIndex; index++) {
4690
+ needDeleteCells.push(row.children[index]);
4691
+ }
4692
+ needDeleteCells.forEach((cell) => {
4693
+ row.apply(new RemoveChildrenAction(cell));
4694
+ });
4695
+ }
4696
+ }
4697
+
4698
+ /**
4699
+ * Strategy to handle the selection of a table column.
4700
+ */
4701
+ class SelectTableColumnStrategy extends TableColumnStrategy {
4702
+ /**
4703
+ * @inheritDoc
4704
+ */
4705
+ handleAction(action, target) {
4706
+ const [startCellIndex, endCellIndex] = this.getBoundaryCellIndexOfRow(action.tableCellSelectRange);
4707
+ const allTableRows = getAllTableRows(target);
4708
+ const allNeedSelectedCells = [];
4709
+ allTableRows.forEach((row) => {
4710
+ for (let cellIndex = startCellIndex; cellIndex <= endCellIndex; cellIndex++) {
4711
+ const cellToSelect = row.children[cellIndex];
4712
+ allNeedSelectedCells.push(cellToSelect);
4713
+ }
4714
+ });
4715
+ action.selectCellCallback(allNeedSelectedCells);
4716
+ }
4717
+ }
4718
+
4719
+ /**
4720
+ * Interceptor to prevent insertion of non-cell blocks into a table row.
4721
+ */
4722
+ class PreventRowInsertInterceptor extends ActionHandlerInterceptor {
4723
+ /**
4724
+ * Prevent insertion if any of the children to be inserted is not a table cell block.
4725
+ *
4726
+ * @param {InsertChildrenBeforeAction} action - the action to be intercepted
4727
+ * @returns {boolean} - true if the insertion should be intercepted, false otherwise
4728
+ */
4729
+ canIntercept(action) {
4730
+ return action.childrenToBeInserted.some((item) => !(item instanceof RTETableCellBlock));
4731
+ }
4732
+ /**
4733
+ * @inheritDoc
4734
+ */
4735
+ intercept() {
4736
+ }
4737
+ }
4738
+
4739
+ /**
4740
+ * Function extension class for Vega Rich Text Editor.
4741
+ */
4742
+ class VegaRTETableExtension extends VegaRTEExtension {
4743
+ constructor() {
4744
+ super();
4745
+ this.toolbarButtonRenderer = new RTETableToolbarButtonRenderer();
4746
+ this.tableBlockRenderer = new RTETableBlockRenderer();
4747
+ this.tableRowBlockRenderer = new RTETableRowBlockRenderer();
4748
+ this.tableCellRenderer = new RTETableCellRenderer();
4749
+ this.tableHeadCellRenderer = new RTETableHeadCellRenderer();
4750
+ this.tableSelection = new RTETableSelection();
4751
+ this.registerToolbarButtonRenderer('table', this.toolbarButtonRenderer);
4752
+ this.registerBlockBasicStrategies(RTETableBlock.name);
4753
+ this.registerBlockBasicStrategies(RTETableHeadBlock.name);
4754
+ this.registerBlockBasicStrategies(RTETableHeadCellBlock.name);
4755
+ this.registerBlockBasicStrategies(RTETableRowBlock.name);
4756
+ this.registerBlockBasicStrategies(RTETableCellBlock.name);
4757
+ this.registerBlockBasicStrategies(RTETableBodyBlock.name);
4758
+ this.registerRenderer('table-block', this.tableBlockRenderer);
4759
+ this.registerRenderer('table-head', new RTETableHeadRenderer());
4760
+ this.registerRenderer('table-head-cell', this.tableHeadCellRenderer);
4761
+ this.registerRenderer('table-row', this.tableRowBlockRenderer);
4762
+ this.registerRenderer('table-cell', this.tableCellRenderer);
4763
+ this.registerRenderer('table-body', new RTETableBodyRenderer());
4764
+ this.registerRenderer('table-caption', new RTETableCaptionRenderer());
4765
+ this.registerNode('table-block', RTETableBlock);
4766
+ this.registerNode('table-head', RTETableHeadBlock);
4767
+ this.registerNode('table-head-cell', RTETableHeadCellBlock);
4768
+ this.registerNode('table-row', RTETableRowBlock);
4769
+ this.registerNode('table-cell', RTETableCellBlock);
4770
+ this.registerNode('table-body', RTETableBodyBlock);
4771
+ this.registerNode('table-caption', RTETableCaptionBlock);
4772
+ }
4773
+ /**
4774
+ * Initializes the extension with the given context
4775
+ *
4776
+ * @param {RTEExtensionContext} context - extension context
4777
+ */
4778
+ initialExtension(context) {
4779
+ super.initialExtension(context);
4780
+ this.tableSelection.init(context);
4781
+ const tableExtensionContext = Object.assign(Object.assign({}, context), { tableSelection: this.tableSelection });
4782
+ this.toolbarButtonRenderer.injectExtensionContext(tableExtensionContext);
4783
+ this.tableBlockRenderer.injectExtensionContext(tableExtensionContext);
4784
+ this.tableCellRenderer.injectExtensionContext(tableExtensionContext);
4785
+ this.tableHeadCellRenderer.injectExtensionContext(tableExtensionContext);
4786
+ }
4787
+ /**
4788
+ * @inheritDoc
4789
+ */
4790
+ destroyExtension() {
4791
+ this.tableSelection.destroy();
4792
+ }
4793
+ }
4794
+ (() => {
4795
+ const insertTableBlockStrategy = new InsertTableBlockStrategy();
4796
+ const deleteTableBlockStrategy = new DeleteTableBlockStrategy();
4797
+ VegaRTEExtension.registerActionHandleStrategy(VegaRTEContent.name, INSERT_TABLE_BLOCK, insertTableBlockStrategy);
4798
+ VegaRTEExtension.registerActionHandleStrategy(VegaRTEContent.name, DELETE_TABLE_BLOCK, deleteTableBlockStrategy);
4799
+ VegaRTEExtension.registerActionHandleStrategy(RTETableCellBlock.name, DELETE_TABLE_BLOCK, deleteTableBlockStrategy);
4800
+ VegaRTEExtension.registerActionHandleStrategy(RTETableHeadCellBlock.name, DELETE_TABLE_BLOCK, deleteTableBlockStrategy);
4801
+ VegaRTEExtension.registerActionHandleStrategy(RTETextBlock.name, INSERT_TABLE_BLOCK, insertTableBlockStrategy);
4802
+ VegaRTEExtension.registerActionHandleStrategy(RTEImageBlock.name, INSERT_TABLE_BLOCK, insertTableBlockStrategy);
4803
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, INSERT_TABLE_ROW, new InsertTableRowStrategy());
4804
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, DELETE_TABLE_ROW, new DeleteTableRowStrategy());
4805
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, TOGGLE_HEADER_ROW, new ToggleHeaderRowStrategy());
4806
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, INSERT_TABLE_COLUMN, new InsertTableColumnStrategy());
4807
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, DELETE_TABLE_COLUMN, new DeleteTableColumnStrategy());
4808
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, TOGGLE_HEADER_TABLE_COLUMN, new ToggleHeaderTableColumnStrategy());
4809
+ VegaRTEExtension.registerActionHandleStrategy(RTETableBlock.name, SELECT_TABLE_COLUMN, new SelectTableColumnStrategy());
4810
+ VegaRTEExtension.registerActionHandlerInterceptor(RTETextBlock.name, ModifyContentActionType.DELETE_BLOCK_CONTENT, new PreventCellContentDeleteInterceptor());
4811
+ VegaRTEExtension.registerActionHandlerInterceptor(RTETableRowBlock.name, ModifyContentActionType.INSERT_CHILDREN_BEFORE, new PreventRowInsertInterceptor());
4812
+ VegaRTEExtension.registerActionHandlerInterceptor(RTETableCellBlock.name, ModifyContentActionType.DELETE_CHILDREN, new PreventCellChildrenRemoveInterceptor());
4813
+ VegaRTEExtension.registerActionHandlerInterceptor(RTETableHeadCellBlock.name, ModifyContentActionType.DELETE_CHILDREN, new PreventCellChildrenRemoveInterceptor());
4814
+ })();
4815
+
4816
+ export { ActionHandlerInterceptor as A, InsertNodeToNearestRootAction as I, RTETokenToolbarButtonRenderer as R, VegaLoader as V, VegaNotify as a, VegaThemeManager as b, VegaDialog as c, VegaEventManager$1 as d, VegaZIndexManager$1 as e, VegaSkeletonLoader as f, VegaRTETokenExtension as g, VegaRTEFunctionExtension as h, VegaRTETableExtension as i, VegaRTEToolbarButtonRenderer as j, VegaRTEExtension as k, VegaRTEExtensionRenderer as l, RTETokenNode as m, RTETokenNodeRenderer as n, InternalVegaZIndexManager$1 as o };