@testgorilla/tgo-ui 11.22.2 → 12.0.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 (227) 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 -1789
  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/assets/icons/rebrand/Sequences-filled.svg +3 -0
  152. package/projects/tgo-canopy-ui/assets/icons/rebrand/Sequences-in-line.svg +3 -0
  153. package/projects/tgo-canopy-ui/theme/_palette.scss +23 -18
  154. package/types/testgorilla-tgo-ui-components-accordion.d.ts +214 -158
  155. package/types/testgorilla-tgo-ui-components-ai-audio-circle.d.ts +93 -69
  156. package/types/testgorilla-tgo-ui-components-ai-caveat.d.ts +37 -34
  157. package/types/testgorilla-tgo-ui-components-ai-feedback.d.ts +126 -86
  158. package/types/testgorilla-tgo-ui-components-alert-banner.d.ts +260 -185
  159. package/types/testgorilla-tgo-ui-components-audio-waveform.d.ts +96 -67
  160. package/types/testgorilla-tgo-ui-components-autocomplete-v2.d.ts +455 -256
  161. package/types/testgorilla-tgo-ui-components-autocomplete.d.ts +545 -390
  162. package/types/testgorilla-tgo-ui-components-avatar.d.ts +128 -102
  163. package/types/testgorilla-tgo-ui-components-badge.d.ts +191 -139
  164. package/types/testgorilla-tgo-ui-components-breadcrumb.d.ts +100 -62
  165. package/types/testgorilla-tgo-ui-components-button.d.ts +479 -340
  166. package/types/testgorilla-tgo-ui-components-card.d.ts +153 -114
  167. package/types/testgorilla-tgo-ui-components-checkbox.d.ts +299 -223
  168. package/types/testgorilla-tgo-ui-components-checklist.d.ts +149 -97
  169. package/types/testgorilla-tgo-ui-components-core.d.ts +307 -295
  170. package/types/testgorilla-tgo-ui-components-datepicker.d.ts +404 -299
  171. package/types/testgorilla-tgo-ui-components-device-control.d.ts +151 -81
  172. package/types/testgorilla-tgo-ui-components-dialog.d.ts +442 -329
  173. package/types/testgorilla-tgo-ui-components-divider.d.ts +64 -51
  174. package/types/testgorilla-tgo-ui-components-donut-chart.d.ts +41 -37
  175. package/types/testgorilla-tgo-ui-components-dropdown.d.ts +335 -241
  176. package/types/testgorilla-tgo-ui-components-elevation-shadow.d.ts +48 -43
  177. package/types/testgorilla-tgo-ui-components-empty-state.d.ts +317 -215
  178. package/types/testgorilla-tgo-ui-components-field.d.ts +559 -388
  179. package/types/testgorilla-tgo-ui-components-file-upload.d.ts +230 -168
  180. package/types/testgorilla-tgo-ui-components-filter-button.d.ts +263 -206
  181. package/types/testgorilla-tgo-ui-components-gaussian-chart.d.ts +107 -94
  182. package/types/testgorilla-tgo-ui-components-icon-label.d.ts +84 -61
  183. package/types/testgorilla-tgo-ui-components-icon.d.ts +137 -110
  184. package/types/testgorilla-tgo-ui-components-infinite-scroll-table.d.ts +429 -303
  185. package/types/testgorilla-tgo-ui-components-inline-field.d.ts +338 -254
  186. package/types/testgorilla-tgo-ui-components-logo.d.ts +119 -101
  187. package/types/testgorilla-tgo-ui-components-media-card.d.ts +51 -35
  188. package/types/testgorilla-tgo-ui-components-media-dialog.d.ts +40 -45
  189. package/types/testgorilla-tgo-ui-components-multi-input.d.ts +283 -194
  190. package/types/testgorilla-tgo-ui-components-navbar.d.ts +326 -208
  191. package/types/testgorilla-tgo-ui-components-overflow-menu.d.ts +276 -204
  192. package/types/testgorilla-tgo-ui-components-page-header.d.ts +67 -50
  193. package/types/testgorilla-tgo-ui-components-paginator.d.ts +103 -70
  194. package/types/testgorilla-tgo-ui-components-password-criteria.d.ts +67 -58
  195. package/types/testgorilla-tgo-ui-components-password-strength.d.ts +66 -57
  196. package/types/testgorilla-tgo-ui-components-phone-input.d.ts +217 -175
  197. package/types/testgorilla-tgo-ui-components-popover.d.ts +94 -53
  198. package/types/testgorilla-tgo-ui-components-popup-tip.d.ts +81 -44
  199. package/types/testgorilla-tgo-ui-components-progress-bar.d.ts +115 -84
  200. package/types/testgorilla-tgo-ui-components-prompt.d.ts +315 -219
  201. package/types/testgorilla-tgo-ui-components-radial-progress.d.ts +146 -107
  202. package/types/testgorilla-tgo-ui-components-radio-button.d.ts +296 -219
  203. package/types/testgorilla-tgo-ui-components-rating.d.ts +134 -95
  204. package/types/testgorilla-tgo-ui-components-scale-table.d.ts +67 -47
  205. package/types/testgorilla-tgo-ui-components-scale.d.ts +91 -66
  206. package/types/testgorilla-tgo-ui-components-segmented-bar.d.ts +118 -89
  207. package/types/testgorilla-tgo-ui-components-segmented-button.d.ts +107 -80
  208. package/types/testgorilla-tgo-ui-components-segmented-toggle.d.ts +138 -105
  209. package/types/testgorilla-tgo-ui-components-selectable-card.d.ts +90 -56
  210. package/types/testgorilla-tgo-ui-components-side-navigation.d.ts +183 -107
  211. package/types/testgorilla-tgo-ui-components-side-panel.d.ts +156 -145
  212. package/types/testgorilla-tgo-ui-components-side-sheet.d.ts +98 -89
  213. package/types/testgorilla-tgo-ui-components-skeleton.d.ts +50 -33
  214. package/types/testgorilla-tgo-ui-components-slider.d.ts +278 -198
  215. package/types/testgorilla-tgo-ui-components-snackbar.d.ts +211 -159
  216. package/types/testgorilla-tgo-ui-components-spider-chart.d.ts +140 -121
  217. package/types/testgorilla-tgo-ui-components-spinner.d.ts +93 -72
  218. package/types/testgorilla-tgo-ui-components-stepper.d.ts +480 -338
  219. package/types/testgorilla-tgo-ui-components-table.d.ts +280 -233
  220. package/types/testgorilla-tgo-ui-components-tabs.d.ts +282 -183
  221. package/types/testgorilla-tgo-ui-components-tag.d.ts +266 -193
  222. package/types/testgorilla-tgo-ui-components-toggle.d.ts +180 -132
  223. package/types/testgorilla-tgo-ui-components-tooltip.d.ts +142 -105
  224. package/types/testgorilla-tgo-ui-components-universal-skills.d.ts +165 -144
  225. package/types/testgorilla-tgo-ui-components-validation-error.d.ts +70 -51
  226. package/types/testgorilla-tgo-ui-components-write-with-ai.d.ts +210 -133
  227. package/types/testgorilla-tgo-ui.d.ts +52 -45
@@ -1,426 +1,725 @@
1
- import { trigger, state, style, transition, animate } from '@angular/animations';
2
- import { NgClass, NgStyle, NgTemplateOutlet, AsyncPipe, UpperCasePipe, CommonModule } from '@angular/common';
3
- import * as i0 from '@angular/core';
4
- import { Pipe, EventEmitter, ViewChild, Output, Input, Optional, Inject, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { MatSort, MatSortHeader, MatSortModule } from '@angular/material/sort';
7
- import { MatTableDataSource, MatTable, MatColumnDef, MatHeaderCellDef, MatHeaderCell, MatCellDef, MatCell, MatHeaderRowDef, MatHeaderRow, MatRowDef, MatRow, MatNoDataRow, MatTableModule } from '@angular/material/table';
8
- import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
9
- import * as i1 from 'rxjs';
10
- import { BehaviorSubject, fromEvent } from 'rxjs';
11
- import { ButtonComponent, ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';
12
- import { IS_MOBILE_TOKEN, DynamicComponentDirective, EllipseTextDirective, DataPropertyGetterPipe, MemoizeFuncPipe } from '@testgorilla/tgo-ui/components/core';
13
- import { IconComponent, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
14
- import { PaginatorComponent, PaginatorComponentModule } from '@testgorilla/tgo-ui/components/paginator';
15
- import { SkeletonComponent } from '@testgorilla/tgo-ui/components/skeleton';
16
-
17
- class SentenceCasePipe {
18
- transform(value) {
19
- if (!value) {
20
- return '';
21
- }
22
- return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
23
- }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SentenceCasePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
25
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: SentenceCasePipe, isStandalone: true, name: "sentencecase" }); }
26
- }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SentenceCasePipe, decorators: [{
28
- type: Pipe,
29
- args: [{ name: 'sentencecase' }]
30
- }] });
31
-
1
+ import { animate, state, style, transition, trigger } from "@angular/animations";
2
+ import { AsyncPipe, CommonModule, NgClass, NgStyle, NgTemplateOutlet, UpperCasePipe } from "@angular/common";
3
+ import * as i0 from "@angular/core";
4
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, NgModule, Optional, Output, Pipe, ViewChild } from "@angular/core";
5
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
6
+ import { MatSort, MatSortHeader, MatSortModule } from "@angular/material/sort";
7
+ import { MatCell, MatCellDef, MatColumnDef, MatHeaderCell, MatHeaderCellDef, MatHeaderRow, MatHeaderRowDef, MatNoDataRow, MatRow, MatRowDef, MatTable, MatTableDataSource, MatTableModule } from "@angular/material/table";
8
+ import { MatTooltip, MatTooltipModule } from "@angular/material/tooltip";
9
+ import * as i1 from "rxjs";
10
+ import { BehaviorSubject, fromEvent } from "rxjs";
11
+ import { ButtonComponent, ButtonComponentModule } from "@testgorilla/tgo-ui/components/button";
12
+ import { DataPropertyGetterPipe, DynamicComponentDirective, EllipseTextDirective, IS_MOBILE_TOKEN, MemoizeFuncPipe } from "@testgorilla/tgo-ui/components/core";
13
+ import { IconComponent, IconComponentModule } from "@testgorilla/tgo-ui/components/icon";
14
+ import { PaginatorComponent, PaginatorComponentModule } from "@testgorilla/tgo-ui/components/paginator";
15
+ import { SkeletonComponent } from "@testgorilla/tgo-ui/components/skeleton";
16
+ var SentenceCasePipe = class SentenceCasePipe {
17
+ transform(value) {
18
+ if (!value) return "";
19
+ return value.charAt(0).toUpperCase() + value.slice(1).toLowerCase();
20
+ }
21
+ static {
22
+ this.ɵfac = i0.ɵɵngDeclareFactory({
23
+ minVersion: "12.0.0",
24
+ version: "22.2.4",
25
+ ngImport: i0,
26
+ type: SentenceCasePipe,
27
+ deps: [],
28
+ target: i0.ɵɵFactoryTarget.Pipe
29
+ });
30
+ }
31
+ static {
32
+ this.ɵpipe = i0.ɵɵngDeclarePipe({
33
+ minVersion: "14.0.0",
34
+ version: "22.2.4",
35
+ ngImport: i0,
36
+ type: SentenceCasePipe,
37
+ isStandalone: true,
38
+ name: "sentencecase"
39
+ });
40
+ }
41
+ };
42
+ i0.ɵɵngDeclareClassMetadata({
43
+ minVersion: "12.0.0",
44
+ version: "22.2.4",
45
+ ngImport: i0,
46
+ type: SentenceCasePipe,
47
+ decorators: [{
48
+ type: Pipe,
49
+ args: [{ name: "sentencecase" }]
50
+ }]
51
+ });
32
52
  var ColumnType;
