@globalpayments/vega 2.49.1 → 2.51.0

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 (599) hide show
  1. package/LICENSE +9 -17
  2. package/dist/cjs/{app-globals-65622aeb.js → app-globals-4ecf85bb.js} +11 -8
  3. package/dist/cjs/{child-nodes-event-prevent-slimmer-cc193ee1.js → child-nodes-event-prevent-slimmer-29020cc8.js} +1 -1
  4. package/dist/cjs/{child-nodes-notify-observer-slimmer-5817a53b.js → child-nodes-notify-observer-slimmer-30ba81ac.js} +1 -1
  5. package/dist/cjs/{content-state-6a48bcb5.js → code-block-2d014e17.js} +212 -975
  6. package/dist/cjs/{component-73a88c4e.js → component-1e352960.js} +1 -0
  7. package/dist/cjs/{component-global-style-slimmer-6749808c.js → component-global-style-slimmer-b0b4b997.js} +3 -0
  8. package/dist/cjs/content-state-6a5da7ec.js +1146 -0
  9. package/dist/cjs/{dark-mode-style-controller-4adb7fb2.js → dark-mode-style-controller-f9a32d68.js} +8 -0
  10. package/dist/cjs/{design-token-cba4222e.js → design-token-3f4f0bc3.js} +1 -1
  11. package/dist/cjs/{dom-node-subject-factory-d5826bff.js → dom-node-subject-factory-769dd00f.js} +1 -1
  12. package/dist/cjs/{dom-node-subject-observer-factory-a7a3b196.js → dom-node-subject-observer-factory-5aa4cc83.js} +1 -1
  13. package/dist/cjs/{effect-37695d3d.js → effect-98e88068.js} +2 -8
  14. package/dist/cjs/{element-appender-slimmer-4a26ecb2.js → element-appender-slimmer-5b1d8ffb.js} +13 -8
  15. package/dist/cjs/{event-emit-slimmer-8247249c.js → event-emit-slimmer-36036ef7.js} +15 -4
  16. package/dist/cjs/{form-field-controller-slimmer-4b0af5bc.js → form-field-controller-slimmer-01c01946.js} +9 -7
  17. package/dist/cjs/{image-annotation-action-9c2b9c8e.js → image-annotation-action-617bbb13.js} +19 -18
  18. package/dist/cjs/{index-09acd3c9.js → index-7700600c.js} +9 -0
  19. package/dist/cjs/{index-c4dec3aa.js → index-ebb1bb17.js} +3 -3
  20. package/dist/cjs/index.cjs.js +21 -20
  21. package/dist/cjs/{inject-keyboard-manager-b301e887.js → inject-keyboard-manager-dd628ccc.js} +1 -1
  22. package/dist/cjs/{internal-vega-event-manager-c9948b59.js → internal-vega-event-manager-e98944ac.js} +8 -1
  23. package/dist/cjs/{keyboard-manager-2ccf4b16.js → keyboard-manager-8c74eeb9.js} +3 -1
  24. package/dist/cjs/{keyboard-manager-slimmer-900cf2f5.js → keyboard-manager-slimmer-eb364bee.js} +1 -1
  25. package/dist/cjs/{legend-input-processor-8bcce3bf.js → legend-input-processor-b1f323fa.js} +2 -0
  26. package/dist/cjs/loader.cjs.js +15 -14
  27. package/dist/cjs/{page-resize-observer-slimmer-44e08878.js → page-resize-observer-slimmer-efa79728.js} +1 -0
  28. package/dist/cjs/{public-rules-10ec636d.js → public-rules-a3b7e267.js} +8 -7
  29. package/dist/cjs/{responsive-format-facade-263d49f6.js → responsive-format-facade-6b81192d.js} +6 -6
  30. package/dist/cjs/{rich-text-editor-required-rule-5faded94.js → rich-text-editor-required-rule-e9c7c379.js} +1 -1
  31. package/dist/cjs/selection-controller-1d7c0999.js +762 -0
  32. package/dist/cjs/{string-input-formatter-slimmer-50322824.js → string-input-formatter-slimmer-a5feb2ed.js} +3 -3
  33. package/dist/cjs/{style-formatter-ae0ef7fc.js → style-formatter-497d0fa4.js} +1 -1
  34. package/dist/cjs/{sub-state-notify-slimmer-7f437b19.js → sub-state-notify-slimmer-f68fbf29.js} +2 -2
  35. package/dist/cjs/{sub-state-observer-slimmer-e90362cd.js → sub-state-observer-slimmer-e06cdf7e.js} +3 -3
  36. package/dist/cjs/{translation-212b1875.js → translation-e5003a00.js} +5 -0
  37. package/dist/cjs/{translation-slimmer-d1512c6d.js → translation-slimmer-127a0f83.js} +1 -1
  38. package/dist/cjs/{ui-13b42af0.js → ui-6c069604.js} +2 -0
  39. package/dist/cjs/vega-accordion.cjs.entry.js +17 -16
  40. package/dist/cjs/vega-app-footer.cjs.entry.js +3 -3
  41. package/dist/cjs/vega-app-header-button.cjs.entry.js +18 -17
  42. package/dist/cjs/vega-backdrop.cjs.entry.js +3 -3
  43. package/dist/cjs/vega-banner.cjs.entry.js +7 -7
  44. package/dist/cjs/vega-bar-chart.cjs.entry.js +3 -3
  45. package/dist/cjs/vega-box.cjs.entry.js +18 -15
  46. package/dist/cjs/vega-brand-logo.cjs.entry.js +3 -3
  47. package/dist/cjs/vega-breadcrumb.cjs.entry.js +8 -8
  48. package/dist/cjs/vega-button-circle.cjs.entry.js +18 -17
  49. package/dist/cjs/vega-button-group_2.cjs.entry.js +11 -11
  50. package/dist/cjs/vega-button-link.cjs.entry.js +8 -8
  51. package/dist/cjs/vega-button.cjs.entry.js +17 -16
  52. package/dist/cjs/vega-calendar_3.cjs.entry.js +14 -14
  53. package/dist/cjs/vega-card.cjs.entry.js +15 -14
  54. package/dist/cjs/vega-carousel.cjs.entry.js +20 -16
  55. package/dist/cjs/vega-checkbox_2.cjs.entry.js +14 -14
  56. package/dist/cjs/vega-chip.cjs.entry.js +18 -17
  57. package/dist/cjs/vega-code-block.cjs.entry.js +4160 -0
  58. package/dist/cjs/vega-color-picker.cjs.entry.js +12 -12
  59. package/dist/cjs/vega-combo-box.cjs.entry.js +15 -15
  60. package/dist/cjs/vega-counter-badge.cjs.entry.js +2 -2
  61. package/dist/cjs/vega-date-picker_2.cjs.entry.js +34 -24
  62. package/dist/cjs/vega-dialog_2.cjs.entry.js +25 -18
  63. package/dist/cjs/vega-divider.cjs.entry.js +15 -14
  64. package/dist/cjs/vega-dropdown_5.cjs.entry.js +25 -24
  65. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  66. package/dist/cjs/vega-field-error.cjs.entry.js +2 -2
  67. package/dist/cjs/vega-field-label.cjs.entry.js +7 -7
  68. package/dist/cjs/vega-file-uploader.cjs.entry.js +13 -13
  69. package/dist/cjs/vega-flag-icon.cjs.entry.js +15 -14
  70. package/dist/cjs/vega-flex.cjs.entry.js +16 -15
  71. package/dist/cjs/vega-font.cjs.entry.js +15 -14
  72. package/dist/cjs/vega-form.cjs.entry.js +15 -15
  73. package/dist/cjs/vega-grid.cjs.entry.js +15 -14
  74. package/dist/cjs/vega-hint.cjs.entry.js +2 -2
  75. package/dist/cjs/vega-icon.cjs.entry.js +19 -15
  76. package/dist/cjs/vega-image-uploader.cjs.entry.js +22 -19
  77. package/dist/cjs/vega-input-credit-card.cjs.entry.js +13 -13
  78. package/dist/cjs/vega-input-numeric.cjs.entry.js +16 -16
  79. package/dist/cjs/vega-input-phone-number.cjs.entry.js +18 -17
  80. package/dist/cjs/vega-input-range.cjs.entry.js +16 -16
  81. package/dist/cjs/vega-input-select.cjs.entry.js +25 -24
  82. package/dist/cjs/vega-input.cjs.entry.js +35 -17
  83. package/dist/cjs/{vega-internal-event-id-bfea9b93.js → vega-internal-event-id-6cdc95fe.js} +4 -0
  84. package/dist/cjs/vega-item-toggle.cjs.entry.js +7 -7
  85. package/dist/cjs/vega-left-nav_5.cjs.entry.js +26 -20
  86. package/dist/cjs/vega-line-chart.cjs.entry.js +4 -4
  87. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +15 -13
  88. package/dist/cjs/vega-page-notification_2.cjs.entry.js +5 -5
  89. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +8 -8
  90. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +8 -8
  91. package/dist/cjs/vega-pagination.cjs.entry.js +18 -17
  92. package/dist/cjs/vega-pie-chart.cjs.entry.js +3 -3
  93. package/dist/cjs/vega-popover_2.cjs.entry.js +19 -18
  94. package/dist/cjs/vega-progress-tracker.cjs.entry.js +7 -7
  95. package/dist/cjs/vega-radio_2.cjs.entry.js +16 -16
  96. package/dist/cjs/vega-rich-text-content.cjs.entry.js +189 -32
  97. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +814 -1181
  98. package/dist/cjs/vega-section-title.cjs.entry.js +2 -2
  99. package/dist/cjs/vega-segment-control.cjs.entry.js +8 -8
  100. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +20 -19
  101. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +15 -15
  102. package/dist/cjs/vega-sidenav_3.cjs.entry.js +23 -18
  103. package/dist/cjs/vega-signature-capture.cjs.entry.js +21 -19
  104. package/dist/cjs/{vega-skeleton-loader-controller-db868c98.js → vega-skeleton-loader-controller-ae2ab090.js} +15 -5
  105. package/dist/cjs/vega-skeleton.cjs.entry.js +2 -2
  106. package/dist/cjs/vega-slot-container.cjs.entry.js +1 -1
  107. package/dist/cjs/vega-stepper.cjs.entry.js +13 -13
  108. package/dist/cjs/vega-tab-group_2.cjs.entry.js +9 -9
  109. package/dist/cjs/vega-table_8.cjs.entry.js +377 -286
  110. package/dist/cjs/vega-text.cjs.entry.js +5 -3
  111. package/dist/cjs/vega-textarea.cjs.entry.js +13 -13
  112. package/dist/cjs/vega-time-picker_2.cjs.entry.js +25 -24
  113. package/dist/cjs/vega-toggle-switch.cjs.entry.js +12 -12
  114. package/dist/cjs/vega-tooltip_2.cjs.entry.js +18 -17
  115. package/dist/cjs/vega.cjs.js +15 -14
  116. package/dist/cjs/{wait-for-vega-handler-0a0738ac.js → wait-for-vega-handler-4491efc9.js} +3 -1
  117. package/dist/cjs/{y-axis-input-processor-e371c142.js → y-axis-input-processor-19a07af5.js} +1 -1
  118. package/dist/collection/collection-manifest.json +7 -1
  119. package/dist/collection/components/vega-box/slimmers/controllers/vega-box-responsive-style-controller.js +1 -0
  120. package/dist/collection/components/vega-box/slimmers/controllers/vega-box-state-styles-controller.js +1 -0
  121. package/dist/collection/components/vega-carousel/vega-carousel.js +3 -0
  122. package/dist/collection/components/vega-code-block/assets/copy.js +3 -0
  123. package/dist/collection/components/vega-code-block/slimmers/controllers/code-block-range.js +129 -0
  124. package/dist/collection/components/vega-code-block/slimmers/controllers/code-highlight-parser.abstract.js +87 -0
  125. package/dist/collection/components/vega-code-block/slimmers/controllers/default-code-highlight-parse-controller.js +34 -0
  126. package/dist/collection/components/vega-code-block/slimmers/controllers/insert-composition-text-controller.js +100 -0
  127. package/dist/collection/components/vega-code-block/slimmers/controllers/prism-code-highlight-parse-controller.js +86 -0
  128. package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-content-parse-controller.js +50 -0
  129. package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-focus-controller.js +57 -0
  130. package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-input-controller.js +240 -0
  131. package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-selection-controller.js +133 -0
  132. package/dist/collection/components/vega-code-block/slimmers/controllers/vega-code-block-value-controller.js +44 -0
  133. package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-content-renderer.js +117 -0
  134. package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-copy-button-renderer.js +67 -0
  135. package/dist/collection/components/vega-code-block/slimmers/renderers/vega-code-block-renderer.js +122 -0
  136. package/dist/collection/components/vega-code-block/test/code-block-range.test.js +81 -0
  137. package/dist/collection/components/vega-code-block/types.js +10 -0
  138. package/dist/collection/components/vega-code-block/vega-code-block.css +160 -0
  139. package/dist/collection/components/vega-code-block/vega-code-block.js +404 -0
  140. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-month-year-dropdown-renderer.js +5 -0
  141. package/dist/collection/components/vega-date-picker/slimmers/renderers/vega-date-picker-calendar-renderer.js +4 -0
  142. package/dist/collection/components/vega-icon/vega-icon.js +4 -1
  143. package/dist/collection/components/vega-image-uploader/slimmers/controllers/vega-image-uploader-preview-controller.js +2 -0
  144. package/dist/collection/components/vega-input/slimmers/controllers/vega-input-compact-width-controller.js +1 -0
  145. package/dist/collection/components/vega-input/vega-input.css +12 -2
  146. package/dist/collection/components/vega-input/vega-input.js +27 -3
  147. package/dist/collection/components/vega-input-range/slimmers/renderers/vega-input-range-clear-icon-renderer.js +1 -1
  148. package/dist/collection/components/vega-input-range/vega-input-range.css +10 -0
  149. package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.js +5 -5
  150. package/dist/collection/components/vega-loader-wrapper/slimmers/controllers/manage-vega-loader-wrapper-z-index-controller.js +1 -0
  151. package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-backdrop-controller.js +3 -0
  152. package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.js +2 -0
  153. package/dist/collection/components/vega-modal/slimmers/controllers/vega-nested-modal-controller.js +1 -0
  154. package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-backdrop-controller.js +3 -0
  155. package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.js +2 -0
  156. package/dist/collection/components/vega-rich-text-content/slimmers/renderers/vega-rich-text-content-renderer.js +2 -0
  157. package/dist/collection/components/vega-rich-text-content/vega-rich-text-content.css +7 -0
  158. package/dist/collection/components/vega-rich-text-editor/assets/rectangle-code.js +3 -0
  159. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/apply-annotation-strategies/code-node-set-selection-range-strategy.js +13 -0
  160. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-text-content-strategy.js +3 -1
  161. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-remove-node-strategy.js +1 -1
  162. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-transform-to-code-block-strategy.js +48 -0
  163. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-insert-image-strategy.js +17 -0
  164. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-remove-self-strategy.js +77 -0
  165. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/switch-out-from-code-block-strategy.js +38 -0
  166. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/update-code-block-strategy.js +14 -0
  167. package/dist/collection/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.js +4 -0
  168. package/dist/collection/components/vega-rich-text-editor/dto/actions/remove-code-block-action.js +13 -0
  169. package/dist/collection/components/vega-rich-text-editor/dto/actions/switch-out-from-code-block-action.js +15 -0
  170. package/dist/collection/components/vega-rich-text-editor/dto/actions/transform-to-code-block-action.js +13 -0
  171. package/dist/collection/components/vega-rich-text-editor/dto/actions/update-code-block-action.js +15 -0
  172. package/dist/collection/components/vega-rich-text-editor/dto/blocks/code-block.js +98 -0
  173. package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +5 -0
  174. package/dist/collection/components/vega-rich-text-editor/dto/nodes/code-block-node.js +50 -0
  175. package/dist/collection/components/vega-rich-text-editor/dto/nodes/node.abstract.js +1 -0
  176. package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/code-block-renderer.js +62 -0
  177. package/dist/collection/components/vega-rich-text-editor/dto/renderers/nodes/code-block-node-renderer.js +78 -0
  178. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/delete-selected-nodes-controller.js +19 -4
  179. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.js +4 -0
  180. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.js +54 -0
  181. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.js +70 -0
  182. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-line-break-handler.js +7 -5
  183. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paragraph-handler.js +7 -5
  184. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paste-handler.js +24 -3
  185. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/internal-code-block-selection-controller.js +64 -0
  186. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/selection-controller.js +56 -52
  187. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/user-input-controller.js +21 -8
  188. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.js +5 -0
  189. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bold-toolbar-button-slimmer.js +3 -1
  190. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-numbers-toolbar-button-slimmer.js +3 -1
  191. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-toolbar-button-slimmer.js +3 -1
  192. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/numbers-toolbar-button-slimmer.js +3 -1
  193. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/clear-style-toolbar-button-slimmer.js +3 -1
  194. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/code-block-toolbar-button-slimmer.js +65 -0
  195. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/code-toolbar-button-slimmer.js +3 -1
  196. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/horizontal-alignment/horizontal-alignment-toolbar-button-slimmer.js +6 -0
  197. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/italic-toolbar-button-slimmer.js +3 -1
  198. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/less-indent-toolbar-button-slimmer.js +1 -1
  199. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/more-indent-toolbar-button-slimmer.js +1 -1
  200. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/strikethrough-toolbar-button-slimmer.js +3 -1
  201. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-color-toolbar-button-slimmer.js +3 -1
  202. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-styles-toolbar-button-slimmer.js +3 -1
  203. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/underline-toolbar-button-slimmer.js +3 -1
  204. package/dist/collection/components/vega-rich-text-editor/test/dto/action-handle-strategies/code-block-strategy-registry.test.js +21 -0
  205. package/dist/collection/components/vega-rich-text-editor/test/dto/action-handle-strategies/content-state-strategy-registry.test.js +2 -0
  206. package/dist/collection/components/vega-rich-text-editor/test/dto/blocks/code-block.test.js +54 -0
  207. package/dist/collection/components/vega-rich-text-editor/test/e2e-utils.js +5 -0
  208. package/dist/collection/components/vega-rich-text-editor/test/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.test.js +32 -0
  209. package/dist/collection/components/vega-rich-text-editor/test/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.test.js +61 -0
  210. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +10 -0
  211. package/dist/collection/components/vega-sidenav/slimmers/controllers/vega-sidenav-backdrop-controller.js +3 -0
  212. package/dist/collection/components/vega-sidenav/slimmers/controllers/vega-sidenav-open-status-controller.js +1 -0
  213. package/dist/collection/components/vega-signature-capture/slimmers/written-mode/controllers/written-mode-svg-controller.js +1 -0
  214. package/dist/collection/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-sort-config-controller.js +92 -0
  215. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +6 -0
  216. package/dist/collection/components/vega-text/slimmers/renderers/vega-text-tooltip-renderer.js +2 -0
  217. package/dist/collection/components/vega-time-picker/slimmers/renderers/vega-time-picker-range-clear-button-renderer.js +1 -1
  218. package/dist/collection/components/vega-time-picker/vega-time-picker.css +10 -0
  219. package/dist/collection/global/scripts/before-vega-load.js +3 -0
  220. package/dist/collection/helpers/chart/graph-context-factory.js +2 -0
  221. package/dist/collection/helpers/common/wait-for-vega-handler.js +3 -1
  222. package/dist/collection/helpers/dialog/vega-dialog-controller.js +2 -0
  223. package/dist/collection/helpers/event-manager/event-delegated/vega-button-click-strategy.js +1 -0
  224. package/dist/collection/helpers/event-manager/event-delegated/vega-checkbox-change-strategy.js +1 -0
  225. package/dist/collection/helpers/event-manager/event-delegated/vega-input-select-change-strategy.js +1 -0
  226. package/dist/collection/helpers/event-manager/event-delegated/vega-input-strategy.js +1 -0
  227. package/dist/collection/helpers/event-manager/event-delegated/vega-radio-change-strategy.js +1 -0
  228. package/dist/collection/helpers/event-manager/event-delegated/vega-textarea-change-strategy.js +1 -0
  229. package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +2 -1
  230. package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +2 -0
  231. package/dist/collection/helpers/event-manager/slimmers/event-emit-slimmer.js +3 -1
  232. package/dist/collection/helpers/event-manager/test/event-emit-slimmer.test.js +11 -1
  233. package/dist/collection/helpers/keyboard/keyboard-manager.js +2 -0
  234. package/dist/collection/helpers/notify/vega-notify-controller.js +6 -1
  235. package/dist/collection/helpers/skeleton-loader/vega-skeleton-loader-controller.js +3 -0
  236. package/dist/collection/helpers/slimmers/auto-run-when-re-render-task-queue-slimmer.abstract.js +47 -0
  237. package/dist/collection/helpers/slimmers/component-global-style-slimmer.js +3 -0
  238. package/dist/collection/helpers/slimmers/element-appender/body-positioned-wrapper/default-wrapper.js +1 -0
  239. package/dist/collection/helpers/slimmers/element-appender/body-positioned-wrapper/position-relative-to-wrapper.js +2 -0
  240. package/dist/collection/helpers/slimmers/element-appender/element-appender-slimmer.js +2 -0
  241. package/dist/collection/helpers/slimmers/field-error-ui-controller-strategies/sibling-container-error-label-container-retrieval-strategy.js +1 -0
  242. package/dist/collection/helpers/slimmers/field-error-ui-controller-strategies/sibling-container-self-retrieval-strategy.js +1 -0
  243. package/dist/collection/helpers/slimmers/page-resize-observer-slimmer.js +1 -0
  244. package/dist/collection/helpers/slimmers/test/auto-run-when-re-render-task-queue-slimmer.test.js +46 -0
  245. package/dist/collection/helpers/theme/controllers/color-schema-overriding-controller.js +2 -0
  246. package/dist/collection/helpers/theme/controllers/style-controller.abstract.js +3 -0
  247. package/dist/collection/helpers/theme/internal-theme-manager.js +3 -0
  248. package/dist/collection/helpers/translation/locales/en.js +5 -0
  249. package/dist/collection/helpers/translation/tests/internal-translation-controller.test.js +5 -0
  250. package/dist/collection/helpers/ui/element-appender.js +1 -1
  251. package/dist/collection/polyfill/shadow-selection/shadow-selection-polyfill.js +3 -1
  252. package/dist/collection/utils/component.js +1 -0
  253. package/dist/collection/utils/e2e-utils.js +3 -0
  254. package/dist/collection/utils/effect.js +2 -0
  255. package/dist/collection/utils/safe-document.js +9 -0
  256. package/dist/collection/utils/test/safe-document.test.js +13 -0
  257. package/dist/collection/utils/test-utils.js +1 -0
  258. package/dist/collection/utils/ui.js +3 -0
  259. package/dist/esm/{app-globals-1f8c30e9.js → app-globals-d96d623d.js} +11 -8
  260. package/dist/esm/{child-nodes-event-prevent-slimmer-5d45361e.js → child-nodes-event-prevent-slimmer-2b975cbf.js} +1 -1
  261. package/dist/esm/{child-nodes-notify-observer-slimmer-ddaad39a.js → child-nodes-notify-observer-slimmer-eeed5986.js} +1 -1
  262. package/dist/esm/{content-state-dbc9f635.js → code-block-ef2f04ca.js} +195 -970
  263. package/dist/esm/{component-cae24190.js → component-7d906393.js} +1 -0
  264. package/dist/esm/{component-global-style-slimmer-000e0c11.js → component-global-style-slimmer-dad40b64.js} +3 -0
  265. package/dist/esm/content-state-69d29a07.js +1140 -0
  266. package/dist/esm/{dark-mode-style-controller-2ada8e22.js → dark-mode-style-controller-ea798fc8.js} +8 -0
  267. package/dist/esm/{design-token-0699f0ca.js → design-token-2060cd0d.js} +1 -1
  268. package/dist/esm/{dom-node-subject-factory-f77cf9cc.js → dom-node-subject-factory-6374611f.js} +2 -2
  269. package/dist/esm/{dom-node-subject-observer-factory-715dccf9.js → dom-node-subject-observer-factory-c345ca2e.js} +1 -1
  270. package/dist/esm/{effect-8efd2c3c.js → effect-f50e072d.js} +2 -8
  271. package/dist/esm/{element-appender-slimmer-96cb54e2.js → element-appender-slimmer-64a77b7f.js} +13 -8
  272. package/dist/esm/{event-emit-slimmer-b7d511f6.js → event-emit-slimmer-7428cc01.js} +15 -4
  273. package/dist/esm/{form-field-controller-slimmer-89a72ee7.js → form-field-controller-slimmer-87d80e46.js} +9 -7
  274. package/dist/esm/{image-annotation-action-1aa938ab.js → image-annotation-action-1497f70e.js} +7 -6
  275. package/dist/esm/{index-187f71d1.js → index-d0a47531.js} +9 -0
  276. package/dist/esm/{index-4aa167d6.js → index-f5d2fe61.js} +3 -3
  277. package/dist/esm/index.js +15 -14
  278. package/dist/esm/{inject-keyboard-manager-f513be4a.js → inject-keyboard-manager-e39c0fd9.js} +1 -1
  279. package/dist/esm/{internal-vega-event-manager-87dc436c.js → internal-vega-event-manager-d80c53c5.js} +8 -1
  280. package/dist/esm/{keyboard-manager-262be5ce.js → keyboard-manager-9564ad83.js} +3 -1
  281. package/dist/esm/{keyboard-manager-slimmer-42bf9773.js → keyboard-manager-slimmer-2218e6ba.js} +1 -1
  282. package/dist/esm/{legend-input-processor-8f76ce8a.js → legend-input-processor-1d266967.js} +2 -0
  283. package/dist/esm/loader.js +15 -14
  284. package/dist/esm/{page-resize-observer-slimmer-15a84d26.js → page-resize-observer-slimmer-c51f1912.js} +1 -0
  285. package/dist/esm/{public-rules-5cf6aa95.js → public-rules-3436034b.js} +8 -7
  286. package/dist/esm/{responsive-format-facade-42f3fcfa.js → responsive-format-facade-8c0ce819.js} +6 -6
  287. package/dist/esm/{rich-text-editor-required-rule-6a7cd3ee.js → rich-text-editor-required-rule-cc5b6a2d.js} +1 -1
  288. package/dist/esm/selection-controller-3d6dfc87.js +757 -0
  289. package/dist/esm/{string-input-formatter-slimmer-c61f82d6.js → string-input-formatter-slimmer-e53b6412.js} +3 -3
  290. package/dist/esm/{style-formatter-cb00c709.js → style-formatter-1eca1299.js} +1 -1
  291. package/dist/esm/{sub-state-notify-slimmer-4e3cf09d.js → sub-state-notify-slimmer-b6c8051c.js} +2 -2
  292. package/dist/esm/{sub-state-observer-slimmer-be7a6ce3.js → sub-state-observer-slimmer-93eeb87d.js} +3 -3
  293. package/dist/esm/{translation-cf7f020a.js → translation-71e0711d.js} +5 -0
  294. package/dist/esm/{translation-slimmer-88966d5c.js → translation-slimmer-e6b130bf.js} +1 -1
  295. package/dist/esm/{ui-ed1283bb.js → ui-7d177fb0.js} +2 -0
  296. package/dist/esm/vega-accordion.entry.js +17 -16
  297. package/dist/esm/vega-app-footer.entry.js +3 -3
  298. package/dist/esm/vega-app-header-button.entry.js +18 -17
  299. package/dist/esm/vega-backdrop.entry.js +3 -3
  300. package/dist/esm/vega-banner.entry.js +7 -7
  301. package/dist/esm/vega-bar-chart.entry.js +3 -3
  302. package/dist/esm/vega-box.entry.js +18 -15
  303. package/dist/esm/vega-brand-logo.entry.js +3 -3
  304. package/dist/esm/vega-breadcrumb.entry.js +8 -8
  305. package/dist/esm/vega-button-circle.entry.js +18 -17
  306. package/dist/esm/vega-button-group_2.entry.js +11 -11
  307. package/dist/esm/vega-button-link.entry.js +8 -8
  308. package/dist/esm/vega-button.entry.js +17 -16
  309. package/dist/esm/vega-calendar_3.entry.js +14 -14
  310. package/dist/esm/vega-card.entry.js +15 -14
  311. package/dist/esm/vega-carousel.entry.js +20 -16
  312. package/dist/esm/vega-checkbox_2.entry.js +14 -14
  313. package/dist/esm/vega-chip.entry.js +18 -17
  314. package/dist/esm/vega-code-block.entry.js +4156 -0
  315. package/dist/esm/vega-color-picker.entry.js +12 -12
  316. package/dist/esm/vega-combo-box.entry.js +15 -15
  317. package/dist/esm/vega-counter-badge.entry.js +2 -2
  318. package/dist/esm/vega-date-picker_2.entry.js +34 -24
  319. package/dist/esm/vega-dialog_2.entry.js +25 -18
  320. package/dist/esm/vega-divider.entry.js +15 -14
  321. package/dist/esm/vega-dropdown_5.entry.js +25 -24
  322. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  323. package/dist/esm/vega-field-error.entry.js +2 -2
  324. package/dist/esm/vega-field-label.entry.js +7 -7
  325. package/dist/esm/vega-file-uploader.entry.js +13 -13
  326. package/dist/esm/vega-flag-icon.entry.js +15 -14
  327. package/dist/esm/vega-flex.entry.js +16 -15
  328. package/dist/esm/vega-font.entry.js +15 -14
  329. package/dist/esm/vega-form.entry.js +15 -15
  330. package/dist/esm/vega-grid.entry.js +15 -14
  331. package/dist/esm/vega-hint.entry.js +2 -2
  332. package/dist/esm/vega-icon.entry.js +19 -15
  333. package/dist/esm/vega-image-uploader.entry.js +22 -19
  334. package/dist/esm/vega-input-credit-card.entry.js +13 -13
  335. package/dist/esm/vega-input-numeric.entry.js +16 -16
  336. package/dist/esm/vega-input-phone-number.entry.js +18 -17
  337. package/dist/esm/vega-input-range.entry.js +16 -16
  338. package/dist/esm/vega-input-select.entry.js +25 -24
  339. package/dist/esm/vega-input.entry.js +35 -17
  340. package/dist/esm/{vega-internal-event-id-85ad403f.js → vega-internal-event-id-178b2743.js} +3 -1
  341. package/dist/esm/vega-item-toggle.entry.js +7 -7
  342. package/dist/esm/vega-left-nav_5.entry.js +26 -20
  343. package/dist/esm/vega-line-chart.entry.js +4 -4
  344. package/dist/esm/vega-loader-wrapper_2.entry.js +15 -13
  345. package/dist/esm/vega-page-notification_2.entry.js +5 -5
  346. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +8 -8
  347. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +8 -8
  348. package/dist/esm/vega-pagination.entry.js +18 -17
  349. package/dist/esm/vega-pie-chart.entry.js +3 -3
  350. package/dist/esm/vega-popover_2.entry.js +19 -18
  351. package/dist/esm/vega-progress-tracker.entry.js +7 -7
  352. package/dist/esm/vega-radio_2.entry.js +16 -16
  353. package/dist/esm/vega-rich-text-content.entry.js +170 -13
  354. package/dist/esm/vega-rich-text-editor_4.entry.js +679 -1046
  355. package/dist/esm/vega-section-title.entry.js +2 -2
  356. package/dist/esm/vega-segment-control.entry.js +8 -8
  357. package/dist/esm/vega-selection-chip_2.entry.js +20 -19
  358. package/dist/esm/vega-selection-tile_2.entry.js +15 -15
  359. package/dist/esm/vega-sidenav_3.entry.js +23 -18
  360. package/dist/esm/vega-signature-capture.entry.js +21 -19
  361. package/dist/esm/{vega-skeleton-loader-controller-c2a8bd27.js → vega-skeleton-loader-controller-06f48dd2.js} +15 -5
  362. package/dist/esm/vega-skeleton.entry.js +2 -2
  363. package/dist/esm/vega-slot-container.entry.js +1 -1
  364. package/dist/esm/vega-stepper.entry.js +13 -13
  365. package/dist/esm/vega-tab-group_2.entry.js +9 -9
  366. package/dist/esm/vega-table_8.entry.js +377 -286
  367. package/dist/esm/vega-text.entry.js +5 -3
  368. package/dist/esm/vega-textarea.entry.js +13 -13
  369. package/dist/esm/vega-time-picker_2.entry.js +25 -24
  370. package/dist/esm/vega-toggle-switch.entry.js +12 -12
  371. package/dist/esm/vega-tooltip_2.entry.js +18 -17
  372. package/dist/esm/vega.js +15 -14
  373. package/dist/esm/{wait-for-vega-handler-b18eb955.js → wait-for-vega-handler-e0a928cd.js} +3 -1
  374. package/dist/esm/{y-axis-input-processor-e090b01c.js → y-axis-input-processor-95995d34.js} +1 -1
  375. package/dist/types/components/vega-code-block/assets/copy.d.ts +3 -0
  376. package/dist/types/components/vega-code-block/slimmers/controllers/code-block-range.d.ts +64 -0
  377. package/dist/types/components/vega-code-block/slimmers/controllers/code-highlight-parser.abstract.d.ts +47 -0
  378. package/dist/types/components/vega-code-block/slimmers/controllers/default-code-highlight-parse-controller.d.ts +19 -0
  379. package/dist/types/components/vega-code-block/slimmers/controllers/insert-composition-text-controller.d.ts +50 -0
  380. package/dist/types/components/vega-code-block/slimmers/controllers/prism-code-highlight-parse-controller.d.ts +43 -0
  381. package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-content-parse-controller.d.ts +23 -0
  382. package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-focus-controller.d.ts +21 -0
  383. package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-input-controller.d.ts +92 -0
  384. package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-selection-controller.d.ts +63 -0
  385. package/dist/types/components/vega-code-block/slimmers/controllers/vega-code-block-value-controller.d.ts +21 -0
  386. package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-content-renderer.d.ts +55 -0
  387. package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-copy-button-renderer.d.ts +23 -0
  388. package/dist/types/components/vega-code-block/slimmers/renderers/vega-code-block-renderer.d.ts +50 -0
  389. package/dist/types/components/vega-code-block/test/code-block-range.test.d.ts +1 -0
  390. package/dist/types/components/vega-code-block/types.d.ts +19 -0
  391. package/dist/types/components/vega-code-block/vega-code-block.d.ts +118 -0
  392. package/dist/types/components/vega-input/types.d.ts +2 -0
  393. package/dist/types/components/vega-input/vega-input.d.ts +9 -2
  394. package/dist/types/components/vega-rich-text-editor/assets/rectangle-code.d.ts +3 -0
  395. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/apply-annotation-strategies/code-node-set-selection-range-strategy.d.ts +12 -0
  396. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-node-content-strategy.d.ts +3 -3
  397. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-remove-node-strategy.d.ts +4 -5
  398. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-transform-to-code-block-strategy.d.ts +29 -0
  399. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-insert-image-strategy.d.ts +15 -0
  400. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-remove-self-strategy.d.ts +28 -0
  401. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/switch-out-from-code-block-strategy.d.ts +12 -0
  402. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/update-code-block-strategy.d.ts +12 -0
  403. package/dist/types/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.d.ts +5 -1
  404. package/dist/types/components/vega-rich-text-editor/dto/actions/remove-code-block-action.d.ts +10 -0
  405. package/dist/types/components/vega-rich-text-editor/dto/actions/switch-out-from-code-block-action.d.ts +14 -0
  406. package/dist/types/components/vega-rich-text-editor/dto/actions/transform-to-code-block-action.d.ts +14 -0
  407. package/dist/types/components/vega-rich-text-editor/dto/actions/update-code-block-action.d.ts +14 -0
  408. package/dist/types/components/vega-rich-text-editor/dto/blocks/code-block.d.ts +52 -0
  409. package/dist/types/components/vega-rich-text-editor/dto/nodes/code-block-node.d.ts +41 -0
  410. package/dist/types/components/vega-rich-text-editor/dto/nodes/node.abstract.d.ts +2 -1
  411. package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/code-block-renderer.d.ts +39 -0
  412. package/dist/types/components/vega-rich-text-editor/dto/renderers/nodes/code-block-node-renderer.d.ts +37 -0
  413. package/dist/types/components/vega-rich-text-editor/interface.d.ts +16 -4
  414. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.d.ts +31 -0
  415. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.d.ts +42 -0
  416. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/input-event-handler/insert-paste-handler.d.ts +7 -0
  417. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/internal-code-block-selection-controller.d.ts +45 -0
  418. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/selection-controller.d.ts +16 -23
  419. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/user-input-controller.d.ts +6 -4
  420. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.d.ts +1 -0
  421. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/code-block-toolbar-button-slimmer.d.ts +22 -0
  422. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/horizontal-alignment/horizontal-alignment-toolbar-button-slimmer.d.ts +1 -0
  423. package/dist/types/components/vega-rich-text-editor/test/dto/action-handle-strategies/code-block-strategy-registry.test.d.ts +1 -0
  424. package/dist/types/components/vega-rich-text-editor/test/dto/blocks/code-block.test.d.ts +1 -0
  425. package/dist/types/components/vega-rich-text-editor/test/element-to-dto-strategy/jira-code-to-rte-code-block-strategy.test.d.ts +1 -0
  426. package/dist/types/components/vega-rich-text-editor/test/element-to-dto-strategy/vega-code-block-to-rte-code-block-strategy.test.d.ts +1 -0
  427. package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor.d.ts +4 -0
  428. package/dist/types/components/vega-table/interface.d.ts +3 -0
  429. package/dist/types/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-sort-config-controller.d.ts +42 -0
  430. package/dist/types/components/vega-table/vega-table-head-cell/vega-table-head-cell.d.ts +2 -0
  431. package/dist/types/components.d.ts +98 -3
  432. package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +2 -0
  433. package/dist/types/helpers/slimmers/auto-run-when-re-render-task-queue-slimmer.abstract.d.ts +20 -0
  434. package/dist/types/helpers/slimmers/test/auto-run-when-re-render-task-queue-slimmer.test.d.ts +1 -0
  435. package/dist/types/helpers/translation/interface.d.ts +6 -1
  436. package/dist/types/polyfill/shadow-selection/shadow-selection-polyfill.d.ts +26 -0
  437. package/dist/types/types/components.type.d.ts +2 -1
  438. package/dist/types/utils/safe-document.d.ts +7 -0
  439. package/dist/types/utils/test/safe-document.test.d.ts +1 -0
  440. package/dist/vega/index.esm.js +1 -1
  441. package/dist/vega/{p-a46bc9f1.entry.js → p-06cd4a19.entry.js} +1 -1
  442. package/dist/vega/p-06fb002a.js +1 -0
  443. package/dist/vega/{p-b351ace3.entry.js → p-07cdaf74.entry.js} +1 -1
  444. package/dist/vega/{p-b847a143.entry.js → p-07e40eea.entry.js} +1 -1
  445. package/dist/vega/{p-913eb7f9.entry.js → p-0ce88865.entry.js} +1 -1
  446. package/dist/vega/{p-ec1f2d21.entry.js → p-1071f790.entry.js} +1 -1
  447. package/dist/vega/{p-45e28b9b.js → p-111d41fe.js} +1 -1
  448. package/dist/vega/p-12929d20.entry.js +1 -0
  449. package/dist/vega/{p-72ecfd40.js → p-138fcf6e.js} +1 -1
  450. package/dist/vega/{p-a01f149d.entry.js → p-151dec6a.entry.js} +1 -1
  451. package/dist/vega/{p-06adb37e.entry.js → p-1b81fc7a.entry.js} +1 -1
  452. package/dist/vega/{p-56a0b13d.js → p-1df029c2.js} +1 -1
  453. package/dist/vega/p-21d26bb4.js +2 -0
  454. package/dist/vega/p-21d4f12e.entry.js +1 -0
  455. package/dist/vega/{p-4a32a6c0.entry.js → p-21d5656d.entry.js} +1 -1
  456. package/dist/vega/{p-a7dcb2a3.js → p-21e180f2.js} +1 -1
  457. package/dist/vega/{p-0079088b.entry.js → p-2329cb73.entry.js} +1 -1
  458. package/dist/vega/{p-8c388b58.entry.js → p-29fe94b6.entry.js} +1 -1
  459. package/dist/vega/p-2f5d9aab.js +1 -0
  460. package/dist/vega/p-30c363d8.entry.js +9 -0
  461. package/dist/vega/{p-5e34ea25.entry.js → p-32a24ef1.entry.js} +1 -1
  462. package/dist/vega/p-33bd7e31.js +1 -0
  463. package/dist/vega/{p-46714da3.entry.js → p-36827489.entry.js} +1 -1
  464. package/dist/vega/{p-81fbfb6d.entry.js → p-388abe56.entry.js} +1 -1
  465. package/dist/vega/p-3b34389d.js +1 -0
  466. package/dist/vega/p-3eb2d433.js +1 -0
  467. package/dist/vega/{p-2da83c2a.js → p-3fa7d356.js} +1 -1
  468. package/dist/vega/p-425ba7d6.js +1 -0
  469. package/dist/vega/p-447a2b18.entry.js +1 -0
  470. package/dist/vega/{p-8d283666.js → p-4ab3df00.js} +1 -1
  471. package/dist/vega/{p-b649e86e.entry.js → p-4bca12ee.entry.js} +1 -1
  472. package/dist/vega/{p-b2bca332.entry.js → p-5016b57e.entry.js} +1 -1
  473. package/dist/vega/p-52905c68.entry.js +1 -0
  474. package/dist/vega/p-52bdeea0.entry.js +1 -0
  475. package/dist/vega/p-53803447.entry.js +1 -0
  476. package/dist/vega/{p-54f17c2e.entry.js → p-53815555.entry.js} +1 -1
  477. package/dist/vega/{p-d7937711.js → p-55563f5f.js} +1 -1
  478. package/dist/vega/{p-48517a5d.entry.js → p-578ac47f.entry.js} +1 -1
  479. package/dist/vega/p-586139ce.entry.js +1 -0
  480. package/dist/vega/p-597732e9.entry.js +1 -0
  481. package/dist/vega/{p-0969877b.entry.js → p-5c9efff8.entry.js} +1 -1
  482. package/dist/vega/{p-5e3a15a1.js → p-5e530257.js} +1 -1
  483. package/dist/vega/p-5f377954.js +1 -1
  484. package/dist/vega/p-60164904.entry.js +1 -0
  485. package/dist/vega/p-613ee009.js +1 -0
  486. package/dist/vega/p-61b72038.entry.js +1 -0
  487. package/dist/vega/p-642da014.entry.js +1 -0
  488. package/dist/vega/{p-9803042f.entry.js → p-647734d1.entry.js} +1 -1
  489. package/dist/vega/{p-cd205d96.js → p-65cca90f.js} +1 -1
  490. package/dist/vega/{p-6586e2a2.entry.js → p-66145767.entry.js} +1 -1
  491. package/dist/vega/p-6681efd5.js +1 -0
  492. package/dist/vega/{p-45f696b4.js → p-6b7dca3e.js} +1 -1
  493. package/dist/vega/{p-5160a6b9.entry.js → p-6ceb2d26.entry.js} +1 -1
  494. package/dist/vega/{p-6f81fe1e.js → p-6e01f0a2.js} +1 -1
  495. package/dist/vega/p-6f3dd430.entry.js +1 -0
  496. package/dist/vega/p-71d897e5.entry.js +1 -0
  497. package/dist/vega/{p-8ba43640.entry.js → p-72a4edf2.entry.js} +1 -1
  498. package/dist/vega/{p-bcb10ae3.entry.js → p-7503fe08.entry.js} +1 -1
  499. package/dist/vega/p-7add21f8.entry.js +1 -0
  500. package/dist/vega/{p-bfb344e1.entry.js → p-7df1ad72.entry.js} +1 -1
  501. package/dist/vega/{p-aea89be5.entry.js → p-7e70938a.entry.js} +1 -1
  502. package/dist/vega/{p-5064a804.js → p-864de9a1.js} +1 -1
  503. package/dist/vega/{p-10a40dfb.entry.js → p-86713a15.entry.js} +1 -1
  504. package/dist/vega/p-8a0d7805.entry.js +1 -0
  505. package/dist/vega/{p-89ab72e3.js → p-8bdc9e75.js} +1 -1
  506. package/dist/vega/{p-6cabdb36.js → p-8e31e7ea.js} +1 -1
  507. package/dist/vega/p-901b20d6.entry.js +1 -0
  508. package/dist/vega/p-90954fe4.entry.js +1 -0
  509. package/dist/vega/{p-6d7d923b.js → p-9c0cda62.js} +1 -1
  510. package/dist/vega/p-9d3292b7.entry.js +1 -0
  511. package/dist/vega/p-9eab97ee.entry.js +1 -0
  512. package/dist/vega/p-a0bd5bd7.entry.js +1 -0
  513. package/dist/vega/{p-54add0d2.js → p-a0dab2d0.js} +1 -1
  514. package/dist/vega/{p-83ef9e7d.entry.js → p-a1fbf49b.entry.js} +1 -1
  515. package/dist/vega/{p-d0007822.entry.js → p-aab6f547.entry.js} +1 -1
  516. package/dist/vega/p-b264d92e.entry.js +1 -0
  517. package/dist/vega/p-b51fa6ac.entry.js +1 -0
  518. package/dist/vega/p-b7594b78.entry.js +1 -0
  519. package/dist/vega/{p-6a830bc5.entry.js → p-c192c2d2.entry.js} +1 -1
  520. package/dist/vega/p-c4447540.entry.js +1 -0
  521. package/dist/vega/p-c8023434.entry.js +1 -0
  522. package/dist/vega/p-c91190df.entry.js +1 -0
  523. package/dist/vega/{p-647025dd.entry.js → p-cada532e.entry.js} +1 -1
  524. package/dist/vega/p-d0f0a908.entry.js +1 -0
  525. package/dist/vega/{p-02d7d948.entry.js → p-d53b262c.entry.js} +1 -1
  526. package/dist/vega/p-d64b20c2.js +1 -0
  527. package/dist/vega/{p-a5c39ba2.entry.js → p-d9cb6ec4.entry.js} +1 -1
  528. package/dist/vega/p-e16e23b7.entry.js +1 -0
  529. package/dist/vega/{p-1971d980.entry.js → p-e37ac14f.entry.js} +1 -1
  530. package/dist/vega/p-e5f1fd0b.entry.js +1 -0
  531. package/dist/vega/p-e7b00bf0.js +1 -0
  532. package/dist/vega/{p-147e3cbd.entry.js → p-e81b672b.entry.js} +1 -1
  533. package/dist/vega/{p-cfda64fd.entry.js → p-e860318d.entry.js} +1 -1
  534. package/dist/vega/p-ea723616.entry.js +1 -0
  535. package/dist/vega/{p-8ade44bf.js → p-eb832119.js} +1 -1
  536. package/dist/vega/{p-27003a81.entry.js → p-ec7d98f0.entry.js} +1 -1
  537. package/dist/vega/{p-a821bcf3.js → p-eea36d3c.js} +1 -1
  538. package/dist/vega/{p-252e42c7.entry.js → p-f0f787a2.entry.js} +1 -1
  539. package/dist/vega/p-f2f31686.entry.js +1 -0
  540. package/dist/vega/{p-27e56c67.entry.js → p-f41ae5e0.entry.js} +1 -1
  541. package/dist/vega/p-f4a13f3f.js +1 -0
  542. package/dist/vega/p-f9a9fca6.entry.js +1 -0
  543. package/dist/vega/{p-2fadef27.entry.js → p-fac5990f.entry.js} +1 -1
  544. package/dist/vega/p-fd0b2509.entry.js +1 -0
  545. package/dist/vega/p-fecb4044.js +1 -0
  546. package/dist/vega/vega.esm.js +1 -1
  547. package/package.json +3 -2
  548. package/dist/vega/p-06c5fe97.entry.js +0 -1
  549. package/dist/vega/p-0ed7a098.entry.js +0 -1
  550. package/dist/vega/p-0f6b3a89.entry.js +0 -1
  551. package/dist/vega/p-136f665b.entry.js +0 -1
  552. package/dist/vega/p-1503f791.js +0 -1
  553. package/dist/vega/p-16fd7c32.js +0 -1
  554. package/dist/vega/p-1a263af1.entry.js +0 -1
  555. package/dist/vega/p-1af4771a.entry.js +0 -1
  556. package/dist/vega/p-1c298d5a.js +0 -2
  557. package/dist/vega/p-1c63afd2.entry.js +0 -1
  558. package/dist/vega/p-1e05b7b4.entry.js +0 -1
  559. package/dist/vega/p-1ea863a6.entry.js +0 -1
  560. package/dist/vega/p-271b30b9.entry.js +0 -1
  561. package/dist/vega/p-2d1d4f33.entry.js +0 -1
  562. package/dist/vega/p-353b3ded.entry.js +0 -1
  563. package/dist/vega/p-44b0a005.js +0 -1
  564. package/dist/vega/p-47ff95ba.entry.js +0 -1
  565. package/dist/vega/p-4e76904e.entry.js +0 -1
  566. package/dist/vega/p-4ec0d36f.entry.js +0 -1
  567. package/dist/vega/p-5c954088.entry.js +0 -1
  568. package/dist/vega/p-61eb7f32.entry.js +0 -1
  569. package/dist/vega/p-646a9198.entry.js +0 -1
  570. package/dist/vega/p-6e898779.js +0 -1
  571. package/dist/vega/p-7088ead9.entry.js +0 -1
  572. package/dist/vega/p-77492977.entry.js +0 -1
  573. package/dist/vega/p-804f71b3.js +0 -1
  574. package/dist/vega/p-8789d34d.entry.js +0 -1
  575. package/dist/vega/p-8813c0ac.entry.js +0 -1
  576. package/dist/vega/p-8a85c7af.entry.js +0 -1
  577. package/dist/vega/p-98c64d77.entry.js +0 -1
  578. package/dist/vega/p-9f3539a4.entry.js +0 -1
  579. package/dist/vega/p-b42aea55.entry.js +0 -1
  580. package/dist/vega/p-b5d70ee0.entry.js +0 -1
  581. package/dist/vega/p-bc2dd43d.js +0 -1
  582. package/dist/vega/p-bf1894ec.js +0 -1
  583. package/dist/vega/p-c754b32c.js +0 -1
  584. package/dist/vega/p-c9a4e79a.entry.js +0 -1
  585. package/dist/vega/p-dbc82247.js +0 -1
  586. package/dist/vega/p-e2e36d2b.entry.js +0 -1
  587. package/dist/vega/p-ef8272b5.entry.js +0 -1
  588. package/dist/vega/p-f4c1d961.js +0 -1
  589. package/dist/vega/p-f5279deb.entry.js +0 -1
  590. package/dist/vega/p-f8033cd3.entry.js +0 -1
  591. package/dist/vega/p-fe63bd50.entry.js +0 -1
  592. /package/dist/vega/{p-eda5b7fd.js → p-05b10af4.js} +0 -0
  593. /package/dist/vega/{p-50677c8e.js → p-0c8bd757.js} +0 -0
  594. /package/dist/vega/{p-af7a3154.js → p-13effc6b.js} +0 -0
  595. /package/dist/vega/{p-ecfa7534.js → p-272440e8.js} +0 -0
  596. /package/dist/vega/{p-9b797118.js → p-519a7d55.js} +0 -0
  597. /package/dist/vega/{p-c0291e2e.js → p-834434d5.js} +0 -0
  598. /package/dist/vega/{p-bf953152.js → p-d5776087.js} +0 -0
  599. /package/dist/vega/{p-0fd6c35b.js → p-fa5eb496.js} +0 -0
