@globalpayments/vega 2.61.0 → 2.62.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 (417) hide show
  1. package/dist/cjs/{app-globals-7e624dd0.js → app-globals-8f5fa42a.js} +23 -15
  2. package/dist/cjs/base-renderer-0a3b62b7.js +9 -0
  3. package/dist/cjs/{child-nodes-event-prevent-slimmer-184fe3b2.js → child-nodes-event-prevent-slimmer-4e96270e.js} +1 -1
  4. package/dist/cjs/{code-block-ecb2df41.js → code-block-eb66d852.js} +73 -22
  5. package/dist/cjs/{component-value-history-controller-slimmer.abstract-58a0f64c.js → component-value-history-controller-slimmer.abstract-62cdf04c.js} +16 -182
  6. package/dist/cjs/{design-token-16f74439.js → design-token-76bb47bd.js} +1 -1
  7. package/dist/cjs/{dom-node-subject-factory-4eb1fec2.js → dom-node-subject-observer-factory-58e3c010.js} +41 -0
  8. package/dist/cjs/{content-state-d7b8e70b.js → dto-renderer-manager-f3894490.js} +1647 -1501
  9. package/dist/cjs/{element-appender-slimmer-c4816142.js → element-appender-slimmer-e8dac628.js} +7 -8
  10. package/dist/cjs/{event-emit-slimmer-2da7c9d6.js → event-emit-slimmer-428d8802.js} +3 -4
  11. package/dist/cjs/{form-field-controller-slimmer-dab30e5c.js → form-field-controller-slimmer-cc6e53a4.js} +4 -5
  12. package/dist/cjs/{image-annotation-action-7eaab3ce.js → image-annotation-action-a628ec9b.js} +24 -81
  13. package/dist/cjs/{index-da628bba.js → index-5505e8dd.js} +3 -3
  14. package/dist/cjs/index.cjs.js +49 -23
  15. package/dist/cjs/{icon-manager-9072356d.js → internal-icon-manager-32f9ed63.js} +51 -0
  16. package/dist/cjs/{internal-vega-event-manager-7b87c2f4.js → internal-vega-event-manager-28b957c8.js} +73 -73
  17. package/dist/cjs/language-extension-20a1dba5.js +207 -0
  18. package/dist/cjs/loader.cjs.js +14 -12
  19. package/dist/cjs/{public-rules-21622bd0.js → public-rules-5d0f3a5f.js} +5 -5
  20. package/dist/cjs/range-cfc45f9e.js +178 -0
  21. package/dist/cjs/{responsive-format-facade-0d22ff78.js → responsive-format-facade-7e933525.js} +4 -3
  22. package/dist/cjs/{rich-text-editor-required-rule-8d7e441a.js → rich-text-editor-required-rule-72170c10.js} +2 -2
  23. package/dist/cjs/{string-input-formatter-slimmer-5a744e71.js → string-input-formatter-slimmer-f6c7a255.js} +4 -4
  24. package/dist/cjs/{style-formatter-a66813a2.js → style-formatter-702df81e.js} +1 -1
  25. package/dist/cjs/{sub-state-notify-slimmer-9602b5bb.js → sub-state-notify-slimmer-bb64fcfc.js} +4 -4
  26. package/dist/cjs/{sub-state-observer-slimmer-df7df5bb.js → sub-state-observer-slimmer-84175d61.js} +4 -4
  27. package/dist/cjs/{vega-skeleton-loader-controller-9c54f3aa.js → token-extension-23ccff1d.js} +679 -3
  28. package/dist/cjs/vega-accordion.cjs.entry.js +15 -16
  29. package/dist/cjs/vega-app-header-button.cjs.entry.js +20 -21
  30. package/dist/cjs/vega-banner.cjs.entry.js +7 -9
  31. package/dist/cjs/vega-box.cjs.entry.js +13 -12
  32. package/dist/cjs/vega-brand-logo.cjs.entry.js +1 -2
  33. package/dist/cjs/vega-breadcrumb.cjs.entry.js +8 -9
  34. package/dist/cjs/vega-button-circle.cjs.entry.js +16 -16
  35. package/dist/cjs/vega-button-group_2.cjs.entry.js +11 -12
  36. package/dist/cjs/vega-button-link.cjs.entry.js +7 -8
  37. package/dist/cjs/vega-button.cjs.entry.js +15 -15
  38. package/dist/cjs/vega-calendar_4.cjs.entry.js +22 -24
  39. package/dist/cjs/vega-card.cjs.entry.js +12 -11
  40. package/dist/cjs/vega-carousel.cjs.entry.js +13 -13
  41. package/dist/cjs/vega-checkbox_2.cjs.entry.js +12 -13
  42. package/dist/cjs/vega-chip.cjs.entry.js +17 -17
  43. package/dist/cjs/vega-code-block.cjs.entry.js +16 -17
  44. package/dist/cjs/vega-color-picker.cjs.entry.js +6 -7
  45. package/dist/cjs/vega-combo-box.cjs.entry.js +14 -15
  46. package/dist/cjs/vega-date-picker_2.cjs.entry.js +30 -31
  47. package/dist/cjs/vega-dialog_2.cjs.entry.js +27 -27
  48. package/dist/cjs/vega-divider.cjs.entry.js +12 -11
  49. package/dist/cjs/vega-dropdown_5.cjs.entry.js +32 -32
  50. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  51. package/dist/cjs/vega-field-label.cjs.entry.js +6 -7
  52. package/dist/cjs/vega-file-uploader.cjs.entry.js +15 -17
  53. package/dist/cjs/vega-flag-icon.cjs.entry.js +13 -13
  54. package/dist/cjs/vega-flex.cjs.entry.js +12 -11
  55. package/dist/cjs/vega-font.cjs.entry.js +12 -11
  56. package/dist/cjs/vega-form.cjs.entry.js +13 -14
  57. package/dist/cjs/vega-grid.cjs.entry.js +12 -11
  58. package/dist/cjs/vega-icon.cjs.entry.js +15 -14
  59. package/dist/cjs/vega-image-uploader.cjs.entry.js +18 -18
  60. package/dist/cjs/vega-input-credit-card.cjs.entry.js +14 -16
  61. package/dist/cjs/vega-input-numeric.cjs.entry.js +10 -11
  62. package/dist/cjs/vega-input-phone-number.cjs.entry.js +20 -21
  63. package/dist/cjs/vega-input-range.cjs.entry.js +11 -12
  64. package/dist/cjs/vega-input-select.cjs.entry.js +27 -28
  65. package/dist/cjs/vega-input.cjs.entry.js +12 -13
  66. package/dist/cjs/vega-item-toggle.cjs.entry.js +5 -6
  67. package/dist/cjs/vega-left-nav_5.cjs.entry.js +33 -34
  68. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +13 -12
  69. package/dist/cjs/vega-page-notification_2.cjs.entry.js +2 -3
  70. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +8 -9
  71. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +3 -4
  72. package/dist/cjs/vega-pagination.cjs.entry.js +18 -18
  73. package/dist/cjs/vega-popover_2.cjs.entry.js +18 -18
  74. package/dist/cjs/vega-progress-tracker.cjs.entry.js +5 -6
  75. package/dist/cjs/vega-radio_2.cjs.entry.js +13 -14
  76. package/dist/cjs/vega-rich-text-content.cjs.entry.js +53 -48
  77. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +387 -261
  78. package/dist/cjs/vega-segment-control.cjs.entry.js +5 -6
  79. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +20 -20
  80. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +13 -14
  81. package/dist/cjs/vega-sidenav_3.cjs.entry.js +24 -25
  82. package/dist/cjs/vega-signature-capture.cjs.entry.js +16 -17
  83. package/dist/cjs/vega-stepper.cjs.entry.js +12 -13
  84. package/dist/cjs/vega-tab-group_2.cjs.entry.js +8 -9
  85. package/dist/cjs/vega-table_8.cjs.entry.js +58 -59
  86. package/dist/cjs/vega-textarea.cjs.entry.js +9 -10
  87. package/dist/cjs/vega-time-picker_2.cjs.entry.js +24 -24
  88. package/dist/cjs/vega-toggle-switch.cjs.entry.js +7 -8
  89. package/dist/cjs/vega-tooltip_2.cjs.entry.js +12 -12
  90. package/dist/cjs/vega.cjs.js +14 -12
  91. package/dist/collection/components/vega-rich-text-content/vega-rich-text-content.js +31 -0
  92. package/dist/collection/components/vega-rich-text-editor/constants/constant.js +10 -0
  93. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/action-handle-strategy-registry.js +11 -0
  94. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/apply-annotation-strategies/node-split-text-strategy.js +6 -3
  95. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/block-delete-text-or-decorator-node-strategy.js +12 -6
  96. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/code-block-remove-self-strategy.js +2 -2
  97. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/insert-node-to-nearest-root-strategy.js +57 -0
  98. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/update-cursor-position-strategy.js +2 -1
  99. package/dist/collection/components/vega-rich-text-editor/dto/actions/insert-node-to-nearest-root-action.js +14 -0
  100. package/dist/collection/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.js +1 -0
  101. package/dist/collection/components/vega-rich-text-editor/dto/actions/update-cursor-position-action.js +5 -2
  102. package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +12 -0
  103. package/dist/collection/components/vega-rich-text-editor/dto/nodes/text-node.js +36 -10
  104. package/dist/collection/components/vega-rich-text-editor/dto/renderers/blocks/link-wrapper-renderer.js +10 -4
  105. package/dist/collection/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.js +145 -0
  106. package/dist/collection/components/vega-rich-text-editor/extensions/extension.abstract.js +97 -0
  107. package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-extension.js +113 -0
  108. package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-toolbar-button-renderer.js +90 -0
  109. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/insert-token-node-action.js +16 -0
  110. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/insert-token-node-strategy.js +20 -0
  111. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.js +60 -0
  112. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-extension.js +38 -0
  113. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.js +67 -0
  114. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-node.js +55 -0
  115. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.js +88 -0
  116. package/dist/collection/components/vega-rich-text-editor/public-api.js +38 -0
  117. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/extension-controller.js +97 -0
  118. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/focus-controller.js +8 -6
  119. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy.abstract.js +12 -0
  120. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/selection-controller.js +9 -3
  121. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.js +43 -18
  122. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/link-toolbar-button-slimmer.js +3 -1
  123. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/toolbar-button-slimmer.abstract.js +6 -6
  124. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/visual-mode-toolbar-button-slimmer.abstract.js +9 -9
  125. package/dist/collection/components/vega-rich-text-editor/test/dto/content-state.test.js +41 -0
  126. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +44 -11
  127. package/dist/collection/global/scripts/before-vega-load.js +9 -0
  128. package/dist/collection/helpers/code-format/test/code-formatter.test.js +1 -1
  129. package/dist/collection/helpers/public-api.js +1 -1
  130. package/dist/collection/helpers/rte-manager/dto-action-strategy-manager.js +2 -0
  131. package/dist/esm/{app-globals-ce54f0ac.js → app-globals-aaff0b25.js} +13 -5
  132. package/dist/esm/base-renderer-101f6d04.js +7 -0
  133. package/dist/esm/{child-nodes-event-prevent-slimmer-2a3115ae.js → child-nodes-event-prevent-slimmer-7fe3dc57.js} +1 -1
  134. package/dist/esm/{code-block-89a4dd13.js → code-block-68300b47.js} +67 -17
  135. package/dist/esm/{component-value-history-controller-slimmer.abstract-95b199df.js → component-value-history-controller-slimmer.abstract-ac2f1bfd.js} +13 -179
  136. package/dist/esm/{design-token-eaa7c221.js → design-token-1a36307e.js} +1 -1
  137. package/dist/esm/{dom-node-subject-factory-3c2e13f1.js → dom-node-subject-observer-factory-c7bc3035.js} +41 -1
  138. package/dist/esm/{content-state-fc47457c.js → dto-renderer-manager-af66bbd9.js} +1643 -1502
  139. package/dist/esm/{element-appender-slimmer-ce83db8a.js → element-appender-slimmer-fe68ec2d.js} +3 -4
  140. package/dist/esm/{event-emit-slimmer-4428ce26.js → event-emit-slimmer-3922d816.js} +2 -3
  141. package/dist/esm/{form-field-controller-slimmer-6e69ca4e.js → form-field-controller-slimmer-f7e8845b.js} +2 -3
  142. package/dist/esm/{image-annotation-action-53812eb7.js → image-annotation-action-f61c2693.js} +20 -76
  143. package/dist/esm/{index-1d479c88.js → index-7fe93427.js} +1 -1
  144. package/dist/esm/index.js +13 -10
  145. package/dist/esm/{icon-manager-2ee1c619.js → internal-icon-manager-f0486245.js} +51 -1
  146. package/dist/esm/{internal-vega-event-manager-a654cf8a.js → internal-vega-event-manager-cb06e987.js} +1 -1
  147. package/dist/esm/language-extension-1ada2a9d.js +204 -0
  148. package/dist/esm/loader.js +14 -12
  149. package/dist/esm/{public-rules-095284f6.js → public-rules-9f62069a.js} +5 -5
  150. package/dist/esm/range-c2eeb794.js +176 -0
  151. package/dist/esm/{responsive-format-facade-86b6de3b.js → responsive-format-facade-5711c77d.js} +4 -3
  152. package/dist/esm/{rich-text-editor-required-rule-4e8d2db8.js → rich-text-editor-required-rule-de738309.js} +1 -1
  153. package/dist/esm/{string-input-formatter-slimmer-60897659.js → string-input-formatter-slimmer-69117deb.js} +2 -2
  154. package/dist/esm/{style-formatter-a0719a8f.js → style-formatter-2479dc61.js} +1 -1
  155. package/dist/esm/{sub-state-notify-slimmer-ee730968.js → sub-state-notify-slimmer-4252a90e.js} +1 -1
  156. package/dist/esm/{sub-state-observer-slimmer-d474634d.js → sub-state-observer-slimmer-baa8853a.js} +1 -1
  157. package/dist/esm/{vega-skeleton-loader-controller-394a6026.js → token-extension-6fc5e1f5.js} +672 -4
  158. package/dist/esm/vega-accordion.entry.js +13 -14
  159. package/dist/esm/vega-app-header-button.entry.js +14 -15
  160. package/dist/esm/vega-banner.entry.js +4 -6
  161. package/dist/esm/vega-box.entry.js +13 -12
  162. package/dist/esm/vega-brand-logo.entry.js +1 -2
  163. package/dist/esm/vega-breadcrumb.entry.js +4 -5
  164. package/dist/esm/vega-button-circle.entry.js +14 -14
  165. package/dist/esm/vega-button-group_2.entry.js +6 -7
  166. package/dist/esm/vega-button-link.entry.js +5 -6
  167. package/dist/esm/vega-button.entry.js +13 -13
  168. package/dist/esm/vega-calendar_4.entry.js +7 -9
  169. package/dist/esm/vega-card.entry.js +12 -11
  170. package/dist/esm/vega-carousel.entry.js +12 -12
  171. package/dist/esm/vega-checkbox_2.entry.js +6 -7
  172. package/dist/esm/vega-chip.entry.js +14 -14
  173. package/dist/esm/vega-code-block.entry.js +8 -9
  174. package/dist/esm/vega-color-picker.entry.js +5 -6
  175. package/dist/esm/vega-combo-box.entry.js +6 -7
  176. package/dist/esm/vega-date-picker_2.entry.js +16 -17
  177. package/dist/esm/vega-dialog_2.entry.js +15 -15
  178. package/dist/esm/vega-divider.entry.js +12 -11
  179. package/dist/esm/vega-dropdown_5.entry.js +15 -15
  180. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  181. package/dist/esm/vega-field-label.entry.js +4 -5
  182. package/dist/esm/vega-file-uploader.entry.js +6 -8
  183. package/dist/esm/vega-flag-icon.entry.js +12 -12
  184. package/dist/esm/vega-flex.entry.js +12 -11
  185. package/dist/esm/vega-font.entry.js +12 -11
  186. package/dist/esm/vega-form.entry.js +7 -8
  187. package/dist/esm/vega-grid.entry.js +12 -11
  188. package/dist/esm/vega-icon.entry.js +12 -11
  189. package/dist/esm/vega-image-uploader.entry.js +12 -12
  190. package/dist/esm/vega-input-credit-card.entry.js +7 -9
  191. package/dist/esm/vega-input-numeric.entry.js +7 -8
  192. package/dist/esm/vega-input-phone-number.entry.js +12 -13
  193. package/dist/esm/vega-input-range.entry.js +7 -8
  194. package/dist/esm/vega-input-select.entry.js +14 -15
  195. package/dist/esm/vega-input.entry.js +7 -8
  196. package/dist/esm/vega-item-toggle.entry.js +3 -4
  197. package/dist/esm/vega-left-nav_5.entry.js +14 -15
  198. package/dist/esm/vega-loader-wrapper_2.entry.js +11 -10
  199. package/dist/esm/vega-page-notification_2.entry.js +1 -2
  200. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +3 -4
  201. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +1 -2
  202. package/dist/esm/vega-pagination.entry.js +10 -10
  203. package/dist/esm/vega-popover_2.entry.js +14 -14
  204. package/dist/esm/vega-progress-tracker.entry.js +3 -4
  205. package/dist/esm/vega-radio_2.entry.js +6 -7
  206. package/dist/esm/vega-rich-text-content.entry.js +24 -19
  207. package/dist/esm/vega-rich-text-editor_4.entry.js +342 -216
  208. package/dist/esm/vega-segment-control.entry.js +4 -5
  209. package/dist/esm/vega-selection-chip_2.entry.js +15 -15
  210. package/dist/esm/vega-selection-tile_2.entry.js +7 -8
  211. package/dist/esm/vega-sidenav_3.entry.js +16 -17
  212. package/dist/esm/vega-signature-capture.entry.js +14 -15
  213. package/dist/esm/vega-stepper.entry.js +6 -7
  214. package/dist/esm/vega-tab-group_2.entry.js +4 -5
  215. package/dist/esm/vega-table_8.entry.js +12 -13
  216. package/dist/esm/vega-textarea.entry.js +6 -7
  217. package/dist/esm/vega-time-picker_2.entry.js +14 -14
  218. package/dist/esm/vega-toggle-switch.entry.js +6 -7
  219. package/dist/esm/vega-tooltip_2.entry.js +12 -12
  220. package/dist/esm/vega.js +14 -12
  221. package/dist/types/components/vega-rich-text-content/vega-rich-text-content.d.ts +8 -0
  222. package/dist/types/components/vega-rich-text-editor/constants/constant.d.ts +2 -1
  223. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/action-handle-strategy-registry.d.ts +8 -0
  224. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/insert-node-to-nearest-root-strategy.d.ts +18 -0
  225. package/dist/types/components/vega-rich-text-editor/dto/actions/insert-node-to-nearest-root-action.d.ts +14 -0
  226. package/dist/types/components/vega-rich-text-editor/dto/actions/modify-content-action.abstract.d.ts +2 -1
  227. package/dist/types/components/vega-rich-text-editor/dto/actions/update-cursor-position-action.d.ts +4 -2
  228. package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +2 -3
  229. package/dist/types/components/vega-rich-text-editor/dto/content-state.d.ts +6 -0
  230. package/dist/types/components/vega-rich-text-editor/dto/nodes/text-node.d.ts +11 -1
  231. package/dist/types/components/vega-rich-text-editor/dto/renderers/blocks/link-wrapper-renderer.d.ts +3 -3
  232. package/dist/types/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.d.ts +95 -2
  233. package/dist/types/components/vega-rich-text-editor/extensions/extension.abstract.d.ts +82 -0
  234. package/dist/types/components/vega-rich-text-editor/extensions/languages/language-extension.d.ts +50 -0
  235. package/dist/types/components/vega-rich-text-editor/extensions/languages/language-toolbar-button-renderer.d.ts +54 -0
  236. package/dist/types/components/vega-rich-text-editor/extensions/tokens/insert-token-node-action.d.ts +16 -0
  237. package/dist/types/components/vega-rich-text-editor/extensions/tokens/insert-token-node-strategy.d.ts +12 -0
  238. package/dist/types/components/vega-rich-text-editor/extensions/tokens/span-to-token-node-strategy.d.ts +24 -0
  239. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-extension.d.ts +14 -0
  240. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-node-renderer.d.ts +38 -0
  241. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-node.d.ts +39 -0
  242. package/dist/types/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.d.ts +47 -0
  243. package/dist/types/components/vega-rich-text-editor/interface.d.ts +52 -1
  244. package/dist/types/components/vega-rich-text-editor/public-api.d.ts +29 -0
  245. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/extension-controller.d.ts +44 -0
  246. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy.abstract.d.ts +10 -1
  247. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.d.ts +6 -0
  248. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/toolbar-button-slimmer.abstract.d.ts +4 -4
  249. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/visual-mode-toolbar-button-slimmer.abstract.d.ts +7 -7
  250. package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor.d.ts +10 -0
  251. package/dist/types/components.d.ts +21 -0
  252. package/dist/types/helpers/public-api.d.ts +1 -1
  253. package/dist/types/types/components.type.d.ts +1 -0
  254. package/dist/types/types/public-api.d.ts +11 -0
  255. package/dist/vega/index.esm.js +1 -1
  256. package/dist/vega/p-03cc47b7.entry.js +1 -0
  257. package/dist/vega/p-07836d27.entry.js +1 -0
  258. package/dist/vega/p-079f5d94.entry.js +1 -0
  259. package/dist/vega/p-09cb98f3.entry.js +1 -0
  260. package/dist/vega/{p-fb232e29.entry.js → p-0b91bb73.entry.js} +1 -1
  261. package/dist/vega/p-15a78afd.entry.js +1 -0
  262. package/dist/vega/p-16075b30.entry.js +1 -0
  263. package/dist/vega/{p-67101f43.entry.js → p-1c08077c.entry.js} +1 -1
  264. package/dist/vega/{p-c5e862aa.js → p-1da54ff3.js} +1 -1
  265. package/dist/vega/p-20a180e4.js +1 -0
  266. package/dist/vega/p-25ddb070.entry.js +1 -0
  267. package/dist/vega/p-2788afe7.entry.js +1 -0
  268. package/dist/vega/p-2a1b3108.entry.js +1 -0
  269. package/dist/vega/p-2ee4def0.js +1 -0
  270. package/dist/vega/p-2f88ba36.entry.js +1 -0
  271. package/dist/vega/p-327cd6ec.entry.js +1 -0
  272. package/dist/vega/{p-f2a1fe6a.js → p-39c185a5.js} +1 -1
  273. package/dist/vega/p-3b1bedaf.entry.js +1 -0
  274. package/dist/vega/p-3c96bbe1.entry.js +1 -0
  275. package/dist/vega/p-3cdbee7e.js +1 -0
  276. package/dist/vega/p-3d0d8a21.entry.js +1 -0
  277. package/dist/vega/p-3d53858c.entry.js +1 -0
  278. package/dist/vega/{p-927cab0c.entry.js → p-3f3bbaaa.entry.js} +2 -2
  279. package/dist/vega/p-42c364e0.entry.js +1 -0
  280. package/dist/vega/p-4f56a427.entry.js +1 -0
  281. package/dist/vega/p-4f5a2b0c.entry.js +1 -0
  282. package/dist/vega/p-51d40b0d.entry.js +1 -0
  283. package/dist/vega/p-5420c1d4.entry.js +1 -0
  284. package/dist/vega/p-589b7ea3.entry.js +1 -0
  285. package/dist/vega/p-5d3c6a06.entry.js +1 -0
  286. package/dist/vega/p-5dec47da.entry.js +1 -0
  287. package/dist/vega/p-5f377954.js +1 -1
  288. package/dist/vega/p-6244b0ad.entry.js +1 -0
  289. package/dist/vega/p-63212cc1.js +1 -0
  290. package/dist/vega/p-6585cfd5.entry.js +1 -0
  291. package/dist/vega/p-6ba27010.js +1 -0
  292. package/dist/vega/{p-129f5938.js → p-6caa6bb2.js} +1 -1
  293. package/dist/vega/p-74ac2a48.js +1 -0
  294. package/dist/vega/p-76c7538a.entry.js +1 -0
  295. package/dist/vega/p-7d8eaca9.entry.js +1 -0
  296. package/dist/vega/p-7da6e7bd.js +1 -0
  297. package/dist/vega/p-81765b4b.entry.js +1 -0
  298. package/dist/vega/p-81fbf18f.entry.js +1 -0
  299. package/dist/vega/p-8682ee0a.entry.js +1 -0
  300. package/dist/vega/p-893d5dfa.js +1 -0
  301. package/dist/vega/p-8a484812.entry.js +1 -0
  302. package/dist/vega/p-8a6b820a.entry.js +1 -0
  303. package/dist/vega/p-8c9ea6f4.js +1 -0
  304. package/dist/vega/p-8e58d6cb.entry.js +1 -0
  305. package/dist/vega/p-8e812dca.entry.js +1 -0
  306. package/dist/vega/p-8f056ac2.js +1 -0
  307. package/dist/vega/{p-e66aef91.entry.js → p-9125ba84.entry.js} +1 -1
  308. package/dist/vega/p-92469fa1.entry.js +1 -0
  309. package/dist/vega/p-9ab3bb6f.entry.js +1 -0
  310. package/dist/vega/p-9ca0bdcc.js +1 -0
  311. package/dist/vega/p-a1362aa4.entry.js +1 -0
  312. package/dist/vega/p-a61e4bba.entry.js +1 -0
  313. package/dist/vega/p-a646b66d.js +1 -0
  314. package/dist/vega/p-a7b5f497.js +1 -0
  315. package/dist/vega/p-ac5c5221.entry.js +1 -0
  316. package/dist/vega/p-b1a5ff74.entry.js +1 -0
  317. package/dist/vega/p-b32f7aac.entry.js +1 -0
  318. package/dist/vega/{p-dc6f45af.entry.js → p-baafe7d9.entry.js} +1 -1
  319. package/dist/vega/{p-3a6abcd7.entry.js → p-bb51e020.entry.js} +1 -1
  320. package/dist/vega/{p-e764acd5.js → p-bb61f015.js} +1 -1
  321. package/dist/vega/p-bc0ae89a.entry.js +1 -0
  322. package/dist/vega/p-bd39af8a.entry.js +1 -0
  323. package/dist/vega/{p-cd18f0fe.js → p-bdd9ef3b.js} +1 -1
  324. package/dist/vega/{p-5f85811c.entry.js → p-c167fa41.entry.js} +1 -1
  325. package/dist/vega/{p-7ecf65ec.js → p-c2377afa.js} +1 -1
  326. package/dist/vega/p-c671f57e.js +1 -0
  327. package/dist/vega/p-c6a354b1.js +1 -0
  328. package/dist/vega/p-c7726252.js +1 -0
  329. package/dist/vega/p-ce1766fa.js +1 -0
  330. package/dist/vega/p-cfb2af9c.entry.js +1 -0
  331. package/dist/vega/{p-3bf95faf.entry.js → p-d2790023.entry.js} +2 -2
  332. package/dist/vega/p-d3bbfb1b.js +1 -0
  333. package/dist/vega/{p-5faa7313.entry.js → p-d9617358.entry.js} +1 -1
  334. package/dist/vega/p-d982babe.entry.js +1 -0
  335. package/dist/vega/p-dcae53cf.entry.js +1 -0
  336. package/dist/vega/p-ddfad815.entry.js +1 -0
  337. package/dist/vega/p-e00ed9bd.entry.js +1 -0
  338. package/dist/vega/p-e365aba9.entry.js +1 -0
  339. package/dist/vega/p-ebfc5739.entry.js +1 -0
  340. package/dist/vega/{p-aeccc7f8.js → p-f1436035.js} +1 -1
  341. package/dist/vega/p-fe2cb3a1.entry.js +1 -0
  342. package/dist/vega/p-ff3a8907.entry.js +1 -0
  343. package/dist/vega/vega.esm.js +1 -1
  344. package/package.json +1 -1
  345. package/dist/cjs/dom-node-subject-observer-factory-15130e50.js +0 -45
  346. package/dist/cjs/internal-icon-manager-f8677abb.js +0 -55
  347. package/dist/esm/dom-node-subject-observer-factory-1e456cd4.js +0 -43
  348. package/dist/esm/internal-icon-manager-7eac52c8.js +0 -53
  349. package/dist/vega/p-0070e970.entry.js +0 -1
  350. package/dist/vega/p-0169af6b.entry.js +0 -1
  351. package/dist/vega/p-03e9cbc8.js +0 -1
  352. package/dist/vega/p-04341cd4.entry.js +0 -1
  353. package/dist/vega/p-0664ca9c.js +0 -1
  354. package/dist/vega/p-074b73f8.js +0 -1
  355. package/dist/vega/p-08fb66a4.entry.js +0 -1
  356. package/dist/vega/p-0cf35281.entry.js +0 -1
  357. package/dist/vega/p-0e75ddb2.entry.js +0 -1
  358. package/dist/vega/p-13cb5a04.entry.js +0 -1
  359. package/dist/vega/p-18223240.js +0 -1
  360. package/dist/vega/p-19ce9ae6.js +0 -1
  361. package/dist/vega/p-27f922fe.entry.js +0 -1
  362. package/dist/vega/p-2c7b7dd6.entry.js +0 -1
  363. package/dist/vega/p-310f9e76.entry.js +0 -1
  364. package/dist/vega/p-330d7ba8.js +0 -1
  365. package/dist/vega/p-34fdbe7a.js +0 -1
  366. package/dist/vega/p-3d6c302d.js +0 -1
  367. package/dist/vega/p-42563036.entry.js +0 -1
  368. package/dist/vega/p-441a681b.js +0 -1
  369. package/dist/vega/p-4a357f30.entry.js +0 -1
  370. package/dist/vega/p-4e8b6eb6.entry.js +0 -1
  371. package/dist/vega/p-50dd3cf1.js +0 -1
  372. package/dist/vega/p-518722aa.js +0 -1
  373. package/dist/vega/p-5422fdc4.entry.js +0 -1
  374. package/dist/vega/p-5c36a6cb.entry.js +0 -1
  375. package/dist/vega/p-5d095f9b.entry.js +0 -1
  376. package/dist/vega/p-68806f9c.entry.js +0 -1
  377. package/dist/vega/p-6cf490d9.entry.js +0 -1
  378. package/dist/vega/p-6def20e1.js +0 -1
  379. package/dist/vega/p-78d3f99b.entry.js +0 -1
  380. package/dist/vega/p-792715f3.js +0 -1
  381. package/dist/vega/p-7a201c6e.entry.js +0 -1
  382. package/dist/vega/p-7c22a1c3.entry.js +0 -1
  383. package/dist/vega/p-7f329473.entry.js +0 -1
  384. package/dist/vega/p-80f1b680.js +0 -1
  385. package/dist/vega/p-82beb586.entry.js +0 -1
  386. package/dist/vega/p-84eb131b.entry.js +0 -1
  387. package/dist/vega/p-8c46e116.js +0 -1
  388. package/dist/vega/p-909820dd.entry.js +0 -1
  389. package/dist/vega/p-989e141d.entry.js +0 -1
  390. package/dist/vega/p-a29e5d32.js +0 -1
  391. package/dist/vega/p-a3942d0b.entry.js +0 -1
  392. package/dist/vega/p-a66533c1.entry.js +0 -1
  393. package/dist/vega/p-a9b831d8.entry.js +0 -1
  394. package/dist/vega/p-b1d0e4cb.entry.js +0 -1
  395. package/dist/vega/p-b34f9891.entry.js +0 -1
  396. package/dist/vega/p-b820e42f.entry.js +0 -1
  397. package/dist/vega/p-c4677b0c.entry.js +0 -1
  398. package/dist/vega/p-c467fe81.entry.js +0 -1
  399. package/dist/vega/p-c7762c86.entry.js +0 -1
  400. package/dist/vega/p-c9e57cf1.entry.js +0 -1
  401. package/dist/vega/p-d0b3e319.entry.js +0 -1
  402. package/dist/vega/p-d7b4ffed.entry.js +0 -1
  403. package/dist/vega/p-e4586f13.entry.js +0 -1
  404. package/dist/vega/p-e71c4a09.entry.js +0 -1
  405. package/dist/vega/p-ea66d9f7.entry.js +0 -1
  406. package/dist/vega/p-ebbaa112.entry.js +0 -1
  407. package/dist/vega/p-ec6819fe.entry.js +0 -1
  408. package/dist/vega/p-ec9a8f81.entry.js +0 -1
  409. package/dist/vega/p-ed01328c.entry.js +0 -1
  410. package/dist/vega/p-ed798cd4.entry.js +0 -1
  411. package/dist/vega/p-edb71a72.entry.js +0 -1
  412. package/dist/vega/p-f08a4adf.js +0 -1
  413. package/dist/vega/p-f4e23c23.entry.js +0 -1
  414. package/dist/vega/p-f825e8a2.entry.js +0 -1
  415. package/dist/vega/p-f9deb43e.entry.js +0 -1
  416. package/dist/vega/p-fdd930a9.entry.js +0 -1
  417. package/dist/vega/p-fe52c370.entry.js +0 -1
