@heartlandone/vega 2.84.0 → 2.86.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 (355) hide show
  1. package/dist/cjs/{app-globals-ea063074.js → app-globals-3080f55a.js} +5 -5
  2. package/dist/cjs/{child-nodes-event-prevent-slimmer-58bbc5fc.js → child-nodes-event-prevent-slimmer-f3979a03.js} +1 -1
  3. package/dist/cjs/{code-block-6da521e6.js → code-block-c6c70464.js} +6 -0
  4. package/dist/cjs/{component-value-history-controller-slimmer.abstract-f3f35f94.js → component-value-history-controller-slimmer.abstract-a523b747.js} +2 -2
  5. package/dist/cjs/{content-state-89fafb3b.js → content-state-efd3b1a7.js} +1 -1
  6. package/dist/cjs/{event-emit-slimmer-ecca412d.js → event-emit-slimmer-80e1c8ca.js} +1 -1
  7. package/dist/cjs/{image-annotation-action-a6e1e9ed.js → image-annotation-action-93bace08.js} +3 -3
  8. package/dist/cjs/{immutable-map-edf24b54.js → immutable-map-d711339d.js} +16 -4
  9. package/dist/cjs/index.cjs.js +9 -9
  10. package/dist/cjs/{internal-vega-event-manager-6b74b3af.js → internal-vega-event-manager-7e0d966d.js} +2 -1
  11. package/dist/cjs/loader.cjs.js +8 -8
  12. package/dist/cjs/{public-rules-fc52d624.js → public-rules-3cd0f182.js} +3 -3
  13. package/dist/cjs/{range-93cc8ab1.js → range-c9bde0b4.js} +1 -1
  14. package/dist/cjs/{rich-text-editor-required-rule-fd3711fb.js → rich-text-editor-required-rule-d1f0509c.js} +1 -1
  15. package/dist/cjs/{split-cell-operation-532fb9f0.js → split-cell-operation-6a59c9b0.js} +2 -2
  16. package/dist/cjs/{token-extension-39f2b886.js → token-extension-d7d2ead6.js} +282 -224
  17. package/dist/cjs/vega-accordion.cjs.entry.js +3 -3
  18. package/dist/cjs/vega-app-header-button.cjs.entry.js +4 -4
  19. package/dist/cjs/vega-banner.cjs.entry.js +3 -3
  20. package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
  21. package/dist/cjs/vega-button-circle.cjs.entry.js +4 -4
  22. package/dist/cjs/vega-button-group_2.cjs.entry.js +4 -4
  23. package/dist/cjs/vega-button-link.cjs.entry.js +4 -4
  24. package/dist/cjs/vega-button.cjs.entry.js +4 -4
  25. package/dist/cjs/vega-calendar_4.cjs.entry.js +8 -7
  26. package/dist/cjs/vega-carousel.cjs.entry.js +3 -3
  27. package/dist/cjs/vega-checkbox_2.cjs.entry.js +4 -4
  28. package/dist/cjs/vega-chip.cjs.entry.js +4 -4
  29. package/dist/cjs/vega-code-block.cjs.entry.js +7 -7
  30. package/dist/cjs/vega-color-picker.cjs.entry.js +3 -3
  31. package/dist/cjs/vega-color-swatch-picker.cjs.entry.js +188 -46
  32. package/dist/cjs/vega-color-swatch.cjs.entry.js +7 -7
  33. package/dist/cjs/vega-combo-box.cjs.entry.js +4 -4
  34. package/dist/cjs/vega-date-picker_2.cjs.entry.js +17 -5
  35. package/dist/cjs/vega-dialog_2.cjs.entry.js +5 -5
  36. package/dist/cjs/vega-dropdown_5.cjs.entry.js +4 -4
  37. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  38. package/dist/cjs/{vega-event-id-c08ce3d3.js → vega-event-id-d9994eb3.js} +2 -0
  39. package/dist/cjs/vega-field-label.cjs.entry.js +3 -3
  40. package/dist/cjs/vega-file-uploader.cjs.entry.js +3 -3
  41. package/dist/cjs/vega-form.cjs.entry.js +5 -5
  42. package/dist/cjs/vega-image-uploader.cjs.entry.js +4 -4
  43. package/dist/cjs/vega-input-credit-card.cjs.entry.js +4 -4
  44. package/dist/cjs/vega-input-numeric.cjs.entry.js +4 -4
  45. package/dist/cjs/vega-input-passcode.cjs.entry.js +4 -4
  46. package/dist/cjs/vega-input-phone-number.cjs.entry.js +15 -5
  47. package/dist/cjs/vega-input-range.cjs.entry.js +4 -4
  48. package/dist/cjs/vega-input-select.cjs.entry.js +4 -4
  49. package/dist/cjs/vega-input.cjs.entry.js +3 -3
  50. package/dist/cjs/vega-item-toggle.cjs.entry.js +3 -3
  51. package/dist/cjs/vega-left-nav_5.cjs.entry.js +15 -13
  52. package/dist/cjs/vega-page-notification_2.cjs.entry.js +1 -1
  53. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +3 -3
  54. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +1 -1
  55. package/dist/cjs/vega-pagination.cjs.entry.js +4 -4
  56. package/dist/cjs/vega-popover_2.cjs.entry.js +3 -3
  57. package/dist/cjs/vega-progress-tracker_2.cjs.entry.js +3 -3
  58. package/dist/cjs/vega-radio_2.cjs.entry.js +4 -4
  59. package/dist/cjs/vega-rich-text-content.cjs.entry.js +4 -4
  60. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +10 -10
  61. package/dist/cjs/vega-rich-text-table-properties_3.cjs.entry.js +6 -6
  62. package/dist/cjs/vega-segment-control.cjs.entry.js +3 -3
  63. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +4 -4
  64. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +161 -28
  65. package/dist/cjs/vega-sidenav_3.cjs.entry.js +3 -3
  66. package/dist/cjs/vega-signature-capture.cjs.entry.js +3 -3
  67. package/dist/cjs/vega-stepper.cjs.entry.js +4 -4
  68. package/dist/cjs/vega-tab-group_2.cjs.entry.js +4 -4
  69. package/dist/cjs/vega-table_11.cjs.entry.js +1172 -282
  70. package/dist/cjs/vega-textarea.cjs.entry.js +4 -4
  71. package/dist/cjs/vega-time-picker_2.cjs.entry.js +9 -15
  72. package/dist/cjs/vega-toggle-switch.cjs.entry.js +3 -3
  73. package/dist/cjs/vega.cjs.js +8 -8
  74. package/dist/collection/components/vega-calendar/slimmers/day-view/renderers/vega-calendar-view-with-time-renderer.js +2 -2
  75. package/dist/collection/components/vega-calendar/slimmers/month-view/renderers/vega-calendar-month-view-renderer.js +2 -1
  76. package/dist/collection/components/vega-color-swatch/vega-color-swatch-picker/slimmers/renderers/color-swatch-picker-renderer.js +24 -5
  77. package/dist/collection/components/vega-color-swatch/vega-color-swatch-picker/vega-color-swatch-picker.js +15 -0
  78. package/dist/collection/components/vega-color-swatch/vega-color-swatch.js +6 -6
  79. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.js +3 -0
  80. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.css +17 -1
  81. package/dist/collection/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.js +31 -1
  82. package/dist/collection/components/vega-input-phone-number/vega-input-phone-number.js +10 -0
  83. package/dist/collection/components/vega-modal/slimmers/renderers/vega-modal-renderer.js +1 -1
  84. package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-backdrop-controller.js +10 -8
  85. package/dist/collection/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-zindex-controller.js +2 -2
  86. package/dist/collection/components/vega-rich-text-editor/dto/nodes/text-node.js +6 -0
  87. package/dist/collection/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.js +8 -2
  88. package/dist/collection/components/vega-rich-text-editor/extensions/functions/renderers/function-toolbar-button-renderer.js +1 -0
  89. package/dist/collection/components/vega-rich-text-editor/extensions/languages/language-toolbar-button-renderer.js +1 -0
  90. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.js +53 -51
  91. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.js +40 -10
  92. package/dist/collection/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.js +75 -62
  93. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-extension.js +1 -0
  94. package/dist/collection/components/vega-rich-text-editor/extensions/table/table-toolbar-button-renderer.js +1 -0
  95. package/dist/collection/components/vega-rich-text-editor/extensions/tokens/token-toolbar-button-renderer.js +5 -1
  96. package/dist/collection/components/vega-selection-tile/slimmers/renderers/vega-selection-tile-renderer.js +71 -10
  97. package/dist/collection/components/vega-selection-tile/vega-selection-tile-group/slimmers/renderers/vega-selection-tile-group-renderer.js +39 -11
  98. package/dist/collection/components/vega-selection-tile/vega-selection-tile-group/vega-selection-tile-group.css +1 -3
  99. package/dist/collection/components/vega-selection-tile/vega-selection-tile.css +23 -18
  100. package/dist/collection/components/vega-selection-tile/vega-selection-tile.js +45 -1
  101. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-expand-row-controller.js +88 -4
  102. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-row-draggable-controller.js +132 -0
  103. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-sort-controller.js +14 -0
  104. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-body-renderer.js +8 -5
  105. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.js +6 -2
  106. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.js +8 -2
  107. package/dist/collection/components/vega-table/utils.js +4 -3
  108. package/dist/collection/components/vega-table/vega-table-expand-row/slimmers/controllers/vega-table-expand-row-col-span-controller.js +13 -1
  109. package/dist/collection/components/vega-table/vega-table-expand-row/slimmers/controllers/vega-table-expand-row-state-controller.js +7 -0
  110. package/dist/collection/components/vega-table/vega-table-expand-row/vega-table-expand-row.js +7 -0
  111. package/dist/collection/components/vega-table/vega-table-foot-row/slimmers/controllers/vega-table-foot-row-state-controller.js +10 -3
  112. package/dist/collection/components/vega-table/vega-table-foot-row/slimmers/renderers/vega-table-foot-row-renderer.js +9 -2
  113. package/dist/collection/components/vega-table/vega-table-foot-row/vega-table-foot-row.js +4 -3
  114. package/dist/collection/components/vega-table/vega-table-head/vega-table-head.js +5 -0
  115. package/dist/collection/components/vega-table/vega-table-head-row/slimmers/controllers/vega-table-head-row-state-controller.js +10 -3
  116. package/dist/collection/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.js +12 -2
  117. package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.js +5 -4
  118. package/dist/collection/components/vega-table/vega-table-row/slimmers/controllers/vega-table-row-state-controller.js +22 -1
  119. package/dist/collection/components/vega-table/vega-table-row/slimmers/renderers/vega-table-row-renderer.js +19 -4
  120. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.css +6 -0
  121. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.js +11 -1
  122. package/dist/collection/components/vega-table/vega-table.css +5 -0
  123. package/dist/collection/components/vega-table/vega-table.js +135 -11
  124. package/dist/collection/components/vega-time-picker/vega-time-picker.js +6 -12
  125. package/dist/collection/constants/ui.js +1 -0
  126. package/dist/collection/global/icons/grip-dots-vertical.js +3 -0
  127. package/dist/collection/helpers/event-manager/event-id/component-event-id-map.js +2 -1
  128. package/dist/collection/helpers/event-manager/event-id/vega-event-id.js +1 -0
  129. package/dist/collection/helpers/immutable/immutable-map.js +16 -4
  130. package/dist/collection/helpers/slimmers/draggable-element-slimmer.js +508 -0
  131. package/dist/collection/helpers/slimmers/popover-nested-slot-projection-slimmer.js +118 -0
  132. package/dist/esm/{app-globals-d06de2a5.js → app-globals-37536ac9.js} +5 -5
  133. package/dist/esm/{aria-dialog-focusable-trap-slimmer-853a91de.js → aria-dialog-focusable-trap-slimmer-6eb79723.js} +1 -1
  134. package/dist/esm/{child-nodes-event-prevent-slimmer-f65e2452.js → child-nodes-event-prevent-slimmer-75f93d85.js} +1 -1
  135. package/dist/esm/{code-block-65c8804b.js → code-block-10be3916.js} +7 -1
  136. package/dist/esm/{component-value-history-controller-slimmer.abstract-26c154f6.js → component-value-history-controller-slimmer.abstract-82d51b7a.js} +3 -3
  137. package/dist/esm/{content-state-e676bdf0.js → content-state-afeb700d.js} +2 -2
  138. package/dist/esm/{element-appender-slimmer-d4a82dc3.js → element-appender-slimmer-05f487d7.js} +1 -1
  139. package/dist/esm/{event-emit-slimmer-18711776.js → event-emit-slimmer-1c57093d.js} +1 -1
  140. package/dist/esm/{form-field-controller-slimmer-9a0f8c54.js → form-field-controller-slimmer-ae8478b5.js} +2 -2
  141. package/dist/esm/{image-annotation-action-2d87b66a.js → image-annotation-action-bad7c565.js} +3 -3
  142. package/dist/esm/{immutable-map-612922a2.js → immutable-map-4fe22b11.js} +16 -4
  143. package/dist/esm/index.js +9 -9
  144. package/dist/esm/{internal-vega-event-manager-bed71930.js → internal-vega-event-manager-7cdf3c28.js} +2 -1
  145. package/dist/esm/loader.js +9 -9
  146. package/dist/esm/{public-rules-a61ff09f.js → public-rules-f54e6f39.js} +4 -4
  147. package/dist/esm/{range-d9e55d00.js → range-f32f9185.js} +1 -1
  148. package/dist/esm/{rich-text-editor-required-rule-6a4c853a.js → rich-text-editor-required-rule-627fd7e4.js} +1 -1
  149. package/dist/esm/{split-cell-operation-2e700c5c.js → split-cell-operation-90c30861.js} +3 -3
  150. package/dist/esm/{string-input-formatter-slimmer-ad234bec.js → string-input-formatter-slimmer-4059080b.js} +2 -2
  151. package/dist/esm/{sub-state-notify-slimmer-1f907173.js → sub-state-notify-slimmer-63ecb465.js} +1 -1
  152. package/dist/esm/{sub-state-observer-slimmer-090c500a.js → sub-state-observer-slimmer-2adbbe00.js} +1 -1
  153. package/dist/esm/{token-extension-d3a46c04.js → token-extension-728c0678.js} +282 -224
  154. package/dist/esm/vega-accordion.entry.js +3 -3
  155. package/dist/esm/vega-app-header-button.entry.js +4 -4
  156. package/dist/esm/vega-banner.entry.js +3 -3
  157. package/dist/esm/vega-breadcrumb.entry.js +4 -4
  158. package/dist/esm/vega-button-circle.entry.js +5 -5
  159. package/dist/esm/vega-button-group_2.entry.js +7 -7
  160. package/dist/esm/vega-button-link.entry.js +4 -4
  161. package/dist/esm/vega-button.entry.js +5 -5
  162. package/dist/esm/vega-calendar_4.entry.js +11 -10
  163. package/dist/esm/vega-carousel.entry.js +3 -3
  164. package/dist/esm/vega-checkbox_2.entry.js +7 -7
  165. package/dist/esm/vega-chip.entry.js +4 -4
  166. package/dist/esm/vega-code-block.entry.js +8 -8
  167. package/dist/esm/vega-color-picker.entry.js +6 -6
  168. package/dist/esm/vega-color-swatch-picker.entry.js +192 -50
  169. package/dist/esm/vega-color-swatch.entry.js +7 -7
  170. package/dist/esm/vega-combo-box.entry.js +7 -7
  171. package/dist/esm/vega-date-picker_2.entry.js +24 -12
  172. package/dist/esm/vega-dialog_2.entry.js +7 -7
  173. package/dist/esm/vega-dropdown_5.entry.js +9 -9
  174. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  175. package/dist/esm/{vega-event-id-5841d1d3.js → vega-event-id-a6ccca66.js} +2 -1
  176. package/dist/esm/vega-field-label.entry.js +3 -3
  177. package/dist/esm/vega-file-uploader.entry.js +6 -6
  178. package/dist/esm/vega-form.entry.js +9 -9
  179. package/dist/esm/vega-image-uploader.entry.js +7 -7
  180. package/dist/esm/vega-input-credit-card.entry.js +7 -7
  181. package/dist/esm/vega-input-numeric.entry.js +8 -8
  182. package/dist/esm/vega-input-passcode.entry.js +7 -7
  183. package/dist/esm/vega-input-phone-number.entry.js +18 -8
  184. package/dist/esm/vega-input-range.entry.js +7 -7
  185. package/dist/esm/vega-input-select.entry.js +7 -7
  186. package/dist/esm/vega-input.entry.js +8 -8
  187. package/dist/esm/{vega-internal-event-id-194bac82.js → vega-internal-event-id-db974a0d.js} +1 -1
  188. package/dist/esm/vega-item-toggle.entry.js +3 -3
  189. package/dist/esm/vega-left-nav_5.entry.js +18 -16
  190. package/dist/esm/vega-page-notification_2.entry.js +1 -1
  191. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +4 -4
  192. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +2 -2
  193. package/dist/esm/vega-pagination.entry.js +5 -5
  194. package/dist/esm/vega-popover_2.entry.js +6 -6
  195. package/dist/esm/vega-progress-tracker_2.entry.js +6 -6
  196. package/dist/esm/vega-radio_2.entry.js +7 -7
  197. package/dist/esm/vega-rich-text-content.entry.js +7 -7
  198. package/dist/esm/vega-rich-text-editor_4.entry.js +15 -15
  199. package/dist/esm/vega-rich-text-table-properties_3.entry.js +7 -7
  200. package/dist/esm/vega-segment-control.entry.js +3 -3
  201. package/dist/esm/vega-selection-chip_2.entry.js +8 -8
  202. package/dist/esm/vega-selection-tile_2.entry.js +165 -32
  203. package/dist/esm/vega-sidenav_3.entry.js +6 -6
  204. package/dist/esm/vega-signature-capture.entry.js +6 -6
  205. package/dist/esm/vega-stepper.entry.js +7 -7
  206. package/dist/esm/vega-tab-group_2.entry.js +4 -4
  207. package/dist/esm/vega-table_11.entry.js +1175 -285
  208. package/dist/esm/vega-textarea.entry.js +7 -7
  209. package/dist/esm/vega-time-picker_2.entry.js +13 -19
  210. package/dist/esm/vega-toggle-switch.entry.js +6 -6
  211. package/dist/esm/vega-tooltip_2.entry.js +2 -2
  212. package/dist/esm/vega.js +9 -9
  213. package/dist/esm/{wait-for-component-did-render-30cde59c.js → wait-for-component-did-render-9a83d343.js} +1 -1
  214. package/dist/sri/vega-sri-manifest.json +276 -276
  215. package/dist/types/components/vega-color-swatch/vega-color-swatch-picker/slimmers/renderers/color-swatch-picker-renderer.d.ts +9 -0
  216. package/dist/types/components/vega-color-swatch/vega-color-swatch-picker/vega-color-swatch-picker.d.ts +6 -0
  217. package/dist/types/components/vega-color-swatch/vega-color-swatch.d.ts +4 -4
  218. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/slimmers/renderers/vega-date-picker-month-item-renderer.d.ts +1 -0
  219. package/dist/types/components/vega-date-picker/vega-date-picker-calendar/vega-date-picker-calendar.d.ts +8 -0
  220. package/dist/types/components/vega-input-phone-number/vega-input-phone-number.d.ts +2 -0
  221. package/dist/types/components/vega-nav/vega-left-nav/slimmers/controllers/vega-left-nav-backdrop-controller.d.ts +2 -1
  222. package/dist/types/components/vega-rich-text-editor/extensions/base-toolbar-button-renderer.d.ts +2 -0
  223. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-dynamic-popover-renderer.d.ts +15 -11
  224. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-renderer.d.ts +15 -0
  225. package/dist/types/components/vega-rich-text-editor/extensions/table/renderers/table-setting-popover-renderer.d.ts +25 -22
  226. package/dist/types/components/vega-rich-text-editor/interface.d.ts +5 -0
  227. package/dist/types/components/vega-selection-tile/slimmers/renderers/vega-selection-tile-renderer.d.ts +12 -0
  228. package/dist/types/components/vega-selection-tile/vega-selection-tile-group/slimmers/renderers/vega-selection-tile-group-renderer.d.ts +0 -1
  229. package/dist/types/components/vega-selection-tile/vega-selection-tile.d.ts +2 -0
  230. package/dist/types/components/vega-table/interface.d.ts +2 -0
  231. package/dist/types/components/vega-table/slimmers/controllers/vega-table-expand-row-controller.d.ts +35 -0
  232. package/dist/types/components/vega-table/slimmers/controllers/vega-table-row-draggable-controller.d.ts +52 -0
  233. package/dist/types/components/vega-table/slimmers/controllers/vega-table-sort-controller.d.ts +4 -0
  234. package/dist/types/components/vega-table/slimmers/renderers/vega-table-body-renderer.d.ts +3 -1
  235. package/dist/types/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.d.ts +2 -1
  236. package/dist/types/components/vega-table/utils.d.ts +3 -2
  237. package/dist/types/components/vega-table/vega-table-expand-row/slimmers/controllers/vega-table-expand-row-col-span-controller.d.ts +5 -0
  238. package/dist/types/components/vega-table/vega-table-expand-row/slimmers/controllers/vega-table-expand-row-state-controller.d.ts +1 -0
  239. package/dist/types/components/vega-table/vega-table-expand-row/vega-table-expand-row.d.ts +2 -0
  240. package/dist/types/components/vega-table/vega-table-foot-row/slimmers/controllers/vega-table-foot-row-state-controller.d.ts +2 -1
  241. package/dist/types/components/vega-table/vega-table-foot-row/slimmers/renderers/vega-table-foot-row-renderer.d.ts +3 -1
  242. package/dist/types/components/vega-table/vega-table-foot-row/vega-table-foot-row.d.ts +6 -2
  243. package/dist/types/components/vega-table/vega-table-head/vega-table-head.d.ts +1 -0
  244. package/dist/types/components/vega-table/vega-table-head-row/slimmers/controllers/vega-table-head-row-state-controller.d.ts +2 -1
  245. package/dist/types/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.d.ts +3 -1
  246. package/dist/types/components/vega-table/vega-table-head-row/vega-table-head-row.d.ts +6 -2
  247. package/dist/types/components/vega-table/vega-table-row/slimmers/controllers/vega-table-row-state-controller.d.ts +3 -0
  248. package/dist/types/components/vega-table/vega-table-row/slimmers/renderers/vega-table-row-renderer.d.ts +3 -0
  249. package/dist/types/components/vega-table/vega-table-row/vega-table-row.d.ts +8 -0
  250. package/dist/types/components/vega-table/vega-table.d.ts +40 -5
  251. package/dist/types/components/vega-time-picker/vega-time-picker.d.ts +5 -11
  252. package/dist/types/components.d.ts +47 -12
  253. package/dist/types/constants/ui.d.ts +1 -1
  254. package/dist/types/global/icons/grip-dots-vertical.d.ts +3 -0
  255. package/dist/types/helpers/event-manager/event-id/vega-event-id.d.ts +1 -0
  256. package/dist/types/helpers/immutable/immutable-map.d.ts +4 -1
  257. package/dist/types/helpers/slimmers/draggable-element-slimmer.d.ts +260 -0
  258. package/dist/types/helpers/slimmers/popover-nested-slot-projection-slimmer.d.ts +65 -0
  259. package/dist/types/types/components.type.d.ts +2 -0
  260. package/dist/types/types/public-api.d.ts +2 -0
  261. package/dist/types/types/ui.type.d.ts +40 -0
  262. package/dist/vega/index.esm.js +1 -1
  263. package/dist/vega/{p-d3ed7c27.entry.js → p-0b5b0fd2.entry.js} +1 -1
  264. package/dist/vega/p-13e7f906.entry.js +1 -0
  265. package/dist/vega/{p-39b71df9.entry.js → p-23b38467.entry.js} +1 -1
  266. package/dist/vega/{p-8d833b44.entry.js → p-25572ea7.entry.js} +1 -1
  267. package/dist/vega/{p-03cf2df1.entry.js → p-268e84e0.entry.js} +1 -1
  268. package/dist/vega/p-2edc066c.entry.js +1 -0
  269. package/dist/vega/{p-5bbb3e68.entry.js → p-2fb26f4f.entry.js} +1 -1
  270. package/dist/vega/{p-032183c1.js → p-33234385.js} +1 -1
  271. package/dist/vega/{p-c0323a55.entry.js → p-35d77c9c.entry.js} +1 -1
  272. package/dist/vega/{p-5ac4649a.entry.js → p-3c456e91.entry.js} +1 -1
  273. package/dist/vega/{p-27b1dc0f.entry.js → p-3d0ba2c6.entry.js} +1 -1
  274. package/dist/vega/{p-20f0060f.entry.js → p-3d92d2af.entry.js} +1 -1
  275. package/dist/vega/{p-4123559f.entry.js → p-3e64fa38.entry.js} +1 -1
  276. package/dist/vega/{p-f986f875.entry.js → p-411ea209.entry.js} +1 -1
  277. package/dist/vega/{p-7cf1e1f7.entry.js → p-423762ae.entry.js} +1 -1
  278. package/dist/vega/{p-0f31b00b.entry.js → p-4530f0e1.entry.js} +1 -1
  279. package/dist/vega/{p-b28d4f7d.js → p-48e3be6a.js} +1 -1
  280. package/dist/vega/{p-753a7832.entry.js → p-4afafeb3.entry.js} +1 -1
  281. package/dist/vega/{p-c6837173.entry.js → p-4c90d013.entry.js} +1 -1
  282. package/dist/vega/p-5087fa1e.entry.js +1 -0
  283. package/dist/vega/{p-7595ad55.js → p-51b2b3de.js} +1 -1
  284. package/dist/vega/{p-bc2786f9.entry.js → p-59c6dcf7.entry.js} +1 -1
  285. package/dist/vega/p-5e50dbb9.js +1 -0
  286. package/dist/vega/p-5f377954.js +1 -1
  287. package/dist/vega/{p-e5546af5.entry.js → p-606d7113.entry.js} +1 -1
  288. package/dist/vega/{p-6f790577.js → p-6817b9bd.js} +1 -1
  289. package/dist/vega/{p-84030271.entry.js → p-69c11b7b.entry.js} +1 -1
  290. package/dist/vega/{p-effa6495.js → p-6b5cb920.js} +1 -1
  291. package/dist/vega/{p-aa985d73.js → p-6c43d54a.js} +1 -1
  292. package/dist/vega/{p-0e15fa94.entry.js → p-6fadee27.entry.js} +1 -1
  293. package/dist/vega/{p-549bea2c.entry.js → p-73c6669e.entry.js} +1 -1
  294. package/dist/vega/{p-9375fbce.js → p-7730bace.js} +1 -1
  295. package/dist/vega/{p-88f57353.entry.js → p-79c12a64.entry.js} +1 -1
  296. package/dist/vega/{p-f8c700dd.entry.js → p-7f74cd41.entry.js} +1 -1
  297. package/dist/vega/p-818da356.js +1 -0
  298. package/dist/vega/{p-aa040383.js → p-84eb3b9c.js} +1 -1
  299. package/dist/vega/{p-b48b3264.js → p-8d48940d.js} +1 -1
  300. package/dist/vega/{p-a5e6a3be.js → p-93afdfc3.js} +1 -1
  301. package/dist/vega/{p-865fc90b.entry.js → p-98a6cd8e.entry.js} +1 -1
  302. package/dist/vega/p-9af0e2e7.js +1 -0
  303. package/dist/vega/{p-f6414a24.entry.js → p-9e2b7718.entry.js} +1 -1
  304. package/dist/vega/{p-e1b1f5f9.entry.js → p-9eb00537.entry.js} +1 -1
  305. package/dist/vega/{p-f0e855b2.entry.js → p-9f36abf9.entry.js} +1 -1
  306. package/dist/vega/{p-b88eab9a.entry.js → p-9fc8bd1f.entry.js} +1 -1
  307. package/dist/vega/{p-9308f874.entry.js → p-a050c24d.entry.js} +1 -1
  308. package/dist/vega/{p-aa4d419c.entry.js → p-a49c25c2.entry.js} +1 -1
  309. package/dist/vega/{p-1df2c29b.entry.js → p-a9528dbd.entry.js} +1 -1
  310. package/dist/vega/{p-0caf52e0.js → p-a9e10a64.js} +1 -1
  311. package/dist/vega/p-a9f34735.entry.js +1 -0
  312. package/dist/vega/{p-3ae5f50e.entry.js → p-aaf44879.entry.js} +1 -1
  313. package/dist/vega/{p-6cada843.js → p-ae1aa4df.js} +1 -1
  314. package/dist/vega/p-af00e6e2.entry.js +1 -0
  315. package/dist/vega/{p-a0c3968b.js → p-af5cb9bc.js} +1 -1
  316. package/dist/vega/{p-d6c9ef6c.entry.js → p-afd1b519.entry.js} +1 -1
  317. package/dist/vega/{p-5490d499.entry.js → p-bc74d7e7.entry.js} +1 -1
  318. package/dist/vega/{p-6ba71ec4.entry.js → p-c2388937.entry.js} +1 -1
  319. package/dist/vega/p-c31a32f4.js +1 -0
  320. package/dist/vega/{p-11a2f834.js → p-c347e08a.js} +1 -1
  321. package/dist/vega/{p-91739ed3.entry.js → p-c51ebb14.entry.js} +1 -1
  322. package/dist/vega/{p-b80217fa.entry.js → p-c601b331.entry.js} +1 -1
  323. package/dist/vega/{p-d3864b94.entry.js → p-c8fe46fd.entry.js} +1 -1
  324. package/dist/vega/p-ce61d23f.entry.js +1 -0
  325. package/dist/vega/{p-d76e3b3c.entry.js → p-cf2838c7.entry.js} +1 -1
  326. package/dist/vega/{p-e4c5b8d1.entry.js → p-d37636a5.entry.js} +1 -1
  327. package/dist/vega/{p-19e10a87.entry.js → p-d402eb7b.entry.js} +1 -1
  328. package/dist/vega/{p-dec5b448.js → p-d4e519a0.js} +1 -1
  329. package/dist/vega/{p-ce975c69.entry.js → p-da8bb883.entry.js} +1 -1
  330. package/dist/vega/{p-68a96fbb.entry.js → p-dffbbc3d.entry.js} +1 -1
  331. package/dist/vega/{p-bdddddb7.js → p-e1709e59.js} +1 -1
  332. package/dist/vega/{p-c47c37f2.js → p-e27626f6.js} +1 -1
  333. package/dist/vega/{p-6236f592.entry.js → p-e47b2c4c.entry.js} +1 -1
  334. package/dist/vega/{p-7dca19d3.entry.js → p-e95cb28f.entry.js} +1 -1
  335. package/dist/vega/{p-74136508.entry.js → p-ecbb63a5.entry.js} +1 -1
  336. package/dist/vega/p-ed26f4c8.entry.js +1 -0
  337. package/dist/vega/{p-43aaeb30.entry.js → p-effb285f.entry.js} +1 -1
  338. package/dist/vega/p-f1c672e4.js +1 -0
  339. package/dist/vega/{p-56c28943.js → p-f5f5a0d9.js} +1 -1
  340. package/dist/vega/{p-748268e6.entry.js → p-f604f2c9.entry.js} +1 -1
  341. package/dist/vega/{p-e5cc839a.entry.js → p-fa91805b.entry.js} +1 -1
  342. package/dist/vega/vega.esm.js +1 -1
  343. package/package.json +1 -1
  344. package/dist/vega/p-220f8ee7.js +0 -1
  345. package/dist/vega/p-38af89b9.js +0 -1
  346. package/dist/vega/p-5215e1d8.entry.js +0 -1
  347. package/dist/vega/p-5409275a.entry.js +0 -1
  348. package/dist/vega/p-5f23c52d.entry.js +0 -1
  349. package/dist/vega/p-7dbaed6c.entry.js +0 -1
  350. package/dist/vega/p-80cb302f.entry.js +0 -1
  351. package/dist/vega/p-874bf8b2.js +0 -1
  352. package/dist/vega/p-99670c56.entry.js +0 -1
  353. package/dist/vega/p-9de25451.js +0 -1
  354. package/dist/vega/p-a2d6d695.entry.js +0 -1
  355. package/dist/vega/p-b78eaec4.js +0 -1