@@ -1,41 +1,42 @@
1
- import { h, H as Host, F as Fragment, r as registerInstance, c as createEvent, g as getElement } from './index-187f71d1.js';
2
- import { c as MapToComponentField, M as MapToComponentMethod, V as VegaSlimmer, I as InjectVegaSlimmer, L as LogUtility } from './global-slimmer-registry-17c4efd4.js';
1
+ import { h, H as Host, F as Fragment, r as registerInstance, c as createEvent, g as getElement } from './index-d0a47531.js';
2
+ import { c as MapToComponentField, M as MapToComponentMethod, V as VegaSlimmer, I as InjectVegaSlimmer } from './global-slimmer-registry-17c4efd4.js';
3
3
  import { V as VegaComponentUsageRuntimeMetricsSlimmer, I as InjectVegaGlobalSlimmer } from './component-usage-runtime-metrics-385c7124.js';
4
- import { g as getActiveElement, s as sanitizeVegaComponent } from './component-cae24190.js';
4
+ import { s as sanitizeVegaComponent } from './component-7d906393.js';
5
5
  import { c as createEnterKeyHandlerToTriggerClick } from './accessibility-e5fd0fab.js';
6
6
  import { C as ChangeManager } from './change-manager-6a7eb88c.js';
7
- import { d as domNodeSubjectFactory, b as VegaDropdownClick, f as VegaChange, P as VegaImageInserted, a as VegaClick, M as VegaPopoverShow, N as VegaPopoverHide } from './dom-node-subject-factory-f77cf9cc.js';
8
- import { V as VegaInternalComponentDidRender, b as VegaInternalRichTextEditorSelectionRangeChange, a as VegaInternalRichTextEditorFlushChanges, u as VegaInternalRichTextEditDeleteSelectedNodes, v as VegaInternalRichTextImageClick, w as VegaInternalRichTextImageDeleteButtonClicked, q as VegaInternalPopoverUpdateTarget } from './vega-internal-event-id-85ad403f.js';
9
- import { b as ToolbarButtonSlimmer, I as ImageAnnotationAction, T as TextNodeRenderingRegistry, a as TextColorToolbarButtonSlimmer } from './image-annotation-action-1aa938ab.js';
7
+ import { d as domNodeSubjectFactory, b as VegaDropdownClick, f as VegaChange, P as VegaImageInserted, a as VegaClick, M as VegaPopoverShow, N as VegaPopoverHide } from './dom-node-subject-factory-6374611f.js';
8
+ import { V as VegaInternalComponentDidRender, a as VegaInternalRichTextEditorFlushChanges, v as VegaInternalRichTextEditDeleteSelectedNodes, w as VegaInternalRichTextImageClick, x as VegaInternalRichTextImageDeleteButtonClicked, r as VegaInternalPopoverUpdateTarget } from './vega-internal-event-id-178b2743.js';
9
+ import { b as ToolbarButtonSlimmer, I as ImageAnnotationAction, T as TextNodeRenderingRegistry, a as TextColorToolbarButtonSlimmer } from './image-annotation-action-1497f70e.js';
10
10
  import { V as VegaInternalIconManager } from './internal-icon-manager-58cf8aa6.js';
