@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,329 +1,588 @@
1
- import { NgTemplateOutlet, AsyncPipe, NgClass } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { InjectionToken, inject, EnvironmentInjector, ApplicationRef, TemplateRef, Injector, createComponent, Injectable, signal, viewChild, ViewContainerRef, computed, ChangeDetectionStrategy, Component, Directive, booleanAttribute, input, output, contentChild, DestroyRef } from '@angular/core';
4
- import * as i1 from '@testgorilla/tgo-ui/components/button';
5
- import { ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';
6
- import { LanguageService, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
7
- import { TooltipComponentModule } from '@testgorilla/tgo-ui/components/tooltip';
8
- import { trigger, state, style, transition, animate } from '@angular/animations';
9
- import { Subject } from 'rxjs';
10
-
1
+ import { AsyncPipe, NgClass, NgTemplateOutlet } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { ApplicationRef, ChangeDetectionStrategy, Component, DestroyRef, Directive, EnvironmentInjector, Injectable, InjectionToken, Injector, TemplateRef, ViewContainerRef, booleanAttribute, computed, contentChild, createComponent, inject, input, output, signal, viewChild } from "@angular/core";
4
+ import * as i1 from "@testgorilla/tgo-ui/components/button";
5
+ import { ButtonComponentModule } from "@testgorilla/tgo-ui/components/button";
6
+ import { LanguageService, UiTranslatePipe } from "@testgorilla/tgo-ui/components/core";
7
+ import { TooltipComponentModule } from "@testgorilla/tgo-ui/components/tooltip";
8
+ import { animate, state, style, transition, trigger } from "@angular/animations";
9
+ import { Subject } from "rxjs";
11
10
  var SidePanelAnimationState;
12
- (function (SidePanelAnimationState) {
13
- SidePanelAnimationState["Open"] = "open";
14
- SidePanelAnimationState["Closed"] = "closed";
15
- SidePanelAnimationState["ClosedRight"] = "closedRight";
16
- SidePanelAnimationState["ClosedLeft"] = "closedLeft";
11
+ (function(SidePanelAnimationState) {
12
+ SidePanelAnimationState["Open"] = "open";
13
+ SidePanelAnimationState["Closed"] = "closed";
14
+ SidePanelAnimationState["ClosedRight"] = "closedRight";
15
+ SidePanelAnimationState["ClosedLeft"] = "closedLeft";
17
16
  })(SidePanelAnimationState || (SidePanelAnimationState = {}));
18
- class SidePanelConfig {
19
- }
17
+ var SidePanelConfig = class {};
20
18
  const defaultSidePanelConfig = {
21
- position: 'right',
22
- showBackButton: false,
23
- title: '',
24
- data: undefined,
25
- showHeader: true,
26
- showCloseButton: true,
27
- size: 'small',
19
+ position: "right",
20
+ showBackButton: false,
21
+ title: "",
22
+ data: void 0,
23
+ showHeader: true,
24
+ showCloseButton: true,
25
+ size: "small"
28
26
  };
29
- const SIDE_PANEL_CONFIG = new InjectionToken('SIDE_PANEL_CONFIG', {
30
- providedIn: 'root',
31
- factory: () => defaultSidePanelConfig,
27
+ const SIDE_PANEL_CONFIG = new InjectionToken("SIDE_PANEL_CONFIG", {
28
+ providedIn: "root",
29
+ factory: () => defaultSidePanelConfig
32
30
  });
33
- /**
34
- * Reference to a side panel opened via the SidePanelService.
35
- * Similar to MatDialogRef from Angular Material.
36
- */
37
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialogRef<T, R = any>: untyped-by-default result/component types for consumer ergonomics; the ref is invariant in T/R so `unknown` defaults would break internal ref storage in SidePanelService
38
- class SidePanelRef {
39
- constructor() {
40
- this._afterClosed = new Subject();
41
- }
42
- /**
43
- * Observable that emits when the side panel is closed.
44
- * Emits the result passed to the close method, or undefined if no result was provided.
45
- */
46
- afterClosed() {
47
- return this._afterClosed.asObservable();
48
- }
49
- /**
50
- * Closes the side panel with an optional result.
51
- * @param result Optional data to be emitted via afterClosed()
52
- */
53
- close(_result) {
54
- // This will be overridden by the service
55
- }
56
- /** @internal */
57
- _emitClose(result) {
58
- this._afterClosed.next(result);
59
- this._afterClosed.complete();
60
- }
61
- }
62
-
63
- /* eslint-disable @typescript-eslint/no-deprecated -- the @angular/animations trigger/state/style/animate/transition DSL is deprecated in 20.2 in favor of template-level animate.enter/animate.leave; migrating every Material/component animation is out of scope for this lint pass */
31
+ var SidePanelRef = class {
32
+ constructor() {
33
+ this._afterClosed = new Subject();
34
+ }
35
+ afterClosed() {
36
+ return this._afterClosed.asObservable();
37
+ }
38
+ close(_result) {}
39
+ _emitClose(result) {
40
+ this._afterClosed.next(result);
41
+ this._afterClosed.complete();
42
+ }
43
+ };
64
44
  const sidePanelAnimationDuration = 150;
65
- const sidePanelAnimation = [
66
- trigger('slideInOut', [
67
- state(`${SidePanelAnimationState.Open}`, style({ transform: 'translateX(0)' })),
68
- state(`${SidePanelAnimationState.ClosedRight}`, style({ transform: 'translateX(100%)' })),
69
- state(`${SidePanelAnimationState.ClosedLeft}`, style({ transform: 'translateX(-100%)' })),
70
- transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedRight}`, [
71
- animate(`${sidePanelAnimationDuration}ms ease-in-out`),
72
- ]),
73
- transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedLeft}`, [
74
- animate(`${sidePanelAnimationDuration}ms ease-in-out`),
75
- ]),
76
- ]),
77
- ];
78
- const backdropAnimation = [
79
- trigger('fadeInOut', [
80
- state(`${SidePanelAnimationState.Open}`, style({ opacity: 0.25 })),
81
- state(`${SidePanelAnimationState.Closed}`, style({ opacity: 0 })),
82
- transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.Closed}`, [
83
- animate(`${sidePanelAnimationDuration}ms ease-in-out`),
84
- ]),
85
- ]),
86
- ];
87
-
88
- const SIDE_PANEL_DATA = new InjectionToken('SIDE_PANEL_DATA');
89
-
90
- class SidePanelService {
91
- constructor() {
92
- this.defaultSidePanelConfig = inject(SIDE_PANEL_CONFIG);
93
- this.injector = inject(EnvironmentInjector);
94
- this.appRef = inject(ApplicationRef);
95
- }
96
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- mirrors MatDialog.open<T, R = any>: the returned ref's data/component types are untyped-by-default for consumer ergonomics
97
- open(content, config, parentInjector) {
98
- const panelConfig = { ...this.defaultSidePanelConfig, ...config };
99
- const sidePanelRef = new SidePanelRef();
100
- this.currentSidePanelRef = sidePanelRef;
101
- sidePanelRef.close = (result) => {
102
- this.close(result);
103
- };
104
- if (!this.SidePanelComponentRef) {
105
- const injector = this.createSidePanelInjector(panelConfig, parentInjector);
106
- const SidePanelComponentRef = this.createSidePanelComponent(panelConfig.position, injector);
107
- this.SidePanelComponentRef = SidePanelComponentRef;
108
- }
109
- if (content instanceof TemplateRef) {
110
- this.loadTemplate(content);
111
- }
112
- else {
113
- this.loadComponent(content, sidePanelRef);
114
- }
115
- this.SidePanelComponentRef.instance.open();
116
- return sidePanelRef;
117
- }
118
- close(result) {
119
- if (this.SidePanelComponentRef) {
120
- this.SidePanelComponentRef.instance.close(result);
121
- }
122
- }
123
- destroyComponent(result) {
124
- if (this.currentSidePanelRef) {
125
- // eslint-disable-next-line no-underscore-dangle -- _emitClose is SidePanelRef's @internal API (mirrors MatDialogRef internals)
126
- this.currentSidePanelRef._emitClose(result);
127
- this.currentSidePanelRef = undefined;
128
- }
129
- if (this.SidePanelComponentRef) {
130
- this.appRef.detachView(this.SidePanelComponentRef.hostView);
131
- this.SidePanelComponentRef.destroy();
132
- this.SidePanelComponentRef = undefined;
133
- }
134
- if (this.contentComponentRef) {
135
- this.contentComponentRef.destroy();
136
- this.contentComponentRef = undefined;
137
- }
138
- }
139
- createSidePanelInjector(config, parentInjector) {
140
- return Injector.create({
141
- parent: parentInjector,
142
- providers: [
143
- { provide: SidePanelConfig, useValue: config },
144
- { provide: SIDE_PANEL_DATA, useValue: config.data },
145
- ],
146
- });
147
- }
148
- createSidePanelComponent(position, injector) {
149
- const sidePanelComponentRef = createComponent(SidePanelComponent, {
150
- environmentInjector: this.injector,
151
- elementInjector: injector,
152
- });
153
- this.appRef.attachView(sidePanelComponentRef.hostView);
154
- const sidePanelEl = sidePanelComponentRef.hostView.rootNodes[0];
155
- sidePanelEl.querySelector('.side-panel')?.classList.add(position);
156
- document.body.appendChild(sidePanelEl);
157
- return sidePanelComponentRef;
158
- }
159
- loadComponent(component, sidePanelRef) {
160
- const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;
161
- if (viewContainerRef) {
162
- viewContainerRef().clear();
163
- this.contentComponentRef = viewContainerRef().createComponent(component);
164
- // Set the component instance on the SidePanelRef
165
- sidePanelRef.componentInstance = this.contentComponentRef.instance;
166
- }
167
- }
168
- loadTemplate(template) {
169
- const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;
170
- if (viewContainerRef) {
171
- viewContainerRef().clear();
172
- this.embeddedViewRef = viewContainerRef().createEmbeddedView(template);
173
- }
174
- }
175
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
176
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelService, providedIn: 'root' }); }
177
- }
178
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelService, decorators: [{
179
- type: Injectable,
180
- args: [{
181
- providedIn: 'root',
182
- }]
183
- }], ctorParameters: () => [] });
184
-
185
- class SidePanelComponent {
186
- constructor() {
187
- this.sidePanelService = inject(SidePanelService);
188
- this.sidePanelConfig = inject(SidePanelConfig);
189
- this.sidePanelPosition = signal('right', ...(ngDevMode ? [{ debugName: "sidePanelPosition" }] : /* istanbul ignore next */ []));
190
- this.sidePanelContainer = viewChild.required('sidePanelContainer', { read: ViewContainerRef });
191
- this.sidePanel = viewChild.required('sidePanel');
192
- this.backdrop = viewChild.required('sidePanelBackdrop');
193
- this.language = LanguageService.defaultLanguage;
194
- this.isOpen = signal(false, ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
195
- this.size = signal(undefined, ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
196
- this.isSmall = computed(() => this.size() === 'small', ...(ngDevMode ? [{ debugName: "isSmall" }] : /* istanbul ignore next */ []));
197
- this.isLarge = computed(() => this.size() === 'large', ...(ngDevMode ? [{ debugName: "isLarge" }] : /* istanbul ignore next */ []));
198
- this.isXLarge = computed(() => this.size() === 'x-large', ...(ngDevMode ? [{ debugName: "isXLarge" }] : /* istanbul ignore next */ []));
199
- this.activeView = signal(null, ...(ngDevMode ? [{ debugName: "activeView" }] : /* istanbul ignore next */ []));
200
- // The active view owns the header and the footer while it is registered, falling back to the config.
201
- this.headerTitle = computed(() => this.activeView()?.title() ?? this.sidePanelConfig.title, ...(ngDevMode ? [{ debugName: "headerTitle" }] : /* istanbul ignore next */ []));
202
- this.showBackButton = computed(() => this.activeView()?.showBackButton() ?? this.sidePanelConfig.showBackButton, ...(ngDevMode ? [{ debugName: "showBackButton" }] : /* istanbul ignore next */ []));
203
- this.footerTemplate = computed(() => this.activeView()?.footerTemplate() ?? null, ...(ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []));
204
- /** A view owns the back button only when it asked for one; otherwise the config did. */
205
- this.viewOwnsBackButton = computed(() => this.activeView()?.showBackButton() !== undefined, ...(ngDevMode ? [{ debugName: "viewOwnsBackButton" }] : /* istanbul ignore next */ []));
206
- this.footerDivider = computed(() => this.activeView()?.footerDivider() ?? false, ...(ngDevMode ? [{ debugName: "footerDivider" }] : /* istanbul ignore next */ []));
207
- this.fillHeight = computed(() => this.activeView()?.fillHeight() ?? false, ...(ngDevMode ? [{ debugName: "fillHeight" }] : /* istanbul ignore next */ []));
208
- this.animation = computed(() => {
209
- if (this.isOpen()) {
210
- return SidePanelAnimationState.Open;
211
- }
212
- return this.sidePanelPosition() === 'left'
213
- ? SidePanelAnimationState.ClosedLeft
214
- : SidePanelAnimationState.ClosedRight;
215
- }, ...(ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []));
216
- // The config is injected once per panel and never mutated, so plain readonly fields suffice.
217
- this.closeButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-close` : null;
218
- this.backButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-back` : null;
219
- const { position, size } = this.sidePanelConfig;
220
- this.sidePanelPosition.set(position);
221
- this.size.set(size);
222
- }
223
- /** The last view to register wins, so a control-flow swap in either order ends up correct. */
224
- registerView(view) {
225
- this.activeView.set(view);
226
- }
227
- /** Guarded by identity so a view destroyed after its successor was created cannot unseat it. */
228
- unregisterView(view) {
229
- if (this.activeView() === view) {
230
- this.activeView.set(null);
231
- }
232
- }
233
- /**
234
- * The action follows whoever asked for the button, so that a consumer who leaves the flag in the
235
- * config and adopts a view for its footer gets the old close behaviour rather than a dead button.
236
- */
237
- onBack() {
238
- const view = this.activeView();
239
- if (view && this.viewOwnsBackButton()) {
240
- view.back.emit();
241
- return;
242
- }
243
- this.close();
244
- }
245
- open() {
246
- setTimeout(() => {
247
- this.isOpen.set(true);
248
- });
249
- }
250
- close(result) {
251
- this.isOpen.set(false);
252
- setTimeout(() => {
253
- this.sidePanelService.destroyComponent(result);
254
- }, sidePanelAnimationDuration);
255
- }
256
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
257
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: SidePanelComponent, isStandalone: true, selector: "ui-side-panel", viewQueries: [{ propertyName: "sidePanelContainer", first: true, predicate: ["sidePanelContainer"], descendants: true, read: ViewContainerRef, isSignal: true }, { propertyName: "sidePanel", first: true, predicate: ["sidePanel"], descendants: true, isSignal: true }, { propertyName: "backdrop", first: true, predicate: ["sidePanelBackdrop"], descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n", styles: [".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}.side-panel{position:fixed;top:0;height:100vh;height:100dvh;background-color:#fff;padding:32px;box-shadow:2px 24px 48px 8px #00000014;z-index:999999;display:flex;flex-direction:column;will-change:transform;transform:translate(100%)}.side-panel.side-panel-small{width:600px}@media(max-width:600px){.side-panel.side-panel-small{width:100%}}.side-panel.side-panel-large{width:956px}@media(max-width:600px){.side-panel.side-panel-large{width:100%}}@media(max-width:960px){.side-panel.side-panel-large{width:100%}}.side-panel.side-panel-x-large{width:1200px}@media(max-width:1280px){.side-panel.side-panel-x-large{width:100%}}.side-panel-action-close{margin-left:8px}.side-panel-title-container{display:flex;gap:8px}.side-panel.left{left:0}.side-panel.right{right:0}.side-panel-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:899;opacity:0}.side-panel-title{display:block;display:-webkit-box;max-height:3em;line-height:1.6em;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal}.side-panel-content{overflow:auto;min-height:0;flex:1;padding-right:16px;margin-right:-16px}.side-panel-content-fill{position:relative;overflow:hidden;padding-right:0;margin-right:0}.side-panel-footer{display:flex;align-items:center;justify-content:flex-end;column-gap:16px;flex:0 0 auto;min-height:48px;margin:0 -32px -32px;padding:16px 32px;background-color:#fff}.side-panel-footer-divided{border-top:1px solid #e9e9e9}.side-panel-header{position:sticky;min-height:30px;display:flex;justify-content:space-between;margin-bottom:32px}\n"], dependencies: [{ kind: "ngmodule", type: TooltipComponentModule }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i1.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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [sidePanelAnimation, backdropAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
258
- }
259
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelComponent, decorators: [{
260
- type: Component,
261
- args: [{ selector: 'ui-side-panel', animations: [sidePanelAnimation, backdropAnimation], changeDetection: ChangeDetectionStrategy.OnPush, imports: [TooltipComponentModule, ButtonComponentModule, UiTranslatePipe, AsyncPipe, NgClass, NgTemplateOutlet], template: "<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n", styles: [".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}.side-panel{position:fixed;top:0;height:100vh;height:100dvh;background-color:#fff;padding:32px;box-shadow:2px 24px 48px 8px #00000014;z-index:999999;display:flex;flex-direction:column;will-change:transform;transform:translate(100%)}.side-panel.side-panel-small{width:600px}@media(max-width:600px){.side-panel.side-panel-small{width:100%}}.side-panel.side-panel-large{width:956px}@media(max-width:600px){.side-panel.side-panel-large{width:100%}}@media(max-width:960px){.side-panel.side-panel-large{width:100%}}.side-panel.side-panel-x-large{width:1200px}@media(max-width:1280px){.side-panel.side-panel-x-large{width:100%}}.side-panel-action-close{margin-left:8px}.side-panel-title-container{display:flex;gap:8px}.side-panel.left{left:0}.side-panel.right{right:0}.side-panel-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:899;opacity:0}.side-panel-title{display:block;display:-webkit-box;max-height:3em;line-height:1.6em;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal}.side-panel-content{overflow:auto;min-height:0;flex:1;padding-right:16px;margin-right:-16px}.side-panel-content-fill{position:relative;overflow:hidden;padding-right:0;margin-right:0}.side-panel-footer{display:flex;align-items:center;justify-content:flex-end;column-gap:16px;flex:0 0 auto;min-height:48px;margin:0 -32px -32px;padding:16px 32px;background-color:#fff}.side-panel-footer-divided{border-top:1px solid #e9e9e9}.side-panel-header{position:sticky;min-height:30px;display:flex;justify-content:space-between;margin-bottom:32px}\n"] }]
262
- }], ctorParameters: () => [], propDecorators: { sidePanelContainer: [{ type: i0.ViewChild, args: ['sidePanelContainer', { ...{ read: ViewContainerRef }, isSignal: true }] }], sidePanel: [{ type: i0.ViewChild, args: ['sidePanel', { isSignal: true }] }], backdrop: [{ type: i0.ViewChild, args: ['sidePanelBackdrop', { isSignal: true }] }] } });
263
-
264
- /** Marks the `ng-template` inside a `ui-side-panel-view` that holds the view's footer. */
265
- class SidePanelFooterDirective {
266
- constructor() {
267
- this.templateRef = inject(TemplateRef);
268
- }
269
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelFooterDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
270
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.25", type: SidePanelFooterDirective, isStandalone: true, selector: "ng-template[uiSidePanelFooter]", ngImport: i0 }); }
271
- }
272
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelFooterDirective, decorators: [{
273
- type: Directive,
274
- args: [{
275
- selector: 'ng-template[uiSidePanelFooter]',
276
- standalone: true,
277
- }]
278
- }] });
279
-
280
- // `undefined` has to survive so the panel can tell "not set by this view" apart from an
281
- // explicit `false` and fall back to `SidePanelConfig`.
45
+ const sidePanelAnimation = [trigger("slideInOut", [
46
+ state(`${SidePanelAnimationState.Open}`, style({ transform: "translateX(0)" })),
47
+ state(`${SidePanelAnimationState.ClosedRight}`, style({ transform: "translateX(100%)" })),
48
+ state(`${SidePanelAnimationState.ClosedLeft}`, style({ transform: "translateX(-100%)" })),
49
+ transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedRight}`, [animate(`150ms ease-in-out`)]),
50
+ transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.ClosedLeft}`, [animate(`150ms ease-in-out`)])
51
+ ])];
52
+ const backdropAnimation = [trigger("fadeInOut", [
53
+ state(`${SidePanelAnimationState.Open}`, style({ opacity: .25 })),
54
+ state(`${SidePanelAnimationState.Closed}`, style({ opacity: 0 })),
55
+ transition(`${SidePanelAnimationState.Open} <=> ${SidePanelAnimationState.Closed}`, [animate(`150ms ease-in-out`)])
56
+ ])];
57
+ const SIDE_PANEL_DATA = new InjectionToken("SIDE_PANEL_DATA");
58
+ var SidePanelService = class SidePanelService {
59
+ constructor() {
60
+ this.defaultSidePanelConfig = inject(SIDE_PANEL_CONFIG);
61
+ this.injector = inject(EnvironmentInjector);
62
+ this.appRef = inject(ApplicationRef);
63
+ }
64
+ open(content, config, parentInjector) {
65
+ const panelConfig = {
66
+ ...this.defaultSidePanelConfig,
67
+ ...config
68
+ };
69
+ const sidePanelRef = new SidePanelRef();
70
+ this.currentSidePanelRef = sidePanelRef;
71
+ sidePanelRef.close = (result) => {
72
+ this.close(result);
73
+ };
74
+ if (!this.SidePanelComponentRef) {
75
+ const injector = this.createSidePanelInjector(panelConfig, parentInjector);
76
+ const SidePanelComponentRef = this.createSidePanelComponent(panelConfig.position, injector);
77
+ this.SidePanelComponentRef = SidePanelComponentRef;
78
+ }
79
+ if (content instanceof TemplateRef) this.loadTemplate(content);
80
+ else this.loadComponent(content, sidePanelRef);
81
+ this.SidePanelComponentRef.instance.open();
82
+ return sidePanelRef;
83
+ }
84
+ close(result) {
85
+ if (this.SidePanelComponentRef) this.SidePanelComponentRef.instance.close(result);
86
+ }
87
+ destroyComponent(result) {
88
+ if (this.currentSidePanelRef) {
89
+ this.currentSidePanelRef._emitClose(result);
90
+ this.currentSidePanelRef = void 0;
91
+ }
92
+ if (this.SidePanelComponentRef) {
93
+ this.appRef.detachView(this.SidePanelComponentRef.hostView);
94
+ this.SidePanelComponentRef.destroy();
95
+ this.SidePanelComponentRef = void 0;
96
+ }
97
+ if (this.contentComponentRef) {
98
+ this.contentComponentRef.destroy();
99
+ this.contentComponentRef = void 0;
100
+ }
101
+ }
102
+ createSidePanelInjector(config, parentInjector) {
103
+ return Injector.create({
104
+ parent: parentInjector,
105
+ providers: [{
106
+ provide: SidePanelConfig,
107
+ useValue: config
108
+ }, {
109
+ provide: SIDE_PANEL_DATA,
110
+ useValue: config.data
111
+ }]
112
+ });
113
+ }
114
+ createSidePanelComponent(position, injector) {
115
+ const sidePanelComponentRef = createComponent(SidePanelComponent, {
116
+ environmentInjector: this.injector,
117
+ elementInjector: injector
118
+ });
119
+ this.appRef.attachView(sidePanelComponentRef.hostView);
120
+ const sidePanelEl = sidePanelComponentRef.hostView.rootNodes[0];
121
+ sidePanelEl.querySelector(".side-panel")?.classList.add(position);
122
+ document.body.appendChild(sidePanelEl);
123
+ return sidePanelComponentRef;
124
+ }
125
+ loadComponent(component, sidePanelRef) {
126
+ const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;
127
+ if (viewContainerRef) {
128
+ viewContainerRef().clear();
129
+ this.contentComponentRef = viewContainerRef().createComponent(component);
130
+ sidePanelRef.componentInstance = this.contentComponentRef.instance;
131
+ }
132
+ }
133
+ loadTemplate(template) {
134
+ const viewContainerRef = this.SidePanelComponentRef?.instance.sidePanelContainer;
135
+ if (viewContainerRef) {
136
+ viewContainerRef().clear();
137
+ this.embeddedViewRef = viewContainerRef().createEmbeddedView(template);
138
+ }
139
+ }
140
+ static {
141
+ this.ɵfac = i0.ɵɵngDeclareFactory({
142
+ minVersion: "12.0.0",
143
+ version: "22.2.4",
144
+ ngImport: i0,
145
+ type: SidePanelService,
146
+ deps: [],
147
+ target: i0.ɵɵFactoryTarget.Injectable
148
+ });
149
+ }
150
+ static {
151
+ this.ɵprov = i0.ɵɵngDeclareInjectable({
152
+ minVersion: "12.0.0",
153
+ version: "22.2.4",
154
+ ngImport: i0,
155
+ type: SidePanelService,
156
+ providedIn: "root"
157
+ });
158
+ }
159
+ };
160
+ i0.ɵɵngDeclareClassMetadata({
161
+ minVersion: "12.0.0",
162
+ version: "22.2.4",
163
+ ngImport: i0,
164
+ type: SidePanelService,
165
+ decorators: [{
166
+ type: Injectable,
167
+ args: [{ providedIn: "root" }]
168
+ }],
169
+ ctorParameters: () => []
170
+ });
171
+ var SidePanelComponent = class SidePanelComponent {
172
+ constructor() {
173
+ this.sidePanelService = inject(SidePanelService);
174
+ this.sidePanelConfig = inject(SidePanelConfig);
175
+ this.sidePanelPosition = signal("right", ...ngDevMode ? [{ debugName: "sidePanelPosition" }] : /* istanbul ignore next */ []);
176
+ this.sidePanelContainer = viewChild.required("sidePanelContainer", {
177
+ ...ngDevMode ? { debugName: "sidePanelContainer" } : /* istanbul ignore next */ {},
178
+ read: ViewContainerRef
179
+ });
180
+ this.sidePanel = viewChild.required("sidePanel", ...ngDevMode ? [{ debugName: "sidePanel" }] : /* istanbul ignore next */ []);
181
+ this.backdrop = viewChild.required("sidePanelBackdrop", ...ngDevMode ? [{ debugName: "backdrop" }] : /* istanbul ignore next */ []);
182
+ this.language = LanguageService.defaultLanguage;
183
+ this.isOpen = signal(false, ...ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []);
184
+ this.size = signal(void 0, ...ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []);
185
+ this.isSmall = computed(() => this.size() === "small", ...ngDevMode ? [{ debugName: "isSmall" }] : /* istanbul ignore next */ []);
186
+ this.isLarge = computed(() => this.size() === "large", ...ngDevMode ? [{ debugName: "isLarge" }] : /* istanbul ignore next */ []);
187
+ this.isXLarge = computed(() => this.size() === "x-large", ...ngDevMode ? [{ debugName: "isXLarge" }] : /* istanbul ignore next */ []);
188
+ this.activeView = signal(null, ...ngDevMode ? [{ debugName: "activeView" }] : /* istanbul ignore next */ []);
189
+ this.headerTitle = computed(() => this.activeView()?.title() ?? this.sidePanelConfig.title, ...ngDevMode ? [{ debugName: "headerTitle" }] : /* istanbul ignore next */ []);
190
+ this.showBackButton = computed(() => this.activeView()?.showBackButton() ?? this.sidePanelConfig.showBackButton, ...ngDevMode ? [{ debugName: "showBackButton" }] : /* istanbul ignore next */ []);
191
+ this.footerTemplate = computed(() => this.activeView()?.footerTemplate() ?? null, ...ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []);
192
+ this.viewOwnsBackButton = computed(() => this.activeView()?.showBackButton() !== void 0, ...ngDevMode ? [{ debugName: "viewOwnsBackButton" }] : /* istanbul ignore next */ []);
193
+ this.footerDivider = computed(() => this.activeView()?.footerDivider() ?? false, ...ngDevMode ? [{ debugName: "footerDivider" }] : /* istanbul ignore next */ []);
194
+ this.fillHeight = computed(() => this.activeView()?.fillHeight() ?? false, ...ngDevMode ? [{ debugName: "fillHeight" }] : /* istanbul ignore next */ []);
195
+ this.animation = computed(() => {
196
+ if (this.isOpen()) return SidePanelAnimationState.Open;
197
+ return this.sidePanelPosition() === "left" ? SidePanelAnimationState.ClosedLeft : SidePanelAnimationState.ClosedRight;
198
+ }, ...ngDevMode ? [{ debugName: "animation" }] : /* istanbul ignore next */ []);
199
+ this.closeButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-close` : null;
200
+ this.backButtonTestId = this.sidePanelConfig.testId ? `${this.sidePanelConfig.testId}-back` : null;
201
+ const { position, size } = this.sidePanelConfig;
202
+ this.sidePanelPosition.set(position);
203
+ this.size.set(size);
204
+ }
205
+ registerView(view) {
206
+ this.activeView.set(view);
207
+ }
208
+ unregisterView(view) {
209
+ if (this.activeView() === view) this.activeView.set(null);
210
+ }
211
+ onBack() {
212
+ const view = this.activeView();
213
+ if (view && this.viewOwnsBackButton()) {
214
+ view.back.emit();
215
+ return;
216
+ }
217
+ this.close();
218
+ }
219
+ open() {
220
+ setTimeout(() => {
221
+ this.isOpen.set(true);
222
+ });
223
+ }
224
+ close(result) {
225
+ this.isOpen.set(false);
226
+ setTimeout(() => {
227
+ this.sidePanelService.destroyComponent(result);
228
+ }, 150);
229
+ }
230
+ static {
231
+ this.ɵfac = i0.ɵɵngDeclareFactory({
232
+ minVersion: "12.0.0",
233
+ version: "22.2.4",
234
+ ngImport: i0,
235
+ type: SidePanelComponent,
236
+ deps: [],
237
+ target: i0.ɵɵFactoryTarget.Component
238
+ });
239
+ }
240
+ static {
241
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
242
+ minVersion: "17.0.0",
243
+ version: "22.2.4",
244
+ type: SidePanelComponent,
245
+ isStandalone: true,
246
+ selector: "ui-side-panel",
247
+ viewQueries: [
248
+ {
249
+ propertyName: "sidePanelContainer",
250
+ first: true,
251
+ predicate: ["sidePanelContainer"],
252
+ descendants: true,
253
+ read: ViewContainerRef,
254
+ isSignal: true
255
+ },
256
+ {
257
+ propertyName: "sidePanel",
258
+ first: true,
259
+ predicate: ["sidePanel"],
260
+ descendants: true,
261
+ isSignal: true
262
+ },
263
+ {
264
+ propertyName: "backdrop",
265
+ first: true,
266
+ predicate: ["sidePanelBackdrop"],
267
+ descendants: true,
268
+ isSignal: true
269
+ }
270
+ ],
271
+ ngImport: i0,
272
+ template: "<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n",
273
+ styles: [".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}.side-panel{position:fixed;top:0;height:100vh;height:100dvh;background-color:#fff;padding:32px;box-shadow:2px 24px 48px 8px #00000014;z-index:999999;display:flex;flex-direction:column;will-change:transform;transform:translate(100%)}.side-panel.side-panel-small{width:600px}@media(max-width:600px){.side-panel.side-panel-small{width:100%}}.side-panel.side-panel-large{width:956px}@media(max-width:600px){.side-panel.side-panel-large{width:100%}}@media(max-width:960px){.side-panel.side-panel-large{width:100%}}.side-panel.side-panel-x-large{width:1200px}@media(max-width:1280px){.side-panel.side-panel-x-large{width:100%}}.side-panel-action-close{margin-left:8px}.side-panel-title-container{display:flex;gap:8px}.side-panel.left{left:0}.side-panel.right{right:0}.side-panel-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:899;opacity:0}.side-panel-title{display:block;display:-webkit-box;max-height:3em;line-height:1.6em;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal}.side-panel-content{overflow:auto;min-height:0;flex:1;padding-right:16px;margin-right:-16px}.side-panel-content-fill{position:relative;overflow:hidden;padding-right:0;margin-right:0}.side-panel-footer{display:flex;align-items:center;justify-content:flex-end;column-gap:16px;flex:0 0 auto;min-height:48px;margin:0 -32px -32px;padding:16px 32px;background-color:#fff}.side-panel-footer-divided{border-top:1px solid #e9e9e9}.side-panel-header{position:sticky;min-height:30px;display:flex;justify-content:space-between;margin-bottom:32px}\n"],
274
+ dependencies: [
275
+ {
276
+ kind: "ngmodule",
277
+ type: TooltipComponentModule
278
+ },
279
+ {
280
+ kind: "ngmodule",
281
+ type: ButtonComponentModule
282
+ },
283
+ {
284
+ kind: "component",
285
+ type: i1.ButtonComponent,
286
+ selector: "ui-button",
287
+ inputs: [
288
+ "size",
289
+ "variant",
290
+ "label",
291
+ "iconPosition",
292
+ "justIcon",
293
+ "iconName",
294
+ "trailingIconName",
295
+ "trailingIconFilled",
296
+ "disabled",
297
+ "loading",
298
+ "loadingWithLabel",
299
+ "fullWidth",
300
+ "url",
301
+ "urlTarget",
302
+ "value",
303
+ "tooltip",
304
+ "isPremium",
305
+ "type",
306
+ "companyColor",
307
+ "buttonBadgeConfig",
308
+ "applicationTheme",
309
+ "disabledScaleOnClick",
310
+ "ariaLabel",
311
+ "ariaExpanded",
312
+ "ariaControls",
313
+ "ariaPressed",
314
+ "ariaRequired",
315
+ "ariaLabelledby",
316
+ "ariaDescribedby",
317
+ "preventDefault",
318
+ "hasBackground",
319
+ "tooltipPosition",
320
+ "role",
321
+ "iconFilled",
322
+ "testId"
323
+ ],
324
+ outputs: ["buttonClickEvent", "buttonHoverEvent"]
325
+ },
326
+ {
327
+ kind: "directive",
328
+ type: NgTemplateOutlet,
329
+ selector: "[ngTemplateOutlet]",
330
+ inputs: [
331
+ "ngTemplateOutletContext",
332
+ "ngTemplateOutlet",
333
+ "ngTemplateOutletInjector"
334
+ ]
335
+ },
336
+ {
337
+ kind: "pipe",
338
+ type: UiTranslatePipe,
339
+ name: "uiTranslate"
340
+ },
341
+ {
342
+ kind: "pipe",
343
+ type: AsyncPipe,
344
+ name: "async"
345
+ }
346
+ ],
347
+ animations: [sidePanelAnimation, backdropAnimation],
348
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
349
+ });
350
+ }
351
+ };
352
+ i0.ɵɵngDeclareClassMetadata({
353
+ minVersion: "12.0.0",
354
+ version: "22.2.4",
355
+ ngImport: i0,
356
+ type: SidePanelComponent,
357
+ decorators: [{
358
+ type: Component,
359
+ args: [{
360
+ selector: "ui-side-panel",
361
+ animations: [sidePanelAnimation, backdropAnimation],
362
+ changeDetection: ChangeDetectionStrategy.OnPush,
363
+ imports: [
364
+ TooltipComponentModule,
365
+ ButtonComponentModule,
366
+ UiTranslatePipe,
367
+ AsyncPipe,
368
+ NgClass,
369
+ NgTemplateOutlet
370
+ ],
371
+ template: "<div\n class=\"side-panel-backdrop\"\n #sidePanelBackdrop\n tabindex=\"0\"\n (click)=\"close()\"\n (keydown.enter)=\"close()\"\n [@fadeInOut]=\"isOpen() ? 'open' : 'closed'\"\n></div>\n<div\n class=\"side-panel\"\n [class]=\"sidePanelConfig.panelClass\"\n [class.side-panel-small]=\"isSmall()\"\n [class.side-panel-large]=\"isLarge()\"\n [class.side-panel-x-large]=\"isXLarge()\"\n #sidePanel\n [@slideInOut]=\"animation()\"\n [attr.data-testid]=\"sidePanelConfig.testId ?? null\"\n>\n @if (sidePanelConfig.showHeader) {\n <div class=\"side-panel-header\">\n <div class=\"side-panel-title-container\">\n @if (showBackButton()) {\n <ui-button\n class=\"side-panel-action\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Arrow-chevron-left-filled'\"\n (click)=\"onBack()\"\n [tooltip]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.BACK' | uiTranslate | async)!\"\n [testId]=\"backButtonTestId\"\n size=\"medium\"\n ></ui-button>\n }\n <span class=\"side-panel-title h3 bold\">{{ headerTitle() }}</span>\n </div>\n @if (sidePanelConfig.showCloseButton) {\n <ui-button\n class=\"side-panel-action side-panel-action-close\"\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [ariaLabel]=\"('COMMON.CLOSE' | uiTranslate | async)!\"\n [testId]=\"closeButtonTestId\"\n (click)=\"close()\"\n size=\"medium\"\n ></ui-button>\n }\n </div>\n }\n\n <div class=\"side-panel-content\" [class.side-panel-content-fill]=\"fillHeight()\">\n <ng-container #sidePanelContainer></ng-container>\n </div>\n\n @if (footerTemplate(); as footer) {\n <div class=\"side-panel-footer\" [class.side-panel-footer-divided]=\"footerDivider()\">\n <ng-container [ngTemplateOutlet]=\"footer\"></ng-container>\n </div>\n }\n</div>\n",
372
+ styles: [".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}.side-panel{position:fixed;top:0;height:100vh;height:100dvh;background-color:#fff;padding:32px;box-shadow:2px 24px 48px 8px #00000014;z-index:999999;display:flex;flex-direction:column;will-change:transform;transform:translate(100%)}.side-panel.side-panel-small{width:600px}@media(max-width:600px){.side-panel.side-panel-small{width:100%}}.side-panel.side-panel-large{width:956px}@media(max-width:600px){.side-panel.side-panel-large{width:100%}}@media(max-width:960px){.side-panel.side-panel-large{width:100%}}.side-panel.side-panel-x-large{width:1200px}@media(max-width:1280px){.side-panel.side-panel-x-large{width:100%}}.side-panel-action-close{margin-left:8px}.side-panel-title-container{display:flex;gap:8px}.side-panel.left{left:0}.side-panel.right{right:0}.side-panel-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:#000;z-index:899;opacity:0}.side-panel-title{display:block;display:-webkit-box;max-height:3em;line-height:1.6em;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;text-overflow:ellipsis;white-space:normal}.side-panel-content{overflow:auto;min-height:0;flex:1;padding-right:16px;margin-right:-16px}.side-panel-content-fill{position:relative;overflow:hidden;padding-right:0;margin-right:0}.side-panel-footer{display:flex;align-items:center;justify-content:flex-end;column-gap:16px;flex:0 0 auto;min-height:48px;margin:0 -32px -32px;padding:16px 32px;background-color:#fff}.side-panel-footer-divided{border-top:1px solid #e9e9e9}.side-panel-header{position:sticky;min-height:30px;display:flex;justify-content:space-between;margin-bottom:32px}\n"]
373
+ }]
374
+ }],
375
+ ctorParameters: () => [],
376
+ propDecorators: {
377
+ sidePanelContainer: [{
378
+ type: i0.ViewChild,
379
+ args: ["sidePanelContainer", {
380
+ read: ViewContainerRef,
381
+ isSignal: true
382
+ }]
383
+ }],
384
+ sidePanel: [{
385
+ type: i0.ViewChild,
386
+ args: ["sidePanel", { isSignal: true }]
387
+ }],
388
+ backdrop: [{
389
+ type: i0.ViewChild,
390
+ args: ["sidePanelBackdrop", { isSignal: true }]
391
+ }]
392
+ }
393
+ });
394
+ var SidePanelFooterDirective = class SidePanelFooterDirective {
395
+ constructor() {
396
+ this.templateRef = inject(TemplateRef);
397
+ }
398
+ static {
399
+ this.ɵfac = i0.ɵɵngDeclareFactory({
400
+ minVersion: "12.0.0",
401
+ version: "22.2.4",
402
+ ngImport: i0,
403
+ type: SidePanelFooterDirective,
404
+ deps: [],
405
+ target: i0.ɵɵFactoryTarget.Directive
406
+ });
407
+ }
408
+ static {
409
+ this.ɵdir = i0.ɵɵngDeclareDirective({
410
+ minVersion: "14.0.0",
411
+ version: "22.2.4",
412
+ type: SidePanelFooterDirective,
413
+ isStandalone: true,
414
+ selector: "ng-template[uiSidePanelFooter]",
415
+ ngImport: i0
416
+ });
417
+ }
418
+ };
419
+ i0.ɵɵngDeclareClassMetadata({
420
+ minVersion: "12.0.0",
421
+ version: "22.2.4",
422
+ ngImport: i0,
423
+ type: SidePanelFooterDirective,
424
+ decorators: [{
425
+ type: Directive,
426
+ args: [{
427
+ selector: "ng-template[uiSidePanelFooter]",
428
+ standalone: true
429
+ }]
430
+ }]
431
+ });
282
432
  function optionalBooleanAttribute(value) {
283
- return value === undefined ? undefined : booleanAttribute(value);
433
+ return value === void 0 ? void 0 : booleanAttribute(value);
284
434
  }
