@globalpayments/vega 2.99.0 → 2.101.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 (649) hide show
  1. package/dist/cjs/{accessibility-88f8af84.js → accessibility-6ca2a237.js} +21 -0
  2. package/dist/cjs/{action-color-accessibility-validator-b8a9ef0f.js → action-color-accessibility-validator-61af71ae.js} +1 -1
  3. package/dist/cjs/{app-globals-a306dce6.js → app-globals-275ea7c7.js} +19 -10
  4. package/dist/cjs/{aria-attributes-value-mapper-9a41b9cf.js → aria-attributes-value-mapper-e8c6b0e0.js} +1 -1
  5. package/dist/cjs/{aria-dialog-focusable-trap-slimmer-62147489.js → aria-dialog-focusable-trap-slimmer-c79cc3f8.js} +1 -1
  6. package/dist/cjs/{child-nodes-event-prevent-slimmer-e0ac8467.js → child-nodes-event-prevent-slimmer-d720d7e9.js} +1 -1
  7. package/dist/cjs/{code-block-ea1f5eb3.js → code-block-c598832d.js} +815 -751
  8. package/dist/cjs/{component-value-history-controller-slimmer.abstract-7071b064.js → component-value-history-controller-slimmer.abstract-4bd47aa1.js} +4 -4
  9. package/dist/cjs/{content-state-8d07d530.js → content-state-da23e822.js} +47 -3
  10. package/dist/cjs/countries-a8e3812a.js +251 -0
  11. package/dist/cjs/{dark-mode-style-controller-f3da3342.js → dark-mode-style-controller-ec04ece9.js} +45 -45
  12. package/dist/cjs/{date-required-rule-c0c498ad.js → date-required-rule-45c802d3.js} +1 -1
  13. package/dist/cjs/{design-token-58bf7fe8.js → design-token-9d762da0.js} +3 -3
  14. package/dist/cjs/{element-appender-slimmer-a0269315.js → element-appender-slimmer-2aaf8e24.js} +22 -3
  15. package/dist/cjs/{event-emit-slimmer-34aa195e.js → event-emit-slimmer-67b5c186.js} +1 -1
  16. package/dist/cjs/{form-field-controller-slimmer-f73f200e.js → form-field-controller-slimmer-ac9337f4.js} +3 -3
  17. package/dist/cjs/{image-annotation-action-2a28038e.js → image-annotation-action-378838c2.js} +8 -7
  18. package/dist/cjs/{image-extension-9659708b.js → image-extension-673ebe7f.js} +2 -2
  19. package/dist/cjs/index.cjs.js +24 -21
  20. package/dist/cjs/{inject-keyboard-manager-4fa45f9c.js → inject-keyboard-manager-540f0876.js} +1 -1
  21. package/dist/cjs/{internal-calendar-period-factory-6196bc80.js → internal-calendar-period-factory-b11918ee.js} +1 -1
  22. package/dist/cjs/{internal-translation-controller-51f7f865.js → internal-translation-controller-27bfc8c7.js} +15 -0
  23. package/dist/cjs/{internal-vega-event-manager-7003c84a.js → internal-vega-event-manager-976b9526.js} +10 -2
  24. package/dist/cjs/{keyboard-manager-482fe257.js → keyboard-manager-16e96b62.js} +12 -5
  25. package/dist/cjs/{keyboard-manager-slimmer-a19430dd.js → keyboard-manager-slimmer-0a4e556d.js} +1 -1
  26. package/dist/cjs/{link-extension-11340e1c.js → link-extension-f493e432.js} +3 -3
  27. package/dist/cjs/loader.cjs.js +17 -16
  28. package/dist/cjs/{month-view-generator-1a534451.js → month-view-generator-0a3e04de.js} +1 -1
  29. package/dist/cjs/overlay-escape-coordination-901d8942.js +38 -0
  30. package/dist/cjs/{public-rules-6c77b545.js → public-rules-bae12c47.js} +9 -9
  31. package/dist/cjs/{range-22ddd452.js → range-9f42fb40.js} +1 -1
  32. package/dist/cjs/{responsive-format-facade-74e6d791.js → responsive-format-facade-c6d7f0a1.js} +1 -1
  33. package/dist/cjs/{rich-text-editor-required-rule-09d1093a.js → rich-text-editor-required-rule-bb232741.js} +1 -1
  34. package/dist/cjs/{split-cell-operation-11bfb305.js → split-cell-operation-0d33123e.js} +4 -4
  35. package/dist/cjs/{state-border-formatter-bf4f9f1c.js → state-border-formatter-dda9109a.js} +1 -1
  36. package/dist/cjs/{string-format-strategy.abstract-bf37b14c.js → string-format-strategy.abstract-3a968a59.js} +1 -1
  37. package/dist/cjs/{string-input-formatter-slimmer-ffeb18a6.js → string-input-formatter-slimmer-2e0a838e.js} +3 -3
  38. package/dist/cjs/{string-mask-strategy-7f394726.js → string-mask-strategy-d9f85c21.js} +2 -2
  39. package/dist/cjs/{style-formatter-4ac63910.js → style-formatter-d21a9784.js} +2 -2
  40. package/dist/cjs/{sub-state-notify-slimmer-e264a120.js → sub-state-notify-slimmer-3b33e31c.js} +1 -1
  41. package/dist/cjs/{sub-state-observer-slimmer-6033b824.js → sub-state-observer-slimmer-5b68ba3f.js} +1 -1
  42. package/dist/cjs/{time-required-rule-e2a50003.js → time-required-rule-580cbd3d.js} +1 -1
  43. package/dist/cjs/{token-extension-4686cb3b.js → token-extension-4badb962.js} +811 -53
  44. package/dist/cjs/{translation-slimmer-e4997f8f.js → translation-slimmer-31cd5a57.js} +1 -1
  45. package/dist/cjs/{type-guard-b8d7bb3f.js → type-guard-00b8efc0.js} +1 -1
  46. package/dist/cjs/{valid-credit-card-number-rule-f5a6f009.js → valid-credit-card-number-rule-70885128.js} +1 -1
  47. package/dist/cjs/vega-accordion.cjs.entry.js +9 -9
  48. package/dist/cjs/vega-app-footer.cjs.entry.js +4 -4
  49. package/dist/cjs/vega-app-header-button.cjs.entry.js +10 -10
  50. package/dist/cjs/vega-banner.cjs.entry.js +4 -4
  51. package/dist/cjs/vega-box.cjs.entry.js +6 -6
  52. package/dist/cjs/vega-brand-logo.cjs.entry.js +1 -1
  53. package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
  54. package/dist/cjs/vega-button-circle.cjs.entry.js +12 -12
  55. package/dist/cjs/vega-button-group_2.cjs.entry.js +20 -13
  56. package/dist/cjs/vega-button-link.cjs.entry.js +8 -8
  57. package/dist/cjs/vega-button.cjs.entry.js +27 -11
  58. package/dist/cjs/vega-calendar_5.cjs.entry.js +130 -24
  59. package/dist/cjs/vega-card.cjs.entry.js +5 -5
  60. package/dist/cjs/vega-carousel.cjs.entry.js +7 -7
  61. package/dist/cjs/vega-checkbox_2.cjs.entry.js +9 -9
  62. package/dist/cjs/vega-chip.cjs.entry.js +10 -10
  63. package/dist/cjs/vega-code-block.cjs.entry.js +15 -15
  64. package/dist/cjs/vega-color-picker.cjs.entry.js +8 -8
  65. package/dist/cjs/vega-color-swatch-picker.cjs.entry.js +9 -9
  66. package/dist/cjs/vega-color-swatch.cjs.entry.js +6 -6
  67. package/dist/cjs/vega-combo-box.cjs.entry.js +15 -15
  68. package/dist/cjs/vega-date-picker_2.cjs.entry.js +22 -22
  69. package/dist/cjs/vega-dialog_2.cjs.entry.js +76 -10
  70. package/dist/cjs/vega-divider.cjs.entry.js +5 -5
  71. package/dist/cjs/vega-dropdown_5.cjs.entry.js +108 -25
  72. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  73. package/dist/cjs/{vega-event-id-58afed7a.js → vega-event-id-987a170c.js} +2 -0
  74. package/dist/cjs/vega-field-label.cjs.entry.js +29 -36
  75. package/dist/cjs/vega-file-uploader.cjs.entry.js +9 -9
  76. package/dist/cjs/vega-flag-icon.cjs.entry.js +11 -11
  77. package/dist/cjs/vega-flex.cjs.entry.js +6 -6
  78. package/dist/cjs/vega-font.cjs.entry.js +5 -5
  79. package/dist/cjs/vega-form.cjs.entry.js +9 -9
  80. package/dist/cjs/vega-grid.cjs.entry.js +5 -5
  81. package/dist/cjs/vega-icon.cjs.entry.js +5 -5
  82. package/dist/cjs/vega-image-uploader.cjs.entry.js +13 -13
  83. package/dist/cjs/vega-input-credit-card.cjs.entry.js +12 -12
  84. package/dist/cjs/vega-input-numeric.cjs.entry.js +12 -12
  85. package/dist/cjs/vega-input-passcode.cjs.entry.js +11 -11
  86. package/dist/cjs/vega-input-phone-number.cjs.entry.js +56 -275
  87. package/dist/cjs/vega-input-range.cjs.entry.js +10 -10
  88. package/dist/cjs/vega-input-select.cjs.entry.js +39 -39
  89. package/dist/cjs/vega-input.cjs.entry.js +14 -14
  90. package/dist/cjs/{vega-internal-event-id-f4d33037.js → vega-internal-event-id-98d499d7.js} +6 -2
  91. package/dist/cjs/vega-item-toggle.cjs.entry.js +3 -3
  92. package/dist/cjs/vega-left-nav_5.cjs.entry.js +14 -14
  93. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +3 -3
  94. package/dist/cjs/vega-page-notification_2.cjs.entry.js +2 -2
  95. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +4 -4
  96. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +4 -4
  97. package/dist/cjs/vega-pagination.cjs.entry.js +9 -9
  98. package/dist/cjs/vega-popover_2.cjs.entry.js +63 -14
  99. package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +10 -10
  100. package/dist/cjs/vega-radio_2.cjs.entry.js +12 -12
  101. package/dist/cjs/vega-rich-text-content.cjs.entry.js +16 -13
  102. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +712 -250
  103. package/dist/cjs/vega-rich-text-find-replace-panel.cjs.entry.js +6 -6
  104. package/dist/cjs/vega-rich-text-special-characters-panel.cjs.entry.js +8 -8
  105. package/dist/cjs/vega-rich-text-table-properties_3.cjs.entry.js +161 -108
  106. package/dist/cjs/vega-segment-control.cjs.entry.js +11 -4
  107. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +12 -12
  108. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +9 -9
  109. package/dist/cjs/vega-sidenav_3.cjs.entry.js +10 -10
  110. package/dist/cjs/vega-signature-capture.cjs.entry.js +12 -12
  111. package/dist/cjs/vega-stepper.cjs.entry.js +8 -8
  112. package/dist/cjs/vega-tab-group_2.cjs.entry.js +7 -7
  113. package/dist/cjs/vega-table_11.cjs.entry.js +625 -666
  114. package/dist/cjs/vega-textarea.cjs.entry.js +8 -8
  115. package/dist/cjs/vega-time-picker_2.cjs.entry.js +16 -16
  116. package/dist/cjs/vega-toggle-switch.cjs.entry.js +8 -8
  117. package/dist/cjs/vega-tooltip_2.cjs.entry.js +7 -7
  118. package/dist/cjs/vega.cjs.js +17 -16
  119. package/dist/cjs/{wait-for-component-did-render-44d006ee.js → wait-for-component-did-render-90edbc1a.js} +1 -1
  120. package/dist/collection/components/vega-button/vega-button.css +3 -3
  121. package/dist/collection/components/vega-button/vega-button.js +17 -2
  122. package/dist/collection/components/vega-button-circle/vega-button-circle.css +3 -3
  123. package/dist/collection/components/vega-button-group/vega-button-group-item/slimmers/renderers/vega-button-group-item-renderer.js +13 -6
  124. package/dist/collection/components/vega-button-link/vega-button-link.css +4 -4
  125. package/dist/collection/components/vega-button-link/vega-button-link.js +2 -2
  126. package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-item-renderer.js +45 -5
  127. package/dist/collection/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-preview-popover-renderer.js +43 -1
  128. package/dist/collection/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-event-renderer.js +23 -4
  129. package/dist/collection/components/vega-calendar/vega-calendar.js +77 -1
  130. package/dist/collection/components/vega-code-block/vega-code-block.css +4 -4
  131. package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-keyboard-controller.js +148 -0
  132. package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-scrollable-controller.js +5 -2
  133. package/dist/collection/components/vega-dropdown/slimmers/renderers/vega-dropdown-renderer.js +17 -0
  134. package/dist/collection/components/vega-dropdown/vega-dropdown-item/slimmers/renderers/vega-dropdown-item-renderer.js +2 -2
  135. package/dist/collection/components/vega-dropdown/vega-dropdown-item/vega-dropdown-item.css +2 -1
  136. package/dist/collection/components/vega-dropdown/vega-dropdown.js +1 -1
  137. package/dist/collection/components/vega-field-label/slimmers/renderers/vega-field-label-label-announcement-renderer.js +21 -30
  138. package/dist/collection/components/vega-field-label/vega-field-label.js +7 -5
  139. package/dist/collection/components/vega-flag-icon/slimmers/controllers/vega-flag-icon-controller.js +6 -6
  140. package/dist/collection/components/vega-input-phone-number/slimmers/renderers/country-select-renderer.js +4 -8
  141. package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.js +19 -2
  142. package/dist/collection/components/vega-input-select/slimmers/renderers/vega-input-select-prefix-icon-renderer.js +8 -28
  143. package/dist/collection/components/vega-input-select/vega-input-select.js +3 -1
  144. package/dist/collection/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.js +66 -0
  145. package/dist/collection/components/vega-popover/slimmers/renderers/vega-popover-appender-renderer.js +17 -0
  146. package/dist/collection/components/vega-popover/vega-popover.js +33 -1
  147. package/dist/collection/components/vega-rich-text-content/slimmers/renderers/vega-rich-text-content-renderer.js +4 -1
  148. package/dist/collection/components/vega-rich-text-editor/constants/constant.js +9 -0
  149. package/dist/collection/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/commit-value-strategy.js +13 -0
  150. package/dist/collection/components/vega-rich-text-editor/dto/actions/commit-value-action.js +20 -0
  151. package/dist/collection/components/vega-rich-text-editor/dto/blocks/block.abstract.js +11 -0
  152. package/dist/collection/components/vega-rich-text-editor/dto/blocks/list-item-block.js +11 -2
  153. package/dist/collection/components/vega-rich-text-editor/dto/blocks/text-block.js +18 -6
  154. package/dist/collection/components/vega-rich-text-editor/dto/content-state.js +11 -0
  155. package/dist/collection/components/vega-rich-text-editor/dto/nodes/code-block-node.js +6 -0
  156. package/dist/collection/components/vega-rich-text-editor/dto/nodes/node.abstract.js +8 -0
  157. package/dist/collection/components/vega-rich-text-editor/dto/nodes/text-node.js +6 -0
  158. package/dist/collection/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.js +30 -18
  159. package/dist/collection/components/vega-rich-text-editor/extensions/blockquote/renderers/blockquote-toolbar-button-renderer.js +1 -0
  160. package/dist/collection/components/vega-rich-text-editor/extensions/copy/copy-toolbar-button-renderer.js +1 -0
  161. package/dist/collection/components/vega-rich-text-editor/extensions/cut/cut-toolbar-button-renderer.js +1 -0
  162. package/dist/collection/components/vega-rich-text-editor/extensions/find-replace/slimmer/renderers/find-replace-toolbar-button-renderer.js +51 -0
  163. package/dist/collection/components/vega-rich-text-editor/extensions/find-replace/vega-rich-text-find-replace-panel/slimmers/renderers/find-replace-panel-renderer.js +2 -2
  164. package/dist/collection/components/vega-rich-text-editor/extensions/fullscreen/fullscreen-toolbar-button-renderer.js +3 -0
  165. package/dist/collection/components/vega-rich-text-editor/extensions/functions/dto/logic-control-node.js +6 -0
  166. package/dist/collection/components/vega-rich-text-editor/extensions/functions/renderers/function-toolbar-button-renderer.js +1 -0
  167. package/dist/collection/components/vega-rich-text-editor/extensions/horizontal-line/renderers/horizontal-line-toolbar-button-renderer.js +1 -0
  168. package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-toolbar-button-renderer.js +5 -3
  169. package/dist/collection/components/vega-rich-text-editor/extensions/line-height/line-height-toolbar-button-renderer.js +16 -0
  170. package/dist/collection/components/vega-rich-text-editor/extensions/special-characters/special-characters-toolbar-button-renderer.js +2 -0
  171. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.js +3 -9
  172. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-cell-renderer.js +2 -2
  173. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.js +81 -1
  174. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-popover-base-renderer.js +148 -0
  175. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.js +151 -5
  176. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.js +144 -2
  177. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-selection.js +26 -1
  178. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.js +1 -0
  179. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/slimmers/renderers/vega-rich-text-cell-properties-form-field-renderer.js +11 -2
  180. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/slimmers/renderers/vega-rich-text-table-properties-basic-form-field-renderer.abstract.js +5 -2
  181. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/slimmers/renderers/vega-rich-text-table-properties-form-field-renderer.js +5 -1
  182. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/vega-rich-text-table-properties.css +5 -0
  183. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/vega-rich-text-table-properties.js +16 -1
  184. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/caption-button-slimmer.js +1 -0
  185. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/cell-properties-button-slimmer.js +1 -0
  186. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/column-button-slimmer.js +10 -9
  187. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/merge-cells-button-slimmer.js +9 -8
  188. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.js +25 -10
  189. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-properties-button-slimmer.js +1 -0
  190. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.js +5 -4
  191. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/vega-rich-text-table-setting-renderer.js +1 -1
  192. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.css +10 -0
  193. package/dist/collection/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.js +2 -0
  194. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.js +1 -0
  195. package/dist/collection/components/vega-rich-text-editor/extensions/word-count/action-handler-interceptors/prevent-hard-limit-exceed-interceptor.js +70 -0
  196. package/dist/collection/components/vega-rich-text-editor/extensions/word-count/type.js +1 -0
  197. package/dist/collection/components/vega-rich-text-editor/extensions/word-count/word-count-extension.js +62 -0
  198. package/dist/collection/components/vega-rich-text-editor/public-api.js +1 -0
  199. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/insert-composition-text-controller.js +2 -1
  200. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/user-input-controller.js +7 -1
  201. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/value-controller.js +52 -2
  202. package/dist/collection/components/vega-rich-text-editor/slimmers/controllers/word-count-controller.js +79 -0
  203. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/toolbar-renderer.js +6 -3
  204. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/bullets-numbers/bullets-numbers-toolbar-button-slimmer.js +2 -1
  205. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/horizontal-alignment/horizontal-alignment-toolbar-button-slimmer.js +2 -1
  206. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/image-toolbar-button-slimmer.js +3 -2
  207. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/link-toolbar-button-slimmer.js +111 -2
  208. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.js +17 -6
  209. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-color-toolbar-button-slimmer.js +1 -1
  210. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/text-styles-toolbar-button-slimmer.js +1 -1
  211. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/tools/toolbar-button-slimmer.abstract.js +3 -2
  212. package/dist/collection/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-renderer.js +59 -8
  213. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor-toolbar-button/slimmers/renderers/vega-rich-text-editor-toolbar-button-renderer.js +1 -1
  214. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor-toolbar-button/vega-rich-text-editor-toolbar-button.js +13 -1
  215. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-editor.js +16 -0
  216. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-link-editor/slimmers/controllers/link-editor-controller.js +124 -0
  217. package/dist/collection/components/vega-rich-text-editor/vega-rich-text-link-editor/slimmers/renderers/vega-rich-text-link-editor-renderer.js +9 -1
  218. package/dist/collection/components/vega-segment-control/slimmers/renderers/vega-segment-renderer.js +8 -1
  219. package/dist/collection/components/vega-segment-control/vega-segment-control.js +23 -0
  220. package/dist/collection/components/vega-table/slimmers/controllers/dto/column-render-input-model.js +25 -8
  221. package/dist/collection/components/vega-table/slimmers/controllers/dto/row-render-input-model.js +41 -0
  222. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-head-template-structure-controller.js +1 -0
  223. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-render-input-controller.js +316 -18
  224. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-body-renderer.js +6 -1
  225. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-header-renderer.js +1 -0
  226. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.js +33 -530
  227. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-row-renderer.js +1 -0
  228. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.css +10 -0
  229. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.js +25 -8
  230. package/dist/collection/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.js +14 -6
  231. package/dist/collection/components/vega-table/vega-table-expand-row/vega-table-expand-row.css +20 -0
  232. package/dist/collection/components/vega-table/vega-table-expand-row/vega-table-expand-row.js +7 -0
  233. package/dist/collection/components/vega-table/vega-table-foot-cell/slimmers/renderers/vega-table-foot-cell-renderer.js +21 -2
  234. package/dist/collection/components/vega-table/vega-table-foot-cell/vega-table-foot-cell.css +10 -0
  235. package/dist/collection/components/vega-table/vega-table-foot-cell/vega-table-foot-cell.js +12 -1
  236. package/dist/collection/components/vega-table/vega-table-foot-row/slimmers/renderers/vega-table-foot-row-renderer.js +20 -13
  237. package/dist/collection/components/vega-table/vega-table-foot-row/vega-table-foot-row.css +26 -0
  238. package/dist/collection/components/vega-table/vega-table-foot-row/vega-table-foot-row.js +12 -0
  239. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.css +10 -0
  240. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +19 -6
  241. package/dist/collection/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.js +21 -46
  242. package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.css +16 -7
  243. package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.js +9 -2
  244. package/dist/collection/components/vega-table/vega-table-row/slimmers/renderers/vega-table-row-renderer.js +28 -13
  245. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.css +26 -0
  246. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.js +11 -0
  247. package/dist/collection/constants/tokens/themes/v2-new-brand/dark-mode-border-tokens.js +1 -1
  248. package/dist/collection/constants/tokens/themes/v2-new-brand/dark-mode-color-tokens.js +20 -20
  249. package/dist/collection/constants/tokens/themes/v2-new-brand/dark-mode-ring-tokens.js +1 -1
  250. package/dist/collection/constants/tokens/themes/v2-new-brand/dark-mode-shadow-tokens.js +1 -1
  251. package/dist/collection/constants/tokens/themes/v2-new-brand/light-mode-border-tokens.js +1 -1
  252. package/dist/collection/constants/tokens/themes/v2-new-brand/light-mode-color-tokens.js +19 -19
  253. package/dist/collection/constants/tokens/themes/v2-new-brand/light-mode-shadow-tokens.js +1 -1
  254. package/dist/collection/constants/ui.js +1 -0
  255. package/dist/collection/global/scripts/before-vega-load.js +10 -0
  256. package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +10 -2
  257. package/dist/collection/helpers/event-manager/event-id/vega-event-id.js +1 -0
  258. package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +3 -1
  259. package/dist/collection/helpers/keyboard/keyboard-manager.js +11 -4
  260. package/dist/collection/helpers/keyboard/overlay-escape-coordination.js +33 -0
  261. package/dist/collection/helpers/public-api.js +1 -0
  262. package/dist/collection/helpers/slimmers/mutation-observer/aria-attributes-value-mapper.js +1 -1
  263. package/dist/collection/helpers/slimmers/position-calculation/position-calculation-controller.js +8 -0
  264. package/dist/collection/helpers/slimmers/position-calculation/screen-position-calculation-strategy.js +10 -0
  265. package/dist/collection/helpers/slimmers/vega-table-child-render-input-consumer-slimmer.js +2 -0
  266. package/dist/collection/helpers/translation/locales/en.js +15 -0
  267. package/dist/collection/helpers/ui/element-appender.js +1 -0
  268. package/dist/collection/polyfill/libphonenumber/as-you-type.js +21 -3
  269. package/dist/collection/polyfill/libphonenumber/metadata.js +16 -0
  270. package/dist/collection/utils/accessibility.js +20 -0
  271. package/dist/esm/{accessibility-6af5cf2e.js → accessibility-c899a968.js} +21 -1
  272. package/dist/esm/{action-color-accessibility-validator-08877515.js → action-color-accessibility-validator-3e824a59.js} +1 -1
  273. package/dist/esm/{app-globals-c59364c2.js → app-globals-ad3c7cea.js} +19 -10
  274. package/dist/esm/{aria-attributes-value-mapper-2c632641.js → aria-attributes-value-mapper-a5c7478e.js} +1 -1
  275. package/dist/esm/{aria-dialog-focusable-trap-slimmer-f069f54d.js → aria-dialog-focusable-trap-slimmer-27a6aa19.js} +3 -3
  276. package/dist/esm/{child-nodes-event-prevent-slimmer-82626871.js → child-nodes-event-prevent-slimmer-0ebcbf47.js} +1 -1
  277. package/dist/esm/{child-nodes-notify-observer-slimmer-499a3aa7.js → child-nodes-notify-observer-slimmer-034bc78c.js} +1 -1
  278. package/dist/esm/{code-block-e6443949.js → code-block-1cdf7a51.js} +816 -754
  279. package/dist/esm/{component-value-history-controller-slimmer.abstract-ee393213.js → component-value-history-controller-slimmer.abstract-bdeeb43f.js} +6 -6
  280. package/dist/esm/{content-state-43cdacff.js → content-state-6eb610b8.js} +48 -6
  281. package/dist/esm/countries-50d3339b.js +249 -0
  282. package/dist/esm/{dark-mode-style-controller-352f15ff.js → dark-mode-style-controller-4e04a2d3.js} +45 -45
  283. package/dist/esm/{date-required-rule-b5b67498.js → date-required-rule-2ea3aec8.js} +1 -1
  284. package/dist/esm/{design-token-8319bb59.js → design-token-82a4e107.js} +3 -3
  285. package/dist/esm/{dom-node-subject-observer-factory-ddff8662.js → dom-node-subject-observer-factory-bb7e68a0.js} +1 -1
  286. package/dist/esm/{element-appender-slimmer-c81d1fe3.js → element-appender-slimmer-dd4e2908.js} +24 -5
  287. package/dist/esm/{event-emit-slimmer-2452278f.js → event-emit-slimmer-12ee1593.js} +2 -2
  288. package/dist/esm/{form-field-controller-slimmer-511b7ac5.js → form-field-controller-slimmer-5c794b4d.js} +5 -5
  289. package/dist/esm/{image-annotation-action-d7cb80aa.js → image-annotation-action-cdd50dcc.js} +9 -8
  290. package/dist/esm/{image-extension-9b8abd0d.js → image-extension-f6dbd70c.js} +2 -2
  291. package/dist/esm/index.js +24 -23
  292. package/dist/esm/{inject-keyboard-manager-dd368d56.js → inject-keyboard-manager-6a10c9b7.js} +1 -1
  293. package/dist/esm/{internal-calendar-period-factory-d58f35c6.js → internal-calendar-period-factory-d1a60f81.js} +1 -1
  294. package/dist/esm/{internal-translation-controller-b33430c6.js → internal-translation-controller-fff376d2.js} +15 -0
  295. package/dist/esm/{internal-vega-event-manager-2ecc9186.js → internal-vega-event-manager-0c381f3b.js} +10 -2
  296. package/dist/esm/{keyboard-manager-b4a0d97d.js → keyboard-manager-a58288df.js} +13 -6
  297. package/dist/esm/{keyboard-manager-slimmer-0517fc70.js → keyboard-manager-slimmer-133b86cd.js} +1 -1
  298. package/dist/esm/{link-extension-230bae8d.js → link-extension-bc234cf7.js} +3 -3
  299. package/dist/esm/loader.js +19 -18
  300. package/dist/esm/{month-view-generator-f470caac.js → month-view-generator-20e32b22.js} +1 -1
  301. package/dist/esm/overlay-escape-coordination-439f7d6f.js +35 -0
  302. package/dist/esm/{public-rules-28ef32d3.js → public-rules-8dc3fb00.js} +11 -11
  303. package/dist/esm/{range-efad2578.js → range-d2439ba7.js} +2 -2
  304. package/dist/esm/{responsive-format-facade-dec87e46.js → responsive-format-facade-07843ec3.js} +1 -1
  305. package/dist/esm/{rich-text-editor-required-rule-a697e5bd.js → rich-text-editor-required-rule-a0663a84.js} +1 -1
  306. package/dist/esm/{split-cell-operation-89b91a38.js → split-cell-operation-1a889fa0.js} +5 -5
  307. package/dist/esm/{state-border-formatter-1e900a2f.js → state-border-formatter-3b3dcfe8.js} +1 -1
  308. package/dist/esm/{string-format-strategy.abstract-d0ce3f65.js → string-format-strategy.abstract-44381dcb.js} +1 -1
  309. package/dist/esm/{string-input-formatter-slimmer-6546cfc7.js → string-input-formatter-slimmer-69887c40.js} +4 -4
  310. package/dist/esm/{string-mask-strategy-dd13ae21.js → string-mask-strategy-999fba4b.js} +2 -2
  311. package/dist/esm/{style-formatter-057d7120.js → style-formatter-c4192c99.js} +2 -2
  312. package/dist/esm/{sub-state-notify-slimmer-23b7d0e8.js → sub-state-notify-slimmer-ba72f30b.js} +2 -2
  313. package/dist/esm/{sub-state-observer-slimmer-722f6b92.js → sub-state-observer-slimmer-bee1c7fa.js} +3 -3
  314. package/dist/esm/{time-required-rule-73753a54.js → time-required-rule-0554b114.js} +1 -1
  315. package/dist/esm/{token-extension-74a0eeb1.js → token-extension-530d9bde.js} +813 -56
  316. package/dist/esm/{translation-slimmer-ef970ffc.js → translation-slimmer-77022f2e.js} +1 -1
  317. package/dist/esm/{type-guard-6fc96870.js → type-guard-26d83e7e.js} +1 -1
  318. package/dist/esm/{ui-d73f756a.js → ui-80e610f4.js} +1 -1
  319. package/dist/esm/{valid-credit-card-number-rule-b54a31e7.js → valid-credit-card-number-rule-f60b6904.js} +1 -1
  320. package/dist/esm/vega-accordion.entry.js +11 -11
  321. package/dist/esm/vega-app-footer.entry.js +6 -6
  322. package/dist/esm/vega-app-header-button.entry.js +12 -12
  323. package/dist/esm/vega-backdrop.entry.js +1 -1
  324. package/dist/esm/vega-banner.entry.js +6 -6
  325. package/dist/esm/vega-box.entry.js +7 -7
  326. package/dist/esm/vega-brand-logo.entry.js +1 -1
  327. package/dist/esm/vega-breadcrumb.entry.js +6 -6
  328. package/dist/esm/vega-button-circle.entry.js +14 -14
  329. package/dist/esm/vega-button-group_2.entry.js +22 -15
  330. package/dist/esm/vega-button-link.entry.js +10 -10
  331. package/dist/esm/vega-button.entry.js +29 -13
  332. package/dist/esm/vega-calendar_5.entry.js +132 -26
  333. package/dist/esm/vega-card.entry.js +6 -6
  334. package/dist/esm/vega-carousel.entry.js +9 -9
  335. package/dist/esm/vega-checkbox_2.entry.js +12 -12
  336. package/dist/esm/vega-chip.entry.js +12 -12
  337. package/dist/esm/vega-code-block.entry.js +17 -17
  338. package/dist/esm/vega-color-picker.entry.js +10 -10
  339. package/dist/esm/vega-color-swatch-picker.entry.js +11 -11
  340. package/dist/esm/vega-color-swatch.entry.js +8 -8
  341. package/dist/esm/vega-combo-box.entry.js +17 -17
  342. package/dist/esm/vega-date-picker_2.entry.js +24 -24
  343. package/dist/esm/vega-dialog_2.entry.js +78 -12
  344. package/dist/esm/vega-divider.entry.js +5 -5
  345. package/dist/esm/vega-dropdown_5.entry.js +111 -28
  346. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  347. package/dist/esm/{vega-event-id-f55f6977.js → vega-event-id-59cd9297.js} +2 -1
  348. package/dist/esm/vega-field-label.entry.js +31 -38
  349. package/dist/esm/vega-file-uploader.entry.js +11 -11
  350. package/dist/esm/vega-flag-icon.entry.js +11 -11
  351. package/dist/esm/vega-flex.entry.js +7 -7
  352. package/dist/esm/vega-font.entry.js +6 -6
  353. package/dist/esm/vega-form.entry.js +12 -12
  354. package/dist/esm/vega-grid.entry.js +6 -6
  355. package/dist/esm/vega-icon.entry.js +6 -6
  356. package/dist/esm/vega-image-uploader.entry.js +15 -15
  357. package/dist/esm/vega-input-credit-card.entry.js +14 -14
  358. package/dist/esm/vega-input-numeric.entry.js +14 -14
  359. package/dist/esm/vega-input-passcode.entry.js +13 -13
  360. package/dist/esm/vega-input-phone-number.entry.js +55 -274
  361. package/dist/esm/vega-input-range.entry.js +12 -12
  362. package/dist/esm/vega-input-select.entry.js +41 -41
  363. package/dist/esm/vega-input.entry.js +16 -16
  364. package/dist/esm/{vega-internal-event-id-86fce049.js → vega-internal-event-id-02093067.js} +4 -2
  365. package/dist/esm/vega-item-toggle.entry.js +5 -5
  366. package/dist/esm/vega-left-nav_5.entry.js +16 -16
  367. package/dist/esm/vega-loader-wrapper_2.entry.js +4 -4
  368. package/dist/esm/vega-page-notification_2.entry.js +4 -4
  369. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +6 -6
  370. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +6 -6
  371. package/dist/esm/vega-pagination.entry.js +11 -11
  372. package/dist/esm/vega-popover_2.entry.js +65 -16
  373. package/dist/esm/vega-progress-tracker_2.entry.js +12 -12
  374. package/dist/esm/vega-radio_2.entry.js +15 -15
  375. package/dist/esm/vega-rich-text-content.entry.js +18 -15
  376. package/dist/esm/vega-rich-text-editor_4.entry.js +715 -253
  377. package/dist/esm/vega-rich-text-find-replace-panel.entry.js +8 -8
  378. package/dist/esm/vega-rich-text-special-characters-panel.entry.js +10 -10
  379. package/dist/esm/vega-rich-text-table-properties_3.entry.js +163 -110
  380. package/dist/esm/vega-segment-control.entry.js +13 -6
  381. package/dist/esm/vega-selection-chip_2.entry.js +14 -14
  382. package/dist/esm/vega-selection-tile_2.entry.js +12 -12
  383. package/dist/esm/vega-sidenav_3.entry.js +12 -12
  384. package/dist/esm/vega-signature-capture.entry.js +14 -14
  385. package/dist/esm/vega-stepper.entry.js +10 -10
  386. package/dist/esm/vega-tab-group_2.entry.js +9 -9
  387. package/dist/esm/vega-table_11.entry.js +627 -668
  388. package/dist/esm/vega-textarea.entry.js +10 -10
  389. package/dist/esm/vega-time-picker_2.entry.js +18 -18
  390. package/dist/esm/vega-toggle-switch.entry.js +10 -10
  391. package/dist/esm/vega-tooltip_2.entry.js +9 -9
  392. package/dist/esm/vega.js +19 -18
  393. package/dist/esm/{wait-for-component-did-render-ff7062aa.js → wait-for-component-did-render-9e84d92d.js} +2 -2
  394. package/dist/sri/vega-sri-manifest.json +415 -407
  395. package/dist/types/components/vega-button/vega-button.d.ts +2 -0
  396. package/dist/types/components/vega-button-group/types.d.ts +12 -6
  397. package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-item-renderer.d.ts +18 -0
  398. package/dist/types/components/vega-calendar/slimmers/common/renderers/vega-calendar-event-preview-popover-renderer.d.ts +9 -0
  399. package/dist/types/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-event-renderer.d.ts +9 -1
  400. package/dist/types/components/vega-calendar/types.d.ts +22 -0
  401. package/dist/types/components/vega-calendar/vega-calendar.d.ts +23 -1
  402. package/dist/types/components/vega-dropdown/vega-dropdown.d.ts +1 -1
  403. package/dist/types/components/vega-field-label/slimmers/renderers/vega-field-label-label-announcement-renderer.d.ts +3 -10
  404. package/dist/types/components/vega-flag-icon/slimmers/controllers/vega-flag-icon-controller.d.ts +2 -2
  405. package/dist/types/components/vega-input-phone-number/slimmers/renderers/country-select-renderer.d.ts +0 -1
  406. package/dist/types/components/vega-input-select/slimmers/renderers/vega-input-select-dropdown-renderer.d.ts +8 -0
  407. package/dist/types/components/vega-input-select/slimmers/renderers/vega-input-select-prefix-icon-renderer.d.ts +2 -14
  408. package/dist/types/components/vega-input-select/vega-input-select.d.ts +1 -0
  409. package/dist/types/components/vega-modal/slimmers/controllers/vega-modal-open-state-controller.d.ts +33 -0
  410. package/dist/types/components/vega-modal/types.d.ts +2 -1
  411. package/dist/types/components/vega-popover/slimmers/renderers/vega-popover-appender-renderer.d.ts +9 -0
  412. package/dist/types/components/vega-rich-text-editor/constants/constant.d.ts +6 -0
  413. package/dist/types/components/vega-rich-text-editor/dto/action-handle-strategies/modify-content-strategies/commit-value-strategy.d.ts +13 -0
  414. package/dist/types/components/vega-rich-text-editor/dto/actions/commit-value-action.d.ts +20 -0
  415. package/dist/types/components/vega-rich-text-editor/dto/blocks/block.abstract.d.ts +6 -0
  416. package/dist/types/components/vega-rich-text-editor/dto/blocks/list-item-block.d.ts +4 -0
  417. package/dist/types/components/vega-rich-text-editor/dto/blocks/text-block.d.ts +11 -1
  418. package/dist/types/components/vega-rich-text-editor/dto/content-state.d.ts +6 -0
  419. package/dist/types/components/vega-rich-text-editor/dto/nodes/code-block-node.d.ts +4 -0
  420. package/dist/types/components/vega-rich-text-editor/dto/nodes/node.abstract.d.ts +6 -0
  421. package/dist/types/components/vega-rich-text-editor/dto/nodes/text-node.d.ts +4 -0
  422. package/dist/types/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.d.ts +5 -0
  423. package/dist/types/components/vega-rich-text-editor/extensions/find-replace/slimmer/renderers/find-replace-toolbar-button-renderer.d.ts +19 -0
  424. package/dist/types/components/vega-rich-text-editor/extensions/functions/dto/logic-control-node.d.ts +4 -0
  425. package/dist/types/components/vega-rich-text-editor/extensions/line-height/line-height-toolbar-button-renderer.d.ts +14 -1
  426. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-caption-renderer.d.ts +2 -2
  427. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.d.ts +31 -1
  428. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-popover-base-renderer.d.ts +91 -0
  429. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.d.ts +46 -0
  430. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.d.ts +58 -0
  431. package/dist/types/components/vega-rich-text-editor/extensions/table/table-selection.d.ts +8 -0
  432. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/slimmers/renderers/vega-rich-text-table-properties-basic-form-field-renderer.abstract.d.ts +2 -1
  433. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-properties/vega-rich-text-table-properties.d.ts +2 -0
  434. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/row-button-slimmer.d.ts +3 -0
  435. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/slimmers/renderers/table-setting-button-slimmer.abstract.d.ts +3 -1
  436. package/dist/types/components/vega-rich-text-editor/extensions/table/vega-rich-text-table-setting/vega-rich-text-table-setting.d.ts +1 -0
  437. package/dist/types/components/vega-rich-text-editor/extensions/word-count/action-handler-interceptors/prevent-hard-limit-exceed-interceptor.d.ts +38 -0
  438. package/dist/types/components/vega-rich-text-editor/extensions/word-count/type.d.ts +46 -0
  439. package/dist/types/components/vega-rich-text-editor/extensions/word-count/word-count-extension.d.ts +38 -0
  440. package/dist/types/components/vega-rich-text-editor/interface.d.ts +12 -0
  441. package/dist/types/components/vega-rich-text-editor/public-api.d.ts +1 -0
  442. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/value-controller.d.ts +11 -1
  443. package/dist/types/components/vega-rich-text-editor/slimmers/controllers/word-count-controller.d.ts +40 -0
  444. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/link-toolbar-button-slimmer.d.ts +14 -0
  445. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/source-edit-toolbar-button-slimmer.d.ts +3 -1
  446. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/tools/toolbar-button-slimmer.abstract.d.ts +3 -2
  447. package/dist/types/components/vega-rich-text-editor/slimmers/renderers/vega-rich-text-editor-renderer.d.ts +12 -0
  448. package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor-toolbar-button/vega-rich-text-editor-toolbar-button.d.ts +2 -0
  449. package/dist/types/components/vega-rich-text-editor/vega-rich-text-editor.d.ts +4 -0
  450. package/dist/types/components/vega-rich-text-editor/vega-rich-text-link-editor/slimmers/controllers/link-editor-controller.d.ts +68 -0
  451. package/dist/types/components/vega-rich-text-editor/vega-rich-text-link-editor/slimmers/renderers/vega-rich-text-link-editor-renderer.d.ts +3 -0
  452. package/dist/types/components/vega-segment-control/slimmers/renderers/vega-segment-renderer.d.ts +1 -0
  453. package/dist/types/components/vega-segment-control/types.d.ts +2 -0
  454. package/dist/types/components/vega-segment-control/vega-segment-control.d.ts +7 -1
  455. package/dist/types/components/vega-table/slimmers/controllers/dto/column-render-input-model.d.ts +17 -0
  456. package/dist/types/components/vega-table/slimmers/controllers/dto/row-render-input-model.d.ts +39 -0
  457. package/dist/types/components/vega-table/slimmers/controllers/vega-table-render-input-controller.d.ts +71 -7
  458. package/dist/types/components/vega-table/slimmers/renderers/vega-table-body-renderer.d.ts +1 -0
  459. package/dist/types/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.d.ts +3 -88
  460. package/dist/types/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.d.ts +1 -1
  461. package/dist/types/components/vega-table/vega-table-expand-row/vega-table-expand-row.d.ts +5 -0
  462. package/dist/types/components/vega-table/vega-table-foot-cell/slimmers/renderers/vega-table-foot-cell-renderer.d.ts +1 -0
  463. package/dist/types/components/vega-table/vega-table-foot-cell/vega-table-foot-cell.d.ts +5 -0
  464. package/dist/types/components/vega-table/vega-table-foot-row/slimmers/renderers/vega-table-foot-row-renderer.d.ts +1 -3
  465. package/dist/types/components/vega-table/vega-table-foot-row/vega-table-foot-row.d.ts +5 -0
  466. package/dist/types/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.d.ts +0 -4
  467. package/dist/types/components/vega-table/vega-table-head-row/vega-table-head-row.d.ts +2 -2
  468. package/dist/types/components/vega-table/vega-table-row/slimmers/renderers/vega-table-row-renderer.d.ts +2 -3
  469. package/dist/types/components/vega-table/vega-table-row/vega-table-row.d.ts +4 -0
  470. package/dist/types/components.d.ts +33 -2
  471. package/dist/types/constants/ui.d.ts +1 -1
  472. package/dist/types/helpers/event-manager/event-id/vega-event-id.d.ts +1 -0
  473. package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +3 -1
  474. package/dist/types/helpers/keyboard/keyboard-manager.d.ts +9 -0
  475. package/dist/types/helpers/keyboard/overlay-escape-coordination.d.ts +28 -0
  476. package/dist/types/helpers/public-api.d.ts +1 -0
  477. package/dist/types/helpers/slimmers/mutation-observer/aria-attributes-value-mapper.d.ts +1 -1
  478. package/dist/types/helpers/slimmers/position-calculation/position-calculation-controller.d.ts +6 -0
  479. package/dist/types/helpers/slimmers/position-calculation/screen-position-calculation-strategy.d.ts +6 -0
  480. package/dist/types/helpers/slimmers/position-calculation/screen-scroll-position-update.d.ts +2 -1
  481. package/dist/types/helpers/slimmers/vega-table-child-render-input-consumer-slimmer.d.ts +2 -1
  482. package/dist/types/helpers/translation/interface.d.ts +16 -1
  483. package/dist/types/polyfill/libphonenumber/as-you-type.d.ts +1 -0
  484. package/dist/types/polyfill/libphonenumber/metadata.d.ts +10 -0
  485. package/dist/types/types/components.type.d.ts +7 -1
  486. package/dist/types/types/public-api.d.ts +2 -0
  487. package/dist/types/utils/accessibility.d.ts +9 -0
  488. package/dist/vega/index.esm.js +1 -1
  489. package/dist/vega/p-022cbf8a.js +1 -0
  490. package/dist/vega/{p-c8ad7207.entry.js → p-02c1284e.entry.js} +1 -1
  491. package/dist/vega/{p-22edd3cc.js → p-069bbb4a.js} +1 -1
  492. package/dist/vega/p-08fd229c.js +1 -0
  493. package/dist/vega/{p-fcb6b499.js → p-0eea1ca8.js} +1 -1
  494. package/dist/vega/{p-ba6881da.entry.js → p-131ce9df.entry.js} +1 -1
  495. package/dist/vega/{p-024db952.entry.js → p-143ee395.entry.js} +1 -1
  496. package/dist/vega/p-178634f3.js +1 -0
  497. package/dist/vega/{p-9e9f49f4.js → p-1836a6a5.js} +1 -1
  498. package/dist/vega/p-1dbf8d1f.js +1 -0
  499. package/dist/vega/{p-d4d90ce2.entry.js → p-2b26e182.entry.js} +1 -1
  500. package/dist/vega/p-2dda5c65.entry.js +1 -0
  501. package/dist/vega/{p-df63c2fb.entry.js → p-30010c41.entry.js} +1 -1
  502. package/dist/vega/p-32f5a6dd.entry.js +1 -0
  503. package/dist/vega/{p-3c8421d5.entry.js → p-3460a1c5.entry.js} +1 -1
  504. package/dist/vega/p-34b523da.entry.js +1 -0
  505. package/dist/vega/p-357c0226.entry.js +1 -0
  506. package/dist/vega/p-361f8996.js +1 -0
  507. package/dist/vega/{p-526e3634.js → p-36a57431.js} +1 -1
  508. package/dist/vega/p-36ee9d54.js +1 -0
  509. package/dist/vega/{p-6659c910.entry.js → p-37d5c37e.entry.js} +1 -1
  510. package/dist/vega/{p-47a48329.entry.js → p-3d6a43df.entry.js} +1 -1
  511. package/dist/vega/{p-0ca3b4bf.entry.js → p-45ad2d90.entry.js} +1 -1
  512. package/dist/vega/{p-fb9475ab.entry.js → p-4b117bfd.entry.js} +1 -1
  513. package/dist/vega/p-4b35c748.js +1 -0
  514. package/dist/vega/{p-55dc3053.entry.js → p-4e23e56c.entry.js} +1 -1
  515. package/dist/vega/p-4e70836a.entry.js +1 -0
  516. package/dist/vega/{p-66647244.js → p-4ea477d5.js} +1 -1
  517. package/dist/vega/{p-5147c30d.entry.js → p-50e8e24f.entry.js} +1 -1
  518. package/dist/vega/{p-9c5289dc.entry.js → p-522a6eec.entry.js} +1 -1
  519. package/dist/vega/p-53e3f259.js +1 -0
  520. package/dist/vega/{p-2c737fc8.js → p-5536146c.js} +1 -1
  521. package/dist/vega/{p-944e284d.entry.js → p-55c2c0df.entry.js} +1 -1
  522. package/dist/vega/p-587130f6.entry.js +1 -0
  523. package/dist/vega/{p-9c9b0629.js → p-58c8a4ac.js} +1 -1
  524. package/dist/vega/{p-4f6aaac5.entry.js → p-594cb986.entry.js} +1 -1
  525. package/dist/vega/{p-b12de1bf.entry.js → p-5c17ddda.entry.js} +1 -1
  526. package/dist/vega/{p-7977352b.entry.js → p-5c9c0c0d.entry.js} +1 -1
  527. package/dist/vega/p-5f377954.js +1 -1
  528. package/dist/vega/p-60010f14.entry.js +1 -0
  529. package/dist/vega/p-6098c4bb.js +1 -0
  530. package/dist/vega/{p-2044eba9.js → p-60a74fb7.js} +1 -1
  531. package/dist/vega/p-61e63c0e.entry.js +1 -0
  532. package/dist/vega/{p-49d7cfed.entry.js → p-62254dc7.entry.js} +1 -1
  533. package/dist/vega/{p-2af1d8b8.entry.js → p-62ae9327.entry.js} +1 -1
  534. package/dist/vega/{p-b3c4943b.js → p-638b6a7d.js} +1 -1
  535. package/dist/vega/p-66245bc0.entry.js +1 -0
  536. package/dist/vega/{p-bdb5180c.js → p-68744e7e.js} +1 -1
  537. package/dist/vega/{p-f0a0fc77.entry.js → p-68ca8d3c.entry.js} +1 -1
  538. package/dist/vega/p-6a6c1279.js +1 -0
  539. package/dist/vega/{p-5e9e04f3.entry.js → p-6ae93679.entry.js} +1 -1
  540. package/dist/vega/{p-433b1395.entry.js → p-6d90d28d.entry.js} +1 -1
  541. package/dist/vega/p-6e9e7131.js +1 -0
  542. package/dist/vega/{p-014cd411.js → p-6eedbc4f.js} +1 -1
  543. package/dist/vega/{p-c348eaf5.js → p-6fae6768.js} +1 -1
  544. package/dist/vega/p-71813a9e.entry.js +1 -0
  545. package/dist/vega/{p-860e76f5.entry.js → p-729529d6.entry.js} +1 -1
  546. package/dist/vega/{p-aa433430.entry.js → p-75bfbffe.entry.js} +1 -1
  547. package/dist/vega/{p-d6023dc0.entry.js → p-764b4e51.entry.js} +1 -1
  548. package/dist/vega/p-77bcdd35.js +1 -0
  549. package/dist/vega/{p-c41a2d4a.js → p-7d3419c7.js} +1 -1
  550. package/dist/vega/p-8387896e.js +1 -0
  551. package/dist/vega/p-853a05eb.js +1 -0
  552. package/dist/vega/{p-db11134b.entry.js → p-8e8b5790.entry.js} +1 -1
  553. package/dist/vega/{p-444e24c6.js → p-8ebe30a8.js} +1 -1
  554. package/dist/vega/p-8f00dfe6.js +1 -0
  555. package/dist/vega/{p-4022412e.entry.js → p-9236b8d9.entry.js} +1 -1
  556. package/dist/vega/p-9402f32f.js +1 -0
  557. package/dist/vega/{p-691bdc20.js → p-941a83db.js} +1 -1
  558. package/dist/vega/{p-840444c9.entry.js → p-942f9ea6.entry.js} +1 -1
  559. package/dist/vega/{p-5110c84f.js → p-96c090c4.js} +1 -1
  560. package/dist/vega/{p-328ebbdb.entry.js → p-9fdf66a8.entry.js} +1 -1
  561. package/dist/vega/{p-867cc602.entry.js → p-a2c45173.entry.js} +1 -1
  562. package/dist/vega/{p-66fe8b4e.entry.js → p-a54ed341.entry.js} +1 -1
  563. package/dist/vega/{p-44999c88.entry.js → p-a6a89f09.entry.js} +1 -1
  564. package/dist/vega/{p-ccbed811.entry.js → p-a8a246e8.entry.js} +1 -1
  565. package/dist/vega/p-a93b3aed.js +1 -0
  566. package/dist/vega/{p-528748fa.js → p-aa135628.js} +1 -1
  567. package/dist/vega/{p-a1f220ca.js → p-ab9d53e9.js} +1 -1
  568. package/dist/vega/{p-e18c0656.entry.js → p-af0cfea0.entry.js} +1 -1
  569. package/dist/vega/p-af0e9bd5.entry.js +1 -0
  570. package/dist/vega/{p-daba4af1.js → p-b1557bbe.js} +1 -1
  571. package/dist/vega/{p-f13b39d8.js → p-b2a4314a.js} +1 -1
  572. package/dist/vega/p-b94f164a.entry.js +1 -0
  573. package/dist/vega/{p-23c1f378.entry.js → p-b97ed9f7.entry.js} +1 -1
  574. package/dist/vega/{p-1a37d63c.entry.js → p-bbfffe6b.entry.js} +1 -1
  575. package/dist/vega/{p-aa914dbd.entry.js → p-beccc38c.entry.js} +1 -1
  576. package/dist/vega/{p-dd0bd78b.js → p-c34f4cbc.js} +1 -1
  577. package/dist/vega/p-c51de680.js +3 -0
  578. package/dist/vega/{p-e1c82ca9.js → p-c576e846.js} +1 -1
  579. package/dist/vega/p-c601eea6.js +1 -0
  580. package/dist/vega/{p-200c8914.entry.js → p-c6d2513c.entry.js} +1 -1
  581. package/dist/vega/{p-d62e618a.entry.js → p-ca6bd3a0.entry.js} +1 -1
  582. package/dist/vega/{p-ce82d6bb.entry.js → p-cab890be.entry.js} +1 -1
  583. package/dist/vega/p-cb1cd15f.entry.js +1 -0
  584. package/dist/vega/p-d1f47512.js +1 -0
  585. package/dist/vega/{p-66a785d0.entry.js → p-d37d2ea4.entry.js} +1 -1
  586. package/dist/vega/{p-2f89ee14.entry.js → p-d3e99d4a.entry.js} +1 -1
  587. package/dist/vega/{p-f9bfee81.entry.js → p-d6bd3ce4.entry.js} +1 -1
  588. package/dist/vega/{p-f2384411.entry.js → p-d7838f6e.entry.js} +1 -1
  589. package/dist/vega/{p-a4360b7e.entry.js → p-d8c9ea46.entry.js} +1 -1
  590. package/dist/vega/p-d9588b3f.entry.js +1 -0
  591. package/dist/vega/p-db69a5c9.entry.js +1 -0
  592. package/dist/vega/{p-50eda925.js → p-de1d0284.js} +1 -1
  593. package/dist/vega/{p-3c559c8b.js → p-de6fc52c.js} +1 -1
  594. package/dist/vega/{p-fa5cd8b1.js → p-e14323f3.js} +1 -1
  595. package/dist/vega/{p-bd7725f7.entry.js → p-e48b7a8a.entry.js} +1 -1
  596. package/dist/vega/p-e6f67a44.js +1 -0
  597. package/dist/vega/{p-7754b10f.entry.js → p-e8e3bf74.entry.js} +1 -1
  598. package/dist/vega/p-eadc10bc.entry.js +1 -0
  599. package/dist/vega/p-ee329596.entry.js +1 -0
  600. package/dist/vega/p-f01bc6a2.js +1 -0
  601. package/dist/vega/{p-94b54a95.js → p-f324e90e.js} +1 -1
  602. package/dist/vega/{p-f9a3805d.js → p-f48519d2.js} +1 -1
  603. package/dist/vega/{p-52878ea9.js → p-f485448a.js} +1 -1
  604. package/dist/vega/{p-4afd6715.entry.js → p-f8b2dbb9.entry.js} +1 -1
  605. package/dist/vega/{p-35d37477.entry.js → p-f8d13d01.entry.js} +1 -1
  606. package/dist/vega/{p-4370b954.entry.js → p-f902305d.entry.js} +1 -1
  607. package/dist/vega/{p-3c152bad.entry.js → p-f99f054c.entry.js} +1 -1
  608. package/dist/vega/{p-77fb3971.entry.js → p-fe41e3b6.entry.js} +1 -1
  609. package/dist/vega/vega.esm.js +1 -1
  610. package/package.json +1 -1
  611. package/dist/collection/components/vega-dropdown/slimmers/controllers/vega-dropdown-keyboard-conttroller.js +0 -85
  612. package/dist/vega/p-0b2c4c0b.js +0 -1
  613. package/dist/vega/p-1fa22fda.js +0 -1
  614. package/dist/vega/p-2529820e.js +0 -1
  615. package/dist/vega/p-35628af4.js +0 -1
  616. package/dist/vega/p-3a230d4b.entry.js +0 -1
  617. package/dist/vega/p-3a620268.js +0 -1
  618. package/dist/vega/p-4473d8b1.js +0 -3
  619. package/dist/vega/p-4a2fe3a4.js +0 -1
  620. package/dist/vega/p-5447a8e8.js +0 -1
  621. package/dist/vega/p-5af312f8.js +0 -1
  622. package/dist/vega/p-5b3c8a56.js +0 -1
  623. package/dist/vega/p-6493f13a.entry.js +0 -1
  624. package/dist/vega/p-66728dd4.entry.js +0 -1
  625. package/dist/vega/p-67e88cd7.entry.js +0 -1
  626. package/dist/vega/p-67eaf77e.js +0 -1
  627. package/dist/vega/p-6d6b4495.entry.js +0 -1
  628. package/dist/vega/p-7b133734.entry.js +0 -1
  629. package/dist/vega/p-7b84a943.entry.js +0 -1
  630. package/dist/vega/p-83ad8988.js +0 -1
  631. package/dist/vega/p-8c30a60d.js +0 -1
  632. package/dist/vega/p-8d2a9012.js +0 -1
  633. package/dist/vega/p-8d4be607.js +0 -1
  634. package/dist/vega/p-8d77c7cf.js +0 -1
  635. package/dist/vega/p-8f3b93db.js +0 -1
  636. package/dist/vega/p-9c2b3279.js +0 -1
  637. package/dist/vega/p-9c9ff871.entry.js +0 -1
  638. package/dist/vega/p-9d90e271.entry.js +0 -1
  639. package/dist/vega/p-a7517760.entry.js +0 -1
  640. package/dist/vega/p-c8fb3aac.entry.js +0 -1
  641. package/dist/vega/p-cede3535.js +0 -1
  642. package/dist/vega/p-cf4b3d40.entry.js +0 -1
  643. package/dist/vega/p-d35a31a5.entry.js +0 -1
  644. package/dist/vega/p-ded1ecc1.entry.js +0 -1
  645. package/dist/vega/p-e1a65e06.entry.js +0 -1
  646. package/dist/vega/p-e469ba27.entry.js +0 -1
  647. package/dist/vega/p-e4c5cb4f.js +0 -1
  648. package/dist/vega/p-fd23c365.entry.js +0 -1
  649. /package/dist/types/components/vega-dropdown/slimmers/controllers/{vega-dropdown-keyboard-conttroller.d.ts → vega-dropdown-keyboard-controller.d.ts} +0 -0
