@testgorilla/tgo-ui 11.22.3 → 12.0.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 (225) hide show
  1. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs +335 -229
  2. package/fesm2022/testgorilla-tgo-ui-components-accordion.mjs.map +1 -1
  3. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs +547 -465
  4. package/fesm2022/testgorilla-tgo-ui-components-ai-audio-circle.mjs.map +1 -1
  5. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs +160 -75
  6. package/fesm2022/testgorilla-tgo-ui-components-ai-caveat.mjs.map +1 -1
  7. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs +678 -278
  8. package/fesm2022/testgorilla-tgo-ui-components-ai-feedback.mjs.map +1 -1
  9. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs +337 -274
  10. package/fesm2022/testgorilla-tgo-ui-components-alert-banner.mjs.map +1 -1
  11. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs +351 -192
  12. package/fesm2022/testgorilla-tgo-ui-components-audio-waveform.mjs.map +1 -1
  13. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs +1950 -960
  14. package/fesm2022/testgorilla-tgo-ui-components-autocomplete-v2.mjs.map +1 -1
  15. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs +1206 -1044
  16. package/fesm2022/testgorilla-tgo-ui-components-autocomplete.mjs.map +1 -1
  17. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs +328 -182
  18. package/fesm2022/testgorilla-tgo-ui-components-avatar.mjs.map +1 -1
  19. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs +383 -203
  20. package/fesm2022/testgorilla-tgo-ui-components-badge.mjs.map +1 -1
  21. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs +553 -261
  22. package/fesm2022/testgorilla-tgo-ui-components-breadcrumb.mjs.map +1 -1
  23. package/fesm2022/testgorilla-tgo-ui-components-button.mjs +709 -739
  24. package/fesm2022/testgorilla-tgo-ui-components-button.mjs.map +1 -1
  25. package/fesm2022/testgorilla-tgo-ui-components-card.mjs +219 -184
  26. package/fesm2022/testgorilla-tgo-ui-components-card.mjs.map +1 -1
  27. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs +515 -458
  28. package/fesm2022/testgorilla-tgo-ui-components-checkbox.mjs.map +1 -1
  29. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs +423 -162
  30. package/fesm2022/testgorilla-tgo-ui-components-checklist.mjs.map +1 -1
  31. package/fesm2022/testgorilla-tgo-ui-components-core.mjs +10784 -10996
  32. package/fesm2022/testgorilla-tgo-ui-components-core.mjs.map +1 -1
  33. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs +810 -533
  34. package/fesm2022/testgorilla-tgo-ui-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs +473 -116
  36. package/fesm2022/testgorilla-tgo-ui-components-device-control.mjs.map +1 -1
  37. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs +1149 -540
  38. package/fesm2022/testgorilla-tgo-ui-components-dialog.mjs.map +1 -1
  39. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs +148 -84
  40. package/fesm2022/testgorilla-tgo-ui-components-divider.mjs.map +1 -1
  41. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs +239 -142
  42. package/fesm2022/testgorilla-tgo-ui-components-donut-chart.mjs.map +1 -1
  43. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs +599 -467
  44. package/fesm2022/testgorilla-tgo-ui-components-dropdown.mjs.map +1 -1
  45. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs +126 -70
  46. package/fesm2022/testgorilla-tgo-ui-components-elevation-shadow.mjs.map +1 -1
  47. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs +324 -329
  48. package/fesm2022/testgorilla-tgo-ui-components-empty-state.mjs.map +1 -1
  49. package/fesm2022/testgorilla-tgo-ui-components-field.mjs +969 -648
  50. package/fesm2022/testgorilla-tgo-ui-components-field.mjs.map +1 -1
  51. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs +553 -419
  52. package/fesm2022/testgorilla-tgo-ui-components-file-upload.mjs.map +1 -1
  53. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs +847 -452
  54. package/fesm2022/testgorilla-tgo-ui-components-filter-button.mjs.map +1 -1
  55. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs +398 -302
  56. package/fesm2022/testgorilla-tgo-ui-components-gaussian-chart.mjs.map +1 -1
  57. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs +162 -95
  58. package/fesm2022/testgorilla-tgo-ui-components-icon-label.mjs.map +1 -1
  59. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs +1825 -1795
  60. package/fesm2022/testgorilla-tgo-ui-components-icon.mjs.map +1 -1
  61. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs +1018 -672
  62. package/fesm2022/testgorilla-tgo-ui-components-infinite-scroll-table.mjs.map +1 -1
  63. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs +758 -368
  64. package/fesm2022/testgorilla-tgo-ui-components-inline-field.mjs.map +1 -1
  65. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs +204 -212
  66. package/fesm2022/testgorilla-tgo-ui-components-logo.mjs.map +1 -1
  67. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs +183 -48
  68. package/fesm2022/testgorilla-tgo-ui-components-media-card.mjs.map +1 -1
  69. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs +243 -79
  70. package/fesm2022/testgorilla-tgo-ui-components-media-dialog.mjs.map +1 -1
  71. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs +751 -361
  72. package/fesm2022/testgorilla-tgo-ui-components-multi-input.mjs.map +1 -1
  73. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs +1122 -385
  74. package/fesm2022/testgorilla-tgo-ui-components-navbar.mjs.map +1 -1
  75. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs +689 -413
  76. package/fesm2022/testgorilla-tgo-ui-components-overflow-menu.mjs.map +1 -1
  77. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs +227 -92
  78. package/fesm2022/testgorilla-tgo-ui-components-page-header.mjs.map +1 -1
  79. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs +174 -113
  80. package/fesm2022/testgorilla-tgo-ui-components-paginator.mjs.map +1 -1
  81. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs +367 -165
  82. package/fesm2022/testgorilla-tgo-ui-components-password-criteria.mjs.map +1 -1
  83. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs +253 -118
  84. package/fesm2022/testgorilla-tgo-ui-components-password-strength.mjs.map +1 -1
  85. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs +730 -444
  86. package/fesm2022/testgorilla-tgo-ui-components-phone-input.mjs.map +1 -1
  87. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs +533 -221
  88. package/fesm2022/testgorilla-tgo-ui-components-popover.mjs.map +1 -1
  89. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs +274 -76
  90. package/fesm2022/testgorilla-tgo-ui-components-popup-tip.mjs.map +1 -1
  91. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs +184 -124
  92. package/fesm2022/testgorilla-tgo-ui-components-progress-bar.mjs.map +1 -1
  93. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs +1223 -574
  94. package/fesm2022/testgorilla-tgo-ui-components-prompt.mjs.map +1 -1
  95. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs +249 -160
  96. package/fesm2022/testgorilla-tgo-ui-components-radial-progress.mjs.map +1 -1
  97. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs +447 -439
  98. package/fesm2022/testgorilla-tgo-ui-components-radio-button.mjs.map +1 -1
  99. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs +226 -150
  100. package/fesm2022/testgorilla-tgo-ui-components-rating.mjs.map +1 -1
  101. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs +255 -67
  102. package/fesm2022/testgorilla-tgo-ui-components-scale-table.mjs.map +1 -1
  103. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs +205 -162
  104. package/fesm2022/testgorilla-tgo-ui-components-scale.mjs.map +1 -1
  105. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs +245 -153
  106. package/fesm2022/testgorilla-tgo-ui-components-segmented-bar.mjs.map +1 -1
  107. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs +274 -140
  108. package/fesm2022/testgorilla-tgo-ui-components-segmented-button.mjs.map +1 -1
  109. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs +319 -147
  110. package/fesm2022/testgorilla-tgo-ui-components-segmented-toggle.mjs.map +1 -1
  111. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs +286 -84
  112. package/fesm2022/testgorilla-tgo-ui-components-selectable-card.mjs.map +1 -1
  113. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs +660 -208
  114. package/fesm2022/testgorilla-tgo-ui-components-side-navigation.mjs.map +1 -1
  115. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs +579 -320
  116. package/fesm2022/testgorilla-tgo-ui-components-side-panel.mjs.map +1 -1
  117. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs +419 -200
  118. package/fesm2022/testgorilla-tgo-ui-components-side-sheet.mjs.map +1 -1
  119. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs +132 -80
  120. package/fesm2022/testgorilla-tgo-ui-components-skeleton.mjs.map +1 -1
  121. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs +741 -390
  122. package/fesm2022/testgorilla-tgo-ui-components-slider.mjs.map +1 -1
  123. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs +455 -329
  124. package/fesm2022/testgorilla-tgo-ui-components-snackbar.mjs.map +1 -1
  125. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs +543 -514
  126. package/fesm2022/testgorilla-tgo-ui-components-spider-chart.mjs.map +1 -1
  127. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs +193 -104
  128. package/fesm2022/testgorilla-tgo-ui-components-spinner.mjs.map +1 -1
  129. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs +760 -524
  130. package/fesm2022/testgorilla-tgo-ui-components-stepper.mjs.map +1 -1
  131. package/fesm2022/testgorilla-tgo-ui-components-table.mjs +714 -415
  132. package/fesm2022/testgorilla-tgo-ui-components-table.mjs.map +1 -1
  133. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs +847 -438
  134. package/fesm2022/testgorilla-tgo-ui-components-tabs.mjs.map +1 -1
  135. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs +535 -275
  136. package/fesm2022/testgorilla-tgo-ui-components-tag.mjs.map +1 -1
  137. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs +316 -246
  138. package/fesm2022/testgorilla-tgo-ui-components-toggle.mjs.map +1 -1
  139. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs +404 -284
  140. package/fesm2022/testgorilla-tgo-ui-components-tooltip.mjs.map +1 -1
  141. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs +664 -383
  142. package/fesm2022/testgorilla-tgo-ui-components-universal-skills.mjs.map +1 -1
  143. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs +201 -112
  144. package/fesm2022/testgorilla-tgo-ui-components-validation-error.mjs.map +1 -1
  145. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs +1014 -458
  146. package/fesm2022/testgorilla-tgo-ui-components-write-with-ai.mjs.map +1 -1
  147. package/fesm2022/testgorilla-tgo-ui.mjs +147 -155
  148. package/fesm2022/testgorilla-tgo-ui.mjs.map +1 -1
  149. package/mcp/catalog.json +1 -1
  150. package/package.json +16 -17
  151. package/projects/tgo-canopy-ui/theme/_palette.scss +23 -18
  152. package/types/testgorilla-tgo-ui-components-accordion.d.ts +214 -158
  153. package/types/testgorilla-tgo-ui-components-ai-audio-circle.d.ts +93 -69
  154. package/types/testgorilla-tgo-ui-components-ai-caveat.d.ts +37 -34
  155. package/types/testgorilla-tgo-ui-components-ai-feedback.d.ts +126 -86
  156. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +260 -185
  157. package/types/testgorilla-tgo-ui-components-audio-waveform.d.ts +96 -67
  158. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +455 -256
  159. package/types/testgorilla-tgo-ui-components-autocomplete.d.ts +545 -390
  160. package/types/testgorilla-tgo-ui-components-avatar.d.ts +128 -102
  161. package/types/testgorilla-tgo-ui-components-badge.d.ts +191 -139
  162. package/types/testgorilla-tgo-ui-components-breadcrumb.d.ts +100 -62
  163. package/types/testgorilla-tgo-ui-components-button.d.ts +479 -340
  164. package/types/testgorilla-tgo-ui-components-card.d.ts +153 -114
  165. package/types/testgorilla-tgo-ui-components-checkbox.d.ts +299 -223
  166. package/types/testgorilla-tgo-ui-components-checklist.d.ts +149 -97
  167. package/types/testgorilla-tgo-ui-components-core.d.ts +307 -295
  168. package/types/testgorilla-tgo-ui-components-datepicker.d.ts +404 -299
  169. package/types/testgorilla-tgo-ui-components-device-control.d.ts +151 -81
  170. package/types/testgorilla-tgo-ui-components-dialog.d.ts +442 -329
  171. package/types/testgorilla-tgo-ui-components-divider.d.ts +64 -51
  172. package/types/testgorilla-tgo-ui-components-donut-chart.d.ts +41 -37
  173. package/types/testgorilla-tgo-ui-components-dropdown.d.ts +335 -241
  174. package/types/testgorilla-tgo-ui-components-elevation-shadow.d.ts +48 -43
  175. package/types/testgorilla-tgo-ui-components-empty-state.d.ts +317 -215
  176. package/types/testgorilla-tgo-ui-components-field.d.ts +559 -388
  177. package/types/testgorilla-tgo-ui-components-file-upload.d.ts +230 -168
  178. package/types/testgorilla-tgo-ui-components-filter-button.d.ts +263 -206
  179. package/types/testgorilla-tgo-ui-components-gaussian-chart.d.ts +107 -94
  180. package/types/testgorilla-tgo-ui-components-icon-label.d.ts +84 -61
  181. package/types/testgorilla-tgo-ui-components-icon.d.ts +137 -110
  182. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +429 -303
  183. package/types/testgorilla-tgo-ui-components-inline-field.d.ts +338 -254
  184. package/types/testgorilla-tgo-ui-components-logo.d.ts +119 -101
  185. package/types/testgorilla-tgo-ui-components-media-card.d.ts +51 -35
  186. package/types/testgorilla-tgo-ui-components-media-dialog.d.ts +40 -45
  187. package/types/testgorilla-tgo-ui-components-multi-input.d.ts +283 -194
  188. package/types/testgorilla-tgo-ui-components-navbar.d.ts +326 -208
  189. package/types/testgorilla-tgo-ui-components-overflow-menu.d.ts +276 -204
  190. package/types/testgorilla-tgo-ui-components-page-header.d.ts +67 -50
  191. package/types/testgorilla-tgo-ui-components-paginator.d.ts +103 -70
  192. package/types/testgorilla-tgo-ui-components-password-criteria.d.ts +67 -58
  193. package/types/testgorilla-tgo-ui-components-password-strength.d.ts +66 -57
  194. package/types/testgorilla-tgo-ui-components-phone-input.d.ts +217 -175
  195. package/types/testgorilla-tgo-ui-components-popover.d.ts +94 -53
  196. package/types/testgorilla-tgo-ui-components-popup-tip.d.ts +81 -44
  197. package/types/testgorilla-tgo-ui-components-progress-bar.d.ts +115 -84
  198. package/types/testgorilla-tgo-ui-components-prompt.d.ts +315 -219
  199. package/types/testgorilla-tgo-ui-components-radial-progress.d.ts +146 -107
  200. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +296 -219
  201. package/types/testgorilla-tgo-ui-components-rating.d.ts +134 -95
  202. package/types/testgorilla-tgo-ui-components-scale-table.d.ts +67 -47
  203. package/types/testgorilla-tgo-ui-components-scale.d.ts +91 -66
  204. package/types/testgorilla-tgo-ui-components-segmented-bar.d.ts +118 -89
  205. package/types/testgorilla-tgo-ui-components-segmented-button.d.ts +107 -80
  206. package/types/testgorilla-tgo-ui-components-segmented-toggle.d.ts +138 -105
  207. package/types/testgorilla-tgo-ui-components-selectable-card.d.ts +90 -56
  208. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +183 -107
  209. package/types/testgorilla-tgo-ui-components-side-panel.d.ts +156 -145
  210. package/types/testgorilla-tgo-ui-components-side-sheet.d.ts +98 -89
  211. package/types/testgorilla-tgo-ui-components-skeleton.d.ts +50 -33
  212. package/types/testgorilla-tgo-ui-components-slider.d.ts +278 -198
  213. package/types/testgorilla-tgo-ui-components-snackbar.d.ts +211 -159
  214. package/types/testgorilla-tgo-ui-components-spider-chart.d.ts +140 -121
  215. package/types/testgorilla-tgo-ui-components-spinner.d.ts +93 -72
  216. package/types/testgorilla-tgo-ui-components-stepper.d.ts +480 -338
  217. package/types/testgorilla-tgo-ui-components-table.d.ts +280 -233
  218. package/types/testgorilla-tgo-ui-components-tabs.d.ts +282 -183
  219. package/types/testgorilla-tgo-ui-components-tag.d.ts +266 -193
  220. package/types/testgorilla-tgo-ui-components-toggle.d.ts +180 -132
  221. package/types/testgorilla-tgo-ui-components-tooltip.d.ts +142 -105
  222. package/types/testgorilla-tgo-ui-components-universal-skills.d.ts +165 -144
  223. package/types/testgorilla-tgo-ui-components-validation-error.d.ts +70 -51
  224. package/types/testgorilla-tgo-ui-components-write-with-ai.d.ts +210 -133
  225. package/types/testgorilla-tgo-ui.d.ts +52 -45