@@ -31,6 +31,7 @@ import { InlineHtmlAnnotation } from '../annotations/inline-html-annotation';
31
31
  import { LinkGroupNodeSplitStrategy } from '../action-handle-strategies/modify-content-strategies/link-group-node-split-strategy';
32
32
  import { DeleteLinkGroupStrategy } from '../action-handle-strategies/modify-content-strategies/delete-link-group-strategy';
33
33
  import { PlainTextAnnotation } from '../annotations/plain-text-annotation';
34
+ import { LinkAnnotationAction } from '../actions/link-annotation-action';
34
35
  /**
35
36
  * Text node
36
37
  */
@@ -63,17 +64,29 @@ export class RTETextNode extends RTENode {
63
64
  const textNode = new RTETextNode(richText.id, richText.text, parentBlock);
64
65
  const { annotations } = richText;
65
66
  if (annotations) {
66
- textNode.annotationMap = new Map(Object.keys(annotations)
67
- .map((type) => {
68
- if (type === 'link' && annotations.link && parentBlock) {
69
- parentBlock.apply(new LinkGroupAnnotationAction(annotations.link.groupKey, [textNode], 'link'));
70
- }
71
- return this.createAnnotationEntity(type, annotations[type], options);
72
- })
73
- .filter(isNonNullable));
67
+ textNode.annotationMap = this.generateTextAnnotationMap(annotations, options, parentBlock, textNode);
74
68
  }
75
69
  return textNode;
76
70
  }