11
- import { f as RTETextNode, l as BoldAnnotationAction, h as NodeAnnotationTypeEnum, T as TextSplittableAction, m as ItalicAnnotation, U as UnderlineAnnotation, R as RTETextBlock, n as TextStyleAnnotationAction, o as TextStyleAnnotation, p as BoldAnnotation, q as BlockAnnotationTypeEnum, C as ClearFormattingAnnotationAction, r as CodeAnnotationAction, S as StrikethroughAnnotation, A as AnnotationAction, t as SelectionRangeAnnotation, L as LinkAnnotationAction, u as IndentAnnotation, e as RTEImageNode, M as ModifyContentAction, v as ModifyContentActionType, b as RTEListItemBlock, H as HorizontalAlignmentAnnotation, g as RTENode, s as stateEntityRenderingRegistry, Z as ZERO_WIDTH_SPACE, I as InternalAnnotationTypeEnum, V as VegaRTEContent, w as AppendChildNodesAction, x as UpdateTextAction, y as MergeTwoBlocksNodesAction, z as SplitBlockWithNodeAction, D as BreakSingleBlockAction, E as RemoveChildAction, F as ReplaceChildNodesAction, G as InsertBlocksBeforeAction, k as RTE_TEXT_COLORS, c as RTEListBlock, a as RTEImageBlock, J as InsertBlocksAfterAction } from './content-state-dbc9f635.js';
12
- import { D as DomNodeSubjectObserverFactory } from './dom-node-subject-observer-factory-715dccf9.js';
11
+ import { g as RTETextNode, J as BoldAnnotationAction, N as NodeAnnotationTypeEnum, G as RTECodeBlockNode, T as TextSplittableAction, K as ItalicAnnotation, O as UnderlineAnnotation, d as RTETextBlock, P as TextStyleAnnotationAction, Q as TextStyleAnnotation, V as BoldAnnotation, W as BlockAnnotationTypeEnum, X as ClearFormattingAnnotationAction, Y as CodeAnnotationAction, _ as StrikethroughAnnotation, D as SelectionChangeAction, L as LinkAnnotationAction, H as AnnotationAction, $ as IndentAnnotation, a as RTEImageNode, M as ModifyContentAction, f as ModifyContentActionType, a0 as HorizontalAlignmentAnnotation, c as AppendChildNodesAction, Z as ZERO_WIDTH_SPACE, a1 as UpdateTextAction, a2 as MergeTwoBlocksNodesAction, S as SplitBlockWithNodeAction, R as RemoveChildAction, b as ReplaceChildNodesAction, e as InsertBlocksBeforeAction, F as RTE_TEXT_COLORS, u as RTECodeBlock, I as InsertBlocksAfterAction, w as stateEntityRenderingRegistry } from './code-block-ef2f04ca.js';
12
+ import { D as DomNodeSubjectObserverFactory } from './dom-node-subject-observer-factory-c345ca2e.js';
13
13
  import { g as generateUUID } from './create-public-api-runtime-metrics-slimmer-8ada793f.js';
14
- import { a as waitForComponentDidRender } from './index-4aa167d6.js';
15
- import { F as FormFieldControllerSlimmer } from './form-field-controller-slimmer-89a72ee7.js';
16
- import { c as createEventEmitSlimmer } from './event-emit-slimmer-b7d511f6.js';
17
- import { c as createSubStateNotifySlimmer } from './sub-state-notify-slimmer-4e3cf09d.js';
18
- import { d as debounce } from './timer-9321173b.js';
19
- import { S as SynchronizeTaskQueue } from './synchronize-task-queue-ac8acc3b.js';
20
- import { O as Observer } from './observer-3959f9dd.js';
21
- import { f as findParent, r as rgbToHex } from './ui-ed1283bb.js';
14
+ import { a as waitForComponentDidRender } from './index-f5d2fe61.js';
15
+ import { F as FormFieldControllerSlimmer } from './form-field-controller-slimmer-87d80e46.js';
16
+ import { c as createEventEmitSlimmer } from './event-emit-slimmer-7428cc01.js';
17
+ import { c as createSubStateNotifySlimmer } from './sub-state-notify-slimmer-b6c8051c.js';
18
+ import { a as RTEListItemBlock, V as VegaRTEContent, B as BreakSingleBlockAction, b as RTEListBlock, R as RTEImageBlock } from './content-state-69d29a07.js';
19
+ import { R as RTESelectionState, A as AutoRunWhenReRenderTaskQueueSlimmer, a as SelectionController } from './selection-controller-3d6dfc87.js';
22
20
  import { b as FORM_ELEMENT_VALUE_CHANGE, D as DARK_MODE_CHANGE } from './static-subject-title-ca83d6b6.js';
21
+ import { O as Observer } from './observer-3959f9dd.js';
22
+ import { d as debounce } from './timer-9321173b.js';
23
23
  import { D as DarkModeStateControllerSlimmer } from './dark-mode-state-controller-slimmer-f1c2c299.js';
24
24
  import { i as isNonNullable } from './type-guard-158f6d7a.js';
25
- import { R as RichTextEditorRequiredRule } from './rich-text-editor-required-rule-6a7cd3ee.js';
26
- import { C as ChildNodesEventPreventSlimmer } from './child-nodes-event-prevent-slimmer-5d45361e.js';
27
- import { T as TranslationSlimmer } from './translation-slimmer-88966d5c.js';
28
- import { V as VegaInternalThemeManager } from './dark-mode-style-controller-2ada8e22.js';
29
- import { K as KeyboardManagerSlimmer } from './keyboard-manager-slimmer-42bf9773.js';
25
+ import { r as rgbToHex, f as findParent } from './ui-7d177fb0.js';
26
+ import { R as RichTextEditorRequiredRule } from './rich-text-editor-required-rule-cc5b6a2d.js';
27
+ import { C as ChildNodesEventPreventSlimmer } from './child-nodes-event-prevent-slimmer-2b975cbf.js';
28
+ import { T as TranslationSlimmer } from './translation-slimmer-e6b130bf.js';
29
+ import { V as VegaInternalThemeManager } from './dark-mode-style-controller-ea798fc8.js';
30
+ import { K as KeyboardManagerSlimmer } from './keyboard-manager-slimmer-2218e6ba.js';
30
31
  import { c as chevronDown } from './chevron-down-4a75d28e.js';
31
32
  import { t as trashCan } from './trash-can-8819a939.js';
32
33
  import { r as remoteInvocationRegistry } from './remote-invocation-registry-d69245c2.js';
33
34
  import './icon-manager-638dd4d4.js';
34
35
  import './dynamic-slimmer-90b8af32.js';
35
- import './wait-for-vega-handler-b18eb955.js';
36
+ import './wait-for-vega-handler-e0a928cd.js';
36
37
  import './string-be824360.js';
37
- import './translation-cf7f020a.js';
38
- import './page-resize-observer-slimmer-15a84d26.js';
38
+ import './translation-71e0711d.js';
39
+ import './page-resize-observer-slimmer-c51f1912.js';
39
40
  import './ui-8424715a.js';
40
41
  import './breakpoints-d9faf11c.js';
41
42
  import './internal-form-field-validation-rule.abstract-f5b6bdbf.js';
@@ -43,15 +44,16 @@ import './mutation-observer-slimmer-6cef9549.js';
43
44
  import './mutation-observer-filters-1a054fb0.js';
44
45
  import './array-7888f339.js';
45
46
  import './number-4398f2e1.js';
46
- import './sub-state-observer-slimmer-be7a6ce3.js';
47
- import './internal-vega-event-manager-87dc436c.js';
47
+ import './sub-state-observer-slimmer-93eeb87d.js';
48
+ import './internal-vega-event-manager-d80c53c5.js';
49
+ import './synchronize-task-queue-ac8acc3b.js';
48
50
  import './regex-dfe11abf.js';
49
51
  import './typography-396de03f.js';
50
52
  import './vega-env-manager-8f8dc473.js';
51
53
  import './feature-flag-controller-0fbe8fb0.js';
52
54
  import './index-44c794b4.js';
53
55
  import './_commonjsHelpers-9943807e.js';