@@ -1,332 +1,458 @@
1
- import * as _angular_core from '@angular/core';
2
- import { TemplateRef, TrackByFunction, ElementRef } from '@angular/core';
3
- import * as i2 from '@angular/cdk/scrolling';
4
- import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
5
- import * as i1 from '@angular/common';
6
-
1
+ import * as i2 from "@angular/cdk/scrolling";
2
+ import { CdkVirtualScrollViewport } from "@angular/cdk/scrolling";
3
+ import * as i0 from "@angular/core";
4
+ import { ElementRef, TemplateRef, TrackByFunction } from "@angular/core";
5
+ import * as i1 from "@angular/common";
7
6
  /**
8
7
  * The structural contract `selectable` puts on a row: the checkbox reflects `selected`, and `key` /
9
8
  * `rowIdKey` lookups read arbitrary fields. Declared once here rather than asserted at each read site, so
10
9
  * the requirement is discoverable from the types instead of only from the docs.
11
10
  */
12
- type InfiniteScrollTableRowLike = Record<string, unknown> & {
13
- selected?: boolean;
11
+ export type InfiniteScrollTableRowLike = Record<string, unknown> & {
12
+ selected?: boolean;
14
13
  };
15
- interface InfiniteScrollTableColumn<T> {
16
- /** Also reads the default cell value. A plain string, so a synthetic column can have no matching field. */
17
- key: string;
18
- /** Header label rendered when no `headerCellTemplate` is provided. */
19
- title?: string;
20
- headerCellTemplate?: TemplateRef<InfiniteScrollTableHeaderCellContext<T>>;
21
- rowCellTemplate?: TemplateRef<InfiniteScrollTableRowCellContext<T>>;
22
- /**
23
- * Pins the column. Only honoured on the **first** column (pins left) and the **last** column (pins
24
- * right); anywhere else it is ignored, with a dev-mode warning.
25
- */
26
- isSticky?: boolean;
27
- styles?: InfiniteScrollTableColumnStyles;
14
+ export interface InfiniteScrollTableColumn<T> {
15
+ /** Also reads the default cell value. A plain string, so a synthetic column can have no matching field. */
16
+ key: string;
17
+ /** Header label rendered when no `headerCellTemplate` is provided. */
18
+ title?: string;
19
+ headerCellTemplate?: TemplateRef<InfiniteScrollTableHeaderCellContext<T>>;
20
+ rowCellTemplate?: TemplateRef<InfiniteScrollTableRowCellContext<T>>;
21
+ /**
22
+ * Pins the column. Only honoured on the **first** column (pins left) and the **last** column (pins
23
+ * right); anywhere else it is ignored, with a dev-mode warning.
24
+ */
25
+ isSticky?: boolean;
26
+ styles?: InfiniteScrollTableColumnStyles;
28
27
  }
29
- interface InfiniteScrollTableColumnStyles {
30
- /**
31
- * Authoritative column width (default `160px`), applied as `flex-basis`, `min-width` AND `max-width`:
32
- * the column never grows or shrinks and overflowing content is clipped, which is what keeps the header
33
- * and body scroll containers pixel-aligned. Leftover row width goes to a trailing spacer instead.
34
- */
35
- width?: string;
36
- alignment?: InfiniteScrollTableColumnAlignment;
28
+ export interface InfiniteScrollTableColumnStyles {
29
+ /**
30
+ * Authoritative column width (default `160px`), applied as `flex-basis`, `min-width` AND `max-width`:
31
+ * the column never grows or shrinks and overflowing content is clipped, which is what keeps the header
32
+ * and body scroll containers pixel-aligned. Leftover row width goes to a trailing spacer instead.
33
+ */
34
+ width?: string;
35
+ alignment?: InfiniteScrollTableColumnAlignment;
37
36
  }
38
- type InfiniteScrollTableColumnAlignment = 'left' | 'right' | 'center';
39
- interface InfiniteScrollTableRowCellContext<T> {
40
- $implicit: T;
41
- rowIndex: number;
37
+ export type InfiniteScrollTableColumnAlignment = 'left' | 'right' | 'center';
38
+ export interface InfiniteScrollTableRowCellContext<T> {
39
+ $implicit: T;
40
+ rowIndex: number;
42
41
  }
43
- interface InfiniteScrollTableHeaderCellContext<T> {
44
- $implicit: string | undefined;
45
- column: InfiniteScrollTableColumn<T>;
46
- colIndex: number;
42
+ export interface InfiniteScrollTableHeaderCellContext<T> {
43
+ $implicit: string | undefined;
44
+ column: InfiniteScrollTableColumn<T>;
45
+ colIndex: number;
47
46
  }
48
- interface InfiniteScrollTableErrorContext {
49
- $implicit: () => void;
50
- retry: () => void;
47
+ export interface InfiniteScrollTableErrorContext {
48
+ $implicit: () => void;
49
+ retry: () => void;
51
50
  }
52
51
  /**
53
52
  * `row` is the consumer's own object by reference — not a copy — so class prototypes survive and a row's
54
53
  * own `index` field is never shadowed. Same for `InfiniteScrollTableRowSelection`.
55
54
  */
56
- interface InfiniteScrollTableRowClick<T> {
57
- row: T;
58
- index: number;
55
+ export interface InfiniteScrollTableRowClick<T> {
56
+ row: T;
57
+ index: number;
59
58
  }
60
- interface InfiniteScrollTableRowSelection<T> {
61
- row: T;
62
- index: number;
63
- selected: boolean;
59
+ export interface InfiniteScrollTableRowSelection<T> {
60
+ row: T;
61
+ index: number;
62
+ selected: boolean;
64
63
  }
65
-
66
64
  /** Internal row wrapper so real rows and skeleton placeholders flow through one virtual list. */
67
65
  type RenderRow<T> = {
68
- kind: 'data';
69
- item: T;
70
- index: number;
66
+ kind: 'data';
67
+ item: T;
68
+ index: number;
71
69
  } | {
72
- kind: 'skeleton';
73
- id: string;
70
+ kind: 'skeleton';
71
+ id: string;
74
72
  };
75
73
  /**
76
74
  * A generic, virtualized table with scroll-driven infinite loading. Independent of `ui-table`: it reuses
77
75
  * only stable leaf primitives (`ui-skeleton`) and duplicates the column/context type shapes so consumers
78
76
  * can migrate with a selector swap.
79
77
  */
80
- declare class InfiniteScrollTableComponent<T> {
81
- /**
82
- * Rows loaded so far. **Must change by reference** (`[...rows, ...page]`): a signal input cannot observe
83
- * `rows.push(...)`, so an in-place append renders nothing and leaves `loadMore` disarmed.
84
- */
85
- readonly data: _angular_core.InputSignal<readonly T[]>;
86
- readonly columns: _angular_core.InputSignal<InfiniteScrollTableColumn<T>[]>;
87
- /** Fixed row height in px (the virtualization `itemSize`). Variable row heights are unsupported. */
88
- readonly rowHeight: _angular_core.InputSignal<number>;
89
- /** Stable row identity so recycled rows re-render correctly. Takes precedence over `rowIdKey`. */
90
- readonly trackBy: _angular_core.InputSignal<TrackByFunction<T> | undefined>;
91
- /** Key on each row holding a stable id. Used when `trackBy` is not provided. */
92
- readonly rowIdKey: _angular_core.InputSignal<string | undefined>;
93
- /**
94
- * CDK's rendered buffers. Both default to a multiple of `rowHeight` (~5 and ~10 rows) rather than a
95
- * fixed px value, which would mean a different row count at every `rowHeight`.
96
- */
97
- readonly minBufferPx: _angular_core.InputSignal<number | undefined>;
98
- readonly maxBufferPx: _angular_core.InputSignal<number | undefined>;
99
- /** Max height of the internal scroll region (e.g. `'70vh'`). The body shrinks to fit fewer rows. */
100
- readonly maxHeight: _angular_core.InputSignal<string>;
101
- /** Stretch to the parent's height instead of the content's; `maxHeight` becomes a cap, not the target. */
102
- readonly fillHeight: _angular_core.InputSignalWithTransform<boolean, unknown>;
103
- readonly isCondensed: _angular_core.InputSignalWithTransform<boolean, unknown>;
104
- /**
105
- * Prepends a left-pinned checkbox column driven by each row's `selected` property. Consumer-managed
106
- * (like `ui-table`): toggling only emits `selectionChange`.
107
- */
108
- readonly selectable: _angular_core.InputSignalWithTransform<boolean, unknown>;
109
- /**
110
- * Makes rows focusable and activatable by click or Enter/Space. Off by default: a read-only table
111
- * must not create a tab stop per rendered row or imply interactivity it does not have.
112
- */
113
- readonly rowsClickable: _angular_core.InputSignalWithTransform<boolean, unknown>;
114
- /** First-load state: renders a full body of skeleton rows. */
115
- readonly loading: _angular_core.InputSignalWithTransform<boolean, unknown>;
116
- /** Appends skeleton rows below the existing rows while the next page is fetched. */
117
- readonly loadingMore: _angular_core.InputSignalWithTransform<boolean, unknown>;
118
- /** Required, not defaulted: a silent "never load" default would disable the headline behaviour. */
119
- readonly hasMore: _angular_core.InputSignalWithTransform<boolean, unknown>;
120
- readonly skeletonRowCount: _angular_core.InputSignal<number>;
121
- /** Number of skeleton rows appended below the loaded rows while `loadingMore` is true. */
122
- readonly loadMoreSkeletonCount: _angular_core.InputSignal<number>;
123
- /**
124
- * Skeleton placeholder columns for a lazily-loaded column set. They deliberately sit OUTSIDE `columns`,
125
- * so they cannot change which column is last and unpin a sticky last column.
126
- */
127
- readonly loadingColumnCount: _angular_core.InputSignalWithTransform<number, unknown>;
128
- readonly loadMoreThreshold: _angular_core.InputSignal<number>;
129
- /** Shown when `data` is empty and not loading. */
130
- readonly noDataTemplate: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
131
- /** Shown when `error` is `true`. Receives `{ $implicit: retry, retry }` as context. */
132
- readonly errorTemplate: _angular_core.InputSignal<TemplateRef<InfiniteScrollTableErrorContext> | undefined>;
133
- readonly error: _angular_core.InputSignalWithTransform<boolean, unknown>;
134
- /**
135
- * Shown once `hasMore` goes `false` with rows loaded. Deliberately has NO built-in fallback (unlike
136
- * `noDataTemplate` / `errorTemplate`): a single-page list would otherwise flash "no more results".
137
- */
138
- readonly endOfListTemplate: _angular_core.InputSignal<TemplateRef<unknown> | undefined>;
139
- readonly testId: _angular_core.InputSignal<string | null>;
140
- readonly ariaLabel: _angular_core.InputSignal<string>;
141
- /** Guarded: only when `hasMore && !loading && !loadingMore`, and only once per approach to the end. */
142
- readonly loadMore: _angular_core.OutputEmitterRef<void>;
143
- readonly retry: _angular_core.OutputEmitterRef<void>;
144
- readonly rowClick: _angular_core.OutputEmitterRef<InfiniteScrollTableRowClick<T>>;
145
- /** The consumer is expected to apply `selected` back onto its own data. */
146
- readonly selectionChange: _angular_core.OutputEmitterRef<InfiniteScrollTableRowSelection<T>>;
147
- protected readonly viewport: _angular_core.Signal<CdkVirtualScrollViewport | undefined>;
148
- protected readonly headerScroll: _angular_core.Signal<ElementRef<HTMLElement> | undefined>;
149
- protected readonly scrollStart: _angular_core.WritableSignal<boolean>;
150
- protected readonly scrollEnd: _angular_core.WritableSignal<boolean>;
151
- protected readonly horizontalScroll: _angular_core.WritableSignal<boolean>;
152
- /** Reserved as right padding on the header, so its content width exactly equals the body's. */
153
- protected readonly scrollbarWidth: _angular_core.WritableSignal<number>;
154
- /** Added to the viewport height so on a short list the scrollbar doesn't eat into the rows. */
155
- protected readonly hScrollbarHeight: _angular_core.WritableSignal<number>;
156
- /**
157
- * Paging latch. Three fields, one rule: `loadMore` emits at most once per page that lands while the
158
- * user is inside the trigger zone. `isLoadMoreArmed` is the latch itself, written here and by
159
- * `checkLoadMore`; `dataLengthAtEmit` records how long `data` was when the last emission went out, so
160
- * "the requested page arrived" is a length comparison rather than a guess about scroll positions;
161
- * `firstVisibleIndex` is where the user actually is.
162
- *
163
- * The invariant that matters: arming and firing must read the SAME trigger zone. They used to derive it
164
- * from two different thresholds, which opened bands the latch could never leave.
165
- */
166
- private isLoadMoreArmed;
167
- private dataLengthAtEmit;
168
- /** In-place-mutation detector; see the effect that reads these for the discriminator. */
169
- private wasLoadingMore;
170
- private lastDataReference;
171
- private lastDataLength;
172
- /** Pending frame for a deferred CDK viewport re-measure, so repeated triggers coalesce to one. */
173
- private remeasureFrame;
174
- /** Pending frame for the deferred scroll reset. Cancelled on destroy, like every other frame here. */
175
- private resetScrollFrame;
176
- private previousHeadIdentity;
177
- /** Latches once any non-empty `data` is seen, so only the very first render is exempt from resetting. */
178
- private hasSeenHead;
179
- /** Previous `loading` value, for spotting the false -> true edge that starts a reset. */
180
- private wasLoading;
181
- /**
182
- * First visible row index, kept current from `viewport.scrolledIndexChange` (no layout read) rather
183
- * than `viewport.getRenderedRange().start`, which includes CDK's read-ahead buffer.
184
- */
185
- private firstVisibleIndex;
186
- protected readonly skeletonTheme: {
187
- background: string;
188
- 'border-radius': string;
189
- height: string;
190
- 'margin-bottom': string;
78
+ export declare class InfiniteScrollTableComponent<T> {
79
+ /**
80
+ * Rows loaded so far. **Must change by reference** (`[...rows, ...page]`): a signal input cannot observe
81
+ * `rows.push(...)`, so an in-place append renders nothing and leaves `loadMore` disarmed.
82
+ */
83
+ readonly data: import("@angular/core").InputSignal<readonly T[]>;
84
+ readonly columns: import("@angular/core").InputSignal<InfiniteScrollTableColumn<T>[]>;
85
+ /** Fixed row height in px (the virtualization `itemSize`). Variable row heights are unsupported. */
86
+ readonly rowHeight: import("@angular/core").InputSignal<number>;
87
+ /** Stable row identity so recycled rows re-render correctly. Takes precedence over `rowIdKey`. */
88
+ readonly trackBy: import("@angular/core").InputSignal<TrackByFunction<T> | undefined>;
89
+ /** Key on each row holding a stable id. Used when `trackBy` is not provided. */
90
+ readonly rowIdKey: import("@angular/core").InputSignal<string | undefined>;
91
+ /**
92
+ * CDK's rendered buffers. Both default to a multiple of `rowHeight` (~5 and ~10 rows) rather than a
93
+ * fixed px value, which would mean a different row count at every `rowHeight`.
94
+ */
95
+ readonly minBufferPx: import("@angular/core").InputSignal<number | undefined>;
96
+ readonly maxBufferPx: import("@angular/core").InputSignal<number | undefined>;
97
+ /** Max height of the internal scroll region (e.g. `'70vh'`). The body shrinks to fit fewer rows. */
98
+ readonly maxHeight: import("@angular/core").InputSignal<string>;
99
+ /** Stretch to the parent's height instead of the content's; `maxHeight` becomes a cap, not the target. */
100
+ readonly fillHeight: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
101
+ readonly isCondensed: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
102
+ /**
103
+ * Prepends a left-pinned checkbox column driven by each row's `selected` property. Consumer-managed
104
+ * (like `ui-table`): toggling only emits `selectionChange`.
105
+ */
106
+ readonly selectable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
107
+ /**
108
+ * Makes rows focusable and activatable by click or Enter/Space. Off by default: a read-only table
109
+ * must not create a tab stop per rendered row or imply interactivity it does not have.
110
+ */
111
+ readonly rowsClickable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
112
+ /** First-load state: renders a full body of skeleton rows. */
113
+ readonly loading: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
114
+ /** Appends skeleton rows below the existing rows while the next page is fetched. */
115
+ readonly loadingMore: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
116
+ /** Required, not defaulted: a silent "never load" default would disable the headline behaviour. */
117
+ readonly hasMore: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
118
+ readonly skeletonRowCount: import("@angular/core").InputSignal<number>;
119
+ /** Number of skeleton rows appended below the loaded rows while `loadingMore` is true. */
120
+ readonly loadMoreSkeletonCount: import("@angular/core").InputSignal<number>;
121
+ /**
122
+ * Skeleton placeholder columns for a lazily-loaded column set. They deliberately sit OUTSIDE `columns`,
123
+ * so they cannot change which column is last and unpin a sticky last column.
124
+ */
125
+ readonly loadingColumnCount: import("@angular/core").InputSignalWithTransform<number, unknown>;
126
+ readonly loadMoreThreshold: import("@angular/core").InputSignal<number>;
127
+ /** Shown when `data` is empty and not loading. */
128
+ readonly noDataTemplate: import("@angular/core").InputSignal<TemplateRef<unknown> | undefined>;
129
+ /** Shown when `error` is `true`. Receives `{ $implicit: retry, retry }` as context. */
130
+ readonly errorTemplate: import("@angular/core").InputSignal<TemplateRef<InfiniteScrollTableErrorContext> | undefined>;
131
+ readonly error: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
132
+ /**
133
+ * Shown once `hasMore` goes `false` with rows loaded. Deliberately has NO built-in fallback (unlike
134
+ * `noDataTemplate` / `errorTemplate`): a single-page list would otherwise flash "no more results".
135
+ */
136
+ readonly endOfListTemplate: import("@angular/core").InputSignal<TemplateRef<unknown> | undefined>;
137
+ readonly testId: import("@angular/core").InputSignal<string | null>;
138
+ readonly ariaLabel: import("@angular/core").InputSignal<string>;
139
+ /** Guarded: only when `hasMore && !loading && !loadingMore`, and only once per approach to the end. */
140
+ readonly loadMore: import("@angular/core").OutputEmitterRef<void>;
141
+ readonly retry: import("@angular/core").OutputEmitterRef<void>;
142
+ readonly rowClick: import("@angular/core").OutputEmitterRef<InfiniteScrollTableRowClick<T>>;
143
+ /** The consumer is expected to apply `selected` back onto its own data. */
144
+ readonly selectionChange: import("@angular/core").OutputEmitterRef<InfiniteScrollTableRowSelection<T>>;
145
+ protected readonly viewport: import("@angular/core").Signal<CdkVirtualScrollViewport | undefined>;
146
+ protected readonly headerScroll: import("@angular/core").Signal<ElementRef<HTMLElement> | undefined>;
147
+ protected readonly scrollStart: import("@angular/core").WritableSignal<boolean>;
148
+ protected readonly scrollEnd: import("@angular/core").WritableSignal<boolean>;
149
+ protected readonly horizontalScroll: import("@angular/core").WritableSignal<boolean>;
150
+ /** Reserved as right padding on the header, so its content width exactly equals the body's. */
151
+ protected readonly scrollbarWidth: import("@angular/core").WritableSignal<number>;
152
+ /** Added to the viewport height so on a short list the scrollbar doesn't eat into the rows. */
153
+ protected readonly hScrollbarHeight: import("@angular/core").WritableSignal<number>;
154
+ /**
155
+ * Paging latch. Three fields, one rule: `loadMore` emits at most once per page that lands while the
156
+ * user is inside the trigger zone. `isLoadMoreArmed` is the latch itself, written here and by
157
+ * `checkLoadMore`; `dataLengthAtEmit` records how long `data` was when the last emission went out, so
158
+ * "the requested page arrived" is a length comparison rather than a guess about scroll positions;
159
+ * `firstVisibleIndex` is where the user actually is.
160
+ *
161
+ * The invariant that matters: arming and firing must read the SAME trigger zone. They used to derive it
162
+ * from two different thresholds, which opened bands the latch could never leave.
163
+ */
164
+ private isLoadMoreArmed;
165
+ private dataLengthAtEmit;
166
+ /** In-place-mutation detector; see the effect that reads these for the discriminator. */
167
+ private wasLoadingMore;
168
+ private lastDataReference;
169
+ private lastDataLength;
170
+ /** Pending frame for a deferred CDK viewport re-measure, so repeated triggers coalesce to one. */
171
+ private remeasureFrame;
172
+ /** Pending frame for the deferred scroll reset. Cancelled on destroy, like every other frame here. */
173
+ private resetScrollFrame;
174
+ private previousHeadIdentity;
175
+ /** Latches once any non-empty `data` is seen, so only the very first render is exempt from resetting. */
176
+ private hasSeenHead;
177
+ /** Previous `loading` value, for spotting the false -> true edge that starts a reset. */
178
+ private wasLoading;
179
+ /**
180
+ * First visible row index, kept current from `viewport.scrolledIndexChange` (no layout read) rather
181
+ * than `viewport.getRenderedRange().start`, which includes CDK's read-ahead buffer.
182
+ */
183
+ private firstVisibleIndex;
184
+ protected readonly skeletonTheme: {
185
+ background: string;
186
+ 'border-radius': string;
187
+ height: string;
188
+ 'margin-bottom': string;
189
+ };
190
+ protected readonly stickyStartKey: import("@angular/core").Signal<string | undefined>;
191
+ protected readonly stickyEndKey: import("@angular/core").Signal<string | undefined>;
192
+ protected readonly defaultColumnWidth = "160px";
193
+ protected readonly effectiveMinBufferPx: import("@angular/core").Signal<number>;
194
+ /**
195
+ * The `Math.max` is load-bearing: CDK throws in dev mode when `maxBufferPx < minBufferPx`, which a
196
+ * consumer triggers just by raising `minBufferPx` above the derived default.
197
+ */
198
+ protected readonly effectiveMaxBufferPx: import("@angular/core").Signal<number>;
199
+ /** Stable keys for the placeholder columns, so `@for` can track them across renders. */
200
+ protected readonly loadingColumns: import("@angular/core").Signal<string[]>;
201
+ protected readonly renderRows: import("@angular/core").Signal<RenderRow<T>[]>;
202
+ protected readonly hasData: import("@angular/core").Signal<boolean>;
203
+ protected readonly showViewport: import("@angular/core").Signal<boolean>;
204
+ /**
205
+ * `loadingMore` counts as loading here too: a consumer that retries a failed first page through the same
206
+ * flag it uses for every page would otherwise render "no rows" with `aria-busy` set and the live region
207
+ * announcing a fetch.
208
+ */
209
+ protected readonly showEmptyState: import("@angular/core").Signal<boolean>;
210
+ protected readonly showErrorState: import("@angular/core").Signal<boolean>;
211
+ protected readonly showErrorFooter: import("@angular/core").Signal<boolean>;
212
+ /**
213
+ * The negative clauses keep this out of slots other states own, and `!loadingMore()` closes a one-tick
214
+ * flash: a fetch completing and the consumer flipping `hasMore` need not land in the same cycle.
215
+ */
216
+ protected readonly showEndOfList: import("@angular/core").Signal<boolean>;
217
+ /**
218
+ * CSS `min()` because the cap mixes units. The scrollbar reserve stops a short list from growing a
219
+ * spurious vertical scrollbar; fill mode returns `null` so flex owns the sizing and the reserve is moot.
220
+ */
221
+ protected readonly viewportHeight: import("@angular/core").Signal<string | null>;
222
+ protected readonly translationContext = "INFINITE_SCROLL_TABLE.";
223
+ /** A translation key, resolved in the template: screen-reader users are not all English speakers. */
224
+ protected readonly statusMessageKey: import("@angular/core").Signal<string>;
225
+ protected readonly errorContext: InfiniteScrollTableErrorContext;
226
+ protected readonly renderRowTrackBy: TrackByFunction<RenderRow<T>>;
227
+ constructor();
228
+ private cancelResetScrollFrame;
229
+ /** No-ops only when no rows are rendered: the empty state, or an error with no rows. */
230
+ scrollToIndex(index: number, behavior?: ScrollBehavior): void;
231
+ scrollToTop(behavior?: ScrollBehavior): void;
232
+ /**
233
+ * The single place `T` is widened to its structural contract. Every field read on a row goes through
234
+ * here, so the assertion exists once instead of at each call site.
235
+ */
236
+ private asRowLike;
237
+ protected getCellValue(item: T, key: string): unknown;
238
+ /** Applied as `flex-basis`, `min-width` AND `max-width` on header and body cells alike — see the SCSS. */
239
+ protected columnWidth(column: InfiniteScrollTableColumn<T>): string;
240
+ protected emitRowClick(event: Event, row: RenderRow<T>): void;
241
+ protected rowTestId(row: RenderRow<T>): string | null;
242
+ protected cellTestId(row: RenderRow<T>, columnKey: string): string | null;
243
+ protected rowCheckboxTestId(row: RenderRow<T>): string | null;
244
+ protected isRowSelected(row: RenderRow<T>): boolean;
245
+ protected emitSelectionChange(row: RenderRow<T>, selected: boolean): void;
246
+ /** Reads `--ui-ist-checkbox-width` so the offset cannot drift from the checkbox column's own width. */
247
+ protected stickyStartLeft(column: InfiniteScrollTableColumn<T>): string | null;
248
+ /**
249
+ * Only the outermost start-pinned cell may cast the sticky shadow: the checkbox cell is pinned too, and
250
+ * shadowing both would drop a shadow across the column beside it.
251
+ */
252
+ protected isStickyStartEdge(column: InfiniteScrollTableColumn<T>): boolean;
253
+ protected activateRow(event: Event, row: RenderRow<T>): void;
254
+ /** A clickable row matches `[tabindex]` itself, so `currentTarget` must be excluded explicitly. */
255
+ private isInteractiveTarget;
256
+ /** Whether the user is selecting text, in which case a click is a selection gesture, not activation. */
257
+ private hasTextSelection;
258
+ /**
259
+ * Deferred a frame to read the settled layout and never trip "ResizeObserver loop limit exceeded";
260
+ * repeated triggers coalesce to one measure.
261
+ */
262
+ private scheduleViewportRemeasure;
263
+ /**
264
+ * The third `checkLoadMore` trigger, and the only one that survives a page landing without a rendered-range
265
+ * change. CDK emits a range only when the virtual-for LENGTH changes, so a page whose row count exactly
266
+ * replaces the load-more skeletons (`data + skeletons` before, `data` after) moves nothing CDK watches —
267
+ * and when the new rows add no scrollable height, no scroll event can ever arrive either. Runs after the
268
+ * re-measure so the zone is tested against the size CDK just settled on.
269
+ */
270
+ private settleLoadMore;
271
+ private emitRetry;
272
+ /**
273
+ * The index fallback is identity-in-name-only — it cannot tell rows apart after a reorder — which is why
274
+ * the automatic scroll reset cannot work without `trackBy` or `rowIdKey`.
275
+ */
276
+ private rowIdentity;
277
+ /**
278
+ * Assigning an absolute `scrollLeft` is drift-free by construction: it self-corrects every scroll event
279
+ * and the browser clamps when the header's maximum is momentarily smaller. A progress-normalized CSS
280
+ * scroll-timeline cannot guarantee that, which is why it was removed — do not reintroduce one.
281
+ */
282
+ private syncHorizontalScroll;
283
+ /**
284
+ * How many rows the viewport shows. Zero until CDK has measured, which callers must treat as
285
+ * "unknown" rather than "none".
286
+ */
287
+ private visibleRowCount;
288
+ /**
289
+ * Rows from the end that count as "approaching it". Capped at a screenful: a threshold wider than the
290
+ * viewport cannot mean approaching, and uncapped it made the zone unleavable at every scroll position,
291
+ * which is how an oversized `loadMoreThreshold` used to walk a whole dataset unattended. Clamped at 0 so
292
+ * a negative value can't push the trigger point past the end and disable paging outright.
293
+ */
294
+ private triggerZoneRows;
295
+ /**
296
+ * The rendered range includes CDK's read-ahead buffer, so measuring it conflates the user reaching the
297
+ * end with CDK merely pre-rendering it. The visible end has no such slack, so it tracks the user's
298
+ * actual scroll position instead.
299
+ */
300
+ private isInTriggerZone;
301
+ /**
302
+ * Re-arms the latch when something other than scrolling has to do it. Two cases, both of which used to
303
+ * be terminal stalls:
304
+ *
305
+ * - **The requested page landed.** `data` grew past its length at the last emission, so that emission is
306
+ * spent. Without this, re-arming needed the user to scroll *out* of the zone and back — impossible when
307
+ * the page was smaller than the threshold, and impossible to even attempt when the new rows added no
308
+ * scrollable height.
309
+ * - **The zone can't be left.** `visibleEnd` bottoms out at `visibleRows`, so while that floor sits
310
+ * inside the zone no amount of scrolling re-arms anything. Also covers a not-yet-measured viewport,
311
+ * which must count as unleavable or the first fill never starts.
312
+ *
313
+ * Deliberately not driven by `loadingMore` or `error`: a failed fetch clears `loadingMore` without
314
+ * growing `data`, and must stay disarmed rather than re-fire in a loop.
315
+ */
316
+ private rearmLoadMoreIfUnreachable;
317
+ /** Emits at most once per page that lands while the user is inside the trigger zone. */
318
+ private checkLoadMore;
319
+ static ɵfac: i0.ɵɵFactoryDeclaration<InfiniteScrollTableComponent<any>, never>;
320
+ static ɵcmp: i0.ɵɵComponentDeclaration<InfiniteScrollTableComponent<any>, "ui-infinite-scroll-table", never, {
321
+ "data": {
322
+ "alias": "data";
323
+ "required": true;
324
+ "isSignal": true;
191
325
  };
192
- protected readonly stickyStartKey: _angular_core.Signal<string | undefined>;
193
- protected readonly stickyEndKey: _angular_core.Signal<string | undefined>;
194
- protected readonly defaultColumnWidth = "160px";
195
- protected readonly effectiveMinBufferPx: _angular_core.Signal<number>;
196
- /**
197
- * The `Math.max` is load-bearing: CDK throws in dev mode when `maxBufferPx < minBufferPx`, which a
198
- * consumer triggers just by raising `minBufferPx` above the derived default.
199
- */
200
- protected readonly effectiveMaxBufferPx: _angular_core.Signal<number>;
201
- /** Stable keys for the placeholder columns, so `@for` can track them across renders. */
202
- protected readonly loadingColumns: _angular_core.Signal<string[]>;
203
- protected readonly renderRows: _angular_core.Signal<RenderRow<T>[]>;
204
- protected readonly hasData: _angular_core.Signal<boolean>;
205
- protected readonly showViewport: _angular_core.Signal<boolean>;
206
- /**
207
- * `loadingMore` counts as loading here too: a consumer that retries a failed first page through the same
208
- * flag it uses for every page would otherwise render "no rows" with `aria-busy` set and the live region
209
- * announcing a fetch.
210
- */
211
- protected readonly showEmptyState: _angular_core.Signal<boolean>;
212
- protected readonly showErrorState: _angular_core.Signal<boolean>;
213
- protected readonly showErrorFooter: _angular_core.Signal<boolean>;
214
- /**
215
- * The negative clauses keep this out of slots other states own, and `!loadingMore()` closes a one-tick
216
- * flash: a fetch completing and the consumer flipping `hasMore` need not land in the same cycle.
217
- */
218
- protected readonly showEndOfList: _angular_core.Signal<boolean>;
219
- /**
220
- * CSS `min()` because the cap mixes units. The scrollbar reserve stops a short list from growing a
221
- * spurious vertical scrollbar; fill mode returns `null` so flex owns the sizing and the reserve is moot.
222
- */
223
- protected readonly viewportHeight: _angular_core.Signal<string | null>;
224
- protected readonly translationContext = "INFINITE_SCROLL_TABLE.";
225
- /** A translation key, resolved in the template: screen-reader users are not all English speakers. */
226
- protected readonly statusMessageKey: _angular_core.Signal<string>;
227
- protected readonly errorContext: InfiniteScrollTableErrorContext;
228
- protected readonly renderRowTrackBy: TrackByFunction<RenderRow<T>>;
229
- constructor();
230
- private cancelResetScrollFrame;
231
- /** No-ops only when no rows are rendered: the empty state, or an error with no rows. */
232
- scrollToIndex(index: number, behavior?: ScrollBehavior): void;
233
- scrollToTop(behavior?: ScrollBehavior): void;
234
- /**
235
- * The single place `T` is widened to its structural contract. Every field read on a row goes through
236
- * here, so the assertion exists once instead of at each call site.
237
- */
238
- private asRowLike;
239
- protected getCellValue(item: T, key: string): unknown;
240
- /** Applied as `flex-basis`, `min-width` AND `max-width` on header and body cells alike — see the SCSS. */
241
- protected columnWidth(column: InfiniteScrollTableColumn<T>): string;
242
- protected emitRowClick(event: Event, row: RenderRow<T>): void;
243
- protected rowTestId(row: RenderRow<T>): string | null;
244
- protected cellTestId(row: RenderRow<T>, columnKey: string): string | null;
245
- protected rowCheckboxTestId(row: RenderRow<T>): string | null;
246
- protected isRowSelected(row: RenderRow<T>): boolean;
247
- protected emitSelectionChange(row: RenderRow<T>, selected: boolean): void;
248
- /** Reads `--ui-ist-checkbox-width` so the offset cannot drift from the checkbox column's own width. */
249
- protected stickyStartLeft(column: InfiniteScrollTableColumn<T>): string | null;
250
- /**
251
- * Only the outermost start-pinned cell may cast the sticky shadow: the checkbox cell is pinned too, and
252
- * shadowing both would drop a shadow across the column beside it.
253
- */
254
- protected isStickyStartEdge(column: InfiniteScrollTableColumn<T>): boolean;
255
- protected activateRow(event: Event, row: RenderRow<T>): void;
256
- /** A clickable row matches `[tabindex]` itself, so `currentTarget` must be excluded explicitly. */
257
- private isInteractiveTarget;
258
- /** Whether the user is selecting text, in which case a click is a selection gesture, not activation. */
259
- private hasTextSelection;
260
- /**
261
- * Deferred a frame to read the settled layout and never trip "ResizeObserver loop limit exceeded";
262
- * repeated triggers coalesce to one measure.
263
- */
264
- private scheduleViewportRemeasure;
265
- /**
266
- * The third `checkLoadMore` trigger, and the only one that survives a page landing without a rendered-range
267
- * change. CDK emits a range only when the virtual-for LENGTH changes, so a page whose row count exactly
268
- * replaces the load-more skeletons (`data + skeletons` before, `data` after) moves nothing CDK watches —
269
- * and when the new rows add no scrollable height, no scroll event can ever arrive either. Runs after the
270
- * re-measure so the zone is tested against the size CDK just settled on.
271
- */
272
- private settleLoadMore;
273
- private emitRetry;
274
- /**
275
- * The index fallback is identity-in-name-only — it cannot tell rows apart after a reorder — which is why
276
- * the automatic scroll reset cannot work without `trackBy` or `rowIdKey`.
277
- */
278
- private rowIdentity;
279
- /**
280
- * Assigning an absolute `scrollLeft` is drift-free by construction: it self-corrects every scroll event
281
- * and the browser clamps when the header's maximum is momentarily smaller. A progress-normalized CSS
282
- * scroll-timeline cannot guarantee that, which is why it was removed — do not reintroduce one.
283
- */
284
- private syncHorizontalScroll;
285
- /**
286
- * How many rows the viewport shows. Zero until CDK has measured, which callers must treat as
287
- * "unknown" rather than "none".
288
- */
289
- private visibleRowCount;
290
- /**
291
- * Rows from the end that count as "approaching it". Capped at a screenful: a threshold wider than the
292
- * viewport cannot mean approaching, and uncapped it made the zone unleavable at every scroll position,
293
- * which is how an oversized `loadMoreThreshold` used to walk a whole dataset unattended. Clamped at 0 so
294
- * a negative value can't push the trigger point past the end and disable paging outright.
295
- */
296
- private triggerZoneRows;
297
- /**
298
- * The rendered range includes CDK's read-ahead buffer, so measuring it conflates the user reaching the
299
- * end with CDK merely pre-rendering it. The visible end has no such slack, so it tracks the user's
300
- * actual scroll position instead.
301
- */
302
- private isInTriggerZone;
303
- /**
304
- * Re-arms the latch when something other than scrolling has to do it. Two cases, both of which used to
305
- * be terminal stalls:
306
- *
307
- * - **The requested page landed.** `data` grew past its length at the last emission, so that emission is
308
- * spent. Without this, re-arming needed the user to scroll *out* of the zone and back — impossible when
309
- * the page was smaller than the threshold, and impossible to even attempt when the new rows added no
310
- * scrollable height.
311
- * - **The zone can't be left.** `visibleEnd` bottoms out at `visibleRows`, so while that floor sits
312
- * inside the zone no amount of scrolling re-arms anything. Also covers a not-yet-measured viewport,
313
- * which must count as unleavable or the first fill never starts.
314
- *
315
- * Deliberately not driven by `loadingMore` or `error`: a failed fetch clears `loadingMore` without
316
- * growing `data`, and must stay disarmed rather than re-fire in a loop.
317
- */
318
- private rearmLoadMoreIfUnreachable;
319
- /** Emits at most once per page that lands while the user is inside the trigger zone. */
320
- private checkLoadMore;
321
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfiniteScrollTableComponent<any>, never>;
322
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InfiniteScrollTableComponent<any>, "ui-infinite-scroll-table", never, { "data": { "alias": "data"; "required": true; "isSignal": true; }; "columns": { "alias": "columns"; "required": true; "isSignal": true; }; "rowHeight": { "alias": "rowHeight"; "required": true; "isSignal": true; }; "trackBy": { "alias": "trackBy"; "required": false; "isSignal": true; }; "rowIdKey": { "alias": "rowIdKey"; "required": false; "isSignal": true; }; "minBufferPx": { "alias": "minBufferPx"; "required": false; "isSignal": true; }; "maxBufferPx": { "alias": "maxBufferPx"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "fillHeight": { "alias": "fillHeight"; "required": false; "isSignal": true; }; "isCondensed": { "alias": "isCondensed"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "rowsClickable": { "alias": "rowsClickable"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "loadingMore": { "alias": "loadingMore"; "required": false; "isSignal": true; }; "hasMore": { "alias": "hasMore"; "required": true; "isSignal": true; }; "skeletonRowCount": { "alias": "skeletonRowCount"; "required": false; "isSignal": true; }; "loadMoreSkeletonCount": { "alias": "loadMoreSkeletonCount"; "required": false; "isSignal": true; }; "loadingColumnCount": { "alias": "loadingColumnCount"; "required": false; "isSignal": true; }; "loadMoreThreshold": { "alias": "loadMoreThreshold"; "required": false; "isSignal": true; }; "noDataTemplate": { "alias": "noDataTemplate"; "required": false; "isSignal": true; }; "errorTemplate": { "alias": "errorTemplate"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "endOfListTemplate": { "alias": "endOfListTemplate"; "required": false; "isSignal": true; }; "testId": { "alias": "testId"; "required": false; "isSignal": true; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; }, { "loadMore": "loadMore"; "retry": "retry"; "rowClick": "rowClick"; "selectionChange": "selectionChange"; }, never, never, true, never>;
326
+ "columns": {
327
+ "alias": "columns";
328
+ "required": true;
329
+ "isSignal": true;
330
+ };
331
+ "rowHeight": {
332
+ "alias": "rowHeight";
333
+ "required": true;
334
+ "isSignal": true;
335
+ };
336
+ "trackBy": {
337
+ "alias": "trackBy";
338
+ "required": false;
339
+ "isSignal": true;
340
+ };
341
+ "rowIdKey": {
342
+ "alias": "rowIdKey";
343
+ "required": false;
344
+ "isSignal": true;
345
+ };
346
+ "minBufferPx": {
347
+ "alias": "minBufferPx";
348
+ "required": false;
349
+ "isSignal": true;
350
+ };
351
+ "maxBufferPx": {
352
+ "alias": "maxBufferPx";
353
+ "required": false;
354
+ "isSignal": true;
355
+ };
356
+ "maxHeight": {
357
+ "alias": "maxHeight";
358
+ "required": false;
359
+ "isSignal": true;
360
+ };
361
+ "fillHeight": {
362
+ "alias": "fillHeight";
363
+ "required": false;
364
+ "isSignal": true;
365
+ };
366
+ "isCondensed": {
367
+ "alias": "isCondensed";
368
+ "required": false;
369
+ "isSignal": true;
370
+ };
371
+ "selectable": {
372
+ "alias": "selectable";
373
+ "required": false;
374
+ "isSignal": true;
375
+ };
376
+ "rowsClickable": {
377
+ "alias": "rowsClickable";
378
+ "required": false;
379
+ "isSignal": true;
380
+ };
381
+ "loading": {
382
+ "alias": "loading";
383
+ "required": false;
384
+ "isSignal": true;
385
+ };
386
+ "loadingMore": {
387
+ "alias": "loadingMore";
388
+ "required": false;
389
+ "isSignal": true;
390
+ };
391
+ "hasMore": {
392
+ "alias": "hasMore";
393
+ "required": true;
394
+ "isSignal": true;
395
+ };
396
+ "skeletonRowCount": {
397
+ "alias": "skeletonRowCount";
398
+ "required": false;
399
+ "isSignal": true;
400
+ };
401
+ "loadMoreSkeletonCount": {
402
+ "alias": "loadMoreSkeletonCount";
403
+ "required": false;
404
+ "isSignal": true;
405
+ };
406
+ "loadingColumnCount": {
407
+ "alias": "loadingColumnCount";
408
+ "required": false;
409
+ "isSignal": true;
410
+ };
411
+ "loadMoreThreshold": {
412
+ "alias": "loadMoreThreshold";
413
+ "required": false;
414
+ "isSignal": true;
415
+ };
416
+ "noDataTemplate": {
417
+ "alias": "noDataTemplate";
418
+ "required": false;
419
+ "isSignal": true;
420
+ };
421
+ "errorTemplate": {
422
+ "alias": "errorTemplate";
423
+ "required": false;
424
+ "isSignal": true;
425
+ };
426
+ "error": {
427
+ "alias": "error";
428
+ "required": false;
429
+ "isSignal": true;
430
+ };
431
+ "endOfListTemplate": {
432
+ "alias": "endOfListTemplate";
433
+ "required": false;
434
+ "isSignal": true;
435
+ };
436
+ "testId": {
437
+ "alias": "testId";
438
+ "required": false;
439
+ "isSignal": true;
440
+ };
441
+ "ariaLabel": {
442
+ "alias": "ariaLabel";
443
+ "required": false;
444
+ "isSignal": true;
445
+ };
446
+ }, {
447
+ "loadMore": "loadMore";
448
+ "retry": "retry";
449
+ "rowClick": "rowClick";
450
+ "selectionChange": "selectionChange";
451
+ }, never, never, true, never>;
323
452
  }
324
-
325
- declare class InfiniteScrollTableComponentModule {
326
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<InfiniteScrollTableComponentModule, never>;
327
- static ɵmod: _angular_core.ɵɵNgModuleDeclaration<InfiniteScrollTableComponentModule, never, [typeof i1.CommonModule, typeof i2.ScrollingModule, typeof InfiniteScrollTableComponent], [typeof InfiniteScrollTableComponent]>;
328
- static ɵinj: _angular_core.ɵɵInjectorDeclaration<InfiniteScrollTableComponentModule>;
453
+ export declare class InfiniteScrollTableComponentModule {
454
+ static ɵfac: i0.ɵɵFactoryDeclaration<InfiniteScrollTableComponentModule, never>;
455
+ static ɵmod: i0.ɵɵNgModuleDeclaration<InfiniteScrollTableComponentModule, never, [typeof i1.CommonModule, typeof i2.ScrollingModule, typeof InfiniteScrollTableComponent], [typeof InfiniteScrollTableComponent]>;
456
+ static ɵinj: i0.ɵɵInjectorDeclaration<InfiniteScrollTableComponentModule>;
329
457
  }
330
-
331
- export { InfiniteScrollTableComponent, InfiniteScrollTableComponentModule };
332
- export type { InfiniteScrollTableColumn, InfiniteScrollTableColumnAlignment, InfiniteScrollTableColumnStyles, InfiniteScrollTableErrorContext, InfiniteScrollTableHeaderCellContext, InfiniteScrollTableRowCellContext, InfiniteScrollTableRowClick, InfiniteScrollTableRowLike, InfiniteScrollTableRowSelection };
458
+ export {};