@@ -1,32 +1,32 @@
1
1
  import { g as generateUUID } from './misc-9fdbcfbb.js';
2
- import { a as arrayToClassString, g as getDeviceType, D as DeviceType, f as findParent, r as rgbToHex } from './ui-d73f756a.js';
2
+ import { a as arrayToClassString, g as getDeviceType, D as DeviceType, f as findParent, r as rgbToHex, b as getDeepActiveElementInShadow } from './ui-80e610f4.js';
3
3
  import { L as LogUtility, I as InjectVegaSlimmer } from './global-slimmer-registry-17c4efd4.js';
4
4
  import { I as InjectVegaTelemetrySlimmer, c as createPublicAPIRuntimeMetricsSlimmer } from './create-public-api-runtime-metrics-slimmer-48f85199.js';
5
5
  import { I as InternalVegaZIndexManager } from './internal-vega-z-index-manager-7d2b54c3.js';
6
6
  import { c as createDynamicSlimmer } from './dynamic-slimmer-90b8af32.js';
7
7
  import { P as PageResizeObserverSlimmer } from './page-resize-observer-slimmer-e24d36c5.js';
8
- import { i as internalVegaEventManager } from './internal-vega-event-manager-2ecc9186.js';
9
- import { V as VegaInternalTranslation } from './internal-translation-controller-b33430c6.js';
10
- import { I as InternalCalendarPeriodConverter } from './internal-calendar-period-factory-d58f35c6.js';
11
- import { M as ModifyContentAction, A as ActionHandleStrategyRegistry, R as RTETextNode, H as HTML_VOID_TAGS, a as RTEBlock, b as RTETextBlock, c as RTE_BLOCK_BOUNDARY_ATTRIBUTE, d as RTEAnnotationStyle, e as ActionHandleStrategy, I as InsertChildrenAfterAction, f as AppendChildrenAction, g as RTENode, s as stateEntityRenderingRegistry, h as InsertChildrenBeforeAction, i as InternalAnnotationTypeEnum, j as ModifyContentActionType, B as BlockAnnotation, k as AnnotationAction, l as RemoveChildrenAction, C as CommonAnnotationTypeEnum, m as CustomAttributeAnnotation, n as RTEDTOClassManager, o as RTEFilterStylesStrategy, p as RTEDecoratorNode, S as SplitBlockWithNodeAction, U as UpdateTextAction, q as RTECodeBlock, r as RTEListItemBlock, t as RTECodeBlockNode, N as NodeAnnotationTypeEnum, u as CustomStyleAnnotation, v as RTEFilterStylesStrategyRegistry, w as RTE_PASTE_MODE_DATA_TYPE } from './code-block-e6443949.js';
12
- import { U as UpdateCursorPositionAction, V as VegaRTEContent, B as BlockToRTEBlockStrategyAbstract, E as ElementToDTOStrategy, h as htmlElementToAnnotationGenerator, H as HtmlBlockStrategy, I as InsertNewParagraphAction, R as RTEImageBlock, a as InsertChildrenBeforeStrategy, P as PasteContentStrategy, A as AnnotationGeneratorStrategyAbstract, S as StylePreservator, b as RTEImageNode } from './content-state-43cdacff.js';
13
- import { i as isNonNullable } from './type-guard-6fc96870.js';
14
- import { e as extensionContextManager, a as VegaRTEExtensionRenderer, b as VegaRTEExtension } from './link-extension-230bae8d.js';
8
+ import { i as internalVegaEventManager } from './internal-vega-event-manager-0c381f3b.js';
9
+ import { V as VegaInternalTranslation } from './internal-translation-controller-fff376d2.js';
10
+ import { I as InternalCalendarPeriodConverter } from './internal-calendar-period-factory-d1a60f81.js';
11
+ import { M as ModifyContentAction, A as ActionHandleStrategyRegistry, R as RTETextNode, H as HTML_VOID_TAGS, a as RTEBlock, b as RTETextBlock, c as RTE_BLOCK_BOUNDARY_ATTRIBUTE, d as RTEAnnotationStyle, e as ActionHandleStrategy, I as InsertChildrenAfterAction, f as AppendChildrenAction, g as RTENode, s as stateEntityRenderingRegistry, h as InsertChildrenBeforeAction, i as InternalAnnotationTypeEnum, j as ModifyContentActionType, B as BlockAnnotation, k as AnnotationAction, l as RemoveChildrenAction, C as CommonAnnotationTypeEnum, m as CustomAttributeAnnotation, n as RTEDTOClassManager, o as RTEFilterStylesStrategy, p as RTEDecoratorNode, S as SplitBlockWithNodeAction, U as UpdateTextAction, q as RTECodeBlock, r as RTEListItemBlock, t as RTECodeBlockNode, N as NodeAnnotationTypeEnum, u as CustomStyleAnnotation, v as RTEFilterStylesStrategyRegistry, w as RTE_PASTE_MODE_DATA_TYPE, x as RTE_WORD_COUNT_KEY } from './code-block-1cdf7a51.js';
12
+ import { U as UpdateCursorPositionAction, V as VegaRTEContent, B as BlockToRTEBlockStrategyAbstract, E as ElementToDTOStrategy, h as htmlElementToAnnotationGenerator, H as HtmlBlockStrategy, I as InsertNewParagraphAction, R as RTEImageBlock, a as InsertChildrenBeforeStrategy, P as PasteContentStrategy, A as AnnotationGeneratorStrategyAbstract, S as StylePreservator, b as RTEImageNode, C as COMMIT_VALUE } from './content-state-6eb610b8.js';
13
+ import { i as isNonNullable } from './type-guard-26d83e7e.js';
14
+ import { e as extensionContextManager, a as VegaRTEExtensionRenderer, b as VegaRTEExtension } from './link-extension-bc234cf7.js';
15
15
  import { V as VegaInternalIconManager } from './internal-icon-manager-e7c57096.js';