71
+ /**
72
+ * Generates a map of text annotations for the given set of annotations.
73
+ *
74
+ * @param {VegaRTETextAnnotations} annotations - The annotations to be converted into a map.
75
+ * @param {VegaRTETransformOptions} options - Optional transformation options.
76
+ * @param {RTETextBlock} parentBlock - The parent text block.
77
+ * @param {RTETextNode} textNode - The text node.
78
+ * @returns {NodeAnnotations} The map of text annotations.
79
+ */
80
+ static generateTextAnnotationMap(annotations, options, parentBlock, textNode) {
81
+ return new Map(Object.keys(annotations)
82
+ .map((type) => {
83
+ if (type === 'link' && annotations.link && parentBlock && textNode) {
84
+ parentBlock.apply(new LinkGroupAnnotationAction(annotations.link.groupKey, [textNode], 'link'));
85
+ }
86
+ return this.createAnnotationEntity(type, annotations[type], options);
87
+ })
88
+ .filter(isNonNullable));
89
+ }
77
90
  /**
78
91
  * Creates different types of text annotations based on the provided type and value.
79
92
  *
@@ -200,9 +213,10 @@ export class RTETextNode extends RTENode {
200
213
  if (this.isContentEditable()) {
201
214
  ActionHandleStrategyRegistry.register(ModifyContentActionType.UPDATE_TEXT, dtoClassName, new NodeUpdateTextStrategy());
202
215
  ActionHandleStrategyRegistry.register(ModifyContentActionType.REPLACE_SELECTED_TEXT, dtoClassName, new NodeReplaceSelectedTextStrategy());
203
- ActionHandleStrategyRegistry.register(TextSplittableAction.name, dtoClassName, new NodeSplitTextStrategy());
216
+ ActionHandleStrategyRegistry.register(ModifyContentActionType.LINK_GROUP_NODE_SPLIT, dtoClassName, new LinkGroupNodeSplitStrategy());
217
+ ActionHandleStrategyRegistry.register(LinkAnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
204
218
  }
205
- ActionHandleStrategyRegistry.register(ModifyContentActionType.LINK_GROUP_NODE_SPLIT, dtoClassName, new LinkGroupNodeSplitStrategy());
219
+ ActionHandleStrategyRegistry.register(TextSplittableAction.name, dtoClassName, new NodeSplitTextStrategy());
206
220
  ActionHandleStrategyRegistry.register(ModifyContentActionType.DELETE_LINK_GROUP, dtoClassName, new DeleteLinkGroupStrategy());
207
221
  ActionHandleStrategyRegistry.register(AnnotationAction.name, dtoClassName, new NodeUpdateAnnotationMapStrategy());
208
222
  RTETextNode.registerActionStrategyStatus[dtoClassName] = true;
@@ -251,6 +265,18 @@ export class RTETextNode extends RTENode {
251
265
  if (!(annotation instanceof SelectionRangeAnnotation)) {
252
266
  this.syncUpSelectedNodes(node);
253
267
  }
268
+ /**
269
+ * 1. Try to get the specific strategy for the action and node type first (e.g., LinkAnnotationAction on RTETextNode).
270
+ * 2. If no specific strategy found, try to get the generic NodeUpdateAnnotationMapStrategy for AnnotationAction on RTETextNode.
271
+ *
272
+ * This is useful when we want to check if there is a specific strategy for an action-node combination first, we can use the specific strategy to check if the special toolbar button should be enabled or disabled.
273
+ * TODO: Update the other annotation actions to follow this pattern. https://gethired.atlassian.net/browse/VD-7367
274
+ */
275
+ const strategy = ActionHandleStrategyRegistry.get(action.constructor.name, node.constructor.name);
276
+ if (strategy) {
277
+ strategy.execute(action, node);
278
+ return;
279
+ }
254
280
  const updateAnnotationMapStrategy = ActionHandleStrategyRegistry.get(AnnotationAction.name, RTETextNode.name);