@@ -6,16 +6,19 @@ import { RowOperationEventHandler } from '../setting-event-handlers/row-operatio
6
6
  import { CaptionOperationEventHandler } from '../setting-event-handlers/caption-operation';
7
7
  import { ColumnOperationEventHandler } from '../setting-event-handlers/column-operation';
8
8
  import { DomNodeSubjectObserverFactory } from '../../../../../helpers/change-manager/subject/dom-node-subject/dom-node-subject-observer-factory';
9
- import { VegaPopoverHide, VegaPopoverShow, } from '../../../../../helpers/event-manager/event-id/vega-event-id';
9
+ import { VegaPopoverShow } from '../../../../../helpers/event-manager/event-id/vega-event-id';
10
+ import { TableDynamicPopoverRenderer } from './table-dynamic-popover-renderer';
10
11
  import { MergeCellsOperationEventHandler } from '../setting-event-handlers/merge-cells-operation';
11
12
  import { SplitCellOperationEventHandler } from '../setting-event-handlers/split-cell-operation';
12
13
  import { TablePopoverBaseRenderer } from './table-popover-base-renderer';
14
+ import { RTETableColorManager } from '../utils/table-color-manager';
15
+ import { tryGetDocument } from '../../../../../utils/try-get-document';
13
16
  /**
14
- * Centralizes the popover rendering and interaction logic for table settings.
17
+ * Shared popover renderer for table settings.
15
18
  */
