@heartlandone/vega 2.80.0 → 2.81.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 (564) hide show
  1. package/dist/cjs/{app-globals-7a48292d.js → app-globals-25e1bfac.js} +6 -6
  2. package/dist/cjs/{aria-dialog-focusable-trap-slimmer-5a0a78fe.js → aria-dialog-focusable-trap-slimmer-ced9566d.js} +14 -69
  3. package/dist/cjs/{child-nodes-notify-observer-slimmer-a8d13f4c.js → child-nodes-notify-observer-slimmer-2631c381.js} +1 -1
  4. package/dist/cjs/{code-block-71a330a1.js → code-block-24b3d0e7.js} +802 -61
  5. package/dist/cjs/{component-value-history-controller-slimmer.abstract-fd077a6c.js → component-value-history-controller-slimmer.abstract-bd662b32.js} +5 -5
  6. package/dist/cjs/{content-state-afa26456.js → content-state-0f26036c.js} +969 -466
  7. package/dist/cjs/{date-required-rule-9f0e3e99.js → date-required-rule-4377217a.js} +1 -1
  8. package/dist/cjs/{design-token-3f9589eb.js → design-token-40276b11.js} +2 -2
  9. package/dist/cjs/{dom-node-subject-observer-factory-a3a60da4.js → dom-node-subject-observer-factory-9110cb94.js} +1 -1
  10. package/dist/cjs/{element-appender-slimmer-7a66229b.js → element-appender-slimmer-be1b4d57.js} +4 -4
  11. package/dist/cjs/{event-emit-slimmer-024e26bb.js → event-emit-slimmer-bee6b676.js} +1 -1
  12. package/dist/cjs/{form-field-controller-slimmer-c487cf2b.js → form-field-controller-slimmer-982dbfe4.js} +3 -3
  13. package/dist/cjs/{image-annotation-action-4e72af4b.js → image-annotation-action-e0df5a20.js} +3 -3
  14. package/dist/cjs/index.cjs.js +15 -14
  15. package/dist/cjs/{inject-keyboard-manager-d1a82089.js → inject-keyboard-manager-12b65e98.js} +1 -1
  16. package/dist/cjs/{keyboard-manager-9dbbb0d4.js → keyboard-manager-c89a66d3.js} +2 -2
  17. package/dist/cjs/{keyboard-manager-slimmer-68cff676.js → keyboard-manager-slimmer-93fcbf46.js} +1 -1
  18. package/dist/cjs/loader.cjs.js +10 -10
  19. package/dist/cjs/{month-view-generator-65a2f883.js → month-view-generator-0d25e950.js} +1 -1
  20. package/dist/cjs/page-size-option-utils-d038dd3a.js +68 -0
  21. package/dist/cjs/{public-rules-36f202b3.js → public-rules-652ec269.js} +8 -8
  22. package/dist/cjs/{range-fa15d524.js → range-cdd61881.js} +2 -2
  23. package/dist/cjs/{responsive-format-facade-4419b4ae.js → responsive-format-facade-9cae7f27.js} +3 -3
  24. package/dist/cjs/{rich-text-editor-required-rule-7d4c2973.js → rich-text-editor-required-rule-4b919054.js} +1 -1
  25. package/dist/cjs/{split-cell-operation-19f98afb.js → split-cell-operation-3596f738.js} +58 -23
  26. package/dist/cjs/{string-format-strategy.abstract-c65d9861.js → string-format-strategy.abstract-ebdb2573.js} +1 -1
  27. package/dist/cjs/{string-input-formatter-slimmer-c2e04acc.js → string-input-formatter-slimmer-9b6a8399.js} +3 -3
  28. package/dist/cjs/{string-mask-strategy-418fc0b8.js → string-mask-strategy-6cc9f391.js} +2 -2
  29. package/dist/cjs/{style-formatter-3c9ce0e5.js → style-formatter-18289c4d.js} +2 -2
  30. package/dist/cjs/{sub-state-notify-slimmer-7a4c6061.js → sub-state-notify-slimmer-39bfcfe3.js} +1 -1
  31. package/dist/cjs/{sub-state-observer-slimmer-f728e068.js → sub-state-observer-slimmer-e5b50cbf.js} +2 -2
  32. package/dist/cjs/{time-required-rule-ad091302.js → time-required-rule-3517beff.js} +1 -1
  33. package/dist/cjs/{token-extension-90396de7.js → token-extension-addc97c1.js} +208 -34
  34. package/dist/cjs/{type-guard-d760850a.js → type-guard-362d7da3.js} +23 -0
  35. package/dist/cjs/{ui-9e8c9732.js → ui-ae4ee13d.js} +69 -0
  36. package/dist/cjs/{valid-credit-card-number-rule-5ce8e973.js → valid-credit-card-number-rule-1d8bf49c.js} +1 -1
  37. package/dist/cjs/vega-accordion.cjs.entry.js +6 -6
  38. package/dist/cjs/vega-app-header-button.cjs.entry.js +6 -6
  39. package/dist/cjs/vega-backdrop.cjs.entry.js +1 -1
  40. package/dist/cjs/vega-banner.cjs.entry.js +5 -4
  41. package/dist/cjs/vega-box.cjs.entry.js +5 -5
  42. package/dist/cjs/vega-breadcrumb.cjs.entry.js +27 -10
  43. package/dist/cjs/vega-button-circle.cjs.entry.js +6 -6
  44. package/dist/cjs/vega-button-group_2.cjs.entry.js +5 -5
  45. package/dist/cjs/vega-button-link.cjs.entry.js +3 -3
  46. package/dist/cjs/vega-button.cjs.entry.js +5 -5
  47. package/dist/cjs/vega-calendar_4.cjs.entry.js +7 -7
  48. package/dist/cjs/vega-card.cjs.entry.js +5 -5
  49. package/dist/cjs/vega-carousel.cjs.entry.js +5 -5
  50. package/dist/cjs/vega-checkbox_2.cjs.entry.js +6 -6
  51. package/dist/cjs/vega-chip.cjs.entry.js +7 -7
  52. package/dist/cjs/vega-code-block.cjs.entry.js +9 -9
  53. package/dist/cjs/vega-color-picker.cjs.entry.js +5 -5
  54. package/dist/cjs/vega-combo-box.cjs.entry.js +8 -8
  55. package/dist/cjs/vega-date-picker_2.cjs.entry.js +337 -279
  56. package/dist/cjs/vega-dialog_2.cjs.entry.js +73 -10
  57. package/dist/cjs/vega-divider.cjs.entry.js +5 -5
  58. package/dist/cjs/vega-dropdown_5.cjs.entry.js +51 -13
  59. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  60. package/dist/cjs/vega-field-label.cjs.entry.js +3 -3
  61. package/dist/cjs/vega-file-uploader.cjs.entry.js +5 -5
  62. package/dist/cjs/vega-flag-icon.cjs.entry.js +3 -3
  63. package/dist/cjs/vega-flex.cjs.entry.js +6 -6
  64. package/dist/cjs/vega-font.cjs.entry.js +4 -4
  65. package/dist/cjs/vega-form.cjs.entry.js +8 -8
  66. package/dist/cjs/vega-grid.cjs.entry.js +4 -4
  67. package/dist/cjs/vega-icon.cjs.entry.js +4 -4
  68. package/dist/cjs/vega-image-uploader.cjs.entry.js +7 -7
  69. package/dist/cjs/vega-input-credit-card.cjs.entry.js +9 -9
  70. package/dist/cjs/vega-input-numeric.cjs.entry.js +9 -9
  71. package/dist/cjs/vega-input-passcode.cjs.entry.js +8 -8
  72. package/dist/cjs/vega-input-phone-number.cjs.entry.js +7 -7
  73. package/dist/cjs/vega-input-range.cjs.entry.js +5 -5
  74. package/dist/cjs/vega-input-select.cjs.entry.js +7 -7
  75. package/dist/cjs/vega-input.cjs.entry.js +14 -11
  76. package/dist/cjs/vega-item-toggle.cjs.entry.js +3 -3
  77. package/dist/cjs/vega-left-nav_5.cjs.entry.js +117 -12
  78. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +3 -3
  79. package/dist/cjs/vega-page-notification_2.cjs.entry.js +2 -2
  80. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +2 -2
  81. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +23 -7
  82. package/dist/cjs/vega-pagination.cjs.entry.js +43 -19
  83. package/dist/cjs/vega-popover_2.cjs.entry.js +10 -10
  84. package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +42 -11
  85. package/dist/cjs/vega-radio_2.cjs.entry.js +9 -9
  86. package/dist/cjs/vega-rich-text-content.cjs.entry.js +100 -19
  87. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +29 -18
  88. package/dist/cjs/vega-rich-text-table-properties_3.cjs.entry.js +8 -8
  89. package/dist/cjs/vega-section-title.cjs.entry.js +21 -3
  90. package/dist/cjs/vega-segment-control.cjs.entry.js +3 -3
  91. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +8 -8
  92. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +7 -7
  93. package/dist/cjs/vega-sidenav_3.cjs.entry.js +7 -7
  94. package/dist/cjs/vega-signature-capture.cjs.entry.js +8 -8
  95. package/dist/cjs/vega-stepper.cjs.entry.js +6 -6
  96. package/dist/cjs/vega-tab-group_2.cjs.entry.js +3 -3
  97. package/dist/cjs/vega-table_11.cjs.entry.js +7 -7
  98. package/dist/cjs/vega-text.cjs.entry.js +1 -1
  99. package/dist/cjs/vega-textarea.cjs.entry.js +5 -5
  100. package/dist/cjs/vega-time-picker_2.cjs.entry.js +11 -11
  101. package/dist/cjs/vega-toggle-switch.cjs.entry.js +5 -5
  102. package/dist/cjs/vega-tooltip_2.cjs.entry.js +7 -7
  103. package/dist/cjs/vega.cjs.js +10 -10
  104. package/dist/cjs/{wait-for-component-did-render-b6aba2de.js → wait-for-component-did-render-b6d12d51.js} +1 -1
  105. package/dist/collection/components/vega-banner/slimmers/renderers/vega-banner-renderer.js +1 -0
  106. package/dist/collection/components/vega-banner/vega-banner.css +36 -0
  107. package/dist/collection/components/vega-box/vega-box.js +1 -1
  108. package/dist/collection/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-item-renderer.js +9 -6
  109. package/dist/collection/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-renderer.js +4 -0
  110. package/dist/collection/components/vega-breadcrumb/vega-breadcrumb.css +6 -0
  111. package/dist/collection/components/vega-breadcrumb/vega-breadcrumb.js +31 -0
  112. package/dist/collection/components/vega-card/vega-card.css +157 -0
  113. package/dist/collection/components/vega-card/vega-card.js +1 -1
  114. package/dist/collection/components/vega-chip/vega-chip.js +26 -1
  115. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.js +5 -10
  116. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-is-dual-months-controller.js +64 -0
  117. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-header-render.js +3 -6
  118. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.js +3 -11
  119. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.js +2 -2
  120. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +4 -5
  121. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +13 -15
  122. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.js +41 -2
  123. package/dist/collection/components/vega-dialog/vega-dialog.js +1 -1
  124. package/dist/collection/components/vega-divider/slimmers/controllers/vega-divider-size-controller.js +1 -1
  125. package/dist/collection/components/vega-divider/vega-divider.css +157 -0
  126. package/dist/collection/components/vega-divider/vega-divider.js +1 -1
  127. package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.js +37 -1
  128. package/dist/collection/components/vega-dropdown/slimmers/renderers/vega-dropdown-renderer.js +4 -1
  129. package/dist/collection/components/vega-flex/vega-flex.css +157 -0
  130. package/dist/collection/components/vega-flex/vega-flex.js +1 -1
  131. package/dist/collection/components/vega-input/slimmers/renderers/vega-input-input-renderer.js +4 -1
  132. package/dist/collection/components/vega-input/vega-input.js +25 -0
  133. package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-layout-controller.js +37 -1
  134. package/dist/collection/components/vega-modal/slimmers/renderers/vega-modal-renderer.js +11 -1
  135. package/dist/collection/components/vega-modal/vega-modal.css +2683 -7
  136. package/dist/collection/components/vega-modal/vega-modal.js +75 -0
  137. package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.js +85 -2
  138. package/dist/collection/components/vega-nav/vega-left-nav/vega-left-nav.js +23 -0
  139. package/dist/collection/components/vega-pagination/constants/page-size.js +2 -0
  140. package/dist/collection/components/vega-pagination/internal/vega-pagination-page-size-selector.js +11 -7
  141. package/dist/collection/components/vega-pagination/slimmers/controllers/vega-pagination-page-size-observer-controller.js +11 -1
  142. package/dist/collection/components/vega-pagination/utils/page-size-option-utils.js +57 -0
  143. package/dist/collection/components/vega-pagination/vega-pagination-page-size-selector-mobile/slimmers/renderers/page-size-selector-mobile-dropdown-renderer.js +15 -5
  144. package/dist/collection/components/vega-pagination/vega-pagination-page-size-selector-mobile/vega-pagination-page-size-selector-mobile.js +39 -3
  145. package/dist/collection/components/vega-pagination/vega-pagination.js +32 -11
  146. package/dist/collection/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.js +34 -3
  147. package/dist/collection/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.js +3 -2
  148. package/dist/collection/components/vega-rich-text-editor/constants/constant.js +20 -0
  149. package/dist/collection/components/vega-rich-text-editor/dto/annotations/image-annotation.js +1 -0
  150. package/dist/collection/components/vega-rich-text-editor/dto/annotations/inline-html-annotation.js +12 -0
  151. package/dist/collection/components/vega-rich-text-editor/dto/annotations/link-group-annotation.js +8 -2
  152. package/dist/collection/components/vega-rich-text-editor/dto/blocks/block.abstract.js +15 -4
  153. package/dist/collection/components/vega-rich-text-editor/dto/blocks/code-block.js +6 -2
  154. package/dist/collection/components/vega-rich-text-editor/dto/blocks/html-block.js +9 -15
  155. package/dist/collection/components/vega-rich-text-editor/dto/blocks/image-block.js +3 -3
  156. package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-block.js +3 -3
  157. package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-item-block.js +3 -7
  158. package/dist/collection/components/vega-rich-text-editor/dto/blocks/text-block.js +50 -9
  159. package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +25 -6
  160. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-block-filter-styles-strategy.js +39 -0
  161. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-node-filter-styles-strategy.js +47 -0
  162. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy-registry.js +64 -0
  163. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy.abstract.js +147 -14
  164. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/image-node/image-filter-styles-strategy.js +26 -3
  165. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-block-filter-styles-strategy.js +24 -0
  166. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-heading-item-block-filter-styles-strategy.js +29 -0
  167. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-item-block-filter-styles-strategy.js +39 -1
  168. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-title-item-block-filter-styles-strategy.js +29 -0
  169. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/predicate.js +94 -0
  170. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/heading-filter-styles-strategy.js +15 -0
  171. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/paragraph-filter-styles-strategy.js +48 -0
  172. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/title-filter-styles-strategy.js +16 -0
  173. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/code-filter-styles-strategy.js +32 -3
  174. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/link-filter-styles-strategy.js +42 -3
  175. package/dist/collection/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/title-heading-node-filter-styles-strategy.js +108 -0
  176. package/dist/collection/components/vega-rich-text-editor/dto/nodes/code-block-node.js +7 -2
  177. package/dist/collection/components/vega-rich-text-editor/dto/nodes/image-node.js +2 -2
  178. package/dist/collection/components/vega-rich-text-editor/dto/nodes/node.abstract.js +15 -4
  179. package/dist/collection/components/vega-rich-text-editor/dto/nodes/text-node.js +84 -14
  180. package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/block-text-nodes-renderer.abstract.js +61 -6
  181. package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/text-block-renderer.js +16 -0
  182. package/dist/collection/components/vega-rich-text-editor/dto/renderers/nodes/text-node-renderer.js +14 -3
  183. package/dist/collection/components/vega-rich-text-editor/dto/setup.js +36 -6
  184. package/dist/collection/components/vega-rich-text-editor/extensions/extension.abstract.js +10 -0
  185. package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-extension.js +9 -3
  186. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.js +17 -1
  187. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.js +17 -18
  188. package/dist/collection/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.js +19 -0
  189. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-block.js +3 -3
  190. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-body-block.js +3 -3
  191. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.js +21 -4
  192. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.js +3 -3
  193. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-block.js +3 -3
  194. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.js +3 -3
  195. package/dist/collection/components/vega-rich-text-editor/extensions/table/dto/table-row-block.js +3 -3
  196. package/dist/collection/components/vega-rich-text-editor/extensions/table/element-to-dto-strategies/caption-to-caption-block-strategy.js +2 -1
  197. package/dist/collection/components/vega-rich-text-editor/extensions/table/element-to-dto-strategies/td-to-table-cell-block-strategy.js +2 -2
  198. package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-block/table-block-filter-styles-strategy.js +39 -0
  199. package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-caption/table-caption-filter-styles-strategy.js +39 -0
  200. package/dist/collection/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-cell/table-cell-filter-styles-strategy.js +63 -0
  201. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-extension.js +7 -0
  202. package/dist/collection/components/vega-rich-text-editor/helpers/utils.js +24 -0
  203. package/dist/collection/components/vega-rich-text-editor/public-api.js +2 -0
  204. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/custom-style-annotation-handler.js +2 -25
  205. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/html-element-to-annotation-generator.js +8 -2
  206. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/inline-html-annotation-handler.js +30 -53
  207. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/link-annotation-handler.js +2 -1
  208. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/text-style-annotation-handler.js +2 -1
  209. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/continue-inline-to-rte-text-block-strategy.js +85 -17
  210. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.js +12 -5
  211. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/html-block-strategy.js +95 -43
  212. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/inline-element-to-text-node-strategy.js +1 -2
  213. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/predicate.js +29 -0
  214. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/strategy-tags.js +142 -0
  215. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.js +1 -0
  216. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.js +12 -2
  217. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +1 -1
  218. package/dist/collection/components/vega-section-title/slimmers/renderers/vega-section-title-renderer.js +8 -2
  219. package/dist/collection/components/vega-section-title/vega-section-title.css +35 -0
  220. package/dist/collection/components/vega-section-title/vega-section-title.js +64 -0
  221. package/dist/collection/components/vega-stepper/vega-stepper.css +3 -0
  222. package/dist/collection/helpers/formatter/responsive-map-formatter/responsive-margin-formatter.js +3 -3
  223. package/dist/collection/helpers/slimmers/aria-dialog-focusable-trap-slimmer.js +13 -68
  224. package/dist/collection/types/type-guard.js +21 -0
  225. package/dist/collection/utils/ui.js +68 -0
  226. package/dist/esm/{app-globals-e77015e3.js → app-globals-80a7d395.js} +6 -6
  227. package/dist/esm/{aria-dialog-focusable-trap-slimmer-5a2f92be.js → aria-dialog-focusable-trap-slimmer-cc6a8c3e.js} +14 -69
  228. package/dist/esm/{child-nodes-notify-observer-slimmer-b7f0e419.js → child-nodes-notify-observer-slimmer-a8cb19cf.js} +1 -1
  229. package/dist/esm/{code-block-7d6f231b.js → code-block-cd913077.js} +796 -62
  230. package/dist/esm/{component-value-history-controller-slimmer.abstract-acf65b17.js → component-value-history-controller-slimmer.abstract-e595761d.js} +5 -5
  231. package/dist/esm/{content-state-084cd705.js → content-state-89f8eecb.js} +958 -455
  232. package/dist/esm/{date-required-rule-29608215.js → date-required-rule-2b08f32c.js} +1 -1
  233. package/dist/esm/{design-token-edcd787b.js → design-token-7566d54c.js} +2 -2
  234. package/dist/esm/{dom-node-subject-observer-factory-cea9248d.js → dom-node-subject-observer-factory-aca0116e.js} +1 -1
  235. package/dist/esm/{element-appender-slimmer-08ec429b.js → element-appender-slimmer-df2a2da2.js} +4 -4
  236. package/dist/esm/{event-emit-slimmer-4fba1b35.js → event-emit-slimmer-9abc9241.js} +1 -1
  237. package/dist/esm/{form-field-controller-slimmer-8dd39707.js → form-field-controller-slimmer-40fcb5c2.js} +3 -3
  238. package/dist/esm/{image-annotation-action-a6b33a81.js → image-annotation-action-6048d32e.js} +3 -3
  239. package/dist/esm/index.js +14 -14
  240. package/dist/esm/{inject-keyboard-manager-7557816f.js → inject-keyboard-manager-c6557f50.js} +1 -1
  241. package/dist/esm/{keyboard-manager-1846c6a5.js → keyboard-manager-c7b125d7.js} +2 -2
  242. package/dist/esm/{keyboard-manager-slimmer-1ae0aa4d.js → keyboard-manager-slimmer-6109039b.js} +1 -1
  243. package/dist/esm/loader.js +10 -10
  244. package/dist/esm/{month-view-generator-b700ed08.js → month-view-generator-139ace5a.js} +1 -1
  245. package/dist/esm/page-size-option-utils-50afc81a.js +61 -0
  246. package/dist/esm/{public-rules-fe2c7934.js → public-rules-e42bce9d.js} +8 -8
  247. package/dist/esm/{range-00afe462.js → range-b76edec7.js} +2 -2
  248. package/dist/esm/{responsive-format-facade-37d4d850.js → responsive-format-facade-151dbd10.js} +3 -3
  249. package/dist/esm/{rich-text-editor-required-rule-6487ec94.js → rich-text-editor-required-rule-1fc7c040.js} +1 -1
  250. package/dist/esm/{split-cell-operation-9445e642.js → split-cell-operation-548ea374.js} +58 -23
  251. package/dist/esm/{string-format-strategy.abstract-ec6d627b.js → string-format-strategy.abstract-6488031a.js} +1 -1
  252. package/dist/esm/{string-input-formatter-slimmer-959dff7a.js → string-input-formatter-slimmer-625e17a2.js} +3 -3
  253. package/dist/esm/{string-mask-strategy-49be41f0.js → string-mask-strategy-a165d316.js} +2 -2
  254. package/dist/esm/{style-formatter-ad0b2bac.js → style-formatter-280757ae.js} +2 -2
  255. package/dist/esm/{sub-state-notify-slimmer-ee8c417b.js → sub-state-notify-slimmer-6c972bb4.js} +1 -1
  256. package/dist/esm/{sub-state-observer-slimmer-4d30fa5c.js → sub-state-observer-slimmer-53643b5c.js} +2 -2
  257. package/dist/esm/{time-required-rule-414b1590.js → time-required-rule-3f5a8822.js} +1 -1
  258. package/dist/esm/{token-extension-600b1c88.js → token-extension-5ee7a3f1.js} +208 -34
  259. package/dist/esm/{type-guard-23a08026.js → type-guard-f6c9c89d.js} +22 -1
  260. package/dist/esm/{ui-ba5a4758.js → ui-b7600a48.js} +69 -1
  261. package/dist/esm/{valid-credit-card-number-rule-60abddac.js → valid-credit-card-number-rule-3bf19ad6.js} +1 -1
  262. package/dist/esm/vega-accordion.entry.js +6 -6
  263. package/dist/esm/vega-app-header-button.entry.js +6 -6
  264. package/dist/esm/vega-backdrop.entry.js +1 -1
  265. package/dist/esm/vega-banner.entry.js +5 -4
  266. package/dist/esm/vega-box.entry.js +5 -5
  267. package/dist/esm/vega-breadcrumb.entry.js +27 -10
  268. package/dist/esm/vega-button-circle.entry.js +6 -6
  269. package/dist/esm/vega-button-group_2.entry.js +5 -5
  270. package/dist/esm/vega-button-link.entry.js +3 -3
  271. package/dist/esm/vega-button.entry.js +5 -5
  272. package/dist/esm/vega-calendar_4.entry.js +7 -7
  273. package/dist/esm/vega-card.entry.js +5 -5
  274. package/dist/esm/vega-carousel.entry.js +5 -5
  275. package/dist/esm/vega-checkbox_2.entry.js +6 -6
  276. package/dist/esm/vega-chip.entry.js +7 -7
  277. package/dist/esm/vega-code-block.entry.js +9 -9
  278. package/dist/esm/vega-color-picker.entry.js +5 -5
  279. package/dist/esm/vega-combo-box.entry.js +8 -8
  280. package/dist/esm/vega-date-picker_2.entry.js +337 -279
  281. package/dist/esm/vega-dialog_2.entry.js +73 -10
  282. package/dist/esm/vega-divider.entry.js +5 -5
  283. package/dist/esm/vega-dropdown_5.entry.js +52 -14
  284. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  285. package/dist/esm/vega-field-label.entry.js +3 -3
  286. package/dist/esm/vega-file-uploader.entry.js +5 -5
  287. package/dist/esm/vega-flag-icon.entry.js +3 -3
  288. package/dist/esm/vega-flex.entry.js +6 -6
  289. package/dist/esm/vega-font.entry.js +4 -4
  290. package/dist/esm/vega-form.entry.js +8 -8
  291. package/dist/esm/vega-grid.entry.js +4 -4
  292. package/dist/esm/vega-icon.entry.js +4 -4
  293. package/dist/esm/vega-image-uploader.entry.js +7 -7
  294. package/dist/esm/vega-input-credit-card.entry.js +9 -9
  295. package/dist/esm/vega-input-numeric.entry.js +9 -9
  296. package/dist/esm/vega-input-passcode.entry.js +8 -8
  297. package/dist/esm/vega-input-phone-number.entry.js +7 -7
  298. package/dist/esm/vega-input-range.entry.js +5 -5
  299. package/dist/esm/vega-input-select.entry.js +7 -7
  300. package/dist/esm/vega-input.entry.js +14 -11
  301. package/dist/esm/vega-item-toggle.entry.js +3 -3
  302. package/dist/esm/vega-left-nav_5.entry.js +117 -12
  303. package/dist/esm/vega-loader-wrapper_2.entry.js +3 -3
  304. package/dist/esm/vega-page-notification_2.entry.js +2 -2
  305. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +2 -2
  306. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +23 -7
  307. package/dist/esm/vega-pagination.entry.js +43 -19
  308. package/dist/esm/vega-popover_2.entry.js +10 -10
  309. package/dist/esm/vega-progress-tracker_2.entry.js +42 -11
  310. package/dist/esm/vega-radio_2.entry.js +9 -9
  311. package/dist/esm/vega-rich-text-content.entry.js +100 -19
  312. package/dist/esm/vega-rich-text-editor_4.entry.js +29 -18
  313. package/dist/esm/vega-rich-text-table-properties_3.entry.js +8 -8
  314. package/dist/esm/vega-section-title.entry.js +21 -3
  315. package/dist/esm/vega-segment-control.entry.js +3 -3
  316. package/dist/esm/vega-selection-chip_2.entry.js +8 -8
  317. package/dist/esm/vega-selection-tile_2.entry.js +7 -7
  318. package/dist/esm/vega-sidenav_3.entry.js +7 -7
  319. package/dist/esm/vega-signature-capture.entry.js +8 -8
  320. package/dist/esm/vega-stepper.entry.js +6 -6
  321. package/dist/esm/vega-tab-group_2.entry.js +3 -3
  322. package/dist/esm/vega-table_11.entry.js +7 -7
  323. package/dist/esm/vega-text.entry.js +1 -1
  324. package/dist/esm/vega-textarea.entry.js +5 -5
  325. package/dist/esm/vega-time-picker_2.entry.js +11 -11
  326. package/dist/esm/vega-toggle-switch.entry.js +5 -5
  327. package/dist/esm/vega-tooltip_2.entry.js +7 -7
  328. package/dist/esm/vega.js +10 -10
  329. package/dist/esm/{wait-for-component-did-render-03e7ccb2.js → wait-for-component-did-render-6980a1a6.js} +1 -1
  330. package/dist/sri/vega-sri-manifest.json +345 -341
  331. package/dist/types/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-item-renderer.d.ts +1 -0
  332. package/dist/types/components/vega-breadcrumb/slimmers/renderers/vega-breadcrumb-renderer.d.ts +1 -0
  333. package/dist/types/components/vega-breadcrumb/vega-breadcrumb.d.ts +10 -0
  334. package/dist/types/components/vega-chip/vega-chip.d.ts +9 -0
  335. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-current-period-controller.d.ts +1 -6
  336. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/controllers/vega-date-picker-calendar-is-dual-months-controller.d.ts +28 -0
  337. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-header-render.d.ts +1 -2
  338. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-renderer.d.ts +1 -2
  339. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-calendar-year-month-switcher-renderer.d.ts +1 -1
  340. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.d.ts +1 -1
  341. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.d.ts +12 -0
  342. package/dist/types/components/vega-dropdown/slimmers/controllers/vega-dropdown-appender-controller.d.ts +12 -0
  343. package/dist/types/components/vega-dropdown/slimmers/renderers/vega-dropdown-renderer.d.ts +1 -0
  344. package/dist/types/components/vega-input/slimmers/renderers/vega-input-input-renderer.d.ts +1 -0
  345. package/dist/types/components/vega-input/types.d.ts +5 -0
  346. package/dist/types/components/vega-input/vega-input.d.ts +17 -1
  347. package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-layout-controller.d.ts +9 -0
  348. package/dist/types/components/vega-modal/slimmers/renderers/vega-modal-renderer.d.ts +3 -0
  349. package/dist/types/components/vega-modal/vega-modal.d.ts +24 -1
  350. package/dist/types/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-open-state-controller.d.ts +17 -0
  351. package/dist/types/components/vega-pagination/constants/page-size.d.ts +2 -0
  352. package/dist/types/components/vega-pagination/internal/vega-pagination-page-size-selector.d.ts +3 -2
  353. package/dist/types/components/vega-pagination/slimmers/controllers/vega-pagination-page-size-observer-controller.d.ts +2 -0
  354. package/dist/types/components/vega-pagination/types.d.ts +9 -0
  355. package/dist/types/components/vega-pagination/utils/page-size-option-utils.d.ts +42 -0
  356. package/dist/types/components/vega-pagination/vega-pagination-page-size-selector-mobile/slimmers/renderers/page-size-selector-mobile-dropdown-renderer.d.ts +2 -0
  357. package/dist/types/components/vega-pagination/vega-pagination-page-size-selector-mobile/vega-pagination-page-size-selector-mobile.d.ts +9 -2
  358. package/dist/types/components/vega-pagination/vega-pagination.d.ts +8 -3
  359. package/dist/types/components/vega-progress-tracker/slimmers/controllers/vega-progress-tracker-current-direction-controller.d.ts +14 -2
  360. package/dist/types/components/vega-progress-tracker/slimmers/renderers/vega-progress-tracker-renderer.d.ts +1 -1
  361. package/dist/types/components/vega-rich-text-editor/constants/constant.d.ts +5 -0
  362. package/dist/types/components/vega-rich-text-editor/dto/annotations/image-annotation.d.ts +1 -0
  363. package/dist/types/components/vega-rich-text-editor/dto/annotations/inline-html-annotation.d.ts +14 -0
  364. package/dist/types/components/vega-rich-text-editor/dto/annotations/link-group-annotation.d.ts +8 -2
  365. package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +4 -2
  366. package/dist/types/components/vega-rich-text-editor/dto/blocks/code-block.d.ts +2 -2
  367. package/dist/types/components/vega-rich-text-editor/dto/blocks/html-block.d.ts +1 -11
  368. package/dist/types/components/vega-rich-text-editor/dto/blocks/image-block.d.ts +1 -1
  369. package/dist/types/components/vega-rich-text-editor/dto/blocks/list-block.d.ts +1 -1
  370. package/dist/types/components/vega-rich-text-editor/dto/blocks/list-item-block.d.ts +1 -1
  371. package/dist/types/components/vega-rich-text-editor/dto/blocks/text-block.d.ts +15 -2
  372. package/dist/types/components/vega-rich-text-editor/dto/content-state.d.ts +9 -3
  373. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-block-filter-styles-strategy.d.ts +27 -0
  374. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/code-block/code-node-filter-styles-strategy.d.ts +27 -0
  375. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy-registry.d.ts +27 -1
  376. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/filter-styles-strategy.abstract.d.ts +92 -8
  377. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/image-node/image-filter-styles-strategy.d.ts +21 -3
  378. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-block-filter-styles-strategy.d.ts +15 -0
  379. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-heading-item-block-filter-styles-strategy.d.ts +19 -0
  380. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-item-block-filter-styles-strategy.d.ts +25 -0
  381. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/list-block/list-title-item-block-filter-styles-strategy.d.ts +19 -0
  382. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/predicate.d.ts +72 -0
  383. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/heading-filter-styles-strategy.d.ts +10 -0
  384. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/paragraph-filter-styles-strategy.d.ts +34 -0
  385. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-block/title-filter-styles-strategy.d.ts +11 -0
  386. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/code-filter-styles-strategy.d.ts +25 -2
  387. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/link-filter-styles-strategy.d.ts +24 -4
  388. package/dist/types/components/vega-rich-text-editor/dto/filter-styles-strategies/text-node/title-heading-node-filter-styles-strategy.d.ts +62 -0
  389. package/dist/types/components/vega-rich-text-editor/dto/nodes/code-block-node.d.ts +7 -3
  390. package/dist/types/components/vega-rich-text-editor/dto/nodes/image-node.d.ts +1 -1
  391. package/dist/types/components/vega-rich-text-editor/dto/nodes/node.abstract.d.ts +5 -3
  392. package/dist/types/components/vega-rich-text-editor/dto/nodes/text-node.d.ts +43 -4
  393. package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/block-text-nodes-renderer.abstract.d.ts +25 -0
  394. package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/text-block-renderer.d.ts +5 -0
  395. package/dist/types/components/vega-rich-text-editor/dto/renderers/nodes/text-node-renderer.d.ts +12 -0
  396. package/dist/types/components/vega-rich-text-editor/extensions/extension.abstract.d.ts +8 -0
  397. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-annotation.d.ts +8 -0
  398. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-caption-annotation.d.ts +7 -1
  399. package/dist/types/components/vega-rich-text-editor/extensions/table/annotations/table-cell-annotation.d.ts +9 -1
  400. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-block.d.ts +1 -1
  401. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-body-block.d.ts +1 -1
  402. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-caption-block.d.ts +5 -2
  403. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-cell-block.d.ts +1 -1
  404. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-block.d.ts +1 -1
  405. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-head-cell-block.d.ts +1 -1
  406. package/dist/types/components/vega-rich-text-editor/extensions/table/dto/table-row-block.d.ts +1 -1
  407. package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-block/table-block-filter-styles-strategy.d.ts +29 -0
  408. package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-caption/table-caption-filter-styles-strategy.d.ts +29 -0
  409. package/dist/types/components/vega-rich-text-editor/extensions/table/filter-styles-strategies/table-cell/table-cell-filter-styles-strategy.d.ts +46 -0
  410. package/dist/types/components/vega-rich-text-editor/helpers/utils.d.ts +8 -0
  411. package/dist/types/components/vega-rich-text-editor/interface.d.ts +27 -5
  412. package/dist/types/components/vega-rich-text-editor/public-api.d.ts +1 -0
  413. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/custom-style-annotation-handler.d.ts +0 -7
  414. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/html-element-to-annotation-generator.d.ts +1 -1
  415. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/inline-html-annotation-handler.d.ts +11 -1
  416. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/continue-inline-to-rte-text-block-strategy.d.ts +43 -7
  417. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy-processor.d.ts +8 -3
  418. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/html-block-strategy.d.ts +34 -1
  419. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/predicate.d.ts +21 -0
  420. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/strategy-tags.d.ts +83 -0
  421. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-source-view-renderer.d.ts +6 -0
  422. package/dist/types/components/vega-section-title/slimmers/renderers/vega-section-title-renderer.d.ts +2 -0
  423. package/dist/types/components/vega-section-title/types.d.ts +1 -0
  424. package/dist/types/components/vega-section-title/vega-section-title.d.ts +14 -0
  425. package/dist/types/components.d.ts +93 -8
  426. package/dist/types/helpers/slimmers/aria-dialog-focusable-trap-slimmer.d.ts +4 -12
  427. package/dist/types/types/components.type.d.ts +3 -0
  428. package/dist/types/types/type-guard.d.ts +15 -1
  429. package/dist/types/types/ui.type.d.ts +11 -1
  430. package/dist/types/utils/ui.d.ts +14 -0
  431. package/dist/vega/index.esm.js +1 -1
  432. package/dist/vega/{p-1c45565d.js → p-001d36af.js} +1 -1
  433. package/dist/vega/{p-7c2fecfd.entry.js → p-01541820.entry.js} +1 -1
  434. package/dist/vega/p-0304c3a7.js +1 -0
  435. package/dist/vega/{p-2d917e2d.entry.js → p-08f03a52.entry.js} +1 -1
  436. package/dist/vega/{p-9390a94b.entry.js → p-0a145766.entry.js} +1 -1
  437. package/dist/vega/p-0d205fbf.js +1 -0
  438. package/dist/vega/p-0fc2ccc4.entry.js +1 -0
  439. package/dist/vega/p-118aeed1.entry.js +1 -0
  440. package/dist/vega/{p-ea21462f.js → p-1a4e8d8a.js} +1 -1
  441. package/dist/vega/{p-5ae4ea20.entry.js → p-23dc4064.entry.js} +1 -1
  442. package/dist/vega/{p-2c2df248.js → p-24b45c85.js} +1 -1
  443. package/dist/vega/{p-010b5e74.js → p-262a27d0.js} +1 -1
  444. package/dist/vega/{p-9dc23325.entry.js → p-27dc6562.entry.js} +1 -1
  445. package/dist/vega/p-295326ca.entry.js +1 -0
  446. package/dist/vega/{p-6af55f1c.entry.js → p-2beace1c.entry.js} +1 -1
  447. package/dist/vega/p-2ce2972f.js +1 -0
  448. package/dist/vega/p-2e7d5e28.entry.js +1 -0
  449. package/dist/vega/{p-7618dde4.js → p-2f99c511.js} +1 -1
  450. package/dist/vega/p-32592497.entry.js +1 -0
  451. package/dist/vega/{p-65900dbf.entry.js → p-37a9f4b4.entry.js} +1 -1
  452. package/dist/vega/{p-a99e75a1.entry.js → p-4013d954.entry.js} +1 -1
  453. package/dist/vega/{p-19ad4f15.entry.js → p-42da45e3.entry.js} +1 -1
  454. package/dist/vega/p-42e246e4.entry.js +1 -0
  455. package/dist/vega/p-479a169c.entry.js +1 -0
  456. package/dist/vega/{p-35386999.entry.js → p-47a2eec1.entry.js} +1 -1
  457. package/dist/vega/{p-b696a861.js → p-49ae8c79.js} +1 -1
  458. package/dist/vega/p-4ed416e7.js +1 -0
  459. package/dist/vega/{p-dc9b5063.entry.js → p-53ba1adb.entry.js} +1 -1
  460. package/dist/vega/{p-d1494c7c.entry.js → p-55019e55.entry.js} +1 -1
  461. package/dist/vega/{p-434fc427.entry.js → p-565aac6e.entry.js} +1 -1
  462. package/dist/vega/{p-cc055723.entry.js → p-574586c9.entry.js} +1 -1
  463. package/dist/vega/{p-cca5042b.entry.js → p-5781b9f4.entry.js} +1 -1
  464. package/dist/vega/{p-1feb4f2a.entry.js → p-57827342.entry.js} +1 -1
  465. package/dist/vega/p-59c6f795.js +1 -0
  466. package/dist/vega/{p-f48c43f4.entry.js → p-5a8be21c.entry.js} +1 -1
  467. package/dist/vega/p-5baff397.js +1 -0
  468. package/dist/vega/{p-ffa2e3a6.entry.js → p-5e9f6fb6.entry.js} +1 -1
  469. package/dist/vega/p-5f377954.js +1 -1
  470. package/dist/vega/{p-44c5cbb7.js → p-5f95a2fa.js} +1 -1
  471. package/dist/vega/{p-576fe408.js → p-6216c30e.js} +1 -1
  472. package/dist/vega/{p-367d44d9.entry.js → p-62e80151.entry.js} +1 -1
  473. package/dist/vega/{p-ec1d76c6.entry.js → p-63d73fa0.entry.js} +1 -1
  474. package/dist/vega/{p-612e3ded.js → p-64e22fe5.js} +1 -1
  475. package/dist/vega/{p-0313393d.entry.js → p-679b1f00.entry.js} +1 -1
  476. package/dist/vega/p-6e70d3cc.js +1 -0
  477. package/dist/vega/{p-70f1cf4e.entry.js → p-757bfca2.entry.js} +1 -1
  478. package/dist/vega/{p-c9201bf4.js → p-76063dcb.js} +1 -1
  479. package/dist/vega/{p-8adf9732.entry.js → p-76daa632.entry.js} +1 -1
  480. package/dist/vega/{p-1a2f92a3.entry.js → p-77c6f14a.entry.js} +1 -1
  481. package/dist/vega/{p-382b71a3.entry.js → p-7ac9e8ff.entry.js} +1 -1
  482. package/dist/vega/p-83863463.js +1 -0
  483. package/dist/vega/{p-e84b95d4.js → p-88e6618d.js} +1 -1
  484. package/dist/vega/p-90a0b9f3.entry.js +1 -0
  485. package/dist/vega/{p-1557ed92.entry.js → p-9324dd2c.entry.js} +1 -1
  486. package/dist/vega/{p-cf70c57d.js → p-98c44c03.js} +1 -1
  487. package/dist/vega/p-9aa1c66a.entry.js +1 -0
  488. package/dist/vega/p-9b01a28a.entry.js +1 -0
  489. package/dist/vega/{p-4eb282ef.entry.js → p-9b14ac66.entry.js} +1 -1
  490. package/dist/vega/p-9dcecdd3.js +1 -0
  491. package/dist/vega/p-a1d51bc2.js +1 -0
  492. package/dist/vega/{p-04e56b0c.entry.js → p-ab4b06c9.entry.js} +1 -1
  493. package/dist/vega/{p-b5c2fff3.entry.js → p-ac43be09.entry.js} +1 -1
  494. package/dist/vega/{p-7ceab8c7.entry.js → p-add63fe0.entry.js} +1 -1
  495. package/dist/vega/{p-89e56502.js → p-ae0f03c1.js} +1 -1
  496. package/dist/vega/{p-21c9e1ca.entry.js → p-b525c800.entry.js} +1 -1
  497. package/dist/vega/p-be651266.entry.js +1 -0
  498. package/dist/vega/{p-c045e4c1.entry.js → p-c0d45f77.entry.js} +1 -1
  499. package/dist/vega/{p-204c7d41.js → p-c2e7992b.js} +1 -1
  500. package/dist/vega/{p-b5a6bd0f.entry.js → p-c56aa01c.entry.js} +1 -1
  501. package/dist/vega/{p-2e73582d.entry.js → p-cc3c661c.entry.js} +1 -1
  502. package/dist/vega/{p-cda45d2a.entry.js → p-cda09e99.entry.js} +1 -1
  503. package/dist/vega/{p-d1ca70a1.js → p-d0ac7af8.js} +1 -1
  504. package/dist/vega/p-d289a6af.js +3 -0
  505. package/dist/vega/p-d29e8972.entry.js +1 -0
  506. package/dist/vega/{p-76b80a0c.js → p-d47aa28f.js} +1 -1
  507. package/dist/vega/p-d90eee9a.entry.js +1 -0
  508. package/dist/vega/{p-be3517be.entry.js → p-da742a7f.entry.js} +1 -1
  509. package/dist/vega/p-dc6e7a77.js +1 -0
  510. package/dist/vega/{p-c61279a7.entry.js → p-dcf8f58f.entry.js} +1 -1
  511. package/dist/vega/{p-ab21fdf6.entry.js → p-dff66a67.entry.js} +1 -1
  512. package/dist/vega/{p-90137c68.entry.js → p-e1117034.entry.js} +1 -1
  513. package/dist/vega/p-e223e0dc.entry.js +1 -0
  514. package/dist/vega/p-e22e5aa1.js +1 -0
  515. package/dist/vega/{p-df5bfbc4.entry.js → p-e753fac2.entry.js} +1 -1
  516. package/dist/vega/{p-7912741f.entry.js → p-e7a4b760.entry.js} +1 -1
  517. package/dist/vega/{p-ba415db6.entry.js → p-e8fc8495.entry.js} +1 -1
  518. package/dist/vega/{p-18619467.js → p-ea2b5dbb.js} +1 -1
  519. package/dist/vega/{p-f3456993.entry.js → p-eccabba7.entry.js} +1 -1
  520. package/dist/vega/{p-517434d4.entry.js → p-f0d605e9.entry.js} +1 -1
  521. package/dist/vega/{p-878851f6.js → p-f28a6074.js} +1 -1
  522. package/dist/vega/{p-840ad046.entry.js → p-f2c65579.entry.js} +1 -1
  523. package/dist/vega/{p-07a2b42a.js → p-f2cef51a.js} +1 -1
  524. package/dist/vega/{p-47ca1f69.entry.js → p-f40d479d.entry.js} +1 -1
  525. package/dist/vega/p-f5013494.entry.js +1 -0
  526. package/dist/vega/{p-60cf2a68.js → p-f509b439.js} +1 -1
  527. package/dist/vega/p-f5d3ce94.js +1 -0
  528. package/dist/vega/{p-9551da9c.entry.js → p-f69e2801.entry.js} +1 -1
  529. package/dist/vega/p-fa654762.entry.js +1 -0
  530. package/dist/vega/{p-365d21ac.entry.js → p-fbc5a7f6.entry.js} +1 -1
  531. package/dist/vega/{p-b3e40faf.js → p-fd5ddc55.js} +1 -1
  532. package/dist/vega/p-ff47aeee.entry.js +1 -0
  533. package/dist/vega/vega.esm.js +1 -1
  534. package/package.json +1 -1
  535. package/dist/vega/p-01883ffc.entry.js +0 -1
  536. package/dist/vega/p-02578a59.js +0 -1
  537. package/dist/vega/p-043e685a.entry.js +0 -1
  538. package/dist/vega/p-08780df0.entry.js +0 -1
  539. package/dist/vega/p-10fa4eac.js +0 -1
  540. package/dist/vega/p-203bc4db.entry.js +0 -1
  541. package/dist/vega/p-22336063.js +0 -1
  542. package/dist/vega/p-224b67ff.entry.js +0 -1
  543. package/dist/vega/p-334e3b02.entry.js +0 -1
  544. package/dist/vega/p-559197f8.js +0 -1
  545. package/dist/vega/p-68124bc5.js +0 -1
  546. package/dist/vega/p-6c5250b3.js +0 -1
  547. package/dist/vega/p-6f2e5bc6.js +0 -1
  548. package/dist/vega/p-716c71e6.js +0 -1
  549. package/dist/vega/p-7362723e.entry.js +0 -1
  550. package/dist/vega/p-7942c042.entry.js +0 -1
  551. package/dist/vega/p-8327635d.js +0 -1
  552. package/dist/vega/p-8b891f36.entry.js +0 -1
  553. package/dist/vega/p-9341c1a9.js +0 -1
  554. package/dist/vega/p-9862d1a8.entry.js +0 -1
  555. package/dist/vega/p-a4dbf2cc.js +0 -1
  556. package/dist/vega/p-c4e32125.entry.js +0 -1
  557. package/dist/vega/p-c5b698f6.entry.js +0 -1
  558. package/dist/vega/p-c6d62f0d.js +0 -1
  559. package/dist/vega/p-cdf5b2f0.entry.js +0 -1
  560. package/dist/vega/p-d202e69d.entry.js +0 -1
  561. package/dist/vega/p-dcd18ab1.js +0 -1
  562. package/dist/vega/p-e4726dcd.entry.js +0 -1
  563. package/dist/vega/p-f4190826.entry.js +0 -1
  564. package/dist/vega/p-fdac91c4.entry.js +0 -1