33
- (function (ColumnType) {
34
- ColumnType["FIELD"] = "field";
35
- ColumnType["FUNCTION"] = "function";
36
- ColumnType["RENDERER"] = "renderer";
53
+ (function(ColumnType) {
54
+ ColumnType["FIELD"] = "field";
55
+ ColumnType["FUNCTION"] = "function";
56
+ ColumnType["RENDERER"] = "renderer";
37
57
  })(ColumnType || (ColumnType = {}));
38
58
  var ColumnAlignment;
39
- (function (ColumnAlignment) {
40
- ColumnAlignment["LEFT"] = "left";
41
- ColumnAlignment["RIGHT"] = "right";
42
- ColumnAlignment["CENTER"] = "center";
59
+ (function(ColumnAlignment) {
60
+ ColumnAlignment["LEFT"] = "left";
61
+ ColumnAlignment["RIGHT"] = "right";
62
+ ColumnAlignment["CENTER"] = "center";
43
63
  })(ColumnAlignment || (ColumnAlignment = {}));
44
64
  var ColumnTypeEnum;
45
- (function (ColumnTypeEnum) {
46
- ColumnTypeEnum["FIELD"] = "field";
47
- ColumnTypeEnum["FUNCTION"] = "function";
48
- ColumnTypeEnum["RENDERER"] = "renderer";
65
+ (function(ColumnTypeEnum) {
66
+ ColumnTypeEnum["FIELD"] = "field";
67
+ ColumnTypeEnum["FUNCTION"] = "function";
68
+ ColumnTypeEnum["RENDERER"] = "renderer";
49
69
  })(ColumnTypeEnum || (ColumnTypeEnum = {}));
50
70
  var ColumnAlignmentEnum;
51
- (function (ColumnAlignmentEnum) {
52
- ColumnAlignmentEnum["LEFT"] = "left";
53
- ColumnAlignmentEnum["RIGHT"] = "right";
54
- ColumnAlignmentEnum["CENTER"] = "center";
71
+ (function(ColumnAlignmentEnum) {
72
+ ColumnAlignmentEnum["LEFT"] = "left";
73
+ ColumnAlignmentEnum["RIGHT"] = "right";
74
+ ColumnAlignmentEnum["CENTER"] = "center";
55
75
  })(ColumnAlignmentEnum || (ColumnAlignmentEnum = {}));
56
-
57
- /**
58
- * Sorting table columns by order value if set.
59
- * The rest columns keep the same ordering and displayed after the sorted ones.
60
- */
61
76
  const sortByOrder = (columns) => {
62
- const withOrderColumns = columns.filter(v => v.order);
63
- const withoutOrderColumns = columns.filter(v => !v.order);
64
- if (!withOrderColumns.length) {
65
- return columns;
66
- }
67
- if (withoutOrderColumns.length) {
68
- const sortedColumns = new Array(columns.length);
69
- withOrderColumns.forEach(column => (sortedColumns[(column.order ?? 1) - 1] = column));
70
- withoutOrderColumns.forEach(column => {
71
- const emptyIndex = sortedColumns.findIndex(v => !v);
72
- sortedColumns[emptyIndex] = column;
73
- });
74
- return sortedColumns;
75
- }
76
- else {
77
- const sortedOrderedColumns = withOrderColumns.sort((a, b) => (a.order ?? 0) - (b.order ?? 0));
78
- return [...sortedOrderedColumns, ...withoutOrderColumns];
79
- }
77
+ const withOrderColumns = columns.filter((v) => v.order);
78
+ const withoutOrderColumns = columns.filter((v) => !v.order);
79
+ if (!withOrderColumns.length) return columns;
80
+ if (withoutOrderColumns.length) {
81
+ const sortedColumns = new Array(columns.length);
82
+ withOrderColumns.forEach((column) => sortedColumns[(column.order ?? 1) - 1] = column);
83
+ withoutOrderColumns.forEach((column) => {
84
+ const emptyIndex = sortedColumns.findIndex((v) => !v);
85
+ sortedColumns[emptyIndex] = column;
86
+ });
87
+ return sortedColumns;
88
+ } else return [...withOrderColumns.sort((a, b) => (a.order ?? 0) - (b.order ?? 0)), ...withoutOrderColumns];
80
89
  };
81
-
82
- class TableComponent {
83
- constructor(defaultAppTheme, destroyRef, isMobile$) {
84
- this.defaultAppTheme = defaultAppTheme;
85
- this.destroyRef = destroyRef;
86
- this.isMobile$ = isMobile$;
87
- /**
88
- * Input property indicating whether the table is in a loading state.
89
- *
90
- * @type {boolean}
91
- * @memberof TableComponent
92
- * @default false
93
- */
94
- this.loading = false;
95
- /**
96
- *
97
- * Defines the application theme
98
- * @type {ApplicationTheme}
99
- * @memberof TableComponent
100
- */
101
- this.applicationTheme = 'light';
102
- this.tableDetails = false;
103
- /**
104
- * Disable border radius for table
105
- *
106
- * @type {boolean}
107
- * @memberof TableComponent
108
- */
109
- this.disableBorderRadius = false;
110
- /**
111
- * Condensed table
112
- *
113
- * @type {boolean}
114
- * @memberof TableComponent
115
- */
116
- this.isCondensed = false;
117
- /**
118
- * Sticky header
119
- *
120
- * @type {boolean}
121
- * @memberof TableComponent
122
- */
123
- this.stickyHeader = false;
124
- /**
125
- * Max height
126
- *
127
- * @type {string}
128
- * @memberof TableComponent
129
- */
130
- this.maxHeight = '576px';
131
- this.testId = null;
132
- this.ariaLabel = '';
133
- // eslint-disable-next-line @angular-eslint/no-output-on-prefix -- public output; dropping on- prefix is breaking, deferred to the breaking-change MAJOR (see plan)
134
- this.onRowClickEvent = new EventEmitter();
135
- // eslint-disable-next-line @angular-eslint/no-output-on-prefix -- public output; dropping on- prefix is breaking, deferred to the breaking-change MAJOR (see plan)
136
- this.onDetailRowClickEvent = new EventEmitter();
137
- this.paginatorChange = new EventEmitter();
138
- this.sortChange = new EventEmitter();
139
- this.columnsTooltipState = [];
140
- this.displayedColumns = [];
141
- this.columnsDetailToDisplay = [];
142
- this.skeletonStyleConfig = {
143
- background: '#F6F6F6',
144
- 'border-radius': '4px',
145
- height: '24px',
146
- };
147
- this.dataSourceDetail = new MatTableDataSource([]);
148
- this.DataType = ColumnType;
149
- this.scrollSettings$ = new BehaviorSubject({
150
- scrollEnd: false,
151
- horizontalScroll: false,
152
- scrollStart: false,
153
- });
154
- this.defaultPaginationConfig = {
155
- currentPage: 0,
156
- itemsPerPage: 10,
157
- itemsPerPageOptions: [10, 25, 50],
158
- totalItems: 20,
159
- };
160
- this.trackColumnUniqueId = (index, column) => column.uniqueId ?? column.key;
161
- if (defaultAppTheme) {
162
- this.applicationTheme = defaultAppTheme;
163
- }
164
- }
165
- ngOnInit() {
166
- this.setTableConfig(this.config);
167
- this.setTableData(this.data);
168
- if (this.applicationTheme !== 'classic') {
169
- this.skeletonStyleConfig.background = '#F4F4F4';
170
- }
171
- document.body.setAttribute('theme', this.applicationTheme);
172
- if (this.tableDetailColumns) {
173
- const filteredColumns = this.tableDetailColumns.columnDefs.filter(column => !column.hidden);
174
- this.columnsDetailToDisplay = filteredColumns.length
175
- ? filteredColumns.map((tableColumn) => tableColumn.title ?? '')
176
- : [];
177
- }
178
- if (this.tableConfig?.sortable && this.tableConfig?.sort) {
179
- this.onSortChange(this.tableConfig.sort, false);
180
- }
181
- }
182
- ngAfterViewInit() {
183
- this.hasTableScroll();
184
- fromEvent(this.table.nativeElement, 'scroll')
185
- .pipe(takeUntilDestroyed(this.destroyRef))
186
- .subscribe(() => this.hasTableScroll());
187
- }
188
- ngOnChanges(changes) {
189
- if (changes['config']?.currentValue) {
190
- const config = changes['config'].currentValue;
191
- this.setTableConfig(config);
192
- }
193
- if (changes['data']?.currentValue) {
194
- this.setTableData(changes['data'].currentValue);
195
- }
196
- }
197
- hasTableScroll() {
198
- const table = this.table.nativeElement;
199
- const horizontalScroll = table.scrollWidth > table.clientWidth;
200
- const scrollEnd = table.scrollLeft + table.clientWidth >= table.scrollWidth;
201
- this.scrollSettings$.next({
202
- scrollStart: !table.scrollLeft,
203
- scrollEnd,
204
- horizontalScroll,
205
- });
206
- }
207
- callRenderer([rendererFn, element]) {
208
- return rendererFn ? rendererFn(element) : undefined;
209
- }
210
- onPaginatorChange(event) {
211
- this.paginatorChange.emit(event);
212
- }
213
- onChangeColumnSize(columnIndex, showTooltip) {
214
- this.columnsTooltipState = this.columnsTooltipState.map(column => {
215
- if (column.index === columnIndex) {
216
- column.showTooltip = showTooltip;
217
- }
218
- return column;
219
- });
220
- }
221
- onSortChange(sortState, emitEvent = true) {
222
- if (this.loading) {
223
- return;
224
- }
225
- if (emitEvent) {
226
- this.sortChange.emit(sortState);
227
- }
228
- if (this.tableConfig?.sortable) {
229
- this.tableData = [
230
- ...this.tableData.sort((a, b) => {
231
- const isAsc = sortState.direction === 'asc';
232
- // Cell values are dynamically keyed (TableData is Record<string, any>); assert a
233
- // comparable type — the cast is erased at runtime so JS relational compare is unchanged.
234
- const aVal = a[sortState.active];
235
- const bVal = b[sortState.active];
236
- return (aVal < bVal ? -1 : 1) * (isAsc ? 1 : -1);
237
- }),
238
- ];
239
- if (!sortState.direction) {
240
- this.tableData = [...this.sourceData];
241
- }
242
- }
243
- }
244
- onRowClick(rowParams, rowIndex) {
245
- this.onRowClickEvent.emit({ ...rowParams, index: rowIndex });
246
- }
247
- onDetailRowClick(rowParams) {
248
- this.onDetailRowClickEvent.emit(rowParams);
249
- }
250
- toggleRow(element) {
251
- if (this.tableDetails) {
252
- this.elementDetail = this.elementDetail === element ? null : element;
253
- if (this.elementDetail) {
254
- this.tableDetailColumns.setDetailRowData({
255
- data: element,
256
- setDetailDataSource: this.setTableDetailDataSource.bind(this),
257
- });
258
- }
259
- }
260
- }
261
- setTableDetailDataSource(rowData) {
262
- this.dataSourceDetail = new MatTableDataSource(rowData);
263
- }
264
- setTableConfig(config) {
265
- config.pagination = config?.pagination ?? this.defaultPaginationConfig;
266
- this.tableConfig = config;
267
- this.columnsTooltipState = config.columns.map((column, index) => ({
268
- index,
269
- showTooltip: column.showTooltip ?? false,
270
- }));
271
- this.displayedColumns = sortByOrder(config.columns.filter(column => !column.hidden)).map(column => column.uniqueId ?? column.key);
272
- }
273
- setTableData(data) {
274
- this.sourceData = data;
275
- this.tableData = data;
276
- }
277
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: TableComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i0.DestroyRef }, { token: IS_MOBILE_TOKEN }], target: i0.ɵɵFactoryTarget.Component }); }
278
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: TableComponent, isStandalone: true, selector: "ui-table", inputs: { config: "config", data: "data", loading: "loading", applicationTheme: "applicationTheme", tableDetailColumns: "tableDetailColumns", tableDetails: "tableDetails", disableBorderRadius: "disableBorderRadius", isCondensed: "isCondensed", stickyHeader: "stickyHeader", maxHeight: "maxHeight", testId: "testId", ariaLabel: "ariaLabel" }, outputs: { onRowClickEvent: "onRowClickEvent", onDetailRowClickEvent: "onDetailRowClickEvent", paginatorChange: "paginatorChange", sortChange: "sortChange" }, viewQueries: [{ propertyName: "table", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #tableContainer\n class=\"table-container\"\n [ngClass]=\"{ 'without-title': !tableConfig?.title, 'disable-border-radius': disableBorderRadius }\"\n [attr.theme]=\"applicationTheme\"\n>\n @if (tableConfig?.title) {\n <div class=\"table-header\">\n {{ tableConfig.title | sentencecase }}\n <ng-content select=\"[title-actions]\"></ng-content>\n </div>\n }\n @if (scrollSettings$ | async; as scrollSettings) {\n <div #table class=\"table-wrapper\" [class.sticky-header]=\"stickyHeader\" [style.--table-max-height]=\"maxHeight\">\n <table\n [attr.data-testid]=\"testId ?? 'table-main'\"\n [attr.aria-label]=\"ariaLabel || null\"\n [tabIndex]=\"0\"\n class=\"main-table\"\n [class.condensed]=\"isCondensed\"\n [class.sort-disabled]=\"loading\"\n mat-table\n [dataSource]=\"tableData\"\n matSort\n [matSortStart]=\"tableConfig?.sort?.defaultSortStart ?? 'asc'\"\n [matSortActive]=\"tableConfig?.sort?.active ?? ''\"\n [matSortDirection]=\"tableConfig?.sort?.direction ?? ''\"\n (matSortChange)=\"onSortChange($event)\"\n multiTemplateDataRows\n >\n @for (column of tableConfig.columns; track trackColumnUniqueId(i, column); let i = $index; let isLast = $last) {\n @if (isLast && column.isSticky && column.allowSort) {\n <ng-container [matColumnDef]=\"column.uniqueId ?? column.key\" [stickyEnd]=\"!scrollSettings?.scrollEnd\">\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (isLast && column.isSticky && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [stickyEnd]=\"scrollSettings.horizontalScroll ? !scrollSettings.scrollEnd : true\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n }\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\n @if (dataSourceDetail.data.length) {\n <div class=\"element-detail\" [@expandDetail]=\"element === elementDetail ? 'expanded' : 'collapsed'\">\n <table\n data-testid=\"table-detail\"\n mat-table\n [dataSource]=\"dataSourceDetail\"\n [ngClass]=\"{ 'hide-borders': element === tableData[tableData.length - 1] }\"\n >\n @for (tableColumn of tableDetailColumns.columnDefs; track tableColumn) {\n <ng-container [matColumnDef]=\"tableColumn.title ?? ''\">\n <th\n mat-header-cell\n *matHeaderCellDef=\"let element\"\n arrowPosition=\"after\"\n [ngStyle]=\"{ width: tableColumn.styles?.width }\"\n [ngClass]=\"tableColumn.styles?.alignment ? 'th-' + tableColumn.styles?.alignment : ''\"\n >\n {{ tableColumn.title | uppercase }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n (click)=\"onDetailRowClick(element)\"\n [align]=\"tableColumn.styles?.alignment\"\n [ngClass]=\"tableColumn.styles?.alignment ? 'td-' + tableColumn.styles?.alignment : ''\"\n [ngStyle]=\"{ width: tableColumn.styles?.width }\"\n >\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn }\"\n ></ng-container>\n </td>\n </ng-container>\n }\n <tr mat-header-row *matHeaderRowDef=\"columnsDetailToDisplay\"></tr>\n <tr mat-row *matRowDef=\"let rowDetail; columns: columnsDetailToDisplay\"></tr>\n </table>\n </div>\n }\n </td>\n </ng-container>\n <ng-template #tableDataTpl let-element=\"element\" let-tableColumn=\"tableColumn\">\n <div class=\"align-wrapper\">\n @switch (tableColumn.type) {\n @case (DataType.FIELD) {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n @case (DataType.FUNCTION) {\n {{ tableColumn.function?.(element) }}\n }\n @case (DataType.RENDERER) {\n <ng-template [dynamicComponent]=\"$any([tableColumn.renderer, element] | memoizeFunc: callRenderer)\">\n </ng-template>\n }\n @default {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n }\n </div>\n </ng-template>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: stickyHeader\"\n [class.is-title-present]=\"tableConfig.title\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{\n 'expanded-row': elementDetail === row,\n 'row-clickable': tableDetails,\n selected: row?.selected,\n 'last-row': row === tableData[tableData.length - 1] && !elementDetail,\n }\"\n (click)=\"toggleRow(row)\"\n ></tr>\n @if (tableDetails && tableDetailColumns?.columnDefs?.length) {\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\"></tr>\n }\n @if (tableConfig.noDataRowTpl) {\n <tr *matNoDataRow>\n <ng-container *ngTemplateOutlet=\"tableConfig.noDataRowTpl\"></ng-container>\n </tr>\n }\n </table>\n </div>\n }\n\n @if (!tableConfig?.hidePagination && tableConfig?.pagination) {\n <ui-paginator\n [disabled]=\"loading\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n [pageSize]=\"tableConfig.pagination?.itemsPerPage ?? 25\"\n [length]=\"tableConfig.pagination?.totalItems ?? 0\"\n [currentPage]=\"tableConfig.pagination?.currentPage ?? 0\"\n [pageSizeOptions]=\"tableConfig.pagination?.itemsPerPageOptions ?? [10, 25, 50]\"\n (paginatorChange)=\"onPaginatorChange($event)\"\n ></ui-paginator>\n }\n</div>\n\n<ng-template #expandButton let-i=\"index\" let-element=\"element\">\n @if (!i && tableDetails) {\n <ui-button\n [applicationTheme]=\"applicationTheme\"\n variant=\"icon-button\"\n [ngClass]=\"{ opened: elementDetail && element === elementDetail }\"\n [iconName]=\"\n elementDetail && element === elementDetail ? 'Arrow-chevron-up-in-line' : 'Arrow-chevron-down-in-line'\n \"\n ></ui-button>\n }\n</ng-template>\n\n<ng-template #columnHeader let-column=\"column\" let-i=\"i\">\n <div class=\"header-section\">\n <span uiEllipseText (onChangeTextState)=\"onChangeColumnSize(i, $event)\" class=\"column-title\"\n >{{ column.title | sentencecase }}\n </span>\n @if (column?.showTooltip) {\n <ui-icon\n [name]=\"'Help-in-line'\"\n [matTooltipClass]=\"applicationTheme\"\n [matTooltip]=\"(column?.showTooltip ? (column?.tooltip ? column.tooltip : column.title) : '') || ''\"\n ></ui-icon>\n }\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap\";.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host-context(.without-table-border) .table-container{border:none}.flex-left,.table-container .table-header{display:flex;justify-content:flex-start;align-items:center}.table-container{--mat-table-background-color: #ffffff;overflow:hidden;border:1px #e0e0e0 solid;border-radius:8px}.table-container ::ng-deep .mat-sort-header-arrow{color:#000}.table-container .table-header{min-height:56px;padding:8px;background:#fff;line-height:24px;font-size:16px;font-weight:700;text-transform:uppercase;display:flex;justify-content:space-between}.table-container .table-wrapper{max-width:100%;overflow:auto}.table-container .table-wrapper.sticky-header{max-height:var(--table-max-height);overflow-y:auto}.table-container .table-wrapper table.main-table{width:100%;box-shadow:unset}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header{pointer-events:none;cursor:default}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header .mat-sort-header-container{cursor:default}.table-container .table-wrapper table.main-table ::ng-deep .mat-sort-header-arrow{margin-left:8px}.table-container .table-wrapper table.main-table .mdc-data-table__cell,.table-container .table-wrapper table.main-table .mdc-data-table__header-cell{padding:8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:not(:first-child):not(:last-child){padding:8px 12px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:first-child{padding:8px 12px 8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:last-child{padding:8px 24px 8px 12px}.table-container .table-wrapper table.main-table th{font-size:14px;line-height:16px;text-transform:uppercase}.table-container .table-wrapper table.main-table tr.is-title-present th.mat-mdc-header-cell.mdc-data-table__header-cell{border-top:1px solid #e0e0e0}.table-container .table-wrapper table.main-table td{font-size:14px;line-height:20px}.table-container .table-wrapper table.main-table td .row-value{display:flex;align-items:center;gap:16px}.table-container .table-wrapper table.main-table td .row-value ui-icon ::ng-deep mat-icon{transition:all .3s!important;font-size:24px}.table-container .table-wrapper table.main-table td .row-value ui-icon.opened ::ng-deep mat-icon{transform:rotate(180deg)}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader{display:flex;justify-content:center;align-items:center;line-height:unset}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader .skeleton-loader{margin-bottom:0}.table-container .table-wrapper table.main-table ::ng-deep thead{background:#f6f6f6!important}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #00000014}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #00000014}.table-container .header-section{display:flex;gap:4px;align-items:center}.table-container .header-section .column-title{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;max-width:fit-content;font-weight:700}.table-container.without-title table{border:unset!important}.table-container.disable-border-radius{border-radius:0!important}.table-container ::ng-deep .mat-mdc-paginator-container{padding:0 24px}.table-container[theme=dark] tr.selected,.table-container[theme=light] tr.selected{background:#f4f4f4!important}.table-container[theme=dark],.table-container[theme=light]{border-radius:10px}.table-container[theme=dark] .table-header,.table-container[theme=light] .table-header{padding:8px 24px;text-transform:none}.table-container[theme=dark] .table-wrapper table th,.table-container[theme=light] .table-wrapper table th{text-transform:none}.table-container[theme=dark] .table-wrapper table td,.table-container[theme=light] .table-wrapper table td{transition:border .3s}.table-container[theme=dark] .table-wrapper table tr.last-row td,.table-container[theme=light] .table-wrapper table tr.last-row td{--mat-table-row-item-outline-color: rgb(0, 0, 0, 0)}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-right,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #24242414!important}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-left,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #24242414!important}.table-container[theme=dark] .table-wrapper table ::ng-deep thead,.table-container[theme=light] .table-wrapper table ::ng-deep thead{background-color:#fff!important}.table-container[theme=dark] .table-wrapper table ::ng-deep :not(thead) tr:hover,.table-container[theme=light] .table-wrapper table ::ng-deep :not(thead) tr:hover{background-color:#fff2fc}.table-container ::ng-deep tr.detail-row{height:0}.table-container ::ng-deep tr.detail-row td{border:unset!important}.table-container ::ng-deep .mat-column-expandedDetail{padding:0!important}.table-container ::ng-deep .element-detail{overflow:hidden!important;display:flex!important}.table-container ::ng-deep .element-detail table{background-color:#fff;border-bottom:1px solid #d3d3d3;transition:border .3s}.table-container ::ng-deep .element-detail table.hide-borders{border-bottom:unset}.table-container ::ng-deep .element-detail table .mat-mdc-header-row{visibility:collapse}.table-container ::ng-deep .element-detail table .mat-mdc-cell{border-width:0}.table-container ::ng-deep .element-detail table td:first-child{padding-left:64px!important}table th.th-right{text-align:right}table th.th-right ::ng-deep .header-section{justify-content:end}table th.th-left{text-align:left}table th.th-left ::ng-deep .header-section{justify-content:start}table th.th-center{text-align:center}table th.th-center ::ng-deep .header-section{justify-content:center}table td.td-right{text-align:right}table td.td-right div{justify-content:end}table td.td-left{text-align:left}table td.td-left div{justify-content:start}table td.td-center{text-align:center}table td.td-center div{justify-content:center}::ng-deep table:not(.main-table) thead{display:none!important}ui-paginator{width:100%;display:flex;justify-content:flex-end;border-top:1px solid #d3d3d3}ui-paginator ::ng-deep .mat-mdc-paginator{width:100%}::ng-deep .mat-mdc-tooltip{background-color:#a9c2c9;font-family:Open Sans,serif;font-weight:400;font-size:12px;border-radius:4px;overflow:visible;max-width:248px;padding:6px 2px;--mdc-plain-tooltip-container-color: none;--mat-tooltip-container-color: none;--mdc-plain-tooltip-supporting-text-color: $tgo-black}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: SkeletonComponent, selector: "ui-skeleton", inputs: ["count", "theme", "appearance", "isAiTheme", "applicationTheme"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: DynamicComponentDirective, selector: "[dynamicComponent]", inputs: ["dynamicComponent"] }, { kind: "directive", type: MatNoDataRow, selector: "ng-template[matNoDataRow]" }, { kind: "component", type: PaginatorComponent, selector: "ui-paginator", inputs: ["pageSizeOptions", "length", "pageSize", "disabled", "applicationTheme", "currentPage", "testId", "ariaLabel"], outputs: ["paginatorChange"] }, { kind: "component", type: ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "trailingIconName", "trailingIconFilled", "disabled", "loading", "loadingWithLabel", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaExpanded", "ariaControls", "ariaPressed", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled", "testId"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }, { kind: "directive", type: EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "component", type: IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: DataPropertyGetterPipe, name: "dataPropertyGetter" }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "pipe", type: SentenceCasePipe, name: "sentencecase" }], animations: [
279
- trigger('expandDetail', [
280
- state('collapsed, void', style({ height: '0px' })),
281
- state('expanded', style({ height: '*' })),
282
- transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
283
- transition('expanded <=> void', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
284
- ]),
285
- ], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
286
- }
287
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: TableComponent, decorators: [{
288
- type: Component,
289
- args: [{ selector: 'ui-table', changeDetection: ChangeDetectionStrategy.OnPush, animations: [
290
- trigger('expandDetail', [
291
- state('collapsed, void', style({ height: '0px' })),
292
- state('expanded', style({ height: '*' })),
293
- transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
294
- transition('expanded <=> void', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
295
- ]),
296
- ], imports: [
297
- NgClass,
298
- MatTable,
299
- MatSort,
300
- MatColumnDef,
301
- MatHeaderCellDef,
302
- MatHeaderCell,
303
- MatSortHeader,
304
- NgStyle,
305
- NgTemplateOutlet,
306
- MatCellDef,
307
- MatCell,
308
- SkeletonComponent,
309
- MatHeaderRowDef,
310
- MatHeaderRow,
311
- MatRowDef,
312
- MatRow,
313
- DynamicComponentDirective,
314
- MatNoDataRow,
315
- PaginatorComponent,
316
- ButtonComponent,
317
- EllipseTextDirective,
318
- IconComponent,
319
- MatTooltip,
320
- AsyncPipe,
321
- UpperCasePipe,
322
- DataPropertyGetterPipe,
323
- MemoizeFuncPipe,
324
- SentenceCasePipe,
325
- ], template: "<div\n #tableContainer\n class=\"table-container\"\n [ngClass]=\"{ 'without-title': !tableConfig?.title, 'disable-border-radius': disableBorderRadius }\"\n [attr.theme]=\"applicationTheme\"\n>\n @if (tableConfig?.title) {\n <div class=\"table-header\">\n {{ tableConfig.title | sentencecase }}\n <ng-content select=\"[title-actions]\"></ng-content>\n </div>\n }\n @if (scrollSettings$ | async; as scrollSettings) {\n <div #table class=\"table-wrapper\" [class.sticky-header]=\"stickyHeader\" [style.--table-max-height]=\"maxHeight\">\n <table\n [attr.data-testid]=\"testId ?? 'table-main'\"\n [attr.aria-label]=\"ariaLabel || null\"\n [tabIndex]=\"0\"\n class=\"main-table\"\n [class.condensed]=\"isCondensed\"\n [class.sort-disabled]=\"loading\"\n mat-table\n [dataSource]=\"tableData\"\n matSort\n [matSortStart]=\"tableConfig?.sort?.defaultSortStart ?? 'asc'\"\n [matSortActive]=\"tableConfig?.sort?.active ?? ''\"\n [matSortDirection]=\"tableConfig?.sort?.direction ?? ''\"\n (matSortChange)=\"onSortChange($event)\"\n multiTemplateDataRows\n >\n @for (column of tableConfig.columns; track trackColumnUniqueId(i, column); let i = $index; let isLast = $last) {\n @if (isLast && column.isSticky && column.allowSort) {\n <ng-container [matColumnDef]=\"column.uniqueId ?? column.key\" [stickyEnd]=\"!scrollSettings?.scrollEnd\">\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (isLast && column.isSticky && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [stickyEnd]=\"scrollSettings.horizontalScroll ? !scrollSettings.scrollEnd : true\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{ width: column.styles?.width, minWidth: column.styles?.['min-width'] }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + column.styles?.alignment : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"column.styles?.alignment\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + column.styles?.alignment : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n }\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\n @if (dataSourceDetail.data.length) {\n <div class=\"element-detail\" [@expandDetail]=\"element === elementDetail ? 'expanded' : 'collapsed'\">\n <table\n data-testid=\"table-detail\"\n mat-table\n [dataSource]=\"dataSourceDetail\"\n [ngClass]=\"{ 'hide-borders': element === tableData[tableData.length - 1] }\"\n >\n @for (tableColumn of tableDetailColumns.columnDefs; track tableColumn) {\n <ng-container [matColumnDef]=\"tableColumn.title ?? ''\">\n <th\n mat-header-cell\n *matHeaderCellDef=\"let element\"\n arrowPosition=\"after\"\n [ngStyle]=\"{ width: tableColumn.styles?.width }\"\n [ngClass]=\"tableColumn.styles?.alignment ? 'th-' + tableColumn.styles?.alignment : ''\"\n >\n {{ tableColumn.title | uppercase }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n (click)=\"onDetailRowClick(element)\"\n [align]=\"tableColumn.styles?.alignment\"\n [ngClass]=\"tableColumn.styles?.alignment ? 'td-' + tableColumn.styles?.alignment : ''\"\n [ngStyle]=\"{ width: tableColumn.styles?.width }\"\n >\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn }\"\n ></ng-container>\n </td>\n </ng-container>\n }\n <tr mat-header-row *matHeaderRowDef=\"columnsDetailToDisplay\"></tr>\n <tr mat-row *matRowDef=\"let rowDetail; columns: columnsDetailToDisplay\"></tr>\n </table>\n </div>\n }\n </td>\n </ng-container>\n <ng-template #tableDataTpl let-element=\"element\" let-tableColumn=\"tableColumn\">\n <div class=\"align-wrapper\">\n @switch (tableColumn.type) {\n @case (DataType.FIELD) {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n @case (DataType.FUNCTION) {\n {{ tableColumn.function?.(element) }}\n }\n @case (DataType.RENDERER) {\n <ng-template [dynamicComponent]=\"$any([tableColumn.renderer, element] | memoizeFunc: callRenderer)\">\n </ng-template>\n }\n @default {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n }\n </div>\n </ng-template>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: stickyHeader\"\n [class.is-title-present]=\"tableConfig.title\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{\n 'expanded-row': elementDetail === row,\n 'row-clickable': tableDetails,\n selected: row?.selected,\n 'last-row': row === tableData[tableData.length - 1] && !elementDetail,\n }\"\n (click)=\"toggleRow(row)\"\n ></tr>\n @if (tableDetails && tableDetailColumns?.columnDefs?.length) {\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\"></tr>\n }\n @if (tableConfig.noDataRowTpl) {\n <tr *matNoDataRow>\n <ng-container *ngTemplateOutlet=\"tableConfig.noDataRowTpl\"></ng-container>\n </tr>\n }\n </table>\n </div>\n }\n\n @if (!tableConfig?.hidePagination && tableConfig?.pagination) {\n <ui-paginator\n [disabled]=\"loading\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n [pageSize]=\"tableConfig.pagination?.itemsPerPage ?? 25\"\n [length]=\"tableConfig.pagination?.totalItems ?? 0\"\n [currentPage]=\"tableConfig.pagination?.currentPage ?? 0\"\n [pageSizeOptions]=\"tableConfig.pagination?.itemsPerPageOptions ?? [10, 25, 50]\"\n (paginatorChange)=\"onPaginatorChange($event)\"\n ></ui-paginator>\n }\n</div>\n\n<ng-template #expandButton let-i=\"index\" let-element=\"element\">\n @if (!i && tableDetails) {\n <ui-button\n [applicationTheme]=\"applicationTheme\"\n variant=\"icon-button\"\n [ngClass]=\"{ opened: elementDetail && element === elementDetail }\"\n [iconName]=\"\n elementDetail && element === elementDetail ? 'Arrow-chevron-up-in-line' : 'Arrow-chevron-down-in-line'\n \"\n ></ui-button>\n }\n</ng-template>\n\n<ng-template #columnHeader let-column=\"column\" let-i=\"i\">\n <div class=\"header-section\">\n <span uiEllipseText (onChangeTextState)=\"onChangeColumnSize(i, $event)\" class=\"column-title\"\n >{{ column.title | sentencecase }}\n </span>\n @if (column?.showTooltip) {\n <ui-icon\n [name]=\"'Help-in-line'\"\n [matTooltipClass]=\"applicationTheme\"\n [matTooltip]=\"(column?.showTooltip ? (column?.tooltip ? column.tooltip : column.title) : '') || ''\"\n ></ui-icon>\n }\n </div>\n</ng-template>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap\";.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host-context(.without-table-border) .table-container{border:none}.flex-left,.table-container .table-header{display:flex;justify-content:flex-start;align-items:center}.table-container{--mat-table-background-color: #ffffff;overflow:hidden;border:1px #e0e0e0 solid;border-radius:8px}.table-container ::ng-deep .mat-sort-header-arrow{color:#000}.table-container .table-header{min-height:56px;padding:8px;background:#fff;line-height:24px;font-size:16px;font-weight:700;text-transform:uppercase;display:flex;justify-content:space-between}.table-container .table-wrapper{max-width:100%;overflow:auto}.table-container .table-wrapper.sticky-header{max-height:var(--table-max-height);overflow-y:auto}.table-container .table-wrapper table.main-table{width:100%;box-shadow:unset}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header{pointer-events:none;cursor:default}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header .mat-sort-header-container{cursor:default}.table-container .table-wrapper table.main-table ::ng-deep .mat-sort-header-arrow{margin-left:8px}.table-container .table-wrapper table.main-table .mdc-data-table__cell,.table-container .table-wrapper table.main-table .mdc-data-table__header-cell{padding:8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:not(:first-child):not(:last-child){padding:8px 12px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:first-child{padding:8px 12px 8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:last-child{padding:8px 24px 8px 12px}.table-container .table-wrapper table.main-table th{font-size:14px;line-height:16px;text-transform:uppercase}.table-container .table-wrapper table.main-table tr.is-title-present th.mat-mdc-header-cell.mdc-data-table__header-cell{border-top:1px solid #e0e0e0}.table-container .table-wrapper table.main-table td{font-size:14px;line-height:20px}.table-container .table-wrapper table.main-table td .row-value{display:flex;align-items:center;gap:16px}.table-container .table-wrapper table.main-table td .row-value ui-icon ::ng-deep mat-icon{transition:all .3s!important;font-size:24px}.table-container .table-wrapper table.main-table td .row-value ui-icon.opened ::ng-deep mat-icon{transform:rotate(180deg)}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader{display:flex;justify-content:center;align-items:center;line-height:unset}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader .skeleton-loader{margin-bottom:0}.table-container .table-wrapper table.main-table ::ng-deep thead{background:#f6f6f6!important}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #00000014}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #00000014}.table-container .header-section{display:flex;gap:4px;align-items:center}.table-container .header-section .column-title{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;max-width:fit-content;font-weight:700}.table-container.without-title table{border:unset!important}.table-container.disable-border-radius{border-radius:0!important}.table-container ::ng-deep .mat-mdc-paginator-container{padding:0 24px}.table-container[theme=dark] tr.selected,.table-container[theme=light] tr.selected{background:#f4f4f4!important}.table-container[theme=dark],.table-container[theme=light]{border-radius:10px}.table-container[theme=dark] .table-header,.table-container[theme=light] .table-header{padding:8px 24px;text-transform:none}.table-container[theme=dark] .table-wrapper table th,.table-container[theme=light] .table-wrapper table th{text-transform:none}.table-container[theme=dark] .table-wrapper table td,.table-container[theme=light] .table-wrapper table td{transition:border .3s}.table-container[theme=dark] .table-wrapper table tr.last-row td,.table-container[theme=light] .table-wrapper table tr.last-row td{--mat-table-row-item-outline-color: rgb(0, 0, 0, 0)}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-right,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #24242414!important}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-left,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #24242414!important}.table-container[theme=dark] .table-wrapper table ::ng-deep thead,.table-container[theme=light] .table-wrapper table ::ng-deep thead{background-color:#fff!important}.table-container[theme=dark] .table-wrapper table ::ng-deep :not(thead) tr:hover,.table-container[theme=light] .table-wrapper table ::ng-deep :not(thead) tr:hover{background-color:#fff2fc}.table-container ::ng-deep tr.detail-row{height:0}.table-container ::ng-deep tr.detail-row td{border:unset!important}.table-container ::ng-deep .mat-column-expandedDetail{padding:0!important}.table-container ::ng-deep .element-detail{overflow:hidden!important;display:flex!important}.table-container ::ng-deep .element-detail table{background-color:#fff;border-bottom:1px solid #d3d3d3;transition:border .3s}.table-container ::ng-deep .element-detail table.hide-borders{border-bottom:unset}.table-container ::ng-deep .element-detail table .mat-mdc-header-row{visibility:collapse}.table-container ::ng-deep .element-detail table .mat-mdc-cell{border-width:0}.table-container ::ng-deep .element-detail table td:first-child{padding-left:64px!important}table th.th-right{text-align:right}table th.th-right ::ng-deep .header-section{justify-content:end}table th.th-left{text-align:left}table th.th-left ::ng-deep .header-section{justify-content:start}table th.th-center{text-align:center}table th.th-center ::ng-deep .header-section{justify-content:center}table td.td-right{text-align:right}table td.td-right div{justify-content:end}table td.td-left{text-align:left}table td.td-left div{justify-content:start}table td.td-center{text-align:center}table td.td-center div{justify-content:center}::ng-deep table:not(.main-table) thead{display:none!important}ui-paginator{width:100%;display:flex;justify-content:flex-end;border-top:1px solid #d3d3d3}ui-paginator ::ng-deep .mat-mdc-paginator{width:100%}::ng-deep .mat-mdc-tooltip{background-color:#a9c2c9;font-family:Open Sans,serif;font-weight:400;font-size:12px;border-radius:4px;overflow:visible;max-width:248px;padding:6px 2px;--mdc-plain-tooltip-container-color: none;--mat-tooltip-container-color: none;--mdc-plain-tooltip-supporting-text-color: $tgo-black}\n"] }]
326
- }], ctorParameters: () => [{ type: undefined, decorators: [{
327
- type: Optional
328
- }, {
329
- type: Inject,
330
- args: ['CANOPYUI_DEFAULT_APPLICATION_THEME']
331
- }] }, { type: i0.DestroyRef }, { type: i1.Observable, decorators: [{
332
- type: Inject,
333
- args: [IS_MOBILE_TOKEN]
334
- }] }], propDecorators: { config: [{
335
- type: Input,
336
- args: [{ required: true }]
337
- }], data: [{
338
- type: Input
339
- }], loading: [{
340
- type: Input
341
- }], applicationTheme: [{
342
- type: Input
343
- }], tableDetailColumns: [{
344
- type: Input
345
- }], tableDetails: [{
346
- type: Input
347
- }], disableBorderRadius: [{
348
- type: Input
349
- }], isCondensed: [{
350
- type: Input
351
- }], stickyHeader: [{
352
- type: Input
353
- }], maxHeight: [{
354
- type: Input
355
- }], testId: [{
356
- type: Input
357
- }], ariaLabel: [{
358
- type: Input
359
- }], onRowClickEvent: [{
360
- type: Output
361
- }], onDetailRowClickEvent: [{
362
- type: Output
363
- }], paginatorChange: [{
364
- type: Output
365
- }], sortChange: [{
366
- type: Output
367
- }], table: [{
368
- type: ViewChild,
369
- args: ['table']
370
- }] } });
371
-
372
- class TableComponentModule {
373
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: TableComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
374
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: TableComponentModule, imports: [CommonModule,
375
- MatTableModule,
376
- MatTooltipModule,
377
- SkeletonComponent,
378
- PaginatorComponentModule,
379
- ButtonComponentModule,
380
- MatSortModule,
381
- IconComponentModule,
382
- EllipseTextDirective,
383
- DynamicComponentDirective,
384
- DataPropertyGetterPipe,
385
- MemoizeFuncPipe,
386
- TableComponent,
387
- SentenceCasePipe], exports: [TableComponent] }); }
388
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: TableComponentModule, imports: [CommonModule,
389
- MatTableModule,
390
- MatTooltipModule,
391
- SkeletonComponent,
392
- PaginatorComponentModule,
393
- ButtonComponentModule,
394
- MatSortModule,
395
- IconComponentModule,
396
- TableComponent] }); }
397
- }
398
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: TableComponentModule, decorators: [{
399
- type: NgModule,
400
- args: [{
401
- imports: [
402
- CommonModule,
403
- MatTableModule,
404
- MatTooltipModule,
405
- SkeletonComponent,
406
- PaginatorComponentModule,
407
- ButtonComponentModule,
408
- MatSortModule,
409
- IconComponentModule,
410
- EllipseTextDirective,
411
- DynamicComponentDirective,
412
- DataPropertyGetterPipe,
413
- MemoizeFuncPipe,
414
- TableComponent,
415
- SentenceCasePipe,
416
- ],
417
- exports: [TableComponent],
418
- }]
419
- }] });
420
-
421
- /**
422
- * Generated bundle index. Do not edit.
423
- */
424
-
90
+ var TableComponent = class TableComponent {
91
+ constructor(defaultAppTheme, destroyRef, isMobile$) {
92
+ this.defaultAppTheme = defaultAppTheme;
93
+ this.destroyRef = destroyRef;
94
+ this.isMobile$ = isMobile$;
95
+ this.loading = false;
96
+ this.applicationTheme = "light";
97
+ this.tableDetails = false;
98
+ this.disableBorderRadius = false;
99
+ this.isCondensed = false;
100
+ this.stickyHeader = false;
101
+ this.maxHeight = "576px";
102
+ this.testId = null;
103
+ this.ariaLabel = "";
104
+ this.onRowClickEvent = new EventEmitter();
105
+ this.onDetailRowClickEvent = new EventEmitter();
106
+ this.paginatorChange = new EventEmitter();
107
+ this.sortChange = new EventEmitter();
108
+ this.columnsTooltipState = [];
109
+ this.displayedColumns = [];
110
+ this.columnsDetailToDisplay = [];
111
+ this.skeletonStyleConfig = {
112
+ background: "#F6F6F6",
113
+ "border-radius": "4px",
114
+ height: "24px"
115
+ };
116
+ this.dataSourceDetail = new MatTableDataSource([]);
117
+ this.DataType = ColumnType;
118
+ this.scrollSettings$ = new BehaviorSubject({
119
+ scrollEnd: false,
120
+ horizontalScroll: false,
121
+ scrollStart: false
122
+ });
123
+ this.defaultPaginationConfig = {
124
+ currentPage: 0,
125
+ itemsPerPage: 10,
126
+ itemsPerPageOptions: [
127
+ 10,
128
+ 25,
129
+ 50
130
+ ],
131
+ totalItems: 20
132
+ };
133
+ this.trackColumnUniqueId = (index, column) => column.uniqueId ?? column.key;
134
+ if (defaultAppTheme) this.applicationTheme = defaultAppTheme;
135
+ }
136
+ ngOnInit() {
137
+ this.setTableConfig(this.config);
138
+ this.setTableData(this.data);
139
+ if (this.applicationTheme !== "classic") this.skeletonStyleConfig.background = "#F4F4F4";
140
+ document.body.setAttribute("theme", this.applicationTheme);
141
+ if (this.tableDetailColumns) {
142
+ const filteredColumns = this.tableDetailColumns.columnDefs.filter((column) => !column.hidden);
143
+ this.columnsDetailToDisplay = filteredColumns.length ? filteredColumns.map((tableColumn) => tableColumn.title ?? "") : [];
144
+ }
145
+ if (this.tableConfig?.sortable && this.tableConfig?.sort) this.onSortChange(this.tableConfig.sort, false);
146
+ }
147
+ ngAfterViewInit() {
148
+ this.hasTableScroll();
149
+ fromEvent(this.table.nativeElement, "scroll").pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => this.hasTableScroll());
150
+ }
151
+ ngOnChanges(changes) {
152
+ if (changes["config"]?.currentValue) {
153
+ const config = changes["config"].currentValue;
154
+ this.setTableConfig(config);
155
+ }
156
+ if (changes["data"]?.currentValue) this.setTableData(changes["data"].currentValue);
157
+ }
158
+ hasTableScroll() {
159
+ const table = this.table.nativeElement;
160
+ const horizontalScroll = table.scrollWidth > table.clientWidth;
161
+ const scrollEnd = table.scrollLeft + table.clientWidth >= table.scrollWidth;
162
+ this.scrollSettings$.next({
163
+ scrollStart: !table.scrollLeft,
164
+ scrollEnd,
165
+ horizontalScroll
166
+ });
167
+ }
168
+ callRenderer([rendererFn, element]) {
169
+ return rendererFn ? rendererFn(element) : void 0;
170
+ }
171
+ onPaginatorChange(event) {
172
+ this.paginatorChange.emit(event);
173
+ }
174
+ onChangeColumnSize(columnIndex, showTooltip) {
175
+ this.columnsTooltipState = this.columnsTooltipState.map((column) => {
176
+ if (column.index === columnIndex) column.showTooltip = showTooltip;
177
+ return column;
178
+ });
179
+ }
180
+ onSortChange(sortState, emitEvent = true) {
181
+ if (this.loading) return;
182
+ if (emitEvent) this.sortChange.emit(sortState);
183
+ if (this.tableConfig?.sortable) {
184
+ this.tableData = [...this.tableData.sort((a, b) => {
185
+ const isAsc = sortState.direction === "asc";
186
+ return (a[sortState.active] < b[sortState.active] ? -1 : 1) * (isAsc ? 1 : -1);
187
+ })];
188
+ if (!sortState.direction) this.tableData = [...this.sourceData];
189
+ }
190
+ }
191
+ onRowClick(rowParams, rowIndex) {
192
+ this.onRowClickEvent.emit({
193
+ ...rowParams,
194
+ index: rowIndex
195
+ });
196
+ }
197
+ onDetailRowClick(rowParams) {
198
+ this.onDetailRowClickEvent.emit(rowParams);
199
+ }
200
+ toggleRow(element) {
201
+ if (this.tableDetails) {
202
+ this.elementDetail = this.elementDetail === element ? null : element;
203
+ if (this.elementDetail) this.tableDetailColumns.setDetailRowData({
204
+ data: element,
205
+ setDetailDataSource: this.setTableDetailDataSource.bind(this)
206
+ });
207
+ }
208
+ }
209
+ setTableDetailDataSource(rowData) {
210
+ this.dataSourceDetail = new MatTableDataSource(rowData);
211
+ }
212
+ setTableConfig(config) {
213
+ config.pagination = config?.pagination ?? this.defaultPaginationConfig;
214
+ this.tableConfig = config;
215
+ this.columnsTooltipState = config.columns.map((column, index) => ({
216
+ index,
217
+ showTooltip: column.showTooltip ?? false
218
+ }));
219
+ this.displayedColumns = sortByOrder(config.columns.filter((column) => !column.hidden)).map((column) => column.uniqueId ?? column.key);
220
+ }
221
+ setTableData(data) {
222
+ this.sourceData = data;
223
+ this.tableData = data;
224
+ }
225
+ static {
226
+ this.ɵfac = i0.ɵɵngDeclareFactory({
227
+ minVersion: "12.0.0",
228
+ version: "22.2.4",
229
+ ngImport: i0,
230
+ type: TableComponent,
231
+ deps: [
232
+ {
233
+ token: "CANOPYUI_DEFAULT_APPLICATION_THEME",
234
+ optional: true
235
+ },
236
+ { token: i0.DestroyRef },
237
+ { token: IS_MOBILE_TOKEN }
238
+ ],
239
+ target: i0.ɵɵFactoryTarget.Component
240
+ });
241
+ }
242
+ static {
243
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
244
+ minVersion: "17.0.0",
245
+ version: "22.2.4",
246
+ type: TableComponent,
247
+ isStandalone: true,
248
+ selector: "ui-table",
249
+ inputs: {
250
+ config: "config",
251
+ data: "data",
252
+ loading: "loading",
253
+ applicationTheme: "applicationTheme",
254
+ tableDetailColumns: "tableDetailColumns",
255
+ tableDetails: "tableDetails",
256
+ disableBorderRadius: "disableBorderRadius",
257
+ isCondensed: "isCondensed",
258
+ stickyHeader: "stickyHeader",
259
+ maxHeight: "maxHeight",
260
+ testId: "testId",
261
+ ariaLabel: "ariaLabel"
262
+ },
263
+ outputs: {
264
+ onRowClickEvent: "onRowClickEvent",
265
+ onDetailRowClickEvent: "onDetailRowClickEvent",
266
+ paginatorChange: "paginatorChange",
267
+ sortChange: "sortChange"
268
+ },
269
+ viewQueries: [{
270
+ propertyName: "table",
271
+ first: true,
272
+ predicate: ["table"],
273
+ descendants: true
274
+ }],
275
+ usesOnChanges: true,
276
+ ngImport: i0,
277
+ template: "<div\n #tableContainer\n class=\"table-container\"\n [ngClass]=\"{ 'without-title': !tableConfig?.title, 'disable-border-radius': disableBorderRadius }\"\n [attr.theme]=\"applicationTheme\"\n>\n @if (tableConfig?.title) {\n <div class=\"table-header\">\n {{ tableConfig.title | sentencecase }}\n <ng-content select=\"[title-actions]\"></ng-content>\n </div>\n }\n @if (scrollSettings$ | async; as scrollSettings) {\n <div #table class=\"table-wrapper\" [class.sticky-header]=\"stickyHeader\" [style.--table-max-height]=\"maxHeight\">\n <table\n [attr.data-testid]=\"testId ?? 'table-main'\"\n [attr.aria-label]=\"ariaLabel || null\"\n [tabIndex]=\"0\"\n class=\"main-table\"\n [class.condensed]=\"isCondensed\"\n [class.sort-disabled]=\"loading\"\n mat-table\n [dataSource]=\"tableData\"\n matSort\n [matSortStart]=\"tableConfig?.sort?.defaultSortStart ?? 'asc'\"\n [matSortActive]=\"tableConfig?.sort?.active ?? ''\"\n [matSortDirection]=\"tableConfig?.sort?.direction ?? ''\"\n (matSortChange)=\"onSortChange($event)\"\n multiTemplateDataRows\n >\n @for (column of tableConfig.columns; track trackColumnUniqueId(i, column); let i = $index; let isLast = $last) {\n @if (isLast && column.isSticky && column.allowSort) {\n <ng-container [matColumnDef]=\"column.uniqueId ?? column.key\" [stickyEnd]=\"!scrollSettings?.scrollEnd\">\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (isLast && column.isSticky && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [stickyEnd]=\"scrollSettings.horizontalScroll ? !scrollSettings.scrollEnd : true\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n }\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\n @if (dataSourceDetail.data.length) {\n <div class=\"element-detail\" [@expandDetail]=\"element === elementDetail ? 'expanded' : 'collapsed'\">\n <table\n data-testid=\"table-detail\"\n mat-table\n [dataSource]=\"dataSourceDetail\"\n [ngClass]=\"{ 'hide-borders': element === tableData[tableData.length - 1] }\"\n >\n @for (tableColumn of tableDetailColumns.columnDefs; track tableColumn) {\n <ng-container [matColumnDef]=\"tableColumn.title ?? ''\">\n <th\n mat-header-cell\n *matHeaderCellDef=\"let element\"\n arrowPosition=\"after\"\n [ngStyle]=\"{ width: $safeNavigationMigration(tableColumn.styles?.width) }\"\n [ngClass]=\"\n tableColumn.styles?.alignment\n ? 'th-' + $safeNavigationMigration(tableColumn.styles?.alignment)\n : ''\n \"\n >\n {{ tableColumn.title | uppercase }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n (click)=\"onDetailRowClick(element)\"\n [align]=\"$safeNavigationMigration(tableColumn.styles?.alignment)\"\n [ngClass]=\"\n tableColumn.styles?.alignment\n ? 'td-' + $safeNavigationMigration(tableColumn.styles?.alignment)\n : ''\n \"\n [ngStyle]=\"{ width: $safeNavigationMigration(tableColumn.styles?.width) }\"\n >\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn }\"\n ></ng-container>\n </td>\n </ng-container>\n }\n <tr mat-header-row *matHeaderRowDef=\"columnsDetailToDisplay\"></tr>\n <tr mat-row *matRowDef=\"let rowDetail; columns: columnsDetailToDisplay\"></tr>\n </table>\n </div>\n }\n </td>\n </ng-container>\n <ng-template #tableDataTpl let-element=\"element\" let-tableColumn=\"tableColumn\">\n <div class=\"align-wrapper\">\n @switch (tableColumn.type) {\n @case (DataType.FIELD) {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n @case (DataType.FUNCTION) {\n {{ tableColumn.function?.(element) }}\n }\n @case (DataType.RENDERER) {\n <ng-template [dynamicComponent]=\"$any([tableColumn.renderer, element] | memoizeFunc: callRenderer)\">\n </ng-template>\n }\n @default {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n }\n </div>\n </ng-template>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: stickyHeader\"\n [class.is-title-present]=\"tableConfig.title\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{\n 'expanded-row': elementDetail === row,\n 'row-clickable': tableDetails,\n selected: $safeNavigationMigration(row?.selected),\n 'last-row': row === tableData[tableData.length - 1] && !elementDetail,\n }\"\n (click)=\"toggleRow(row)\"\n ></tr>\n @if (tableDetails && tableDetailColumns?.columnDefs?.length) {\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\"></tr>\n }\n @if (tableConfig.noDataRowTpl) {\n <tr *matNoDataRow>\n <ng-container *ngTemplateOutlet=\"tableConfig.noDataRowTpl\"></ng-container>\n </tr>\n }\n </table>\n </div>\n }\n\n @if (!tableConfig?.hidePagination && tableConfig?.pagination) {\n <ui-paginator\n [disabled]=\"loading\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n [pageSize]=\"tableConfig.pagination?.itemsPerPage ?? 25\"\n [length]=\"tableConfig.pagination?.totalItems ?? 0\"\n [currentPage]=\"tableConfig.pagination?.currentPage ?? 0\"\n [pageSizeOptions]=\"tableConfig.pagination?.itemsPerPageOptions ?? [10, 25, 50]\"\n (paginatorChange)=\"onPaginatorChange($event)\"\n ></ui-paginator>\n }\n</div>\n\n<ng-template #expandButton let-i=\"index\" let-element=\"element\">\n @if (!i && tableDetails) {\n <ui-button\n [applicationTheme]=\"applicationTheme\"\n variant=\"icon-button\"\n [ngClass]=\"{ opened: elementDetail && element === elementDetail }\"\n [iconName]=\"\n elementDetail && element === elementDetail ? 'Arrow-chevron-up-in-line' : 'Arrow-chevron-down-in-line'\n \"\n ></ui-button>\n }\n</ng-template>\n\n<ng-template #columnHeader let-column=\"column\" let-i=\"i\">\n <div class=\"header-section\">\n <span uiEllipseText (onChangeTextState)=\"onChangeColumnSize(i, $event)\" class=\"column-title\"\n >{{ column.title | sentencecase }}\n </span>\n @if (column?.showTooltip) {\n <ui-icon\n [name]=\"'Help-in-line'\"\n [matTooltipClass]=\"applicationTheme\"\n [matTooltip]=\"(column?.showTooltip ? (column?.tooltip ? column.tooltip : column.title) : '') || ''\"\n ></ui-icon>\n }\n </div>\n</ng-template>\n",
278
+ styles: ["@import\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap\";.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host-context(.without-table-border) .table-container{border:none}.flex-left,.table-container .table-header{display:flex;justify-content:flex-start;align-items:center}.table-container{--mat-table-background-color: #ffffff;overflow:hidden;border:1px #e0e0e0 solid;border-radius:8px}.table-container ::ng-deep .mat-sort-header-arrow{color:#000}.table-container .table-header{min-height:56px;padding:8px;background:#fff;line-height:24px;font-size:16px;font-weight:700;text-transform:uppercase;display:flex;justify-content:space-between}.table-container .table-wrapper{max-width:100%;overflow:auto}.table-container .table-wrapper.sticky-header{max-height:var(--table-max-height);overflow-y:auto}.table-container .table-wrapper table.main-table{width:100%;box-shadow:unset}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header{pointer-events:none;cursor:default}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header .mat-sort-header-container{cursor:default}.table-container .table-wrapper table.main-table ::ng-deep .mat-sort-header-arrow{margin-left:8px}.table-container .table-wrapper table.main-table .mdc-data-table__cell,.table-container .table-wrapper table.main-table .mdc-data-table__header-cell{padding:8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:not(:first-child):not(:last-child){padding:8px 12px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:first-child{padding:8px 12px 8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:last-child{padding:8px 24px 8px 12px}.table-container .table-wrapper table.main-table th{font-size:14px;line-height:16px;text-transform:uppercase}.table-container .table-wrapper table.main-table tr.is-title-present th.mat-mdc-header-cell.mdc-data-table__header-cell{border-top:1px solid #e0e0e0}.table-container .table-wrapper table.main-table td{font-size:14px;line-height:20px}.table-container .table-wrapper table.main-table td .row-value{display:flex;align-items:center;gap:16px}.table-container .table-wrapper table.main-table td .row-value ui-icon ::ng-deep mat-icon{transition:all .3s!important;font-size:24px}.table-container .table-wrapper table.main-table td .row-value ui-icon.opened ::ng-deep mat-icon{transform:rotate(180deg)}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader{display:flex;justify-content:center;align-items:center;line-height:unset}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader .skeleton-loader{margin-bottom:0}.table-container .table-wrapper table.main-table ::ng-deep thead{background:#f6f6f6!important}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #00000014}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #00000014}.table-container .header-section{display:flex;gap:4px;align-items:center}.table-container .header-section .column-title{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;max-width:fit-content;font-weight:700}.table-container.without-title table{border:unset!important}.table-container.disable-border-radius{border-radius:0!important}.table-container ::ng-deep .mat-mdc-paginator-container{padding:0 24px}.table-container[theme=dark] tr.selected,.table-container[theme=light] tr.selected{background:#f4f4f4!important}.table-container[theme=dark],.table-container[theme=light]{border-radius:10px}.table-container[theme=dark] .table-header,.table-container[theme=light] .table-header{padding:8px 24px;text-transform:none}.table-container[theme=dark] .table-wrapper table th,.table-container[theme=light] .table-wrapper table th{text-transform:none}.table-container[theme=dark] .table-wrapper table td,.table-container[theme=light] .table-wrapper table td{transition:border .3s}.table-container[theme=dark] .table-wrapper table tr.last-row td,.table-container[theme=light] .table-wrapper table tr.last-row td{--mat-table-row-item-outline-color: rgb(0, 0, 0, 0)}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-right,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #24242414!important}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-left,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #24242414!important}.table-container[theme=dark] .table-wrapper table ::ng-deep thead,.table-container[theme=light] .table-wrapper table ::ng-deep thead{background-color:#fff!important}.table-container[theme=dark] .table-wrapper table ::ng-deep :not(thead) tr:hover,.table-container[theme=light] .table-wrapper table ::ng-deep :not(thead) tr:hover{background-color:#fff2fc}.table-container ::ng-deep tr.detail-row{height:0}.table-container ::ng-deep tr.detail-row td{border:unset!important}.table-container ::ng-deep .mat-column-expandedDetail{padding:0!important}.table-container ::ng-deep .element-detail{overflow:hidden!important;display:flex!important}.table-container ::ng-deep .element-detail table{background-color:#fff;border-bottom:1px solid #d3d3d3;transition:border .3s}.table-container ::ng-deep .element-detail table.hide-borders{border-bottom:unset}.table-container ::ng-deep .element-detail table .mat-mdc-header-row{visibility:collapse}.table-container ::ng-deep .element-detail table .mat-mdc-cell{border-width:0}.table-container ::ng-deep .element-detail table td:first-child{padding-left:64px!important}table th.th-right{text-align:right}table th.th-right ::ng-deep .header-section{justify-content:end}table th.th-left{text-align:left}table th.th-left ::ng-deep .header-section{justify-content:start}table th.th-center{text-align:center}table th.th-center ::ng-deep .header-section{justify-content:center}table td.td-right{text-align:right}table td.td-right div{justify-content:end}table td.td-left{text-align:left}table td.td-left div{justify-content:start}table td.td-center{text-align:center}table td.td-center div{justify-content:center}::ng-deep table:not(.main-table) thead{display:none!important}ui-paginator{width:100%;display:flex;justify-content:flex-end;border-top:1px solid #d3d3d3}ui-paginator ::ng-deep .mat-mdc-paginator{width:100%}::ng-deep .mat-mdc-tooltip{background-color:#a9c2c9;font-family:Open Sans,serif;font-weight:400;font-size:12px;border-radius:4px;overflow:visible;max-width:248px;padding:6px 2px;--mdc-plain-tooltip-container-color: none;--mat-tooltip-container-color: none;--mdc-plain-tooltip-supporting-text-color: $tgo-black}\n"],
279
+ dependencies: [
280
+ {
281
+ kind: "directive",
282
+ type: NgClass,
283
+ selector: "[ngClass]",
284
+ inputs: ["class", "ngClass"]
285
+ },
286
+ {
287
+ kind: "component",
288
+ type: MatTable,
289
+ selector: "mat-table, table[mat-table]",
290
+ exportAs: ["matTable"]
291
+ },
292
+ {
293
+ kind: "directive",
294
+ type: MatSort,
295
+ selector: "[matSort]",
296
+ inputs: [
297
+ "matSortActive",
298
+ "matSortStart",
299
+ "matSortDirection",
300
+ "matSortDisableClear",
301
+ "matSortDisabled"
302
+ ],
303
+ outputs: ["matSortChange"],
304
+ exportAs: ["matSort"]
305
+ },
306
+ {
307
+ kind: "directive",
308
+ type: MatColumnDef,
309
+ selector: "[matColumnDef]",
310
+ inputs: ["matColumnDef"]
311
+ },
312
+ {
313
+ kind: "directive",
314
+ type: MatHeaderCellDef,
315
+ selector: "[matHeaderCellDef]"
316
+ },
317
+ {
318
+ kind: "directive",
319
+ type: MatHeaderCell,
320
+ selector: "mat-header-cell, th[mat-header-cell]"
321
+ },
322
+ {
323
+ kind: "component",
324
+ type: MatSortHeader,
325
+ selector: "[mat-sort-header]",
326
+ inputs: [
327
+ "mat-sort-header",
328
+ "arrowPosition",
329
+ "start",
330
+ "disabled",
331
+ "sortActionDescription",
332
+ "disableClear"
333
+ ],
334
+ exportAs: ["matSortHeader"]
335
+ },
336
+ {
337
+ kind: "directive",
338
+ type: NgStyle,
339
+ selector: "[ngStyle]",
340
+ inputs: ["ngStyle"]
341
+ },
342
+ {
343
+ kind: "directive",
344
+ type: NgTemplateOutlet,
345
+ selector: "[ngTemplateOutlet]",
346
+ inputs: [
347
+ "ngTemplateOutletContext",
348
+ "ngTemplateOutlet",
349
+ "ngTemplateOutletInjector"
350
+ ]
351
+ },
352
+ {
353
+ kind: "directive",
354
+ type: MatCellDef,
355
+ selector: "[matCellDef]"
356
+ },
357
+ {
358
+ kind: "directive",
359
+ type: MatCell,
360
+ selector: "mat-cell, td[mat-cell]"
361
+ },
362
+ {
363
+ kind: "component",
364
+ type: SkeletonComponent,
365
+ selector: "ui-skeleton",
366
+ inputs: [
367
+ "count",
368
+ "theme",
369
+ "appearance",
370
+ "isAiTheme",
371
+ "applicationTheme"
372
+ ]
373
+ },
374
+ {
375
+ kind: "directive",
376
+ type: MatHeaderRowDef,
377
+ selector: "[matHeaderRowDef]",
378
+ inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"]
379
+ },
380
+ {
381
+ kind: "component",
382
+ type: MatHeaderRow,
383
+ selector: "mat-header-row, tr[mat-header-row]",
384
+ exportAs: ["matHeaderRow"]
385
+ },
386
+ {
387
+ kind: "directive",
388
+ type: MatRowDef,
389
+ selector: "[matRowDef]",
390
+ inputs: ["matRowDefColumns", "matRowDefWhen"]
391
+ },
392
+ {
393
+ kind: "component",
394
+ type: MatRow,
395
+ selector: "mat-row, tr[mat-row]",
396
+ exportAs: ["matRow"]
397
+ },
398
+ {
399
+ kind: "directive",
400
+ type: DynamicComponentDirective,
401
+ selector: "[dynamicComponent]",
402
+ inputs: ["dynamicComponent"]
403
+ },
404
+ {
405
+ kind: "directive",
406
+ type: MatNoDataRow,
407
+ selector: "ng-template[matNoDataRow]"
408
+ },
409
+ {
410
+ kind: "component",
411
+ type: PaginatorComponent,
412
+ selector: "ui-paginator",
413
+ inputs: [
414
+ "pageSizeOptions",
415
+ "length",
416
+ "pageSize",
417
+ "disabled",
418
+ "applicationTheme",
419
+ "currentPage",
420
+ "testId",
421
+ "ariaLabel"
422
+ ],
423
+ outputs: ["paginatorChange"]
424
+ },
425
+ {
426
+ kind: "component",
427
+ type: ButtonComponent,
428
+ selector: "ui-button",
429
+ inputs: [
430
+ "size",
431
+ "variant",
432
+ "label",
433
+ "iconPosition",
434
+ "justIcon",
435
+ "iconName",
436
+ "trailingIconName",
437
+ "trailingIconFilled",
438
+ "disabled",
439
+ "loading",
440
+ "loadingWithLabel",
441
+ "fullWidth",
442
+ "url",
443
+ "urlTarget",
444
+ "value",
445
+ "tooltip",
446
+ "isPremium",
447
+ "type",
448
+ "companyColor",
449
+ "buttonBadgeConfig",
450
+ "applicationTheme",
451
+ "disabledScaleOnClick",
452
+ "ariaLabel",
453
+ "ariaExpanded",
454
+ "ariaControls",
455
+ "ariaPressed",
456
+ "ariaRequired",
457
+ "ariaLabelledby",
458
+ "ariaDescribedby",
459
+ "preventDefault",
460
+ "hasBackground",
461
+ "tooltipPosition",
462
+ "role",
463
+ "iconFilled",
464
+ "testId"
465
+ ],
466
+ outputs: ["buttonClickEvent", "buttonHoverEvent"]
467
+ },
468
+ {
469
+ kind: "directive",
470
+ type: EllipseTextDirective,
471
+ selector: "[uiEllipseText]",
472
+ inputs: [
473
+ "isMultiline",
474
+ "maxDiffPixels",
475
+ "refresh"
476
+ ],
477
+ outputs: ["onChangeTextState"]
478
+ },
479
+ {
480
+ kind: "component",
481
+ type: IconComponent,
482
+ selector: "ui-icon",
483
+ inputs: [
484
+ "size",
485
+ "cssClass",
486
+ "name",
487
+ "color",
488
+ "filled",
489
+ "toggleIconStyle",
490
+ "applicationTheme",
491
+ "useFullIconName"
492
+ ]
493
+ },
494
+ {
495
+ kind: "directive",
496
+ type: MatTooltip,
497
+ selector: "[matTooltip]",
498
+ inputs: [
499
+ "matTooltipPosition",
500
+ "matTooltipPositionAtOrigin",
501
+ "matTooltipDisabled",
502
+ "matTooltipShowDelay",
503
+ "matTooltipHideDelay",
504
+ "matTooltipTouchGestures",
505
+ "matTooltip",
506
+ "matTooltipClass"
507
+ ],
508
+ exportAs: ["matTooltip"]
509
+ },
510
+ {
511
+ kind: "pipe",
512
+ type: AsyncPipe,
513
+ name: "async"
514
+ },
515
+ {
516
+ kind: "pipe",
517
+ type: UpperCasePipe,
518
+ name: "uppercase"
519
+ },
520
+ {
521
+ kind: "pipe",
522
+ type: DataPropertyGetterPipe,
523
+ name: "dataPropertyGetter"
524
+ },
525
+ {
526
+ kind: "pipe",
527
+ type: MemoizeFuncPipe,
528
+ name: "memoizeFunc"
529
+ },
530
+ {
531
+ kind: "pipe",
532
+ type: SentenceCasePipe,
533
+ name: "sentencecase"
534
+ }
535
+ ],
536
+ animations: [trigger("expandDetail", [
537
+ state("collapsed, void", style({ height: "0px" })),
538
+ state("expanded", style({ height: "*" })),
539
+ transition("expanded <=> collapsed", animate("225ms cubic-bezier(0.4, 0.0, 0.2, 1)")),
540
+ transition("expanded <=> void", animate("225ms cubic-bezier(0.4, 0.0, 0.2, 1)"))
541
+ ])],
542
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
543
+ });
544
+ }
545
+ };
546
+ i0.ɵɵngDeclareClassMetadata({
547
+ minVersion: "12.0.0",
548
+ version: "22.2.4",
549
+ ngImport: i0,
550
+ type: TableComponent,
551
+ decorators: [{
552
+ type: Component,
553
+ args: [{
554
+ selector: "ui-table",
555
+ changeDetection: ChangeDetectionStrategy.OnPush,
556
+ animations: [trigger("expandDetail", [
557
+ state("collapsed, void", style({ height: "0px" })),
558
+ state("expanded", style({ height: "*" })),
559
+ transition("expanded <=> collapsed", animate("225ms cubic-bezier(0.4, 0.0, 0.2, 1)")),
560
+ transition("expanded <=> void", animate("225ms cubic-bezier(0.4, 0.0, 0.2, 1)"))
561
+ ])],
562
+ imports: [
563
+ NgClass,
564
+ MatTable,
565
+ MatSort,
566
+ MatColumnDef,
567
+ MatHeaderCellDef,
568
+ MatHeaderCell,
569
+ MatSortHeader,
570
+ NgStyle,
571
+ NgTemplateOutlet,
572
+ MatCellDef,
573
+ MatCell,
574
+ SkeletonComponent,
575
+ MatHeaderRowDef,
576
+ MatHeaderRow,
577
+ MatRowDef,
578
+ MatRow,
579
+ DynamicComponentDirective,
580
+ MatNoDataRow,
581
+ PaginatorComponent,
582
+ ButtonComponent,
583
+ EllipseTextDirective,
584
+ IconComponent,
585
+ MatTooltip,
586
+ AsyncPipe,
587
+ UpperCasePipe,
588
+ DataPropertyGetterPipe,
589
+ MemoizeFuncPipe,
590
+ SentenceCasePipe
591
+ ],
592
+ template: "<div\n #tableContainer\n class=\"table-container\"\n [ngClass]=\"{ 'without-title': !tableConfig?.title, 'disable-border-radius': disableBorderRadius }\"\n [attr.theme]=\"applicationTheme\"\n>\n @if (tableConfig?.title) {\n <div class=\"table-header\">\n {{ tableConfig.title | sentencecase }}\n <ng-content select=\"[title-actions]\"></ng-content>\n </div>\n }\n @if (scrollSettings$ | async; as scrollSettings) {\n <div #table class=\"table-wrapper\" [class.sticky-header]=\"stickyHeader\" [style.--table-max-height]=\"maxHeight\">\n <table\n [attr.data-testid]=\"testId ?? 'table-main'\"\n [attr.aria-label]=\"ariaLabel || null\"\n [tabIndex]=\"0\"\n class=\"main-table\"\n [class.condensed]=\"isCondensed\"\n [class.sort-disabled]=\"loading\"\n mat-table\n [dataSource]=\"tableData\"\n matSort\n [matSortStart]=\"tableConfig?.sort?.defaultSortStart ?? 'asc'\"\n [matSortActive]=\"tableConfig?.sort?.active ?? ''\"\n [matSortDirection]=\"tableConfig?.sort?.direction ?? ''\"\n (matSortChange)=\"onSortChange($event)\"\n multiTemplateDataRows\n >\n @for (column of tableConfig.columns; track trackColumnUniqueId(i, column); let i = $index; let isLast = $last) {\n @if (isLast && column.isSticky && column.allowSort) {\n <ng-container [matColumnDef]=\"column.uniqueId ?? column.key\" [stickyEnd]=\"!scrollSettings?.scrollEnd\">\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (isLast && column.isSticky && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [stickyEnd]=\"scrollSettings.horizontalScroll ? !scrollSettings.scrollEnd : true\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n [attr.sortable]=\"column.allowSort ?? false\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n [style.font-weight]=\"'bold'\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [start]=\"column.sortStart ?? 'asc'\"\n [mat-sort-header]=\"column.sortHeader ?? column.key\"\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n @if (!(isLast && column.isSticky) && !column.allowSort) {\n <ng-container\n [matColumnDef]=\"column.uniqueId ?? column.key\"\n [sticky]=\"(isMobile$ | async) ? false : !scrollSettings.scrollStart && !!column.isSticky\"\n >\n <th\n mat-header-cell\n [attr.sortable]=\"column.allowSort ?? false\"\n *matHeaderCellDef\n [style.font-weight]=\"'bold'\"\n [ngStyle]=\"{\n width: $safeNavigationMigration(column.styles?.width),\n minWidth: $safeNavigationMigration(column.styles?.['min-width']),\n }\"\n [ngClass]=\"column.styles?.alignment ? 'th-' + $safeNavigationMigration(column.styles?.alignment) : ''\"\n >\n @if (column.headerCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"\n column.headerCellTemplate;\n context: { $implicit: column.title, column, colIndex: i }\n \"\n ></ng-container>\n } @else {\n <ng-container\n [ngTemplateOutlet]=\"columnHeader\"\n [ngTemplateOutletContext]=\"{ i, column }\"\n ></ng-container>\n }\n </th>\n <td\n mat-cell\n *matCellDef=\"let element; let rowIndex = dataIndex\"\n [align]=\"$safeNavigationMigration(column.styles?.alignment)\"\n [ngClass]=\"[column.styles?.alignment ? 'td-' + $safeNavigationMigration(column.styles?.alignment) : '']\"\n (click)=\"\n onRowClick(element, rowIndex); column?.rowCellTemplateClick ? column!.rowCellTemplateClick?.() : ''\n \"\n >\n @if (loading) {\n <ui-skeleton\n class=\"table-skeleton-loader\"\n [count]=\"1\"\n [theme]=\"skeletonStyleConfig\"\n [appearance]=\"'line'\"\n ></ui-skeleton>\n } @else {\n <div class=\"row-value\">\n <ng-container\n [ngTemplateOutlet]=\"expandButton\"\n [ngTemplateOutletContext]=\"{ index: i, element }\"\n ></ng-container>\n @if (column?.type) {\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn: column }\"\n ></ng-container>\n } @else {\n @if (column.rowCellTemplate) {\n <ng-container\n *ngTemplateOutlet=\"column.rowCellTemplate; context: { $implicit: element, rowIndex }\"\n ></ng-container>\n } @else {\n <span\n [style.font-weight]=\"column.bold ? 'bold' : 'normal'\"\n [style.font-size]=\"column.fontSize ?? '14px'\"\n >{{ element | dataPropertyGetter: column.key }}</span\n >\n }\n }\n </div>\n }\n </td>\n </ng-container>\n }\n }\n <ng-container matColumnDef=\"expandedDetail\">\n <td mat-cell *matCellDef=\"let element\" [attr.colspan]=\"displayedColumns.length\">\n @if (dataSourceDetail.data.length) {\n <div class=\"element-detail\" [@expandDetail]=\"element === elementDetail ? 'expanded' : 'collapsed'\">\n <table\n data-testid=\"table-detail\"\n mat-table\n [dataSource]=\"dataSourceDetail\"\n [ngClass]=\"{ 'hide-borders': element === tableData[tableData.length - 1] }\"\n >\n @for (tableColumn of tableDetailColumns.columnDefs; track tableColumn) {\n <ng-container [matColumnDef]=\"tableColumn.title ?? ''\">\n <th\n mat-header-cell\n *matHeaderCellDef=\"let element\"\n arrowPosition=\"after\"\n [ngStyle]=\"{ width: $safeNavigationMigration(tableColumn.styles?.width) }\"\n [ngClass]=\"\n tableColumn.styles?.alignment\n ? 'th-' + $safeNavigationMigration(tableColumn.styles?.alignment)\n : ''\n \"\n >\n {{ tableColumn.title | uppercase }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n (click)=\"onDetailRowClick(element)\"\n [align]=\"$safeNavigationMigration(tableColumn.styles?.alignment)\"\n [ngClass]=\"\n tableColumn.styles?.alignment\n ? 'td-' + $safeNavigationMigration(tableColumn.styles?.alignment)\n : ''\n \"\n [ngStyle]=\"{ width: $safeNavigationMigration(tableColumn.styles?.width) }\"\n >\n <ng-container\n *ngTemplateOutlet=\"tableDataTpl; context: { element, tableColumn }\"\n ></ng-container>\n </td>\n </ng-container>\n }\n <tr mat-header-row *matHeaderRowDef=\"columnsDetailToDisplay\"></tr>\n <tr mat-row *matRowDef=\"let rowDetail; columns: columnsDetailToDisplay\"></tr>\n </table>\n </div>\n }\n </td>\n </ng-container>\n <ng-template #tableDataTpl let-element=\"element\" let-tableColumn=\"tableColumn\">\n <div class=\"align-wrapper\">\n @switch (tableColumn.type) {\n @case (DataType.FIELD) {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n @case (DataType.FUNCTION) {\n {{ tableColumn.function?.(element) }}\n }\n @case (DataType.RENDERER) {\n <ng-template [dynamicComponent]=\"$any([tableColumn.renderer, element] | memoizeFunc: callRenderer)\">\n </ng-template>\n }\n @default {\n {{ element | dataPropertyGetter: tableColumn.key }}\n }\n }\n </div>\n </ng-template>\n <tr\n mat-header-row\n *matHeaderRowDef=\"displayedColumns; sticky: stickyHeader\"\n [class.is-title-present]=\"tableConfig.title\"\n ></tr>\n <tr\n mat-row\n *matRowDef=\"let row; columns: displayedColumns\"\n [ngClass]=\"{\n 'expanded-row': elementDetail === row,\n 'row-clickable': tableDetails,\n selected: $safeNavigationMigration(row?.selected),\n 'last-row': row === tableData[tableData.length - 1] && !elementDetail,\n }\"\n (click)=\"toggleRow(row)\"\n ></tr>\n @if (tableDetails && tableDetailColumns?.columnDefs?.length) {\n <tr mat-row *matRowDef=\"let row; columns: ['expandedDetail']\" class=\"detail-row\"></tr>\n }\n @if (tableConfig.noDataRowTpl) {\n <tr *matNoDataRow>\n <ng-container *ngTemplateOutlet=\"tableConfig.noDataRowTpl\"></ng-container>\n </tr>\n }\n </table>\n </div>\n }\n\n @if (!tableConfig?.hidePagination && tableConfig?.pagination) {\n <ui-paginator\n [disabled]=\"loading\"\n [applicationTheme]=\"applicationTheme !== 'classic' ? 'light' : 'classic'\"\n [pageSize]=\"tableConfig.pagination?.itemsPerPage ?? 25\"\n [length]=\"tableConfig.pagination?.totalItems ?? 0\"\n [currentPage]=\"tableConfig.pagination?.currentPage ?? 0\"\n [pageSizeOptions]=\"tableConfig.pagination?.itemsPerPageOptions ?? [10, 25, 50]\"\n (paginatorChange)=\"onPaginatorChange($event)\"\n ></ui-paginator>\n }\n</div>\n\n<ng-template #expandButton let-i=\"index\" let-element=\"element\">\n @if (!i && tableDetails) {\n <ui-button\n [applicationTheme]=\"applicationTheme\"\n variant=\"icon-button\"\n [ngClass]=\"{ opened: elementDetail && element === elementDetail }\"\n [iconName]=\"\n elementDetail && element === elementDetail ? 'Arrow-chevron-up-in-line' : 'Arrow-chevron-down-in-line'\n \"\n ></ui-button>\n }\n</ng-template>\n\n<ng-template #columnHeader let-column=\"column\" let-i=\"i\">\n <div class=\"header-section\">\n <span uiEllipseText (onChangeTextState)=\"onChangeColumnSize(i, $event)\" class=\"column-title\"\n >{{ column.title | sentencecase }}\n </span>\n @if (column?.showTooltip) {\n <ui-icon\n [name]=\"'Help-in-line'\"\n [matTooltipClass]=\"applicationTheme\"\n [matTooltip]=\"(column?.showTooltip ? (column?.tooltip ? column.tooltip : column.title) : '') || ''\"\n ></ui-icon>\n }\n </div>\n</ng-template>\n",
593
+ styles: ["@import\"https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&display=swap\";.bg-teal-60b{background:#1c443c}.bg-teal-30b{background:#31766a}.bg-teal-default{background:#46a997}.bg-teal-30w{background:#7ec3b6}.bg-teal-60w{background:#b5ddd5}.bg-teal-secondary{background:#cbd6cb}.bg-teal-90w{background:#ecf6f5}.bg-petrol-60b{background:#102930}.bg-petrol-30b{background:#1b4754}.bg-petrol-default{background:#276678}.bg-petrol-30w{background:#6894a0}.bg-petrol-60w{background:#a9c2c9}.bg-petrol-secondary{background:#c8d7de}.bg-petrol-90w{background:#e9f0f1}.bg-error-60b{background:#513131}.bg-error-30b{background:#8e5655}.bg-error-60w{background:#e3c3c6}.bg-error-secondary{background:#f0dad9}.bg-error-default{background:#cb7b7a}.bg-warning-secondary{background:#f0d6bb}.bg-warning-default{background:#cca45f}.bg-black{background:#000}.bg-dark{background:#888}.bg-medium{background:#e0e0e0}.bg-grey{background:#ededed}.bg-light{background:#f6f6f6}.bg-white{background:#fff}.bg-box-shadow{background:#00000014}.bg-navigation-subtitle{background:#528593}.bgc-teal-60b{background-color:#1c443c}.bgc-teal-30b{background-color:#31766a}.bgc-teal-default{background-color:#46a997}.bgc-teal-30w{background-color:#7ec3b6}.bgc-teal-60w{background-color:#b5ddd5}.bgc-teal-secondary{background-color:#cbd6cb}.bgc-teal-90w{background-color:#ecf6f5}.bgc-petrol-60b{background-color:#102930}.bgc-petrol-30b{background-color:#1b4754}.bgc-petrol-default{background-color:#276678}.bgc-petrol-30w{background-color:#6894a0}.bgc-petrol-60w{background-color:#a9c2c9}.bgc-petrol-secondary{background-color:#c8d7de}.bgc-petrol-90w{background-color:#e9f0f1}.bgc-error-60b{background-color:#513131}.bgc-error-30b{background-color:#8e5655}.bgc-error-60w{background-color:#e3c3c6}.bgc-error-secondary{background-color:#f0dad9}.bgc-error-default{background-color:#cb7b7a}.bgc-warning-secondary{background-color:#f0d6bb}.bgc-warning-default{background-color:#cca45f}.bgc-black{background-color:#000}.bgc-dark{background-color:#888}.bgc-medium{background-color:#e0e0e0}.bgc-grey{background-color:#ededed}.bgc-light{background-color:#f6f6f6}.bgc-white{background-color:#fff}.bgc-box-shadow{background-color:#00000014}.bgc-navigation-subtitle{background-color:#528593}:host-context(.without-table-border) .table-container{border:none}.flex-left,.table-container .table-header{display:flex;justify-content:flex-start;align-items:center}.table-container{--mat-table-background-color: #ffffff;overflow:hidden;border:1px #e0e0e0 solid;border-radius:8px}.table-container ::ng-deep .mat-sort-header-arrow{color:#000}.table-container .table-header{min-height:56px;padding:8px;background:#fff;line-height:24px;font-size:16px;font-weight:700;text-transform:uppercase;display:flex;justify-content:space-between}.table-container .table-wrapper{max-width:100%;overflow:auto}.table-container .table-wrapper.sticky-header{max-height:var(--table-max-height);overflow-y:auto}.table-container .table-wrapper table.main-table{width:100%;box-shadow:unset}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header{pointer-events:none;cursor:default}.table-container .table-wrapper table.main-table.sort-disabled ::ng-deep .mat-sort-header .mat-sort-header-container{cursor:default}.table-container .table-wrapper table.main-table ::ng-deep .mat-sort-header-arrow{margin-left:8px}.table-container .table-wrapper table.main-table .mdc-data-table__cell,.table-container .table-wrapper table.main-table .mdc-data-table__header-cell{padding:8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:not(:first-child):not(:last-child),.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:not(:first-child):not(:last-child){padding:8px 12px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:first-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:first-child{padding:8px 12px 8px 24px}.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-row .mdc-data-table__header-cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__cell:last-child,.table-container .table-wrapper table.main-table.condensed .mat-mdc-header-row .mdc-data-table__header-cell:last-child{padding:8px 24px 8px 12px}.table-container .table-wrapper table.main-table th{font-size:14px;line-height:16px;text-transform:uppercase}.table-container .table-wrapper table.main-table tr.is-title-present th.mat-mdc-header-cell.mdc-data-table__header-cell{border-top:1px solid #e0e0e0}.table-container .table-wrapper table.main-table td{font-size:14px;line-height:20px}.table-container .table-wrapper table.main-table td .row-value{display:flex;align-items:center;gap:16px}.table-container .table-wrapper table.main-table td .row-value ui-icon ::ng-deep mat-icon{transition:all .3s!important;font-size:24px}.table-container .table-wrapper table.main-table td .row-value ui-icon.opened ::ng-deep mat-icon{transform:rotate(180deg)}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader{display:flex;justify-content:center;align-items:center;line-height:unset}.table-container .table-wrapper table.main-table td ::ng-deep .table-skeleton-loader ngx-skeleton-loader .skeleton-loader{margin-bottom:0}.table-container .table-wrapper table.main-table ::ng-deep thead{background:#f6f6f6!important}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #00000014}.table-container .table-wrapper table.main-table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #00000014}.table-container .header-section{display:flex;gap:4px;align-items:center}.table-container .header-section .column-title{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;width:100%;max-width:fit-content;font-weight:700}.table-container.without-title table{border:unset!important}.table-container.disable-border-radius{border-radius:0!important}.table-container ::ng-deep .mat-mdc-paginator-container{padding:0 24px}.table-container[theme=dark] tr.selected,.table-container[theme=light] tr.selected{background:#f4f4f4!important}.table-container[theme=dark],.table-container[theme=light]{border-radius:10px}.table-container[theme=dark] .table-header,.table-container[theme=light] .table-header{padding:8px 24px;text-transform:none}.table-container[theme=dark] .table-wrapper table th,.table-container[theme=light] .table-wrapper table th{text-transform:none}.table-container[theme=dark] .table-wrapper table td,.table-container[theme=light] .table-wrapper table td{transition:border .3s}.table-container[theme=dark] .table-wrapper table tr.last-row td,.table-container[theme=light] .table-wrapper table tr.last-row td{--mat-table-row-item-outline-color: rgb(0, 0, 0, 0)}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-right,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-right{box-shadow:0 8px 24px 4px #24242414!important}.table-container[theme=dark] .table-wrapper table .mat-mdc-table-sticky-border-elem-left,.table-container[theme=light] .table-wrapper table .mat-mdc-table-sticky-border-elem-left{box-shadow:24px 8px 24px #24242414!important}.table-container[theme=dark] .table-wrapper table ::ng-deep thead,.table-container[theme=light] .table-wrapper table ::ng-deep thead{background-color:#fff!important}.table-container[theme=dark] .table-wrapper table ::ng-deep :not(thead) tr:hover,.table-container[theme=light] .table-wrapper table ::ng-deep :not(thead) tr:hover{background-color:#fff2fc}.table-container ::ng-deep tr.detail-row{height:0}.table-container ::ng-deep tr.detail-row td{border:unset!important}.table-container ::ng-deep .mat-column-expandedDetail{padding:0!important}.table-container ::ng-deep .element-detail{overflow:hidden!important;display:flex!important}.table-container ::ng-deep .element-detail table{background-color:#fff;border-bottom:1px solid #d3d3d3;transition:border .3s}.table-container ::ng-deep .element-detail table.hide-borders{border-bottom:unset}.table-container ::ng-deep .element-detail table .mat-mdc-header-row{visibility:collapse}.table-container ::ng-deep .element-detail table .mat-mdc-cell{border-width:0}.table-container ::ng-deep .element-detail table td:first-child{padding-left:64px!important}table th.th-right{text-align:right}table th.th-right ::ng-deep .header-section{justify-content:end}table th.th-left{text-align:left}table th.th-left ::ng-deep .header-section{justify-content:start}table th.th-center{text-align:center}table th.th-center ::ng-deep .header-section{justify-content:center}table td.td-right{text-align:right}table td.td-right div{justify-content:end}table td.td-left{text-align:left}table td.td-left div{justify-content:start}table td.td-center{text-align:center}table td.td-center div{justify-content:center}::ng-deep table:not(.main-table) thead{display:none!important}ui-paginator{width:100%;display:flex;justify-content:flex-end;border-top:1px solid #d3d3d3}ui-paginator ::ng-deep .mat-mdc-paginator{width:100%}::ng-deep .mat-mdc-tooltip{background-color:#a9c2c9;font-family:Open Sans,serif;font-weight:400;font-size:12px;border-radius:4px;overflow:visible;max-width:248px;padding:6px 2px;--mdc-plain-tooltip-container-color: none;--mat-tooltip-container-color: none;--mdc-plain-tooltip-supporting-text-color: $tgo-black}\n"]
594
+ }]
595
+ }],
596
+ ctorParameters: () => [
597
+ {
598
+ type: void 0,
599
+ decorators: [{ type: Optional }, {
600
+ type: Inject,
601
+ args: ["CANOPYUI_DEFAULT_APPLICATION_THEME"]
602
+ }]
603
+ },
604
+ { type: i0.DestroyRef },
605
+ {
606
+ type: i1.Observable,
607
+ decorators: [{
608
+ type: Inject,
609
+ args: [IS_MOBILE_TOKEN]
610
+ }]
611
+ }
612
+ ],
613
+ propDecorators: {
614
+ config: [{
615
+ type: Input,
616
+ args: [{ required: true }]
617
+ }],
618
+ data: [{ type: Input }],
619
+ loading: [{ type: Input }],
620
+ applicationTheme: [{ type: Input }],
621
+ tableDetailColumns: [{ type: Input }],
622
+ tableDetails: [{ type: Input }],
623
+ disableBorderRadius: [{ type: Input }],
624
+ isCondensed: [{ type: Input }],
625
+ stickyHeader: [{ type: Input }],
626
+ maxHeight: [{ type: Input }],
627
+ testId: [{ type: Input }],
628
+ ariaLabel: [{ type: Input }],
629
+ onRowClickEvent: [{ type: Output }],
630
+ onDetailRowClickEvent: [{ type: Output }],
631
+ paginatorChange: [{ type: Output }],
632
+ sortChange: [{ type: Output }],
633
+ table: [{
634
+ type: ViewChild,
635
+ args: ["table"]
636
+ }]
637
+ }
638
+ });
639
+ var TableComponentModule = class TableComponentModule {
640
+ static {
641
+ this.ɵfac = i0.ɵɵngDeclareFactory({
642
+ minVersion: "12.0.0",
643
+ version: "22.2.4",
644
+ ngImport: i0,
645
+ type: TableComponentModule,
646
+ deps: [],
647
+ target: i0.ɵɵFactoryTarget.NgModule
648
+ });
649
+ }
650
+ static {
651
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
652
+ minVersion: "14.0.0",
653
+ version: "22.2.4",
654
+ ngImport: i0,
655
+ type: TableComponentModule,
656
+ imports: [
657
+ CommonModule,
658
+ MatTableModule,
659
+ MatTooltipModule,
660
+ SkeletonComponent,
661
+ PaginatorComponentModule,
662
+ ButtonComponentModule,
663
+ MatSortModule,
664
+ IconComponentModule,
665
+ EllipseTextDirective,
666
+ DynamicComponentDirective,
667
+ DataPropertyGetterPipe,
668
+ MemoizeFuncPipe,
669
+ TableComponent,
670
+ SentenceCasePipe
671
+ ],
672
+ exports: [TableComponent]
673
+ });
674
+ }
675
+ static {
676
+ this.ɵinj = i0.ɵɵngDeclareInjector({
677
+ minVersion: "12.0.0",
678
+ version: "22.2.4",
679
+ ngImport: i0,
680
+ type: TableComponentModule,
681
+ imports: [
682
+ CommonModule,
683
+ MatTableModule,
684
+ MatTooltipModule,
685
+ SkeletonComponent,
686
+ PaginatorComponentModule,
687
+ ButtonComponentModule,
688
+ MatSortModule,
689
+ IconComponentModule,
690
+ TableComponent
691
+ ]
692
+ });
693
+ }
694
+ };
695
+ i0.ɵɵngDeclareClassMetadata({
696
+ minVersion: "12.0.0",
697
+ version: "22.2.4",
698
+ ngImport: i0,
699
+ type: TableComponentModule,
700
+ decorators: [{
701
+ type: NgModule,
702
+ args: [{
703
+ imports: [
704
+ CommonModule,
705
+ MatTableModule,
706
+ MatTooltipModule,
707
+ SkeletonComponent,
708
+ PaginatorComponentModule,
709
+ ButtonComponentModule,
710
+ MatSortModule,
711
+ IconComponentModule,
712
+ EllipseTextDirective,
713
+ DynamicComponentDirective,
714
+ DataPropertyGetterPipe,
715
+ MemoizeFuncPipe,
716
+ TableComponent,
717
+ SentenceCasePipe
718
+ ],
719
+ exports: [TableComponent]
720
+ }]
721
+ }]
722
+ });
425
723
  export { ColumnAlignment, ColumnAlignmentEnum, ColumnType, ColumnTypeEnum, SentenceCasePipe, TableComponent, TableComponentModule, sortByOrder };
426
- //# sourceMappingURL=testgorilla-tgo-ui-components-table.mjs.map
724
+
725
+ //# sourceMappingURL=testgorilla-tgo-ui-components-table.mjs.map