16
19
  export class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
17
- constructor() {
18
- super(...arguments);
20
+ constructor(renderContext) {
21
+ super(renderContext);
19
22
  this.settingHandlers = [
20
23
  new RowOperationEventHandler(),
21
24
  new CaptionOperationEventHandler(),
@@ -24,38 +27,38 @@ export class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
24
27
  new SplitCellOperationEventHandler(),
25
28
  ];
26
29
  /**
27
- * Show table setting popover when table is clicked.
28
- * Only the popover belonging to the nearest table will be shown,
29
- * which avoids outer tables showing their popover when an inner (nested) table is clicked.
30
+ * Re-targets and shows the table setting popover for the clicked table.
30
31
  *
31
- * @param {MouseEvent} event - The MouseEvent that triggered the table action
32
- * @param {HTMLElement} trigger - The element that can triggered the popover open.
32
+ * @param {MouseEvent} event - The MouseEvent that triggered the click.
33
+ * @param {RTETableBlock} tableBlock - The clicked table's block data.
34
+ * @param {() => HTMLElement} getTableRef - Getter for the clicked table's DOM element.
33
35
  */
34
- this.handleTableClick = (event, trigger) => {
36
+ this.handleTableClick = (event, tableBlock, getTableRef) => {
35
37
  const target = event.target;
36
38
  const ownTrigger = target.closest('table');
37
- if (trigger !== ownTrigger) {
38
- void this.popoverRef.hide();
39
- void this.tableDynamicPopover.hide();
39
+ if (ownTrigger !== getTableRef()) {
40
40
  return;
41
41
  }
42
+ // Prevent the click from bubbling to ancestor tables. When this is a nested
43
+ // table click, the ancestor table still has the popover's stale click
44
+ // listener attached (from when it was the popover's target), which would
45
+ // toggle the popover off immediately after we show it.
46
+ event.stopPropagation();
47
+ this.reTarget(tableBlock, getTableRef);
42
48
  void this.tableDynamicPopover.hide();
43
- if (!this.popoverShow) {
44
- remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), ownTrigger);
45
- void this.popoverRef.show();
46
- }
49
+ remoteInvocationRegistry.call(domNodeSubjectFactory.getSubject(this.popoverRef, VegaInternalPopoverUpdateTarget), ownTrigger);
50
+ void this.popoverRef.show(true);
47
51
  };
48
52
  /**
49
53
  * Sync the selected cells from the table selection to the table setting component.
50
54
  */
51
55
  this.syncSelectedCells = () => {
52
56
  if (this.tableSettingRef) {
53
- const selectedCells = this.getTableSelectedCells();
54
- this.tableSettingRef.selectedCells = selectedCells;
57
+ this.tableSettingRef.selectedCells = this.getTableSelectedCells();
55
58
  }
56
59
  };
57
60
  /**
58
- * Receive setting menu click events.
61
+ * Handles setting menu click events.
59
62
  *
60
63
  * @param {CustomEvent<Array<string>>} event - The custom event emitted from the setting menu.
61
64
  */
@@ -63,7 +66,7 @@ export class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
63
66
  const handler = this.settingHandlers.find((handler) => handler.canHandle(event.detail));
64
67
  if (handler) {
65
68
  const extensionContext = this.getTableExtensionContext();
66
- extensionContext && handler.execute(event.detail, extensionContext, this.tableData);
69
+ extensionContext && handler.execute(event.detail, extensionContext, this.tableBlock);
67
70
  if (event.detail[0] === TableSettingType.CAPTION) {
68
71
  this.updateTableSettingCaption();
69
72
  }
@@ -78,59 +81,69 @@ export class TableSettingPopoverRenderer extends TablePopoverBaseRenderer {
78
81
  */
79
82
  this.handleTableSettingPopoverShow = () => {
80
83
  this.syncSelectedCells();
81
- this.popoverShow = true;
82
84
  };
85
+ this.tableDynamicPopover = new TableDynamicPopoverRenderer(RTETableColorManager.getTableColors(), renderContext);
83
86
  }
84
87
  /**
85
- * Render the popover host and inject the table-setting component with refs wired up.
86
- *
87
- * @param {VegaRTECreateElementFunction} h - The create element function.
88
- * @param {RTETableBlock} renderData - The table block to render.
89
- * @param {() => HTMLElement} getTableRef - Current table DOM reference
90
- * @param {TableDynamicPopoverRenderer} tableDynamicPopover - Renderer used to show
91
- * the secondary table popover (for example, table-properties-specific settings).
92
- * @returns {VegaRTERenderResult} The rendered popover structure.
88
+ * Destroys the dynamic popover renderer and removes the container from the DOM.
93
89
  */
94
- render(h, renderData, getTableRef, tableDynamicPopover) {
95
- this.tableData = renderData;
96
- this.tableDynamicPopover = tableDynamicPopover;
97
- return h('vega-popover', {
98
- trigger: 'click',
99
- isScreenPosition: true,
100
- class: 'rte-table-setting-popover',
101
- // eslint-disable-next-line jsdoc/require-jsdoc
102
- ref: (popover) => {
103
- this.popoverRef = popover;
104
- if (this.popoverRef) {
105
- DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverShow, this.handleTableSettingPopoverShow);
106
- DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverHide, () => (this.popoverShow = false));
107
- }
108
- },
109
- }, [
110
- h('div', { slot: 'popover' }, [
111
- h('vega-rich-text-table-setting', {
112
- // eslint-disable-next-line jsdoc/require-jsdoc
113
- ref: (ref) => {
114
- this.tableSettingRef = ref;
115
- if (ref) {
116
- ref.target = getTableRef();
117
- }
118
- },
119
- selectedCells: this.getTableSelectedCells(),
120
- onVegaClick: this.handleSettingMenuClick,
121
- }),
122
- ]),
123
- ]);
90
+ destroy() {
91
+ this.tableDynamicPopover.destroy();
92
+ if (this.popoverContainer) {
93
+ this.popoverContainer.remove();
94
+ }
95
+ }
96
+ /**
97
+ * Builds the popover DOM and appends it to the RTE host. Idempotent: subsequent calls are no-ops.
98
+ */
99
+ render() {
100
+ const safeDocument = tryGetDocument();
101
+ if (safeDocument && this.renderContext) {
102
+ this.popoverContainer = safeDocument.createElement('div');
103
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
104
+ this.renderContext.host.appendChild(this.popoverContainer);
105
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
106
+ const tableCellPopover = this.tableDynamicPopover.render();
107
+ const popover = safeDocument.createElement('vega-popover');
108
+ popover.trigger = 'click';
109
+ popover.isScreenPosition = true;
110
+ popover.className = 'rte-table-setting-popover';
111
+ DomNodeSubjectObserverFactory.addUniqueObserverToNode(popover, VegaPopoverShow, this.handleTableSettingPopoverShow);
112
+ const slotDiv = safeDocument.createElement('div');
113
+ slotDiv.setAttribute('slot', 'popover');
114
+ const tableSetting = safeDocument.createElement('vega-rich-text-table-setting');
115
+ tableSetting.addEventListener('vegaClick', this.handleSettingMenuClick);
116
+ slotDiv.appendChild(tableSetting);
117
+ popover.appendChild(slotDiv);
118
+ this.popoverContainer.appendChild(popover);
119
+ this.popoverContainer.appendChild(tableCellPopover);
120
+ this.popoverRef = popover;
121
+ this.tableSettingRef = tableSetting;
122
+ }
124
123
  }
125
124
  /**
126
- * Updates the table setting component caption state to match the given table data.
125
+ * Updates the table setting component caption state to match the current table data.
127
126
  */
128
127
  updateTableSettingCaption() {
129
- const hasCaption = this.tableData.hasCaption();
128
+ const hasCaption = this.tableBlock.hasCaption();
130
129
  if (this.tableSettingRef && this.tableSettingRef.hasCaption !== hasCaption) {
131
130
  this.tableSettingRef.hasCaption = hasCaption;
132
131
  }
133
132
  }
133
+ /**
134
+ * Re-targets the shared popovers to the given table.
135
+ *
136
+ * @param {RTETableBlock} tableBlock - The clicked table's block data.
137
+ * @param {() => HTMLElement} getTableRef - Getter for the clicked table's DOM element.
138
+ */
139
+ reTarget(tableBlock, getTableRef) {
140
+ if (this.tableSettingRef) {
141
+ this.tableBlock = tableBlock;
142
+ this.tableSettingRef.target = getTableRef();
143
+ this.tableSettingRef.selectedCells = this.getTableSelectedCells();
144
+ this.tableDynamicPopover.reTarget(tableBlock, getTableRef);
145
+ }
146
+ }
134
147
  /**
135
148
  * Collects and returns the currently selected table cells.
136
149
  *
@@ -138,6 +138,7 @@ export class VegaRTETableExtension extends VegaRTEExtension {
138
138
  * @inheritDoc
139
139
  */
140
140
  destroyExtension() {
141
+ this.tableBlockRenderer.destroy();
141
142
  this.tableSelection.destroy();
142
143
  }
143
144
  }
@@ -18,6 +18,7 @@ export class RTETableToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer
18
18
  return createTablePopoverRenderer.render(h, super.renderButton(h, editorContext, {
19
19
  showArrowIcon: true,
20
20
  icon: 'rte-table',
21
+ tooltip: { text: 'Insert table' },
21
22
  }));
22
23
  }