@@ -1,13 +1,12 @@
1
1
  'use strict';
2
2
 
3
- const codeBlock = require('./code-block-71a330a1.js');
3
+ const codeBlock = require('./code-block-24b3d0e7.js');
4
4
  const misc = require('./misc-3d30df91.js');
5
- const typeGuard = require('./type-guard-d760850a.js');
5
+ const typeGuard = require('./type-guard-362d7da3.js');
6
6
  const changeManager = require('./change-manager-a297e4d2.js');
7
- const domNodeSubjectObserverFactory = require('./dom-node-subject-observer-factory-a3a60da4.js');
7
+ const domNodeSubjectObserverFactory = require('./dom-node-subject-observer-factory-9110cb94.js');
8
8
  const vegaInternalEventId = require('./vega-internal-event-id-a1837fa2.js');
9
- const string = require('./string-39438062.js');
10
- const ui = require('./ui-9e8c9732.js');
9
+ const ui = require('./ui-ae4ee13d.js');
11
10
  const object = require('./object-b53e9416.js');
12
11
  const globalSlimmerRegistry = require('./global-slimmer-registry-b3bce7e0.js');
13
12
 
@@ -116,13 +115,9 @@ class RTEListItemBlock extends codeBlock.RTETextBlock {
116
115
  /**
117
116
  * @inheritDoc
118
117
  */
119
- toHtml() {
120
- const attrStr = super.generateAttributeString();
121
- return [
122
- `<li${attrStr}>`,
123
- this.children.map((node) => node.toHtml()).join(''),
124
- `</li>`,
125
- ].join('');
118
+ toHtml(options) {
119
+ const attrStr = super.generateAttributeString(options);
120
+ return [`<li${attrStr}>`, this.getChildrenHtml(options), `</li>`].join('');
126
121
  }
127
122
  /**
128
123
  * @inheritDoc
@@ -405,12 +400,12 @@ class RTEListBlock extends codeBlock.RTEBlock {
405
400
  /**
406
401
  * @inheritDoc
407
402
  */
408
- toHtml() {
403
+ toHtml(options) {
409
404
  const BlockTag = this.getBlockTag();
410
- const attrStr = super.generateAttributeString();
405
+ const attrStr = super.generateAttributeString(options);
411
406
  return [
412
407
  `<${BlockTag}${attrStr}>`,
413
- this.children.map((block) => block.toHtml()).join(''),
408
+ this.children.map((block) => block.toHtml(options)).join(''),
414
409
  `</${BlockTag}>`,
415
410
  ].join('');
416
411
  }
@@ -604,7 +599,7 @@ class ElementToDtoStrategyProcessor {
604
599
  const strategies = this.getElementToBlockStrategies();
605
600
  const outputs = [];
606
601
  for (let i = 0; i < elements.length; i++) {
607
- if (this.isInvalidElement(elements[i]))
602
+ if (this.isInvalidElement(elements[i], options))
608
603
  continue;
609
604
  let canHandledCount = 0;
610
605
  for (const strategy of strategies) {
@@ -631,14 +626,21 @@ class ElementToDtoStrategyProcessor {
631
626
  return outputs;
632
627
  }
633
628
  /**
634
- * Checks if the given element is valid to parse.
629
+ * Checks if the given element should be skipped during processing.
635
630
  *
636
- * @param {HTMLElement} element - The pasted element.
637
- * @returns {boolean} Is valid
631
+ * Comment nodes are always skipped. META and STYLE elements are skipped only
632
+ * in auto-match mode; in raw-HTML mode (autoMatchFormat: false) they are passed
633
+ * through so downstream strategies can decide how to handle them.
634
+ *
635
+ * @param {HTMLElement} element - The element to check.
636
+ * @param {VegaRTETransformOptions} options - Transform options.
637
+ * @returns {boolean} True when the element should be skipped.
638
638
  */
639
- isInvalidElement(element) {
639
+ isInvalidElement(element, options) {
640
640
  if (element.nodeType === Node.COMMENT_NODE)
641
641
  return true;
642
+ if (options.autoMatchFormat === false)
643
+ return false;
642
644
  return ['META', 'STYLE'].includes(element.nodeName);
643
645
  }
644
646
  /**
@@ -824,6 +826,7 @@ class ImageAnnotation extends codeBlock.NodeAnnotation {
824
826
  }
825
827
  }
826
828
  }
829
+ ImageAnnotation.BASE_STYLES = { verticalAlign: 'bottom' };
827
830
 
828
831
  /**
829
832
  * Update the image node annotation map strategy.
@@ -916,9 +919,9 @@ class RTEImageNode extends codeBlock.RTEDecoratorNode {
916
919
  /**
917
920
  * @inheritDoc
918
921
  */
919
- toHtml() {
922
+ toHtml(options) {
920
923
  const imageAnnotation = this.getAnnotationByType(codeBlock.NodeAnnotationTypeEnum.IMAGE);
921
- const attrStr = super.generateAttributeString(...[
924
+ const attrStr = super.generateAttributeString(options, ...[
922
925
  imageAnnotation && imageAnnotation.alt ? `alt="${imageAnnotation.alt}"` : null,
923
926
  `src="${this.url}"`,
924
927
  imageAnnotation && imageAnnotation.size ? `data-size="${imageAnnotation.size}"` : null,
@@ -1138,9 +1141,9 @@ class RTEImageBlock extends codeBlock.RTEBlock {
1138
1141
  /**
1139
1142
  * @inheritDoc
1140
1143
  */
1141
- toHtml() {
1142
- const attrStr = super.generateAttributeString();
1143
- const children = this.children.map((node) => node.toHtml()).join('');
1144
+ toHtml(options) {
1145
+ const attrStr = super.generateAttributeString(options);
1146
+ const children = this.children.map((node) => node.toHtml(options)).join('');
1144
1147
  return super.shouldRenderAsInternalWrapper()
1145
1148
  ? children
1146
1149
  : [`<div${attrStr}>`, children, `</div>`].join('');
@@ -1232,23 +1235,26 @@ class RTEHtmlBlock extends codeBlock.RTEBlock {
1232
1235
  * @inheritDoc
1233
1236
  */
1234
1237
  isNotEmpty() {
1235
- return this.children.length > 0;
1238
+ // Any RTEHtmlBlock — whether void (hr, br), childless (canvas, iframe),
1239
+ // or with children — represents real user content. Only the default empty
1240
+ // text paragraph should make the editor report as empty.
1241
+ return true;
1236
1242
  }
1237
1243
  /**
1238
1244
  * @inheritDoc
1239
1245
  */
1240
- toHtml() {
1246
+ toHtml(options) {
1241
1247
  const BlockTag = this.htmlTag;
1242
- const attrStr = super.generateAttributeString();
1248
+ const attrStr = super.generateAttributeString(options);
1243
1249
  // Handle void/self-closing tags (hr, input, col, etc.)
1244
1250
  // Uses HTML5 syntax without self-closing slash for consistency with img and br tags
1245
- if (RTEHtmlBlock.VOID_TAGS.has(this.htmlTag)) {
1251
+ if (codeBlock.HTML_VOID_TAGS.has(this.htmlTag)) {
1246
1252
  return `<${BlockTag}${attrStr}>`;
1247
1253
  }
1248
1254
  // Handle normal tags with children
1249
1255
  return [
1250
1256
  `<${BlockTag}${attrStr}>`,
1251
- this.children.map((block) => block.toHtml()).join(''),
1257
+ this.children.map((block) => block.toHtml(options)).join(''),
1252
1258
  `</${BlockTag}>`,
1253
1259
  ].join('');
1254
1260
  }
@@ -1259,16 +1265,6 @@ class RTEHtmlBlock extends codeBlock.RTEBlock {
1259
1265
  return Object.assign(Object.assign({}, super.toJSON()), { id: this.id, type: this.type, htmlTag: this.htmlTag, children: this.children.map((child) => child.toJSON()) });
1260
1266
  }
1261
1267
  }
1262
- /**
1263
- * Void/self-closing tags that don't have closing tags and don't contain children.
1264
- * These tags should be rendered as <tag> or <tag/> instead of <tag></tag>.
1265
- *
1266
- * Based on canHandleTags from html-block-strategy.ts, the following are void tags:
1267
- * - HR: horizontal rule
1268
- * - INPUT: form input
1269
- * - COL: table column
1270
- */
1271
- RTEHtmlBlock.VOID_TAGS = new Set(['hr', 'input', 'col']);
1272
1268
 
1273
1269
  /**
1274
1270
  * Merge the two blocks node into first block if the two blocks nodes type is same(text node or image node)
@@ -1925,32 +1921,9 @@ class CustomStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
1925
1921
  * @returns {VegaRTETextAnnotations} - Annotation.
1926
1922
  */
1927
1923
  handle(element) {
1928
- const styles = this.generateCustomStyleAnnotations(element);
1924
+ const styles = codeBlock.createStyleMapFromElement(element);
1929
1925
  return Object.keys(styles).length > 0 ? { customStyle: styles } : {};
1930
1926
  }
1931
- /**
1932
- * Obtain and format the style of element.
1933
- *
1934
- * @param {HTMLElement} element - current element.
1935
- * @returns {AnnotationStyle} - Record<string, string>.
1936
- */
1937
- generateCustomStyleAnnotations(element) {
1938
- const customStyle = element.getAttribute('style');
1939
- if (!customStyle)
1940
- return {};
1941
- const styleValue = customStyle.split(';').filter(Boolean);
1942
- return styleValue
1943
- .filter((key) => key !== ' ')
1944
- .map((key) => {
1945
- // to remove redundant quote pairs if needed, for example: ['fontFamily: "Roboto Mono"'] will be updated to ['fontFamily: Roboto Mono']
1946
- const styleObject = key.replace(/(['"])(.*?)\1/g, '$2').split(':');
1947
- const styleKey = string.dashCaseToCamel(styleObject[0].trim());
1948
- return {
1949
- [styleKey]: styleObject[1].trim().replace(';', ''),
1950
- };
1951
- })
1952
- .reduce((current, obj) => (Object.assign(Object.assign({}, current), obj)), {});
1953
- }
1954
1927
  }
1955
1928
 
1956
1929
  /** Handle indent annotation */
@@ -2175,157 +2148,6 @@ class ItalicAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2175
2148
  }
2176
2149
  }
2177
2150
 
2178
- /** Handle link annotation */
2179
- class LinkAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2180
- constructor() {
2181
- super(...arguments);
2182
- this.handlers = [
2183
- new CustomAttributeAnnotationHandler(),
2184
- new CustomClassAnnotationHandler(),
2185
- new CustomStyleAnnotationHandler(),
2186
- ];
2187
- }
2188
- /**
2189
- * Can be handle.
2190
- *
2191
- * @param {RTEDtoClassPrototype} targetDto - Target DTO.
2192
- * @returns {boolean} - .
2193
- */
2194
- canHandle(targetDto) {
2195
- return targetDto.name === 'RTETextNode';
2196
- }
2197
- /**
2198
- * Handle annotation.
2199
- *
2200
- * @param {HTMLElement} element - Current elements.
2201
- * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2202
- * @returns {VegaRTETextAnnotations} - Annotation.
2203
- */
2204
- handle(element, parentAnnotations = {}) {
2205
- if (parentAnnotations.link)
2206
- return { link: parentAnnotations.link };
2207
- return element.tagName === 'A' ? { link: this.generateLinkAnnotations(element) } : {};
2208
- }
2209
- /**
2210
- * Generate link annotations.
2211
- *
2212
- * @param {HTMLElement} element - Current elements.
2213
- * @returns {VegaRTELink} - link annotations.
2214
- */
2215
- generateLinkAnnotations(element) {
2216
- const annotations = {
2217
- href: element.getAttribute('href') || '',
2218
- groupKey: misc.generateUUID(),
2219
- };
2220
- this.handlers.forEach((handler) => {
2221
- Object.assign(annotations, handler.handle(element));
2222
- });
2223
- return annotations;
2224
- }
2225
- }
2226
-
2227
- /** Handle strike through annotation */
2228
- class StrikeThroughAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2229
- /**
2230
- * @inheritDoc
2231
- */
2232
- canHandle(targetDto) {
2233
- return targetDto.name === 'RTETextNode';
2234
- }
2235
- /**
2236
- * Handle annotation.
2237
- *
2238
- * @param {HTMLElement} element - Current elements.
2239
- * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2240
- * @returns {VegaRTETextAnnotations} - Annotation.
2241
- */
2242
- handle(element, parentAnnotations = {}) {
2243
- return this.isStrikethrough(element) || parentAnnotations.strikethrough
2244
- ? { strikethrough: true }
2245
- : {};
2246
- }
2247
- /**
2248
- * Is strikethrough element.
2249
- *
2250
- * @param {HTMLElement} element - current element.
2251
- * @returns {boolean} - boolean.
2252
- */
2253
- isStrikethrough(element) {
2254
- return (element.style.textDecoration.includes(codeBlock.STRIKETHROUGH_TEXT_DECORATION) ||
2255
- element.nodeName === 'S' ||
2256
- element.nodeName === 'DEL' ||
2257
- element.classList.contains('v-rte--strikethrough'));
2258
- }
2259
- }
2260
-
2261
- /** Handle underline annotation */
2262
- class UnderlineAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2263
- /**
2264
- * @inheritDoc
2265
- */
2266
- canHandle(targetDto) {
2267
- return targetDto.name === 'RTETextNode';
2268
- }
2269
- /**
2270
- * Handle annotation.
2271
- *
2272
- * @param {HTMLElement} element - Current elements.
2273
- * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2274
- * @returns {VegaRTETextAnnotations} - Annotation.
2275
- */
2276
- handle(element, parentAnnotations = {}) {
2277
- return this.isUnderline(element) || parentAnnotations.underline ? { underline: true } : {};
2278
- }
2279
- /**
2280
- * Is underline element.
2281
- *
2282
- * @param {HTMLElement} element - current element.
2283
- * @returns {boolean} - boolean.
2284
- */
2285
- isUnderline(element) {
2286
- return (element.style.textDecoration.includes(codeBlock.UNDERLINE_TEXT_DECORATION) ||
2287
- element.nodeName === 'U' ||
2288
- element.nodeName === 'INS' ||
2289
- element.classList.contains('v-rte--underline'));
2290
- }
2291
- }
2292
-
2293
- /**
2294
- * Registry for managing filter styles strategies keyed by DTO class name.
2295
- *
2296
- * Provides common `register` / `getStrategies` primitives that both output-
2297
- * filtering strategies (DTO → HTML) and annotation-parsing strategies
2298
- * (HTML → DTO) build upon.
2299
- *
2300
- * TODO: Currently, the filter styles strategies are applied for all rich text editors. We need to apply the strategies with a specific rich text editor instance when we have multiple rich text editors in the future.
2301
- */
2302
- class RTEFilterStylesStrategyRegistry {
2303
- /**
2304
- * Registers a filter styles strategy for a specific DTO class name.
2305
- * Duplicate strategy instances are ignored.
2306
- *
2307
- * @param {string} dtoClassName - The DTO class name (e.g. `RTEListBlock.name`).
2308
- * @param {RTEFilterStylesStrategy} strategy - The strategy instance to register.
2309
- */
2310
- static register(dtoClassName, strategy) {
2311
- var _a;
2312
- const set = (_a = this.registry.get(dtoClassName)) !== null && _a !== void 0 ? _a : new Set();
2313
- set.add(strategy);
2314
- this.registry.set(dtoClassName, set);
2315
- }
2316
- /**
2317
- * Retrieves all strategies registered for a given DTO class name.
2318
- *
2319
- * @param {string} dtoClassName - The DTO class name to look up.
2320
- * @returns {RTEFilterStylesStrategy[]} Registered strategies (empty array if none).
2321
- */
2322
- static getStrategies(dtoClassName) {
2323
- var _a;
2324
- return Array.from((_a = this.registry.get(dtoClassName)) !== null && _a !== void 0 ? _a : []);
2325
- }
2326
- }
2327
- RTEFilterStylesStrategyRegistry.registry = new Map();
2328
-
2329
2151
  /** Handle text style annotation */
2330
2152
  class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2331
2153
  /**
@@ -2439,7 +2261,8 @@ class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2439
2261
  */
2440
2262
  getElementTypeByClassName(element) {
2441
2263
  if (element.className) {
2442
- const match = /\bv-rte--text-style-(title|subtitle|heading-1|heading-2|heading-3|heading-4|heading-5|heading-6|paragraph)\b/.exec(element.className);
2264
+ // Match class name with pattern "v-rte--text-style-{textStyle}" or "v-rte-{textStyle}".
2265
+ const match = /\bv-rte-(?:-text-style-)?(title|subtitle|heading-1|heading-2|heading-3|heading-4|heading-5|heading-6|paragraph)\b/.exec(element.className);
2443
2266
  if (match) {
2444
2267
  return match[1];
2445
2268
  }
@@ -2448,131 +2271,311 @@ class TextStyleAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2448
2271
  }
2449
2272
  }
2450
2273
 
2451
- /** Handle image size annotation */
2452
- class ImageSizeAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2274
+ /**
2275
+ * Predicate class provides static methods to check specific conditions on HTML elements.
2276
+ */
2277
+ class Predicate {
2453
2278
  /**
2454
- * @inheritDoc
2279
+ * Checks if the given element is a title or subtitle.
2280
+ *
2281
+ * @param {HTMLElement} element The element to check.
2282
+ * @returns {boolean} True if the element is a title or subtitle, false otherwise.
2283
+ */
2284
+ static isTitleOrSubtitle(element) {
2285
+ if (element.nodeName === 'DIV') {
2286
+ const textBlockType = Predicate.textStyleHandler['getTextStyle'](element);
2287
+ return textBlockType === 'title' || textBlockType === 'subtitle';
2288
+ }
2289
+ return false;
2290
+ }
2291
+ /**
2292
+ * Check if the given element is a link element (anchor tag).
2293
+ *
2294
+ * @param {HTMLElement} element The element to check.
2295
+ * @returns {boolean} True if the element is a link element, false otherwise.
2296
+ */
2297
+ static isLinkElement(element) {
2298
+ return element.nodeName === 'A';
2299
+ }
2300
+ }
2301
+ Predicate.textStyleHandler = new TextStyleAnnotationHandler();
2302
+
2303
+ /** Handle link annotation */
2304
+ class LinkAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2305
+ constructor() {
2306
+ super(...arguments);
2307
+ this.handlers = [
2308
+ new CustomAttributeAnnotationHandler(),
2309
+ new CustomClassAnnotationHandler(),
2310
+ new CustomStyleAnnotationHandler(),
2311
+ ];
2312
+ }
2313
+ /**
2314
+ * Can be handle.
2315
+ *
2316
+ * @param {RTEDtoClassPrototype} targetDto - Target DTO.
2317
+ * @returns {boolean} - .
2455
2318
  */
2456
2319
  canHandle(targetDto) {
2457
- return targetDto.name === 'RTEImageNode';
2320
+ return targetDto.name === 'RTETextNode';
2458
2321
  }
2459
2322
  /**
2460
2323
  * Handle annotation.
2461
2324
  *
2462
2325
  * @param {HTMLElement} element - Current elements.
2463
- * @returns {VegaRTEImageAnnotations} - Annotation.
2326
+ * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2327
+ * @returns {VegaRTETextAnnotations} - Annotation.
2464
2328
  */
2465
- handle(element) {
2466
- const size = this.getImageSize(element);
2467
- return size ? { size: size } : {};
2329
+ handle(element, parentAnnotations = {}) {
2330
+ if (parentAnnotations.link)
2331
+ return { link: parentAnnotations.link };
2332
+ return Predicate.isLinkElement(element) ? { link: this.generateLinkAnnotations(element) } : {};
2468
2333
  }
2469
2334
  /**
2470
- * Determine the image display size based on the width of the current element.
2335
+ * Generate link annotations.
2471
2336
  *
2472
- * @param {HTMLElement} element - current element.
2473
- * @returns {Nullable<VegaRichTextImageEditorSizeType>} -Image size, default 'md'.
2337
+ * @param {HTMLElement} element - Current elements.
2338
+ * @returns {VegaRTELink} - link annotations.
2474
2339
  */
2475
- getImageSize(element) {
2476
- if (element.getAttribute('data-size')) {
2477
- return element.getAttribute('data-size');
2478
- }
2479
- return null;
2340
+ generateLinkAnnotations(element) {
2341
+ const annotations = {
2342
+ href: element.getAttribute('href') || '',
2343
+ groupKey: misc.generateUUID(),
2344
+ };
2345
+ this.handlers.forEach((handler) => {
2346
+ Object.assign(annotations, handler.handle(element));
2347
+ });
2348
+ return annotations;
2480
2349
  }
2481
2350
  }
2482
2351
 
2483
- /** Handle image alt annotation */
2484
- class ImageAltAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2352
+ /** Handle strike through annotation */
2353
+ class StrikeThroughAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2485
2354
  /**
2486
2355
  * @inheritDoc
2487
2356
  */
2488
2357
  canHandle(targetDto) {
2489
- return targetDto.name === 'RTEImageNode';
2358
+ return targetDto.name === 'RTETextNode';
2490
2359
  }
2491
2360
  /**
2492
2361
  * Handle annotation.
2493
2362
  *
2494
2363
  * @param {HTMLElement} element - Current elements.
2495
- * @returns {VegaRTEImageAnnotations} - Annotation.
2364
+ * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2365
+ * @returns {VegaRTETextAnnotations} - Annotation.
2496
2366
  */
2497
- handle(element) {
2498
- return element.hasAttribute('alt') ? { alt: element.getAttribute('alt') } : {};
2367
+ handle(element, parentAnnotations = {}) {
2368
+ return this.isStrikethrough(element) || parentAnnotations.strikethrough
2369
+ ? { strikethrough: true }
2370
+ : {};
2371
+ }
2372
+ /**
2373
+ * Is strikethrough element.
2374
+ *
2375
+ * @param {HTMLElement} element - current element.
2376
+ * @returns {boolean} - boolean.
2377
+ */
2378
+ isStrikethrough(element) {
2379
+ return (element.style.textDecoration.includes(codeBlock.STRIKETHROUGH_TEXT_DECORATION) ||
2380
+ element.nodeName === 'S' ||
2381
+ element.nodeName === 'DEL' ||
2382
+ element.classList.contains('v-rte--strikethrough'));
2499
2383
  }
2500
2384
  }
2501
2385
 
2502
- /**
2503
- * Handle inline html annotation
2504
- */
2505
- class InlineHtmlAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2506
- constructor() {
2507
- super(...arguments);
2508
- this.customAttributeHandler = new CustomAttributeAnnotationHandler();
2509
- this.customStyleAnnotationHandler = new CustomStyleAnnotationHandler();
2510
- this.customClassAnnotationHandler = new CustomClassAnnotationHandler();
2511
- }
2386
+ /** Handle underline annotation */
2387
+ class UnderlineAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2512
2388
  /**
2513
2389
  * @inheritDoc
2514
2390
  */
2515
- canHandle(targetDto, options) {
2516
- return targetDto.name === 'RTETextNode' && options.autoMatchFormat === false;
2391
+ canHandle(targetDto) {
2392
+ return targetDto.name === 'RTETextNode';
2517
2393
  }
2394
+ /**
2395
+ * Handle annotation.
2396
+ *
2397
+ * @param {HTMLElement} element - Current elements.
2398
+ * @param {VegaRTETextAnnotations} parentAnnotations - Parent annotations.
2399
+ * @returns {VegaRTETextAnnotations} - Annotation.
2400
+ */
2401
+ handle(element, parentAnnotations = {}) {
2402
+ return this.isUnderline(element) || parentAnnotations.underline ? { underline: true } : {};
2403
+ }
2404
+ /**
2405
+ * Is underline element.
2406
+ *
2407
+ * @param {HTMLElement} element - current element.
2408
+ * @returns {boolean} - boolean.
2409
+ */
2410
+ isUnderline(element) {
2411
+ return (element.style.textDecoration.includes(codeBlock.UNDERLINE_TEXT_DECORATION) ||
2412
+ element.nodeName === 'U' ||
2413
+ element.nodeName === 'INS' ||
2414
+ element.classList.contains('v-rte--underline'));
2415
+ }
2416
+ }
2417
+
2418
+ /** Handle image size annotation */
2419
+ class ImageSizeAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2518
2420
  /**
2519
2421
  * @inheritDoc
2520
2422
  */
2521
- handle(element, parentAnnotations) {
2522
- const canHandle = InlineHtmlAnnotationHandler.canHandleTags.includes(element.nodeName);
2523
- if (canHandle) {
2524
- const inlineHtml = this.generateInlineHtmlAnnotation(element, Object.assign({}, parentAnnotations));
2525
- if (inlineHtml) {
2526
- return { inlineHtml: inlineHtml };
2527
- }
2528
- }
2529
- return {};
2423
+ canHandle(targetDto) {
2424
+ return targetDto.name === 'RTEImageNode';
2530
2425
  }
2531
2426
  /**
2532
- * Generate inline html annotation.
2427
+ * Handle annotation.
2533
2428
  *
2534
- * @param {HTMLElement} child - Current element.
2535
- * @param {VegaRTETextAnnotations} annotations - Current annotations.
2536
- * @returns {Nullable<VegaInlineHtmlSchema>} - Inline html annotation.
2429
+ * @param {HTMLElement} element - Current elements.
2430
+ * @returns {VegaRTEImageAnnotations} - Annotation.
2537
2431
  */
2538
- generateInlineHtmlAnnotation(child, annotations) {
2539
- let { inlineHtml } = annotations;
2540
- if (!codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) ||
2541
- (child.childNodes.length === 1 && child.childNodes[0].nodeType !== Node.TEXT_NODE)) {
2542
- const childInlineHtmlNode = {
2543
- htmlTag: child.nodeName.toLowerCase(),
2544
- customAttribute: this.customAttributeHandler.handle(child).customAttribute,
2545
- customStyle: this.customStyleAnnotationHandler.handle(child).customStyle,
2546
- customClass: this.customClassAnnotationHandler.handle(child).customClass,
2547
- };
2548
- if (!inlineHtml) {
2549
- inlineHtml = childInlineHtmlNode;
2550
- }
2551
- else {
2552
- let lastChild = inlineHtml;
2553
- while (lastChild.child &&
2554
- child.parentNode &&
2555
- lastChild.child.htmlTag === child.parentNode.nodeName.toLowerCase()) {
2556
- lastChild = lastChild.child;
2557
- }
2558
- lastChild.child = childInlineHtmlNode;
2559
- }
2432
+ handle(element) {
2433
+ const size = this.getImageSize(element);
2434
+ return size ? { size: size } : {};
2435
+ }
2436
+ /**
2437
+ * Determine the image display size based on the width of the current element.
2438
+ *
2439
+ * @param {HTMLElement} element - current element.
2440
+ * @returns {Nullable<VegaRichTextImageEditorSizeType>} -Image size, default 'md'.
2441
+ */
2442
+ getImageSize(element) {
2443
+ if (element.getAttribute('data-size')) {
2444
+ return element.getAttribute('data-size');
2560
2445
  }
2561
- return inlineHtml ? Object.assign({}, inlineHtml) : null;
2446
+ return null;
2562
2447
  }
2563
2448
  }
2564
- InlineHtmlAnnotationHandler.canHandleTags = [
2565
- 'A',
2449
+
2450
+ /** Handle image alt annotation */
2451
+ class ImageAltAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2452
+ /**
2453
+ * @inheritDoc
2454
+ */
2455
+ canHandle(targetDto) {
2456
+ return targetDto.name === 'RTEImageNode';
2457
+ }
2458
+ /**
2459
+ * Handle annotation.
2460
+ *
2461
+ * @param {HTMLElement} element - Current elements.
2462
+ * @returns {VegaRTEImageAnnotations} - Annotation.
2463
+ */
2464
+ handle(element) {
2465
+ return element.hasAttribute('alt') ? { alt: element.getAttribute('alt') } : {};
2466
+ }
2467
+ }
2468
+
2469
+ /**
2470
+ * Tags whose direct children are always phrasing (inline) content (P, H1-H6, LI).
2471
+ *
2472
+ * This is spec knowledge from the HTML Living Standard — these grouping-content
2473
+ * elements have a phrasing-content content model and cannot contain block-level
2474
+ * descendants. It cannot be derived from the strategy registry and must be
2475
+ * maintained alongside the HTML spec.
2476
+ *
2477
+ * @see https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
2478
+ */
2479
+ const BLOCK_TEXT_CONTAINER_TAGS = new Set([
2480
+ 'P',
2481
+ 'H1',
2482
+ 'H2',
2483
+ 'H3',
2484
+ 'H4',
2485
+ 'H5',
2486
+ 'H6',
2487
+ 'LI',
2488
+ ]);
2489
+ /**
2490
+ * Tags with dedicated element-to-DTO block strategies
2491
+ * (P, H1-H6, LI, UL, OL, IMG, CODE).
2492
+ *
2493
+ * HtmlBlockStrategy skips these to avoid double-processing or overriding their
2494
+ * specialized block semantics.
2495
+ *
2496
+ * Why hard-coded: strategies use heterogeneous matching (`tagName ===`,
2497
+ * `matchTextBlockType` via font-size/class, etc.) so there is no single
2498
+ * declarative contract to derive this set from. It must be kept in sync with
2499
+ * the strategies registered in `dto/setup.ts`.
2500
+ *
2501
+ * Intentionally independent of {@link BLOCK_TEXT_CONTAINER_TAGS} — the two
2502
+ * sets encode different concepts (app architecture vs. HTML spec) and must
2503
+ * be maintained separately.
2504
+ */
2505
+ const DEDICATED_STRATEGY_TAGS = new Set([
2506
+ 'P',
2507
+ 'H1',
2508
+ 'H2',
2509
+ 'H3',
2510
+ 'H4',
2511
+ 'H5',
2512
+ 'H6',
2513
+ 'LI',
2514
+ 'UL',
2515
+ 'OL',
2516
+ 'IMG',
2517
+ 'CODE',
2518
+ ]);
2519
+ /**
2520
+ * Tags that are always treated as phrasing (inline) content, even when they
2521
+ * also appear in {@link DEDICATED_STRATEGY_TAGS} (CODE).
2522
+ * A tag in this set overrides the dedicated-strategy skip in HtmlBlockStrategy.
2523
+ *
2524
+ * Mix of HTML5 spec phrasing-content elements (BR, CODE, A) and
2525
+ * RTE-internal custom elements (VEGA-RICH-TEXT-LINK-EDITOR).
2526
+ */
2527
+ const ALWAYS_INLINE_TAGS = new Set(['BR', 'VEGA-RICH-TEXT-LINK-EDITOR', 'CODE', 'A']);
2528
+ /**
2529
+ * Tags whose content model requires each child to be a distinct block-level
2530
+ * element (table model and definition list).
2531
+ *
2532
+ * TABLE expects CAPTION/THEAD/TBODY/TFOOT/TR; TR expects TH/TD;
2533
+ * THEAD/TBODY/TFOOT expect TR; DL expects DT/DD.
2534
+ *
2535
+ * Used by HtmlBlockStrategy to prevent text-only children (e.g. CAPTION,
2536
+ * TH, TD) from being treated as inline — they must become html-blocks so
2537
+ * the table structure round-trips correctly.
2538
+ *
2539
+ * Note: COLGROUP is intentionally excluded. Its only permitted child is the
2540
+ * void element COL, which can never produce text-node children, so the
2541
+ * text-only heuristic in HtmlBlockStrategy can never fire for a COLGROUP
2542
+ * parent.
2543
+ *
2544
+ * @see https://html.spec.whatwg.org/multipage/tables.html#the-table-element
2545
+ * @see https://html.spec.whatwg.org/multipage/grouping-content.html#the-dl-element
2546
+ */
2547
+ const STRUCTURED_CONTAINER_TAGS = new Set([
2548
+ 'TABLE',
2549
+ 'THEAD',
2550
+ 'TBODY',
2551
+ 'TFOOT',
2552
+ 'TR',
2553
+ 'DL',
2554
+ ]);
2555
+ /**
2556
+ * Formatting phrasing-content elements that CAN remain inline even when empty.
2557
+ *
2558
+ * Any element NOT in this set (DIV, SECTION, ARTICLE, custom elements, etc.)
2559
+ * is treated as a block separator. Phrasing content is a closed, finite set
2560
+ * per the HTML Living Standard, making an allowlist safer than blocklisting
2561
+ * block containers (which is open-ended — custom elements default to block).
2562
+ *
2563
+ * Intentionally excludes:
2564
+ * - BR, CODE, A, VEGA-RICH-TEXT-LINK-EDITOR → handled by {@link ALWAYS_INLINE_TAGS}
2565
+ * - P, H1-H6, LI, UL, OL, IMG → handled by {@link DEDICATED_STRATEGY_TAGS}
2566
+ * - VIDEO, AUDIO, EMBED → embedded content that carries media even when empty;
2567
+ * must be treated as block-level, not as inline formatting artifacts
2568
+ *
2569
+ * @see https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
2570
+ */
2571
+ const PHRASING_CONTENT_TAGS = new Set([
2566
2572
  'ABBR',
2567
- 'AUDIO',
2568
2573
  'B',
2569
2574
  'BDI',
2570
2575
  'BDO',
2571
2576
  'CITE',
2572
- 'CODE',
2573
2577
  'DEL',
2574
2578
  'DFN',
2575
- 'EMBED',
2576
2579
  'EM',
2577
2580
  'I',
2578
2581
  'INS',
@@ -2583,6 +2586,7 @@ InlineHtmlAnnotationHandler.canHandleTags = [
2583
2586
  'PROGRESS',
2584
2587
  'Q',
2585
2588
  'S',
2589
+ 'SAMP',
2586
2590
  'SMALL',
2587
2591
  'SPAN',
2588
2592
  'STRONG',
@@ -2591,8 +2595,89 @@ InlineHtmlAnnotationHandler.canHandleTags = [
2591
2595
  'TIME',
2592
2596
  'U',
2593
2597
  'VAR',
2594
- 'VIDEO',
2595
- ];
2598
+ ]);
2599
+ /**
2600
+ * Returns true when the element is a direct child of a block text container
2601
+ * (P, H1-H6, LI), meaning it must be treated as phrasing content regardless
2602
+ * of its own DOM structure.
2603
+ *
2604
+ * @param {HTMLElement} element - Element to test.
2605
+ * @returns {boolean} True if the element is inside a block text container.
2606
+ */
2607
+ function isInBlockTextContext(element) {
2608
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2609
+ return BLOCK_TEXT_CONTAINER_TAGS.has(element.parentElement.nodeName);
2610
+ }
2611
+
2612
+ /**
2613
+ * Handle inline html annotation
2614
+ */
2615
+ class InlineHtmlAnnotationHandler extends AnnotationGeneratorStrategyAbstract {
2616
+ constructor() {
2617
+ super(...arguments);
2618
+ this.customAttributeHandler = new CustomAttributeAnnotationHandler();
2619
+ this.customStyleAnnotationHandler = new CustomStyleAnnotationHandler();
2620
+ this.customClassAnnotationHandler = new CustomClassAnnotationHandler();
2621
+ }
2622
+ /**
2623
+ * @inheritDoc
2624
+ */
2625
+ canHandle(targetDto, options) {
2626
+ return targetDto.name === 'RTETextNode' && options.autoMatchFormat === false;
2627
+ }
2628
+ /**
2629
+ * @inheritDoc
2630
+ */
2631
+ handle(element, parentAnnotations) {
2632
+ // Skip block-level dedicated tags (P, H1-H6, LI, UL, OL, IMG).
2633
+ // Tags in ALWAYS_INLINE_TAGS (CODE, A) are exempt and still produce inlineHtml annotations.
2634
+ if (DEDICATED_STRATEGY_TAGS.has(element.nodeName) && !ALWAYS_INLINE_TAGS.has(element.nodeName)) {
2635
+ return {};
2636
+ }
2637
+ const inlineHtml = this.generateInlineHtmlAnnotation(element, Object.assign({}, parentAnnotations));
2638
+ if (inlineHtml) {
2639
+ return { inlineHtml: inlineHtml };
2640
+ }
2641
+ return {};
2642
+ }
2643
+ /**
2644
+ * Generate inline html annotation.
2645
+ *
2646
+ * @param {HTMLElement} child - Current element.
2647
+ * @param {VegaRTETextAnnotations} annotations - Current annotations.
2648
+ * @returns {Nullable<VegaInlineHtmlSchema>} - Inline html annotation.
2649
+ */
2650
+ generateInlineHtmlAnnotation(child, annotations) {
2651
+ let { inlineHtml } = annotations;
2652
+ const hasElementChildren = Array.from(child.childNodes).some((c) => c.nodeType === Node.ELEMENT_NODE);
2653
+ if (!codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) || hasElementChildren) {
2654
+ const childInlineHtmlNode = Object.assign(Object.assign({ htmlTag: child.nodeName.toLowerCase() }, (hasElementChildren ? { groupId: misc.generateUUID() } : {})), { customAttribute: this.customAttributeHandler.handle(child).customAttribute, customStyle: this.customStyleAnnotationHandler.handle(child).customStyle, customClass: this.customClassAnnotationHandler.handle(child).customClass });
2655
+ if (!inlineHtml) {
2656
+ inlineHtml = childInlineHtmlNode;
2657
+ }
2658
+ else {
2659
+ inlineHtml = this.appendToInlineHtmlChain(inlineHtml, childInlineHtmlNode, child.parentNode);
2660
+ }
2661
+ }
2662
+ return inlineHtml ? Object.assign({}, inlineHtml) : null;
2663
+ }
2664
+ /**
2665
+ * Immutably appends `toAppend` at the correct position in the chain — the
2666
+ * deepest node whose `child.htmlTag` still matches `parentNode.nodeName`.
2667
+ * Each level is reconstructed via spread so the original chain is never mutated.
2668
+ *
2669
+ * @param {VegaInlineHtmlSchema} node - Current chain node.
2670
+ * @param {VegaInlineHtmlSchema} toAppend - Node to append at the tail.
2671
+ * @param {ParentNode | null} parentNode - DOM parent of the element being processed.
2672
+ * @returns {VegaInlineHtmlSchema} A new chain with `toAppend` inserted.
2673
+ */
2674
+ appendToInlineHtmlChain(node, toAppend, parentNode) {
2675
+ if (node.child && parentNode && node.child.htmlTag === parentNode.nodeName.toLowerCase()) {
2676
+ return Object.assign(Object.assign({}, node), { child: this.appendToInlineHtmlChain(node.child, toAppend, parentNode) });
2677
+ }
2678
+ return Object.assign(Object.assign({}, node), { child: toAppend });
2679
+ }
2680
+ }
2596
2681
 
2597
2682
  /** Html element to annotations generator */
2598
2683
  class HtmlElementToAnnotationGenerator {
@@ -2638,7 +2723,12 @@ class HtmlElementToAnnotationGenerator {
2638
2723
  * @returns {V} Generated annotations.
2639
2724
  */
2640
2725
  generate(targetDto, element, options = { autoMatchFormat: true }) {
2641
- const isLinkElement = element.tagName === 'A';
2726
+ if (options && options.filterInlineStyles) {
2727
+ codeBlock.RTEFilterStylesStrategyRegistry.executeTheStrategyRefillAction(targetDto.name, element);
2728
+ }
2729
+ // Guard against <a> wrapping block content (e.g. <a><video></a>), which is processed as an
2730
+ // html-block (targetDto !== RTETextNode) — link-only mode should not apply in that case.
2731
+ const isLinkElement = Predicate.isLinkElement(element) && targetDto.name === 'RTETextNode';
2642
2732
  const annotations = this.handlers
2643
2733
  .filter((handler) => !options.autoMatchFormat && isLinkElement ? handler instanceof LinkAnnotationHandler : true)
2644
2734
  .filter((handler) => element.nodeType !== Node.TEXT_NODE &&
@@ -2651,7 +2741,7 @@ class HtmlElementToAnnotationGenerator {
2651
2741
  return Object.assign(Object.assign({}, annotations), result);
2652
2742
  }, {});
2653
2743
  this.removeTextStyleDefaultsFromCustomStyle(annotations);
2654
- const strategies = RTEFilterStylesStrategyRegistry.getStrategies(targetDto.name);
2744
+ const strategies = codeBlock.RTEFilterStylesStrategyRegistry.getStrategies(targetDto.name);
2655
2745
  for (const strategy of strategies) {
2656
2746
  if (options.autoMatchFormat || strategy.alwaysFilter) {
2657
2747
  strategy.filterAnnotations(annotations);
@@ -2769,13 +2859,17 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
2769
2859
  */
2770
2860
  canHandle(elementsArray, currentIndex, options) {
2771
2861
  const element = elementsArray[currentIndex];
2772
- // - div + img should be handled by RTEImageBlock
2773
- const isCustomContainer = element.nodeName === 'DIV'
2774
- ? element.childNodes.length > 0 && element.childNodes[0].nodeName !== 'IMG'
2775
- : true;
2862
+ if (element.nodeType === Node.TEXT_NODE || this.isInlineTagWithoutBlockChildren(element, options)) {
2863
+ return 0;
2864
+ }
2865
+ // Skip dedicated-strategy tags unless all children are block-level embedded
2866
+ // elements (e.g. <p><video></p>), in which case fall back to html-block.
2867
+ if (DEDICATED_STRATEGY_TAGS.has(element.nodeName) && !this.shouldFallBackToHtmlBlock(element)) {
2868
+ return 0;
2869
+ }
2776
2870
  return !options.autoMatchFormat &&
2777
- isCustomContainer &&
2778
- HtmlBlockStrategy.canHandleTags.includes(elementsArray[currentIndex].nodeName)
2871
+ this.isCustomHtmlContainer(element) &&
2872
+ !Predicate.isTitleOrSubtitle(element)
2779
2873
  ? 1
2780
2874
  : 0;
2781
2875
  }
@@ -2801,6 +2895,89 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
2801
2895
  shouldProceedToElementChildren() {
2802
2896
  return true;
2803
2897
  }
2898
+ /**
2899
+ * Returns true for elements that should be treated as inline content even if they have no element children (e.g. <span>text</span>).
2900
+ * This includes any element in a block text context (P, H1-H6, LI) and any element with text-node children but no element-node children.
2901
+ *
2902
+ * In raw-HTML mode (autoMatchFormat: false), the text-only heuristic only
2903
+ * applies to elements whose parent is itself a text-only wrapper (e.g.
2904
+ * {@code <div><span>Title</span></div>}). Structural children of non-text
2905
+ * containers (TABLE → CAPTION, TR → TH/TD, etc.) skip this heuristic so
2906
+ * they reach {@link isCustomHtmlContainer} and become html-blocks.
2907
+ *
2908
+ * @param {HTMLElement} element - Element to check.
2909
+ * @param {VegaRTETransformOptions} options - Transform options.
2910
+ * @returns {boolean} True if the element should be treated as inline content.
2911
+ */
2912
+ isInlineTagWithoutBlockChildren(element, options) {
2913
+ if (isInBlockTextContext(element)) {
2914
+ // Empty elements that are not recognized inline elements should not
2915
+ // be forced inline — they may represent block-level embedded content
2916
+ // (e.g. <video src="...">, <audio>, <iframe src="...">).
2917
+ if (element.childNodes.length === 0 &&
2918
+ element.textContent === '' &&
2919
+ !ALWAYS_INLINE_TAGS.has(element.nodeName) &&
2920
+ !PHRASING_CONTENT_TAGS.has(element.nodeName)) {
2921
+ return false;
2922
+ }
2923
+ return true;
2924
+ }
2925
+ const childNodes = Array.from(element.childNodes);
2926
+ const isTextOnly = !childNodes.some((child) => child.nodeType === Node.ELEMENT_NODE) &&
2927
+ childNodes.some((child) => child.nodeType === Node.TEXT_NODE);
2928
+ if (!isTextOnly) {
2929
+ return false;
2930
+ }
2931
+ // In raw-HTML mode, a text-only element is inline only if:
2932
+ // 1. Its parent is not a structured container (TABLE, TR, …)
2933
+ // 2. The element itself is phrasing content (SPAN, EM, …)
2934
+ // Non-phrasing text-only elements (SUMMARY, FIGCAPTION, OPTION, SVG TEXT,
2935
+ // etc.) must fall through to become html-blocks.
2936
+ if (options.autoMatchFormat === false) {
2937
+ if (STRUCTURED_CONTAINER_TAGS.has(element.parentElement.nodeName))
2938
+ return false; // eslint-disable-line @typescript-eslint/no-non-null-assertion
2939
+ return PHRASING_CONTENT_TAGS.has(element.nodeName) || ALWAYS_INLINE_TAGS.has(element.nodeName);
2940
+ }
2941
+ return true;
2942
+ }
2943
+ /**
2944
+ * Returns true when a dedicated-strategy element should fall back to html-block
2945
+ * because all its children are non-text, non-inline, non-dedicated elements
2946
+ * — indicating purely block-level embedded content that the dedicated text-block
2947
+ * strategy cannot represent.
2948
+ *
2949
+ * @param {HTMLElement} element - The dedicated-strategy element to check.
2950
+ * @returns {boolean} True when the element should be treated as html-block.
2951
+ */
2952
+ shouldFallBackToHtmlBlock(element) {
2953
+ const childNodes = Array.from(element.childNodes);
2954
+ if (childNodes.length === 0)
2955
+ return false;
2956
+ // List items are structural children whose dedicated strategies manage
2957
+ // both block and inline children independently — never override them.
2958
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
2959
+ const parentTag = element.parentElement.nodeName;
2960
+ if (parentTag === 'UL' || parentTag === 'OL')
2961
+ return false;
2962
+ return childNodes.every((child) => child.nodeType === Node.ELEMENT_NODE &&
2963
+ child.textContent === '' &&
2964
+ !ALWAYS_INLINE_TAGS.has(child.nodeName) &&
2965
+ !PHRASING_CONTENT_TAGS.has(child.nodeName));
2966
+ }
2967
+ /**
2968
+ * Returns true for elements that should be treated as html containers.
2969
+ * A DIV is only a valid container when its first child is not an IMG
2970
+ * (IMG children are handled by the image strategy instead).
2971
+ *
2972
+ * @param {HTMLElement} element - Element to check.
2973
+ * @returns {boolean} True if the element qualifies as a html container.
2974
+ */
2975
+ isCustomHtmlContainer(element) {
2976
+ if (element.nodeName !== 'DIV') {
2977
+ return true;
2978
+ }
2979
+ return element.childNodes.length > 0 && element.childNodes[0].nodeName !== 'IMG';
2980
+ }
2804
2981
  /**
2805
2982
  * Generate HTML block DTO from an HTML element.
2806
2983
  *
@@ -2818,43 +2995,6 @@ class HtmlBlockStrategy extends BlockToRTEBlockStrategyAbstract {
2818
2995
  };
2819
2996
  }
2820
2997
  }
2821
- HtmlBlockStrategy.canHandleTags = [
2822
- 'ADDRESS',
2823
- 'ARTICLE',
2824
- 'ASIDE',
2825
- 'BLOCKQUOTE',
2826
- 'BUTTON',
2827
- 'CAPTION',
2828
- 'COL',
2829
- 'COLGROUP',
2830
- 'DIV',
2831
- 'DD',
2832
- 'DETAILS',
2833
- 'DL',
2834
- 'DT',
2835
- 'FIELDSET',
2836
- 'FIGCAPTION',
2837
- 'FIGURE',
2838
- 'FOOTER',
2839
- 'FORM',
2840
- 'HEADER',
2841
- 'HR',
2842
- 'HX',
2843
- 'INPUT',
2844
- 'LEGEND',
2845
- 'MAIN',
2846
- 'NAV',
2847
- 'PRE',
2848
- 'SECTION',
2849
- 'SUMMARY',
2850
- 'TABLE',
2851
- 'TBODY',
2852
- 'TD',
2853
- 'TFOOT',
2854
- 'TH',
2855
- 'THEAD',
2856
- 'TR',
2857
- ];
2858
2998
 
2859
2999
  /** Transform ul element to list block DTO */
2860
3000
  class UlToRTEListBlockStrategy extends BlockToRTEBlockStrategyAbstract {
@@ -3446,19 +3586,13 @@ class SpanImageToRTEImageBlockStrategy extends ElementToRTEImageBlockStrategyAbs
3446
3586
  /** Transform continue inline block elements to text block DTO */
3447
3587
  class ContinueInlineToRTETextBlockStrategy extends BlockToRTEBlockStrategyAbstract {
3448
3588
  /**
3449
- * Can be handle.
3450
- *
3451
- * @param {HTMLElement[]} elementsArray - Current elements.
3452
- * @param {number} currentIndex - Current element index.
3453
- * @returns {number} - can be handled element count.
3589
+ * @inheritDoc
3454
3590
  */
3455
- canHandle(elementsArray, currentIndex) {
3591
+ canHandle(elementsArray, currentIndex, options) {
3456
3592
  let count = 0;
3457
3593
  for (let i = currentIndex; i < elementsArray.length; i++) {
3458
3594
  const element = elementsArray[i];
3459
- if (element.nodeType === Node.TEXT_NODE ||
3460
- (ContinueInlineToRTETextBlockStrategy.canHandleTags.includes(element.nodeName) &&
3461
- !(element.textContent === '' && element.querySelector('IMG')))) {
3595
+ if (this.isInlineCandidate(element, options)) {
3462
3596
  count++;
3463
3597
  }
3464
3598
  else {
@@ -3518,14 +3652,88 @@ class ContinueInlineToRTETextBlockStrategy extends BlockToRTEBlockStrategyAbstra
3518
3652
  return null;
3519
3653
  }
3520
3654
  }
3655
+ /**
3656
+ * Check if the element is an inline candidate to be included in the text block.
3657
+ *
3658
+ * @param {HTMLElement} element - The element to check.
3659
+ * @param {VegaRTETransformOptions} [options] - Options for transformation.
3660
+ * @returns {boolean} - Whether the element is an inline candidate.
3661
+ */
3662
+ isInlineCandidate(element, options) {
3663
+ if (element.nodeType === Node.TEXT_NODE)
3664
+ return true;
3665
+ if (ALWAYS_INLINE_TAGS.has(element.nodeName))
3666
+ return true;
3667
+ if (this.isDedicatedBlockTag(element.nodeName))
3668
+ return false;
3669
+ if (options.autoMatchFormat === false && isInBlockTextContext(element))
3670
+ return true;
3671
+ return this.isInlineLeafOrWrapper(element);
3672
+ }
3673
+ /**
3674
+ * Returns true when the tag has a dedicated block strategy (excludes inline annotation tags CODE and A).
3675
+ *
3676
+ * @param {string} nodeName - The node name to check.
3677
+ * @returns {boolean} - Whether the tag is a dedicated block tag.
3678
+ */
3679
+ isDedicatedBlockTag(nodeName) {
3680
+ return DEDICATED_STRATEGY_TAGS.has(nodeName) && !ALWAYS_INLINE_TAGS.has(nodeName);
3681
+ }
3682
+ /**
3683
+ * Returns true for empty elements, text-only elements, or elements whose entire
3684
+ * descendant tree contains no block-level elements (e.g. {@code <u><i><b>text</b></i></u>}).
3685
+ *
3686
+ * @param {HTMLElement} element - The element to check.
3687
+ * @returns {boolean} - Whether the element is an inline leaf or wrapper.
3688
+ */
3689
+ isInlineLeafOrWrapper(element) {
3690
+ if (element.childNodes.length === 0) {
3691
+ // An empty element is inline only if it is a known HTML phrasing-content
3692
+ // element (SPAN, EM, STRONG, …). Block containers (DIV, SECTION, …)
3693
+ // and unknown/custom elements default to block separators.
3694
+ return PHRASING_CONTENT_TAGS.has(element.nodeName);
3695
+ }
3696
+ if (this.isTextOnlyElement(element)) {
3697
+ return PHRASING_CONTENT_TAGS.has(element.nodeName) || ALWAYS_INLINE_TAGS.has(element.nodeName);
3698
+ }
3699
+ return this.hasOnlyInlineDescendants(element);
3700
+ }
3701
+ /**
3702
+ * Returns true when the element has text-node children but no element children.
3703
+ *
3704
+ * @param {HTMLElement} element - The element to check.
3705
+ * @returns {boolean} - Whether the element contains only text nodes.
3706
+ */
3707
+ isTextOnlyElement(element) {
3708
+ const childNodes = Array.from(element.childNodes);
3709
+ return (!childNodes.some((child) => child.nodeType === Node.ELEMENT_NODE) &&
3710
+ childNodes.some((child) => child.nodeType === Node.TEXT_NODE));
3711
+ }
3712
+ /**
3713
+ * Returns true if the element's subtree contains only inline formatting wrappers.
3714
+ * Instead of maintaining a hard coded tag allowlist, the check derives from:
3715
+ * 1. {@link DEDICATED_STRATEGY_TAGS} — rejects known block/media tags
3716
+ * 2. Void-element check — elements with no child nodes (INPUT, COL, HR, …)
3717
+ * are replaced/embedded content, not formatting wrappers
3718
+ *
3719
+ * @param {HTMLElement} element - Element to inspect.
3720
+ * @returns {boolean} True if the element has no block-level descendants.
3721
+ */
3722
+ hasOnlyInlineDescendants(element) {
3723
+ for (let i = 0; i < element.children.length; i++) {
3724
+ const child = element.children[i];
3725
+ if (this.isDedicatedBlockTag(child.nodeName))
3726
+ return false;
3727
+ // An empty element is not a formatting wrapper — it is likely a void/embedded
3728
+ // element (INPUT, HR, COL, empty SPAN) that acts as a block separator.
3729
+ if (!child.hasChildNodes())
3730
+ return false;
3731
+ if (!this.hasOnlyInlineDescendants(child))
3732
+ return false;
3733
+ }
3734
+ return true;
3735
+ }
3521
3736
  }
3522
- ContinueInlineToRTETextBlockStrategy.canHandleTags = [
3523
- ...InlineHtmlAnnotationHandler.canHandleTags,
3524
- 'CODE',
3525
- 'A',
3526
- 'VEGA-RICH-TEXT-LINK-EDITOR',
3527
- 'BR',
3528
- ];
3529
3737
 
3530
3738
  /**
3531
3739
  * Class to handle text node elements and convert them to text node DTOs
@@ -3626,7 +3834,7 @@ class InlineElementToTextNodeStrategy extends ElementToTextNodeStrategy {
3626
3834
  // For empty dom, there will be no internal iteration, we need to handle it directly here.
3627
3835
  // Example: <span></span>, <video src='...'></video>
3628
3836
  const emptyNodeAnnotations = disableAutoMatchFormat
3629
- ? object.cleanObject(Object.assign(Object.assign({}, (codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) ? curAnnotations : {})), { inlineHtml: curAnnotations.inlineHtml, plainText: typeGuard.isNonNullable(curAnnotations.inlineHtml) }))
3837
+ ? object.cleanObject(Object.assign(Object.assign({}, (codeBlock.RTETextNode.supportsHtmlTag(child.nodeName.toLowerCase()) ? curAnnotations : {})), { inlineHtml: curAnnotations.inlineHtml }))
3630
3838
  : curAnnotations;
3631
3839
  return Object.assign({}, this.generateTextNode('', emptyNodeAnnotations));
3632
3840
  }
@@ -3634,80 +3842,39 @@ class InlineElementToTextNodeStrategy extends ElementToTextNodeStrategy {
3634
3842
  }
3635
3843
 
3636
3844
  /**
3637
- * Abstract strategy class for filtering default styles in the rich text editor.
3638
- * Concrete strategies define which styles to strip via `stylesToBeFiltered`.
3639
- *
3640
- * This base is shared by two kinds of concrete strategies:
3641
- * 1. Block/node output strategies – filter inline styles when converting DTO → HTML.
3642
- * 2. Annotation parsing strategies – strip redundant defaults when converting HTML → DTO.
3845
+ * Filter styles strategy for image node, which defines the styles to be filtered and the conditions for filtering and refilling styles for image nodes.
3643
3846
  */
3644
- class RTEFilterStylesStrategy {
3847
+ class ImageFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3848
+ constructor() {
3849
+ super(...arguments);
3850
+ this.stylesToBeFiltered = ImageAnnotation.getDefaultStyles();
3851
+ this.elementTagName = 'img';
3852
+ }
3645
3853
  /**
3646
- * Whether this strategy should always filter, regardless of `autoMatchFormat`.
3647
- * Override to `true` when the filtered styles are always emitted as inline
3648
- * styles by the DTO (e.g. image `vertical-align`), so stripping them from
3649
- * `customStyle` is always safe.
3650
- *
3651
- * Defaults to `false` – the strategy only runs when `autoMatchFormat` is enabled.
3854
+ * Used for the filterAnnotations method.
3652
3855
  *
3653
- * @returns {boolean} Whether filtering should always apply.
3856
+ * @returns {boolean} Always `true` image defaults are emitted as inline styles.
3654
3857
  */
3655
3858
  get alwaysFilter() {
3656
- return false;
3859
+ return true;
3657
3860
  }
3658
3861
  /**
3659
- * Removes matched default styles from the `customStyle` property of the given annotations object.
3660
- * If all custom styles are defaults, the `customStyle` key is deleted entirely.
3661
- *
3662
- * @param {VegaRTEAnnotations} annotations - The annotations object (mutated in place).
3663
- * @returns {VegaRTEAnnotations} The same annotations reference.
3862
+ * @inheritDoc
3664
3863
  */
3665
- filterAnnotations(annotations) {
3666
- const customStyle = annotations.customStyle;
3667
- if (!customStyle) {
3668
- return annotations;
3669
- }
3670
- this.extractAndDeleteMatchedStyles(customStyle);
3671
- if (Object.keys(customStyle).length === 0) {
3672
- delete annotations.customStyle;
3673
- }
3674
- return annotations;
3864
+ canFilter(blockOrNodeInstance) {
3865
+ return codeBlock.Predicate.isImageNode(blockOrNodeInstance);
3675
3866
  }
3676
3867
  /**
3677
- * Removes configured default style properties from the target styles object.
3678
- * Only properties whose value matches the configured default exactly are deleted.
3679
- *
3680
- * @param {Nullable<RTEFilterStyles>} styles - The styles object to mutate.
3681
- * @returns {boolean} `true` if at least one style was extracted.
3868
+ * @inheritDoc
3682
3869
  */
3683
- extractAndDeleteMatchedStyles(styles) {
3684
- let wasExtracted = false;
3685
- if (styles) {
3686
- const defaults = this.stylesToBeFiltered;
3687
- const styleKeys = Object.keys(defaults);
3688
- for (const key of styleKeys) {
3689
- if (styles[key] === defaults[key]) {
3690
- delete styles[key];
3691
- wasExtracted = true;
3692
- }
3693
- }
3694
- }
3695
- return wasExtracted;
3870
+ canRefill(_blockOrNodeClassName, element) {
3871
+ return element.tagName.toLowerCase() === this.elementTagName;
3696
3872
  }
3697
- }
3698
-
3699
- /**
3700
- * Filters the default ImageAnnotation base styles (verticalAlign) from
3701
- * customStyle when parsing an RTEImageNode.
3702
- */
3703
- class ImageFilterStylesStrategy extends RTEFilterStylesStrategy {
3704
- constructor() {
3705
- super(...arguments);
3706
- this.stylesToBeFiltered = ImageAnnotation.getDefaultStyles();
3707
- }
3708
- /** @returns {boolean} Always `true` — image defaults are emitted as inline styles. */
3709
- get alwaysFilter() {
3710
- return true;
3873
+ /**
3874
+ * @inheritDoc
3875
+ */
3876
+ toCssText() {
3877
+ return this.buildCssTextForStyles(this.elementTagName, this.classNameToBeAdded);
3711
3878
  }
3712
3879
  }
3713
3880
 
@@ -3715,10 +3882,33 @@ class ImageFilterStylesStrategy extends RTEFilterStylesStrategy {
3715
3882
  * Filters the default ListAnnotation styles (paddingLeft, marginLeft) from
3716
3883
  * customStyle when parsing an RTEListBlock.
3717
3884
  */
3718
- class ListBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
3885
+ class ListBlockFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3719
3886
  constructor() {
3720
3887
  super(...arguments);
3721
3888
  this.stylesToBeFiltered = ListAnnotation.getDefaultStyles();
3889
+ this.elementTagName = 'ol,ul';
3890
+ }
3891
+ /**
3892
+ * @inheritDoc
3893
+ */
3894
+ canFilter(blockOrNodeInstance) {
3895
+ return codeBlock.Predicate.isListBlock(blockOrNodeInstance.constructor.name);
3896
+ }
3897
+ /**
3898
+ * @inheritDoc
3899
+ */
3900
+ canRefill(blockOrNodeClassName, element) {
3901
+ return codeBlock.Predicate.isListBlock(blockOrNodeClassName) && element.matches(this.elementTagName);
3902
+ }
3903
+ /**
3904
+ * @inheritDoc
3905
+ */
3906
+ toCssText() {
3907
+ const selector = this.elementTagName
3908
+ .split(',')
3909
+ .map((tag) => `.${codeBlock.RTEFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${tag.trim()}`)
3910
+ .join(', ');
3911
+ return `${selector} { ${this.convertStylesMapToCssText(this.stylesToBeFiltered)} }`;
3722
3912
  }
3723
3913
  }
3724
3914
 
@@ -3727,10 +3917,47 @@ class ListBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
3727
3917
  * RTEListItemBlock. List-item blocks implicitly use paragraph styling,
3728
3918
  * so these inline defaults are redundant and should not be persisted.
3729
3919
  */
3730
- class ListItemBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
3920
+ class ListItemBlockFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3731
3921
  constructor() {
3732
3922
  super(...arguments);
3733
- this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph') || {};
3923
+ this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph');
3924
+ this.elementTagName = 'li';
3925
+ this.headingOrTitleClassNamePattern = /^v-rte-(h[1-6]|title|subtitle)$/;
3926
+ }
3927
+ /**
3928
+ * Check the important font-size for list item block are default styles, and the block is a list item block.
3929
+ *
3930
+ * @inheritDoc
3931
+ */
3932
+ canFilter(blockOrNodeInstance) {
3933
+ const styles = blockOrNodeInstance.getStyles();
3934
+ const isDefaultStyles = !styles.fontSize ||
3935
+ this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']);
3936
+ return codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) && isDefaultStyles;
3937
+ }
3938
+ /**
3939
+ * @inheritDoc
3940
+ */
3941
+ canRefill(blockOrNodeClassName, element) {
3942
+ return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
3943
+ element.matches(this.elementTagName) &&
3944
+ this.isElementNotHeadingOrTitle(element));
3945
+ }
3946
+ /**
3947
+ * @inheritDoc
3948
+ */
3949
+ toCssText() {
3950
+ return this.buildCssTextForStyles(this.elementTagName);
3951
+ }
3952
+ /**
3953
+ * Check the list item element does not have heading or title class names.
3954
+ *
3955
+ * @param {HTMLElement} element - The list item element to check.
3956
+ * @returns {boolean} - True if the element does not have heading or title class names, false otherwise.
3957
+ */
3958
+ isElementNotHeadingOrTitle(element) {
3959
+ const classNames = element.className.split(' ');
3960
+ return !classNames.some((className) => this.headingOrTitleClassNamePattern.test(className.trim()));
3734
3961
  }
3735
3962
  }
3736
3963
 
@@ -3743,7 +3970,7 @@ class ListItemBlockFilterStylesStrategy extends RTEFilterStylesStrategy {
3743
3970
  * captures it into `customStyle`. This strategy removes the duplicate so the
3744
3971
  * semantic annotation is the single source of truth.
3745
3972
  */
3746
- class AlignmentFilterStylesStrategy extends RTEFilterStylesStrategy {
3973
+ class AlignmentFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3747
3974
  constructor() {
3748
3975
  super(...arguments);
3749
3976
  this.stylesToBeFiltered = {};
@@ -3773,13 +4000,13 @@ class AlignmentFilterStylesStrategy extends RTEFilterStylesStrategy {
3773
4000
  }
3774
4001
 
3775
4002
  /**
3776
- * Filters the default CodeAnnotation styles (fontFamily, whiteSpace) from
3777
- * customStyle when parsing an RTETextNode that has a `code` annotation.
4003
+ * The CodeFilterStylesStrategy is responsible for filtering code styles from text nodes that are annotated as code.
3778
4004
  */
3779
- class CodeFilterStylesStrategy extends RTEFilterStylesStrategy {
4005
+ class CodeFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3780
4006
  constructor() {
3781
4007
  super(...arguments);
3782
4008
  this.stylesToBeFiltered = codeBlock.CodeAnnotation.getDefaultStyles();
4009
+ this.elementTagName = 'code';
3783
4010
  }
3784
4011
  /**
3785
4012
  * Only strips code-default styles when the `code` annotation is present,
@@ -3795,34 +4022,33 @@ class CodeFilterStylesStrategy extends RTEFilterStylesStrategy {
3795
4022
  }
3796
4023
  return super.filterAnnotations(annotations);
3797
4024
  }
3798
- }
3799
-
3800
- /**
3801
- * Filters the default internal link styles (color) from `link.customStyle` when
3802
- * parsing an RTETextNode. Vega applies these styles during standalone rendering;
3803
- * they are redundant when parsed back and must not be persisted as custom overrides.
3804
- */
3805
- class LinkFilterStylesStrategy extends RTEFilterStylesStrategy {
3806
- constructor() {
3807
- super(...arguments);
3808
- this.stylesToBeFiltered = codeBlock.LinkGroupAnnotation.getDefaultStyles();
4025
+ /**
4026
+ * Determines whether the dto instance is a code text node.
4027
+ *
4028
+ * @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
4029
+ * @returns {boolean} - True if the instance is a code text node, false otherwise.
4030
+ */
4031
+ canFilter(blockOrNodeInstance) {
4032
+ return codeBlock.Predicate.isCodeNode(blockOrNodeInstance);
3809
4033
  }
3810
4034
  /**
3811
- * Filter default link styles from `link.customStyle` in annotations.
4035
+ * Check if the node is a text node and it is a code node.
3812
4036
  *
3813
- * @param {VegaRTEAnnotations} annotations - The annotations to filter.
3814
- * @returns {VegaRTEAnnotations} The same annotations reference with link.customStyle cleaned up.
4037
+ * @param {string} blockOrNodeClassName - The class name of the block or node instance to check.
4038
+ * @param {HTMLElement} element - The HTML element of the node instance.
4039
+ * @returns {boolean} True if the node is a text node it a code element.
3815
4040
  */
3816
- filterAnnotations(annotations) {
3817
- const link = annotations.link;
3818
- if (!(link === null || link === void 0 ? void 0 : link.customStyle)) {
3819
- return annotations;
3820
- }
3821
- this.extractAndDeleteMatchedStyles(link.customStyle);
3822
- if (Object.keys(link.customStyle).length === 0) {
3823
- delete link.customStyle;
3824
- }
3825
- return annotations;
4041
+ canRefill(blockOrNodeClassName, element) {
4042
+ return codeBlock.Predicate.isTextNode(blockOrNodeClassName) && element.matches(this.elementTagName);
4043
+ }
4044
+ /**
4045
+ * The code style in title and heading no need to be bold in default.
4046
+ *
4047
+ * @returns {string} The CSS text string for code styles.
4048
+ */
4049
+ toCssText() {
4050
+ const selector = `.${codeBlock.RTEFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${this.elementTagName}`;
4051
+ return `${selector} { ${this.convertStylesMapToCssText(Object.assign(Object.assign({}, this.stylesToBeFiltered), { fontWeight: '500' }))} }`;
3826
4052
  }
3827
4053
  }
3828
4054
 
@@ -3832,7 +4058,7 @@ class LinkFilterStylesStrategy extends RTEFilterStylesStrategy {
3832
4058
  * annotations and should not be persisted as custom overrides after source
3833
4059
  * edit round-trips.
3834
4060
  */
3835
- class TextFormatFilterStylesStrategy extends RTEFilterStylesStrategy {
4061
+ class TextFormatFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
3836
4062
  constructor() {
3837
4063
  super(...arguments);
3838
4064
  this.stylesToBeFiltered = {};
@@ -3914,6 +4140,244 @@ class TextFormatFilterStylesStrategy extends RTEFilterStylesStrategy {
3914
4140
  }
3915
4141
  }
3916
4142
 
4143
+ /**
4144
+ *
4145
+ */
4146
+ class ParagraphFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
4147
+ constructor() {
4148
+ super(...arguments);
4149
+ this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles('paragraph');
4150
+ this.type = 'paragraph';
4151
+ this.elementTagName = 'p';
4152
+ }
4153
+ /**
4154
+ * Don't run the filterAnnotations for paragraph heading, title, subtitle, list heading item, list title item, list subtitle item.
4155
+ * Already handle it in html-element-to-annotation-generator.ts#removeTextStyleDefaultsFromCustomStyle
4156
+ *
4157
+ * @inheritDoc
4158
+ */
4159
+ filterAnnotations(annotations) {
4160
+ return annotations;
4161
+ }
4162
+ /**
4163
+ * Determines whether the dto instance is text block and has the same type as the strategy's configured type.
4164
+ *
4165
+ * @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
4166
+ * @returns {boolean} - True if the instance is a text block with the same type as the strategy, false otherwise.
4167
+ */
4168
+ canFilter(blockOrNodeInstance) {
4169
+ return (codeBlock.Predicate.isTextBlock(blockOrNodeInstance.constructor.name) &&
4170
+ blockOrNodeInstance.type === this.type);
4171
+ }
4172
+ /**
4173
+ * @inheritDoc
4174
+ */
4175
+ canRefill(blockOrNodeClassName, element) {
4176
+ const selector = this.classNameToBeAdded
4177
+ ? `.${this.classNameToBeAdded}`
4178
+ : this.elementTagName;
4179
+ return codeBlock.Predicate.isTextBlock(blockOrNodeClassName) && element.matches(selector);
4180
+ }
4181
+ /**
4182
+ * @inheritDoc
4183
+ */
4184
+ toCssText() {
4185
+ return this.buildCssTextForStyles(this.elementTagName, this.classNameToBeAdded);
4186
+ }
4187
+ }
4188
+
4189
+ /**
4190
+ * The HeadingFilterStylesStrategy class is responsible for filtering and refilling styles for heading text blocks (h1 to h6) in the rich text editor.
4191
+ */
4192
+ class HeadingFilterStylesStrategy extends ParagraphFilterStylesStrategy {
4193
+ constructor(level) {
4194
+ super();
4195
+ this.type = 'heading-1';
4196
+ this.elementTagName = 'h1';
4197
+ this.type = `heading-${level}`;
4198
+ this.elementTagName = `h${level}`;
4199
+ this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles(this.type);
4200
+ }
4201
+ }
4202
+
4203
+ /**
4204
+ * The TitleFilterStylesStrategy class is responsible for filtering and refilling styles for title and subtitle text blocks in the rich text editor.
4205
+ */
4206
+ class TitleFilterStylesStrategy extends ParagraphFilterStylesStrategy {
4207
+ constructor(titleType) {
4208
+ super();
4209
+ this.type = 'title';
4210
+ this.elementTagName = 'div';
4211
+ this.classNameToBeAdded = 'v-rte-title';
4212
+ this.type = titleType;
4213
+ this.classNameToBeAdded = `v-rte-${titleType}`;
4214
+ this.stylesToBeFiltered = codeBlock.TextStyleAnnotation.getDefaultStyles(this.type);
4215
+ }
4216
+ }
4217
+
4218
+ /**
4219
+ * The TitleHeadingNodeFilterStylesStrategy is responsible for filtering styles from text nodes that are children of title and heading blocks.
4220
+ * In title and heading blocks, the text nodes will have a default bold style.
4221
+ */
4222
+ class TitleHeadingNodeFilterStylesStrategy extends codeBlock.RTEFilterStylesStrategy {
4223
+ constructor() {
4224
+ super(...arguments);
4225
+ this.stylesToBeFiltered = TitleHeadingNodeFilterStylesStrategy.BOLD_STYLES;
4226
+ this.elementTagName = 'span';
4227
+ this.parentBlockTypes = [
4228
+ 'heading-1',
4229
+ 'heading-2',
4230
+ 'heading-3',
4231
+ 'heading-4',
4232
+ 'heading-5',
4233
+ 'heading-6',
4234
+ 'title',
4235
+ ];
4236
+ this.parentElementSelectors = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', '.v-rte-title'];
4237
+ this.toBeCheckedSelector = this.parentElementSelectors.join(',');
4238
+ }
4239
+ /**
4240
+ * Don't run filterAnnotations method, because already handle it in text format filter strategy.
4241
+ *
4242
+ * @inheritDoc
4243
+ */
4244
+ filterAnnotations(annotations) {
4245
+ return annotations;
4246
+ }
4247
+ /**
4248
+ * Determines whether the dto instance is text node and its parent block is a heading or title.
4249
+ *
4250
+ * @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
4251
+ * @returns {boolean} - True if the instance is a text node and its parent block is a heading or title, false otherwise.
4252
+ */
4253
+ canFilter(blockOrNodeInstance) {
4254
+ return (codeBlock.Predicate.isTextNode(blockOrNodeInstance.constructor.name) &&
4255
+ this.parentBlockIsHeadingOrTitle(blockOrNodeInstance));
4256
+ }
4257
+ /**
4258
+ * Check if the node is a text node and its parent block is a heading or title.
4259
+ *
4260
+ * @param {string} blockOrNodeClassName - The class name of the block or node instance to check.
4261
+ * @param {HTMLElement} element - The HTML element of the node instance.
4262
+ * @returns {boolean} True if the node is a text node and its parent block is a heading or title, false otherwise.
4263
+ */
4264
+ canRefill(blockOrNodeClassName, element) {
4265
+ return (codeBlock.Predicate.isTextNode(blockOrNodeClassName) &&
4266
+ element.nodeName === 'SPAN' &&
4267
+ this.isHeadingOrTitleChild(element));
4268
+ }
4269
+ /**
4270
+ * @inheritDoc
4271
+ */
4272
+ toCssText() {
4273
+ const selectors = this.parentElementSelectors.map((key) => `.${TitleHeadingNodeFilterStylesStrategy.RTE_CONTENT_CONTAINER_CLASS_NAME} ${key}`);
4274
+ return `${selectors.join(',')} { ${this.convertStylesMapToCssText()} }`;
4275
+ }
4276
+ /**
4277
+ * Checks if the parent block of the given node instance is a heading or title.
4278
+ *
4279
+ * @param {RTENode | RTEBlock} blockOrNodeInstance - The node instance to check.
4280
+ * @returns {boolean} True if the parent block is a heading or title, false otherwise.
4281
+ */
4282
+ parentBlockIsHeadingOrTitle(blockOrNodeInstance) {
4283
+ const parentBlock = blockOrNodeInstance.parent;
4284
+ return parentBlock ? this.parentBlockTypes.includes(parentBlock.type) : false;
4285
+ }
4286
+ /**
4287
+ * Check if the element is a descendant of a heading or title element.
4288
+ * Traverses upward through the DOM, stopping at the block element or body element
4289
+ * to avoid unbounded traversal to the document root.
4290
+ *
4291
+ * <h1><span>bold text</span></h1>
4292
+ * <h1><a><span>link text</span></a></h1>
4293
+ * <h1><a><b><span>nested text</span></b></a></h1>
4294
+ *
4295
+ * @param {HTMLElement} element - The element to check.
4296
+ * @returns {boolean} True if the element is a descendant of a heading or title, false otherwise.
4297
+ */
4298
+ isHeadingOrTitleChild(element) {
4299
+ let current = element.parentElement;
4300
+ while (current) {
4301
+ if (current.matches(this.toBeCheckedSelector))
4302
+ return true;
4303
+ // Stop traversing upward if we reach a block element to prevent unbounded traversal to the document root. The title children will always be wrapped in a div, so we can safely stop at div as well.
4304
+ if (TitleHeadingNodeFilterStylesStrategy.NON_HEADING_TITLE_ELEMENT_TAGS.includes(current.tagName))
4305
+ return false;
4306
+ current = current.parentElement;
4307
+ }
4308
+ return false;
4309
+ }
4310
+ }
4311
+ TitleHeadingNodeFilterStylesStrategy.BOLD_STYLES = {
4312
+ fontWeight: '700',
4313
+ };
4314
+ TitleHeadingNodeFilterStylesStrategy.NON_HEADING_TITLE_ELEMENT_TAGS = [
4315
+ 'TD',
4316
+ 'TH',
4317
+ 'TR',
4318
+ 'TABLE',
4319
+ 'THEAD',
4320
+ 'TBODY',
4321
+ 'DIV',
4322
+ 'BODY',
4323
+ ];
4324
+
4325
+ /**
4326
+ * Filters the default heading styles from customStyle when parsing an RTEListItemBlock that is supposed to be a heading.
4327
+ */
4328
+ class ListHeadingItemBlockFilterStylesStrategy extends HeadingFilterStylesStrategy {
4329
+ constructor(level) {
4330
+ super(level);
4331
+ this.classNameToBeAdded = `v-rte-h${level}`;
4332
+ this.elementTagName = 'li';
4333
+ }
4334
+ /**
4335
+ * Check the important font-size and line-height for list item block are default styles, and the block is a list item block.
4336
+ *
4337
+ * @inheritDoc
4338
+ */
4339
+ canFilter(blockOrNodeInstance) {
4340
+ return (codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) &&
4341
+ this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']));
4342
+ }
4343
+ /**
4344
+ * @inheritDoc
4345
+ */
4346
+ canRefill(blockOrNodeClassName, element) {
4347
+ return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
4348
+ element.matches(this.elementTagName) &&
4349
+ element.classList.contains(this.classNameToBeAdded));
4350
+ }
4351
+ }
4352
+
4353
+ /**
4354
+ * Filters the default title/subtitle styles from customStyle when parsing an RTEListItemBlock that is supposed to be a title/subtitle.
4355
+ */
4356
+ class ListTitleItemBlockFilterStylesStrategy extends TitleFilterStylesStrategy {
4357
+ constructor(type) {
4358
+ super(type);
4359
+ this.classNameToBeAdded = `v-rte-${type}`;
4360
+ this.elementTagName = 'li';
4361
+ }
4362
+ /**
4363
+ * Check the important font-size and line-height for list item block are default styles, and the block is a list item block.
4364
+ *
4365
+ * @inheritDoc
4366
+ */
4367
+ canFilter(blockOrNodeInstance) {
4368
+ return (codeBlock.Predicate.isListItemBlock(blockOrNodeInstance.constructor.name) &&
4369
+ this.isBlockOrNodeStylesMatchFilterStyles(blockOrNodeInstance, ['fontSize', 'lineHeight']));
4370
+ }
4371
+ /**
4372
+ * @inheritDoc
4373
+ */
4374
+ canRefill(blockOrNodeClassName, element) {
4375
+ return (codeBlock.Predicate.isListItemBlock(blockOrNodeClassName) &&
4376
+ element.matches(this.elementTagName) &&
4377
+ element.classList.contains(this.classNameToBeAdded));
4378
+ }
4379
+ }
4380
+
3917
4381
  /**
3918
4382
  * Register and setup the default DTO classes and their basic action strategies.
3919
4383
  */
@@ -3949,25 +4413,46 @@ ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new SpanImageToR
3949
4413
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaImageToRTEImageBlockStrategy());
3950
4414
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new ImgToRTEImageBlockStrategy());
3951
4415
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new InlineBlockToRTETextBlockStrategy());
3952
- ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new JiraCodeToRTECodeBlockStrategy());
3953
- ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaCodeBlockToRTECodeBlockStrategy());
3954
4416
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new LiToRTEListItemBlockStrategy());
3955
4417
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new ULNotLiChildToRTEListItemBlockStrategy());
3956
4418
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new OlToRTEListBlockStrategy());
3957
4419
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new UlToRTEListBlockStrategy());
3958
4420
  ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new HtmlBlockStrategy());
4421
+ //!important: Code block strategies must be registered after HtmlBlockStrategy because registerElementToBlockStrategy uses unshift, giving later registrations higher priority.
4422
+ ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new JiraCodeToRTECodeBlockStrategy());
4423
+ ElementToDTOClassStrategyManager.registerElementToBlockStrategy(new VegaCodeBlockToRTECodeBlockStrategy());
3959
4424
  ElementToDTOClassStrategyManager.registerElementToNodeStrategy(new InlineElementToTextNodeStrategy());
3960
4425
  ElementToDTOClassStrategyManager.registerElementToNodeStrategy(new PlainTextToTextNodeStrategy());
3961
4426
  // Register filter styles strategies (remove redundant default styles during HTML → DTO conversion)
3962
- RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new ListBlockFilterStylesStrategy());
3963
- RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListItemBlockFilterStylesStrategy());
3964
- RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new AlignmentFilterStylesStrategy());
3965
- RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new AlignmentFilterStylesStrategy());
3966
- RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new AlignmentFilterStylesStrategy());
3967
- RTEFilterStylesStrategyRegistry.register(RTEImageNode.name, new ImageFilterStylesStrategy());
3968
- RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new LinkFilterStylesStrategy());
3969
- RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new TextFormatFilterStylesStrategy());
3970
- RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new CodeFilterStylesStrategy());
4427
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new AlignmentFilterStylesStrategy());
4428
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new AlignmentFilterStylesStrategy());
4429
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new AlignmentFilterStylesStrategy());
4430
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new TextFormatFilterStylesStrategy());
4431
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new ParagraphFilterStylesStrategy());
4432
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(1));
4433
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(2));
4434
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(3));
4435
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(4));
4436
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(5));
4437
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new HeadingFilterStylesStrategy(6));
4438
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new TitleFilterStylesStrategy('title'));
4439
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextBlock.name, new TitleFilterStylesStrategy('subtitle'));
4440
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new TitleHeadingNodeFilterStylesStrategy());
4441
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new CodeFilterStylesStrategy());
4442
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTETextNode.name, new codeBlock.LinkFilterStylesStrategy());
4443
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEImageNode.name, new ImageFilterStylesStrategy());
4444
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTECodeBlock.name, new codeBlock.CodeBlockFilterStylesStrategy());
4445
+ codeBlock.RTEFilterStylesStrategyRegistry.register(codeBlock.RTECodeBlockNode.name, new codeBlock.CodeBlockNodeFilterStylesStrategy());
4446
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListBlock.name, new ListBlockFilterStylesStrategy());
4447
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListItemBlockFilterStylesStrategy());
4448
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(1));
4449
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(2));
4450
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(3));
4451
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(4));
4452
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(5));
4453
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListHeadingItemBlockFilterStylesStrategy(6));
4454
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListTitleItemBlockFilterStylesStrategy('title'));
4455
+ codeBlock.RTEFilterStylesStrategyRegistry.register(RTEListItemBlock.name, new ListTitleItemBlockFilterStylesStrategy('subtitle'));
3971
4456
 