54
- import './keyboard-manager-262be5ce.js';
56
+ import './keyboard-manager-9564ad83.js';
55
57
 
56
58
  var __decorate$A = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
57
59
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
@@ -213,6 +215,8 @@ class ToolbarRenderer extends VegaSlimmer {
213
215
  return this.bulletsNumbersToolbarButtonSlimmer;
214
216
  case 'horizontalAlignment':
215
217
  return this.horizontalAlignmentToolbarButtonSlimmer;
218
+ case 'codeBlock':
219
+ return this.codeBlockToolbarButtonSlimmer;
216
220
  }
217
221
  };
218
222
  }
@@ -269,6 +273,9 @@ __decorate$z([
269
273
  __decorate$z([
270
274
  MapToComponentField()
271
275
  ], ToolbarRenderer.prototype, "linkToolbarButtonSlimmer", void 0);
276
+ __decorate$z([
277
+ MapToComponentField()
278
+ ], ToolbarRenderer.prototype, "codeBlockToolbarButtonSlimmer", void 0);
272
279
 
273
280
  const bold = {
274
281
  icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 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="M0 64C0 46.3 14.3 32 32 32H80 96 224c70.7 0 128 57.3 128 128c0 31.3-11.3 60.1-30 82.3c37.1 22.4 62 63.1 62 109.7c0 70.7-57.3 128-128 128H96 80 32c-17.7 0-32-14.3-32-32s14.3-32 32-32H48V256 96H32C14.3 96 0 81.7 0 64zM224 224c35.3 0 64-28.7 64-64s-28.7-64-64-64H112V224H224zM112 288V416H256c35.3 0 64-28.7 64-64s-28.7-64-64-64H224 112z"/></svg>`,
@@ -308,7 +315,8 @@ class BoldToolbarButtonSlimmer extends ToolbarButtonSlimmer {
308
315
  return (super.isDisabled() ||
309
316
  selectedNodes.some((node) => {
310
317
  var _a;
311
- return ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
318
+ return node instanceof RTECodeBlockNode ||
319
+ ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
312
320
  node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
313
321
  }));
314
322
  }
@@ -375,7 +383,8 @@ class ItalicToolbarButtonSlimmer extends ToolbarButtonSlimmer {
375
383
  return (super.isDisabled() ||
376
384
  selectedNodes.some((node) => {
377
385
  var _a;
378
- return ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
386
+ return node instanceof RTECodeBlockNode ||
387
+ ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
379
388
  node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
380
389
  }));
381
390
  }
@@ -445,7 +454,8 @@ class UnderlineToolbarButtonSlimmer extends ToolbarButtonSlimmer {
445
454
  return (super.isDisabled() ||
446
455
  selectedNodes.some((node) => {
447
456
  var _a;
448
- return ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
457
+ return node instanceof RTECodeBlockNode ||
458
+ ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
449
459
  node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
450
460
  }));
451
461
  }
@@ -518,7 +528,8 @@ class TextStylesToolbarButtonSlimmer extends ToolbarButtonSlimmer {
518
528
  isDisabled() {
519
529
  const selectedNodes = this.selectionController.getSelectedNodes();
520
530
  return (super.isDisabled() ||
521
- selectedNodes.some((node) => node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
531
+ selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
532
+ node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
522
533
  }
523
534
  addDropdownObserver(dropdownRef) {
524
535
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(dropdownRef, VegaDropdownClick, this.handleDropdownItemClick);
@@ -611,7 +622,8 @@ class ClearStyleToolbarButtonSlimmer extends ToolbarButtonSlimmer {
611
622
  isDisabled() {
612
623
  const selectedNodes = this.selectionController.getSelectedNodes();
613
624
  return (super.isDisabled() ||
614
- selectedNodes.some((node) => node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
625
+ selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
626
+ node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
615
627
  }
616
628
  }
617
629
  (() => {
@@ -658,7 +670,8 @@ class CodeToolbarButtonSlimmer extends ToolbarButtonSlimmer {
658
670
  isDisabled() {
659
671
  const selectedNodes = this.selectionController.getSelectedNodes();
660
672
  return (super.isDisabled() ||
661
- selectedNodes.some((node) => node.getAnnotationByType(NodeAnnotationTypeEnum.LINK) ||
673
+ selectedNodes.some((node) => node instanceof RTECodeBlockNode ||
674
+ node.getAnnotationByType(NodeAnnotationTypeEnum.LINK) ||
662
675
  node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE)));
663
676
  }
664
677
  }
@@ -727,7 +740,8 @@ class StrikethroughToolbarButtonSlimmer extends ToolbarButtonSlimmer {
727
740
  return (super.isDisabled() ||
728
741
  selectedNodes.some((node) => {
729
742
  var _a;
730
- return ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
743
+ return node instanceof RTECodeBlockNode ||
744
+ ((_a = node.getAnnotationByType(NodeAnnotationTypeEnum.CODE)) === null || _a === void 0 ? void 0 : _a.code) ||
731
745
  node.getAnnotationByType(NodeAnnotationTypeEnum.IMAGE);
732
746
  }));
733
747
  }
@@ -743,25 +757,6 @@ const link = {
743
757
  icon: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 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="M562.8 267.7c56.5-56.5 56.5-148 0-204.5c-50-50-128.8-56.5-186.3-15.4l-1.6 1.1c-14.4 10.3-17.7 30.3-7.4 44.6s30.3 17.7 44.6 7.4l1.6-1.1c32.1-22.9 76-19.3 103.8 8.6c31.5 31.5 31.5 82.5 0 114L405.3 334.8c-31.5 31.5-82.5 31.5-114 0c-27.9-27.9-31.5-71.8-8.6-103.8l1.1-1.6c10.3-14.4 6.9-34.4-7.4-44.6s-34.4-6.9-44.6 7.4l-1.1 1.6C189.5 251.2 196 330 246 380c56.5 56.5 148 56.5 204.5 0L562.8 267.7zM43.2 244.3c-56.5 56.5-56.5 148 0 204.5c50 50 128.8 56.5 186.3 15.4l1.6-1.1c14.4-10.3 17.7-30.3 7.4-44.6s-30.3-17.7-44.6-7.4l-1.6 1.1c-32.1 22.9-76 19.3-103.8-8.6C57 372 57 321 88.5 289.5L200.7 177.2c31.5-31.5 82.5-31.5 114 0c27.9 27.9 31.5 71.8 8.6 103.9l-1.1 1.6c-10.3 14.4-6.9 34.4 7.4 44.6s34.4 6.9 44.6-7.4l1.1-1.6C416.5 260.8 410 182 360 132c-56.5-56.5-148-56.5-204.5 0L43.2 244.3z"/></svg>`,
744
758
  };
745
759
 
746
- /**
747
- * Action to change the selection range
748
- */
749
- class SelectionChangeAction extends AnnotationAction {
750
- constructor(range) {
751
- super();
752
- this.isFlushable = false;
753
- this.range = range;
754
- }
755
- /**
756
- * Converts the action to an annotation
757
- *
758
- * @returns {SelectionRangeAnnotation} The annotation
759
- */
760
- toAnnotation() {
761
- return new SelectionRangeAnnotation(this.range);
762
- }
763
- }
764
-
765
760
  var __decorate$r = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
766
761
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
767
762
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
@@ -893,7 +888,7 @@ class MoreIndentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
893
888
  const selectedBlocks = this.selectionController.getSelectedBlocks();
894
889
  const selectedNodes = this.selectionController.getSelectedNodes();
895
890
  return (super.isDisabled() ||
896
- selectedBlocks.some((node) => node.type === 'list-item') ||
891
+ selectedBlocks.some((node) => node.type === 'list-item' || node.type === 'code-block') ||
897
892
  selectedNodes.some((node) => node instanceof RTEImageNode));
898
893
  }
899
894
  onClick() {
@@ -937,7 +932,7 @@ class LessIndentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
937
932
  const selectedBlocks = this.selectionController.getSelectedBlocks();
938
933
  const selectedNodes = this.selectionController.getSelectedNodes();
939
934
  return (super.isDisabled() ||
940
- selectedBlocks.some((node) => node.type === 'list-item') ||
935
+ selectedBlocks.some((node) => node.type === 'list-item' || node.type === 'code-block') ||
941
936
  selectedNodes.some((node) => node instanceof RTEImageNode));
942
937
  }
943
938
  onClick() {
@@ -1104,7 +1099,8 @@ class BulletsToolbarButtonSlimmer extends ToolbarButtonSlimmer {
1104
1099
  }
1105
1100
  isDisabled() {
1106
1101
  const selectedNodes = this.selectionController.getSelectedNodes();
1107
- return super.isDisabled() || selectedNodes.some((node) => node instanceof RTEImageNode);
1102
+ return (super.isDisabled() ||
1103
+ selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
1108
1104
  }
1109
1105
  isListType(selectedBlocks, type = 'bullet-list') {
1110
1106
  return (selectedBlocks.length > 0 &&
@@ -1167,7 +1163,8 @@ class NumbersToolbarButtonSlimmer extends ToolbarButtonSlimmer {
1167
1163
  }
1168
1164
  isDisabled() {
1169
1165
  const selectedNodes = this.selectionController.getSelectedNodes();
1170
- return super.isDisabled() || selectedNodes.some((node) => node instanceof RTEImageNode);
1166
+ return (super.isDisabled() ||
1167
+ selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
1171
1168
  }
1172
1169
  isListType(selectedBlocks, type = 'number-list') {
1173
1170
  return (selectedBlocks.length > 0 &&
@@ -1242,7 +1239,8 @@ class BulletsNumbersToolbarButtonSlimmer extends ToolbarButtonSlimmer {
1242
1239
  }
1243
1240
  isDisabled() {
1244
1241
  const selectedNodes = this.selectionController.getSelectedNodes();
1245
- return super.isDisabled() || selectedNodes.some((node) => node instanceof RTEImageNode);
1242
+ return (super.isDisabled() ||
1243
+ selectedNodes.some((node) => node instanceof RTEImageNode || node instanceof RTECodeBlockNode));
1246
1244
  }
1247
1245
  }
1248
1246
  (() => {
@@ -1518,6 +1516,12 @@ class HorizontalAlignmentToolbarButtonSlimmer extends ToolbarButtonSlimmer {
1518
1516
  isSelected() {
1519
1517
  return false;
1520
1518
  }
1519
+ isDisabled() {
1520
+ return (super.isDisabled() ||
1521
+ this.selectionController
1522
+ .getSelectedBlocks()
1523
+ .some((block) => block.type === 'code-block'));
1524
+ }
1521
1525
  }
1522
1526
  __decorate$g([
1523
1527
  MapToComponentField()
@@ -1538,944 +1542,249 @@ __decorate$g([
1538
1542
  MapToComponentMethod('componentWillRender')
1539
1543
  ], HorizontalAlignmentToolbarButtonSlimmer.prototype, "componentWillRender", null);
1540
1544
 
1541
- let processing = false;
1542
1545
  /**
1543
- * Simulate a selection for browsers that don't support shadow selection.
1544
- * Cypress test case added in https://github.com/heartlandpayments/Vega/pull/1561/files#diff-83bdbaaf47fc156ab878099aa1f21b0e8ab92abe5852521299f1fb6efab001c2R300
1546
+ * Represents the state of the RTE
1545
1547
  */
1546
- class ShadowSelection {
1547
- constructor() {
1548
- this.rangeCount = 0;
1549
- this.ranges = [];
1548
+ class RTEEditorState {
1549
+ constructor(content, selection) {
1550
+ this.content = content.clone(true);
1551
+ this.selection = selection.clone();
1552
+ this.refreshSelectionNodes();
1550
1553
  }
1551
1554
  /**
1552
- * Returns a Range object at a specified index.
1555
+ * Clones the editor state, updating the content and selection based on the provided content.
1553
1556
  *
1554
- * @param {number} index - A specified index.
1555
- * @returns {Range} - A Range object.
1557
+ * @returns {RTEEditorState} A new instance of RTEEditorState with the updated content and selection.
1556
1558
  */
1557
- getRangeAt(index) {
1558
- return this.ranges[index];
1559
- }
1560
- /**
1561
- * Adds a Range to ranges array.
1562
- *
1563
- * @param {Range} range - The range of selection.
1564
- */
1565
- addRange(range) {
1566
- this.ranges.push(range);
1567
- this.rangeCount = this.ranges.length;
1568
- if (!processing) {
1569
- const windowSelection = window.getSelection();
1570
- windowSelection.removeAllRanges();
1571
- windowSelection.setBaseAndExtent(range.startContainer, range.startOffset, range.endContainer, range.endOffset);
1572
- }
1559
+ clone() {
1560
+ return new RTEEditorState(this.content, this.selection);
1573
1561
  }
1574
1562
  /**
1575
- * Clears all ranges.
1563
+ * Refreshes the selection nodes in the editor state.
1576
1564
  */
1577
- removeAllRanges() {
1578
- this.ranges = [];
1579
- this.rangeCount = 0;
1565
+ refreshSelectionNodes() {
1566
+ const { startNode: oldStartNode, endNode: oldEndNode, startOffset, endOffset, } = this.selection.range;
1567
+ if (oldStartNode && oldEndNode) {
1568
+ const startNode = this.content.findNodeById(oldStartNode.id);
1569
+ const endNode = this.content.findNodeById(oldEndNode.id);
1570
+ if (startNode && endNode) {
1571
+ this.selection.range.updateRTERange({
1572
+ startNode,
1573
+ endNode,
1574
+ startOffset,
1575
+ endOffset,
1576
+ });
1577
+ }
1578
+ }
1580
1579
  }
1581
1580
  }
1581
+
1582
+ var __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
1583
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1584
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1585
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1586
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
1587
+ };
1582
1588
  /**
1583
- * Due to the ShadowRoot.getSelection is not a standard API, we add this polyfill to achieve this function.
1584
- *
1585
- * - On Chromium, calling document.getSelection will not pierce into the Shadow DOM and gives you some unhelpful high-level element.
1586
- * But it does expose the non-standard getSelection method on the ShadowRoot.
1587
- *
1588
- * - On Firefox, it does not implement ShadowRoot.getSelection,
1589
- * but document.getSelection will pierce through shadow dom and give you the exact element.
1590
- *
1591
- * - On Safari, Selection.getComposedRanges is supported as of v17. On versions before that,
1592
- * ShadowRoot.getSelection is not supported and apparently document.getSelection does not pierce the Shadow DOM, meaning you are just out of luck.
1593
- *
1594
- * https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot#shadowroot.getselection
1595
- * https://stackoverflow.com/a/70523247
1589
+ * The value controller is responsible for updating the value of the rich text editor.
1596
1590
  */
1597
- class ShadowSelectionPolyfill {
1598
- constructor() {
1599
- this.supportShadowSelection = typeof window.ShadowRoot.prototype['getSelection'] === 'function';
1600
- this.supportBeforeInput = typeof window.InputEvent.prototype.getTargetRanges === 'function';
1601
- this.isFirefox = window.navigator.userAgent.toLowerCase().indexOf('firefox') > 0;
1602
- this.listen();
1603
- }
1591
+ class ValueController extends VegaSlimmer {
1604
1592
  /**
1605
- * For Firefox, we directly use document.getSelection()
1606
- * For other browser which not support shadowroot.getSelection, we use this.selection which is built by us.
1607
- * For browser which supported shadowroot.getSelection, we use shadowRoot.getselection().
1608
- *
1609
- * @param {ShadowRoot} shadow - A shadow.
1610
- * @returns {Nullable<Selection>} - The shadow selection.
1593
+ * Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
1611
1594
  */
1612
- getSelection(shadow) {
1613
- if (this.supportShadowSelection) {
1614
- return shadow['getSelection']();
1615
- }
1616
- else {
1617
- return this.isFirefox
1618
- ? this.getFirefoxSelection()
1619
- : this.polyfilledShadowSelection;
1620
- }
1595
+ connectedCallback() {
1596
+ const flushChangesWithDebounce = debounce(() => {
1597
+ void this.valueController.flushChanges(this.value);
1598
+ }, ValueController.VALUE_CHANGE_DEBOUNCE_TIME, this);
1599
+ this.flushChangeObserver = new Observer(this.isAcceptableFlushChange.bind(this), flushChangesWithDebounce);
1600
+ ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
1621
1601
  }
1622
1602
  /**
1623
- * Get selection in firefox.
1624
- *
1625
- * Example:
1626
- *
1627
- * <span>span1</span><span>span2</span><span>span3</span>
1628
- *
1629
- * In firefox, while selected `span2`, the range be likely to:
1630
- * range:
1631
- * startContainer: #text 'span1'
1632
- * startOffset: 5
1633
- * endContainer: #text 'span3'
1634
- * endOffset: 0
1635
- * start is end of brefore node and end is start of after node.
1636
- *
1637
- * So we should modify the startContainer and endContainer here.
1638
- *
1639
- * modified range:
1640
- * startContainer: #text 'span2'
1641
- * startOffset: 0
1642
- * endContainer: #text 'span2'
1643
- * endOffset: 5
1644
- *
1645
- * @returns {Selection} - document selection
1646
- */
1647
- getFirefoxSelection() {
1648
- const selection = document.getSelection();
1649
- const range = selection.getRangeAt(0);
1650
- const startNode = range.startContainer;
1651
- const endNode = range.endContainer;
1652
- if (startNode !== endNode && startNode.textContent.length === range.startOffset) {
1653
- const nextSibling = startNode.nodeType === Node.TEXT_NODE
1654
- ? startNode.parentNode.nextSibling
1655
- : startNode.nextSibling;
1656
- range.setStart(nextSibling.firstChild, 0);
1657
- }
1658
- if (endNode !== startNode && range.endOffset === 0) {
1659
- const previousSibling = endNode.nodeType === Node.TEXT_NODE
1660
- ? endNode.parentNode.previousSibling
1661
- : endNode.previousSibling;
1662
- range.setEnd(previousSibling.lastChild, previousSibling.lastChild.textContent.length);
1663
- }
1664
- return selection;
1665
- }
1666
- /**
1667
- * Sets up event listeners for `selectionchange` and `beforeinput` events to simulate shadow selection.
1668
- */
1669
- listen() {
1670
- if (this.isFirefox || this.supportShadowSelection || !this.supportBeforeInput)
1671
- return;
1672
- this.polyfilledShadowSelection = new ShadowSelection();
1673
- window.addEventListener('selectionchange', () => {
1674
- if (!processing) {
1675
- processing = true;
1676
- const active = getActiveElement();
1677
- if (active && active.hasAttribute('contenteditable')) {
1678
- // This command will not actually work, it only trigger the `beforeinput` event,
1679
- // the `beforeinput` event will prevented this command work.
1680
- document.execCommand('indent');
1681
- }
1682
- else {
1683
- this.polyfilledShadowSelection.removeAllRanges();
1684
- }
1685
- processing = false;
1686
- }
1687
- }, true);
1688
- window.addEventListener('beforeinput', (event) => {
1689
- if (processing) {
1690
- const ranges = event.getTargetRanges();
1691
- const range = ranges[0];
1692
- const newRange = new Range();
1693
- newRange.setStart(range.startContainer, range.startOffset);
1694
- newRange.setEnd(range.endContainer, range.endOffset);
1695
- this.polyfilledShadowSelection.removeAllRanges();
1696
- this.polyfilledShadowSelection.addRange(newRange);
1697
- event.preventDefault();
1698
- event.stopImmediatePropagation();
1699
- }
1700
- }, true);
1603
+ * Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
1604
+ */
1605
+ disconnectedCallback() {
1606
+ ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
1701
1607
  }
1702
- }
1703
- const ShadowSelectionPolyfill$1 = new ShadowSelectionPolyfill();
1704
-
1705
- /** Manages selection range for a rich text editor, providing methods to set, sync, and create native ranges based on RTENodes and Nodes. */
1706
- class RTERange {
1707
1608
  /**
1708
- * Initial the rte range properties
1709
- *
1710
- * @param {Node} [startContainer] The range start element.
1711
- * @param {Node} [endContainer] The range end element.
1712
- * @param {number} [startOffset] The range start element content offset, default value is 0.
1713
- * @param {number} [endOffset] The range end element content offset, default value is 0.
1714
- * @param {RTENode} [startNode] The range start node, the start node could be null if the start element is root element.
1715
- * @param {RTENode} [endNode] The range start node, the start node could be null if the start element is root element.
1716
- * @param {Range} [nativeRange] The browser native range instance.
1717
- */
1718
- constructor(startContainer, endContainer, startOffset = 0, endOffset = 0, startNode, endNode, nativeRange) {
1719
- this._startOffset = 0;
1720
- this._endOffset = 0;
1721
- this._startContainer = startContainer;
1722
- this._endContainer = endContainer;
1723
- this._startOffset = startOffset;
1724
- this._endOffset = endOffset;
1725
- this._startNode = startNode;
1726
- this._endNode = endNode;
1727
- if (nativeRange) {
1728
- this._oldNativeRange = nativeRange;
1609
+ * Component lifecycle - [componentWillLoad]{@link VegaRichTextEditor.componentWillLoad}
1610
+ */
1611
+ componentWillLoad() {
1612
+ if (this.value && !(this.value instanceof VegaRTEContent)) {
1613
+ this.value = VegaRTEContent.fromJSON(this.value);
1729
1614
  }
1730
1615
  }
1731
1616
  /**
1732
- * Returns the start container as a Node or null if it is not set.
1733
- * The start container could be null when the dom node should be create after re-render.
1734
- *
1735
- * @returns {Nullable<Node>} The range start element.
1617
+ * Watches the value of the editor and updates the internal value.
1736
1618
  */
1737
- get startContainer() {
1738
- return this._startContainer;
1619
+ watchValueUpdate() {
1620
+ if (this.value && !(this.value instanceof VegaRTEContent)) {
1621
+ this.value = VegaRTEContent.fromJSON(this.value);
1622
+ }
1623
+ else if (!this.value || this.value.blocks.length === 0) {
1624
+ this.value = VegaRTEContent.createEmptyContent();
1625
+ }
1626
+ else {
1627
+ this.changeEventEmitter.emit(this.value);
1628
+ ChangeManager.notify(FORM_ELEMENT_VALUE_CHANGE, {
1629
+ host: this.host,
1630
+ detail: this.value,
1631
+ });
1632
+ }
1739
1633
  }
1740
1634
  /**
1741
- * Returns the end container as a Node or null if it is not set.
1742
- * The end container could be null when the dom node should be create after re-render.
1635
+ * Updates the value of the editor and restore the selection.
1743
1636
  *
1744
- * @returns {Nullable<Node>} The range start element.
1637
+ * @param {VegaRTEContent} newValue The new value to set.
1638
+ * @param {boolean} recordHistory - Whether to record the change in history.
1745
1639
  */
1746
- get endContainer() {
1747
- return this._endContainer;
1640
+ async flushChanges(newValue, recordHistory = true) {
1641
+ if (recordHistory) {
1642
+ this.historyController.registerHistory(new RTEEditorState(newValue, new RTESelectionState(this.selectionController.getCurrentRange())));
1643
+ }
1644
+ this.value = newValue.clone();
1645
+ await waitForComponentDidRender(this.host);
1748
1646
  }
1749
1647
  /**
1750
- * Returns the range start RTE node as a RTENode or null if it is not set.
1751
- * The start RTENode could be null when the range start node is the root element of the rich text editor.
1648
+ * Determines whether the observer should accept changes.
1752
1649
  *
1753
- * @returns {Nullable<RTENode>} The range start element.
1650
+ * @returns {boolean} Always returns true in the current implementation.
1754
1651
  */
1755
- get startNode() {
1756
- return this._startNode;
1652
+ isAcceptableFlushChange() {
1653
+ return true;
1654
+ }
1655
+ }
1656
+ ValueController.VALUE_CHANGE_DEBOUNCE_TIME = 50;
1657
+ __decorate$f([
1658
+ MapToComponentField()
1659
+ ], ValueController.prototype, "host", void 0);
1660
+ __decorate$f([
1661
+ MapToComponentField({ writable: true })
1662
+ ], ValueController.prototype, "value", void 0);
1663
+ __decorate$f([
1664
+ MapToComponentField()
1665
+ ], ValueController.prototype, "changeEventEmitter", void 0);
1666
+ __decorate$f([
1667
+ MapToComponentField()
1668
+ ], ValueController.prototype, "valueController", void 0);
1669
+ __decorate$f([
1670
+ MapToComponentField()
1671
+ ], ValueController.prototype, "historyController", void 0);
1672
+ __decorate$f([
1673
+ MapToComponentField()
1674
+ ], ValueController.prototype, "selectionController", void 0);
1675
+ __decorate$f([
1676
+ MapToComponentMethod('connectedCallback')
1677
+ ], ValueController.prototype, "connectedCallback", null);
1678
+ __decorate$f([
1679
+ MapToComponentMethod('disconnectedCallback')
1680
+ ], ValueController.prototype, "disconnectedCallback", null);
1681
+ __decorate$f([
1682
+ MapToComponentMethod('componentWillLoad')
1683
+ ], ValueController.prototype, "componentWillLoad", null);
1684
+ __decorate$f([
1685
+ MapToComponentMethod('watchValueUpdate')
1686
+ ], ValueController.prototype, "watchValueUpdate", null);
1687
+
1688
+ /**
1689
+ * The rich text content controller
1690
+ */
1691
+ class RichTextContentController {
1692
+ constructor(editor) {
1693
+ this.editor = editor;
1757
1694
  }
1758
1695
  /**
1759
- * Returns the range end RTE node as a RTENode or null if it is not set.
1760
- * The end RTENode could be null when the range end node is the root element of the rich text editor.
1696
+ * Sync rich text content editable with disabled property
1761
1697
  *
1762
- * @returns {Nullable<RTENode>} The range start element.
1763
1698
  */
1764
- get endNode() {
1765
- return this._endNode;
1699
+ syncRichTextContentEditable() {
1700
+ this.editor.richTextContentEditable = !this.editor.disabled;
1766
1701
  }
1702
+ }
1703
+
1704
+ const ROOT_CONTAINER_CLASS_NAME = 'rich-text-content';
1705
+ /** This code snippet is defining an abstract class named `BaseHandler` with an abstract method `execute`. */
1706
+ class BaseHandler {
1767
1707
  /**
1768
- * Returns range's start offset.
1708
+ * The function `execute` initializes the current state and selection, and then handles an event if provided.
1769
1709
  *
1770
- * @returns {number} The character length in text node or the element index of parent element.
1710
+ * @param {VegaRTEContent} currentState - The current state of the VegaRTE content.
1711
+ * @param {SelectionController} selectionController - Manages the selection of items in the user interface.
1712
+ * @param {HTMLElement} richTextEditor - The current rich text editor component
1713
+ * @param {InputEvent} [event] - It is used to pass an input event to the method for handling.
1771
1714
  */
1772
- get startOffset() {
1773
- return this._startOffset;
1715
+ execute(currentState, selectionController, richTextEditor, event) {
1716
+ this.initCurrentStateAndSelection(currentState, selectionController);
1717
+ this.setCurrentRichTextEditor(richTextEditor);
1718
+ this.handleEvent(event);
1774
1719
  }
1775
1720
  /**
1776
- * Returns range's start offset.
1721
+ * The function `isRootContainer` checks if an HTML element is a root container with a class of 'rich-text-content'.
1777
1722
  *
1778
- * @returns {number} The character length in text node or the element index of parent element.
1723
+ * @param {HTMLElement} element - HTMLElement
1724
+ * @returns {boolean} The boolean value
1779
1725
  */
1780
- get endOffset() {
1781
- return this._endOffset;
1726
+ isRootContainer(element) {
1727
+ return (element &&
1728
+ element.nodeType === Node.ELEMENT_NODE &&
1729
+ element.classList.contains(ROOT_CONTAINER_CLASS_NAME));
1782
1730
  }
1783
1731
  /**
1784
- * Updates the range options for a Rich Text Editor.
1785
- * This method will called after modify the content, the start node and end node should be rte node.
1786
- * This method will called after selectionchange event emit, the start node and end node should be the html node.
1732
+ * Checks if a given HTML element represents an empty paragraph containing only a line break element.
1787
1733
  *
1788
- * @param {RTERangeOptions} options - An object that contains the following properties:
1789
- * @param {Range} [nativeRange] - The native range instance
1790
- * @returns {RTERange} - The new RTERange instance
1791
- */
1792
- updateRTERange(options, nativeRange) {
1793
- const { startOffset, endOffset } = options;
1794
- this._startOffset = startOffset;
1795
- this._endOffset = endOffset;
1796
- const startNode = options.startNode;
1797
- const endNode = options.endNode;
1798
- if (startNode instanceof RTENode) {
1799
- this._startNode = startNode;
1800
- this._endNode = endNode;
1801
- const startContainer = this.getElementByRTENode(this._startNode);
1802
- const endContainer = this._startNode === this._endNode ? startContainer : this.getElementByRTENode(this._endNode);
1803
- if (startContainer) {
1804
- this._startContainer = startContainer;
1805
- this._endContainer = endContainer;
1806
- }
1807
- }
1808
- else {
1809
- // The selectionchange callback has a 50 ms delay, so we need to check the next range is the same as the current ret range.
1810
- this._startContainer = startNode;
1811
- this._endContainer = endNode;
1812
- this._startNode = this.getRTENodeByElement(this._startContainer);
1813
- this._endNode =
1814
- this._startContainer === this._endContainer
1815
- ? this._startNode
1816
- : this.getRTENodeByElement(this._endContainer);
1817
- if (nativeRange) {
1818
- this._oldNativeRange = nativeRange;
1819
- }
1820
- }
1821
- return new RTERange(this._startContainer, this._endContainer, this._startOffset, this._endOffset, this._startNode, this._endNode, this._oldNativeRange);
1734
+ * @param {HTMLElement} node - An HTMLElement node that represents a paragraph element in the HTML document.
1735
+ * @returns {boolean} boolean result
1736
+ */
1737
+ isEmptyParagraph(node) {
1738
+ return node && node.childNodes && node.childNodes.length === 0;
1822
1739
  }
1823
1740
  /**
1824
- * Creates a new instance of the `RTERange` class with the same properties as the current instance.
1741
+ * Removes selected nodes within a range in a rich text editor content.
1742
+ * The method is only used for different nodes are selected
1825
1743
  *
1826
- * @returns {RTERange} A new `RTERange` instance with the same start and end containers, offsets, and nodes.
1744
+ * @param {boolean} [mergeNode] Merge start node and end node or not, default value is false.
1745
+ * @returns {RTENode} The range start node, usually the start node is the first item of selectedNodes, if the selectedNodes is all removed, the start node will be a new text node.
1827
1746
  */
1828
- clone() {
1829
- return new RTERange(this._startContainer, this._endContainer, this._startOffset, this._endOffset, this._startNode, this._endNode, this._oldNativeRange);
1747
+ removeSelectionRange(mergeNode = false) {
1748
+ ChangeManager.notify(domNodeSubjectFactory.getSubject(this.richTextEditorRef, VegaInternalRichTextEditDeleteSelectedNodes), { host: this.richTextEditorRef, detail: mergeNode });
1749
+ const range = this.selectionController.getCurrentRange();
1750
+ const selectedNodes = this.selectionController.getSelectedNodes();
1751
+ return range.startNode || selectedNodes[0];
1830
1752
  }
1831
1753
  /**
1832
- * Creates a Range object based on start and end nodes and offsets.
1833
- * Invoke this method to get the future range state if the range content modified.
1834
- * Invoke this method to get the native range instance if range start node and end node not defined
1754
+ * Creates a new paragraph with an empty text node and returns it.
1835
1755
  *
1836
- * @returns {Nullable<Range>} The range instance. The return value could be null if the start node or end node are not rendered.
1756
+ * @returns {RTETextBlock} An empty paragraph with a unique identifier and a text node appended to it.
1837
1757
  */
1838
- toNativeRange() {
1839
- const startContainer = this.getElementByRTENode(this._startNode);
1840
- const endContainer = this._startNode === this._endNode ? startContainer : this.getElementByRTENode(this._endNode);
1841
- const range = new Range();
1842
- if (startContainer && endContainer) {
1843
- range.setStart(startContainer, this._startOffset);
1844
- range.setEnd(endContainer, this._endOffset);
1845
- this._startContainer = startContainer;
1846
- this._endContainer = endContainer;
1847
- this._oldNativeRange = range;
1848
- return range;
1849
- }
1850
- else if (this._oldNativeRange) {
1851
- return this._oldNativeRange;
1852
- }
1758
+ createEmptyParagraph() {
1759
+ const paragraph = new RTETextBlock(generateUUID(), 'paragraph');
1760
+ const textNode = new RTETextNode(`${paragraph.id}1`, '', paragraph);
1761
+ paragraph.apply(new AppendChildNodesAction([textNode]));
1762
+ return paragraph;
1853
1763
  }
1854
1764
  /**
1855
- * Retrieves the DOM element associated with a given RTENode entity.
1765
+ * The function initializes the current state and selection controller in TypeScript.
1856
1766
  *
1857
- * @param {Nullable<RTENode>} node - Represents a node in a Rich Text Editor.
1858
- * @returns {Nullable<Node>} a Node object or null.
1859
- */
1860
- getElementByRTENode(node) {
1861
- if (node) {
1862
- const element = stateEntityRenderingRegistry.getDOMByEntity(node);
1863
- if (element) {
1864
- return node instanceof RTEImageNode
1865
- ? findParent(element, 'vega-rich-text-image-editor')
1866
- : element.firstChild;
1867
- }
1868
- }
1767
+ * @param {VegaRTEContent} currentState - The current state of a Vega runtime environment content.
1768
+ * @param {SelectionController} selectionController - It is used to manage the selection of content within the VegaRTE editor.
1769
+ */
1770
+ initCurrentStateAndSelection(currentState, selectionController) {
1771
+ this.currentState = currentState;
1772
+ this.selectionController = selectionController;
1869
1773
  }
1870
1774
  /**
1871
- * Retrieves an RTENode based on the given element by checking its type and parent elements.
1775
+ * Queries the rich text editor element from the input event target.
1872
1776
  *
1873
- * @param {Node} element - An element in the DOM (Document Object Model).
1874
- * @returns { Nullable<RTENode>} Returns a nullable `RTENode` object.
1875
- */
1876
- getRTENodeByElement(element) {
1877
- if (element) {
1878
- const registerElement = element.nodeType === Node.TEXT_NODE
1879
- ? element.parentElement
1880
- : element.nodeName === 'VEGA-RICH-TEXT-IMAGE-EDITOR'
1881
- ? element.querySelector('img')
1882
- : element;
1883
- return stateEntityRenderingRegistry.getEntityByDOM(registerElement);
1884
- }
1777
+ * @param {HTMLElement} richTextEditor - The current rich text editor component
1778
+ */
1779
+ setCurrentRichTextEditor(richTextEditor) {
1780
+ this.richTextEditorRef = richTextEditor;
1885
1781
  }
1886
1782
  }
1887
1783
 
1888
1784
  /**
1889
- * Represents the state of the selection in the RTE.
1890
- */
1891
- class RTESelectionState {
1892
- constructor(range) {
1893
- this.range = range;
1894
- }
1895
- /**
1896
- * Clones the selection state, updating the range nodes based on the provided content.
1897
- *
1898
- * @returns {RTESelectionState} A new instance of RTESelectionState with the updated range.
1899
- */
1900
- clone() {
1901
- const newRange = this.range.clone();
1902
- return new RTESelectionState(newRange);
1903
- }
1904
- }
1905
-
1906
- var __decorate$f = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
1907
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1908
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1909
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1910
- return c > 3 && r && Object.defineProperty(target, key, r), r;
1911
- };
1912
- /**
1913
- * The text selection controller
1914
- */
1915
- class SelectionController extends VegaSlimmer {
1916
- constructor() {
1917
- super(...arguments);
1918
- this.currentRange = new RTERange();
1919
- this.updateCaretPositionTaskQueue = new SynchronizeTaskQueue(1);
1920
- this.handleSelectionWithDebounce = debounce(this.handleSelectionChange, SelectionController.SELECTION_CHANGE_DEBOUNCE_TIME, this);
1921
- this.pendingRestoreSelectionNodes = [];
1922
- /**
1923
- * Sets the next selection state with specified start and end nodes, offsets, and a timestamp.
1924
- *
1925
- * Example:
1926
- * Before insert text start offset is 0, the new start offset should update to 1
1927
- * Before delete text start offset is 1, the new start offset should update to 0
1928
- *
1929
- */
1930
- this.createUpdateSelectionRangeTask = async () => {
1931
- // add await Promise.resolve to put the code behind to a micro task
1932
- await Promise.resolve();
1933
- const range = this.currentRange.toNativeRange();
1934
- if (range) {
1935
- this.setSelectionRange(range);
1936
- }
1937
- };
1938
- }
1939
- /**
1940
- * Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
1941
- */
1942
- connectedCallback() {
1943
- this.registerSelectionRangeChangeObserver();
1944
- }
1945
- /**
1946
- * Component lifecycle - [disconnectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
1947
- */
1948
- disconnectedCallback() {
1949
- ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorSelectionRangeChange), this.selectionRangeChangeObserver);
1950
- }
1951
- /**
1952
- * Component lifecycle - [componentDidLoad]{@link VegaRichTextEditor.componentDidLoad}
1953
- */
1954
- componentDidLoad() {
1955
- document.addEventListener('selectionchange', this.handleSelectionWithDebounce);
1956
- }
1957
- /**
1958
- * Watches the internal value of the editor
1959
- */
1960
- watchValueUpdate() {
1961
- this.prepareRestoreSelectionState();
1962
- this.restoreSelection();
1963
- }
1964
- /**
1965
- * Update the caret position after the component re-render
1966
- */
1967
- async updateCaretPosition() {
1968
- if (this.updateCaretPositionTaskQueue.queue.length) {
1969
- await this.updateCaretPositionTaskQueue.runTask();
1970
- }
1971
- }
1972
- /**
1973
- * Get the current RTE selection range
1974
- *
1975
- * @returns {RTERange} - The current RTE selection range
1976
- */
1977
- getCurrentRange() {
1978
- return this.currentRange;
1979
- }
1980
- /**
1981
- * Get the selected rich text node
1982
- *
1983
- * @returns {RTENode[]} Selected rich text nodes
1984
- */
1985
- getSelectedNodes() {
1986
- return Array.from(this.selectionMap.values()).flat();
1987
- }
1988
- /**
1989
- * Get the selected rich text blocks
1990
- *
1991
- * @returns {RTEBlock[]} Selected rich text blocks
1992
- */
1993
- getSelectedBlocks() {
1994
- return Array.from(this.selectionMap.keys());
1995
- }
1996
- /**
1997
- * Set the selection state
1998
- *
1999
- * @param {RTESelectionState} state - The selection state to set
2000
- */
2001
- setSelectionState(state) {
2002
- this.selectionState = state;
2003
- }
2004
- /**
2005
- * Sets the next selection state with specified start and end nodes, offsets, push the update task to a queue
2006
- *
2007
- * @param {SelectionStateType['startNode']} startNode - The starting node of the selection range. It is a Node object representing the node where the selection range starts.
2008
- * @param {number} startOffset - The `startNode` where the selection range should start. It indicates the position within the `startNode` where the selection should begin.
2009
- * @param {SelectionStateType['endNode']} [endNode] - The ending node of the selection range. If a value is provided for `endNode`, it will be used as the ending node of the selection range.
2010
- * @param {number} [endOffset] - The ending offset within the `endNode` where the selection range should end.
2011
- * @param {boolean} [immediatelyRun] - Should the task run immediately. default is false
2012
- */
2013
- enqueueSelectionRangeFutureState(startNode, startOffset, endNode, endOffset, immediatelyRun = false) {
2014
- endNode = endNode || startNode;
2015
- endOffset = endOffset || endOffset === 0 ? endOffset : startOffset;
2016
- this.currentRange = this.currentRange.updateRTERange({ startNode, endNode, startOffset, endOffset });
2017
- void this.updateCaretPositionTaskQueue.enqueue({
2018
- /** Add task to the queue and run it until component did render */
2019
- run: async () => {
2020
- try {
2021
- await this.createUpdateSelectionRangeTask();
2022
- }
2023
- catch (e) {
2024
- LogUtility.error('Set range error.', e);
2025
- }
2026
- },
2027
- }, immediatelyRun);
2028
- }
2029
- /**
2030
- * Set selection with a new range
2031
- *
2032
- * @param {Range} range - The range to set
2033
- */
2034
- setSelectionRange(range) {
2035
- const selection = this.getSelection();
2036
- if (selection) {
2037
- selection.removeAllRanges();
2038
- selection.addRange(range);
2039
- this.saveSelection();
2040
- }
2041
- }
2042
- /**
2043
- * Save the current selection range detail
2044
- */
2045
- saveSelection() {
2046
- const selection = this.getSelection();
2047
- // The range is out of date if the queue is not empty, or the range is update by the composition text insert, so we should not update the RTERange
2048
- if (selection &&
2049
- selection.rangeCount > 0 &&
2050
- this.updateCaretPositionTaskQueue.queue.length === 0 &&
2051
- !this.insertCompositionTextController.isComposing()) {
2052
- const range = selection.getRangeAt(0);
2053
- const { startContainer: startNode, endContainer: endNode, startOffset, endOffset } = range;
2054
- this.currentRange = this.currentRange.updateRTERange({ startNode, endNode, startOffset, endOffset }, range);
2055
- }
2056
- }
2057
- /**
2058
- * Restore the selection to the current selected nodes
2059
- */
2060
- restoreSelection() {
2061
- if (this.selectionState) {
2062
- const { startNode, endNode, startOffset, endOffset } = this.selectionState.range;
2063
- if (startNode instanceof RTETextNode && startNode === endNode && startNode.text.length === 0) {
2064
- this.enqueueSelectionRangeFutureState(startNode, ZERO_WIDTH_SPACE.length);
2065
- }
2066
- else {
2067
- this.enqueueSelectionRangeFutureState(startNode, startOffset, endNode, endOffset);
2068
- }
2069
- this.selectionState = null;
2070
- }
2071
- }
2072
- /**
2073
- * Get the rich text content selected range
2074
- *
2075
- * @returns {Selection} A [Selection](https://developer.mozilla.org/en-US/docs/Web/API/Selection) object
2076
- */
2077
- getSelection() {
2078
- const richTextContentRef = this.vegaRichTextEditorRenderer.getRichTextContentRef();
2079
- return ShadowSelectionPolyfill$1.getSelection(richTextContentRef.shadowRoot);
2080
- }
2081
- /**
2082
- * Get selected rich text
2083
- */
2084
- handleSelectionChange() {
2085
- if (this.disabled)
2086
- return;
2087
- const selection = this.getSelection();
2088
- if (!selection || selection.rangeCount === 0)
2089
- return;
2090
- this.clearSelectionMap();
2091
- this.saveSelection();
2092
- const range = selection.getRangeAt(0);
2093
- const commonAncestor = range.commonAncestorContainer;
2094
- const selectedNodes = [];
2095
- /**
2096
- * Rich text node filter
2097
- *
2098
- * @param {Node} node - Start node
2099
- */
2100
- const filterNode = (node) => {
2101
- if (!range.intersectsNode(node)) {
2102
- return;
2103
- }
2104
- if (node.nodeType === Node.TEXT_NODE) {
2105
- const currentNode = node.parentElement;
2106
- const nodeEntity = stateEntityRenderingRegistry.getEntityByDOM(currentNode);
2107
- if (nodeEntity instanceof RTENode) {
2108
- selectedNodes.push(nodeEntity);
2109
- return;
2110
- }
2111
- }
2112
- if (node.nodeType === Node.ELEMENT_NODE) {
2113
- const entityElement = node.nodeName === 'VEGA-RICH-TEXT-IMAGE-EDITOR'
2114
- ? node.querySelector('img')
2115
- : node;
2116
- const nodeEntity = stateEntityRenderingRegistry.getEntityByDOM(entityElement);
2117
- if (nodeEntity instanceof RTENode) {
2118
- selectedNodes.push(nodeEntity);
2119
- return;
2120
- }
2121
- }
2122
- node.childNodes.forEach(filterNode);
2123
- };
2124
- filterNode(commonAncestor);
2125
- selectedNodes.forEach((node) => {
2126
- if (this.selectionMap.has(node.parentBlock)) {
2127
- this.selectionMap.get(node.parentBlock).push(node);
2128
- }
2129
- else {
2130
- this.selectionMap.set(node.parentBlock, [node]);
2131
- }
2132
- });
2133
- this.getSelectedNodes().forEach((node) => node.apply(new SelectionChangeAction(range)));
2134
- }
2135
- /**
2136
- * Clear the selection map
2137
- */
2138
- clearSelectionMap() {
2139
- this.getSelectedNodes().forEach((node) => {
2140
- node.annotationMap.delete(InternalAnnotationTypeEnum.SELECTION_RANGE);
2141
- });
2142
- this.selectionMap = new Map();
2143
- }
2144
- /**
2145
- * Check if the selection range change is acceptable
2146
- *
2147
- * @returns {boolean} - Returns a boolean value.
2148
- */
2149
- isAcceptableSelectionRangeChange() {
2150
- return true;
2151
- }
2152
- /**
2153
- * Register the selection range change observer
2154
- */
2155
- registerSelectionRangeChangeObserver() {
2156
- this.selectionRangeChangeObserver = new Observer(this.isAcceptableSelectionRangeChange.bind(this), (payload) => {
2157
- this.pendingRestoreSelectionNodes.push(payload.node);
2158
- });
2159
- ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorSelectionRangeChange), this.selectionRangeChangeObserver);
2160
- }
2161
- /**
2162
- * Prepare the selection state to restore
2163
- */
2164
- prepareRestoreSelectionState() {
2165
- if (this.pendingRestoreSelectionNodes.length > 0) {
2166
- const startNode = this.pendingRestoreSelectionNodes[0];
2167
- const endNode = this.pendingRestoreSelectionNodes.length > 1
2168
- ? this.pendingRestoreSelectionNodes[this.pendingRestoreSelectionNodes.length - 1]
2169
- : startNode;
2170
- const { startOffset, endOffset, endContainer, startContainer } = this.currentRange;
2171
- const nodesInCurrentRange = stateEntityRenderingRegistry.getDOMByEntity(startNode) === startContainer.parentElement &&
2172
- stateEntityRenderingRegistry.getDOMByEntity(endNode) === endContainer.parentElement;
2173
- if (nodesInCurrentRange) {
2174
- this.currentRange = this.currentRange.updateRTERange({
2175
- startNode,
2176
- endNode,
2177
- startOffset,
2178
- endOffset,
2179
- });
2180
- this.selectionState = new RTESelectionState(this.currentRange);
2181
- }
2182
- else {
2183
- this.currentRange = this.currentRange.updateRTERange({
2184
- startNode,
2185
- endNode,
2186
- startOffset: 0,
2187
- endOffset: endNode.text.length,
2188
- });
2189
- this.selectionState = new RTESelectionState(this.currentRange);
2190
- }
2191
- this.pendingRestoreSelectionNodes = [];
2192
- }
2193
- }
2194
- }
2195
- SelectionController.SELECTION_CHANGE_DEBOUNCE_TIME = 50;
2196
- __decorate$f([
2197
- MapToComponentField()
2198
- ], SelectionController.prototype, "vegaRichTextEditorRenderer", void 0);
2199
- __decorate$f([
2200
- MapToComponentField({ writable: true })
2201
- ], SelectionController.prototype, "selectionMap", void 0);
2202
- __decorate$f([
2203
- MapToComponentField()
2204
- ], SelectionController.prototype, "host", void 0);
2205
- __decorate$f([
2206
- MapToComponentField()
2207
- ], SelectionController.prototype, "value", void 0);
2208
- __decorate$f([
2209
- MapToComponentField()
2210
- ], SelectionController.prototype, "disabled", void 0);
2211
- __decorate$f([
2212
- MapToComponentField()
2213
- ], SelectionController.prototype, "valueController", void 0);
2214
- __decorate$f([
2215
- MapToComponentField()
2216
- ], SelectionController.prototype, "insertCompositionTextController", void 0);
2217
- __decorate$f([
2218
- MapToComponentField()
2219
- ], SelectionController.prototype, "historyController", void 0);
2220
- __decorate$f([
2221
- MapToComponentMethod('connectedCallback')
2222
- ], SelectionController.prototype, "connectedCallback", null);
2223
- __decorate$f([
2224
- MapToComponentMethod('disconnectedCallback')
2225
- ], SelectionController.prototype, "disconnectedCallback", null);
2226
- __decorate$f([
2227
- MapToComponentMethod('componentDidLoad')
2228
- ], SelectionController.prototype, "componentDidLoad", null);
2229
- __decorate$f([
2230
- MapToComponentMethod('watchValueUpdate')
2231
- ], SelectionController.prototype, "watchValueUpdate", null);
2232
- __decorate$f([
2233
- MapToComponentMethod('componentDidUpdate')
2234
- ], SelectionController.prototype, "updateCaretPosition", null);
2235
-
2236
- /**
2237
- * Represents the state of the RTE
2238
- */
2239
- class RTEEditorState {
2240
- constructor(content, selection) {
2241
- this.content = content.clone(true);
2242
- this.selection = selection.clone();
2243
- this.refreshSelectionNodes();
2244
- }
2245
- /**
2246
- * Clones the editor state, updating the content and selection based on the provided content.
2247
- *
2248
- * @returns {RTEEditorState} A new instance of RTEEditorState with the updated content and selection.
2249
- */
2250
- clone() {
2251
- return new RTEEditorState(this.content, this.selection);
2252
- }
2253
- /**
2254
- * Refreshes the selection nodes in the editor state.
2255
- */
2256
- refreshSelectionNodes() {
2257
- const { startNode: oldStartNode, endNode: oldEndNode, startOffset, endOffset, } = this.selection.range;
2258
- if (oldStartNode && oldEndNode) {
2259
- const startNode = this.content.findNodeById(oldStartNode.id);
2260
- const endNode = this.content.findNodeById(oldEndNode.id);
2261
- if (startNode && endNode) {
2262
- this.selection.range.updateRTERange({
2263
- startNode,
2264
- endNode,
2265
- startOffset,
2266
- endOffset,
2267
- });
2268
- }
2269
- }
2270
- }
2271
- }
2272
-
2273
- var __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
2274
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2275
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2276
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2277
- return c > 3 && r && Object.defineProperty(target, key, r), r;
2278
- };
2279
- /**
2280
- * The value controller is responsible for updating the value of the rich text editor.
2281
- */
2282
- class ValueController extends VegaSlimmer {
2283
- /**
2284
- * Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.connectedCallback}
2285
- */
2286
- connectedCallback() {
2287
- const flushChangesWithDebounce = debounce(() => {
2288
- void this.valueController.flushChanges(this.value);
2289
- }, ValueController.VALUE_CHANGE_DEBOUNCE_TIME, this);
2290
- this.flushChangeObserver = new Observer(this.isAcceptableFlushChange.bind(this), flushChangesWithDebounce);
2291
- ChangeManager.register(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
2292
- }
2293
- /**
2294
- * Component lifecycle - [connectedCallback]{@link VegaRichTextEditor.disconnectedCallback}
2295
- */
2296
- disconnectedCallback() {
2297
- ChangeManager.unregister(domNodeSubjectFactory.getSubject(this.host, VegaInternalRichTextEditorFlushChanges), this.flushChangeObserver);
2298
- }
2299
- /**
2300
- * Component lifecycle - [componentWillLoad]{@link VegaRichTextEditor.componentWillLoad}
2301
- */
2302
- componentWillLoad() {
2303
- if (this.value && !(this.value instanceof VegaRTEContent)) {
2304
- this.value = VegaRTEContent.fromJSON(this.value);
2305
- }
2306
- }
2307
- /**
2308
- * Watches the value of the editor and updates the internal value.
2309
- */
2310
- watchValueUpdate() {
2311
- if (this.value && !(this.value instanceof VegaRTEContent)) {
2312
- this.value = VegaRTEContent.fromJSON(this.value);
2313
- }
2314
- else if (!this.value || this.value.blocks.length === 0) {
2315
- this.value = VegaRTEContent.createEmptyContent();
2316
- }
2317
- else {
2318
- this.changeEventEmitter.emit(this.value);
2319
- ChangeManager.notify(FORM_ELEMENT_VALUE_CHANGE, {
2320
- host: this.host,
2321
- detail: this.value,
2322
- });
2323
- }
2324
- }
2325
- /**
2326
- * Updates the value of the editor and restore the selection.
2327
- *
2328
- * @param {VegaRTEContent} newValue The new value to set.
2329
- * @param {boolean} recordHistory - Whether to record the change in history.
2330
- */
2331
- async flushChanges(newValue, recordHistory = true) {
2332
- if (recordHistory) {
2333
- this.historyController.registerHistory(new RTEEditorState(newValue, new RTESelectionState(this.selectionController.getCurrentRange())));
2334
- }
2335
- this.value = newValue.clone();
2336
- await waitForComponentDidRender(this.host);
2337
- }
2338
- /**
2339
- * Determines whether the observer should accept changes.
2340
- *
2341
- * @returns {boolean} Always returns true in the current implementation.
2342
- */
2343
- isAcceptableFlushChange() {
2344
- return true;
2345
- }
2346
- }
2347
- ValueController.VALUE_CHANGE_DEBOUNCE_TIME = 50;
2348
- __decorate$e([
2349
- MapToComponentField()
2350
- ], ValueController.prototype, "host", void 0);
2351
- __decorate$e([
2352
- MapToComponentField({ writable: true })
2353
- ], ValueController.prototype, "value", void 0);
2354
- __decorate$e([
2355
- MapToComponentField()
2356
- ], ValueController.prototype, "changeEventEmitter", void 0);
2357
- __decorate$e([
2358
- MapToComponentField()
2359
- ], ValueController.prototype, "valueController", void 0);
2360
- __decorate$e([
2361
- MapToComponentField()
2362
- ], ValueController.prototype, "historyController", void 0);
2363
- __decorate$e([
2364
- MapToComponentField()
2365
- ], ValueController.prototype, "selectionController", void 0);
2366
- __decorate$e([
2367
- MapToComponentMethod('connectedCallback')
2368
- ], ValueController.prototype, "connectedCallback", null);
2369
- __decorate$e([
2370
- MapToComponentMethod('disconnectedCallback')
2371
- ], ValueController.prototype, "disconnectedCallback", null);
2372
- __decorate$e([
2373
- MapToComponentMethod('componentWillLoad')
2374
- ], ValueController.prototype, "componentWillLoad", null);
2375
- __decorate$e([
2376
- MapToComponentMethod('watchValueUpdate')
2377
- ], ValueController.prototype, "watchValueUpdate", null);
2378
-
2379
- /**
2380
- * The rich text content controller
2381
- */
2382
- class RichTextContentController {
2383
- constructor(editor) {
2384
- this.editor = editor;
2385
- }
2386
- /**
2387
- * Sync rich text content editable with disabled property
2388
- *
2389
- */
2390
- syncRichTextContentEditable() {
2391
- this.editor.richTextContentEditable = !this.editor.disabled;
2392
- }
2393
- }
2394
-
2395
- const ROOT_CONTAINER_CLASS_NAME = 'rich-text-content';
2396
- /** This code snippet is defining an abstract class named `BaseHandler` with an abstract method `execute`. */
2397
- class BaseHandler {
2398
- /**
2399
- * The function `execute` initializes the current state and selection, and then handles an event if provided.
2400
- *
2401
- * @param {VegaRTEContent} currentState - The current state of the VegaRTE content.
2402
- * @param {SelectionController} selectionController - Manages the selection of items in the user interface.
2403
- * @param {HTMLElement} richTextEditor - The current rich text editor component
2404
- * @param {InputEvent} [event] - It is used to pass an input event to the method for handling.
2405
- */
2406
- execute(currentState, selectionController, richTextEditor, event) {
2407
- this.initCurrentStateAndSelection(currentState, selectionController);
2408
- this.setCurrentRichTextEditor(richTextEditor);
2409
- this.handleEvent(event);
2410
- }
2411
- /**
2412
- * The function `isRootContainer` checks if an HTML element is a root container with a class of 'rich-text-content'.
2413
- *
2414
- * @param {HTMLElement} element - HTMLElement
2415
- * @returns {boolean} The boolean value
2416
- */
2417
- isRootContainer(element) {
2418
- return (element &&
2419
- element.nodeType === Node.ELEMENT_NODE &&
2420
- element.classList.contains(ROOT_CONTAINER_CLASS_NAME));
2421
- }
2422
- /**
2423
- * Checks if a given HTML element represents an empty paragraph containing only a line break element.
2424
- *
2425
- * @param {HTMLElement} node - An HTMLElement node that represents a paragraph element in the HTML document.
2426
- * @returns {boolean} boolean result
2427
- */
2428
- isEmptyParagraph(node) {
2429
- return node && node.childNodes && node.childNodes.length === 0;
2430
- }
2431
- /**
2432
- * Removes selected nodes within a range in a rich text editor content.
2433
- * The method is only used for different nodes are selected
2434
- *
2435
- * @param {boolean} [mergeNode] Merge start node and end node or not, default value is false.
2436
- * @returns {RTENode} The range start node, usually the start node is the first item of selectedNodes, if the selectedNodes is all removed, the start node will be a new text node.
2437
- */
2438
- removeSelectionRange(mergeNode = false) {
2439
- ChangeManager.notify(domNodeSubjectFactory.getSubject(this.richTextEditorRef, VegaInternalRichTextEditDeleteSelectedNodes), { host: this.richTextEditorRef, detail: mergeNode });
2440
- const range = this.selectionController.getCurrentRange();
2441
- const selectedNodes = this.selectionController.getSelectedNodes();
2442
- return range.startNode || selectedNodes[0];
2443
- }
2444
- /**
2445
- * Creates a new paragraph with an empty text node and returns it.
2446
- *
2447
- * @returns {RTETextBlock} An empty paragraph with a unique identifier and a text node appended to it.
2448
- */
2449
- createEmptyParagraph() {
2450
- const paragraph = new RTETextBlock(generateUUID(), 'paragraph');
2451
- const textNode = new RTETextNode(`${paragraph.id}1`, '', paragraph);
2452
- paragraph.apply(new AppendChildNodesAction([textNode]));
2453
- return paragraph;
2454
- }
2455
- /**
2456
- * The function initializes the current state and selection controller in TypeScript.
2457
- *
2458
- * @param {VegaRTEContent} currentState - The current state of a Vega runtime environment content.
2459
- * @param {SelectionController} selectionController - It is used to manage the selection of content within the VegaRTE editor.
2460
- */
2461
- initCurrentStateAndSelection(currentState, selectionController) {
2462
- this.currentState = currentState;
2463
- this.selectionController = selectionController;
2464
- }
2465
- /**
2466
- * Queries the rich text editor element from the input event target.
2467
- *
2468
- * @param {HTMLElement} richTextEditor - The current rich text editor component
2469
- */
2470
- setCurrentRichTextEditor(richTextEditor) {
2471
- this.richTextEditorRef = richTextEditor;
2472
- }
2473
- }
2474
-
2475
- /**
2476
- * Insert a new node before a existing node
2477
- *
2478
- * @example currentNode.parentBlock.apply(new InsertNodesBeforeAction(currentNode, newNode, ...))
1785
+ * Insert a new node before a existing node
1786
+ *
1787
+ * @example currentNode.parentBlock.apply(new InsertNodesBeforeAction(currentNode, newNode, ...))
2479
1788
  */
2480
1789
  class InsertNodesBeforeAction extends ModifyContentAction {
2481
1790
  constructor(referNode, ...nodesToBeInserted) {
@@ -2596,11 +1905,13 @@ class InsertParagraphHandler extends BaseHandler {
2596
1905
  */
2597
1906
  handleEvent() {
2598
1907
  const selectedBlocks = this.selectionController.getSelectedBlocks();
2599
- if (selectedBlocks.length < 2) {
2600
- this.breakSingleBlock();
2601
- }
2602
- else {
2603
- this.breakMultipleBlocks();
1908
+ if (selectedBlocks.length) {
1909
+ if (selectedBlocks.length < 2) {
1910
+ this.breakSingleBlock();
1911
+ }
1912
+ else {
1913
+ this.breakMultipleBlocks();
1914
+ }
2604
1915
  }
2605
1916
  }
2606
1917
  /**
@@ -2714,11 +2025,13 @@ class InsertLineBreakHandler extends BaseHandler {
2714
2025
  if (this.isRootContainer(range.startContainer)) {
2715
2026
  this.breakNewBlock();
2716
2027
  }
2717
- if (selectedBlocks.length < 2) {
2718
- this.breakSingleBlock();
2719
- }
2720
- else {
2721
- this.breakMultipleBlocks();
2028
+ if (selectedBlocks.length) {
2029
+ if (selectedBlocks.length < 2) {
2030
+ this.breakSingleBlock();
2031
+ }
2032
+ else {
2033
+ this.breakMultipleBlocks();
2034
+ }
2722
2035
  }
2723
2036
  }
2724
2037
  /**
@@ -3622,12 +2935,117 @@ class OlToRTEListBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3622
2935
  * @returns {boolean} - boolean.
3623
2936
  */
3624
2937
  shouldProceedToElementChildren() {
3625
- return true;
2938
+ return true;
2939
+ }
2940
+ }
2941
+
2942
+ /** Transform img in span or other inline element to image block DTO */
2943
+ class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
2944
+ /**
2945
+ * Can be handle.
2946
+ *
2947
+ * @param {HTMLElement[]} elementsArray - Current elements.
2948
+ * @param {number} currentIndex - Current element index.
2949
+ * @returns {number} - can be handled element count.
2950
+ */
2951
+ canHandle(elementsArray, currentIndex) {
2952
+ const element = elementsArray[currentIndex];
2953
+ return element.nodeType === Node.ELEMENT_NODE &&
2954
+ element.textContent === '' &&
2955
+ element.querySelector('img')
2956
+ ? 1
2957
+ : 0;
2958
+ }
2959
+ /**
2960
+ * Parse to a image block.
2961
+ *
2962
+ * @param {HTMLElement[]} elementsArray - Current elements.
2963
+ * @returns {Nullable<RTEContentBlock>} - Image block.
2964
+ */
2965
+ handle(elementsArray) {
2966
+ const element = elementsArray[0].querySelector('img');
2967
+ return RTEImageBlock.from({
2968
+ id: generateUUID(),
2969
+ type: 'image',
2970
+ nodes: [
2971
+ {
2972
+ id: generateUUID(),
2973
+ type: 'image',
2974
+ url: element.src,
2975
+ annotations: {
2976
+ size: 'md',
2977
+ alt: element.alt,
2978
+ },
2979
+ },
2980
+ ],
2981
+ annotations: this.generateBlockAnnotations(element),
2982
+ });
2983
+ }
2984
+ /* istanbul ignore next */
2985
+ /**
2986
+ * Append child blocks.
2987
+ */
2988
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
2989
+ appendChildBlocks() { }
2990
+ /**
2991
+ * Should continue process to child elements.
2992
+ *
2993
+ * @returns {boolean} - boolean.
2994
+ */
2995
+ shouldProceedToElementChildren() {
2996
+ return false;
2997
+ }
2998
+ }
2999
+
3000
+ /** Transform child element of UL element which are not LI element to list item block DTO */
3001
+ class ULNotLiChildToRTEListItemBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3002
+ /**
3003
+ * Can be handle.
3004
+ *
3005
+ * @param {HTMLElement[]} elementsArray - Current elements.
3006
+ * @param {number} currentIndex - Current element index.
3007
+ * @returns {number} - can be handled element count.
3008
+ */
3009
+ canHandle(elementsArray, currentIndex) {
3010
+ const element = elementsArray[currentIndex];
3011
+ const parent = element.parentElement;
3012
+ return element.nodeName !== 'LI' && parent && ['UL', 'OL'].includes(parent.nodeName) ? 1 : 0;
3013
+ }
3014
+ /**
3015
+ * Parse to a list item block.
3016
+ *
3017
+ * @param {HTMLElement[]} elementsArray - Current elements.
3018
+ * @returns {Nullable<RTEContentBlock>} - List item block.
3019
+ */
3020
+ handle(elementsArray) {
3021
+ const nodes = this.generateChildNodes(elementsArray);
3022
+ if (nodes.length === 0)
3023
+ return null;
3024
+ return RTEListItemBlock.from({
3025
+ id: generateUUID(),
3026
+ type: 'list-item',
3027
+ nodes: nodes,
3028
+ annotations: {},
3029
+ });
3030
+ }
3031
+ /* istanbul ignore next */
3032
+ /**
3033
+ * Append child blocks.
3034
+ */
3035
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
3036
+ appendChildBlocks() { }
3037
+ /**
3038
+ * Should continue process to child elements.
3039
+ *
3040
+ * @returns {boolean} - boolean.
3041
+ */
3042
+ shouldProceedToElementChildren() {
3043
+ return false;
3626
3044
  }
3627
3045
  }
3628
3046
 
3629
- /** Transform img in span or other inline element to image block DTO */
3630
- class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3047
+ /** Transform other editor code element which has attribute data-language to RTE code block DTO */
3048
+ class JiraCodeToRTECodeBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3631
3049
  /**
3632
3050
  * Can be handle.
3633
3051
  *
@@ -3636,37 +3054,31 @@ class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3636
3054
  * @returns {number} - can be handled element count.
3637
3055
  */
3638
3056
  canHandle(elementsArray, currentIndex) {
3639
- const element = elementsArray[currentIndex];
3640
- return element.nodeType === Node.ELEMENT_NODE &&
3641
- element.textContent === '' &&
3642
- element.querySelector('img')
3057
+ return (elementsArray[currentIndex].tagName === 'PRE' ||
3058
+ elementsArray[currentIndex].tagName === 'CODE') &&
3059
+ elementsArray[currentIndex].hasAttribute('data-language')
3643
3060
  ? 1
3644
3061
  : 0;
3645
3062
  }
3646
3063
  /**
3647
- * Parse to a image block.
3064
+ * Parse to a code block.
3648
3065
  *
3649
3066
  * @param {HTMLElement[]} elementsArray - Current elements.
3650
- * @returns {Nullable<RTEContentBlock>} - Image block.
3067
+ * @returns {Nullable<RTECodeBlock>} - Code block.
3651
3068
  */
3652
3069
  handle(elementsArray) {
3653
- const element = elementsArray[0].querySelector('img');
3654
- return RTEImageBlock.from({
3655
- id: generateUUID(),
3656
- type: 'image',
3657
- nodes: [
3658
- {
3659
- id: generateUUID(),
3660
- type: 'image',
3661
- url: element.src,
3662
- annotations: {
3663
- size: 'md',
3664
- alt: element.alt,
3665
- },
3666
- },
3667
- ],
3668
- annotations: this.generateBlockAnnotations(element),
3669
- });
3070
+ const codeRef = elementsArray[0];
3071
+ if (codeRef) {
3072
+ const content = codeRef.textContent;
3073
+ const language = codeRef.dataset
3074
+ .language;
3075
+ return RTECodeBlock.from({
3076
+ id: generateUUID(),
3077
+ type: 'code-block',
3078
+ content,
3079
+ language,
3080
+ });
3081
+ }
3670
3082
  }
3671
3083
  /* istanbul ignore next */
3672
3084
  /**
@@ -3684,36 +3096,48 @@ class SpanImageToRTEImageBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3684
3096
  }
3685
3097
  }
3686
3098
 
3687
- /** Transform child element of UL element which are not LI element to list item block DTO */
3688
- class ULNotLiChildToRTEListItemBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3099
+ /** Transform vega-code-block element to code block DTO */
3100
+ class VegaCodeBlockToRTECodeBlockStrategy extends JiraCodeToRTECodeBlockStrategy {
3689
3101
  /**
3690
3102
  * Can be handle.
3691
3103
  *
3104
+ * TODO: Update the browser clipboard data to fix the issue with nested vega-code-block elements.
3105
+ * In safari the html snippet will be like: <vega-code-block><p><span>paragraph</span></p><vega-code-block></vega-code-block></vega-code-block>
3106
+ * The vega-code-block nested inside the vega-code-block, so we need to check the child element.
3107
+ *
3692
3108
  * @param {HTMLElement[]} elementsArray - Current elements.
3693
3109
  * @param {number} currentIndex - Current element index.
3694
3110
  * @returns {number} - can be handled element count.
3695
3111
  */
3696
3112
  canHandle(elementsArray, currentIndex) {
3697
- const element = elementsArray[currentIndex];
3698
- const parent = element.parentElement;
3699
- return element.nodeName !== 'LI' && parent && ['UL', 'OL'].includes(parent.nodeName) ? 1 : 0;
3113
+ return (elementsArray[currentIndex].tagName === 'VEGA-CODE-BLOCK' &&
3114
+ !!elementsArray[currentIndex].querySelector('vega-code-block') === false) ||
3115
+ this.isCodeBlockContainer(elementsArray[currentIndex])
3116
+ ? 1
3117
+ : 0;
3700
3118
  }
3701
3119
  /**
3702
- * Parse to a list item block.
3120
+ * Parse to a code block.
3703
3121
  *
3704
3122
  * @param {HTMLElement[]} elementsArray - Current elements.
3705
- * @returns {Nullable<RTEContentBlock>} - List item block.
3123
+ * @returns {Nullable<RTECodeBlock>} - Code block.
3706
3124
  */
3707
3125
  handle(elementsArray) {
3708
- const nodes = this.generateChildNodes(elementsArray);
3709
- if (nodes.length === 0)
3710
- return null;
3711
- return RTEListItemBlock.from({
3712
- id: generateUUID(),
3713
- type: 'list-item',
3714
- nodes: nodes,
3715
- annotations: {},
3716
- });
3126
+ const codeBlockElement = this.isCodeBlockContainer(elementsArray[0])
3127
+ ? elementsArray[0].querySelector('vega-code-block')
3128
+ : elementsArray[0];
3129
+ const code = codeBlockElement.querySelector('code');
3130
+ if (code) {
3131
+ return super.handle([code]); // Call the parent method to handle the code element
3132
+ }
3133
+ else if (codeBlockElement.hasAttribute('data-content')) {
3134
+ // The code element in shadow dom could be empty in firefox.
3135
+ // eslint-disable-next-line no-restricted-globals
3136
+ const code = document.createElement('code');
3137
+ code.textContent = codeBlockElement.dataset.content;
3138
+ code.dataset.language = codeBlockElement.dataset.language;
3139
+ return super.handle([code]); // Call the parent method to handle the code element
3140
+ }
3717
3141
  }
3718
3142
  /* istanbul ignore next */
3719
3143
  /**
@@ -3729,6 +3153,17 @@ class ULNotLiChildToRTEListItemBlockStrategy extends BlockToRTEBlockStrategyAbst
3729
3153
  shouldProceedToElementChildren() {
3730
3154
  return false;
3731
3155
  }
3156
+ /**
3157
+ * Checks if the given element is a code block container.
3158
+ *
3159
+ * @param {HTMLElement} element - The element to check.
3160
+ * @returns {boolean} - Boolean result.
3161
+ */
3162
+ isCodeBlockContainer(element) {
3163
+ return (element.tagName === 'PRE' &&
3164
+ element.classList.contains('code-block-container') &&
3165
+ element.querySelectorAll('vega-code-block').length === 1);
3166
+ }
3732
3167
  }
3733
3168
 
3734
3169
  /** Element to DTO processor */
@@ -3739,6 +3174,8 @@ class ElementToDtoStrategyProcessor {
3739
3174
  new OlToRTEListBlockStrategy(),
3740
3175
  new ULNotLiChildToRTEListItemBlockStrategy(),
3741
3176
  new LiToRTEListItemBlockStrategy(),
3177
+ new VegaCodeBlockToRTECodeBlockStrategy(),
3178
+ new JiraCodeToRTECodeBlockStrategy(),
3742
3179
  new InlineBlockToRTETextBlockStrategy(),
3743
3180
  new ImgToRTEImageBlockStrategy(),
3744
3181
  new VegaImageToRTEImageBlockStrategy(),
@@ -3853,8 +3290,10 @@ class InsertPasteHandler extends BaseHandler {
3853
3290
  const cursorNode = this.removeSelectionRange();
3854
3291
  /* istanbul ignore next */
3855
3292
  const currentBlock = cursorNode === null || cursorNode === void 0 ? void 0 : cursorNode.parentBlock;
3856
- currentBlock.parent.apply(new InsertBlocksBeforeAction(currentBlock, ...blocks));
3857
- this.switchCaretPositionToNextElement(currentBlock);
3293
+ if (currentBlock) {
3294
+ currentBlock.parent.apply(new InsertBlocksBeforeAction(currentBlock, ...blocks));
3295
+ this.switchCaretPositionToNextElement(currentBlock);
3296
+ }
3858
3297
  }
3859
3298
  /**
3860
3299
  * Format and parse elements from user paste.
@@ -3863,7 +3302,12 @@ class InsertPasteHandler extends BaseHandler {
3863
3302
  * @returns {RTEContentBlock[]} - RTEContentBlock.
3864
3303
  */
3865
3304
  parsePastedElements(event) {
3866
- const pastedHTML = event.dataTransfer.getData('text/html');
3305
+ let pastedHTML = event.dataTransfer.getData('text/html');
3306
+ if (!pastedHTML) {
3307
+ const pastedText = event.dataTransfer.getData('text/plain');
3308
+ pastedHTML = this.parsePlainText(pastedText);
3309
+ }
3310
+ // eslint-disable-next-line no-restricted-globals
3867
3311
  const tempContainer = document.createElement('div');
3868
3312
  tempContainer.innerHTML = pastedHTML;
3869
3313
  return this.elementToDTOProcessor
@@ -3882,9 +3326,23 @@ class InsertPasteHandler extends BaseHandler {
3882
3326
  this.selectionController.enqueueSelectionRangeFutureState(newBlock['nodes'][0], 0);
3883
3327
  }
3884
3328
  }
3329
+ /**
3330
+ * Parses the content of a plain text and formats it into HTML.
3331
+ *
3332
+ * @param {string} content - The content of plain text.
3333
+ * @returns {string} - The formatted HTML string.
3334
+ */
3335
+ parsePlainText(content) {
3336
+ const lines = content.split('\n');
3337
+ return lines
3338
+ .map((line) => {
3339
+ return `<span>${line}</span>`;
3340
+ })
3341
+ .join('<span>\n</span>');
3342
+ }
3885
3343
  }
3886
3344
 
3887
- var __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3345
+ var __decorate$e = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3888
3346
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3889
3347
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
3890
3348
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -3909,7 +3367,8 @@ class UserInputController extends VegaSlimmer {
3909
3367
  e.preventDefault();
3910
3368
  this.initValueIfEmpty();
3911
3369
  // The insertCompositionText type input event can not be prevented, so we process the current action by insertCompositionTextController.
3912
- if (inputType === 'insertCompositionText') {
3370
+ // If the focus node is a non-editable element, we do not process the input event.
3371
+ if (inputType === 'insertCompositionText' || this.isFocusNodeNonEditable()) {
3913
3372
  return;
3914
3373
  }
3915
3374
  this.insertCompositionTextController.removeObserver();
@@ -3937,7 +3396,7 @@ class UserInputController extends VegaSlimmer {
3937
3396
  break;
3938
3397
  }
3939
3398
  if (updateFlag) {
3940
- this.notifyComponentFlushValue();
3399
+ void this.valueController.flushChanges(this.value);
3941
3400
  }
3942
3401
  };
3943
3402
  }
@@ -3972,12 +3431,6 @@ class UserInputController extends VegaSlimmer {
3972
3431
  }
3973
3432
  return this.editableElementRef;
3974
3433
  }
3975
- /**
3976
- * Notifies a change manager with the host and value details and logs the current value.
3977
- */
3978
- notifyComponentFlushValue() {
3979
- void this.valueController.flushChanges(this.value);
3980
- }
3981
3434
  /**
3982
3435
  * Prevents the default behavior of a drag event.
3983
3436
  *
@@ -3998,29 +3451,46 @@ class UserInputController extends VegaSlimmer {
3998
3451
  void this.valueController.flushChanges(VegaRTEContent.fromJSON(defaultParagraph));
3999
3452
  }
4000
3453
  }
3454
+ /**
3455
+ * The code block placeholder element is non-editable, so we need to check if the focus node is a code block placeholder element.
3456
+ *
3457
+ * @returns {boolean} - Returns true if the focus node is a code block placeholder element, otherwise false.
3458
+ */
3459
+ isFocusNodeNonEditable() {
3460
+ const { startContainer, endContainer } = this.selectionController.getCurrentRange();
3461
+ const selectedNodes = this.selectionController.getSelectedNodes();
3462
+ if (startContainer && startContainer === endContainer && selectedNodes.length === 0) {
3463
+ const focusElement = startContainer.nodeType === Node.ELEMENT_NODE
3464
+ ? startContainer
3465
+ : startContainer.parentElement;
3466
+ return (focusElement &&
3467
+ focusElement.classList.contains(RTECodeBlock.CODE_BLOCK_PLACEHOLDER_CLASS_NAME));
3468
+ }
3469
+ return false;
3470
+ }
4001
3471
  }
4002
- __decorate$d([
3472
+ __decorate$e([
4003
3473
  MapToComponentField()
4004
3474
  ], UserInputController.prototype, "host", void 0);
4005
- __decorate$d([
3475
+ __decorate$e([
4006
3476
  MapToComponentField()
4007
3477
  ], UserInputController.prototype, "value", void 0);
4008
- __decorate$d([
3478
+ __decorate$e([
4009
3479
  MapToComponentField()
4010
3480
  ], UserInputController.prototype, "valueController", void 0);
4011
- __decorate$d([
3481
+ __decorate$e([
4012
3482
  MapToComponentField()
4013
3483
  ], UserInputController.prototype, "vegaRichTextEditorRenderer", void 0);
4014
- __decorate$d([
3484
+ __decorate$e([
4015
3485
  MapToComponentField()
4016
3486
  ], UserInputController.prototype, "selectionController", void 0);
4017
- __decorate$d([
3487
+ __decorate$e([
4018
3488
  MapToComponentField()
4019
3489
  ], UserInputController.prototype, "insertCompositionTextController", void 0);
4020
- __decorate$d([
3490
+ __decorate$e([
4021
3491
  MapToComponentMethod('componentDidLoad')
4022
3492
  ], UserInputController.prototype, "addActionListener", null);
4023
- __decorate$d([
3493
+ __decorate$e([
4024
3494
  MapToComponentMethod('disconnectedCallback')
4025
3495
  ], UserInputController.prototype, "removeActionListener", null);
4026
3496
 
@@ -4040,7 +3510,7 @@ class InsertImageToBlockAction extends ModifyContentAction {
4040
3510
  }
4041
3511
  }
4042
3512
 
4043
- var __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3513
+ var __decorate$d = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4044
3514
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4045
3515
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4046
3516
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4129,26 +3599,26 @@ class InsertImageController extends VegaSlimmer {
4129
3599
  }
4130
3600
  }
4131
3601
  }
4132
- __decorate$c([
3602
+ __decorate$d([
4133
3603
  MapToComponentField()
4134
3604
  ], InsertImageController.prototype, "selectionController", void 0);
4135
- __decorate$c([
3605
+ __decorate$d([
4136
3606
  MapToComponentField()
4137
3607
  ], InsertImageController.prototype, "value", void 0);
4138
- __decorate$c([
3608
+ __decorate$d([
4139
3609
  MapToComponentField()
4140
3610
  ], InsertImageController.prototype, "valueController", void 0);
4141
- __decorate$c([
3611
+ __decorate$d([
4142
3612
  MapToComponentField()
4143
3613
  ], InsertImageController.prototype, "vegaRichTextEditorRenderer", void 0);
4144
- __decorate$c([
3614
+ __decorate$d([
4145
3615
  MapToComponentMethod('componentDidLoad')
4146
3616
  ], InsertImageController.prototype, "registerObserver", null);
4147
- __decorate$c([
3617
+ __decorate$d([
4148
3618
  MapToComponentMethod('disconnectedCallback')
4149
3619
  ], InsertImageController.prototype, "unRegisterObserver", null);
4150
3620
 
4151
- var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3621
+ var __decorate$c = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4152
3622
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4153
3623
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4154
3624
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4204,20 +3674,20 @@ class FocusController extends VegaSlimmer {
4204
3674
  this.selectionController.setSelectionRange(range);
4205
3675
  }
4206
3676
  }
4207
- __decorate$b([
3677
+ __decorate$c([
4208
3678
  MapToComponentField()
4209
3679
  ], FocusController.prototype, "vegaRichTextEditorRenderer", void 0);
4210
- __decorate$b([
3680
+ __decorate$c([
4211
3681
  MapToComponentField()
4212
3682
  ], FocusController.prototype, "selectionController", void 0);
4213
- __decorate$b([
3683
+ __decorate$c([
4214
3684
  MapToComponentField()
4215
3685
  ], FocusController.prototype, "valueController", void 0);
4216
- __decorate$b([
3686
+ __decorate$c([
4217
3687
  MapToComponentField()
4218
3688
  ], FocusController.prototype, "value", void 0);
4219
3689
 
4220
- var __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3690
+ var __decorate$b = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4221
3691
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4222
3692
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4223
3693
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4257,14 +3727,14 @@ class TextNodeColorController extends VegaSlimmer {
4257
3727
  return true;
4258
3728
  }
4259
3729
  }
4260
- __decorate$a([
3730
+ __decorate$b([
4261
3731
  MapToComponentMethod('connectedCallback')
4262
3732
  ], TextNodeColorController.prototype, "connectedCallback", null);
4263
- __decorate$a([
3733
+ __decorate$b([
4264
3734
  MapToComponentMethod('disconnectedCallback')
4265
3735
  ], TextNodeColorController.prototype, "disconnectResizeObserver", null);
4266
3736
 
4267
- var __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3737
+ var __decorate$a = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4268
3738
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4269
3739
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4270
3740
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4472,35 +3942,35 @@ class InsertCompositionTextController extends VegaSlimmer {
4472
3942
  this.editableElementRef.dispatchEvent(inputEvent);
4473
3943
  }
4474
3944
  }
4475
- __decorate$9([
3945
+ __decorate$a([
4476
3946
  MapToComponentField()
4477
3947
  ], InsertCompositionTextController.prototype, "selectionController", void 0);
4478
- __decorate$9([
3948
+ __decorate$a([
4479
3949
  MapToComponentField()
4480
3950
  ], InsertCompositionTextController.prototype, "host", void 0);
4481
- __decorate$9([
3951
+ __decorate$a([
4482
3952
  MapToComponentField()
4483
3953
  ], InsertCompositionTextController.prototype, "value", void 0);
4484
- __decorate$9([
3954
+ __decorate$a([
4485
3955
  MapToComponentField()
4486
3956
  ], InsertCompositionTextController.prototype, "valueController", void 0);
4487
- __decorate$9([
3957
+ __decorate$a([
4488
3958
  MapToComponentField()
4489
3959
  ], InsertCompositionTextController.prototype, "userInputController", void 0);
4490
- __decorate$9([
3960
+ __decorate$a([
4491
3961
  MapToComponentField()
4492
3962
  ], InsertCompositionTextController.prototype, "vegaRichTextEditorRenderer", void 0);
4493
- __decorate$9([
3963
+ __decorate$a([
4494
3964
  MapToComponentMethod('componentDidLoad')
4495
3965
  ], InsertCompositionTextController.prototype, "addCompositionTextEventListener", null);
4496
- __decorate$9([
3966
+ __decorate$a([
4497
3967
  MapToComponentMethod('disconnectedCallback')
4498
3968
  ], InsertCompositionTextController.prototype, "removeCompositionTextEventListener", null);
4499
- __decorate$9([
3969
+ __decorate$a([
4500
3970
  MapToComponentMethod('componentDidRender')
4501
3971
  ], InsertCompositionTextController.prototype, "reConnectObserver", null);
4502
3972
 
4503
- var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
3973
+ var __decorate$9 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4504
3974
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4505
3975
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4506
3976
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4558,7 +4028,10 @@ class DeleteSelectedNodesController extends VegaSlimmer {
4558
4028
  if (selectedNodes.length > 1) {
4559
4029
  // Remove all selected nodes except start node and end node(the end image node will be removed), the start node need to get the index of the block
4560
4030
  const shouldRemovedItems = selectedNodes.filter((item) => {
4561
- if (item.type !== 'IMAGE') {
4031
+ if (item instanceof RTECodeBlockNode) {
4032
+ return item !== startNode;
4033
+ }
4034
+ else if (item.type !== 'IMAGE') {
4562
4035
  return item !== startNode && item !== endNode;
4563
4036
  }
4564
4037
  else {
@@ -4572,7 +4045,8 @@ class DeleteSelectedNodesController extends VegaSlimmer {
4572
4045
  this.removeRangeStartAndEndSelectedText();
4573
4046
  /**
4574
4047
  * if the range start node is image and the item is selected, so we need remove the image item, the image block will be removed if the item is the only item.
4575
- * but before remove the image block, we need insert a paragraph to make sure the start block and start node could be get correct before insert text or break paragraph action
4048
+ * but before remove the image block, we need insert a paragraph to make sure the start block and start node could be get correct before insert text or break paragraph action.
4049
+ * the code block node should do the same logic.
4576
4050
  */
4577
4051
  if (startNode instanceof RTEImageNode &&
4578
4052
  startOffset !== 1 &&
@@ -4590,6 +4064,12 @@ class DeleteSelectedNodesController extends VegaSlimmer {
4590
4064
  return startNode.parentBlock.nodes[0];
4591
4065
  }
4592
4066
  }
4067
+ else if (startNode instanceof RTECodeBlockNode) {
4068
+ const paragraph = this.createEmptyParagraph();
4069
+ startNode.parentBlock.parent.apply(new InsertBlocksBeforeAction(startNode.parentBlock, paragraph));
4070
+ startNode.parentBlock.apply(new RemoveChildAction(startNode));
4071
+ return paragraph.nodes[0];
4072
+ }
4593
4073
  return startNode;
4594
4074
  }
4595
4075
  /**
@@ -4639,7 +4119,9 @@ class DeleteSelectedNodesController extends VegaSlimmer {
4639
4119
  endRTENode.parentBlock.apply(new RemoveChildAction(endRTENode.parentBlock.nodes[0]));
4640
4120
  }
4641
4121
  }
4642
- if (startRTENode.parentBlock !== endRTENode.parentBlock) {
4122
+ if (startRTENode instanceof RTETextNode &&
4123
+ endRTENode instanceof RTETextNode &&
4124
+ startRTENode.parentBlock !== endRTENode.parentBlock) {
4643
4125
  startRTENode.parentBlock.apply(new AppendChildNodesAction(endBlock.nodes));
4644
4126
  endBlock.nodes = [];
4645
4127
  }
@@ -4660,26 +4142,28 @@ class DeleteSelectedNodesController extends VegaSlimmer {
4660
4142
  shouldMergeTextNode(nodeA, nodeB) {
4661
4143
  const { annotations: annotationsA } = nodeA.toJSON();
4662
4144
  const { annotations: annotationsB } = nodeB.toJSON();
4663
- return JSON.stringify(annotationsA) === JSON.stringify(annotationsB);
4145
+ return (nodeA instanceof RTETextNode &&
4146
+ nodeB instanceof RTETextNode &&
4147
+ JSON.stringify(annotationsA) === JSON.stringify(annotationsB));
4664
4148
  }
4665
4149
  }
4666
- __decorate$8([
4150
+ __decorate$9([
4667
4151
  MapToComponentField()
4668
4152
  ], DeleteSelectedNodesController.prototype, "host", void 0);
4669
- __decorate$8([
4153
+ __decorate$9([
4670
4154
  MapToComponentField()
4671
4155
  ], DeleteSelectedNodesController.prototype, "selectionController", void 0);
4672
- __decorate$8([
4156
+ __decorate$9([
4673
4157
  MapToComponentField()
4674
4158
  ], DeleteSelectedNodesController.prototype, "value", void 0);
4675
- __decorate$8([
4159
+ __decorate$9([
4676
4160
  MapToComponentMethod('connectedCallback')
4677
4161
  ], DeleteSelectedNodesController.prototype, "addDeleteObserver", null);
4678
- __decorate$8([
4162
+ __decorate$9([
4679
4163
  MapToComponentMethod('disconnectedCallback')
4680
4164
  ], DeleteSelectedNodesController.prototype, "removeDeleteObserver", null);
4681
4165
 
4682
- var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4166
+ var __decorate$8 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4683
4167
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4684
4168
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4685
4169
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
@@ -4793,25 +4277,166 @@ class HistoryController extends KeyboardManagerSlimmer {
4793
4277
  ];
4794
4278
  }
4795
4279
  }
4796
- __decorate$7([
4280
+ __decorate$8([
4797
4281
  MapToComponentField()
4798
4282
  ], HistoryController.prototype, "host", void 0);
4799
- __decorate$7([
4283
+ __decorate$8([
4800
4284
  MapToComponentField()
4801
4285
  ], HistoryController.prototype, "vegaRichTextEditorRenderer", void 0);
4802
- __decorate$7([
4286
+ __decorate$8([
4803
4287
  MapToComponentField()
4804
4288
  ], HistoryController.prototype, "valueController", void 0);
4805
- __decorate$7([
4289
+ __decorate$8([
4806
4290
  MapToComponentField()
4807
4291
  ], HistoryController.prototype, "value", void 0);
4808
- __decorate$7([
4292
+ __decorate$8([
4809
4293
  MapToComponentField()
4810
4294
  ], HistoryController.prototype, "selectionController", void 0);
4811
- __decorate$7([
4295
+ __decorate$8([
4812
4296
  MapToComponentMethod('componentDidLoad')
4813
4297
  ], HistoryController.prototype, "registerInitState", null);
4814
4298
 
4299
+ const rectangleCode = {
4300
+ 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="M320.1 175L384.1 239C394.3 248.4 394.3 263.6 384.1 272.1L320.1 336.1C311.6 346.3 296.4 346.3 287 336.1C277.7 327.6 277.7 312.4 287 303L334.1 256L287 208.1C277.7 199.6 277.7 184.4 287 175C296.4 165.7 311.6 165.7 320.1 175V175zM177.9 256L224.1 303C234.3 312.4 234.3 327.6 224.1 336.1C215.6 346.3 200.4 346.3 191 336.1L127 272.1C117.7 263.6 117.7 248.4 127 239L191 175C200.4 165.7 215.6 165.7 224.1 175C234.3 184.4 234.3 199.6 224.1 208.1L177.9 256zM448 32C483.3 32 512 60.65 512 96V416C512 451.3 483.3 480 448 480H64C28.65 480 0 451.3 0 416V96C0 60.65 28.65 32 64 32H448zM448 80H64C55.16 80 48 87.16 48 96V416C48 424.8 55.16 432 64 432H448C456.8 432 464 424.8 464 416V96C464 87.16 456.8 80 448 80z"/></svg>`,
4301
+ };
4302
+
4303
+ /**
4304
+ * Transform the selected blocks to a code block.
4305
+ *
4306
+ * @example firstBlock.parent.apply(new TransformToCodeBlockAction(selectedBlocks))
4307
+ */
4308
+ class TransformToCodeBlockAction extends ModifyContentAction {
4309
+ constructor(selectedBlocks) {
4310
+ super();
4311
+ this.type = ModifyContentActionType.TRANSFORM_TO_CODE_BLOCK;
4312
+ this.selectedBlocks = selectedBlocks;
4313
+ }
4314
+ }
4315
+
4316
+ var __decorate$7 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
4317
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4318
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4319
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
4320
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
4321
+ };
4322
+ /**
4323
+ * The code block toolbar button slimmer.
4324
+ */
4325
+ class CodeBlockToolbarButtonSlimmer extends ToolbarButtonSlimmer {
4326
+ constructor() {
4327
+ super({
4328
+ icon: 'rectangle-code',
4329
+ tooltip: { text: 'Code Block' },
4330
+ });
4331
+ }
4332
+ /**
4333
+ * The selected blocks should convert to a code block.
4334
+ */
4335
+ onClick() {
4336
+ const selected = this.isSelected();
4337
+ if (!selected) {
4338
+ const selectedBlocks = this.selectionController.getSelectedBlocks();
4339
+ const parentBlock = selectedBlocks[0].parent;
4340
+ const transformToCodeBlockAction = new TransformToCodeBlockAction(selectedBlocks);
4341
+ parentBlock.apply(transformToCodeBlockAction);
4342
+ void this.valueController.flushChanges(this.value);
4343
+ this.selectionController.enqueueSelectionRangeFutureState(transformToCodeBlockAction.newCodeBlock.nodes[0], 0);
4344
+ }
4345
+ }
4346
+ /**
4347
+ * The button will be selected if the selected blocks all code block.
4348
+ *
4349
+ * @returns {boolean} - The code block should selected or not.
4350
+ */
4351
+ isSelected() {
4352
+ const selectBlocks = this.selectionController.getSelectedBlocks();
4353
+ if (selectBlocks.length && selectBlocks.every((block) => block.type === 'code-block')) {
4354
+ return true;
4355
+ }
4356
+ return false;
4357
+ }
4358
+ isDisabled() {
4359
+ const selectBlocks = this.selectionController.getSelectedBlocks();
4360
+ return (super.isDisabled() ||
4361
+ selectBlocks.some((block) => block.type === 'image' || block.type === 'list-item'));
4362
+ }
4363
+ }
4364
+ (() => {
4365
+ VegaInternalIconManager.register({ 'rectangle-code': rectangleCode });
4366
+ })();
4367
+ __decorate$7([
4368
+ MapToComponentField()
4369
+ ], CodeBlockToolbarButtonSlimmer.prototype, "selectionController", void 0);
4370
+ __decorate$7([
4371
+ MapToComponentField()
4372
+ ], CodeBlockToolbarButtonSlimmer.prototype, "valueController", void 0);
4373
+ __decorate$7([
4374
+ MapToComponentField()
4375
+ ], CodeBlockToolbarButtonSlimmer.prototype, "value", void 0);
4376
+
4377
+ /**
4378
+ * The rich text internal code block selection controller.
4379
+ */
4380
+ class InternalCodeBlockSelectionController extends AutoRunWhenReRenderTaskQueueSlimmer {
4381
+ constructor() {
4382
+ super(1);
4383
+ this.focusNodeOffset = 0;
4384
+ /**
4385
+ * The method invoke after the component re-render.
4386
+ */
4387
+ this.doTask = async () => {
4388
+ await this.focusTheCodeBlock(this.shouldFocusNode);
4389
+ };
4390
+ }
4391
+ /**
4392
+ * Update the internal code block selection.
4393
+ *
4394
+ * @param {RTECodeBlockNode} startNode - The internal code block node DTO.
4395
+ * @param {number} startOffset - The content offset.
4396
+ * @param {boolean} immediatelyRun - Whether to invoke the method immediately.
4397
+ */
4398
+ enqueueSelectionRangeFutureState(startNode, startOffset, immediatelyRun) {
4399
+ this.shouldFocusNode = startNode;
4400
+ this.focusNodeOffset = startOffset;
4401
+ super.enqueueTheTaskIntoQueue(immediatelyRun);
4402
+ }
4403
+ /**
4404
+ * Check the code block is actually selected or not. Because the Code block is a shadow dom, so can't detect the content selected state.
4405
+ * We add two placeholder spans at the begin and end position, we could check the placeholder spans selected state to make sure the code block is selected or not.
4406
+ *
4407
+ *
4408
+ * @example
4409
+ * <div>
4410
+ * <span></span>
4411
+ * <vega-code-block></vega-code-block>
4412
+ * <span><span>
4413
+ * </div>
4414
+ * @param {RTECodeBlock} codeBlock - The code block DTO.
4415
+ * @param {Range} range - The range instance.
4416
+ * @returns {boolean} - The boolean result.
4417
+ */
4418
+ isCodeBlockSelected(codeBlock, range) {
4419
+ const codeBlockNode = codeBlock.nodes[0];
4420
+ const entityDom = stateEntityRenderingRegistry.getDOMByEntity(codeBlockNode);
4421
+ return (codeBlock.isSelected() ||
4422
+ (entityDom &&
4423
+ range.intersectsNode(entityDom.nextSibling) &&
4424
+ range.intersectsNode(entityDom.previousSibling)));
4425
+ }
4426
+ /**
4427
+ * Focus the code block component.
4428
+ *
4429
+ * @param {RTECodeBlockNode} node - The code block node DTO.
4430
+ */
4431
+ async focusTheCodeBlock(node) {
4432
+ await Promise.resolve();
4433
+ const entityDom = stateEntityRenderingRegistry.getDOMByEntity(node);
4434
+ if (entityDom) {
4435
+ void entityDom.doFocus();
4436
+ }
4437
+ }
4438
+ }
4439
+
4815
4440
  const vegaRichTextEditorCss = ":host{display:block}:host vega-field-label{margin-bottom:8px}:host vega-text{margin-bottom:16px;font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-secondary, 107, 116, 125, 1))}@media screen and (min-width: 768px) and (max-width: 1023px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host vega-text{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}:host .rich-text-editor-container{display:flex;box-sizing:content-box;position:relative;box-sizing:content-box;background-color:rgba(var(--v-bg-primary, 252, 252, 252, 1));border:1px solid rgba(var(--v-border-input-field, 171, 198, 216, 1));border-radius:8px;font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px;color:rgba(var(--v-text-primary, 32, 54, 69, 1));margin-top:12px;overflow:auto;resize:vertical;padding-top:12px;padding-right:16px;padding-bottom:32px;padding-left:16px}@media screen and (min-width: 768px) and (max-width: 1023px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host .rich-text-editor-container{font-family:\"Inter\", sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0px}}:host .rich-text-editor-container:hover{border:1px solid rgba(var(--v-border-input-field-hover, 115, 160, 190, 1))}:host .rich-text-editor-container:focus-within{border:1px solid rgba(var(--v-border-input-field-focus, 19, 98, 226, 1));outline:2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));outline-offset:3px;border:1px solid rgba(var(--v-border-color-input-field-focus, 19, 98, 226, 1))}:host .rich-text-editor-container.disabled{background-color:rgba(var(--v-bg-secondary, 245, 247, 247, 1));border:1px solid rgba(var(--v-border-input-field-disabled, 222, 225, 227, 1));cursor:not-allowed}:host .rich-text-editor-container.disabled:hover,:host .rich-text-editor-container.disabled:focus-within{border:1px solid rgba(var(--v-border-input-field-disabled, 222, 225, 227, 1))}:host .rich-text-editor-container.disabled:focus-within{outline:none}:host .rich-text-editor-container.disabled vega-rich-text-content{pointer-events:none;opacity:0.35}:host .rich-text-editor-container.error{border:1px solid rgba(var(--v-border-input-field-danger, 230, 50, 87, 1))}:host .rich-text-editor-container.error:hover{border:1px solid rgba(var(--v-border-input-field-danger-hover, 255, 87, 114, 1))}:host .rich-text-editor-container.error:focus-within{outline:2px solid rgba(var(--v-border-color-danger, 230, 50, 87, 1));outline-offset:3px;border:1px solid rgba(var(--v-border-color-input-field-danger-focus, 233, 71, 104, 1))}:host .rich-text-editor-container .text-editor-counter{position:absolute;bottom:8px;right:8px;display:flex;padding-left:4px;padding-right:4px;padding-top:2px;padding-bottom:2px;border-radius:4px;font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-inverted-primary, 252, 252, 252, 1));background-color:rgba(var(--v-bg-textarea-count, 4, 4, 28, 0.6))}@media screen and (min-width: 768px) and (max-width: 1023px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){:host .rich-text-editor-container .text-editor-counter{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}:host .rich-text-editor-container .text-editor-counter.counter-exceed-max-length{background-color:rgba(var(--v-bg-textarea-counter-exceed-max-length, 214, 46, 81))}.toolbar-btn-group{display:flex;justify-content:center;align-items:center}.toolbar-btn-group>*:not(:first-child):not(:last-child) ::part(rich-text-editor-toolbar-button){border-radius:0px}.toolbar-btn-group>*:first-child:not(:last-child) ::part(rich-text-editor-toolbar-button){border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0px;border-bottom-right-radius:0px}.toolbar-btn-group>*:last-child:not(:first-child) ::part(rich-text-editor-toolbar-button){border-top-left-radius:0px;border-bottom-left-radius:0px;border-top-right-radius:4px;border-bottom-right-radius:4px}.toolbar-btn-group>*:not(:first-child) ::part(rich-text-editor-toolbar-button){margin-left:-1px}.toolbar-btn-group .toolbar-btn-color-preview-box{display:flex;border:1px solid rgba(var(--v-border-chip, 205, 209, 211, 1));box-sizing:border-box;border-radius:4px;width:16px;height:16px;justify-content:center;align-items:center;margin-left:6px}.toolbar-btn-group .toolbar-btn-color-preview-box.disabled{opacity:0.35}.toolbar-btn-group .toolbar-btn-link-wrapper{position:relative}.toolbar-btn-group .toolbar-btn-link-wrapper vega-rich-text-link-editor{position:absolute;bottom:0;left:0;right:0}.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px;color:rgba(var(--v-text-error, 189, 41, 71, 1));display:block;margin-top:12px}@media screen and (min-width: 768px) and (max-width: 1023px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1024px) and (max-width: 1439px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}@media screen and (min-width: 1440px) and (max-width: 9999px){.vega-error{font-family:\"Inter\", sans-serif;font-size:14px;font-weight:400;line-height:18px;letter-spacing:0px}}.vega-hidden{display:none}";
4816
4441
 
4817
4442
  var __decorate$6 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {
@@ -4868,6 +4493,7 @@ const VegaRichTextEditor = class {
4868
4493
  this.lessIndentToolbarButtonSlimmer = new LessIndentToolbarButtonSlimmer();
4869
4494
  this.bulletsNumbersToolbarButtonSlimmer = new BulletsNumbersToolbarButtonSlimmer();
4870
4495
  this.horizontalAlignmentToolbarButtonSlimmer = new HorizontalAlignmentToolbarButtonSlimmer();
4496
+ this.codeBlockToolbarButtonSlimmer = new CodeBlockToolbarButtonSlimmer();
4871
4497
  this.placeholderNotifySlimmer = createSubStateNotifySlimmer(VegaRichTextEditor, 'placeholder', 'watchPlaceholder');
4872
4498
  this.disabledNotifySlimmer = createSubStateNotifySlimmer(VegaRichTextEditor, 'richTextContentEditable', 'watchRichTextContentEditable');
4873
4499
  this.richTextContentController = new RichTextContentController(this);
@@ -4879,6 +4505,7 @@ const VegaRichTextEditor = class {
4879
4505
  this.textNodeColorController = new TextNodeColorController();
4880
4506
  this.deleteSelectedNodesController = new DeleteSelectedNodesController();
4881
4507
  this.historyController = new HistoryController();
4508
+ this.internalCodeBlockSelectionController = new InternalCodeBlockSelectionController();
4882
4509
  this.richTextContentEditable = true;
4883
4510
  this.selectionMap = new Map();
4884
4511
  this.isInDarkMode = VegaInternalThemeManager.isDarkMode();
@@ -5073,6 +4700,9 @@ __decorate$6([
5073
4700
  __decorate$6([
5074
4701
  InjectVegaSlimmer()
5075
4702
  ], VegaRichTextEditor.prototype, "horizontalAlignmentToolbarButtonSlimmer", void 0);
4703
+ __decorate$6([
4704
+ InjectVegaSlimmer()
4705
+ ], VegaRichTextEditor.prototype, "codeBlockToolbarButtonSlimmer", void 0);
5076
4706
  __decorate$6([
5077
4707
  InjectVegaSlimmer()
5078
4708
  ], VegaRichTextEditor.prototype, "placeholderNotifySlimmer", void 0);
@@ -5106,6 +4736,9 @@ __decorate$6([
5106
4736
  __decorate$6([
5107
4737
  InjectVegaSlimmer()
5108
4738
  ], VegaRichTextEditor.prototype, "historyController", void 0);
4739
+ __decorate$6([
4740
+ InjectVegaSlimmer()
4741
+ ], VegaRichTextEditor.prototype, "internalCodeBlockSelectionController", void 0);
5109
4742
  VegaRichTextEditor.style = vegaRichTextEditorCss;
5110
4743
 
5111
4744
  var __decorate$5 = (undefined && undefined.__decorate) || function (decorators, target, key, desc) {