23
24
  /**
@@ -20,7 +20,11 @@ export class RTETokenToolbarButtonRenderer extends VegaRTEToolbarButtonRenderer
20
20
  */
21
21
  render(createElement, editorContext) {
22
22
  return this.renderDropdown(createElement, editorContext, {}, [
23
- this.renderButton(createElement, editorContext, { label: 'Tokens', showArrowIcon: true }),
23
+ this.renderButton(createElement, editorContext, {
24
+ label: 'Tokens',
25
+ showArrowIcon: true,
26
+ tooltip: { text: 'Insert token' },
27
+ }),
24
28
  this.renderDropdownListTemplate(createElement, this.tokenList),
25
29
  ]);
26
30
  }
@@ -6,25 +6,83 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
6
6
  };
7
7
  import { h } from '@stencil/core';
8
8
  import { MapToComponentField, VegaSlimmer } from 'vega-slimmer/core';
9
- import { createEnterKeyHandlerToTriggerClick } from '../../../../utils/accessibility';
10
9
  export class VegaSelectionTileRenderer extends VegaSlimmer {
10
+ constructor() {
11
+ super(...arguments);
12
+ /**
13
+ * Activation handler invoked from the host's `@Listen('click')` listener
14
+ * (registered on the host element itself). The host carries
15
+ * `role="radio"`/`"checkbox"`, `tabindex`, and the activation listeners,
16
+ * so this is the only interactive node per tile. VoiceOver's VO+Space
17
+ * dispatches a synthetic click on the focused host, which reaches this
18
+ * function through `VegaSelectionTile.onHostClick()`.
19
+ */
20
+ this.activate = () => {
21
+ if (this.disabled) {
22
+ return;
23
+ }
24
+ if (!(this.selectType === 'radio' && this.checked)) {
25
+ this.checkedController.onCheck(!this.checked);
26
+ }
27
+ };
28
+ this.handleTileKeydown = (event) => {
29
+ if (this.disabled) {
30
+ return;
31
+ }
32
+ // eslint-disable-next-line spellcheck/spell-checker
33
+ if (event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar') {
34
+ event.preventDefault();
35
+ this.activate();
36
+ }
37
+ };
38
+ }
11
39
  getSelectorContainerRef() {
12
40
  return this.selectorContainerRef;
13
41
  }
42
+ // Accessible name for the host's `aria-label`. Public because the
43
+ // component renders the host and needs to call this to compute the
44
+ // host's `aria-label` value (see `VegaSelectionTile.render`).
45
+ //
46
+ // Fallback chain: titleText (+ note) → trimmed host light-DOM text
47
+ // (covers `content`/`prefix` slots) → `value`. `note` is appended so
48
+ // VoiceOver announces both the title and the supporting line
49
+ // (e.g. "Basic Plan, $9 / month") when traversing tiles with VO+→/VO+←;
50
+ // the visual subtree is `aria-hidden`, so without this the note would
51
+ // never reach the accessibility tree.
52
+ //
53
+ // The parent group's label is intentionally NOT prepended here: the
54
+ // group renderer exposes its label as an independently focusable AT
55
+ // stop, so duplicating it on every tile would make AT users hear the
56
+ // group label N+1 times.
57
+ getAccessibleName() {
58
+ if (this.titleText) {
59
+ return this.note ? `${this.titleText}, ${this.note}` : this.titleText;
60
+ }
61
+ // Prefer `innerText` so adjacent inline/block elements are separated
62
+ // by whitespace (e.g. `<div>Pro Plan<span>Popular</span></div>` reads
63
+ // as "Pro Plan Popular" instead of "Pro PlanPopular" from raw
64
+ // `textContent` concatenation). Fall back to `textContent` for
65
+ // environments (e.g. jsdom) that do not implement `innerText`, and
66
+ // to `''` to satisfy the `string | null` type of `textContent`.
67
+ const raw = this.host.innerText || this.host.textContent || '';
68
+ const slotText = raw.replace(/\s+/g, ' ').trim();
69
+ return slotText || this.value || '';
70
+ }
14
71
  render() {
72
+ // ARIA semantics (role/aria-*), focus (tabindex), and activation
73
+ // handlers live on the COMPONENT HOST (see `VegaSelectionTile.render`
74
+ // and the `@Listen('click')`/`@Listen('keydown')` methods on the
75
+ // component class), not on this inner element. Keeping role + tabindex
76
+ // off this element is what prevents Firefox/VoiceOver from triple-
77
+ // announcing each tile (host group wrapper + inner role=radio + host
78
+ // close). This element is now purely a layout/styling wrapper.
15
79
  return (h("vega-flex", { "align-items": "start", "justify-content": "start", gap: "size-16", class: {
16
80
  'selection-tile': true,
17
81
  'disabled': this.disabled,
18
82
  'checked': this.checked,
19
83
  'error': this.showError,
20
- }, "aria-label": this.titleText || 'No label defined', tabIndex: this.disabled ? -1 : 0,
21
- /* eslint-disable-next-line react/jsx-no-bind */
22
- onClick: () => {
23
- if (!(this.selectType === 'radio' && this.checked)) {
24
- this.checkedController.onCheck(!this.checked);
25
- }
26
- }, onKeyDown: createEnterKeyHandlerToTriggerClick() },
27
- h("div", { class: "vega-flex-grow" }, this.renderContent()),
84
+ } },
85
+ h("div", { class: "vega-flex-grow", "aria-hidden": "true" }, this.renderContent()),
28
86
  this.renderSelect()));
