@globalpayments/vega 2.56.0 → 2.57.1

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 (428) hide show
  1. package/dist/cjs/{app-globals-7e482341.js → app-globals-26e2fe1e.js} +9 -9
  2. package/dist/cjs/card-config-2ee5505e.js +65 -0
  3. package/dist/cjs/{child-nodes-event-prevent-slimmer-29020cc8.js → child-nodes-event-prevent-slimmer-96240a0e.js} +1 -1
  4. package/dist/cjs/{code-block-e56c5216.js → code-block-7650c868.js} +3 -3
  5. package/dist/cjs/{component-usage-runtime-metrics-dcb32c24.js → component-usage-runtime-metrics-d10ace87.js} +1 -1
  6. package/dist/cjs/{component-value-history-controller-slimmer.abstract-9a1285a1.js → component-value-history-controller-slimmer.abstract-a6e4e5bc.js} +3 -3
  7. package/dist/cjs/{content-state-e07c843c.js → content-state-fd5ad4a8.js} +3 -3
  8. package/dist/cjs/{create-public-api-runtime-metrics-slimmer-a3d17afb.js → create-public-api-runtime-metrics-slimmer-e2e274e1.js} +1 -1
  9. package/dist/cjs/{design-token-3e0bd48d.js → design-token-e771bb16.js} +3 -3
  10. package/dist/cjs/{element-appender-slimmer-2b9ca234.js → element-appender-slimmer-7f98d16b.js} +4 -4
  11. package/dist/cjs/{feature-flag-controller-5e58aae4.js → feature-flag-controller-ce2162c8.js} +1 -1
  12. package/dist/cjs/{form-field-controller-slimmer-dc6d0fe1.js → form-field-controller-slimmer-7bb7df10.js} +4 -4
  13. package/dist/cjs/{icon-manager-9a47399c.js → icon-manager-9072356d.js} +1 -1
  14. package/dist/cjs/{image-annotation-action-76e3c89d.js → image-annotation-action-6715d6f3.js} +2 -2
  15. package/dist/cjs/{index-8b247c17.js → index-4d7bce1a.js} +2 -2
  16. package/dist/cjs/{index-ebb1bb17.js → index-ee4bc191.js} +2 -2
  17. package/dist/cjs/index.cjs.js +16 -16
  18. package/dist/cjs/{inject-keyboard-manager-11df8296.js → inject-keyboard-manager-f1f781b7.js} +1 -1
  19. package/dist/cjs/{internal-icon-manager-00f49470.js → internal-icon-manager-f8677abb.js} +1 -1
  20. package/dist/cjs/{keyboard-manager-1843112c.js → keyboard-manager-0be55fb9.js} +1 -1
  21. package/dist/cjs/{keyboard-manager-slimmer-0a5f5770.js → keyboard-manager-slimmer-92c7227b.js} +1 -1
  22. package/dist/cjs/loader.cjs.js +14 -14
  23. package/dist/cjs/{public-rules-1ac67099.js → public-rules-036795a4.js} +6 -6
  24. package/dist/cjs/{responsive-format-facade-e2e11c24.js → responsive-format-facade-d164ced7.js} +7 -7
  25. package/dist/cjs/{rich-text-editor-required-rule-63f50aa4.js → rich-text-editor-required-rule-91eb0e22.js} +1 -1
  26. package/dist/cjs/{state-background-color-formatter-e585a027.js → state-background-color-formatter-c57409ea.js} +1 -1
  27. package/dist/cjs/{string-input-formatter-slimmer-a5feb2ed.js → string-input-formatter-slimmer-dc1747ad.js} +23 -4
  28. package/dist/cjs/{style-formatter-0213d3a8.js → style-formatter-3e7af35b.js} +2 -2
  29. package/dist/cjs/{sub-state-notify-slimmer-f68fbf29.js → sub-state-notify-slimmer-409bbd1a.js} +1 -1
  30. package/dist/cjs/{sub-state-observer-slimmer-e06cdf7e.js → sub-state-observer-slimmer-93d0a609.js} +1 -1
  31. package/dist/cjs/{translation-e5003a00.js → translation-de7e351e.js} +1 -1
  32. package/dist/cjs/{translation-slimmer-127a0f83.js → translation-slimmer-83bdb9fe.js} +1 -1
  33. package/dist/cjs/{type-guard-4ba85fdc.js → type-guard-aa8fdeaf.js} +16 -0
  34. package/dist/cjs/vega-accordion.cjs.entry.js +16 -16
  35. package/dist/cjs/vega-app-footer.cjs.entry.js +1 -1
  36. package/dist/cjs/vega-app-header-button.cjs.entry.js +17 -17
  37. package/dist/cjs/vega-backdrop.cjs.entry.js +1 -1
  38. package/dist/cjs/vega-banner.cjs.entry.js +6 -6
  39. package/dist/cjs/vega-bar-chart.cjs.entry.js +1 -1
  40. package/dist/cjs/vega-box.cjs.entry.js +16 -16
  41. package/dist/cjs/vega-brand-logo.cjs.entry.js +4 -4
  42. package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
  43. package/dist/cjs/vega-button-circle.cjs.entry.js +16 -16
  44. package/dist/cjs/vega-button-group_2.cjs.entry.js +7 -7
  45. package/dist/cjs/vega-button-link.cjs.entry.js +4 -4
  46. package/dist/cjs/vega-button.cjs.entry.js +14 -14
  47. package/dist/cjs/vega-calendar_3.cjs.entry.js +14 -14
  48. package/dist/cjs/vega-card.cjs.entry.js +15 -15
  49. package/dist/cjs/vega-carousel.cjs.entry.js +13 -13
  50. package/dist/cjs/vega-checkbox_2.cjs.entry.js +9 -9
  51. package/dist/cjs/vega-chip.cjs.entry.js +16 -16
  52. package/dist/cjs/vega-code-block.cjs.entry.js +15 -15
  53. package/dist/cjs/vega-color-picker.cjs.entry.js +6 -6
  54. package/dist/cjs/vega-combo-box.cjs.entry.js +12 -12
  55. package/dist/cjs/vega-counter-badge.cjs.entry.js +1 -1
  56. package/dist/cjs/vega-date-picker_2.cjs.entry.js +23 -23
  57. package/dist/cjs/vega-dialog_2.cjs.entry.js +16 -16
  58. package/dist/cjs/vega-divider.cjs.entry.js +15 -15
  59. package/dist/cjs/vega-dropdown_5.cjs.entry.js +20 -20
  60. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  61. package/dist/cjs/vega-field-error.cjs.entry.js +1 -1
  62. package/dist/cjs/vega-field-label.cjs.entry.js +1 -1
  63. package/dist/cjs/vega-file-uploader.cjs.entry.js +9 -9
  64. package/dist/cjs/vega-flag-icon.cjs.entry.js +16 -16
  65. package/dist/cjs/vega-flex.cjs.entry.js +16 -16
  66. package/dist/cjs/vega-font.cjs.entry.js +15 -15
  67. package/dist/cjs/vega-form.cjs.entry.js +10 -10
  68. package/dist/cjs/vega-grid.cjs.entry.js +15 -15
  69. package/dist/cjs/vega-hint.cjs.entry.js +1 -1
  70. package/dist/cjs/vega-icon.cjs.entry.js +15 -15
  71. package/dist/cjs/vega-image-uploader.cjs.entry.js +17 -17
  72. package/dist/cjs/vega-input-credit-card.cjs.entry.js +28 -124
  73. package/dist/cjs/vega-input-numeric.cjs.entry.js +13 -13
  74. package/dist/cjs/vega-input-phone-number.cjs.entry.js +16 -16
  75. package/dist/cjs/vega-input-range.cjs.entry.js +10 -10
  76. package/dist/cjs/vega-input-select.cjs.entry.js +18 -18
  77. package/dist/cjs/vega-input.cjs.entry.js +203 -11
  78. package/dist/cjs/{vega-internal-event-id-6cdc95fe.js → vega-internal-event-id-bda08efa.js} +6 -0
  79. package/dist/cjs/vega-item-toggle.cjs.entry.js +1 -1
  80. package/dist/cjs/vega-left-nav_5.cjs.entry.js +18 -18
  81. package/dist/cjs/vega-line-chart.cjs.entry.js +1 -1
  82. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +13 -13
  83. package/dist/cjs/vega-page-notification_2.cjs.entry.js +1 -1
  84. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +5 -5
  85. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +5 -5
  86. package/dist/cjs/vega-pagination.cjs.entry.js +15 -15
  87. package/dist/cjs/vega-pie-chart.cjs.entry.js +1 -1
  88. package/dist/cjs/vega-popover_2.cjs.entry.js +16 -16
  89. package/dist/cjs/vega-progress-tracker.cjs.entry.js +1 -1
  90. package/dist/cjs/vega-radio_2.cjs.entry.js +12 -12
  91. package/dist/cjs/vega-rich-text-content.cjs.entry.js +12 -12
  92. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +23 -23
  93. package/dist/cjs/vega-section-title.cjs.entry.js +1 -1
  94. package/dist/cjs/vega-segment-control.cjs.entry.js +1 -1
  95. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +17 -17
  96. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +10 -10
  97. package/dist/cjs/vega-sidenav_3.cjs.entry.js +16 -16
  98. package/dist/cjs/vega-signature-capture.cjs.entry.js +19 -19
  99. package/dist/cjs/{vega-skeleton-loader-controller-3833c813.js → vega-skeleton-loader-controller-d534f5a1.js} +1 -1
  100. package/dist/cjs/vega-skeleton.cjs.entry.js +1 -1
  101. package/dist/cjs/vega-slot-container.cjs.entry.js +1 -1
  102. package/dist/cjs/vega-stepper.cjs.entry.js +9 -9
  103. package/dist/cjs/vega-tab-group_2.cjs.entry.js +4 -4
  104. package/dist/cjs/vega-table_8.cjs.entry.js +1474 -316
  105. package/dist/cjs/vega-text.cjs.entry.js +1 -1
  106. package/dist/cjs/vega-textarea.cjs.entry.js +9 -9
  107. package/dist/cjs/vega-time-picker_2.cjs.entry.js +20 -20
  108. package/dist/cjs/vega-toggle-switch.cjs.entry.js +6 -6
  109. package/dist/cjs/vega-tooltip_2.cjs.entry.js +16 -16
  110. package/dist/cjs/vega.cjs.js +14 -14
  111. package/dist/cjs/{wait-for-vega-handler-4491efc9.js → wait-for-vega-handler-5469ff80.js} +1 -1
  112. package/dist/collection/components/vega-input/slimmers/controllers/vega-input-mask-config-controller.js +25 -2
  113. package/dist/collection/components/vega-input/vega-input.js +1 -1
  114. package/dist/collection/components/vega-input-credit-card/vega-input-credit-card.js +13 -52
  115. package/dist/collection/components/vega-table/slimmers/controllers/dto/column-render-input-model.js +216 -0
  116. package/dist/collection/components/vega-table/slimmers/controllers/dto/column-structure-model.js +238 -0
  117. package/dist/collection/components/vega-table/slimmers/controllers/dto/test/column-render-input-model.test.js +83 -0
  118. package/dist/collection/components/vega-table/slimmers/controllers/dto/test/column-structure-model.test.js +147 -0
  119. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-column-structure-model-controller.js +66 -0
  120. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-render-input-controller.js +171 -0
  121. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-body-renderer.js +6 -1
  122. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-cell-renderer.js +22 -4
  123. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.js +13 -3
  124. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-header-renderer.js +43 -6
  125. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.js +175 -0
  126. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-renderer.js +7 -0
  127. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-row-renderer.js +6 -5
  128. package/dist/collection/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-cell-state-controller.js +41 -0
  129. package/dist/collection/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-row-state-controller.js +48 -0
  130. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.css +58 -11
  131. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.js +49 -6
  132. package/dist/collection/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.js +5 -1
  133. package/dist/collection/components/vega-table/vega-table-expand-row/vega-table-expand-row.css +11 -0
  134. package/dist/collection/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-state-controller.js +15 -0
  135. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.css +42 -11
  136. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +45 -9
  137. package/dist/collection/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.js +53 -10
  138. package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.css +37 -0
  139. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.css +5 -16
  140. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.js +21 -0
  141. package/dist/collection/components/vega-table/vega-table.css +22 -0
  142. package/dist/collection/components/vega-table/vega-table.js +52 -1
  143. package/dist/collection/constants/card-config.js +4 -4
  144. package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +3 -0
  145. package/dist/collection/helpers/formatter/string-formatter/credit-card-blur-mask-strategy.js +74 -0
  146. package/dist/collection/helpers/formatter/string-formatter/credit-card-input-mask-strategy.js +34 -0
  147. package/dist/collection/helpers/formatter/string-formatter/credit-card-mask-strategy.abstract.js +63 -0
  148. package/dist/collection/helpers/formatter/string-formatter/string-format-strategy.abstract.js +4 -1
  149. package/dist/collection/helpers/formatter/string-formatter/string-mask-strategy.js +8 -0
  150. package/dist/collection/helpers/slimmers/string-input-formatter-slimmer.js +8 -0
  151. package/dist/collection/types/type-guard.js +15 -0
  152. package/dist/esm/{app-globals-b5881948.js → app-globals-ee6a1250.js} +9 -9
  153. package/dist/esm/card-config-d2ad484e.js +63 -0
  154. package/dist/esm/{child-nodes-event-prevent-slimmer-2b975cbf.js → child-nodes-event-prevent-slimmer-b59a578e.js} +1 -1
  155. package/dist/esm/{code-block-1cdb0599.js → code-block-7bd4cb87.js} +3 -3
  156. package/dist/esm/{component-usage-runtime-metrics-385c7124.js → component-usage-runtime-metrics-a84cc93e.js} +1 -1
  157. package/dist/esm/{component-value-history-controller-slimmer.abstract-c12b2958.js → component-value-history-controller-slimmer.abstract-41c58caf.js} +3 -3
  158. package/dist/esm/{content-state-cf27d19b.js → content-state-a43e703e.js} +3 -3
  159. package/dist/esm/{create-public-api-runtime-metrics-slimmer-8ada793f.js → create-public-api-runtime-metrics-slimmer-bedf3a1e.js} +1 -1
  160. package/dist/esm/{design-token-96e03257.js → design-token-23522f5c.js} +3 -3
  161. package/dist/esm/{element-appender-slimmer-00dcccb9.js → element-appender-slimmer-042df95a.js} +4 -4
  162. package/dist/esm/{feature-flag-controller-0fbe8fb0.js → feature-flag-controller-51659753.js} +2 -2
  163. package/dist/esm/{form-field-controller-slimmer-6f49d396.js → form-field-controller-slimmer-f0982f11.js} +4 -4
  164. package/dist/esm/{icon-manager-638dd4d4.js → icon-manager-2ee1c619.js} +1 -1
  165. package/dist/esm/{image-annotation-action-e76b3396.js → image-annotation-action-1e88f5a0.js} +2 -2
  166. package/dist/esm/{index-44c794b4.js → index-e9da316f.js} +2 -2
  167. package/dist/esm/{index-f5d2fe61.js → index-fb3b74bd.js} +2 -2
  168. package/dist/esm/index.js +16 -16
  169. package/dist/esm/{inject-keyboard-manager-a15cf43c.js → inject-keyboard-manager-5141d09a.js} +1 -1
  170. package/dist/esm/{internal-icon-manager-58cf8aa6.js → internal-icon-manager-7eac52c8.js} +1 -1
  171. package/dist/esm/{keyboard-manager-f496a623.js → keyboard-manager-3ffe81b0.js} +1 -1
  172. package/dist/esm/{keyboard-manager-slimmer-a4cc9593.js → keyboard-manager-slimmer-751e98f5.js} +1 -1
  173. package/dist/esm/loader.js +14 -14
  174. package/dist/esm/{public-rules-e8616346.js → public-rules-287d4d77.js} +6 -6
  175. package/dist/esm/{responsive-format-facade-464498b6.js → responsive-format-facade-d2632288.js} +7 -7
  176. package/dist/esm/{rich-text-editor-required-rule-69844536.js → rich-text-editor-required-rule-69d5f035.js} +1 -1
  177. package/dist/esm/{state-background-color-formatter-121ae7d3.js → state-background-color-formatter-da5e76e8.js} +1 -1
  178. package/dist/esm/{string-input-formatter-slimmer-e53b6412.js → string-input-formatter-slimmer-09478e0d.js} +24 -5
  179. package/dist/esm/{style-formatter-670e20f7.js → style-formatter-f7951677.js} +2 -2
  180. package/dist/esm/{sub-state-notify-slimmer-b6c8051c.js → sub-state-notify-slimmer-0a6c3cbb.js} +1 -1
  181. package/dist/esm/{sub-state-observer-slimmer-93eeb87d.js → sub-state-observer-slimmer-53eec5fb.js} +1 -1
  182. package/dist/esm/{translation-71e0711d.js → translation-a6eacb5f.js} +1 -1
  183. package/dist/esm/{translation-slimmer-e6b130bf.js → translation-slimmer-f28e4708.js} +1 -1
  184. package/dist/esm/{type-guard-158f6d7a.js → type-guard-84b1f192.js} +16 -1
  185. package/dist/esm/vega-accordion.entry.js +16 -16
  186. package/dist/esm/vega-app-footer.entry.js +1 -1
  187. package/dist/esm/vega-app-header-button.entry.js +17 -17
  188. package/dist/esm/vega-backdrop.entry.js +1 -1
  189. package/dist/esm/vega-banner.entry.js +6 -6
  190. package/dist/esm/vega-bar-chart.entry.js +1 -1
  191. package/dist/esm/vega-box.entry.js +16 -16
  192. package/dist/esm/vega-brand-logo.entry.js +4 -4
  193. package/dist/esm/vega-breadcrumb.entry.js +4 -4
  194. package/dist/esm/vega-button-circle.entry.js +16 -16
  195. package/dist/esm/vega-button-group_2.entry.js +7 -7
  196. package/dist/esm/vega-button-link.entry.js +4 -4
  197. package/dist/esm/vega-button.entry.js +14 -14
  198. package/dist/esm/vega-calendar_3.entry.js +14 -14
  199. package/dist/esm/vega-card.entry.js +15 -15
  200. package/dist/esm/vega-carousel.entry.js +13 -13
  201. package/dist/esm/vega-checkbox_2.entry.js +9 -9
  202. package/dist/esm/vega-chip.entry.js +16 -16
  203. package/dist/esm/vega-code-block.entry.js +15 -15
  204. package/dist/esm/vega-color-picker.entry.js +6 -6
  205. package/dist/esm/vega-combo-box.entry.js +12 -12
  206. package/dist/esm/vega-counter-badge.entry.js +1 -1
  207. package/dist/esm/vega-date-picker_2.entry.js +23 -23
  208. package/dist/esm/vega-dialog_2.entry.js +16 -16
  209. package/dist/esm/vega-divider.entry.js +15 -15
  210. package/dist/esm/vega-dropdown_5.entry.js +20 -20
  211. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  212. package/dist/esm/vega-field-error.entry.js +1 -1
  213. package/dist/esm/vega-field-label.entry.js +1 -1
  214. package/dist/esm/vega-file-uploader.entry.js +9 -9
  215. package/dist/esm/vega-flag-icon.entry.js +16 -16
  216. package/dist/esm/vega-flex.entry.js +16 -16
  217. package/dist/esm/vega-font.entry.js +15 -15
  218. package/dist/esm/vega-form.entry.js +10 -10
  219. package/dist/esm/vega-grid.entry.js +15 -15
  220. package/dist/esm/vega-hint.entry.js +1 -1
  221. package/dist/esm/vega-icon.entry.js +15 -15
  222. package/dist/esm/vega-image-uploader.entry.js +17 -17
  223. package/dist/esm/vega-input-credit-card.entry.js +27 -123
  224. package/dist/esm/vega-input-numeric.entry.js +13 -13
  225. package/dist/esm/vega-input-phone-number.entry.js +16 -16
  226. package/dist/esm/vega-input-range.entry.js +10 -10
  227. package/dist/esm/vega-input-select.entry.js +18 -18
  228. package/dist/esm/vega-input.entry.js +203 -11
  229. package/dist/esm/{vega-internal-event-id-178b2743.js → vega-internal-event-id-4072659b.js} +4 -1
  230. package/dist/esm/vega-item-toggle.entry.js +1 -1
  231. package/dist/esm/vega-left-nav_5.entry.js +18 -18
  232. package/dist/esm/vega-line-chart.entry.js +1 -1
  233. package/dist/esm/vega-loader-wrapper_2.entry.js +13 -13
  234. package/dist/esm/vega-page-notification_2.entry.js +1 -1
  235. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +5 -5
  236. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +5 -5
  237. package/dist/esm/vega-pagination.entry.js +15 -15
  238. package/dist/esm/vega-pie-chart.entry.js +1 -1
  239. package/dist/esm/vega-popover_2.entry.js +16 -16
  240. package/dist/esm/vega-progress-tracker.entry.js +1 -1
  241. package/dist/esm/vega-radio_2.entry.js +12 -12
  242. package/dist/esm/vega-rich-text-content.entry.js +12 -12
  243. package/dist/esm/vega-rich-text-editor_4.entry.js +23 -23
  244. package/dist/esm/vega-section-title.entry.js +1 -1
  245. package/dist/esm/vega-segment-control.entry.js +1 -1
  246. package/dist/esm/vega-selection-chip_2.entry.js +17 -17
  247. package/dist/esm/vega-selection-tile_2.entry.js +10 -10
  248. package/dist/esm/vega-sidenav_3.entry.js +16 -16
  249. package/dist/esm/vega-signature-capture.entry.js +19 -19
  250. package/dist/esm/{vega-skeleton-loader-controller-9d1ffa6c.js → vega-skeleton-loader-controller-3f6faa17.js} +1 -1
  251. package/dist/esm/vega-skeleton.entry.js +1 -1
  252. package/dist/esm/vega-slot-container.entry.js +1 -1
  253. package/dist/esm/vega-stepper.entry.js +9 -9
  254. package/dist/esm/vega-tab-group_2.entry.js +4 -4
  255. package/dist/esm/vega-table_8.entry.js +1475 -317
  256. package/dist/esm/vega-text.entry.js +1 -1
  257. package/dist/esm/vega-textarea.entry.js +9 -9
  258. package/dist/esm/vega-time-picker_2.entry.js +20 -20
  259. package/dist/esm/vega-toggle-switch.entry.js +6 -6
  260. package/dist/esm/vega-tooltip_2.entry.js +16 -16
  261. package/dist/esm/vega.js +14 -14
  262. package/dist/esm/{wait-for-vega-handler-e0a928cd.js → wait-for-vega-handler-c2c07ac3.js} +1 -1
  263. package/dist/types/components/vega-input/slimmers/controllers/vega-input-mask-config-controller.d.ts +7 -0
  264. package/dist/types/components/vega-input/types.d.ts +10 -1
  265. package/dist/types/components/vega-input-credit-card/vega-input-credit-card.d.ts +1 -13
  266. package/dist/types/components/vega-table/interface.d.ts +38 -0
  267. package/dist/types/components/vega-table/slimmers/controllers/dto/column-render-input-model.d.ts +138 -0
  268. package/dist/types/components/vega-table/slimmers/controllers/dto/column-structure-model.d.ts +140 -0
  269. package/dist/types/components/vega-table/slimmers/controllers/dto/test/column-render-input-model.test.d.ts +1 -0
  270. package/dist/types/components/vega-table/slimmers/controllers/dto/test/column-structure-model.test.d.ts +1 -0
  271. package/dist/types/components/vega-table/slimmers/controllers/vega-table-column-structure-model-controller.d.ts +35 -0
  272. package/dist/types/components/vega-table/slimmers/controllers/vega-table-render-input-controller.d.ts +103 -0
  273. package/dist/types/components/vega-table/slimmers/renderers/vega-table-body-renderer.d.ts +1 -0
  274. package/dist/types/components/vega-table/slimmers/renderers/vega-table-cell-renderer.d.ts +5 -2
  275. package/dist/types/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.d.ts +1 -0
  276. package/dist/types/components/vega-table/slimmers/renderers/vega-table-header-renderer.d.ts +4 -1
  277. package/dist/types/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.d.ts +18 -0
  278. package/dist/types/components/vega-table/slimmers/renderers/vega-table-renderer.d.ts +1 -0
  279. package/dist/types/components/vega-table/slimmers/renderers/vega-table-row-renderer.d.ts +1 -1
  280. package/dist/types/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-cell-state-controller.d.ts +4 -0
  281. package/dist/types/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-row-state-controller.d.ts +15 -0
  282. package/dist/types/components/vega-table/vega-table-cell/vega-table-cell.d.ts +10 -0
  283. package/dist/types/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.d.ts +1 -0
  284. package/dist/types/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-state-controller.d.ts +1 -0
  285. package/dist/types/components/vega-table/vega-table-head-cell/vega-table-head-cell.d.ts +8 -1
  286. package/dist/types/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.d.ts +1 -0
  287. package/dist/types/components/vega-table/vega-table-row/vega-table-row.d.ts +5 -0
  288. package/dist/types/components/vega-table/vega-table.d.ts +17 -1
  289. package/dist/types/components.d.ts +21 -1
  290. package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +3 -0
  291. package/dist/types/helpers/formatter/string-formatter/credit-card-blur-mask-strategy.d.ts +28 -0
  292. package/dist/types/helpers/formatter/string-formatter/credit-card-input-mask-strategy.d.ts +21 -0
  293. package/dist/types/helpers/formatter/string-formatter/credit-card-mask-strategy.abstract.d.ts +36 -0
  294. package/dist/types/helpers/formatter/string-formatter/string-format-strategy.abstract.d.ts +1 -1
  295. package/dist/types/helpers/formatter/string-formatter/string-mask-strategy.d.ts +9 -3
  296. package/dist/types/helpers/slimmers/string-input-formatter-slimmer.d.ts +4 -0
  297. package/dist/types/types/components.type.d.ts +2 -0
  298. package/dist/types/types/public-api.d.ts +1 -0
  299. package/dist/types/types/type-guard.d.ts +10 -0
  300. package/dist/vega/index.esm.js +1 -1
  301. package/dist/vega/{p-4df90a1b.entry.js → p-080db42b.entry.js} +1 -1
  302. package/dist/vega/{p-dc383362.entry.js → p-083af15f.entry.js} +1 -1
  303. package/dist/vega/{p-246090cf.entry.js → p-091ab617.entry.js} +1 -1
  304. package/dist/vega/{p-e5eda663.entry.js → p-0b5330e1.entry.js} +1 -1
  305. package/dist/vega/{p-7e70938a.entry.js → p-1792a352.entry.js} +1 -1
  306. package/dist/vega/{p-ec7dc51f.entry.js → p-1a4f77de.entry.js} +1 -1
  307. package/dist/vega/{p-1737536e.entry.js → p-1a6dacc7.entry.js} +1 -1
  308. package/dist/vega/{p-c5afd9aa.entry.js → p-1db2ba98.entry.js} +1 -1
  309. package/dist/vega/{p-c9f544bd.entry.js → p-1f9a735a.entry.js} +1 -1
  310. package/dist/vega/{p-002062c3.entry.js → p-24042f0c.entry.js} +1 -1
  311. package/dist/vega/{p-03c759ae.entry.js → p-27ec0c07.entry.js} +1 -1
  312. package/dist/vega/{p-578ac47f.entry.js → p-311f338d.entry.js} +1 -1
  313. package/dist/vega/{p-0c660956.entry.js → p-317920e6.entry.js} +1 -1
  314. package/dist/vega/{p-5016b57e.entry.js → p-34dc3f71.entry.js} +1 -1
  315. package/dist/vega/{p-302e01e9.entry.js → p-376b3ec7.entry.js} +1 -1
  316. package/dist/vega/{p-586139ce.entry.js → p-394594e9.entry.js} +1 -1
  317. package/dist/vega/{p-a2c4c241.entry.js → p-397b5d91.entry.js} +1 -1
  318. package/dist/vega/{p-08a0cbd0.entry.js → p-39906ad2.entry.js} +1 -1
  319. package/dist/vega/{p-06cd4a19.entry.js → p-41465ad0.entry.js} +1 -1
  320. package/dist/vega/{p-fac5990f.entry.js → p-42ec43ef.entry.js} +1 -1
  321. package/dist/vega/{p-da1d0c02.js → p-43263510.js} +1 -1
  322. package/dist/vega/{p-e2282f71.entry.js → p-435451be.entry.js} +1 -1
  323. package/dist/vega/{p-04c8b83d.entry.js → p-45eb1e01.entry.js} +1 -1
  324. package/dist/vega/{p-7a8b6f2f.entry.js → p-4674c318.entry.js} +1 -1
  325. package/dist/vega/p-472108bd.entry.js +1 -0
  326. package/dist/vega/{p-b6e0d996.entry.js → p-48ae6f02.entry.js} +1 -1
  327. package/dist/vega/{p-7cc20ed5.entry.js → p-48b24fd3.entry.js} +1 -1
  328. package/dist/vega/p-49fd1009.js +1 -0
  329. package/dist/vega/{p-66516ee9.js → p-4a237308.js} +1 -1
  330. package/dist/vega/{p-46eb330f.entry.js → p-4ab67150.entry.js} +1 -1
  331. package/dist/vega/{p-9a9766cc.entry.js → p-4c4ac1a5.entry.js} +1 -1
  332. package/dist/vega/{p-6bd7114d.entry.js → p-4c871d0f.entry.js} +1 -1
  333. package/dist/vega/p-4fb159d5.js +1 -0
  334. package/dist/vega/{p-72a4edf2.entry.js → p-500684e1.entry.js} +1 -1
  335. package/dist/vega/{p-bba5b112.entry.js → p-59282fc8.entry.js} +1 -1
  336. package/dist/vega/p-5bd3487e.js +1 -0
  337. package/dist/vega/{p-fa5eb496.js → p-5d676a94.js} +1 -1
  338. package/dist/vega/{p-b1f65b13.js → p-5e2c9e69.js} +1 -1
  339. package/dist/vega/p-5f377954.js +1 -1
  340. package/dist/vega/{p-e860318d.entry.js → p-5f6b942c.entry.js} +1 -1
  341. package/dist/vega/{p-5cb92c51.entry.js → p-5fe47fe8.entry.js} +1 -1
  342. package/dist/vega/{p-2a6517f9.entry.js → p-61ea2d75.entry.js} +1 -1
  343. package/dist/vega/{p-c0043eed.entry.js → p-63adca7b.entry.js} +1 -1
  344. package/dist/vega/{p-6419abd9.entry.js → p-66e9d31a.entry.js} +1 -1
  345. package/dist/vega/p-699032fc.entry.js +1 -0
  346. package/dist/vega/{p-7503fe08.entry.js → p-6dad2e5c.entry.js} +1 -1
  347. package/dist/vega/{p-f50cd6c3.entry.js → p-710da484.entry.js} +1 -1
  348. package/dist/vega/{p-397c7199.js → p-71c65f7e.js} +1 -1
  349. package/dist/vega/{p-0ce88865.entry.js → p-7c348ac7.entry.js} +1 -1
  350. package/dist/vega/{p-fc790de5.entry.js → p-7d5ebd26.entry.js} +1 -1
  351. package/dist/vega/{p-487c0f17.entry.js → p-81279fea.entry.js} +1 -1
  352. package/dist/vega/p-81ed90d5.js +1 -0
  353. package/dist/vega/{p-aab6f547.entry.js → p-82b18195.entry.js} +1 -1
  354. package/dist/vega/{p-cc6410e6.js → p-832b59af.js} +1 -1
  355. package/dist/vega/{p-5c9efff8.entry.js → p-86a300e8.entry.js} +1 -1
  356. package/dist/vega/{p-138fcf6e.js → p-8782abeb.js} +1 -1
  357. package/dist/vega/{p-68864531.js → p-88e08a33.js} +1 -1
  358. package/dist/vega/{p-cc63e827.js → p-8c46e116.js} +1 -1
  359. package/dist/vega/{p-8e31e7ea.js → p-8c4f893b.js} +1 -1
  360. package/dist/vega/{p-6ec0e3ce.entry.js → p-8e581755.entry.js} +1 -1
  361. package/dist/vega/{p-a46ac2eb.js → p-8e662f26.js} +1 -1
  362. package/dist/vega/{p-3162a3f0.entry.js → p-8f8de5ab.entry.js} +1 -1
  363. package/dist/vega/p-92355996.entry.js +1 -0
  364. package/dist/vega/{p-d8e1ed2d.js → p-9a956a00.js} +1 -1
  365. package/dist/vega/{p-778fd499.js → p-9afdcf65.js} +1 -1
  366. package/dist/vega/p-9b08ed46.entry.js +1 -0
  367. package/dist/vega/{p-1ebc1acf.entry.js → p-9ca7467d.entry.js} +1 -1
  368. package/dist/vega/{p-81e56716.entry.js → p-9ce0bd82.entry.js} +2 -2
  369. package/dist/vega/{p-4ab3df00.js → p-9d6003ef.js} +1 -1
  370. package/dist/vega/p-a04491cc.entry.js +1 -0
  371. package/dist/vega/{p-1a7d0e21.entry.js → p-a1056063.entry.js} +1 -1
  372. package/dist/vega/{p-f3ec4ae6.entry.js → p-a1e50e6c.entry.js} +1 -1
  373. package/dist/vega/p-a4670e23.js +1 -0
  374. package/dist/vega/{p-7728041e.entry.js → p-a4a0fcfd.entry.js} +1 -1
  375. package/dist/vega/{p-a42bc438.entry.js → p-a7042a5a.entry.js} +1 -1
  376. package/dist/vega/p-acf7667e.entry.js +1 -0
  377. package/dist/vega/{p-b3da0b44.entry.js → p-b21b128c.entry.js} +1 -1
  378. package/dist/vega/{p-144d2390.entry.js → p-b75a8edb.entry.js} +1 -1
  379. package/dist/vega/{p-d5f1794e.js → p-bcdb235d.js} +1 -1
  380. package/dist/vega/{p-36827489.entry.js → p-bd84b7b9.entry.js} +1 -1
  381. package/dist/vega/{p-6b8d105e.entry.js → p-c21295cf.entry.js} +1 -1
  382. package/dist/vega/{p-ac3a2d9c.entry.js → p-c42ec0ac.entry.js} +1 -1
  383. package/dist/vega/{p-bbdc6170.entry.js → p-c69a6547.entry.js} +1 -1
  384. package/dist/vega/p-c9740710.entry.js +1 -0
  385. package/dist/vega/{p-59f1fd3e.entry.js → p-ce5a3589.entry.js} +1 -1
  386. package/dist/vega/{p-1c3e1134.js → p-d1355307.js} +1 -1
  387. package/dist/vega/{p-6b7dca3e.js → p-d789b291.js} +1 -1
  388. package/dist/vega/{p-c685adcd.js → p-d7e0c57a.js} +1 -1
  389. package/dist/vega/p-d849e0f5.js +1 -0
  390. package/dist/vega/{p-7a40e033.js → p-db8cdba6.js} +1 -1
  391. package/dist/vega/{p-f4a13f3f.js → p-e1ed78db.js} +1 -1
  392. package/dist/vega/{p-4d793cb0.js → p-e77a83e4.js} +1 -1
  393. package/dist/vega/{p-c990e249.js → p-e940bc37.js} +1 -1
  394. package/dist/vega/p-ef84dc90.entry.js +1 -0
  395. package/dist/vega/{p-c9b9322b.js → p-f08a4adf.js} +1 -1
  396. package/dist/vega/{p-ae74d511.js → p-f229d6d1.js} +1 -1
  397. package/dist/vega/{p-dc3d93d6.js → p-f25570f5.js} +1 -1
  398. package/dist/vega/{p-576b812b.entry.js → p-f27fcc7c.entry.js} +1 -1
  399. package/dist/vega/{p-5f86a286.entry.js → p-f3ab00ad.entry.js} +1 -1
  400. package/dist/vega/{p-151dec6a.entry.js → p-f3bd26a1.entry.js} +1 -1
  401. package/dist/vega/p-f543e911.entry.js +1 -0
  402. package/dist/vega/p-f5ac60f5.js +1 -0
  403. package/dist/vega/p-f7b5833d.entry.js +1 -0
  404. package/dist/vega/{p-73821eba.entry.js → p-f940b7f7.entry.js} +1 -1
  405. package/dist/vega/p-fc02a67a.js +1 -0
  406. package/dist/vega/p-fcb5b40f.entry.js +1 -0
  407. package/dist/vega/{p-4b2a90b8.js → p-fda6f8bc.js} +1 -1
  408. package/dist/vega/{p-5be150cb.entry.js → p-fe1512f9.entry.js} +1 -1
  409. package/dist/vega/vega.esm.js +1 -1
  410. package/package.json +2 -2
  411. package/dist/vega/p-063d0bee.entry.js +0 -1
  412. package/dist/vega/p-2205ee4c.js +0 -1
  413. package/dist/vega/p-23064067.entry.js +0 -1
  414. package/dist/vega/p-2f6c4f2c.entry.js +0 -1
  415. package/dist/vega/p-37b05e0b.js +0 -1
  416. package/dist/vega/p-425ba7d6.js +0 -1
  417. package/dist/vega/p-4387d550.js +0 -1
  418. package/dist/vega/p-4a12fb0d.entry.js +0 -1
  419. package/dist/vega/p-4c595d8d.entry.js +0 -1
  420. package/dist/vega/p-5e530257.js +0 -1
  421. package/dist/vega/p-61e1e356.entry.js +0 -1
  422. package/dist/vega/p-636142ae.entry.js +0 -1
  423. package/dist/vega/p-6a7b7214.js +0 -1
  424. package/dist/vega/p-78937642.entry.js +0 -1
  425. package/dist/vega/p-7cb11f3f.entry.js +0 -1
  426. package/dist/vega/p-962b40d1.entry.js +0 -1
  427. package/dist/vega/p-9d286c08.entry.js +0 -1
  428. package/dist/vega/p-d64b20c2.js +0 -1