3972
4457
  /**
3973
4458
  * StylePreservator handles CSP-compliant style management by temporarily converting
@@ -4294,6 +4779,15 @@ class VegaRTEContent {
4294
4779
  .filter(typeGuard.isNonNullable);
4295
4780
  return new VegaRTEContent(blocks);
4296
4781
  }
4782
+ /**
4783
+ * Generates the content style file for the rich text editor based on the registered filter styles strategies.
4784
+ *
4785
+ * @param {VegaRTEGenerateStyleOptions} options - Options for generating the content style file.
4786
+ * @returns {string} The html template style text.
4787
+ */
4788
+ static generateContentStyles(options) {
4789
+ return codeBlock.RTEFilterStylesStrategyRegistry.generateAllStylesContent(options === null || options === void 0 ? void 0 : options.enableFontImports);
4790
+ }
4297
4791
  /**
4298
4792
  * Clones the content state.
4299
4793
  *
@@ -4316,18 +4810,20 @@ class VegaRTEContent {
4316
4810
  /**
4317
4811
  * Converts the content state to HTML.
4318
4812
  *
4319
- * @deprecated The [`options`]{@link options} parameter is deprecated and will be removed in the future.
4320
- * @param {VegaRTETransformOptions} [options] - Deprecated. Optional rendering context (currently unused).
4813
+ * @param {VegaRTETransformOptions} [options] - The conversion options.
4321
4814
  * @returns {string} The HTML representation of the content state.
4322
4815
  */
