@globalpayments/vega 2.56.0 → 2.57.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 (402) hide show
  1. package/dist/cjs/{app-globals-7e482341.js → app-globals-26e2fe1e.js} +9 -9
  2. package/dist/cjs/{child-nodes-event-prevent-slimmer-29020cc8.js → child-nodes-event-prevent-slimmer-96240a0e.js} +1 -1
  3. package/dist/cjs/{code-block-e56c5216.js → code-block-7650c868.js} +3 -3
  4. package/dist/cjs/{component-usage-runtime-metrics-dcb32c24.js → component-usage-runtime-metrics-d10ace87.js} +1 -1
  5. package/dist/cjs/{component-value-history-controller-slimmer.abstract-9a1285a1.js → component-value-history-controller-slimmer.abstract-a6e4e5bc.js} +3 -3
  6. package/dist/cjs/{content-state-e07c843c.js → content-state-fd5ad4a8.js} +3 -3
  7. package/dist/cjs/{create-public-api-runtime-metrics-slimmer-a3d17afb.js → create-public-api-runtime-metrics-slimmer-e2e274e1.js} +1 -1
  8. package/dist/cjs/{design-token-3e0bd48d.js → design-token-e771bb16.js} +3 -3
  9. package/dist/cjs/{element-appender-slimmer-2b9ca234.js → element-appender-slimmer-7f98d16b.js} +4 -4
  10. package/dist/cjs/{feature-flag-controller-5e58aae4.js → feature-flag-controller-ce2162c8.js} +1 -1
  11. package/dist/cjs/{form-field-controller-slimmer-dc6d0fe1.js → form-field-controller-slimmer-7bb7df10.js} +4 -4
  12. package/dist/cjs/{icon-manager-9a47399c.js → icon-manager-9072356d.js} +1 -1
  13. package/dist/cjs/{image-annotation-action-76e3c89d.js → image-annotation-action-6715d6f3.js} +2 -2
  14. package/dist/cjs/{index-8b247c17.js → index-4d7bce1a.js} +2 -2
  15. package/dist/cjs/{index-ebb1bb17.js → index-ee4bc191.js} +2 -2
  16. package/dist/cjs/index.cjs.js +16 -16
  17. package/dist/cjs/{inject-keyboard-manager-11df8296.js → inject-keyboard-manager-f1f781b7.js} +1 -1
  18. package/dist/cjs/{internal-icon-manager-00f49470.js → internal-icon-manager-f8677abb.js} +1 -1
  19. package/dist/cjs/{keyboard-manager-1843112c.js → keyboard-manager-0be55fb9.js} +1 -1
  20. package/dist/cjs/{keyboard-manager-slimmer-0a5f5770.js → keyboard-manager-slimmer-92c7227b.js} +1 -1
  21. package/dist/cjs/loader.cjs.js +14 -14
  22. package/dist/cjs/{public-rules-1ac67099.js → public-rules-036795a4.js} +6 -6
  23. package/dist/cjs/{responsive-format-facade-e2e11c24.js → responsive-format-facade-d164ced7.js} +7 -7
  24. package/dist/cjs/{rich-text-editor-required-rule-63f50aa4.js → rich-text-editor-required-rule-91eb0e22.js} +1 -1
  25. package/dist/cjs/{state-background-color-formatter-e585a027.js → state-background-color-formatter-c57409ea.js} +1 -1
  26. package/dist/cjs/{string-input-formatter-slimmer-a5feb2ed.js → string-input-formatter-slimmer-92ab034f.js} +3 -3
  27. package/dist/cjs/{style-formatter-0213d3a8.js → style-formatter-3e7af35b.js} +2 -2
  28. package/dist/cjs/{sub-state-notify-slimmer-f68fbf29.js → sub-state-notify-slimmer-409bbd1a.js} +1 -1
  29. package/dist/cjs/{sub-state-observer-slimmer-e06cdf7e.js → sub-state-observer-slimmer-93d0a609.js} +1 -1
  30. package/dist/cjs/{translation-e5003a00.js → translation-de7e351e.js} +1 -1
  31. package/dist/cjs/{translation-slimmer-127a0f83.js → translation-slimmer-83bdb9fe.js} +1 -1
  32. package/dist/cjs/{type-guard-4ba85fdc.js → type-guard-aa8fdeaf.js} +16 -0
  33. package/dist/cjs/vega-accordion.cjs.entry.js +16 -16
  34. package/dist/cjs/vega-app-footer.cjs.entry.js +1 -1
  35. package/dist/cjs/vega-app-header-button.cjs.entry.js +17 -17
  36. package/dist/cjs/vega-backdrop.cjs.entry.js +1 -1
  37. package/dist/cjs/vega-banner.cjs.entry.js +6 -6
  38. package/dist/cjs/vega-bar-chart.cjs.entry.js +1 -1
  39. package/dist/cjs/vega-box.cjs.entry.js +16 -16
  40. package/dist/cjs/vega-brand-logo.cjs.entry.js +4 -4
  41. package/dist/cjs/vega-breadcrumb.cjs.entry.js +4 -4
  42. package/dist/cjs/vega-button-circle.cjs.entry.js +16 -16
  43. package/dist/cjs/vega-button-group_2.cjs.entry.js +7 -7
  44. package/dist/cjs/vega-button-link.cjs.entry.js +4 -4
  45. package/dist/cjs/vega-button.cjs.entry.js +14 -14
  46. package/dist/cjs/vega-calendar_3.cjs.entry.js +14 -14
  47. package/dist/cjs/vega-card.cjs.entry.js +15 -15
  48. package/dist/cjs/vega-carousel.cjs.entry.js +13 -13
  49. package/dist/cjs/vega-checkbox_2.cjs.entry.js +9 -9
  50. package/dist/cjs/vega-chip.cjs.entry.js +16 -16
  51. package/dist/cjs/vega-code-block.cjs.entry.js +15 -15
  52. package/dist/cjs/vega-color-picker.cjs.entry.js +6 -6
  53. package/dist/cjs/vega-combo-box.cjs.entry.js +12 -12
  54. package/dist/cjs/vega-counter-badge.cjs.entry.js +1 -1
  55. package/dist/cjs/vega-date-picker_2.cjs.entry.js +23 -23
  56. package/dist/cjs/vega-dialog_2.cjs.entry.js +16 -16
  57. package/dist/cjs/vega-divider.cjs.entry.js +15 -15
  58. package/dist/cjs/vega-dropdown_5.cjs.entry.js +20 -20
  59. package/dist/cjs/vega-env-manager-23b8b23c.js +2 -2
  60. package/dist/cjs/vega-field-error.cjs.entry.js +1 -1
  61. package/dist/cjs/vega-field-label.cjs.entry.js +1 -1
  62. package/dist/cjs/vega-file-uploader.cjs.entry.js +9 -9
  63. package/dist/cjs/vega-flag-icon.cjs.entry.js +16 -16
  64. package/dist/cjs/vega-flex.cjs.entry.js +16 -16
  65. package/dist/cjs/vega-font.cjs.entry.js +15 -15
  66. package/dist/cjs/vega-form.cjs.entry.js +10 -10
  67. package/dist/cjs/vega-grid.cjs.entry.js +15 -15
  68. package/dist/cjs/vega-hint.cjs.entry.js +1 -1
  69. package/dist/cjs/vega-icon.cjs.entry.js +15 -15
  70. package/dist/cjs/vega-image-uploader.cjs.entry.js +17 -17
  71. package/dist/cjs/vega-input-credit-card.cjs.entry.js +11 -11
  72. package/dist/cjs/vega-input-numeric.cjs.entry.js +13 -13
  73. package/dist/cjs/vega-input-phone-number.cjs.entry.js +16 -16
  74. package/dist/cjs/vega-input-range.cjs.entry.js +10 -10
  75. package/dist/cjs/vega-input-select.cjs.entry.js +18 -18
  76. package/dist/cjs/vega-input.cjs.entry.js +10 -10
  77. package/dist/cjs/{vega-internal-event-id-6cdc95fe.js → vega-internal-event-id-bda08efa.js} +6 -0
  78. package/dist/cjs/vega-item-toggle.cjs.entry.js +1 -1
  79. package/dist/cjs/vega-left-nav_5.cjs.entry.js +18 -18
  80. package/dist/cjs/vega-line-chart.cjs.entry.js +1 -1
  81. package/dist/cjs/vega-loader-wrapper_2.cjs.entry.js +13 -13
  82. package/dist/cjs/vega-page-notification_2.cjs.entry.js +1 -1
  83. package/dist/cjs/vega-pagination-page-selector-mobile.cjs.entry.js +5 -5
  84. package/dist/cjs/vega-pagination-page-size-selector-mobile.cjs.entry.js +5 -5
  85. package/dist/cjs/vega-pagination.cjs.entry.js +15 -15
  86. package/dist/cjs/vega-pie-chart.cjs.entry.js +1 -1
  87. package/dist/cjs/vega-popover_2.cjs.entry.js +16 -16
  88. package/dist/cjs/vega-progress-tracker.cjs.entry.js +1 -1
  89. package/dist/cjs/vega-radio_2.cjs.entry.js +12 -12
  90. package/dist/cjs/vega-rich-text-content.cjs.entry.js +12 -12
  91. package/dist/cjs/vega-rich-text-editor_4.cjs.entry.js +23 -23
  92. package/dist/cjs/vega-section-title.cjs.entry.js +1 -1
  93. package/dist/cjs/vega-segment-control.cjs.entry.js +1 -1
  94. package/dist/cjs/vega-selection-chip_2.cjs.entry.js +17 -17
  95. package/dist/cjs/vega-selection-tile_2.cjs.entry.js +10 -10
  96. package/dist/cjs/vega-sidenav_3.cjs.entry.js +16 -16
  97. package/dist/cjs/vega-signature-capture.cjs.entry.js +19 -19
  98. package/dist/cjs/{vega-skeleton-loader-controller-3833c813.js → vega-skeleton-loader-controller-d534f5a1.js} +1 -1
  99. package/dist/cjs/vega-skeleton.cjs.entry.js +1 -1
  100. package/dist/cjs/vega-slot-container.cjs.entry.js +1 -1
  101. package/dist/cjs/vega-stepper.cjs.entry.js +9 -9
  102. package/dist/cjs/vega-tab-group_2.cjs.entry.js +4 -4
  103. package/dist/cjs/vega-table_8.cjs.entry.js +1474 -316
  104. package/dist/cjs/vega-text.cjs.entry.js +1 -1
  105. package/dist/cjs/vega-textarea.cjs.entry.js +9 -9
  106. package/dist/cjs/vega-time-picker_2.cjs.entry.js +20 -20
  107. package/dist/cjs/vega-toggle-switch.cjs.entry.js +6 -6
  108. package/dist/cjs/vega-tooltip_2.cjs.entry.js +16 -16
  109. package/dist/cjs/vega.cjs.js +14 -14
  110. package/dist/cjs/{wait-for-vega-handler-4491efc9.js → wait-for-vega-handler-5469ff80.js} +1 -1
  111. package/dist/collection/components/vega-table/slimmers/controllers/dto/column-render-input-model.js +216 -0
  112. package/dist/collection/components/vega-table/slimmers/controllers/dto/column-structure-model.js +238 -0
  113. package/dist/collection/components/vega-table/slimmers/controllers/dto/test/column-render-input-model.test.js +83 -0
  114. package/dist/collection/components/vega-table/slimmers/controllers/dto/test/column-structure-model.test.js +147 -0
  115. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-column-structure-model-controller.js +66 -0
  116. package/dist/collection/components/vega-table/slimmers/controllers/vega-table-render-input-controller.js +171 -0
  117. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-body-renderer.js +6 -1
  118. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-cell-renderer.js +22 -4
  119. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.js +13 -3
  120. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-header-renderer.js +43 -6
  121. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.js +175 -0
  122. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-renderer.js +7 -0
  123. package/dist/collection/components/vega-table/slimmers/renderers/vega-table-row-renderer.js +6 -5
  124. package/dist/collection/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-cell-state-controller.js +41 -0
  125. package/dist/collection/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-row-state-controller.js +48 -0
  126. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.css +58 -11
  127. package/dist/collection/components/vega-table/vega-table-cell/vega-table-cell.js +49 -6
  128. package/dist/collection/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.js +5 -1
  129. package/dist/collection/components/vega-table/vega-table-expand-row/vega-table-expand-row.css +11 -0
  130. package/dist/collection/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-state-controller.js +15 -0
  131. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.css +42 -11
  132. package/dist/collection/components/vega-table/vega-table-head-cell/vega-table-head-cell.js +45 -9
  133. package/dist/collection/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.js +53 -10
  134. package/dist/collection/components/vega-table/vega-table-head-row/vega-table-head-row.css +37 -0
  135. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.css +5 -16
  136. package/dist/collection/components/vega-table/vega-table-row/vega-table-row.js +21 -0
  137. package/dist/collection/components/vega-table/vega-table.css +22 -0
  138. package/dist/collection/components/vega-table/vega-table.js +52 -1
  139. package/dist/collection/helpers/event-manager/event-id/vega-internal-event-id.js +3 -0
  140. package/dist/collection/types/type-guard.js +15 -0
  141. package/dist/esm/{app-globals-b5881948.js → app-globals-366415b3.js} +9 -9
  142. package/dist/esm/{child-nodes-event-prevent-slimmer-2b975cbf.js → child-nodes-event-prevent-slimmer-b59a578e.js} +1 -1
  143. package/dist/esm/{code-block-1cdb0599.js → code-block-73869a3c.js} +3 -3
  144. package/dist/esm/{component-usage-runtime-metrics-385c7124.js → component-usage-runtime-metrics-a84cc93e.js} +1 -1
  145. package/dist/esm/{component-value-history-controller-slimmer.abstract-c12b2958.js → component-value-history-controller-slimmer.abstract-dfe89c93.js} +3 -3
  146. package/dist/esm/{content-state-cf27d19b.js → content-state-953906e8.js} +3 -3
  147. package/dist/esm/{create-public-api-runtime-metrics-slimmer-8ada793f.js → create-public-api-runtime-metrics-slimmer-bedf3a1e.js} +1 -1
  148. package/dist/esm/{design-token-96e03257.js → design-token-28a0a2e6.js} +3 -3
  149. package/dist/esm/{element-appender-slimmer-00dcccb9.js → element-appender-slimmer-7b9f4a8e.js} +4 -4
  150. package/dist/esm/{feature-flag-controller-0fbe8fb0.js → feature-flag-controller-51659753.js} +2 -2
  151. package/dist/esm/{form-field-controller-slimmer-6f49d396.js → form-field-controller-slimmer-707a6da2.js} +4 -4
  152. package/dist/esm/{icon-manager-638dd4d4.js → icon-manager-2ee1c619.js} +1 -1
  153. package/dist/esm/{image-annotation-action-e76b3396.js → image-annotation-action-5bfda07c.js} +2 -2
  154. package/dist/esm/{index-f5d2fe61.js → index-3e551cbe.js} +2 -2
  155. package/dist/esm/{index-44c794b4.js → index-e9da316f.js} +2 -2
  156. package/dist/esm/index.js +16 -16
  157. package/dist/esm/{inject-keyboard-manager-a15cf43c.js → inject-keyboard-manager-5141d09a.js} +1 -1
  158. package/dist/esm/{internal-icon-manager-58cf8aa6.js → internal-icon-manager-7eac52c8.js} +1 -1
  159. package/dist/esm/{keyboard-manager-f496a623.js → keyboard-manager-3ffe81b0.js} +1 -1
  160. package/dist/esm/{keyboard-manager-slimmer-a4cc9593.js → keyboard-manager-slimmer-751e98f5.js} +1 -1
  161. package/dist/esm/loader.js +14 -14
  162. package/dist/esm/{public-rules-e8616346.js → public-rules-c5d2c1e1.js} +6 -6
  163. package/dist/esm/{responsive-format-facade-464498b6.js → responsive-format-facade-60731164.js} +7 -7
  164. package/dist/esm/{rich-text-editor-required-rule-69844536.js → rich-text-editor-required-rule-4429066e.js} +1 -1
  165. package/dist/esm/{state-background-color-formatter-121ae7d3.js → state-background-color-formatter-da5e76e8.js} +1 -1
  166. package/dist/esm/{string-input-formatter-slimmer-e53b6412.js → string-input-formatter-slimmer-6ab5cad6.js} +3 -3
  167. package/dist/esm/{style-formatter-670e20f7.js → style-formatter-57fc600a.js} +2 -2
  168. package/dist/esm/{sub-state-notify-slimmer-b6c8051c.js → sub-state-notify-slimmer-1c4d1e78.js} +1 -1
  169. package/dist/esm/{sub-state-observer-slimmer-93eeb87d.js → sub-state-observer-slimmer-1e9af9ec.js} +1 -1
  170. package/dist/esm/{translation-71e0711d.js → translation-a6eacb5f.js} +1 -1
  171. package/dist/esm/{translation-slimmer-e6b130bf.js → translation-slimmer-f28e4708.js} +1 -1
  172. package/dist/esm/{type-guard-158f6d7a.js → type-guard-84b1f192.js} +16 -1
  173. package/dist/esm/vega-accordion.entry.js +16 -16
  174. package/dist/esm/vega-app-footer.entry.js +1 -1
  175. package/dist/esm/vega-app-header-button.entry.js +17 -17
  176. package/dist/esm/vega-backdrop.entry.js +1 -1
  177. package/dist/esm/vega-banner.entry.js +6 -6
  178. package/dist/esm/vega-bar-chart.entry.js +1 -1
  179. package/dist/esm/vega-box.entry.js +16 -16
  180. package/dist/esm/vega-brand-logo.entry.js +4 -4
  181. package/dist/esm/vega-breadcrumb.entry.js +4 -4
  182. package/dist/esm/vega-button-circle.entry.js +16 -16
  183. package/dist/esm/vega-button-group_2.entry.js +7 -7
  184. package/dist/esm/vega-button-link.entry.js +4 -4
  185. package/dist/esm/vega-button.entry.js +14 -14
  186. package/dist/esm/vega-calendar_3.entry.js +14 -14
  187. package/dist/esm/vega-card.entry.js +15 -15
  188. package/dist/esm/vega-carousel.entry.js +13 -13
  189. package/dist/esm/vega-checkbox_2.entry.js +9 -9
  190. package/dist/esm/vega-chip.entry.js +16 -16
  191. package/dist/esm/vega-code-block.entry.js +15 -15
  192. package/dist/esm/vega-color-picker.entry.js +6 -6
  193. package/dist/esm/vega-combo-box.entry.js +12 -12
  194. package/dist/esm/vega-counter-badge.entry.js +1 -1
  195. package/dist/esm/vega-date-picker_2.entry.js +23 -23
  196. package/dist/esm/vega-dialog_2.entry.js +16 -16
  197. package/dist/esm/vega-divider.entry.js +15 -15
  198. package/dist/esm/vega-dropdown_5.entry.js +20 -20
  199. package/dist/esm/vega-env-manager-8f8dc473.js +2 -2
  200. package/dist/esm/vega-field-error.entry.js +1 -1
  201. package/dist/esm/vega-field-label.entry.js +1 -1
  202. package/dist/esm/vega-file-uploader.entry.js +9 -9
  203. package/dist/esm/vega-flag-icon.entry.js +16 -16
  204. package/dist/esm/vega-flex.entry.js +16 -16
  205. package/dist/esm/vega-font.entry.js +15 -15
  206. package/dist/esm/vega-form.entry.js +10 -10
  207. package/dist/esm/vega-grid.entry.js +15 -15
  208. package/dist/esm/vega-hint.entry.js +1 -1
  209. package/dist/esm/vega-icon.entry.js +15 -15
  210. package/dist/esm/vega-image-uploader.entry.js +17 -17
  211. package/dist/esm/vega-input-credit-card.entry.js +11 -11
  212. package/dist/esm/vega-input-numeric.entry.js +13 -13
  213. package/dist/esm/vega-input-phone-number.entry.js +16 -16
  214. package/dist/esm/vega-input-range.entry.js +10 -10
  215. package/dist/esm/vega-input-select.entry.js +18 -18
  216. package/dist/esm/vega-input.entry.js +10 -10
  217. package/dist/esm/{vega-internal-event-id-178b2743.js → vega-internal-event-id-f0ea2bab.js} +4 -1
  218. package/dist/esm/vega-item-toggle.entry.js +1 -1
  219. package/dist/esm/vega-left-nav_5.entry.js +18 -18
  220. package/dist/esm/vega-line-chart.entry.js +1 -1
  221. package/dist/esm/vega-loader-wrapper_2.entry.js +13 -13
  222. package/dist/esm/vega-page-notification_2.entry.js +1 -1
  223. package/dist/esm/vega-pagination-page-selector-mobile.entry.js +5 -5
  224. package/dist/esm/vega-pagination-page-size-selector-mobile.entry.js +5 -5
  225. package/dist/esm/vega-pagination.entry.js +15 -15
  226. package/dist/esm/vega-pie-chart.entry.js +1 -1
  227. package/dist/esm/vega-popover_2.entry.js +16 -16
  228. package/dist/esm/vega-progress-tracker.entry.js +1 -1
  229. package/dist/esm/vega-radio_2.entry.js +12 -12
  230. package/dist/esm/vega-rich-text-content.entry.js +12 -12
  231. package/dist/esm/vega-rich-text-editor_4.entry.js +23 -23
  232. package/dist/esm/vega-section-title.entry.js +1 -1
  233. package/dist/esm/vega-segment-control.entry.js +1 -1
  234. package/dist/esm/vega-selection-chip_2.entry.js +17 -17
  235. package/dist/esm/vega-selection-tile_2.entry.js +10 -10
  236. package/dist/esm/vega-sidenav_3.entry.js +16 -16
  237. package/dist/esm/vega-signature-capture.entry.js +19 -19
  238. package/dist/esm/{vega-skeleton-loader-controller-9d1ffa6c.js → vega-skeleton-loader-controller-3f6faa17.js} +1 -1
  239. package/dist/esm/vega-skeleton.entry.js +1 -1
  240. package/dist/esm/vega-slot-container.entry.js +1 -1
  241. package/dist/esm/vega-stepper.entry.js +9 -9
  242. package/dist/esm/vega-tab-group_2.entry.js +4 -4
  243. package/dist/esm/vega-table_8.entry.js +1475 -317
  244. package/dist/esm/vega-text.entry.js +1 -1
  245. package/dist/esm/vega-textarea.entry.js +9 -9
  246. package/dist/esm/vega-time-picker_2.entry.js +20 -20
  247. package/dist/esm/vega-toggle-switch.entry.js +6 -6
  248. package/dist/esm/vega-tooltip_2.entry.js +16 -16
  249. package/dist/esm/vega.js +14 -14
  250. package/dist/esm/{wait-for-vega-handler-e0a928cd.js → wait-for-vega-handler-c2c07ac3.js} +1 -1
  251. package/dist/types/components/vega-table/interface.d.ts +31 -0
  252. package/dist/types/components/vega-table/slimmers/controllers/dto/column-render-input-model.d.ts +138 -0
  253. package/dist/types/components/vega-table/slimmers/controllers/dto/column-structure-model.d.ts +140 -0
  254. package/dist/types/components/vega-table/slimmers/controllers/dto/test/column-render-input-model.test.d.ts +1 -0
  255. package/dist/types/components/vega-table/slimmers/controllers/dto/test/column-structure-model.test.d.ts +1 -0
  256. package/dist/types/components/vega-table/slimmers/controllers/vega-table-column-structure-model-controller.d.ts +35 -0
  257. package/dist/types/components/vega-table/slimmers/controllers/vega-table-render-input-controller.d.ts +103 -0
  258. package/dist/types/components/vega-table/slimmers/renderers/vega-table-body-renderer.d.ts +1 -0
  259. package/dist/types/components/vega-table/slimmers/renderers/vega-table-cell-renderer.d.ts +5 -2
  260. package/dist/types/components/vega-table/slimmers/renderers/vega-table-col-group-renderer.d.ts +1 -0
  261. package/dist/types/components/vega-table/slimmers/renderers/vega-table-header-renderer.d.ts +4 -1
  262. package/dist/types/components/vega-table/slimmers/renderers/vega-table-pinned-renderer.d.ts +18 -0
  263. package/dist/types/components/vega-table/slimmers/renderers/vega-table-renderer.d.ts +1 -0
  264. package/dist/types/components/vega-table/slimmers/renderers/vega-table-row-renderer.d.ts +1 -1
  265. package/dist/types/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-cell-state-controller.d.ts +4 -0
  266. package/dist/types/components/vega-table/vega-table-cell/slimmers/controllers/vega-table-row-state-controller.d.ts +15 -0
  267. package/dist/types/components/vega-table/vega-table-cell/vega-table-cell.d.ts +10 -0
  268. package/dist/types/components/vega-table/vega-table-expand-row/slimmers/renderers/vega-table-expand-row-renderer.d.ts +1 -0
  269. package/dist/types/components/vega-table/vega-table-head-cell/slimmers/controllers/vega-table-head-cell-state-controller.d.ts +1 -0
  270. package/dist/types/components/vega-table/vega-table-head-cell/vega-table-head-cell.d.ts +8 -1
  271. package/dist/types/components/vega-table/vega-table-head-row/slimmers/renderers/vega-table-head-row-renderer.d.ts +1 -0
  272. package/dist/types/components/vega-table/vega-table-row/vega-table-row.d.ts +5 -0
  273. package/dist/types/components/vega-table/vega-table.d.ts +17 -1
  274. package/dist/types/components.d.ts +21 -1
  275. package/dist/types/helpers/event-manager/event-id/vega-internal-event-id.d.ts +3 -0
  276. package/dist/types/types/components.type.d.ts +2 -0
  277. package/dist/types/types/type-guard.d.ts +10 -0
  278. package/dist/vega/index.esm.js +1 -1
  279. package/dist/vega/{p-397c7199.js → p-007bf7df.js} +1 -1
  280. package/dist/vega/{p-03c759ae.entry.js → p-0496f1cb.entry.js} +1 -1
  281. package/dist/vega/{p-1ebc1acf.entry.js → p-0604563a.entry.js} +1 -1
  282. package/dist/vega/{p-08a0cbd0.entry.js → p-07927476.entry.js} +1 -1
  283. package/dist/vega/{p-f50cd6c3.entry.js → p-0b77c6c9.entry.js} +1 -1
  284. package/dist/vega/{p-7e70938a.entry.js → p-1792a352.entry.js} +1 -1
  285. package/dist/vega/{p-7cc20ed5.entry.js → p-1c4d05de.entry.js} +1 -1
  286. package/dist/vega/{p-6b8d105e.entry.js → p-1e3f4007.entry.js} +1 -1
  287. package/dist/vega/{p-1737536e.entry.js → p-21a7530c.entry.js} +1 -1
  288. package/dist/vega/{p-ae74d511.js → p-2458ad97.js} +1 -1
  289. package/dist/vega/{p-0c660956.entry.js → p-27dca371.entry.js} +1 -1
  290. package/dist/vega/{p-3162a3f0.entry.js → p-2873b600.entry.js} +1 -1
  291. package/dist/vega/{p-e2282f71.entry.js → p-29f4cbed.entry.js} +1 -1
  292. package/dist/vega/{p-c5afd9aa.entry.js → p-2ebef70f.entry.js} +1 -1
  293. package/dist/vega/{p-578ac47f.entry.js → p-311f338d.entry.js} +1 -1
  294. package/dist/vega/p-34643550.entry.js +1 -0
  295. package/dist/vega/{p-5016b57e.entry.js → p-34dc3f71.entry.js} +1 -1
  296. package/dist/vega/{p-5cb92c51.entry.js → p-39049341.entry.js} +1 -1
  297. package/dist/vega/{p-a2c4c241.entry.js → p-397b5d91.entry.js} +1 -1
  298. package/dist/vega/{p-61e1e356.entry.js → p-3a7e897b.entry.js} +1 -1
  299. package/dist/vega/{p-06cd4a19.entry.js → p-41465ad0.entry.js} +1 -1
  300. package/dist/vega/{p-002062c3.entry.js → p-44880bdf.entry.js} +1 -1
  301. package/dist/vega/{p-7a8b6f2f.entry.js → p-4674c318.entry.js} +1 -1
  302. package/dist/vega/{p-e5eda663.entry.js → p-47e89c0e.entry.js} +1 -1
  303. package/dist/vega/p-49fd1009.js +1 -0
  304. package/dist/vega/{p-6bd7114d.entry.js → p-4c871d0f.entry.js} +1 -1
  305. package/dist/vega/{p-8e31e7ea.js → p-4f5eb8d5.js} +1 -1
  306. package/dist/vega/{p-72a4edf2.entry.js → p-500684e1.entry.js} +1 -1
  307. package/dist/vega/p-51297b96.js +1 -0
  308. package/dist/vega/{p-bbdc6170.entry.js → p-5130bb06.entry.js} +1 -1
  309. package/dist/vega/{p-4c595d8d.entry.js → p-51a4dc20.entry.js} +1 -1
  310. package/dist/vega/p-53e9595f.js +1 -0
  311. package/dist/vega/{p-bba5b112.entry.js → p-59282fc8.entry.js} +1 -1
  312. package/dist/vega/{p-fa5eb496.js → p-5d676a94.js} +1 -1
  313. package/dist/vega/{p-46eb330f.entry.js → p-5dec9bd9.entry.js} +1 -1
  314. package/dist/vega/{p-b1f65b13.js → p-5e2c9e69.js} +1 -1
  315. package/dist/vega/p-5f377954.js +1 -1
  316. package/dist/vega/{p-e860318d.entry.js → p-5f6b942c.entry.js} +1 -1
  317. package/dist/vega/{p-b6e0d996.entry.js → p-6131f229.entry.js} +1 -1
  318. package/dist/vega/p-65d8c2bc.js +1 -0
  319. package/dist/vega/{p-6419abd9.entry.js → p-66e9d31a.entry.js} +1 -1
  320. package/dist/vega/{p-dc383362.entry.js → p-6acf0a51.entry.js} +1 -1
  321. package/dist/vega/{p-7503fe08.entry.js → p-6dad2e5c.entry.js} +1 -1
  322. package/dist/vega/{p-da1d0c02.js → p-6e1b5949.js} +1 -1
  323. package/dist/vega/{p-636142ae.entry.js → p-6ec338b0.entry.js} +1 -1
  324. package/dist/vega/{p-246090cf.entry.js → p-75ff12da.entry.js} +1 -1
  325. package/dist/vega/{p-144d2390.entry.js → p-766ed063.entry.js} +1 -1
  326. package/dist/vega/{p-78937642.entry.js → p-76818196.entry.js} +1 -1
  327. package/dist/vega/p-79a0a06c.js +1 -0
  328. package/dist/vega/p-79c2282c.entry.js +1 -0
  329. package/dist/vega/p-7c0004dc.entry.js +1 -0
  330. package/dist/vega/{p-0ce88865.entry.js → p-7c348ac7.entry.js} +1 -1
  331. package/dist/vega/{p-fc790de5.entry.js → p-7d5ebd26.entry.js} +1 -1
  332. package/dist/vega/p-81ed90d5.js +1 -0
  333. package/dist/vega/{p-c685adcd.js → p-8246f8ae.js} +1 -1
  334. package/dist/vega/{p-aab6f547.entry.js → p-82b18195.entry.js} +1 -1
  335. package/dist/vega/{p-cc6410e6.js → p-832b59af.js} +1 -1
  336. package/dist/vega/{p-5c9efff8.entry.js → p-86a300e8.entry.js} +1 -1
  337. package/dist/vega/{p-576b812b.entry.js → p-888dc143.entry.js} +1 -1
  338. package/dist/vega/{p-b3da0b44.entry.js → p-8ba8a7cc.entry.js} +1 -1
  339. package/dist/vega/{p-cc63e827.js → p-8c46e116.js} +1 -1
  340. package/dist/vega/{p-6ec0e3ce.entry.js → p-8e581755.entry.js} +1 -1
  341. package/dist/vega/{p-a46ac2eb.js → p-8e662f26.js} +1 -1
  342. package/dist/vega/{p-fac5990f.entry.js → p-8fb5bcb0.entry.js} +1 -1
  343. package/dist/vega/{p-04c8b83d.entry.js → p-9481c073.entry.js} +1 -1
  344. package/dist/vega/{p-1a7d0e21.entry.js → p-99c4559e.entry.js} +1 -1
  345. package/dist/vega/{p-4ab3df00.js → p-9d6003ef.js} +1 -1
  346. package/dist/vega/{p-f3ec4ae6.entry.js → p-a1e50e6c.entry.js} +1 -1
  347. package/dist/vega/{p-302e01e9.entry.js → p-a2ef3429.entry.js} +1 -1
  348. package/dist/vega/p-a33c6652.entry.js +1 -0
  349. package/dist/vega/p-a4670e23.js +1 -0
  350. package/dist/vega/{p-487c0f17.entry.js → p-a92a8172.entry.js} +1 -1
  351. package/dist/vega/{p-4b2a90b8.js → p-aed3320d.js} +1 -1
  352. package/dist/vega/{p-7728041e.entry.js → p-b449fe9a.entry.js} +1 -1
  353. package/dist/vega/{p-81e56716.entry.js → p-b44ebc84.entry.js} +2 -2
  354. package/dist/vega/{p-5e530257.js → p-b8d7d4a9.js} +1 -1
  355. package/dist/vega/{p-d5f1794e.js → p-bcdb235d.js} +1 -1
  356. package/dist/vega/{p-36827489.entry.js → p-bd84b7b9.entry.js} +1 -1
  357. package/dist/vega/p-bdaf1143.entry.js +1 -0
  358. package/dist/vega/{p-ac3a2d9c.entry.js → p-c42ec0ac.entry.js} +1 -1
  359. package/dist/vega/{p-1c3e1134.js → p-cd3d468c.js} +1 -1
  360. package/dist/vega/{p-d8e1ed2d.js → p-ce14af16.js} +1 -1
  361. package/dist/vega/{p-2a6517f9.entry.js → p-d5ab867e.entry.js} +1 -1
  362. package/dist/vega/{p-6b7dca3e.js → p-d789b291.js} +1 -1
  363. package/dist/vega/{p-9a9766cc.entry.js → p-d82ceacf.entry.js} +1 -1
  364. package/dist/vega/p-d849e0f5.js +1 -0
  365. package/dist/vega/{p-7a40e033.js → p-db8cdba6.js} +1 -1
  366. package/dist/vega/{p-586139ce.entry.js → p-dc16e6ba.entry.js} +1 -1
  367. package/dist/vega/{p-c9f544bd.entry.js → p-e277ea73.entry.js} +1 -1
  368. package/dist/vega/{p-5f86a286.entry.js → p-e28fcf04.entry.js} +1 -1
  369. package/dist/vega/{p-c0043eed.entry.js → p-e32efc2e.entry.js} +1 -1
  370. package/dist/vega/{p-5be150cb.entry.js → p-e5196440.entry.js} +1 -1
  371. package/dist/vega/{p-4d793cb0.js → p-e77a83e4.js} +1 -1
  372. package/dist/vega/{p-c990e249.js → p-e940bc37.js} +1 -1
  373. package/dist/vega/{p-138fcf6e.js → p-ecd032fc.js} +1 -1
  374. package/dist/vega/{p-c9b9322b.js → p-f08a4adf.js} +1 -1
  375. package/dist/vega/{p-151dec6a.entry.js → p-f3bd26a1.entry.js} +1 -1
  376. package/dist/vega/p-f3f7d059.entry.js +1 -0
  377. package/dist/vega/{p-59f1fd3e.entry.js → p-f4546425.entry.js} +1 -1
  378. package/dist/vega/{p-ec7dc51f.entry.js → p-f4a7acff.entry.js} +1 -1
  379. package/dist/vega/{p-a42bc438.entry.js → p-f79c82c7.entry.js} +1 -1
  380. package/dist/vega/{p-4df90a1b.entry.js → p-f8e0e4f0.entry.js} +1 -1
  381. package/dist/vega/p-f8f8e7d2.entry.js +1 -0
  382. package/dist/vega/{p-73821eba.entry.js → p-f940b7f7.entry.js} +1 -1
  383. package/dist/vega/{p-66516ee9.js → p-fb8c99c5.js} +1 -1
  384. package/dist/vega/{p-778fd499.js → p-fcb04960.js} +1 -1
  385. package/dist/vega/{p-dc3d93d6.js → p-fd2f699b.js} +1 -1
  386. package/dist/vega/vega.esm.js +1 -1
  387. package/package.json +2 -2
  388. package/dist/vega/p-063d0bee.entry.js +0 -1
  389. package/dist/vega/p-2205ee4c.js +0 -1
  390. package/dist/vega/p-23064067.entry.js +0 -1
  391. package/dist/vega/p-2f6c4f2c.entry.js +0 -1
  392. package/dist/vega/p-37b05e0b.js +0 -1
  393. package/dist/vega/p-425ba7d6.js +0 -1
  394. package/dist/vega/p-4387d550.js +0 -1
  395. package/dist/vega/p-4a12fb0d.entry.js +0 -1
  396. package/dist/vega/p-68864531.js +0 -1
  397. package/dist/vega/p-6a7b7214.js +0 -1
  398. package/dist/vega/p-7cb11f3f.entry.js +0 -1
  399. package/dist/vega/p-962b40d1.entry.js +0 -1
  400. package/dist/vega/p-9d286c08.entry.js +0 -1
  401. package/dist/vega/p-d64b20c2.js +0 -1
  402. package/dist/vega/p-f4a13f3f.js +0 -1