16
16
  import { v as vegaNonceManager } from './vega-nonce-manager-497e5eb5.js';
17
- import { D as DomNodeSubjectObserverFactory, d as domNodeSubjectFactory } from './dom-node-subject-observer-factory-ddff8662.js';
18
- import { V as VegaDropdownClick, a as VegaClick, b as VegaPopoverHide, c as VegaPopoverShow, d as VegaChange } from './vega-event-id-f55f6977.js';
19
- import { R as RTETableExtensionAnnotationTypeEnum, a as RTE_TABLE_HEAD_DEFAULT_BACKGROUND_COLOR, S as SettingEventHandler, T as TableSettingType, b as RTETableAnnotation, c as RTETableCellAnnotation, d as RTETableHeadCellBlock, e as RowOperationEventHandler, C as ColumnOperationEventHandler, M as MergeCellsOperationEventHandler, f as SplitCellOperationEventHandler, g as RTETableColorManager, h as RTETableBlock, i as generateTableBody, j as RTETableCellBlock, k as RTETableHeadBlock, l as RTETableBodyBlock, m as getParentBlockByType, n as RTETableHeadCellAnnotation, o as TableColumnStrategy, p as getAllTableRows, q as buildTableGrid, s as setSpanAttributes, r as findCellBlockById, t as getDefaultCellBlockTemplate, I as InsertTableColumnDirection, u as buildCellStartColumnMap, v as getTableColumnCount, w as getFirstNode, x as getCellSpan, y as createNewCell, z as MergeCellsOperationType, A as RTETableRowBlock, B as getActualColumnPosition, D as InsertTableRowDirection, E as RTE_TABLE_DEFAULT_COLORS, F as INSERT_TABLE_ROW_INTO_DIFFERENT_SECTION, G as INSERT_TABLE_ROW_INTO_SAME_SECTION, H as DELETE_TABLE_ROW, J as TOGGLE_HEADER_ROW, K as INSERT_TABLE_COLUMN, L as DELETE_TABLE_COLUMN, N as TOGGLE_HEADER_TABLE_COLUMN, O as ToggleHeaderTableColumnStrategy, P as SPLIT_TABLE_CELL, Q as REPLACE_TABLE_CELL, U as SPLIT_CELL_HORIZONTALLY, W as SPLIT_CELL_VERTICALLY, X as SELECT_TABLE_COLUMN, Y as MERGE_CELLS } from './split-cell-operation-89b91a38.js';
17
+ import { D as DomNodeSubjectObserverFactory, d as domNodeSubjectFactory } from './dom-node-subject-observer-factory-bb7e68a0.js';
18
+ import { V as VegaDropdownClick, a as VegaClick, b as VegaPopoverHide, c as VegaPopoverShow, d as VegaChange } from './vega-event-id-59cd9297.js';
19
+ import { R as RTETableExtensionAnnotationTypeEnum, a as RTE_TABLE_HEAD_DEFAULT_BACKGROUND_COLOR, S as SettingEventHandler, T as TableSettingType, b as RTETableAnnotation, c as RTETableCellAnnotation, d as RTETableHeadCellBlock, e as RowOperationEventHandler, C as ColumnOperationEventHandler, M as MergeCellsOperationEventHandler, f as SplitCellOperationEventHandler, g as RTETableColorManager, h as RTETableBlock, i as generateTableBody, j as RTETableCellBlock, k as RTETableHeadBlock, l as RTETableBodyBlock, m as getParentBlockByType, n as RTETableHeadCellAnnotation, o as TableColumnStrategy, p as getAllTableRows, q as buildTableGrid, s as setSpanAttributes, r as findCellBlockById, t as getDefaultCellBlockTemplate, I as InsertTableColumnDirection, u as buildCellStartColumnMap, v as getTableColumnCount, w as getFirstNode, x as getCellSpan, y as createNewCell, z as MergeCellsOperationType, A as RTETableRowBlock, B as getActualColumnPosition, D as InsertTableRowDirection, E as RTE_TABLE_DEFAULT_COLORS, F as INSERT_TABLE_ROW_INTO_DIFFERENT_SECTION, G as INSERT_TABLE_ROW_INTO_SAME_SECTION, H as DELETE_TABLE_ROW, J as TOGGLE_HEADER_ROW, K as INSERT_TABLE_COLUMN, L as DELETE_TABLE_COLUMN, N as TOGGLE_HEADER_TABLE_COLUMN, O as ToggleHeaderTableColumnStrategy, P as SPLIT_TABLE_CELL, Q as REPLACE_TABLE_CELL, U as SPLIT_CELL_HORIZONTALLY, W as SPLIT_CELL_VERTICALLY, X as SELECT_TABLE_COLUMN, Y as MERGE_CELLS } from './split-cell-operation-1a889fa0.js';
20
20
  import { C as ChangeManager } from './change-manager-6a7eb88c.js';