4323
4816
  toHtml(options) {
4324
- if (options) {
4325
- globalSlimmerRegistry.LogUtility.warn(`The 'options' parameter in toHtml method is deprecated and will be removed in the future.`);
4817
+ if (options &&
4818
+ (typeGuard.isNonNullable(options.autoMatchFormat) || typeGuard.isNonNullable(options.skipCustomAnnotations))) {
4819
+ globalSlimmerRegistry.LogUtility.warn(`The 'options' parameter's properties 'autoMatchFormat' and 'skipCustomAnnotations' in toHtml method are deprecated and will be removed in the future.`);
4326
4820
  }
4327
4821
  if (this.isEmpty()) {
4328
4822
  return '';
4329
4823
  }
4330
- return this.children.map((block) => block.toHtml()).join('');
4824
+ return this.children
4825
+ .map((block) => block.toHtml({ filterInlineStyles: options === null || options === void 0 ? void 0 : options.filterInlineStyles }))
4826
+ .join('');
4331
4827
  }
4332
4828
  /**
4333
4829
  * Checks if the content state is empty.
@@ -4335,7 +4831,14 @@ class VegaRTEContent {
4335
4831
  * @returns {boolean} True if the content state is empty, false otherwise.
4336
4832
  */
4337
4833
  isEmpty() {
4338
- return this.children.length === 0 || (this.children.length === 1 && !this.children[0].isNotEmpty());
4834
+ if (this.children.length === 0) {
4835
+ return true;
4836
+ }
4837
+ if (this.children.length === 1) {
4838
+ const block = this.children[0];
4839
+ return !block.isNotEmpty();
4840
+ }
4841
+ return false;
4339
4842
  }
4340
4843
  /**
4341
4844
  * Internal method to add the block item, remove the block item