285
- /**
286
- * One view inside a side panel: its body, its header title and its footer. Render a different
287
- * one per step to switch views without reopening the panel.
288
- */
289
- class SidePanelViewComponent {
290
- constructor() {
291
- /** Left unset, the panel keeps the title from `SidePanelConfig`. */
292
- this.title = input(...(ngDevMode ? [undefined, { debugName: "title" }] : /* istanbul ignore next */ []));
293
- /** Left unset, the panel falls back to `SidePanelConfig.showBackButton`. */
294
- this.showBackButton = input(undefined, { ...(ngDevMode ? { debugName: "showBackButton" } : /* istanbul ignore next */ {}), transform: optionalBooleanAttribute });
295
- /** Draws a rule above the footer, separating it from content that scrolls underneath. */
296
- this.footerDivider = input(false, { ...(ngDevMode ? { debugName: "footerDivider" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
297
- /**
298
- * Makes the view fill the panel body instead of growing with its content, and stops the panel
299
- * scrolling. Content then owns its own overflow — give the element that should scroll
300
- * `flex: 1; min-height: 0; overflow: auto`, or `height: 100%`.
301
- */
302
- this.fillHeight = input(false, { ...(ngDevMode ? { debugName: "fillHeight" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
303
- /** The panel does not close itself — move to the previous view, or close it yourself. */
304
- this.back = output();
305
- this.footer = contentChild(SidePanelFooterDirective, ...(ngDevMode ? [{ debugName: "footer" }] : /* istanbul ignore next */ []));
306
- this.footerTemplate = computed(() => this.footer()?.templateRef ?? null, ...(ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []));
307
- this.panel = inject(SidePanelComponent, { optional: true });
308
- this.panel?.registerView(this);
309
- inject(DestroyRef).onDestroy(() => this.panel?.unregisterView(this));
310
- }
311
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.25", type: SidePanelViewComponent, isStandalone: true, selector: "ui-side-panel-view", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, showBackButton: { classPropertyName: "showBackButton", publicName: "showBackButton", isSignal: true, isRequired: false, transformFunction: null }, footerDivider: { classPropertyName: "footerDivider", publicName: "footerDivider", isSignal: true, isRequired: false, transformFunction: null }, fillHeight: { classPropertyName: "fillHeight", publicName: "fillHeight", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { back: "back" }, host: { properties: { "class.side-panel-view-fill": "fillHeight()", "attr.title": "null" } }, queries: [{ propertyName: "footer", first: true, predicate: SidePanelFooterDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block}:host(.side-panel-view-fill){position:absolute;inset:0;display:flex;flex-direction:column}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
313
- }
314
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: SidePanelViewComponent, decorators: [{
315
- type: Component,
316
- args: [{ selector: 'ui-side-panel-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
317
- '[class.side-panel-view-fill]': 'fillHeight()',
318
- // `title` is a global HTML attribute and Angular keeps a statically set one on the host, so
319
- // `<ui-side-panel-view title="...">` would hang a native tooltip over the whole view body.
320
- '[attr.title]': 'null',
321
- }, template: "<ng-content></ng-content>\n", styles: [":host{display:block}:host(.side-panel-view-fill){position:absolute;inset:0;display:flex;flex-direction:column}\n"] }]
322
- }], ctorParameters: () => [], propDecorators: { title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], showBackButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBackButton", required: false }] }], footerDivider: [{ type: i0.Input, args: [{ isSignal: true, alias: "footerDivider", required: false }] }], fillHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "fillHeight", required: false }] }], back: [{ type: i0.Output, args: ["back"] }], footer: [{ type: i0.ContentChild, args: [i0.forwardRef(() => SidePanelFooterDirective), { isSignal: true }] }] } });
323
-
324
- /**
325
- * Generated bundle index. Do not edit.
326
- */
327
-
435
+ var SidePanelViewComponent = class SidePanelViewComponent {
436
+ constructor() {
437
+ this.title = input(...ngDevMode ? [void 0, { debugName: "title" }] : /* istanbul ignore next */ []);
438
+ this.showBackButton = input(void 0, {
439
+ ...ngDevMode ? { debugName: "showBackButton" } : /* istanbul ignore next */ {},
440
+ transform: optionalBooleanAttribute
441
+ });
442
+ this.footerDivider = input(false, {
443
+ ...ngDevMode ? { debugName: "footerDivider" } : /* istanbul ignore next */ {},
444
+ transform: booleanAttribute
445
+ });
446
+ this.fillHeight = input(false, {
447
+ ...ngDevMode ? { debugName: "fillHeight" } : /* istanbul ignore next */ {},
448
+ transform: booleanAttribute
449
+ });
450
+ this.back = output();
451
+ this.footer = contentChild(SidePanelFooterDirective, ...ngDevMode ? [{ debugName: "footer" }] : /* istanbul ignore next */ []);
452
+ this.footerTemplate = computed(() => this.footer()?.templateRef ?? null, ...ngDevMode ? [{ debugName: "footerTemplate" }] : /* istanbul ignore next */ []);
453
+ this.panel = inject(SidePanelComponent, { optional: true });
454
+ this.panel?.registerView(this);
455
+ inject(DestroyRef).onDestroy(() => this.panel?.unregisterView(this));
456
+ }
457
+ static {
458
+ this.ɵfac = i0.ɵɵngDeclareFactory({
459
+ minVersion: "12.0.0",
460
+ version: "22.2.4",
461
+ ngImport: i0,
462
+ type: SidePanelViewComponent,
463
+ deps: [],
464
+ target: i0.ɵɵFactoryTarget.Component
465
+ });
466
+ }
467
+ static {
468
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
469
+ minVersion: "17.2.0",
470
+ version: "22.2.4",
471
+ type: SidePanelViewComponent,
472
+ isStandalone: true,
473
+ selector: "ui-side-panel-view",
474
+ inputs: {
475
+ title: {
476
+ classPropertyName: "title",
477
+ publicName: "title",
478
+ isSignal: true,
479
+ isRequired: false,
480
+ transformFunction: null
481
+ },
482
+ showBackButton: {
483
+ classPropertyName: "showBackButton",
484
+ publicName: "showBackButton",
485
+ isSignal: true,
486
+ isRequired: false,
487
+ transformFunction: null
488
+ },
489
+ footerDivider: {
490
+ classPropertyName: "footerDivider",
491
+ publicName: "footerDivider",
492
+ isSignal: true,
493
+ isRequired: false,
494
+ transformFunction: null
495
+ },
496
+ fillHeight: {
497
+ classPropertyName: "fillHeight",
498
+ publicName: "fillHeight",
499
+ isSignal: true,
500
+ isRequired: false,
501
+ transformFunction: null
502
+ }
503
+ },
504
+ outputs: { back: "back" },
505
+ host: { properties: {
506
+ "class.side-panel-view-fill": "fillHeight()",
507
+ "attr.title": "null"
508
+ } },
509
+ queries: [{
510
+ propertyName: "footer",
511
+ first: true,
512
+ predicate: SidePanelFooterDirective,
513
+ descendants: true,
514
+ isSignal: true
515
+ }],
516
+ ngImport: i0,
517
+ template: "<ng-content></ng-content>\n",
518
+ styles: [":host{display:block}:host(.side-panel-view-fill){position:absolute;inset:0;display:flex;flex-direction:column}\n"],
519
+ changeDetection: i0.ChangeDetectionStrategy.OnPush
520
+ });
521
+ }
522
+ };
523
+ i0.ɵɵngDeclareClassMetadata({
524
+ minVersion: "12.0.0",
525
+ version: "22.2.4",
526
+ ngImport: i0,
527
+ type: SidePanelViewComponent,
528
+ decorators: [{
529
+ type: Component,
530
+ args: [{
531
+ selector: "ui-side-panel-view",
532
+ changeDetection: ChangeDetectionStrategy.OnPush,
533
+ standalone: true,
534
+ host: {
535
+ "[class.side-panel-view-fill]": "fillHeight()",
536
+ "[attr.title]": "null"
537
+ },
538
+ template: "<ng-content></ng-content>\n",
539
+ styles: [":host{display:block}:host(.side-panel-view-fill){position:absolute;inset:0;display:flex;flex-direction:column}\n"]
540
+ }]
541
+ }],
542
+ ctorParameters: () => [],
543
+ propDecorators: {
544
+ title: [{
545
+ type: i0.Input,
546
+ args: [{
547
+ isSignal: true,
548
+ alias: "title",
549
+ required: false
550
+ }]
551
+ }],
552
+ showBackButton: [{
553
+ type: i0.Input,
554
+ args: [{
555
+ isSignal: true,
556
+ alias: "showBackButton",
557
+ required: false
558
+ }]
559
+ }],
560
+ footerDivider: [{
561
+ type: i0.Input,
562
+ args: [{
563
+ isSignal: true,
564
+ alias: "footerDivider",
565
+ required: false
566
+ }]
567
+ }],
568
+ fillHeight: [{
569
+ type: i0.Input,
570
+ args: [{
571
+ isSignal: true,
572
+ alias: "fillHeight",
573
+ required: false
574
+ }]
575
+ }],
576
+ back: [{
577
+ type: i0.Output,
578
+ args: ["back"]
579
+ }],
580
+ footer: [{
581
+ type: i0.ContentChild,
582
+ args: [i0.forwardRef(() => SidePanelFooterDirective), { isSignal: true }]
583
+ }]
584
+ }
585
+ });
328
586
  export { SIDE_PANEL_CONFIG, SIDE_PANEL_DATA, SidePanelAnimationState, SidePanelComponent, SidePanelConfig, SidePanelFooterDirective, SidePanelRef, SidePanelService, SidePanelViewComponent, backdropAnimation, defaultSidePanelConfig, sidePanelAnimation, sidePanelAnimationDuration };
329
- //# sourceMappingURL=testgorilla-tgo-ui-components-side-panel.mjs.map
587
+
588
+ //# sourceMappingURL=testgorilla-tgo-ui-components-side-panel.mjs.map