21
- import { V as VegaInternalRTEExtensionTableCellsSelectionAnchor, a as VegaInternalPopoverUpdateTarget, b as VegaInternalRTEExtensionTableCellSelectionChange } from './vega-internal-event-id-86fce049.js';
21
+ import { V as VegaInternalRTEExtensionTableCellsSelectionAnchor, a as VegaInternalPopoverUpdateTarget, b as VegaInternalRTEExtensionTableCellSelectionChange } from './vega-internal-event-id-02093067.js';
22
22
  import { r as remoteInvocationRegistry } from './remote-invocation-registry-d69245c2.js';
23
- import { V as VegaInternalThemeManager, a as VegaDarkModeStyleController } from './dark-mode-style-controller-352f15ff.js';
23
+ import { V as VegaInternalThemeManager, a as VegaDarkModeStyleController } from './dark-mode-style-controller-4e04a2d3.js';
24
24
  import { t as tryGetDocument } from './try-get-document-bef0f526.js';
25
25
  import { p as parseToPixelString } from './pixel-f32c07ce.js';
26
26
  import { c as cleanObject } from './object-0c277f57.js';
27
27
  import { d as debounce } from './timer-9321173b.js';
28
28
  import { c as camelToDashCase } from './string-a953eafc.js';
29
- import { R as ReplaceSelectedTextAction } from './image-extension-9b8abd0d.js';
29
+ import { R as ReplaceSelectedTextAction } from './image-extension-f6dbd70c.js';
30
30
  import { c as copy } from './copy-54e45e2d.js';
31
31
 