@@ -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
+ });
@@ -0,0 +1,147 @@
1
+ import { ColumnStructureModel } from '../column-structure-model';
2
+ describe('ColumnStructureModel', () => {
3
+ it('normal columns', () => {
4
+ const columns = [
5
+ { key: 'a', label: 'A' },
6
+ { label: 'B' },
7
+ { prop: 'c', label: 'C' },
8
+ ];
9
+ const root = ColumnStructureModel.from(columns, null);
10
+ const keys = root.iterator().map((m) => m.key);
11
+ expect(keys).toEqual(['a', 'B', 'c']);
12
+ const leafKeys = root.getLeaves().map((l) => l.key);
13
+ expect(leafKeys).toEqual(['a', 'B', 'c']);
14
+ expect(root.hasLeftPinnedColumn()).toBe(false);
15
+ expect(root.hasRightPinnedColumn()).toBe(false);
16
+ expect(root.hasGroupColumn()).toBe(false);
17
+ expect(root.getMaxDepth()).toBe(1);
18
+ expect(root.generateColumnConfigByLeaves(columns)).toEqual([
19
+ { key: 'a', label: 'A' },
20
+ { label: 'B' },
21
+ { prop: 'c', label: 'C' },
22
+ ]);
23
+ });
24
+ it('normal columns with pinned', () => {
25
+ const columns = [
26
+ { key: 'a', label: 'A' },
27
+ { key: 'c', pinned: 'right', label: 'C' },
28
+ { key: 'b', pinned: 'left', label: 'B' },
29
+ ];
30
+ const root = ColumnStructureModel.from(columns, null);
31
+ const keys = root.iterator().map((m) => m.key);
32
+ expect(keys).toEqual(['b', 'a', 'c']);
33
+ const leafKeys = root.getLeaves().map((l) => l.key);
34
+ expect(leafKeys).toEqual(['b', 'a', 'c']);
35
+ expect(root.hasLeftPinnedColumn()).toBe(true);
36
+ expect(root.hasRightPinnedColumn()).toBe(true);
37
+ expect(root.hasGroupColumn()).toBe(false);
38
+ expect(root.getMaxDepth()).toBe(1);
39
+ expect(root.generateColumnConfigByLeaves(columns)).toEqual([
40
+ { key: 'b', label: 'B', pinned: 'left' },
41
+ { key: 'a', label: 'A' },
42
+ { key: 'c', label: 'C', pinned: 'right' },
43
+ ]);
44
+ });
45
+ it('group columns', () => {
46
+ const groupConfig = [
47
+ {
48
+ key: 'a',
49
+ label: 'Group A',
50
+ children: [{ key: 'e' }, { key: 'f' }],
51
+ },
52
+ {
53
+ key: 'b',
54
+ label: 'Group B',
55
+ pinned: 'right',
56
+ children: [{ key: 'g' }],
57
+ },
58
+ { key: 'c', label: 'Group C', pinned: 'left' },
59
+ { key: 'd' },
60
+ ];
61
+ const root = ColumnStructureModel.from(null, groupConfig);
62
+ const keys = root.iterator().map((m) => m.key);
63
+ expect(keys).toEqual(['c', 'a', 'e', 'f', 'd', 'b', 'g']);
64
+ const leafKeys = root.getLeaves().map((l) => l.key);
65
+ expect(leafKeys).toEqual(['c', 'e', 'f', 'd', 'g']);
66
+ expect(root.hasLeftPinnedColumn()).toBe(true);
67
+ expect(root.hasRightPinnedColumn()).toBe(true);
68
+ expect(root.hasGroupColumn()).toBe(true);
69
+ expect(root.getMaxDepth()).toBe(2);
70
+ expect(root.generateColumnConfigByLeaves([
71
+ { key: 'e', label: 'E' },
72
+ { key: 'c', label: 'C' },
73
+ { key: 'f', label: 'F' },
74
+ { key: 'h', label: 'H' },
75
+ { key: 'd', label: 'D' },
76
+ ])).toEqual([
77
+ { key: 'c', label: 'C' },
78
+ { key: 'e', label: 'E' },
79
+ { key: 'f', label: 'F' },
80
+ { key: 'd', label: 'D' },
81
+ undefined,
82
+ ]);
83
+ });
84
+ it('iterator cache', () => {
85
+ const groupConfig = [
86
+ {
87
+ key: 'a',
88
+ label: 'Group A',
89
+ children: [{ key: 'e' }, { key: 'f' }],
90
+ },
91
+ { key: 'd' },
92
+ ];
93
+ const root = ColumnStructureModel.from(null, groupConfig);
94
+ expect(root.iterator('bfs')).toEqual([]);
95
+ const first = root.iterator();
96
+ const second = root.iterator();
97
+ expect(first).toBe(second);
98
+ });
99
+ it('leaves cache', () => {
100
+ const groupConfig = [
101
+ {
102
+ key: 'a',
103
+ label: 'Group A',
104
+ children: [{ key: 'e' }, { key: 'f' }],
105
+ },
106
+ { key: 'd' },
107
+ ];
108
+ const root = ColumnStructureModel.from(null, groupConfig);
109
+ const first = root.getLeaves();
110
+ const second = root.getLeaves();
111
+ expect(first).toBe(second);
112
+ });
113
+ it('order cache', () => {
114
+ const groupConfig = [
115
+ {
116
+ key: 'a',
117
+ label: 'Group A',
118
+ children: [{ key: 'e' }, { key: 'f' }],
119
+ },
120
+ { key: 'c', label: 'Group C', pinned: 'left' },
121
+ { key: 'd' },
122
+ ];
123
+ const root = ColumnStructureModel.from(null, groupConfig);
124
+ const first = root['orderChildrenByPinned']();
125
+ const second = root['orderChildrenByPinned']();
126
+ expect(first).toBe(second);
127
+ expect(root.children[0]['orderedChildren']).toEqual([]);
128
+ });
129
+ it('handles empty inputs (no columns / groups)', () => {
130
+ const root = ColumnStructureModel.from([], []);
131
+ expect(root.children).toEqual([]);
132
+ expect(root.iterator()).toEqual([]);
133
+ expect(root.getLeaves()).toEqual([]);
134
+ expect(root.getMaxDepth()).toBe(0);
135
+ expect(root.hasGroupColumn()).toBe(false);
136
+ expect(root.hasLeftPinnedColumn()).toBe(false);
137
+ expect(root.hasRightPinnedColumn()).toBe(false);
138
+ expect(root.generateColumnConfigByLeaves([
139
+ { key: 'e', label: 'E' },
140
+ { key: 'c', label: 'C' },
141
+ ])).toEqual([]);
142
+ });
143
+ it('call iterator with a not supported type', () => {
144
+ const root = ColumnStructureModel.from(null, null);
145
+ expect(root.iterator('not-support')).toEqual([]);
146
+ });
147
+ });