@@ -22,7 +22,6 @@ import { VegaInternalIconManager } from '../../helpers/icon/internal-icon-manage
22
22
  import { FeatureFlag } from '../../helpers/feature-control/feature-flag-controller';
23
23
  import { VegaComponentUsageRuntimeMetricsSlimmer } from '../../helpers/slimmers/component-usage-runtime-metrics';
24
24
  import { VegaInputCreditCardRuntimeMetricsPayloadDefinition } from '../../constants/runtime-metrics-payload-definition/vega-input-credit-card/runtime-metrics-payload-definition';
25
- import { VegaInternalPasteEvent } from '../../helpers/event-manager/event-id/vega-internal-event-id';
26
25
  /**
27
26
  * @vegaVersion 1.26.0
28
27
  */
@@ -51,17 +50,6 @@ export class VegaInputCreditCard {
51
50
  this.focusEventEmitter = createEventEmitSlimmer(VegaInputCreditCard, VegaFocus);
52
51
  this.inputCreditCardEventPrevent = new ChildNodesEventPreventSlimmer([VegaChange, VegaFocus, VegaBlur], () => this.host, true);
53
52
  this.vegaComponentUsageRuntimeMetricsSlimmer = new VegaComponentUsageRuntimeMetricsSlimmer(VegaInputCreditCardRuntimeMetricsPayloadDefinition);
54
- this.maskConfig = {
55
- type: 'custom',
56
- options: {
57
- mask: '',
58
- slot: '9',
59
- accept: /[\d\s]/,
60
- insertMode: false,
61
- triggerAtInit: FeatureFlag.isEnabled('VEGA_INPUT_CREDIT_CARD.ENABLE_HIDE_NUMBER_MASK_ON_FIRST_LOAD'),
62
- },
63
- trigger: 'blur',
64
- };
65
53
  /**
66
54
  * Specifies whether a card number must be entered for
67
55
  * this component to pass form validation.
@@ -149,7 +137,7 @@ export class VegaInputCreditCard {
149
137
  this.renderInputContainer = () => {
150
138
  var _a;
151
139
  const iconName = ((_a = this.getCreditCardType(this.value)) === null || _a === void 0 ? void 0 : _a.iconName) || 'regular-credit-card';
152
- return (h("vega-input", { label: this.label, type: "number", prefixIcon: VegaInternalIconManager.getIconKey(iconName), maskConfig: this.getMaskConfig(this.value), placeholder: this.placeholder, disabled: this.disabled, size: this.size, value: this.value, hint: this.hint, required: this.required, showClearIcon: false, ref: (ref) => {
140
+ return (h("vega-input", { label: this.label, type: "number", prefixIcon: VegaInternalIconManager.getIconKey(iconName), maskConfig: this.getMaskConfig(), placeholder: this.placeholder, disabled: this.disabled, size: this.size, value: this.value, hint: this.hint, required: this.required, showClearIcon: false, ref: (ref) => {
153
141
  this.inputRef = ref;
154
142
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaChange, (input) => {
155
143
  this.handleVegaChange(input);
@@ -160,10 +148,6 @@ export class VegaInputCreditCard {
160
148
  DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaFocus, () => {
161
149
  this.handleVegaFocus();
162
150
  });
163
- DomNodeSubjectObserverFactory.addUniqueObserverToNode(ref, VegaInternalPasteEvent, (event) => {
164
- const pastedValue = event.clipboardData.getData('text');
165
- this.inputRef.maskConfig = this.getMaskConfig(pastedValue); // The mask should be updated before the value changed.
166
- });
167
151
  } }));
168
152
  };
169
153
  this.handleVegaChange = (e) => {
@@ -207,41 +191,18 @@ export class VegaInputCreditCard {
207
191
  getCreditCardType(value) {
208
192
  return CARDS_INFO.filter((card) => card.pattern.test(value))[0];
209
193
  }
210
- getMaskConfig(value) {
211
- const maskConfig = [];
212
- const creditCardType = this.getCreditCardType(value);
213
- if (creditCardType) {
214
- maskConfig.push(creditCardType.maskConfig);
215
- if (this.hideCardNumberOnBlur && value.trim().includes(' ')) {
216
- this.maskConfig.options.mask = this.generateDynamicMask();
217
- maskConfig.push(this.maskConfig);
218
- }
219
- }
220
- return maskConfig;
221
- }
222
- /**
223
- * The below method is e2e-test covered in
224
- * @see{module:vega-input-credit-card-dynamic-mask-e2e}
225
- */
226
- /* istanbul ignore next */
227
- /** Transform the input card number with dynamic card number mask, for example: '4111 2222 3333 44' will be transformed to 'XXXX XXXX XXXX 99' */
228
- generateDynamicMask() {
229
- const cardNumberSplit = this.value.trim().split(' ');
230
- const cardNumberMask = this.maskCardNumber(cardNumberSplit).join(' ');
231
- return cardNumberMask;
232
- }
233
- /**
234
- * The below method is e2e-test covered in
235
- * @see{module:vega-input-credit-card-dynamic-mask-e2e}
236
- */
237
- /* istanbul ignore next */
238
- maskCardNumber(cardNumberSplit) {
239
- // Map through the array and replace each character with 'X' or '9' depending on the index
240
- return cardNumberSplit.map((element, index) => {
241
- // Replace each character in the string with 'X' except the last element, which uses '9'
242
- const replacementChar = index === cardNumberSplit.length - 1 ? '9' : 'X';
243
- return replacementChar.repeat(element.length);
244
- });
194
+ getMaskConfig() {
195
+ return [
196
+ {
197
+ type: 'credit-card',
198
+ trigger: 'input',
199
+ },
200
+ {
201
+ type: 'credit-card',
202
+ trigger: 'blur',
203
+ hideCardNumberOnBlur: this.hideCardNumberOnBlur,
204
+ },
205
+ ];
245
206
  }
246
207
  static get is() { return "vega-input-credit-card"; }
247
208
  static get encapsulation() { return "shadow"; }
@@ -0,0 +1,216 @@
1
+ /**
2
+ * ColumnRenderInputModel
3
+ *
4
+ * Render-time representation of a column or group node used by header/body renderers.
5
+ * Built from a ColumnStructureModel tree, it carries computed layout metadata required
6
+ * for rendering and pinned/sticky calculations (colSpan, rowSpan, pinned boundaries, etc).
7
+ *
8
+ * Instances form a forest (root-level nodes in an array) that mirrors the structure model
9
+ * but contains additional render-specific properties and parent/child links for renderers.
10
+ */
11
+ export class ColumnRenderInputModel {
12
+ /**
13
+ * Create a new render input node.
14
+ *
15
+ * @param {string} key - Unique key (matches ColumnStructureModel.key).
16
+ * @param {string} label - Optional display label (from structure model).
17
+ * @param {VegaTablePinnedType} pinned - Pinned type for this node ('left' | 'right' | null).
18
+ * @param {Nullable<number>} colSpan - Number of visual columns spanned by this node's subtree.
19
+ * @param {Nullable<number>} rowSpan - Number of header rows this node should span.
20
+ * @param {boolean} isViewStart - True when this node is the start of a visible view range.
21
+ * @param {boolean} isViewEnd - True when this node is the end of a visible view range.
22
+ * @param {boolean} isLeftEndPinned - True when node is last left-pinned sibling.
23
+ * @param {boolean} isRightStartPinned - True when node is first right-pinned sibling.
24
+ * @param {boolean} isNoPinnedEnd - True when node is last non-pinned sibling.
25
+ * @param {boolean} headHasGroupColumn - Header contains group columns (affects rowSpan).
26
+ * @param {boolean} headHasPinnedColumn - Header contains pinned columns.
27
+ * @param {number} headMaxDepth - Maximum header depth (number of header rows).
28
+ * @param {number} level - Level/index of this node within header rows (0-based).
29
+ * @param {number} columnIndex - Sequential leaf index (used for ordering).
30
+ * @param {Nullable<ColumnRenderInputModel>} parent - Parent render input node (null for root-level).
31
+ * @param {ColumnRenderInputModel[]} children - Child render input nodes.
32
+ */
33
+ constructor(key, label, pinned, colSpan, rowSpan, isViewStart, isViewEnd, isLeftEndPinned, isRightStartPinned, isNoPinnedEnd, headHasGroupColumn, headHasPinnedColumn, headMaxDepth, level, columnIndex, parent, children = []) {
34
+ this.key = key;
35
+ this.label = label;
36
+ this.pinned = pinned;
37
+ this.colSpan = colSpan;
38
+ this.rowSpan = rowSpan;
39
+ this.isViewStart = isViewStart;
40
+ this.isViewEnd = isViewEnd;
41
+ this.isLeftEndPinned = isLeftEndPinned;
42
+ this.isRightStartPinned = isRightStartPinned;
43
+ this.isNoPinnedEnd = isNoPinnedEnd;
44
+ this.headHasGroupColumn = headHasGroupColumn;
45
+ this.headHasPinnedColumn = headHasPinnedColumn;
46
+ this.headMaxDepth = headMaxDepth;
47
+ this.level = level;
48
+ this.columnIndex = columnIndex;
49
+ this.parent = parent;
50
+ this.children = children;
51
+ this.iteratorCacheMap = new Map();
52
+ this.leaves = [];
53
+ }
54
+ /**
55
+ * Build a forest of ColumnRenderInputModel nodes from a ColumnStructureModel root.
56
+ *
57
+ * @param {ColumnStructureModel} rootModel - Root ColumnStructureModel that supplies tree and level data.
58
+ * @returns {ColumnRenderInputModel[]} Array of root-level ColumnRenderInputModel nodes (the render forest).
59
+ */
60
+ static from(rootModel) {
61
+ const renderInputs = [];
62
+ const parentStack = [];
63
+ const maxLevel = rootModel.getMaxDepth();
64
+ const hasGroupColumn = rootModel.hasGroupColumn();
65
+ const hasPinnedColumn = rootModel.hasLeftPinnedColumn() || rootModel.hasRightPinnedColumn();
66
+ let columnIndex = 0;
67
+ // Iterate structure model (DFS by default) and construct render nodes.
68
+ rootModel.iterator().forEach((model) => {
69
+ const parent = model.level > 0 ? parentStack[model.level - 1] : null;
70
+ const isParentStart = hasGroupColumn && this.isParentStart(model);
71
+ const isParentEnd = hasGroupColumn && this.isParentEnd(model);
72
+ const renderInput = new ColumnRenderInputModel(model.key, model.label, parent ? parent.pinned : model.pinned, hasGroupColumn ? this.getColSpan(model) : null, hasGroupColumn ? (model.isLeaf() ? maxLevel - model.level : 1) : null, parent ? parent.isViewStart && isParentStart : isParentStart, parent ? parent.isViewEnd && isParentEnd : isParentEnd, parent
73
+ ? parent.isLeftEndPinned && isParentEnd
74
+ : hasPinnedColumn && this.isLeftEndPinned(model), parent
75
+ ? parent.isRightStartPinned && isParentStart
76
+ : hasPinnedColumn && this.isRightStartPinned(model), parent ? parent.isNoPinnedEnd && isParentEnd : hasPinnedColumn && this.isNoPinnedEnd(model), hasGroupColumn, hasPinnedColumn, maxLevel, model.level, columnIndex, parent);
77
+ // Attach to parent if present, otherwise add to root-level array.
78
+ parent ? parent.children.push(renderInput) : renderInputs.push(renderInput);
79
+ // Maintain parent stack keyed by level to allow next nodes to find their parent.
80
+ parentStack[model.level] = renderInput;
81
+ parentStack.length = model.level + 1;
82
+ // Increment leaf index when encountering a leaf structure node.
83
+ if (model.isLeaf())
84
+ columnIndex++;
85
+ });
86
+ return renderInputs;
87
+ }
88
+ /**
89
+ * True when the provided structure model is the last left-pinned sibling in its parent's children.
90
+ * Used to mark boundary nodes for left-pinned groups.
91
+ *
92
+ * @param {ColumnStructureModel} model - Structure model to check.
93
+ * @returns {boolean} True when model is the last left-pinned sibling.
94
+ */
95
+ static isLeftEndPinned(model) {
96
+ const siblings = model.parent
97
+ .getOrderedChildren()
98
+ .filter((child) => child.pinned === 'left');
99
+ return siblings[siblings.length - 1] === model;
100
+ }
101
+ /**
102
+ * True when the provided structure model is the first right-pinned sibling in its parent's children.
103
+ * Used to mark boundary nodes for right-pinned groups.
104
+ *
105
+ * @param {ColumnStructureModel} model - Structure model to check.
106
+ * @returns {boolean} True when model is the first right-pinned sibling.
107
+ */
108
+ static isRightStartPinned(model) {
109
+ const siblings = model.parent
110
+ .getOrderedChildren()
111
+ .filter((child) => child.pinned === 'right');
112
+ return siblings[0] === model;
113
+ }
114
+ /**
115
+ * True when the provided structure model is the last non-pinned sibling in its parent's children.
116
+ * Useful to handle the 'no-pinned-end' condition.
117
+ *
118
+ * @param {ColumnStructureModel} model - Structure model to check.
119
+ * @returns {boolean} True when model is the last non-pinned sibling.
120
+ */
121
+ static isNoPinnedEnd(model) {
122
+ const siblings = model.parent
123
+ .getOrderedChildren()
124
+ .filter((child) => !child.pinned);
125
+ return siblings[siblings.length - 1] === model;
126
+ }
127
+ /**
128
+ * True when the provided model is the first child of its parent.
129
+ *
130
+ * @param {ColumnStructureModel} model - Structure model to check.
131
+ * @returns {boolean} True when model is the first child.
132
+ */
133
+ static isParentStart(model) {
134
+ return model.parent.getOrderedChildren()[0] === model;
135
+ }
136
+ /**
137
+ * True when the provided model is the last child of its parent.
138
+ *
139
+ * @param {ColumnStructureModel} model - Structure model to check.
140
+ * @returns {boolean} True when model is the last child.
141
+ */
142
+ static isParentEnd(model) {
143
+ const parentChildren = model.parent.getOrderedChildren();
144
+ return parentChildren[parentChildren.length - 1] === model;
145
+ }
146
+ /**
147
+ * Compute a node's colSpan by iterating its subtree and counting the maximum number
148
+ * of nodes present at any single level (visual column span).
149
+ *
150
+ * @param {ColumnStructureModel} mode - ColumnStructureModel node to examine.
151
+ * @returns {number} Number of visual columns spanned by the node.
152
+ */
153
+ static getColSpan(mode) {
154
+ const children = mode.iterator();
155
+ const rowMap = {};
156
+ children.forEach((node) => {
157
+ rowMap[node.level] = (rowMap[node.level] || 0) + 1;
158
+ });
159
+ return Math.max(...Object.values(rowMap));
160
+ }
161
+ /**
162
+ * Return cached leaf render nodes for this subtree.
163
+ * Caches the result on first call and returns cached array on subsequent calls.
164
+ *
165
+ * @returns {ColumnRenderInputModel[]} Array of leaf render input nodes.
166
+ */
167
+ getLeaves() {
168
+ if (this.leaves.length > 0) {
169
+ return this.leaves;
170
+ }
171
+ const leaves = this.iterator().filter((model) => model.isLeaf());
172
+ this.leaves = leaves;
173
+ return leaves;
174
+ }
175
+ /**
176
+ * Generic iterator that supports traversal modes ('dfs' currently implemented).
177
+ *
178
+ * @param {IteratorMode} [mode='dfs'] - Iterator mode ('dfs' | 'bfs').
179
+ * @returns {ColumnRenderInputModel[]} Traversal-ordered array of nodes.
180
+ */
181
+ iterator(mode = 'dfs') {
182
+ if (mode === 'dfs') {
183
+ return this.dfsIterator();
184
+ }
185
+ // Future: implement BFS mode here.
186
+ return [];
187
+ }
188
+ /**
189
+ * Depth-first pre-order traversal of this node and its descendants.
190
+ * Caches the result for the 'dfs' mode to avoid repeated recursion.
191
+ *
192
+ * @returns {ColumnRenderInputModel[]} Array of nodes in DFS order (includes this node).
193
+ */
194
+ dfsIterator() {
195
+ if (this.iteratorCacheMap.has('dfs')) {
196
+ return this.iteratorCacheMap.get('dfs');
197
+ }
198
+ const localResult = [];
199
+ localResult.push(this);
200
+ if (this.children && this.children.length > 0) {
201
+ this.children.forEach((child) => {
202
+ localResult.push(...child.dfsIterator());
203
+ });
204
+ }
205
+ this.iteratorCacheMap.set('dfs', localResult);
206
+ return localResult;
207
+ }
208
+ /**
209
+ * True when this render node has no children (visual leaf).
210
+ *
211
+ * @returns {boolean} True when node is a leaf.
212
+ */
213
+ isLeaf() {
214
+ return !this.children || this.children.length === 0;
215
+ }
216
+ }
@@ -0,0 +1,238 @@
1
+ import { isVegaTableColumnGroupingModelType } from '../../../../../types/type-guard';
2
+ /**
3
+ * Represents the hierarchical structure of table columns (including group columns).
4
+ *
5
+ * Responsibilities:
6
+ * - Build the tree from flat or grouped column configs (.from / .fromGroupColumns)
7
+ * - Provide traversal helpers (iterator / dfs) with caching
8
+ * - Provide utility checks (isLeaf, hasGroupColumn, hasPinnedColumn)
9
+ * - Produce leaf column configs for rendering (generateColumnConfigByLeaves)
10
+ * - Order root children by pinned type for rendering (orderChildrenByPinned)
11
+ */
12
+ export class ColumnStructureModel {
13
+ /**
14
+ * Constructor for ColumnStructureModel.
15
+ *
16
+ * @param {string} key - Unique key for the column.
17
+ * @param {number} level - Row level of this column (root uses ROOT_LEVEL).
18
+ * @param {ColumnStructureModel} [parent] - Optional parent node.
19
+ * @param {string} [label] - Optional display label for the column.
20
+ * @param {VegaTablePinnedType} [pinned] - Optional pinned metadata ('left'|'right'|null).
21
+ */
22
+ constructor(key, level, parent, label, pinned) {
23
+ this.key = key;
24
+ this.level = level;
25
+ this.parent = parent;
26
+ this.label = label;
27
+ this.pinned = pinned;
28
+ this.leaves = [];
29
+ this.orderedChildren = [];
30
+ this.iteratorCacheMap = new Map();
31
+ }
32
+ /**
33
+ * Creates the root ColumnStructureModel from column configs.
34
+ *
35
+ * @param {VegaTableColumnConfig[]} columnsConfig - Array of column configs.
36
+ * @param {Nullable<VegaTableGroupColumnConfig[]>} groupColumnConfig - Optional grouping configuration.
37
+ * @returns {ColumnStructureModel} Root column structure model.
38
+ */
39
+ static from(columnsConfig, groupColumnConfig) {
40
+ const rootModel = new ColumnStructureModel(this.ROOT_KEY, ColumnStructureModel.ROOT_LEVEL);
41
+ if (groupColumnConfig) {
42
+ rootModel.children = this.fromGroupColumns(rootModel, groupColumnConfig);
43
+ return rootModel;
44
+ }
45
+ else if (columnsConfig) {
46
+ rootModel.children = columnsConfig.map((column) => new ColumnStructureModel(column.key || column.prop || column.label, 0, rootModel, null, column.pinned));
47
+ return rootModel;
48
+ }
49
+ else {
50
+ rootModel.children = [];
51
+ return rootModel;
52
+ }
53
+ }
54
+ /**
55
+ * Recursively creates ColumnStructureModel children from group column configs.
56
+ *
57
+ * @param {ColumnStructureModel} parent - Parent node for the created children.
58
+ * @param {VegaTableGroupColumnConfig[]} groupColumns - Array of group column configs.
59
+ * @param {number} level - Current row level.
60
+ * @returns {ColumnStructureModel[]} Array of child column structure models.
61
+ */
62
+ static fromGroupColumns(parent, groupColumns, level = 0) {
63
+ if (groupColumns && groupColumns.length > 0) {
64
+ return groupColumns.map((groupColumn) => {
65
+ if (isVegaTableColumnGroupingModelType(groupColumn)) {
66
+ const current = new ColumnStructureModel(groupColumn.key, level, parent, groupColumn.label, groupColumn.pinned);
67
+ current.children = this.fromGroupColumns(current, groupColumn.children, level + 1);
68
+ return current;
69
+ }
70
+ else {
71
+ return new ColumnStructureModel(groupColumn.key, level, parent);
72
+ }
73
+ });
74
+ }
75
+ return [];
76
+ }
77
+ /**
78
+ * Generates an array of VegaTableColumnConfig for all leaf columns.
79
+ *
80
+ * @param {VegaTableColumnConfig[]} columns - Array of all column configs.
81
+ * @returns {VegaTableColumnConfig[]} Array of configs for leaf columns.
82
+ */
83
+ generateColumnConfigByLeaves(columns) {
84
+ return this.getLeaves().map((leaf) => columns.find((column) => column.key === leaf.key || column.prop === leaf.key || column.label === leaf.key));
85
+ }
86
+ /**
87
+ * Compute the maximum depth (highest level value) under this node.
88
+ * This is useful to determine the number of header rows required for rendering.
89
+ *
90
+ * @returns {number} Maximum level found in the subtree (or 0 when empty).
91
+ */
92
+ getMaxDepth() {
93
+ const models = this.dfsIterator();
94
+ if (models.length === 0) {
95
+ return 0;
96
+ }
97
+ return Math.max(...models.map((model) => model.level)) + 1;
98
+ }
99
+ /**
100
+ * Checks if this subtree contains any group (non-leaf) columns.
101
+ *
102
+ * @returns {boolean} True if any descendant is a group column.
103
+ */
104
+ hasGroupColumn() {
105
+ return !!this.children.find((model) => !model.isLeaf());
106
+ }
107
+ /**
108
+ * Checks if this subtree contains any left pinned children.
109
+ *
110
+ * @returns {boolean} True if any immediate child has a pinned value.
111
+ */
112
+ hasLeftPinnedColumn() {
113
+ return !!this.children.find((model) => model.pinned === 'left');
114
+ }
115
+ /**
116
+ * Checks if this subtree contains any right pinned children.
117
+ *
118
+ * @returns {boolean} True if any immediate child has a pinned value.
119
+ */
120
+ hasRightPinnedColumn() {
121
+ return !!this.children.find((model) => model.pinned === 'right');
122
+ }
123
+ /**
124
+ * Checks if this node is a leaf (no children).
125
+ *
126
+ * @returns {boolean} True when this node has no children.
127
+ */
128
+ isLeaf() {
129
+ return !this.children || this.children.length === 0;
130
+ }
131
+ /**
132
+ * Return an array of nodes for this subtree using the specified traversal mode.
133
+ *
134
+ * Currently only depth-first search ('dfs') is supported. The returned array is
135
+ * cached per-mode to avoid repeated traversal costs.
136
+ *
137
+ * @param {IteratorMode} mode - Traversal mode to use. Defaults to 'dfs'.
138
+ * @returns {ColumnStructureModel[]} Array of ColumnStructureModel nodes in traversal order.
139
+ */
140
+ iterator(mode = 'dfs') {
141
+ if (mode === 'dfs') {
142
+ return this.dfsIterator();
143
+ }
144
+ return [];
145
+ }
146
+ /**
147
+ * Gets all leaf nodes in the subtree, with caching.
148
+ *
149
+ * Subsequent calls return the cached array until the underlying model is rebuilt.
150
+ *
151
+ * @returns {ColumnStructureModel[]} Array of leaf column models.
152
+ */
153
+ getLeaves() {
154
+ if (this.leaves.length > 0) {
155
+ return this.leaves;
156
+ }
157
+ const leaves = this.dfsIterator().filter((model) => model.isLeaf());
158
+ this.leaves = leaves;
159
+ return leaves;
160
+ }
161
+ /**
162
+ * For root nodes, returns children ordered by pinned type (left, none, right).
163
+ * For non-root nodes, returns children in their natural order.
164
+ *
165
+ * @returns {ColumnStructureModel[]} Array of child column models.
166
+ */
167
+ getOrderedChildren() {
168
+ if (!this.isRoot())
169
+ return this.children;
170
+ return this.orderedChildren;
171
+ }
172
+ /**
173
+ * Orders root children by pinned type (left, none, right) and caches the result.
174
+ *
175
+ * For non-root nodes this method returns children in their natural order.
176
+ *
177
+ * @returns {ColumnStructureModel[]} Array of ordered child column models.
178
+ */
179
+ orderChildrenByPinned() {
180
+ if (!this.isRoot())
181
+ return this.children;
182
+ if (this.orderedChildren.length > 0) {
183
+ return this.orderedChildren;
184
+ }
185
+ const leftPinned = [];
186
+ const noPinned = [];
187
+ const rightPinned = [];
188
+ this.children.forEach((child) => {
189
+ if (child.pinned === 'left') {
190
+ leftPinned.push(child);
191
+ }
192
+ else if (child.pinned === 'right') {
193
+ rightPinned.push(child);
194
+ }
195
+ else {
196
+ noPinned.push(child);
197
+ }
198
+ });
199
+ const children = [...leftPinned, ...noPinned, ...rightPinned];
200
+ this.orderedChildren = children;
201
+ return children;
202
+ }
203
+ /**
204
+ * Checks if this node is the root node.
205
+ *
206
+ * @returns {boolean} True if root node, false otherwise.
207
+ */
208
+ isRoot() {
209
+ return this.level === ColumnStructureModel.ROOT_LEVEL;
210
+ }
211
+ /**
212
+ * Performs a depth-first traversal of the column structure.
213
+ *
214
+ * The traversal respects root-child pinned ordering (left/no/right) for the root node.
215
+ * Results are cached per-node to avoid repeated recursion costs.
216
+ *
217
+ * @returns {ColumnStructureModel[]} Array of all nodes in DFS order.
218
+ */
219
+ dfsIterator() {
220
+ if (this.iteratorCacheMap.has('dfs')) {
221
+ return this.iteratorCacheMap.get('dfs');
222
+ }
223
+ const localResult = [];
224
+ const children = this.orderChildrenByPinned();
225
+ if (!this.isRoot()) {
226
+ localResult.push(this);
227
+ }
228
+ if (children && children.length > 0) {
229
+ children.forEach((child) => {
230
+ localResult.push(...child.dfsIterator());
231
+ });
232
+ }
233
+ this.iteratorCacheMap.set('dfs', localResult);
234
+ return localResult;
235
+ }
236
+ }
237
+ ColumnStructureModel.ROOT_LEVEL = -1;
238
+ ColumnStructureModel.ROOT_KEY = '#root-model#';
@@ -0,0 +1,83 @@
1
+ import { ColumnStructureModel } from '../column-structure-model';
2
+ import { ColumnRenderInputModel } from '../column-render-input-model';
3
+ describe('ColumnRenderInputModel', () => {
4
+ const columns = [
5
+ { key: 'a', label: 'A' },
6
+ { label: 'B' },
7
+ { prop: 'c', label: 'C' },
8
+ ];
9
+ const groupConfig = [
10
+ {
11
+ key: 'a',
12
+ label: 'Group A',
13
+ pinned: 'left',
14
+ children: [{ key: 'b', label: 'B', children: [{ key: 'c' }, { key: 'd' }] }],
15
+ },
16
+ { key: 'e' },
17
+ { key: 'h', label: 'Group H', pinned: 'right', children: [{ key: 'i' }] },
18
+ ];
19
+ it('normal columns', () => {
20
+ const root = ColumnStructureModel.from(columns, null);
21
+ const renders = ColumnRenderInputModel.from(root);
22
+ expect(renders.length).toBe(3);
23
+ expect(renders).toMatchSnapshot();
24
+ });
25
+ it('grouped columns', () => {
26
+ const root = ColumnStructureModel.from(null, groupConfig);
27
+ const renders = ColumnRenderInputModel.from(root);
28
+ expect(renders.length).toBe(3);
29
+ expect(renders).toMatchSnapshot();
30
+ });
31
+ it('getLeaves/iterator in columns', () => {
32
+ const root = ColumnStructureModel.from(columns, null);
33
+ const renders = ColumnRenderInputModel.from(root);
34
+ const leaves = renders.flatMap((model) => model.getLeaves());
35
+ expect(leaves.map((l) => l.key)).toEqual(['a', 'B', 'c']);
36
+ const iterator = renders.flatMap((model) => model.iterator());
37
+ expect(iterator.map((l) => l.key)).toEqual(['a', 'B', 'c']);
38
+ });
39
+ it('getLeaves/iterator in groupColumns', () => {
40
+ const root = ColumnStructureModel.from(null, groupConfig);
41
+ const renders = ColumnRenderInputModel.from(root);
42
+ const leaves = renders.flatMap((model) => model.getLeaves());
43
+ expect(leaves.map((l) => l.key)).toEqual(['c', 'd', 'e', 'i']);
44
+ const iterator = renders.flatMap((model) => model.iterator());
45
+ expect(iterator.map((l) => l.key)).toEqual([
46
+ 'a',
47
+ 'b',
48
+ 'c',
49
+ 'd',
50
+ 'e',
51
+ 'h',
52
+ 'i',
53
+ ]);
54
+ });
55
+ it('leaves cache', () => {
56
+ const root = ColumnStructureModel.from(columns, null);
57
+ const renders = ColumnRenderInputModel.from(root);
58
+ const first = renders[0].getLeaves();
59
+ const second = renders[0].getLeaves();
60
+ expect(first).toBe(second);
61
+ });
62
+ it('iterator cache', () => {
63
+ const root = ColumnStructureModel.from(columns, null);
64
+ const renders = ColumnRenderInputModel.from(root);
65
+ const first = renders[0].iterator();
66
+ const second = renders[0].iterator();
67
+ expect(first).toBe(second);
68
+ });
69
+ it('empty group columns and columns', () => {
70
+ const root = ColumnStructureModel.from(null, null);
71
+ const renders = ColumnRenderInputModel.from(root);
72
+ expect(renders).toEqual([]);
73
+ const leaves = renders.flatMap((model) => model.getLeaves());
74
+ const iterator = renders.flatMap((model) => model.iterator());
75
+ expect(leaves).toEqual([]);
76
+ expect(iterator).toEqual([]);
77
+ });
78
+ it('call iterator with a not supported type', () => {
79
+ const root = ColumnStructureModel.from(columns, null);
80
+ const renders = ColumnRenderInputModel.from(root);
81
+ expect(renders[0].iterator('not-support')).toEqual([]);
82
+ });
83
+ });