32
32
  const VegaLoaderRuntimeMetricsPayloadDefinition = [
@@ -1115,7 +1115,7 @@ class VegaRTEToolbarButtonRenderer {
1115
1115
  * @returns {VegaRTERenderResult} - The render result for the dropdown.
1116
1116
  */
1117
1117
  renderDropdown(h, editorContext, dropdownProps, children) {
1118
- return h('vega-dropdown', Object.assign({ trigger: 'click', searchable: false, maxWidth: '200', itemDisplayRule: 'ellipsis', isScreenPosition: true,
1118
+ return h('vega-dropdown', Object.assign({ trigger: 'click', searchable: false, maxWidth: '200', itemDisplayRule: 'ellipsis', isScreenPosition: true, role: 'presentation',
1119
1119
  // eslint-disable-next-line jsdoc/require-jsdoc
1120
1120
  ref: (el) => {
1121
1121
  this.dropdownEl = el;
@@ -1199,29 +1199,31 @@ class VegaRTEToolbarButtonRenderer {
1199
1199
  * @returns {VegaRTERenderResult} - The render result for the button.
1200
1200
  */
1201
1201
  renderButton(h, editorContext, buttonProps) {
1202
- const { icon, label, showArrowIcon, tooltip } = buttonProps;
1202
+ const { icon, label, showArrowIcon, tooltip, ariaLabel } = buttonProps;
1203
1203
  const isDisabled = this.isDisabled(editorContext);
1204
1204
  const button = h('vega-rich-text-editor-toolbar-button', {
1205
- disabled: isDisabled,
1206
- icon: icon,
1207
- hidden: this.isHidden(editorContext),
1208
- selected: this.isSelected(editorContext),
1205
+ 'disabled': isDisabled,
1206
+ 'icon': icon,
1207
+ 'data-aria-label': ariaLabel !== null && ariaLabel !== void 0 ? ariaLabel : label,
1208
+ 'hidden': this.isHidden(editorContext),
1209
+ 'selected': this.isSelected(editorContext),
1209
1210
  // eslint-disable-next-line jsdoc/require-jsdoc
1210
- ref: (el) => {
1211
+ 'ref': (el) => {
1211
1212
  this.buttonEl = el;
1212
1213
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(el, VegaClick, () => this.handleButtonClick(editorContext));
1213
1214
  },
1214
- onMouseDown: this.preventDefault,
1215
+ 'onMouseDown': this.preventDefault,
1215
1216
  // eslint-disable-next-line jsdoc/require-jsdoc
1216
- onKeyDown: (e) => this.handleButtonKeyDown(e),
1217
+ 'onKeyDown': (e) => this.handleButtonKeyDown(e),
1217
1218
  }, [
1218
1219
  this.renderButtonLabel(h, editorContext, label),
1219
1220
  showArrowIcon
1220
1221
  ? h('vega-icon', {
1221
- size: 'size-8',
1222
- color: isDisabled ? 'text-disabled' : 'text-secondary',
1223
- style: { marginLeft: '8px' },
1224
- icon: VegaInternalIconManager.getIconKey('chevron-down'),
1222
+ 'size': 'size-8',
1223
+ 'color': isDisabled ? 'text-disabled' : 'text-secondary',
1224
+ 'style': { marginLeft: '8px' },
1225
+ 'aria-hidden': 'true',
1226
+ 'icon': VegaInternalIconManager.getIconKey('chevron-down'),
1225
1227
  })
1226
1228
  : null,
1227
1229
  ].filter(isNonNullable));
@@ -1242,8 +1244,9 @@ class VegaRTEToolbarButtonRenderer {
1242
1244
  if (label) {
1243
1245
  const isDisabled = this.isDisabled(editorContext);
1244
1246
  return h('vega-font', {
1245
- variant: 'font-field-label-sm',
1246
- color: isDisabled ? 'text-disabled' : 'text-primary',
1247
+ 'variant': 'font-field-label-sm',
1248
+ 'color': isDisabled ? 'text-disabled' : 'text-primary',
1249
+ 'aria-hidden': 'true',
1247
1250
  }, editorContext.translation.t(label));
1248
1251
  }
1249
1252
  return null;
@@ -1275,6 +1278,15 @@ class VegaRTEToolbarButtonRenderer {
1275
1278
  preventDefault(e) {
1276
1279
  e.preventDefault();
1277
1280
  }
1281
+ /**
1282
+ * Moves focus to the toolbar button. Targets the inner focusable `<button>`
1283
+ * inside the button's shadow root, falling back to the host element.
1284
+ */
1285
+ focusToolbarButton() {
1286
+ var _a, _b, _c, _d;
1287
+ const innerButton = (_c = (_b = (_a = this.buttonEl) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('button')) !== null && _c !== void 0 ? _c : null;
1288
+ (_d = (innerButton !== null && innerButton !== void 0 ? innerButton : this.buttonEl)) === null || _d === void 0 ? void 0 : _d.focus();
1289
+ }
1278
1290
  /**
1279
1291
  * Recursively searches for a dropdown list item by its key.
1280
1292
  *
@@ -1328,14 +1340,14 @@ class VegaRTEToolbarButtonRenderer {
1328
1340
  * @param {KeyboardEvent} e The keyboard event.
1329
1341
  */
1330
1342
  handleItemsKeyDown(e) {
1331
- var _a, _b, _c;
1343
+ var _a, _b;
1332
1344
  if (e.code === 'Escape') {
1333
1345
  e.preventDefault();
1334
1346
  e.stopPropagation();
1335
1347
  if (this.dropdownEl) {
1336
1348
  void this.dropdownEl.hide();
1337
1349
  }
1338
- (_a = this.buttonEl) === null || _a === void 0 ? void 0 : _a.focus();
1350
+ this.focusToolbarButton();
1339
1351
  return;
1340
1352
  }
1341
1353
  if (e.code !== 'ArrowDown' && e.code !== 'ArrowUp') {
@@ -1353,7 +1365,7 @@ class VegaRTEToolbarButtonRenderer {
1353
1365
  for (let offset = 0; offset < items.length; offset++) {
1354
1366
  const index = (startIndex + offset * direction + items.length) % items.length;
1355
1367
  if (!items[index].disabled) {
1356
- (_c = (_b = items[index].shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelector('li')) === null || _c === void 0 ? void 0 : _c.focus();
1368
+ (_b = (_a = items[index].shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('li')) === null || _b === void 0 ? void 0 : _b.focus();
1357
1369
  return;
1358
1370
  }
1359
1371
  }
@@ -1423,6 +1435,7 @@ class RTETokenToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
1423
1435
  return this.renderDropdown(createElement, editorContext, {}, [
1424
1436
  this.renderButton(createElement, editorContext, {
1425
1437
  label: 'Tokens',
1438
+ ariaLabel: 'Tokens',
1426
1439
  showArrowIcon: true,
1427
1440
  tooltip: { text: 'Insert token' },
1428
1441
  }),
@@ -1706,6 +1719,7 @@ class RTELanguageToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
1706
1719
  return this.renderDropdown(createElement, editorContext, { source: translatedSource }, [
1707
1720
  this.renderButton(createElement, editorContext, {
1708
1721
  label: this.getLanguageLabelByKey(this.selectedLanguage),
1722
+ ariaLabel: 'Language',
1709
1723
  showArrowIcon: true,
1710
1724
  tooltip: { text: 'Select language' },
1711
1725
  }),
@@ -1721,10 +1735,11 @@ class RTELanguageToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
1721
1735
  this.translation = editorContext.translation;
1722
1736
  const isDisabled = this.isDisabled(editorContext);
1723
1737
  return h('vega-font', {
1724
- variant: 'font-field-label-sm',
1725
- color: isDisabled ? 'text-disabled' : 'text-primary',
1738
+ 'variant': 'font-field-label-sm',
1739
+ 'color': isDisabled ? 'text-disabled' : 'text-primary',
1740
+ 'aria-hidden': 'true',
1726
1741
  // eslint-disable-next-line jsdoc/require-jsdoc
1727
- ref: (el) => {
1742
+ 'ref': (el) => {
1728
1743
  this.labelRef = el;
1729
1744
  },
1730
1745
  }, editorContext.translation.t(label));
@@ -2195,6 +2210,12 @@ class RTELogicControlNode extends RTENode {
2195
2210
  isContentEditable() {
2196
2211
  return false;
2197
2212
  }
2213
+ /**
2214
+ * @inheritDoc
2215
+ */
2216
+ getPlainText() {
2217
+ return this.text;
2218
+ }
2198
2219
  }
2199
2220
  RTELogicControlNode.dtoName = 'RTELogicControlNode';
2200
2221
 
@@ -2283,6 +2304,7 @@ class FunctionToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
2283
2304
  return this.renderDropdown(h, editorContext, {}, [
2284
2305
  this.renderButton(h, editorContext, {
2285
2306
  label: 'Functions',
2307
+ ariaLabel: 'Functions',
2286
2308
  showArrowIcon: true,
2287
2309
  tooltip: { text: 'Insert function' },
2288
2310
  }),
@@ -2809,7 +2831,7 @@ class VegaRTEFunctionExtension extends VegaRTEExtension {
2809
2831
  })();
2810
2832
  VegaRTEFunctionExtension.TOOLBAR_BUTTON_KEY = 'functions';
2811
2833
 
2812
- const tableBlockStylesCss = ".v-rte--extension-table-container{display:table}table.v-rte--extension-table{border-collapse:collapse}table.v-rte--extension-table th,table.v-rte--extension-table td{border:1px solid #ddd;padding:12px;text-align:left;vertical-align:middle;min-width:55px;box-sizing:border-box;position:relative}table.v-rte--extension-table th{background-color:#f2f2f2}.rte-table-setting-popover,.rte-table-dynamic-popover{display:block}table.v-rte--extension-table .v-rte-table-cell-focused::after,table.v-rte--extension-table .v-rte-table-cell-selected::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background-color:rgba(158, 207, 250, 0.3)}table.v-rte--extension-table:has(.v-rte-table-cell-selected){caret-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::selection{background-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::-moz-selection{background-color:transparent}.v-rte--extension-table-caption{padding:8px;border:1px solid #ddd;border-bottom:none;background-color:rgba(var(--v-bg-table-header, 240, 243, 247, 1));position:relative;display:table-caption;caption-side:top;min-height:22px;text-align:center;word-break:break-word;overflow-wrap:break-word}.v-rte--extension-table-caption.showPlaceholder::before{position:absolute;left:0;right:0;content:attr(data-placeholder);font-family:'Inter', sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0;color:rgba(var(--v-text-input-placeholder, 176, 180, 181, 1));text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}";
2834
+ const tableBlockStylesCss = ".v-rte--extension-table-container{display:table}table.v-rte--extension-table{border-collapse:collapse}table.v-rte--extension-table th,table.v-rte--extension-table td{border:1px solid #ddd;padding:12px;text-align:left;vertical-align:middle;min-width:55px;box-sizing:border-box;position:relative}table.v-rte--extension-table th:focus,table.v-rte--extension-table td:focus{outline:none}table.v-rte--extension-table th{background-color:#f2f2f2}.rte-table-setting-popover,.rte-table-dynamic-popover{display:block}table.v-rte--extension-table .v-rte-table-cell-focused::after,table.v-rte--extension-table .v-rte-table-cell-selected::after{content:'';position:absolute;top:0;left:0;right:0;bottom:0;pointer-events:none;background-color:rgba(158, 207, 250, 0.3)}table.v-rte--extension-table:has(.v-rte-table-cell-selected){caret-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::selection{background-color:transparent}table.v-rte--extension-table:has(.v-rte-table-cell-selected) ::-moz-selection{background-color:transparent}.v-rte--extension-table-caption{padding:8px;border:1px solid #ddd;border-bottom:none;background-color:rgba(var(--v-bg-table-header, 240, 243, 247, 1));position:relative;display:table-caption;caption-side:top;min-height:22px;text-align:center;word-break:break-word;overflow-wrap:break-word}.v-rte--extension-table-caption.showPlaceholder::before{position:absolute;left:0;right:0;content:attr(data-placeholder);font-family:'Inter', sans-serif;font-size:16px;font-weight:400;line-height:24px;letter-spacing:0;color:rgba(var(--v-text-input-placeholder, 176, 180, 181, 1));text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}";
2813
2835
 
2814
2836
  const DELETE_TABLE_BLOCK = 'DELETE_TABLE_BLOCK';
2815
2837
  /**
@@ -3427,9 +3449,42 @@ class CellPropertiesCancelEventHandler extends CellPropertiesEventHandler {
3427
3449
 
3428
3450
  /**
3429
3451
  * Base renderer for table-related popovers, providing common functionalities such as accessing the table extension context.
3452
+ *
3453
+ * Popovers that move keyboard/VoiceOver focus into themselves (the setting toolbar and the
3454
+ * properties dialog) share the same focus-restoration machinery: they make the editor content
3455
+ * `inert` while open, track Escape presses at the document level, and return focus (and the caret)
3456
+ * to the originating cell when an Escape dismisses the popover. That behavior lives here so the two
3457
+ * renderers do not each carry a copy; subclasses only supply the two pieces that differ — how to
3458
+ * resolve the editor content root ({@link getInertContentTarget}) and how to tell whether an event
3459
+ * originated inside their own popover subtree ({@link isEventWithinPopover}).
3430
3460
  */
3431
3461
  class TablePopoverBaseRenderer {
3432
3462
  constructor(renderContext) {
3463
+ /** The editor content element made inert while the popover holds focus, cached so it can be restored. */
3464
+ this.inertedContentEl = null;
3465
+ /** The table cell to return focus to when the popover is dismissed via Escape. */
3466
+ this.returnFocusCell = null;
3467
+ /** Tracks whether Escape was pressed while the popover was open. */
3468
+ this.escapePressed = false;
3469
+ /** Document the Escape tracker keydown listener is bound to, for later removal. */
3470
+ this.keydownListenerDocument = null;
3471
+ /**
3472
+ * Tracks Escape key presses that originate inside the popover so focus can be returned to the
3473
+ * originating cell when that Escape dismisses the popover. vega-popover's own Escape handler hides
3474
+ * the popover without restoring focus, so the restore is coordinated here.
3475
+ *
3476
+ * The listener is bound at the document level (the popover renders in a portal, so its Escape does
3477
+ * not bubble back to the table), so scope it to the popover subtree via {@link isEventWithinPopover}:
3478
+ * a stray Escape elsewhere must not arm the restore and hijack focus on a later non-Escape dismissal
3479
+ * (e.g. click-outside).
3480
+ *
3481
+ * @param {KeyboardEvent} event - The keydown event.
3482
+ */
3483
+ this.handleDocumentKeydown = (event) => {
3484
+ if (event.code === 'Escape' && this.isEventWithinPopover(event)) {
3485
+ this.escapePressed = true;
3486
+ }
3487
+ };
3433
3488
  this.renderContext = renderContext;
3434
3489
  }
3435
3490
  /**
@@ -3442,6 +3497,121 @@ class TablePopoverBaseRenderer {
3442
3497
  ? extensionContextManager.getExtensionContext(this.renderContext.host)
3443
3498
  : null;
3444
3499
  }
3500
+ /**
3501
+ * Begins tracking so a later Escape can return focus to `returnCell`. Records the cell and clears
3502
+ * any stale Escape observed before the popover was opened.
3503
+ *
3504
+ * @param {Nullable<HTMLElement>} returnCell - The cell to return focus to if the popover is dismissed with Escape.
3505
+ */
3506
+ beginReturnFocusTracking(returnCell) {
3507
+ this.returnFocusCell = returnCell !== null && returnCell !== void 0 ? returnCell : null;
3508
+ this.escapePressed = false;
3509
+ }
3510
+ /**
3511
+ * Registers the document-level (capture phase) Escape tracker. The popover renders in a portal, so
3512
+ * its Escape does not bubble back to the table; observing on the document lets us know when to
3513
+ * return focus to the cell.
3514
+ *
3515
+ * @param {Document} doc - The document to bind the keydown listener to.
3516
+ */
3517
+ attachEscapeTracker(doc) {
3518
+ doc.addEventListener('keydown', this.handleDocumentKeydown, { capture: true });
3519
+ this.keydownListenerDocument = doc;
3520
+ }
3521
+ /**
3522
+ * Removes the document-level Escape tracker if one was registered.
3523
+ */
3524
+ detachEscapeTracker() {
3525
+ if (this.keydownListenerDocument) {
3526
+ this.keydownListenerDocument.removeEventListener('keydown', this.handleDocumentKeydown, {
3527
+ capture: true,
3528
+ });
3529
+ this.keydownListenerDocument = null;
3530
+ }
3531
+ }
3532
+ /**
3533
+ * Whether the given event originated inside this popover's subtree. Subclasses override this to
3534
+ * match their own portal-rendered content; the base returns `false` so renderers that do not move
3535
+ * focus never arm the restore.
3536
+ *
3537
+ * @param {Event} _event - The event to test.
3538
+ * @returns {boolean} `true` when the event originated inside the popover subtree.
3539
+ */
3540
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
3541
+ isEventWithinPopover(_event) {
3542
+ return false;
3543
+ }
3544
+ /**
3545
+ * When the popover hides after an Escape press, returns focus (and the caret) to the table cell
3546
+ * that had focus before the popover was opened.
3547
+ *
3548
+ * vegaPopoverHide fires synchronously from the popover's own Escape handler, before the
3549
+ * document-capture keydown observes the key and before the popover settles focus on `<body>`.
3550
+ * Defer past that so the flag is set and this focus restore wins.
3551
+ */
3552
+ restoreFocusOnEscapeHide() {
3553
+ // eslint-disable-next-line no-restricted-globals
3554
+ setTimeout(() => {
3555
+ const shouldRestore = this.escapePressed;
3556
+ const cell = this.returnFocusCell;
3557
+ this.escapePressed = false;
3558
+ this.returnFocusCell = null;
3559
+ if (shouldRestore && cell && cell.isConnected) {
3560
+ this.restoreFocusToCell(cell);
3561
+ }
3562
+ }, 0);
3563
+ }
3564
+ /**
3565
+ * Focuses the given table cell and collapses the caret at its start.
3566
+ *
3567
+ * @param {HTMLElement} cell - The table cell to focus.
3568
+ */
3569
+ restoreFocusToCell(cell) {
3570
+ var _a, _b, _c;
3571
+ cell.focus();
3572
+ const extensionContext = this.getTableExtensionContext();
3573
+ const selection = (_c = (_a = extensionContext === null || extensionContext === void 0 ? void 0 : extensionContext.getSelection()) !== null && _a !== void 0 ? _a : (_b = cell.ownerDocument) === null || _b === void 0 ? void 0 : _b.getSelection()) !== null && _c !== void 0 ? _c : null;
3574
+ if (selection) {
3575
+ const range = new Range();
3576
+ range.setStart(cell, 0);
3577
+ range.setEnd(cell, 0);
3578
+ selection.removeAllRanges();
3579
+ selection.addRange(range);
3580
+ }
3581
+ }
3582
+ /**
3583
+ * Resolves the `.rich-text-content` editor root to toggle `inert` on while the popover holds focus.
3584
+ * Subclasses override this because they reach the content from different anchors (the toolbar's
3585
+ * target vs. the current table ref); the base returns `null` so renderers that do not use inert are
3586
+ * unaffected.
3587
+ *
3588
+ * @returns {Nullable<HTMLElement>} The editor content element, or `null` when it cannot be resolved.
3589
+ */
3590
+ getInertContentTarget() {
3591
+ return null;
3592
+ }
3593
+ /**
3594
+ * Toggles `inert` on the editor content region while the popover holds keyboard/VoiceOver focus.
3595
+ * Safari VoiceOver keeps its reading cursor anchored to the cell caret and does not follow the
3596
+ * programmatic focus moved into the popover; making the editor content inert removes that text
3597
+ * context so the VoiceOver cursor lands inside the popover. The popover is a body-level portal, so it
3598
+ * is not a descendant of the inert content and stays interactive.
3599
+ *
3600
+ * @param {boolean} inert - Whether the editor content should be inert.
3601
+ */
3602
+ setEditorContentInert(inert) {
3603
+ if (inert) {
3604
+ const content = this.getInertContentTarget();
3605
+ if (content) {
3606
+ content.setAttribute('inert', '');
3607
+ this.inertedContentEl = content;
3608
+ }
3609
+ }
3610
+ else if (this.inertedContentEl) {
3611
+ this.inertedContentEl.removeAttribute('inert');
3612
+ this.inertedContentEl = null;
3613
+ }
3614
+ }
3445
3615
  }
3446
3616
 
3447
3617
  /**
@@ -3511,6 +3681,8 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3511
3681
  * and clears the internal reference.
3512
3682
  */
3513
3683
  destroy() {
3684
+ this.setEditorContentInert(false);
3685
+ this.detachEscapeTracker();
3514
3686
  if (this.selectionAnchorRef && this.selectionAnchorRef.parentNode) {
3515
3687
  DomNodeSubjectObserverFactory.removeUniqueObserverFromNode(this.selectionAnchorRef, VegaInternalRTEExtensionTableCellsSelectionAnchor);
3516
3688
  this.selectionAnchorRef.parentNode.removeChild(this.selectionAnchorRef);
@@ -3523,8 +3695,13 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3523
3695
  *
3524
3696
  * @param {string} type - The table setting type determining which
3525
3697
  * content variant to display (for example, table properties or cell properties).
3698
+ * @param {Nullable<HTMLElement>} returnCell - The cell to move focus into the dialog for and
3699
+ * return focus to if the dialog is dismissed with Escape (set for keyboard/screen-reader users).
3526
3700
  */
3527
- async show(type) {
3701
+ async show(type, returnCell) {
3702
+ // Remember the cell to return focus to if the dialog is dismissed with Escape, and clear any
3703
+ // stale Escape recorded before the dialog was opened.
3704
+ this.beginReturnFocusTracking(returnCell);
3528
3705
  let target = this.getTableRef();
3529
3706
  const extensionContext = this.getTableExtensionContext();
3530
3707
  let cells = [];
@@ -3544,6 +3721,11 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3544
3721
  this.storeCurrentFocusNode();
3545
3722
  remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), target);
3546
3723
  await this.popoverRef.show();
3724
+ // When opened for keyboard/screen-reader users (a return cell is known), move focus into the
3725
+ // dialog so it lands on the first focusable field (the Border Style control).
3726
+ if (returnCell) {
3727
+ this.focusFirstFormField(type);
3728
+ }
3547
3729
  }
3548
3730
  /**
3549
3731
  * hide the popover.
@@ -3578,7 +3760,11 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3578
3760
  if (this.popoverCloseType === 'change' && extensionContext) {
3579
3761
  extensionContext.flushValue(extensionContext.host.value);
3580
3762
  }
3763
+ this.handleDialogHide();
3581
3764
  });
3765
+ // Escape inside the dialog (rendered in a portal) does not bubble back to the table, so
3766
+ // observe it on the document (capture phase) to know when to return focus to the cell.
3767
+ this.attachEscapeTracker(safeDocument);
3582
3768
  const slotDiv = safeDocument.createElement('div');
3583
3769
  slotDiv.setAttribute('slot', 'popover');
3584
3770
  slotDiv.className = 'rte-table-dynamic-popover-content';
@@ -3605,6 +3791,28 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3605
3791
  return popover;
3606
3792
  }
3607
3793
  }
3794
+ /**
3795
+ * Whether the given event originated inside the properties dialog subtree (either the table or the
3796
+ * cell properties form).
3797
+ *
3798
+ * @param {Event} event - The event to test.
3799
+ * @returns {boolean} `true` when an active form is rendered and the event's composed path includes it.
3800
+ */
3801
+ isEventWithinPopover(event) {
3802
+ const path = event.composedPath();
3803
+ return ((!!this.tablePropertiesFormRef && path.includes(this.tablePropertiesFormRef)) ||
3804
+ (!!this.cellPropertiesFormRef && path.includes(this.cellPropertiesFormRef)));
3805
+ }
3806
+ /**
3807
+ * Resolves the `.rich-text-content` editor root from the current table ref so the content can be
3808
+ * made inert while the properties dialog holds keyboard/VoiceOver focus.
3809
+ *
3810
+ * @returns {Nullable<HTMLElement>} The editor content element, or `null` when it cannot be resolved.
3811
+ */
3812
+ getInertContentTarget() {
3813
+ var _a, _b, _c;
3814
+ return (_c = (_b = (_a = this.getTableRef) === null || _a === void 0 ? void 0 : _a.call(this)) === null || _b === void 0 ? void 0 : _b.closest('.rich-text-content')) !== null && _c !== void 0 ? _c : null;
3815
+ }
3608
3816
  /**
3609
3817
  * Updates the visibility of the pre-rendered content blocks based on type.
3610
3818
  *
@@ -3642,6 +3850,48 @@ class TableDynamicPopoverRenderer extends TablePopoverBaseRenderer {
3642
3850
  const extensionContext = this.getTableExtensionContext();
3643
3851
  extensionContext && (this.currentFocusNode = extensionContext.getSelectedNodes()[0]);
3644
3852
  }
3853
+ /**
3854
+ * Moves focus to the first focusable control in the active properties form so keyboard and
3855
+ * screen-reader users land inside the dialog when it opens. The first form field is the Border
3856
+ * Style select; its focusable trigger is the `.vega-input-select-container` element.
3857
+ *
3858
+ * @param {string} type - The table setting type that determines which form is visible.
3859
+ */
3860
+ focusFirstFormField(type) {
3861
+ const formRef = type === TableSettingType.TABLE ? this.tablePropertiesFormRef : this.cellPropertiesFormRef;
3862
+ if (!formRef) {
3863
+ return;
3864
+ }
3865
+ // Make the editor content inert up front so the table/cell cannot steal focus while the dialog
3866
+ // lays out. The cell form applies the selected cell's styles on open, whose async reset fires a
3867
+ // selectionchange that would otherwise re-focus the cell before we reach Border Style. Inert also
3868
+ // gives VoiceOver no cell-caret text context, so its cursor follows the focus. Lifted on hide.
3869
+ this.setEditorContentInert(true);
3870
+ // The CELL form applies the selected cell's styles on open (it sets both `styleMap` and
3871
+ // `defaultValue`), a heavier re-render than TABLE, so on the first open its Border Style control is
3872
+ // present but 0×0 for a frame. WebKit's VoiceOver cursor does not follow `.focus()` onto a
3873
+ // zero-area element, so defer through a double animation frame: the first schedules past the
3874
+ // popover's async reveal, the second runs after the browser has committed the layout pass that
3875
+ // sizes the control.
3876
+ requestAnimationFrame(() => {
3877
+ requestAnimationFrame(() => {
3878
+ var _a, _b, _c, _d, _e;
3879
+ const firstField = (_b = (_a = formRef.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('[data-vega-form]')) !== null && _b !== void 0 ? _b : null;
3880
+ const container = (_d = (_c = firstField === null || firstField === void 0 ? void 0 : firstField.shadowRoot) === null || _c === void 0 ? void 0 : _c.querySelector('.vega-input-select-container')) !== null && _d !== void 0 ? _d : null;
3881
+ (_e = (container !== null && container !== void 0 ? container : firstField)) === null || _e === void 0 ? void 0 : _e.focus();
3882
+ });
3883
+ });
3884
+ }
3885
+ /**
3886
+ * When the properties dialog hides after an Escape press, returns focus (and the caret) to the
3887
+ * table cell that had focus before the dialog was opened via the setting toolbar.
3888
+ */
3889
+ handleDialogHide() {
3890
+ // Lift the inert guard on the editor content synchronously, before any focus restore runs, so the
3891
+ // cell can receive focus and the editor is interactive again.
3892
+ this.setEditorContentInert(false);
3893
+ this.restoreFocusOnEscapeHide();
3894
+ }
3645
3895
  /**
3646
3896
  * Create and position an invisible anchor element whose position and size are identical to the geometry of the current multi-cell selection.
3647
3897
  * This anchor element will then be used as the target of the popup, so that the popup appears near the entire selection area.
@@ -3736,6 +3986,62 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3736
3986
  this.tableSettingRef.selectedCells = this.getTableSelectedCells();
3737
3987
  }
3738
3988
  };
3989
+ /**
3990
+ * Hides the table setting toolbar and its dynamic popover. Used when focus leaves the table (e.g.
3991
+ * Escape moves focus from a cell back onto the table) so the contextual toolbar does not linger.
3992
+ */
3993
+ this.hide = () => {
3994
+ var _a;
3995
+ void this.tableDynamicPopover.hide();
3996
+ void ((_a = this.popoverRef) === null || _a === void 0 ? void 0 : _a.hide());
3997
+ };
3998
+ /**
3999
+ * Opens the table setting toolbar for keyboard/screen-reader users and moves focus to its first
4000
+ * enabled button. Used by the Alt+F10 shortcut so the toolbar can be reached from inside a cell
4001
+ * even when it is currently closed: it re-targets and shows the popover (the same path as a table
4002
+ * click) before deferring focus to the first enabled button.
4003
+ *
4004
+ * @param {RTETableBlock} tableBlock - The table's block data.
4005
+ * @param {() => HTMLElement} getTableRef - Getter for the table's DOM element.
4006
+ * @param {Nullable<HTMLElement>} returnCell - The cell to return focus to if the toolbar is dismissed with Escape.
4007
+ */
4008
+ this.openSettingToolbarForKeyboard = (tableBlock, getTableRef, returnCell) => {
4009
+ // Re-target and show the popover through the same path as a table click so the toolbar is
4010
+ // actually visible before focus lands on it — otherwise focus would be pushed onto a hidden
4011
+ // or stale toolbar that isn't shown.
4012
+ this.reTarget(tableBlock, getTableRef);
4013
+ void this.tableDynamicPopover.hide();
4014
+ remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), getTableRef());
4015
+ void this.popoverRef.show(true);
4016
+ this.focusFirstSettingButton(returnCell);
4017
+ };
4018
+ /**
4019
+ * Moves focus to the first enabled button in the table setting toolbar. Used by the Alt+F10
4020
+ * shortcut so keyboard and screen-reader users can reach the toolbar from inside the table.
4021
+ *
4022
+ * @param {Nullable<HTMLElement>} returnCell - The cell to return focus to if the toolbar is dismissed with Escape.
4023
+ */
4024
+ this.focusFirstSettingButton = (returnCell) => {
4025
+ var _a, _b;
4026
+ // Remember the cell to return focus to if the toolbar is dismissed with Escape, and clear any
4027
+ // stale Escape recorded before the toolbar was focused.
4028
+ this.beginReturnFocusTracking(returnCell);
4029
+ // Safari VoiceOver ignores the toolbar's aria-modal and keeps driving a caret through the still
4030
+ // editable content, so on Ctrl+Opt+Right it walks the DOM caret out of the table into the editor
4031
+ // instead of staying on the toolbar. Clear the caret AND make the editor content inert so there is
4032
+ // no text context for VoiceOver to advance; the inert flag is lifted again when the toolbar hides.
4033
+ (_b = (_a = this.getTableExtensionContext()) === null || _a === void 0 ? void 0 : _a.getSelection()) === null || _b === void 0 ? void 0 : _b.removeAllRanges();
4034
+ this.setEditorContentInert(true);
4035
+ // The popover reveals its content asynchronously, so defer to the next tick to make sure
4036
+ // the setting buttons are present and focusable.
4037
+ // eslint-disable-next-line no-restricted-globals
4038
+ setTimeout(() => {
4039
+ var _a, _b, _c;
4040
+ const buttons = Array.from((_c = (_b = (_a = this.tableSettingRef) === null || _a === void 0 ? void 0 : _a.shadowRoot) === null || _b === void 0 ? void 0 : _b.querySelectorAll('.rte-table-setting-item')) !== null && _c !== void 0 ? _c : []);
4041
+ const firstEnabled = buttons.find((button) => !button.hasAttribute('disabled'));
4042
+ firstEnabled === null || firstEnabled === void 0 ? void 0 : firstEnabled.focus();
4043
+ }, 0);
4044
+ };
3739
4045
  /**
3740
4046
  * Handles setting menu click events.
3741
4047
  *
@@ -3748,11 +4054,16 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3748
4054
  extensionContext && handler.execute(event.detail, extensionContext, this.tableBlock);
3749
4055
  if (event.detail[0] === TableSettingType.CAPTION) {
3750
4056
  this.updateTableSettingCaption();
4057
+ this.moveFocusToCaption();
3751
4058
  }
3752
4059
  }
3753
4060
  if (event.detail[0] === TableSettingType.TABLE || event.detail[0] === TableSettingType.CELL) {
4061
+ // Capture the return cell before hiding the setting popover, whose own hide handler clears
4062
+ // it, so the properties dialog can move focus into itself and restore it to the cell on
4063
+ // Escape for keyboard/screen-reader users.
4064
+ const returnCell = this.returnFocusCell;
3754
4065
  void this.popoverRef.hide();
3755
- void this.tableDynamicPopover.show(event.detail[0]);
4066
+ void this.tableDynamicPopover.show(event.detail[0], returnCell);
3756
4067
  }
3757
4068
  };
3758
4069
  /**
@@ -3760,6 +4071,17 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3760
4071
  */
3761
4072
  this.handleTableSettingPopoverShow = () => {
3762
4073
  this.syncSelectedCells();
4074
+ this.labelSettingDialog();
4075
+ };
4076
+ /**
4077
+ * When the setting popover hides after an Escape press, returns focus (and the caret) to the
4078
+ * table cell that had focus before the toolbar was reached via Alt+F10.
4079
+ */
4080
+ this.handleTableSettingPopoverHide = () => {
4081
+ // Lift the inert guard on the editor content synchronously, before any focus restore runs, so the
4082
+ // cell (or the properties dialog) can receive focus and the editor is interactive again.
4083
+ this.setEditorContentInert(false);
4084
+ this.restoreFocusOnEscapeHide();
3763
4085
  };
3764
4086
  this.tableDynamicPopover = new TableDynamicPopoverRenderer(RTETableColorManager.getTableColors(), renderContext);
3765
4087
  }
@@ -3768,6 +4090,8 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3768
4090
  */
3769
4091
  destroy() {
3770
4092
  this.tableDynamicPopover.destroy();
4093
+ this.setEditorContentInert(false);
4094
+ this.detachEscapeTracker();
3771
4095
  if (this.popoverContainer) {
3772
4096
  this.popoverContainer.remove();
3773
4097
  }
@@ -3788,6 +4112,10 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3788
4112
  popover.isScreenPosition = true;
3789
4113
  popover.className = 'rte-table-setting-popover';
3790
4114
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverShow, this.handleTableSettingPopoverShow);
4115
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverHide, this.handleTableSettingPopoverHide);
4116
+ // Escape inside the popover (rendered in a portal) does not bubble back to the table, so
4117
+ // observe it on the document (capture phase) to know when to return focus to the cell.
4118
+ this.attachEscapeTracker(safeDocument);
3791
4119
  const slotDiv = safeDocument.createElement('div');
3792
4120
  slotDiv.setAttribute('slot', 'popover');
3793
4121
  const tableSetting = safeDocument.createElement('vega-rich-text-table-setting');
@@ -3800,6 +4128,25 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3800
4128
  this.tableSettingRef = tableSetting;
3801
4129
  }
3802
4130
  }
4131
+ /**
4132
+ * Whether the given event originated inside the setting toolbar subtree.
4133
+ *
4134
+ * @param {Event} event - The event to test.
4135
+ * @returns {boolean} `true` when the toolbar is rendered and the event's composed path includes it.
4136
+ */
4137
+ isEventWithinPopover(event) {
4138
+ return !!this.tableSettingRef && event.composedPath().includes(this.tableSettingRef);
4139
+ }
4140
+ /**
4141
+ * Resolves the `.rich-text-content` editor root from the setting toolbar's target so the content
4142
+ * can be made inert while the toolbar holds keyboard/VoiceOver focus.
4143
+ *
4144
+ * @returns {Nullable<HTMLElement>} The editor content element, or `null` when it cannot be resolved.
4145
+ */
4146
+ getInertContentTarget() {
4147
+ var _a, _b, _c;
4148
+ return (_c = (_b = (_a = this.tableSettingRef) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.closest('.rich-text-content')) !== null && _c !== void 0 ? _c : null;
4149
+ }
3803
4150
  /**
3804
4151
  * Updates the table setting component caption state to match the current table data.
3805
4152
  */
@@ -3809,6 +4156,35 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3809
4156
  this.tableSettingRef.hasCaption = hasCaption;
3810
4157
  }
3811
4158
  }
4159
+ /**
4160
+ * When the caption is toggled on, moves keyboard/VoiceOver focus and the caret into the caption so
4161
+ * the user lands in it to start typing. The setting toolbar is opened as inert-guarded for
4162
+ * keyboard/screen-reader users, so lift that guard first; the caption is re-rendered by the toggle,
4163
+ * so defer the focus to the next tick when the `<caption>` element exists.
4164
+ */
4165
+ moveFocusToCaption() {
4166
+ if (!this.tableBlock.hasCaption()) {
4167
+ return;
4168
+ }
4169
+ this.setEditorContentInert(false);
4170
+ // eslint-disable-next-line no-restricted-globals
4171
+ setTimeout(() => {
4172
+ var _a, _b, _c, _d, _e, _f, _g;
4173
+ const caption = (_c = (_b = (_a = this.tableSettingRef) === null || _a === void 0 ? void 0 : _a.target) === null || _b === void 0 ? void 0 : _b.querySelector('caption')) !== null && _c !== void 0 ? _c : null;
4174
+ if (!caption) {
4175
+ return;
4176
+ }
4177
+ caption.focus();
4178
+ const selection = (_g = (_e = (_d = this.getTableExtensionContext()) === null || _d === void 0 ? void 0 : _d.getSelection()) !== null && _e !== void 0 ? _e : (_f = caption.ownerDocument) === null || _f === void 0 ? void 0 : _f.getSelection()) !== null && _g !== void 0 ? _g : null;
4179
+ if (selection) {
4180
+ const range = new Range();
4181
+ range.selectNodeContents(caption);
4182
+ range.collapse(false);
4183
+ selection.removeAllRanges();
4184
+ selection.addRange(range);
4185
+ }
4186
+ }, 0);
4187
+ }
3812
4188
  /**
3813
4189
  * Re-targets the shared popovers to the given table.
3814
4190
  *
@@ -3823,6 +4199,22 @@ class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
3823
4199
  this.tableDynamicPopover.reTarget(tableBlock, getTableRef);
3824
4200
  }
3825
4201
  }
4202
+ /**
4203
+ * `vega-popover-content-box` renders `role="dialog"` + `aria-modal="true"`, which on WebKit
4204
+ * VoiceOver confines the reading cursor to the popover. Keep those semantics so Ctrl+Opt+Arrow
4205
+ * cannot walk the VoiceOver cursor out of the toolbar past the last button (VoiceOver swallows
4206
+ * those keys, so this cannot be trapped in JS), and give the dialog an accessible name so it
4207
+ * announces "Table tools" on entry.
4208
+ */
4209
+ labelSettingDialog() {
4210
+ var _a, _b;
4211
+ const dialog = (_b = (_a = this.tableSettingRef) === null || _a === void 0 ? void 0 : _a.closest('vega-popover-content-box')) !== null && _b !== void 0 ? _b : null;
4212
+ if (dialog) {
4213
+ dialog.setAttribute('role', 'dialog');
4214
+ dialog.setAttribute('aria-modal', 'true');
4215
+ dialog.setAttribute('aria-label', 'Table tools');
4216
+ }
4217
+ }
3826
4218
  /**
3827
4219
  * Collects and returns the currently selected table cells.
3828
4220
  *
@@ -3848,7 +4240,7 @@ class RTETableBlockRenderer extends VegaRTEExtensionRenderer {
3848
4240
  */
3849
4241
  doRender(h, renderData, rteContext) {
3850
4242
  let tableRef;
3851
- const table = this.renderTable(h, renderData, (ref) => (tableRef = ref));
4243
+ const table = this.renderTable(h, renderData, (ref) => (tableRef = ref), rteContext);
3852
4244
  this.renderTableToolbar(rteContext);
3853
4245
  const tableAnnotation = renderData.getAnnotationByType(RTETableExtensionAnnotationTypeEnum.TABLE);
3854
4246
  const children = rteContext.editable
@@ -3872,9 +4264,16 @@ class RTETableBlockRenderer extends VegaRTEExtensionRenderer {
3872
4264
  }
3873
4265
  },
3874
4266
  }, [
3875
- // Add an extra div as slot container, to make sure the cursor can move to before/end of the table.
4267
+ // The table is a fully non-editable "widget" wrapped by a
4268
+ // `<div contenteditable="false">`: there is NO editable element wrapping the
4269
+ // table, so Chrome/VoiceOver exposes it as a real table ("table, N columns, M
4270
+ // rows") instead of flattening it into the surrounding text entry area. The
4271
+ // <table> stays a plain, semantically clean table and each cell re-enables editing
4272
+ // via contentEditable=true. The cursor moves to before/after the table via the
4273
+ // adjacent paragraphs in the editor content, treating the table as an atomic widget.
3876
4274
  h('div', {
3877
- contentEditable: true,
4275
+ class: 'v-rte--extension-table-widget',
4276
+ contentEditable: false,
3878
4277
  ref: this.useRef(renderData),
3879
4278
  }, [table]),
3880
4279
  ]),
@@ -3888,6 +4287,11 @@ class RTETableBlockRenderer extends VegaRTEExtensionRenderer {
3888
4287
  }
3889
4288
  const result = h('div', {
3890
4289
  class: 'v-rte--extension-table-container',
4290
+ // The container is `display: table` (for shrink-to-fit centering), which WebKit maps to an
4291
+ // AXTable. Without this, Safari VoiceOver lands its cursor on the container (or groups up to
4292
+ // the widget host) instead of the real `<table>`. `role="presentation"` strips the container's
4293
+ // implicit table semantics so VO descends to `table.v-rte--extension-table` like Chrome does.
4294
+ role: 'presentation',
3891
4295
  style: Object.assign({}, containerStyle),
3892
4296
  }, children);
3893
4297
  /**
@@ -3916,17 +4320,151 @@ class RTETableBlockRenderer extends VegaRTEExtensionRenderer {
3916
4320
  * @param {VegaRTECreateElementFunction} h - The create element function.
3917
4321
  * @param {RTETableBlock} renderData - The table block to render.
3918
4322
  * @param {(ref: HTMLElement) => HTMLElement} setTableRef - Set table ref to tableRef
4323
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
3919
4324
  * @returns {VegaRTERenderResult} - The rendered table element.
3920
4325
  */
3921
- renderTable(h, renderData, setTableRef) {
4326
+ renderTable(h, renderData, setTableRef, rteContext) {
3922
4327
  var _a;
3923
- return h('table', Object.assign(Object.assign({ key: renderData.id }, (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(), class: renderData.getClasses(),
4328
+ const editable = !!rteContext.editable;
4329
+ return h('table', Object.assign(Object.assign(Object.assign(Object.assign({ key: renderData.id }, (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(), class: renderData.getClasses() }), (editable
4330
+ ? {
4331
+ // eslint-disable-next-line jsdoc/require-jsdoc
4332
+ onClick: (event) => this.handleTableActivate(event, rteContext),
4333
+ // eslint-disable-next-line jsdoc/require-jsdoc
4334
+ onKeyDown: (event) => this.handleTableKeyDown(event, rteContext, renderData),
4335
+ }
4336
+ : undefined)), {
3924
4337
  // eslint-disable-next-line jsdoc/require-jsdoc
3925
4338
  ref: (ref) => {
3926
4339
  this.useRef(renderData)(ref);
3927
4340
  setTableRef(ref);
3928
4341
  } }));
3929
4342
  }
4343
+ /**
4344
+ * Handles activation of the table itself (e.g. VoiceOver Ctrl+Option+Space, which dispatches a
4345
+ * click on the focused table) by moving focus into the first cell so the user can start editing.
4346
+ *
4347
+ * @param {MouseEvent} event - The click event dispatched on the table.
4348
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
4349
+ */
4350
+ handleTableActivate(event, rteContext) {
4351
+ const tableRef = event.currentTarget;
4352
+ // Only treat this as "activate the table" when the click truly targets the table element
4353
+ // itself — i.e. VoiceOver Ctrl+Option+Space (which dispatches a click on the focused table)
4354
+ // or a click on the table's own padding/border. Clicks that bubble up from editable
4355
+ // descendants (cells, or the supported <caption>) keep their native contentEditable caret
4356
+ // placement, so we must not force focus into the first cell and break that interaction.
4357
+ if (event.target !== event.currentTarget) {
4358
+ return;
4359
+ }
4360
+ this.focusFirstCell(tableRef, rteContext);
4361
+ }
4362
+ /**
4363
+ * Handles table-scoped keyboard shortcuts while focus is inside the table:
4364
+ * - Alt+F10 opens the table setting toolbar (re-targeting and showing it when needed) and moves
4365
+ * focus to it (the common "focus the contextual toolbar" shortcut), so keyboard/screen-reader
4366
+ * users can reach the toolbar buttons even when it is currently closed.
4367
+ * - Escape moves focus back onto the table, so the caret leaves the cell (its focus highlight
4368
+ * is cleared), the contextual setting toolbar is dismissed, and screen readers announce the
4369
+ * table again.
4370
+ *
4371
+ * @param {KeyboardEvent} event - The keydown event.
4372
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
4373
+ * @param {RTETableBlock} renderData - The table block being rendered.
4374
+ */
4375
+ handleTableKeyDown(event, rteContext, renderData) {
4376
+ var _a, _b;
4377
+ if (event.altKey && event.key === 'F10') {
4378
+ event.preventDefault();
4379
+ event.stopPropagation();
4380
+ const tableRef = event.currentTarget;
4381
+ const f10Target = event.target;
4382
+ const f10Cell = f10Target
4383
+ ? f10Target.closest('td, th')
4384
+ : null;
4385
+ (_a = this.tableToolbar) === null || _a === void 0 ? void 0 : _a.openSettingToolbarForKeyboard(renderData, () => tableRef, f10Cell);
4386
+ return;
4387
+ }
4388
+ if (event.key !== 'Escape') {
4389
+ return;
4390
+ }
4391
+ const tableRef = event.currentTarget;
4392
+ const target = event.target;
4393
+ const cell = target
4394
+ ? target.closest('td, th')
4395
+ : null;
4396
+ if (!cell || !tableRef.contains(cell)) {
4397
+ return;
4398
+ }
4399
+ event.preventDefault();
4400
+ event.stopPropagation();
4401
+ this.focusTable(tableRef, rteContext);
4402
+ // Focus moved from the cell back onto the table, so dismiss the contextual setting toolbar
4403
+ // that may have been opened (e.g. by activating the table) — otherwise it lingers with no
4404
+ // focused cell to act on.
4405
+ (_b = this.tableToolbar) === null || _b === void 0 ? void 0 : _b.hide();
4406
+ }
4407
+ /**
4408
+ * Moves focus (and the caret) into the first cell of the table.
4409
+ *
4410
+ * @param {HTMLElement} tableRef - The table element.
4411
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
4412
+ */
4413
+ focusFirstCell(tableRef, rteContext) {
4414
+ const firstCell = tableRef.querySelector('td, th');
4415
+ if (!firstCell) {
4416
+ return;
4417
+ }
4418
+ firstCell.focus();
4419
+ const selection = this.getSelection(rteContext, tableRef);
4420
+ if (selection) {
4421
+ // Collapse the caret at the start of the cell content so the user can start typing.
4422
+ const range = new Range();
4423
+ range.setStart(firstCell, 0);
4424
+ range.setEnd(firstCell, 0);
4425
+ selection.removeAllRanges();
4426
+ selection.addRange(range);
4427
+ }
4428
+ }
4429
+ /**
4430
+ * Moves focus onto the table element and clears any cell caret and selection highlight.
4431
+ *
4432
+ * @param {HTMLElement} tableRef - The table element.
4433
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
4434
+ */
4435
+ focusTable(tableRef, rteContext) {
4436
+ var _a;
4437
+ const selection = this.getSelection(rteContext, tableRef);
4438
+ selection === null || selection === void 0 ? void 0 : selection.removeAllRanges();
4439
+ const extensionContext = this.getExtensionContext(rteContext.host);
4440
+ (_a = extensionContext === null || extensionContext === void 0 ? void 0 : extensionContext.tableSelection) === null || _a === void 0 ? void 0 : _a.setSelectedCells([]);
4441
+ // The table is contentEditable=false, so it is not focusable by default. Add tabindex ONLY
4442
+ // while moving focus onto it, and remove it again on blur, so that during normal navigation
4443
+ // VoiceOver still announces it as "table, N columns, M rows" rather than a focusable widget.
4444
+ tableRef.setAttribute('tabindex', '-1');
4445
+ // eslint-disable-next-line jsdoc/require-jsdoc
4446
+ const removeTabindex = () => {
4447
+ tableRef.removeAttribute('tabindex');
4448
+ tableRef.removeEventListener('blur', removeTabindex);
4449
+ };
4450
+ tableRef.addEventListener('blur', removeTabindex);
4451
+ tableRef.focus();
4452
+ }
4453
+ /**
4454
+ * Resolves the editor selection, preferring the shadow-aware selection from the extension
4455
+ * context and falling back to the table's owning document.
4456
+ *
4457
+ * @param {RTERenderContext} rteContext - The rendering context of the rich text editor.
4458
+ * @param {HTMLElement} tableRef - The table element.
4459
+ * @returns {Nullable<Selection>} - The resolved selection, or null when unavailable.
4460
+ */
4461
+ getSelection(rteContext, tableRef) {
4462
+ const extensionContext = this.getExtensionContext(rteContext.host);
4463
+ if (extensionContext) {
4464
+ return extensionContext.getSelection();
4465
+ }
4466
+ return tableRef.ownerDocument ? tableRef.ownerDocument.getSelection() : null;
4467
+ }
3930
4468
  /**
3931
4469
  * Handles the removal of the table block.
3932
4470
  *
@@ -4029,9 +4567,9 @@ class RTETableCellRenderer extends VegaRTEExtensionRenderer {
4029
4567
  */
4030
4568
  renderByCellType(h, renderData, rteContext, elementType) {
4031
4569
  var _a;
4032
- return h(elementType, Object.assign(Object.assign(Object.assign({ key: `${renderData.id}-${elementType}`,
4570
+ return h(elementType, Object.assign(Object.assign(Object.assign(Object.assign({ key: `${renderData.id}-${elementType}`,
4033
4571
  // eslint-disable-next-line jsdoc/require-jsdoc
4034
- ref: this.useRef(renderData) }, (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(rteContext), class: renderData.getClasses() }), (rteContext.editable ? this.onSelectionListeners(renderData, rteContext) : undefined)));
4572
+ ref: this.useRef(renderData) }, (rteContext.editable ? { contentEditable: true, tabindex: -1 } : undefined)), (_a = renderData.getCustomAttributesAnnotation()) === null || _a === void 0 ? void 0 : _a.render()), { style: renderData.getStyles(rteContext), class: renderData.getClasses() }), (rteContext.editable ? this.onSelectionListeners(renderData, rteContext) : undefined)));
4035
4573
  }
4036
4574
  /**
4037
4575
  * Returns the mouse event listeners for selection handling.
@@ -4310,6 +4848,7 @@ class RTETableToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
4310
4848
  return createTablePopoverRenderer.render(h, super.renderButton(h, editorContext, {
4311
4849
  showArrowIcon: true,
4312
4850
  icon: 'rte-table',
4851
+ ariaLabel: 'Table',
4313
4852
  tooltip: { text: 'Insert table' },
4314
4853
  }));
4315
4854
  }
@@ -4490,16 +5029,10 @@ class RTETableCaptionRenderer extends VegaRTEExtensionRenderer {
4490
5029
  /**
4491
5030
  * @inheritDoc
4492
5031
  */
4493
- doRender(h, renderData) {
4494
- return h('caption', {
4495
- 'key': renderData.id,
4496
- 'ref': this.useRef(renderData),
4497
- 'style': renderData.getStyles(),
4498
- 'class': [renderData.getClasses(), renderData.isNotEmpty() ? null : 'showPlaceholder']
5032
+ doRender(h, renderData, rteContext) {
5033
+ return h('caption', Object.assign(Object.assign({ 'key': renderData.id, 'ref': this.useRef(renderData) }, (rteContext.editable ? { contentEditable: true } : undefined)), { 'style': renderData.getStyles(), 'class': [renderData.getClasses(), renderData.isNotEmpty() ? null : 'showPlaceholder']
4499
5034
  .filter(isNonNullable)
4500
- .join(' '),
4501
- 'data-placeholder': TABLE_CAPTION_PLACEHOLDER_TEXT,
4502
- });
5035
+ .join(' '), 'data-placeholder': TABLE_CAPTION_PLACEHOLDER_TEXT }));
4503
5036
  }
4504
5037
  }
4505
5038
 
@@ -5295,11 +5828,36 @@ class RTETableSelection {
5295
5828
  const commonAncestorContainer = range.commonAncestorContainer;
5296
5829
  const rangeInTable = !!findParent(commonAncestorContainer, `table`);
5297
5830
  if (rangeInTable) {
5298
- const selectedCells = this.filterSelectedCell(range, commonAncestorContainer);
5831
+ let selectedCells = this.filterSelectedCell(range, commonAncestorContainer);
5832
+ if (selectedCells.length === 0) {
5833
+ // A collapsed caret placed at an element boundary (e.g. keyboard/VoiceOver entry via
5834
+ // Ctrl+Option+Space) does not intersect a text node, so filterSelectedCell finds nothing
5835
+ // on browsers that keep the caret on the element (Firefox) instead of normalizing it into
5836
+ // the text node (Chrome). Resolve the containing cell directly so the setting toolbar is
5837
+ // still enabled.
5838
+ selectedCells = this.resolveCaretCell(commonAncestorContainer);
5839
+ }
5299
5840
  this.setSelectedCells(selectedCells);
5300
5841
  }
5301
5842
  }
5302
5843
  }
5844
+ /**
5845
+ * Resolve the single table cell that contains the given selection node. Used as a fallback when a
5846
+ * collapsed caret does not intersect any text node (see handleSelectionChange).
5847
+ *
5848
+ * @param {Node} node - The selection's common ancestor container.
5849
+ * @returns {RTETableCellBlock[]} The containing cell block, or an empty list when none is found.
5850
+ */
5851
+ resolveCaretCell(node) {
5852
+ var _a;
5853
+ const startElement = node.nodeType === Node.TEXT_NODE ? node.parentElement : node;
5854
+ const cellRef = (_a = startElement === null || startElement === void 0 ? void 0 : startElement.closest('td, th')) !== null && _a !== void 0 ? _a : null;
5855
+ if (!cellRef) {
5856
+ return [];
5857
+ }
5858
+ const cellBlock = stateEntityRenderingRegistry.getEntityByDOM(cellRef);
5859
+ return cellBlock ? [cellBlock] : [];
5860
+ }
5303
5861
  /**
5304
5862
  * Mark the beginning of a drag operation.
5305
5863
  */
@@ -7868,6 +8426,7 @@ class RTEHorizontalLineToolbarButtonRenderer extends VegaRTEToolbarButtonRendere
7868
8426
  render(createElement, editorContext) {
7869
8427
  return this.renderButton(createElement, editorContext, {
7870
8428
  icon: 'horizontal-line',
8429
+ ariaLabel: VegaInternalTranslation.t('Horizontal line'),
7871
8430
  tooltip: { text: VegaInternalTranslation.t('Horizontal line') },
7872
8431
  });
7873
8432
  }
@@ -8463,6 +9022,7 @@ class RTEBlockquoteToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
8463
9022
  render(createElement, editorContext) {
8464
9023
  return this.renderButton(createElement, editorContext, {
8465
9024
  icon: 'quote-left',
9025
+ ariaLabel: editorContext.translation.t('Block quote'),
8466
9026
  tooltip: { text: 'Block quote' },
8467
9027
  });
8468
9028
  }
@@ -9095,6 +9655,7 @@ class RTESpecialCharactersToolbarButtonRenderer extends VegaRTEToolbarButtonRend
9095
9655
  placement: 'bottom',
9096
9656
  showArrow: false,
9097
9657
  isScreenPosition: true,
9658
+ role: 'presentation',
9098
9659
  // eslint-disable-next-line jsdoc/require-jsdoc
9099
9660
  ref: (ref) => {
9100
9661
  if (ref) {
@@ -9122,6 +9683,7 @@ class RTESpecialCharactersToolbarButtonRenderer extends VegaRTEToolbarButtonRend
9122
9683
  ]),
9123
9684
  h('div', { slot: 'popover-content' }, this.renderButton(h, editorContext, {
9124
9685
  icon: 'rte-special-characters',
9686
+ ariaLabel: editorContext.translation.t('Special Characters'),
9125
9687
  tooltip: { text: 'Special Characters' },
9126
9688
  })),
9127
9689
  ]);
@@ -10335,14 +10897,22 @@ class FindReplaceToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
10335
10897
  placement: 'bottom',
10336
10898
  showArrow: false,
10337
10899
  isScreenPosition: true,
10900
+ role: 'presentation',
10338
10901
  // eslint-disable-next-line jsdoc/require-jsdoc
10339
10902
  ref: (ref) => {
10340
10903
  if (ref) {
10341
10904
  this.popoverRef = ref;
10342
10905
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaPopoverHide, () => {
10906
+ const shouldRestoreFocus = this.shouldRestoreFocusToButton();
10343
10907
  this.isPopoverOpen = false;
10344
10908
  this.findController.clear();
10345
10909
  this.updatePanel({ current: 0, total: 0 });
10910
+ if (shouldRestoreFocus) {
10911
+ // Defer so it runs after the popover's own focus-restore
10912
+ // (AriaDialogFocusableTrapSlimmer), returning focus to the toolbar
10913
+ // button for keyboard and VoiceOver users when the panel is dismissed.
10914
+ setTimeout(() => this.focusToolbarButton());
10915
+ }
10346
10916
  });
10347
10917
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaPopoverShow, () => {
10348
10918
  this.isPopoverOpen = true;
@@ -10373,6 +10943,7 @@ class FindReplaceToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
10373
10943
  ]),
10374
10944
  h('div', { slot: 'popover-content' }, this.renderButton(h, editorContext, {
10375
10945
  icon: 'rte-find-replace',
10946
+ ariaLabel: editorContext.translation.t('Find and replace'),
10376
10947
  tooltip: { text: VegaInternalTranslation.t('Find and replace') },
10377
10948
  })),
10378
10949
  ]);
@@ -10475,6 +11046,47 @@ class FindReplaceToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
10475
11046
  void this.popoverRef.hide();
10476
11047
  }
10477
11048
  }
11049
+ /**
11050
+ * Decides whether closing the panel should return focus to the toolbar button.
11051
+ *
11052
+ * Focus is restored when the panel is dismissed while focus is still inside it
11053
+ * (Escape key or the Close button) — including the VoiceOver case where the
11054
+ * dialog's `inert` blur has already moved focus to `<body>`. It is not restored
11055
+ * when focus has intentionally moved to another element (Tab out of the panel
11056
+ * or interacting with something else), so we don't yank focus back.
11057
+ *
11058
+ * @returns {boolean} True when focus should return to the toolbar button.
11059
+ */
11060
+ shouldRestoreFocusToButton() {
11061
+ // eslint-disable-next-line no-restricted-globals
11062
+ const activeEl = getDeepActiveElementInShadow(document, true);
11063
+ // eslint-disable-next-line no-restricted-globals
11064
+ return !activeEl || activeEl === document.body || this.isElementWithinPanel(activeEl);
11065
+ }
11066
+ /**
11067
+ * Checks whether an element is inside the panel, crossing shadow boundaries.
11068
+ *
11069
+ * @param {Nullable<HTMLElement>} el - The element to test.
11070
+ * @returns {boolean} True when the element is contained by the panel.
11071
+ */
11072
+ isElementWithinPanel(el) {
11073
+ if (!el || !this.panelRef) {
11074
+ return false;
11075
+ }
11076
+ let node = el;
11077
+ while (node) {
11078
+ if (node === this.panelRef) {
11079
+ return true;
11080
+ }
11081
+ const parent = node.parentNode;
11082
+ // Cross shadow boundaries: a shadow root (nodeType 11) exposes its `host`.
11083
+ node =
11084
+ parent && parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE
11085
+ ? parent.host
11086
+ : parent;
11087
+ }
11088
+ return false;
11089
+ }
10478
11090
  }
10479
11091
  (() => {
10480
11092
  VegaInternalIconManager.register({ 'rte-find-replace': findReplaceIcon });
@@ -10636,12 +11248,28 @@ class RTELineHeightToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
10636
11248
  }, [
10637
11249
  this.renderButton(createElement, editorContext, {
10638
11250
  icon: 'line-height',
11251
+ ariaLabel: editorContext.translation.t('Line Height'),
10639
11252
  showArrowIcon: true,
10640
11253
  tooltip: { text: VegaInternalTranslation.t('Line Height') },
10641
11254
  }),
10642
11255
  this.renderDropdownListTemplate(createElement, dropdownItems, editorContext),
10643
11256
  ]);
10644
11257
  }
11258
+ /**
11259
+ * Renders each line-height option with its label as light-DOM children rather than the
11260
+ * `label` prop. This gives the focusable menuitem a light-DOM text anchor so Safari
11261
+ * VoiceOver's reading cursor follows focus into the item (Ctrl+Opt+Right walks item→item
11262
+ * instead of escaping to the next toolbar button).
11263
+ *
11264
+ * The label is wrapped in a `<span>` (not a bare text node) so a click targeting the label
11265
+ * lands on a slotted element that composes into the item's shadow `<li>`; a bare text node
11266
+ * resolves to the `vega-dropdown-item` host, whose click never reaches the shadow handler.
11267
+ *
11268
+ * @inheritDoc
11269
+ */
11270
+ renderDropdownItem(h, item, editorContext) {
11271
+ return h('vega-dropdown-item', { key: item.key, itemKey: item.key, prefixIcon: item.icon }, h('span', undefined, editorContext.translation.t(item.label)));
11272
+ }
10645
11273
  /**
10646
11274
  * @inheritDoc
10647
11275
  */
@@ -10943,6 +11571,9 @@ class RTEFullscreenToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
10943
11571
  const selected = this.isSelected();
10944
11572
  return this.renderButton(createElement, editorContext, {
10945
11573
  icon: selected ? 'rte-fullscreen-exit' : 'rte-fullscreen-enter',
11574
+ ariaLabel: selected
11575
+ ? editorContext.translation.t('Exit fullscreen mode')
11576
+ : editorContext.translation.t('Enter fullscreen mode'),
10946
11577
  tooltip: {
10947
11578
  text: selected
10948
11579
  ? VegaInternalTranslation.t('Exit fullscreen mode')
@@ -14431,6 +15062,7 @@ class RTECopyToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer {
14431
15062
  render(h, editorContext) {
14432
15063
  return this.renderButton(h, editorContext, {
14433
15064
  icon: 'rte-copy',
15065
+ ariaLabel: editorContext.translation.t('Copy'),
14434
15066
  tooltip: { text: 'Copy' },
14435
15067
  });
14436
15068
  }
@@ -14746,6 +15378,7 @@ class RTECutToolbarButtonRenderer extends RTECopyToolbarButtonRenderer {
14746
15378
  render(h, editorContext) {
14747
15379
  return this.renderButton(h, editorContext, {
14748
15380
  icon: 'rte-cut',
15381
+ ariaLabel: editorContext.translation.t('Cut'),
14749
15382
  tooltip: { text: 'Cut' },
14750
15383
  });
14751
15384
  }
@@ -14784,6 +15417,130 @@ class VegaRTECutExtension extends VegaRTEExtension {
14784
15417
  // The unique key for the cut toolbar button, used for registration and retrieval.
14785
15418
  VegaRTECutExtension.TOOLBAR_BUTTON_KEY = 'cut';
14786
15419
 
15420
+ /**
15421
+ * Vetoes a commit that would push the character count past the hard limit, while
15422
+ * still allowing deletions and formatting that keep or reduce the count.
15423
+ */
15424
+ class PreventHardLimitExceedInterceptor extends ActionHandlerInterceptor {
15425
+ /**
15426
+ * Intercept when the candidate exceeds the configured maximum. Hard-limit
15427
+ * commits are vetoed only when they increase the count.
15428
+ *
15429
+ * @param {CommitValueAction} action - the commit action carrying the candidate and previous values
15430
+ * @returns {boolean} - whether the commit should be vetoed
15431
+ */
15432
+ canIntercept(action) {
15433
+ var _a;
15434
+ const extension = (_a = action.host.extensions) === null || _a === void 0 ? void 0 : _a.find((item) => this.isWordCountExtension(item));
15435
+ if (!extension) {
15436
+ return false;
15437
+ }
15438
+ const { hardLimit, maxChars } = extension.getConfig();
15439
+ const nextContent = action.candidate.getPlainText();
15440
+ const nextCount = extension.calculateTextCount(nextContent);
15441
+ if (!isNonNullable(maxChars) || nextCount <= maxChars) {
15442
+ return false;
15443
+ }
15444
+ let result = false;
15445
+ let prevContent = '';
15446
+ if (hardLimit && action.previous) {
15447
+ prevContent = action.previous.getPlainText();
15448
+ result = nextCount > extension.calculateTextCount(prevContent);
15449
+ }
15450
+ this.notifyCharsLimitExceeded(nextContent, prevContent, extension, action);
15451
+ return result;
15452
+ }
15453
+ /**
15454
+ * Not invoke the origin action handle to veto the commit that would push the character count past the hard limit.
15455
+ */
15456
+ intercept() {
15457
+ }
15458
+ /**
15459
+ * Notify the consumer when the candidate exceeds the configured character limit.
15460
+ * The previous content is empty when hard limit is not enabled for the performance optimization.
15461
+ *
15462
+ * @param {string} nextContent - the candidate content string
15463
+ * @param {string} prevContent - the previous content string
15464
+ * @param {VegaRTEWordCountExtension} extension - the configured word count extension
15465
+ * @param {CommitValueAction} action - the commit action carrying the candidate value
15466
+ */
15467
+ notifyCharsLimitExceeded(nextContent, prevContent, extension, action) {
15468
+ const { maxChars, hardLimit, onCharsLimitExceeded } = extension.getConfig();
15469
+ if (typeof onCharsLimitExceeded === 'function') {
15470
+ if (!hardLimit || prevContent !== nextContent) {
15471
+ onCharsLimitExceeded(action.host, maxChars);
15472
+ }
15473
+ }
15474
+ }
15475
+ /**
15476
+ * Check if the given extension is a word count extension.
15477
+ *
15478
+ * @param {VegaRTEExtension} extension - the extension to check
15479
+ * @returns {boolean} - whether the extension is a word count extension
15480
+ */
15481
+ isWordCountExtension(extension) {
15482
+ return extension['type'] === RTE_WORD_COUNT_KEY;
15483
+ }
15484
+ }
15485
+
15486
+ /**
15487
+ * Default configuration applied when a word count option is not provided.
15488
+ */
15489
+ const DEFAULT_WORD_COUNT_CONFIG = {
15490
+ showCharCount: true,
15491
+ countInlineBreak: false,
15492
+ hardLimit: false,
15493
+ };
15494
+ /**
15495
+ * Rich Text Editor extension that provides character counting.
15496
+ */
15497
+ class VegaRTEWordCountExtension extends VegaRTEExtension {
15498
+ constructor(config = {}) {
15499
+ super();
15500
+ /**
15501
+ * Runtime discriminator used by the core to identify this extension.
15502
+ */
15503
+ this.type = RTE_WORD_COUNT_KEY;
15504
+ this.config = Object.assign(Object.assign({}, DEFAULT_WORD_COUNT_CONFIG), config);
15505
+ }
15506
+ /**
15507
+ * Get the extension configuration.
15508
+ *
15509
+ * @returns {ResolvedRTEWordCountConfig} The word count configuration.
15510
+ */
15511
+ getConfig() {
15512
+ return this.config;
15513
+ }
15514
+ /**
15515
+ * Compute the character count data for the given editor content.
15516
+ *
15517
+ * @param {VegaRTEContent} value - The editor content.
15518
+ * @returns {VegaRTEWordCountData} The computed character count data.
15519
+ */
15520
+ getData(value) {
15521
+ const plainText = value.getPlainText();
15522
+ const { maxChars, hardLimit } = this.config;
15523
+ const count = this.calculateTextCount(plainText);
15524
+ return { count, maxChars, hardLimit };
15525
+ }
15526
+ /**
15527
+ * Get the character count for the given content string.
15528
+ *
15529
+ * @param {string} content - The content string.
15530
+ * @returns {number} The character count.
15531
+ */
15532
+ calculateTextCount(content) {
15533
+ const { countInlineBreak } = this.config;
15534
+ const text = countInlineBreak ? content : content.replace(/\n/g, '');
15535
+ // Use the spread operator so that surrogate pairs (e.g. emoji) count as a single character.
15536
+ return [...text].length;
15537
+ }
15538
+ }
15539
+ (() => {
15540
+ // Gate over-limit commits through the shared action-interceptor pipeline.
15541
+ VegaRTEExtension.registerActionHandlerInterceptor(VegaRTEContent.name, COMMIT_VALUE, new PreventHardLimitExceedInterceptor());
15542
+ })();
15543
+
14787
15544
  /**
14788
15545
  * Insert a new children to the nearest position of the parent container
14789
15546
  *
@@ -14914,4 +15671,4 @@ class VegaRTETokenExtension extends VegaRTEExtension {
14914
15671
  })();
14915
15672
  VegaRTETokenExtension.TOOLBAR_BUTTON_KEY = 'token';
14916
15673
 
14917
- export { VegaCalendarPeriodFactory as A, VegaRTEToolbarButtonRenderer as B, RTETokenNode as C, RTETokenNodeRenderer as D, RTELanguageToolbarButtonRenderer as E, RTEBlockquoteBlock as F, DeleteSelectedContentAction as G, ActionHandlerInterceptor as H, InsertNodeToNearestRootAction as I, RTETokenToolbarButtonRenderer as R, VegaLoader as V, VegaNotify as a, VegaEventManager$1 as b, VegaZIndexManager$1 as c, VegaSkeletonLoader as d, VegaTranslation as e, VegaRTETokenExtension as f, VegaRTELanguageExtension as g, VegaRTEDefaultLineHeightOptions as h, VegaRTEFunctionExtension as i, VegaRTETableExtension as j, VegaRTEHorizontalLineExtension as k, VegaRTEBlockquoteExtension as l, VegaRTESpecialCharactersExtension as m, VegaRTEFindReplaceExtension as n, VegaRTESpecialCharactersEssentials as o, VegaRTESpecialCharactersLatin as p, VegaRTESpecialCharactersMathematical as q, VegaRTESpecialCharactersArrows as r, VegaRTESpecialCharactersCurrency as s, VegaRTESpecialCharactersText as t, VegaRTELineHeightExtension as u, VegaRTEPasteExtension as v, waitForVega as w, VegaRTEFullscreenExtension as x, VegaRTECopyExtension as y, VegaRTECutExtension as z };
15674
+ export { VegaRTEWordCountExtension as A, VegaCalendarPeriodFactory as B, VegaRTEToolbarButtonRenderer as C, RTETokenNode as D, RTETokenNodeRenderer as E, RTELanguageToolbarButtonRenderer as F, RTEBlockquoteBlock as G, DeleteSelectedContentAction as H, InsertNodeToNearestRootAction as I, ActionHandlerInterceptor as J, RTETokenToolbarButtonRenderer as R, VegaLoader as V, VegaNotify as a, VegaEventManager$1 as b, VegaZIndexManager$1 as c, VegaSkeletonLoader as d, VegaTranslation as e, VegaRTETokenExtension as f, VegaRTELanguageExtension as g, VegaRTEDefaultLineHeightOptions as h, VegaRTEFunctionExtension as i, VegaRTETableExtension as j, VegaRTEHorizontalLineExtension as k, VegaRTEBlockquoteExtension as l, VegaRTESpecialCharactersExtension as m, VegaRTEFindReplaceExtension as n, VegaRTESpecialCharactersEssentials as o, VegaRTESpecialCharactersLatin as p, VegaRTESpecialCharactersMathematical as q, VegaRTESpecialCharactersArrows as r, VegaRTESpecialCharactersCurrency as s, VegaRTESpecialCharactersText as t, VegaRTELineHeightExtension as u, VegaRTEPasteExtension as v, waitForVega as w, VegaRTEFullscreenExtension as x, VegaRTECopyExtension as y, VegaRTECutExtension as z };