255
281
  if (updateAnnotationMapStrategy) {
256
282
  updateAnnotationMapStrategy.execute(action, node);
@@ -8,6 +8,7 @@ import { VegaChange } from '../../../../../helpers/event-manager/event-id/vega-e
8
8
  import RTETextNodeRenderer from '../nodes/text-node-renderer';
9
9
  import { isNonNullable } from '../../../../../types/type-guard';
10
10
  import { UnlinkLinkGroupAction } from '../../actions/unlink-link-group-action';
11
+ import RTEDTORendererManager from '../../../../../helpers/rte-manager/dto-renderer-manager';
11
12
  /**
12
13
  * Renders link nodes and wraps them with link editor or anchor element based on edit mode.
13
14
  */
@@ -47,11 +48,12 @@ class RTELinkWrapperRenderer {
47
48
  * @param {RTETextNode[]} nodes - Array of text nodes to render.
48
49
  * @param {LinkGroupAnnotation} linkGroupAnnotation - link group annotation
49
50
  * @param {RTERenderContext} context - Context containing render options.
50
- * @returns {HTMLElement[]} - Array of rendered HTML elements.
51
+ * @returns {VegaRTERenderResult[]} - Array of rendered HTML elements.
51
52
  */
52
53
  render(nodes, linkGroupAnnotation, { editable }) {
53
54
  const blockNodes = this.groupNodesByLink(nodes);
54
- return blockNodes.flatMap((item) => {
55
+ return blockNodes
56
+ .flatMap((item) => {
55
57
  if (this.isLinkGroup(item)) {
56
58
  // TODO: should revert to above code while https://gethired.atlassian.net/browse/VD-6513 have be fixed.
57
59
  // const linkAnnotation: LinkAnnotation = item[0].getAnnotationByType<LinkAnnotation>(
@@ -69,8 +71,12 @@ class RTELinkWrapperRenderer {
69
71
  ? this.renderLinkEditorWrapper(item, linkAnnotation, linkGroupAnnotation)
70
72
  : this.renderLink(item, linkAnnotation, linkGroupAnnotation);
71
73
  }
72
- return RTETextNodeRenderer.render(item);
73
- });
74
+ const nodeRenderer = RTEDTORendererManager.getRTERenderer(item.type);
75
+ if (nodeRenderer) {
76
+ return nodeRenderer.render(item, { editable }, h);
77
+ }
78
+ })
79
+ .filter(isNonNullable);
74
80
  }
75
81
  groupNodesByLink(nodes) {
76
82
  return nodes.reduce((acc, node) => {
@@ -1,5 +1,150 @@
1
+ import { DomNodeSubjectObserverFactory } from '../../../helpers/change-manager/subject/dom-node-subject/dom-node-subject-observer-factory';
2
+ import { VegaClick, VegaDropdownClick } from '../../../helpers/event-manager/event-id/vega-event-id';
3
+ import { VegaInternalIconManager } from '../../../helpers/icon/internal-icon-manager';
4
+ import { isNonNullable } from '../../../types/type-guard';
1
5
  /**
2
6
  * Base class for rendering extension toolbar button in the rich text editor.
7
+ * The renderer provides common functionalities for rendering toolbar buttons, including:
8
+ * - Rendering a button with an icon, label, and optional arrow icon.
9
+ * - Rendering a dropdown with a list of items.
10
+ * - Rendering dropdown items.
11
+ * - Rendering template for dropdown list.
12
+ * - Determining if the button should be disabled based on the editor context.
13
+ * - Handling button and dropdown click events.
14
+ * Override the methods to customize the rendering and behavior of the button.
3
15
  */
4
16
  export class VegaRTEToolbarButtonRenderer {
17
+ /**
18
+ * Checks if the button should be hidden.
19
+ *
20
+ * @param {VegaRTEToolbarRenderContext} editorContext The render context for the editor.
21
+ * @returns {boolean} True if the button is hidden, false otherwise.
22
+ */
23
+ isHidden(editorContext) {
24
+ return editorContext.sourceEditMode;
25
+ }
26
+ /**
27
+ * Renders a dropdown component with the specified properties and children.
28
+ *
29
+ * @param {VegaRTECreateElementFunction} h - Create element function.
30
+ * @param {VegaRTEToolbarRenderContext} editorContext - The render context for the editor.
31
+ * @param {RTEToolbarDropdownProps} dropdownProps - The properties for the dropdown.
32
+ * @param {VegaRTERenderResult[]} children - The children elements for the dropdown.
33
+ * @returns {VegaRTERenderResult} - The render result for the dropdown.
34
+ */
35
+ renderDropdown(h, editorContext, dropdownProps, children) {
36
+ return h('vega-dropdown', Object.assign({ trigger: 'click', searchable: false,
37
+ // eslint-disable-next-line jsdoc/require-jsdoc
38
+ ref: (el) => {
39
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(el, VegaDropdownClick, (input) => this.handleDropdownClick(input.detail, editorContext));
40
+ } }, dropdownProps), children);
41
+ }
42
+ /**
43
+ * Renders the dropdown list template.
44
+ *
45
+ * @param {VegaRTECreateElementFunction} h - Create element function.
46
+ * @param {RTEDropdownListItem[]} itemList - The list of dropdown items.
47
+ * @returns {VegaRTERenderResult} - The render result for the dropdown list.
48
+ */
49
+ renderDropdownListTemplate(h, itemList) {
50
+ return h('div', {
51
+ slot: 'items',
52
+ onMouseDown: this.preventDefault,
53
+ }, itemList.map((item) => {
54
+ return this.renderDropdownItem(h, item);
55
+ }));
56
+ }
57
+ /**
58
+ * Renders a dropdown item for the toolbar button.
59
+ *
60
+ * @param {VegaRTECreateElementFunction} h - Create element function.
61
+ * @param {RTEDropdownListItem} item - The dropdown item.
62
+ * @returns {VegaRTERenderResult} - The render result for the dropdown item.
63
+ */
64
+ renderDropdownItem(h, item) {
65
+ return h('vega-dropdown-item', {
66
+ key: item.key,
67
+ itemKey: item.key,
68
+ label: item.label,
69
+ prefixIcon: item.icon,
70
+ });
71
+ }
72
+ /**
73
+ * Renders a common toolbar button with optional icon, label, and arrow icon.
74
+ *
75
+ * @param {VegaRTECreateElementFunction} h - Create element function.
76
+ * @param {VegaRTEToolbarRenderContext} editorContext - The render context for the editor.
77
+ * @param {RTEToolbarButtonProps} buttonProps - The properties for the button.
78
+ * @returns {VegaRTERenderResult} - The render result for the button.
79
+ */
80
+ renderButton(h, editorContext, buttonProps) {
81
+ const { icon, label, showArrowIcon } = buttonProps;
82
+ const isDisabled = this.isDisabled(editorContext);
83
+ return h('vega-rich-text-editor-toolbar-button', {
84
+ disabled: isDisabled,
85
+ icon: icon,
86
+ hidden: this.isHidden(editorContext),
87
+ selected: this.isSelected(editorContext),
88
+ // eslint-disable-next-line jsdoc/require-jsdoc
89
+ ref: (el) => {
90
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(el, VegaClick, () => this.handleButtonClick(editorContext));
91
+ },
92
+ onMouseDown: this.preventDefault,
93
+ }, [
94
+ this.renderButtonLabel(h, editorContext, label),
95
+ showArrowIcon
96
+ ? h('vega-icon', {
97
+ size: 'size-8',
98
+ color: isDisabled ? 'text-disabled' : 'text-secondary',
99
+ style: { marginLeft: '8px' },
100
+ icon: VegaInternalIconManager.getIconKey('chevron-down'),
101
+ })
102
+ : null,
103
+ ].filter(isNonNullable));
104
+ }
105
+ /**
106
+ * Renders the button label.
107
+ *
108
+ * @param {VegaRTECreateElementFunction} h - Create element function.
109
+ * @param {VegaRTEToolbarRenderContext} editorContext - The render context for the editor.
110
+ * @param {Nullable<string>} label - The button label if exist.
111
+ * @returns {Nullable<VegaRTERenderResult>} - The render result for the button.
112
+ */
113
+ renderButtonLabel(h, editorContext, label) {
114
+ if (label) {
115
+ const isDisabled = this.isDisabled(editorContext);
116
+ return h('vega-font', {
117
+ variant: 'font-field-label-sm',
118
+ color: isDisabled ? 'text-disabled' : 'text-primary',
119
+ }, label);
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * Determines if the button should be disabled based on the editor context.
125
+ *
126
+ * @param {VegaRTEToolbarRenderContext} editorContext - The render context for the editor.
127
+ * @returns {boolean} - True if the button should be disabled, false otherwise.
128
+ */
129
+ isDisabled(editorContext) {
130
+ return editorContext.host.disabled;
131
+ }
132
+ /**
133
+ * Checks if the button should be selected.
134
+ *
135
+ * @param {VegaRTEToolbarRenderContext} _editorContext The render context for the editor.
136
+ * @returns {boolean} True if the button is selected, false otherwise.
137
+ */
138
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
139
+ isSelected(_editorContext) {
140
+ return false;
141
+ }
142
+ /**
143
+ * Prevents the default action of the click event. This is to avoid losing focus from the editor when the button is clicked.
144
+ *
145
+ * @param {MouseEvent} e The mouse event to prevent default action for.
146
+ */
147
+ preventDefault(e) {
148
+ e.preventDefault();
149
+ }
5
150
  }
@@ -0,0 +1,97 @@
1
+ import RTEDTOClassManager from '../../../helpers/rte-manager/dto-class-manager';
2
+ import RTEDTORendererManager from '../../../helpers/rte-manager/dto-renderer-manager';
3
+ import RTEDTOActionStrategyManager from '../../../helpers/rte-manager/dto-action-strategy-manager';
4
+ import ElementToDTOClassStrategyManager from '../../../helpers/rte-manager/element-dto-class-strategy-manager';
5
+ import { ActionHandleStrategyRegistry } from '../dto/action-handle-strategies/action-handle-strategy-registry';
6
+ /**
7
+ * Abstract class for Vega Rich Text Editor extensions.
8
+ */
9
+ export class VegaRTEExtension {
10
+ constructor() {
11
+ /**
12
+ * The context of the RTE extension, which may include references to the host editor and other relevant information.
13
+ */
14
+ this.extensionContext = null;
15
+ }
16
+ /**
17
+ * Registers an action handle strategy for a specific node or block class.
18
+ *
19
+ * @param {string} nodeOrBlockClassName - The name of the node or block class.
20
+ * @param {string} actionType - The type of the action.
21
+ * @param {ActionHandleStrategy<ModifyContentAction, RTENode | RTEBlock>} strategy - The strategy to register.
22
+ */
23
+ static registerActionHandleStrategy(nodeOrBlockClassName, actionType, strategy) {
24
+ ActionHandleStrategyRegistry.register(actionType, nodeOrBlockClassName, strategy);
25
+ }
26
+ /**
27
+ * Initializes the RTE extension with the provided context.
28
+ *
29
+ * @param {RTEExtensionContext} context - The context of the RTE extension.
30
+ */
31
+ initialExtension(context) {
32
+ this.extensionContext = context;
33
+ }
34
+ /**
35
+ * Register a node type with the extension.
36
+ *
37
+ * @param {string} type - The type of the node or block. The type should be a string that uniquely identifies the node or block.
38
+ * @param {ClassType<RTEBlock | RTENode>} DTOClass - The DTO class to register.
39
+ */
40
+ registerNode(type, DTOClass) {
41
+ RTEDTOClassManager.registerRTEDTOClass(type, DTOClass);
42
+ }
43
+ /**
44
+ * Register a renderer for a node type with the extension.
45
+ *
46
+ * @param {string} type - The type of the node or block. The type should be a string that uniquely identifies the node or block.
47
+ * @param {BaseRenderer} renderer - The renderer to register.
48
+ */
49
+ registerRenderer(type, renderer) {
50
+ RTEDTORendererManager.registerRTEDTORenderer(type, renderer);
51
+ }
52
+ /**
53
+ * Register a toolbar button renderer for the extension.
54
+ *
55
+ * @param {string} type - The type of the toolbar button.
56
+ * @param {VegaRTEToolbarButtonRenderer} renderer - The renderer to register.
57
+ */
58
+ registerToolbarButtonRenderer(type, renderer) {
59
+ RTEDTORendererManager.registerRTEToolbarButtonRenderer(type, renderer);
60
+ }
61
+ /**
62
+ * This is a helper method that utilizes RTEUtils to register common strategies.
63
+ * Call the method with the class name of the block to make it support basic strategies like:
64
+ * - Delete children
65
+ * - Append the children
66
+ * - Delete the block children content
67
+ *
68
+ * @param {string} blockClassName - The class name of the block to register strategies for.
69
+ */
70
+ registerBlockBasicStrategies(blockClassName) {
71
+ RTEDTOActionStrategyManager.registerBlockBasicStrategies(blockClassName);
72
+ }
73
+ /**
74
+ * Register an element to block DTO class strategy.
75
+ *
76
+ * @param {ElementToDTOStrategy} strategy - The strategy to register.
77
+ */
78
+ registerElementToBlockDTOClassStrategy(strategy) {
79
+ ElementToDTOClassStrategyManager.registerElementToBlockStrategy(strategy);
80
+ }
81
+ /**
82
+ * Register an element to node DTO class strategy.
83
+ *
84
+ * @param {ElementToDTOStrategy} strategy - The strategy to register.
85
+ */
86
+ registerElementToNodeDTOClassStrategy(strategy) {
87
+ ElementToDTOClassStrategyManager.registerElementToNodeStrategy(strategy);
88
+ }
89
+ /**
90
+ * Get the registered element to node DTO class strategies.
91
+ *
92
+ * @returns {ElementToDTOStrategy[]} - The registered element to node DTO class strategies.
93
+ */
94
+ getElementToNodeDTOClassStrategies() {
95
+ return ElementToDTOClassStrategyManager.getElementToNodeStrategies();
96
+ }
97
+ }
@@ -0,0 +1,113 @@
1
+ import { VegaRTEContent } from '../../dto/content-state';
2
+ import { VegaRTEExtension } from '../extension.abstract';
3
+ import { RTELanguageToolbarButtonRenderer } from './language-toolbar-button-renderer';
4
+ /**
5
+ * Language extension for Vega Rich Text Editor.
6
+ * This extension allows users to switch between different languages and maintain separate content for each language.
7
+ */
8
+ export class VegaRTELanguageExtension extends VegaRTEExtension {
9
+ constructor(languageList, languagesState) {
10
+ super();
11
+ this.languageState = {
12
+ selectedLanguage: '',
13
+ contentMap: {},
14
+ };
15
+ /**
16
+ * Listener for language change events from the toolbar button renderer.
17
+ *
18
+ * @param {string} selectedLanguage - The newly selected language.
19
+ */
20
+ this.languageChangeCallBack = (selectedLanguage) => {
21
+ const previousLanguage = this.languageState.selectedLanguage;
22
+ if (this.extensionContext && previousLanguage) {
23
+ this.languageState.contentMap[previousLanguage] = this.getRTELatestValue(this.extensionContext.host);
24
+ }
25
+ this.languageState.selectedLanguage = selectedLanguage;
26
+ this.applyLanguageContent(selectedLanguage, this.languageState.contentMap);
27
+ };
28
+ if (languagesState) {
29
+ this.languageState = Object.assign(Object.assign({}, this.languageState), languagesState);
30
+ }
31
+ if (!this.languageState.selectedLanguage && languageList.length > 0) {
32
+ this.languageState.selectedLanguage = languageList[0].key;
33
+ }
34
+ this.languageToolbarButtonRenderer = new RTELanguageToolbarButtonRenderer(languageList, this.languageChangeCallBack, this.languageState.selectedLanguage);
35
+ this.registerToolbarButtonRenderer('languages', this.languageToolbarButtonRenderer);
36
+ }
37
+ /**
38
+ * Initializes the language extension.
39
+ * Applies the content for the selected language upon initialization.
40
+ *
41
+ * @param {RTEExtensionContext} context The extension context.
42
+ */
43
+ initialExtension(context) {
44
+ super.initialExtension(context);
45
+ const { selectedLanguage, contentMap } = this.languageState;
46
+ if (contentMap && contentMap[selectedLanguage]) {
47
+ this.applyLanguageContent(this.languageState.selectedLanguage, this.languageState.contentMap);
48
+ }
49
+ }
50
+ /**
51
+ * Invoked to set the language extension state. The method used if the state can not be provide when the editor is initialized.
52
+ *
53
+ * @param {RTELanguageExtensionState} state The language extension state to set.
54
+ */
55
+ setState(state) {
56
+ const { selectedLanguage, contentMap } = state;
57
+ this.languageToolbarButtonRenderer.setSelectedLanguage(selectedLanguage);
58
+ this.languageState.selectedLanguage = selectedLanguage;
59
+ this.languageState.contentMap = Object.assign({}, contentMap);
60
+ this.applyLanguageContent(selectedLanguage, contentMap);
61
+ }
62
+ /**
63
+ * Invoked to get the language extension state.
64
+ *
65
+ * @returns {RTELanguageExtensionState} The current language extension state.
66
+ */
67
+ getState() {
68
+ const { selectedLanguage, contentMap } = this.languageState;
69
+ if (this.extensionContext) {
70
+ contentMap[selectedLanguage] = this.getRTELatestValue(this.extensionContext.host);
71
+ }
72
+ return this.languageState;
73
+ }
74
+ /**
75
+ * Applies the content for the selected language.
76
+ *
77
+ * @param {string} selectedLanguage - The newly selected language.
78
+ * @param {RTELanguageExtensionState['contentMap']} contentMap - The content map for all languages.
79
+ */
80
+ applyLanguageContent(selectedLanguage, contentMap) {
81
+ if (this.extensionContext && contentMap) {
82
+ let content = contentMap[selectedLanguage];
83
+ if (content) {
84
+ content = content instanceof VegaRTEContent ? content : VegaRTEContent.fromJSON(content);
85
+ }
86
+ else {
87
+ content = VegaRTEContent.createEmptyContent();
88
+ }
89
+ const { host, flushValue } = this.extensionContext;
90
+ if (host.value !== content) {
91
+ flushValue(content, true);
92
+ }
93
+ }
94
+ }
95
+ /**
96
+ * Get the RTE latest value. The value is from the code block when in source edit mode; otherwise, it's from the host value.
97
+ *
98
+ * @param {HTMLElement} host - The host element of the rich text editor.
99
+ * @returns {VegaRTEContent} - The content.
100
+ */
101
+ getRTELatestValue(host) {
102
+ let result = host.value;
103
+ if (this.extensionContext && this.extensionContext.isSourceEditMode() && host.shadowRoot) {
104
+ const codeBlock = host.shadowRoot.querySelector('.source-view-container vega-code-block');
105
+ if (codeBlock) {
106
+ result = VegaRTEContent.fromHtml(codeBlock.value.code, {
107
+ autoMatchFormat: host.sourceEditConfig.autoMatchFormat,
108
+ });
109
+ }
110
+ }
111
+ return result;
112
+ }
113
+ }
@@ -0,0 +1,90 @@
1
+ import { methodPlaceholder } from 'vega-slimmer/core';
2
+ import { VegaRTEToolbarButtonRenderer } from '../base-toolbar-button-renderer';
3
+ /**
4
+ * Toolbar button renderer for language selection in Vega Rich Text Editor.
5
+ */
6
+ export class RTELanguageToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
7
+ constructor(languageList, languageChangeCallback, selectedLanguage) {
8
+ super();
9
+ this.languageList = [];
10
+ this.selectedLanguage = 'Select Language';
11
+ this.labelRef = null;
12
+ /**
13
+ * Handles the language selection event.
14
+ *
15
+ * @param {string} itemKey - The key of the selected language item.
16
+ */
17
+ this.handleDropdownClick = (itemKey) => {
18
+ this.setSelectedLanguage(itemKey);
19
+ if (typeof this.languageChangeCallback === 'function') {
20
+ this.languageChangeCallback(this.selectedLanguage);
21
+ }
22
+ };
23
+ this.languageList = languageList;
24
+ this.selectedLanguage = selectedLanguage;
25
+ this.languageChangeCallback = languageChangeCallback;
26
+ }
27
+ /**
28
+ * Public method to set the selected language.
29
+ *
30
+ * @param {string} language The language key to set as selected.
31
+ */
32
+ setSelectedLanguage(language) {
33
+ this.selectedLanguage = language;
34
+ if (this.labelRef) {
35
+ this.labelRef.textContent = this.getLanguageLabelByKey(language);
36
+ }
37
+ }
38
+ /**
39
+ * The source edit mode does not affect the language button visibility.
40
+ *
41
+ * @returns {boolean} True if the button is hidden, false otherwise.
42
+ */
43
+ isHidden() {
44
+ return false;
45
+ }
46
+ /**
47
+ * @inheritDoc
48
+ */
49
+ render(createElement, editorContext) {
50
+ return this.renderDropdown(createElement, editorContext, { source: this.languageList }, [
51
+ this.renderButton(createElement, editorContext, {
52
+ label: this.getLanguageLabelByKey(this.selectedLanguage),
53
+ showArrowIcon: true,
54
+ }),
55
+ ]);
56
+ }
57
+ /**
58
+ * Override to render the button label with custom behavior.
59
+ *
60
+ * @inheritDoc
61
+ */
62
+ renderButtonLabel(h, editorContext, label) {
63
+ const isDisabled = this.isDisabled(editorContext);
64
+ return h('vega-font', {
65
+ variant: 'font-field-label-sm',
66
+ color: isDisabled ? 'text-disabled' : 'text-primary',
67
+ // eslint-disable-next-line jsdoc/require-jsdoc
68
+ ref: (el) => (this.labelRef = el),
69
+ }, label);
70
+ }
71
+ /* istanbul ignore next */
72
+ /**
73
+ * Handles the button click event. No need this method for language button.
74
+ *
75
+ * @param {VegaRTEToolbarRenderContext} editorContext - The render context for the editor.
76
+ */
77
+ handleButtonClick(editorContext) {
78
+ methodPlaceholder(editorContext);
79
+ }
80
+ /**
81
+ * Gets the label of a language by its key.
82
+ *
83
+ * @param {string} key The language key to look up.
84
+ * @returns {string} The label of the language, or the key if not found.
85
+ */
86
+ getLanguageLabelByKey(key) {
87
+ const language = this.languageList.find((item) => item.key === key);
88
+ return language.label;
89
+ }
90
+ }
@@ -0,0 +1,16 @@
1
+ import { ModifyContentAction } from '../../dto/actions/modify-content-action.abstract';
2
+ /**
3
+ * Action to insert a token node at a specified range in the Rich Text Editor.
4
+ *
5
+ * @example block.apply(new InsertTokenNodeAction(rteRange, tokenNode));
6
+ */
7
+ export class InsertTokenNodeAction extends ModifyContentAction {
8
+ constructor(rteRange, token) {
9
+ super();
10
+ this.type = 'INSERT_TOKEN_NODE';
11
+ this.rteRange = null;
12
+ this.actionHandleResult = false;
13
+ this.rteRange = rteRange;
14
+ this.token = token;
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ import { generateUUID } from '../../../../utils/misc';
2
+ import { ActionHandleStrategy } from '../../dto/action-handle-strategies/action-handle-strategy.abstract';
3
+ import { InsertNodeToNearestRootAction } from '../../dto/actions/insert-node-to-nearest-root-action';
4
+ import { RTETokenNode } from './token-node';
5
+ /**
6
+ * Strategy to handle the insertion of a token node into the nearest root block.
7
+ */
8
+ export class InsertTokenNodeStrategy extends ActionHandleStrategy {
9
+ /**
10
+ * @inheritDoc
11
+ */
12
+ handleAction(action, block) {
13
+ const { rteRange, token } = action;
14
+ if (rteRange && rteRange.startNode) {
15
+ const tokenNode = new RTETokenNode(generateUUID(), token.key, token.label, block);
16
+ block.apply(new InsertNodeToNearestRootAction(rteRange, tokenNode));
17
+ action.actionHandleResult = true;
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,60 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { generateUUID } from '../../../../utils/misc';
13
+ import { ElementToDTOStrategy } from '../../slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy.abstract';
14
+ /**
15
+ * Strategy to convert <span class="token" token-key="...">...</span> to a token node
16
+ */
17
+ export class SpanToTokenNodeStrategy extends ElementToDTOStrategy {
18
+ /**
19
+ * @inheritDoc
20
+ */
21
+ canHandle(elementsArray, currentIndex) {
22
+ const element = elementsArray[currentIndex];
23
+ if (element.nodeName === 'SPAN' &&
24
+ element.classList.contains('token') &&
25
+ element.hasAttribute('token-key')) {
26
+ return 1;
27
+ }
28
+ return 0;
29
+ }
30
+ /**
31
+ * @inheritDoc
32
+ */
33
+ handle(elementsArray) {
34
+ const element = elementsArray[0];
35
+ const tokenKey = element.getAttribute('token-key');
36
+ const text = element.textContent;
37
+ const annotations = this.generateTextStyleAnnotations(element);
38
+ // Exclude customAttribute and customClass from annotations
39
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
40
+ const { customAttribute, customClass } = annotations, restAnnotations = __rest(annotations, ["customAttribute", "customClass"]);
41
+ return {
42
+ id: generateUUID(),
43
+ type: 'token',
44
+ token: tokenKey,
45
+ text,
46
+ annotations: Object.assign({}, restAnnotations),
47
+ };
48
+ }
49
+ /**
50
+ * @inheritDoc
51
+ */
52
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
53
+ appendChildBlocks() { }
54
+ /**
55
+ * @inheritDoc
56
+ */
57
+ shouldProceedToElementChildren() {
58
+ return false;
59
+ }
60
+ }