29
87
  }
30
88
  renderContent() {
@@ -51,7 +109,7 @@ export class VegaSelectionTileRenderer extends VegaSlimmer {
51
109
  this.note && h("div", { class: "selection-tile-note" }, this.note)));
52
110
  }
53
111
  renderSelect() {
54
- return (h("vega-flex", { "align-items": "start", class: "vega-flex-shrink-0 selection-tile-select", ref: (ref) => (this.selectorContainerRef = ref) }, this.selectType === 'checkbox' ? this.renderCheckbox() : this.renderRadio()));
112
+ return (h("vega-flex", Object.assign({ "align-items": "start", class: "vega-flex-shrink-0 selection-tile-select", "aria-hidden": "true" }, { inert: true }, { ref: (ref) => (this.selectorContainerRef = ref) }), this.selectType === 'checkbox' ? this.renderCheckbox() : this.renderRadio()));
55
113
  }
56
114
  renderCheckbox() {
57
115
  return h("vega-checkbox", { size: "small", disabled: this.disabled, checked: this.checked });
@@ -90,6 +148,9 @@ __decorate([
90
148
  __decorate([
91
149
  MapToComponentField()
92
150
  ], VegaSelectionTileRenderer.prototype, "showError", void 0);
151
+ __decorate([
152
+ MapToComponentField()
153
+ ], VegaSelectionTileRenderer.prototype, "value", void 0);
93
154
  __decorate([
94
155
  MapToComponentField()
95
156
  ], VegaSelectionTileRenderer.prototype, "checkedController", void 0);
@@ -17,16 +17,37 @@ export class VegaSelectionTileGroupRenderer extends VegaSlimmer {
17
17
  this.renderHint()));
18
18
  }
19
19
  renderLabel() {
20
- return (this.label && (h("div", { class: "vega-label" },
21
- h("label", { "aria-label": this.label },
22
- this.label,
23
- this.renderRequire()))));
20
+ return (this.label && (
21
+ // The label is exposed as its own focusable VoiceOver stop:
22
+ // `tabindex="0"` puts it in the tab / VO swipe order, and
23
+ // `aria-label` provides a clean accessible name that includes
24
+ // "required" as a spoken word.
25
+ //
26
+ // The visible text + asterisk are wrapped in an
27
+ // `aria-hidden="true"` span so VoiceOver does not descend into
28
+ // the children and create extra swipe stops on the raw text
29
+ // or the decorative "*" — the `aria-label` above is the
30
+ // single thing AT users hear for this stop.
31
+ h("div", { class: "vega-label" },
32
+ h("span", {
33
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
34
+ tabindex: 0, "aria-label": this.required ? `${this.label} (required)` : this.label },
35
+ h("span", { "aria-hidden": "true" },
36
+ this.label,
37
+ this.renderRequire())))));
24
38
  }
25
39
  renderRequire() {
26
- return this.required && h("span", { class: "vega-require" }, "*");
40
+ return (this.required && (h("span", { class: "vega-require", "aria-hidden": "true" }, "*")));
27
41
  }
28
42
  renderContainer() {
29
- return (h("div", { class: "container", ref: (e) => (this.groupContainerRef = e) },
43
+ return (
44
+ // The container intentionally drops `role="radiogroup"`/`role="group"`
45
+ // (and the group-level `aria-*` attributes those roles would imply)
46
+ // so VoiceOver does not treat the container as a separate stop ahead
47
+ // of the first tile. The group label above is now the single AT
48
+ // stop that announces the group's purpose; child tiles are reached
49
+ // directly after it without a wrapper announcement.
50
+ h("div", { class: "container", ref: (e) => (this.groupContainerRef = e) },
30
51
  h("vega-flex", { direction: this.layout === 'horizontal' ? 'row' : 'col', gap: "size-12" },
31
52
  h("slot", {
32
53
  /* eslint-disable-next-line react/jsx-no-bind */
@@ -39,8 +60,18 @@ export class VegaSelectionTileGroupRenderer extends VegaSlimmer {
39
60
  () => this.itemsController.syncTileArrayAndValue() }))));
40
61
  }
41
62
  renderHint() {
42
- return (this.hint && (h("div", { class: "vega-hint" },
43
- h("label", null, this.hint))));
63
+ return (this.hint && (
64
+ // Mirrors `renderLabel`: the hint is exposed as its own
65
+ // focusable VoiceOver stop after the tile list, so AT users
66
+ // can swipe to it and hear the supporting copy. The visible
67
+ // text is wrapped in an `aria-hidden` span so VO only speaks
68
+ // the `aria-label` once instead of also descending into the
69
+ // child text node.
70
+ h("div", { class: "vega-hint" },
71
+ h("span", {
72
+ // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
73
+ tabindex: 0, "aria-label": this.hint },
74
+ h("span", { "aria-hidden": "true" }, this.hint)))));
44
75
  }
45
76
  }
46
77
  __decorate([
@@ -58,9 +89,6 @@ __decorate([
58
89
  __decorate([
59
90
  MapToComponentField()
60
91
  ], VegaSelectionTileGroupRenderer.prototype, "layout", void 0);
61
- __decorate([
62
- MapToComponentField()
63
- ], VegaSelectionTileGroupRenderer.prototype, "selectType", void 0);
64
92
  __decorate([
65
93
  MapToComponentField()
66
94
  ], VegaSelectionTileGroupRenderer.prototype, "itemsController", void 0);
@@ -55,6 +55,7 @@
55
55
  line-height: 22px;
56
56
  letter-spacing: 0px;
57
57
  margin-bottom: 16px;
58
+ color: rgba(var(--v-text-primary, 32, 54, 69, 1));
58
59
  }
59
60
  @media screen and (min-width: 768px) and (max-width: 1023px) {
60
61
  :host .vega-label {
@@ -83,9 +84,6 @@
83
84
  letter-spacing: 0px;
84
85
  }
85
86
  }
86
- :host .vega-label label {
87
- color: rgba(var(--v-text-primary, 32, 54, 69, 1));
88
- }
89
87
  :host .vega-label .vega-require {
90
88
  color: rgba(var(--v-text-error, 189, 41, 71, 1));
91
89
  margin-left: 4px;
@@ -34,12 +34,6 @@
34
34
  border: 1px solid rgba(var(--v-border-input-field-hover, 115, 160, 190, 1));
35
35
  background-color: rgba(var(--v-bg-tile-hover, 245, 247, 247, 1));
36
36
  }
37
- :host .selection-tile:not(.disabled):focus-visible {
38
- border: 1px solid rgba(var(--v-border-input-field-focus, 19, 98, 226, 1));
39
- background-color: rgba(var(--v-bg-tile, 252, 252, 252, 1));
40
- outline: 2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));
41
- outline-offset: 2px;
42
- }
43
37
  :host .selection-tile:not(.disabled).checked {
44
38
  background-color: rgba(var(--v-bg-tile-selected, 242, 247, 255, 1));
45
39
  border: 2px solid rgba(var(--v-border-tile-selected, 19, 98, 226, 1));
@@ -49,12 +43,6 @@
49
43
  border: 2px solid rgba(var(--v-border-tile-selected-hover, 4, 112, 236, 1));
50
44
  background-color: rgba(var(--v-bg-tile-selected-hover, 229, 239, 255, 1));
51
45
  }
52
- :host .selection-tile:not(.disabled).checked:focus-visible {
53
- border: 2px solid rgba(var(--v-border-tile-selected, 19, 98, 226, 1));
54
- background-color: rgba(var(--v-bg-tile-selected, 242, 247, 255, 1));
55
- outline: 2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));
56
- outline-offset: 2px;
57
- }
58
46
  :host .selection-tile:not(.disabled).error {
59
47
  border: 1px solid rgba(var(--v-border-input-field-danger, 230, 50, 87, 1));
60
48
  background-color: rgba(var(--v-bg-tile, 252, 252, 252, 1));
@@ -63,12 +51,6 @@
63
51
  border: 1px solid rgba(var(--v-border-input-field-danger-hover, 255, 87, 114, 1));
64
52
  background-color: rgba(var(--v-bg-tile-hover, 245, 247, 247, 1));
65
53
  }
66
- :host .selection-tile:not(.disabled).error:focus-visible {
67
- border: 1px solid rgba(var(--v-border-input-field-danger, 230, 50, 87, 1));
68
- background-color: rgba(var(--v-bg-tile, 252, 252, 252, 1));
69
- outline: 2px solid rgba(var(--v-border-color-danger, 230, 50, 87, 1));
70
- outline-offset: 2px;
71
- }
72
54
  :host .selection-tile.disabled {
73
55
  border: 1px solid rgba(var(--v-border-input-field-disabled, 222, 225, 227, 1));
74
56
  background-color: rgba(var(--v-bg-secondary, 245, 247, 247, 1));
@@ -158,4 +140,27 @@
158
140
  :host .selection-tile .selection-tile-select vega-checkbox,
159
141
  :host .selection-tile .selection-tile-select vega-radio {
160
142
  margin-top: 4px;
143
+ }
144
+
145
+ :host(:focus-visible) {
146
+ outline: none;
147
+ }
148
+
149
+ :host(:focus-visible:not([aria-disabled=true])) .selection-tile {
150
+ border: 1px solid rgba(var(--v-border-input-field-focus, 19, 98, 226, 1));
151
+ background-color: rgba(var(--v-bg-tile, 252, 252, 252, 1));
152
+ outline: 2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));
153
+ outline-offset: 2px;
154
+ }
155
+ :host(:focus-visible:not([aria-disabled=true])) .selection-tile.checked {
156
+ border: 2px solid rgba(var(--v-border-tile-selected, 19, 98, 226, 1));
157
+ background-color: rgba(var(--v-bg-tile-selected, 242, 247, 255, 1));
158
+ outline: 2px solid rgba(var(--v-border-color-action, 19, 98, 226, 1));
159
+ outline-offset: 2px;
160
+ }
161
+ :host(:focus-visible:not([aria-disabled=true])) .selection-tile.error {
162
+ border: 1px solid rgba(var(--v-border-input-field-danger, 230, 50, 87, 1));
163
+ background-color: rgba(var(--v-bg-tile, 252, 252, 252, 1));
164
+ outline: 2px solid rgba(var(--v-border-color-danger, 230, 50, 87, 1));
165
+ outline-offset: 2px;
161
166
  }
@@ -70,9 +70,53 @@ export class VegaSelectionTile {
70
70
  */
71
71
  /* eslint-disable-next-line @stencil/strict-mutable */
72
72
  this.selectType = 'radio';
73
+ // Host-level activation listeners are attached via vDOM listeners
74
+ // (`onClick` / `onKeyDown` on the `<Host>` element below). Stencil's
75
+ // vDOM listeners use `addEventListener` under the hood, NOT the
76
+ // `onclick`/`onkeydown` IDL properties, so:
77
+ // 1. A consumer doing `tileEl.onclick = fn` cannot overwrite or
78
+ // remove our listener.
79
+ // 2. A consumer attaching their own `addEventListener('click', ...)`
80
+ // coexists with ours and fires alongside it (DOM event spec).
81
+ // So consumer code can observe / augment activation but cannot silently
82
+ // break it. Only `event.stopImmediatePropagation()` in a handler that
83
+ // runs before ours would suppress it -- an explicit opt-out, not a
84
+ // surprise override.
85
+ this.onHostClick = () => {
86
+ this.renderer.activate();
87
+ };
88
+ this.onHostKeyDown = (event) => {
89
+ this.renderer.handleTileKeydown(event);
90
+ };
73
91
  }
74
92
  render() {
75
- return sanitizeVegaComponent(h(Host, { class: { 'distribute-evenly': this.distributeEvenly } }, this.renderer.render()), this.host);
93
+ // ARIA semantics, focus, and activation handlers ALL live on the host.
94
+ //
95
+ // Why not `role="presentation"` on the host + role on an inner shadow
96
+ // element? Per ARIA 1.2, `role="presentation"`/`role="none"` is dropped
97
+ // ("presentation conflict resolution") whenever the element has any
98
+ // focusable descendants in the flat tree. Putting `tabindex="0"` on an
99
+ // inner shadow element therefore demotes the host's presentation role,
100
+ // and Firefox -- which enforces this rule strictly -- exposes the host
101
+ // as a generic/group wrapper around the inner radio. VoiceOver then
102
+ // triple-announces each tile:
103
+ // 1. "<title>, group" (host wrapper)
104
+ // 2. "<title>, <note>, radio button" (inner role=radio)
105
+ // 3. "end of <title>, group" (host wrapper close)
106
+ // Safari/Chrome happen to flatten the host out, masking the bug.
107
+ // Collapsing role + tabindex + aria-* onto the host eliminates the
108
+ // wrapper entirely -- the host *is* the radio/checkbox.
109
+ //
110
+ // NOTE on the `title` HTML attribute: `@Prop({ attribute: 'title' })
111
+ // titleText` observes the `title` attribute, so we deliberately do
112
+ // NOT pass `title={null}` to the Host -- doing so would strip the
113
+ // attribute at render time, which would then trigger Stencil's
114
+ // attribute observer and wipe `titleText` itself. The HTML `title`
115
+ // attribute stays on the host as a harmless tooltip; the explicit
116
+ // `aria-label` we emit takes precedence as the accessible name per
117
+ // the W3C accessible name computation, so VoiceOver/NVDA announce
118
+ // `aria-label` (which folds in the note line), not the tooltip text.
119
+ return sanitizeVegaComponent(h(Host, { role: this.selectType === 'checkbox' ? 'checkbox' : 'radio', "aria-checked": this.checked ? 'true' : 'false', "aria-disabled": this.disabled ? 'true' : 'false', "aria-label": this.renderer.getAccessibleName() || undefined, tabindex: this.disabled ? -1 : 0, class: { 'distribute-evenly': this.distributeEvenly }, onClick: this.onHostClick, onKeyDown: this.onHostKeyDown }, this.renderer.render()), this.host);
76
120
  }
77
121
  static get is() { return "vega-selection-tile"; }
78
122
  static get encapsulation() { return "shadow"; }