@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,416 +1,692 @@
1
- import { DOCUMENT, NgClass, NgTemplateOutlet, AsyncPipe, CommonModule } from '@angular/common';
2
- import * as i0 from '@angular/core';
3
- import { input, booleanAttribute, EventEmitter, signal, inject, DestroyRef, ViewChild, ViewChildren, Output, Input, Optional, Inject, ChangeDetectionStrategy, ViewEncapsulation, Component, NgModule } from '@angular/core';
4
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
5
- import { MatMenuTrigger, MatMenu, MatMenuItem, MatMenuModule } from '@angular/material/menu';
6
- import { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';
7
- import { startWith } from 'rxjs';
8
- import { ButtonComponent, ButtonComponentModule } from '@testgorilla/tgo-ui/components/button';
9
- import { EllipseTextDirective, UiTranslatePipe } from '@testgorilla/tgo-ui/components/core';
10
- import { IconComponent, IconComponentModule } from '@testgorilla/tgo-ui/components/icon';
11
- import * as i1 from '@angular/cdk/a11y';
12
- import { MatButtonModule } from '@angular/material/button';
13
-
1
+ import { AsyncPipe, CommonModule, DOCUMENT, NgClass, NgTemplateOutlet } from "@angular/common";
2
+ import * as i0 from "@angular/core";
3
+ import { ChangeDetectionStrategy, Component, DestroyRef, EventEmitter, Inject, Input, NgModule, Optional, Output, ViewChild, ViewChildren, ViewEncapsulation, booleanAttribute, inject, input, signal } from "@angular/core";
4
+ import { takeUntilDestroyed } from "@angular/core/rxjs-interop";
5
+ import { MatMenu, MatMenuItem, MatMenuModule, MatMenuTrigger } from "@angular/material/menu";
6
+ import { MatTooltip, MatTooltipModule } from "@angular/material/tooltip";
7
+ import { startWith } from "rxjs";
8
+ import { ButtonComponent, ButtonComponentModule } from "@testgorilla/tgo-ui/components/button";
9
+ import { EllipseTextDirective, UiTranslatePipe } from "@testgorilla/tgo-ui/components/core";
10
+ import { IconComponent, IconComponentModule } from "@testgorilla/tgo-ui/components/icon";
11
+ import * as i1 from "@angular/cdk/a11y";
12
+ import { MatButtonModule } from "@angular/material/button";
14
13
  const DEFAULT_MENU_CONFIG = {
15
- overlapTrigger: false,
16
- panelClass: '',
17
- xPosition: 'after',
18
- yPosition: 'below',
14
+ overlapTrigger: false,
15
+ panelClass: "",
16
+ xPosition: "after",
17
+ yPosition: "below"
19
18
  };
20
- class OverflowMenuComponent {
21
- get menuItemHasHovered() {
22
- return this.submenus.some(menu => menu.some(item => item.isHovered));
23
- }
24
- constructor(defaultAppTheme, focusMonitor, ngZone) {
25
- this.defaultAppTheme = defaultAppTheme;
26
- this.focusMonitor = focusMonitor;
27
- this.ngZone = ngZone;
28
- /**
29
- * Menu icon trigger
30
- *
31
- * @memberof OverflowMenuComponent
32
- */
33
- this.iconTrigger = 'Menu-ellipsis';
34
- /**
35
- * Label menu
36
- *
37
- * @memberof OverflowMenuComponent
38
- */
39
- this.menuLabel = '';
40
- /**
41
- *
42
- * Defines the application theme
43
- *
44
- * @type {ApplicationTheme}
45
- * @memberof OverflowMenuComponent
46
- */
47
- this.applicationTheme = 'light';
48
- this.testId = null;
49
- /**
50
- * A string representing the ARIA requirement for accessibility.
51
- * This attribute is used to indicate whether an input field is required for form submission.
52
- * @type {boolean}
53
- * @memberof OverflowMenuComponent
54
- */
55
- this.ariaRequired = false;
56
- /**
57
- * A string representing the ARIA requirement for accessibility.
58
- * This attribute is used to indicate whether an input for description.
59
- * @type {text}
60
- * @memberof OverflowMenuComponent
61
- */
62
- this.describedby = '';
63
- /**
64
- * Button variant for the overflow menu trigger
65
- * When null, uses the default icon rendering
66
- *
67
- * @type {ButtonColor | null}
68
- * @memberof OverflowMenuComponent
69
- */
70
- this.buttonVariant = null;
71
- /**
72
- * Button size for the overflow menu trigger
73
- *
74
- * @type {ButtonSize}
75
- * @memberof OverflowMenuComponent
76
- */
77
- this.buttonSize = 'medium';
78
- this.menuConfig = DEFAULT_MENU_CONFIG;
79
- /**
80
- * Selection semantics of the menu. 'single' renders every entry as a menuitemradio whose
81
- * aria-checked and right-aligned check come from the button's isSelected flag; 'none' keeps
82
- * plain menuitem entries.
83
- *
84
- * @type {OverflowMenuSelectionMode}
85
- * @memberof OverflowMenuComponent
86
- */
87
- this.selectionMode = input('none', ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
88
- /**
89
- * Element the dropdown is positioned against, instead of the trigger: an element, or a selector
90
- * resolved as the trigger's closest matching ancestor (e.g. `'ui-tag'` to open from the start of
91
- * the tag the trigger sits in). Read when the dropdown is first opened.
92
- *
93
- * @type {string | HTMLElement | null}
94
- * @memberof OverflowMenuComponent
95
- */
96
- this.menuAnchor = input(null, ...(ngDevMode ? [{ debugName: "menuAnchor" }] : /* istanbul ignore next */ []));
97
- /**
98
- * Makes the open dropdown as wide as its anchor (`menuAnchor`, or the trigger when none is set),
99
- * instead of sizing it to its content. Measured each time it opens.
100
- *
101
- * @type {boolean}
102
- * @default false
103
- * @memberof OverflowMenuComponent
104
- */
105
- this.shouldMatchAnchorWidth = input(false, { ...(ngDevMode ? { debugName: "shouldMatchAnchorWidth" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
106
- this.isDynamicMenu = false;
107
- this.withRemovableOption = false;
108
- this.selectItem = new EventEmitter();
109
- this.menuOpened = new EventEmitter();
110
- this.menuClosed = new EventEmitter();
111
- this.menuItems = [];
112
- this.submenus = [];
113
- this.isMenuRendered = signal(false, ...(ngDevMode ? [{ debugName: "isMenuRendered" }] : /* istanbul ignore next */ []));
114
- this.isMenuOpened = signal(false, ...(ngDevMode ? [{ debugName: "isMenuOpened" }] : /* istanbul ignore next */ []));
115
- this.isFocused = signal(false, ...(ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []));
116
- this.destroyRef = inject(DestroyRef);
117
- this.anchoredTriggers = new WeakSet();
118
- this.document = inject(DOCUMENT);
119
- this.trackByButton = (_, btn) => btn.action ?? btn.value ?? btn.label;
120
- if (defaultAppTheme) {
121
- this.applicationTheme = defaultAppTheme;
122
- }
123
- }
124
- ngOnInit() {
125
- this.createSubmenus(this.buttons, 's0', 1);
126
- this.reindex();
127
- }
128
- ngOnChanges(changes) {
129
- // Selection menus re-render on their own: the natural flow is to hand in a new buttons array
130
- // after a pick, and requiring isDynamicMenu for the check to move would be an untold coupling.
131
- if (changes['buttons'] && (this.isDynamicMenu || this.selectionMode() === 'single')) {
132
- this.resetSubmenus();
133
- this.createSubmenus(this.buttons, 's0', 1);
134
- this.reindex();
135
- }
136
- }
137
- ngAfterViewInit() {
138
- this.isMenuRendered.set(true);
139
- // The trigger renders after this hook (it waits on isMenuRendered), so anchor it once it appears.
140
- this.matTrigger.changes
141
- .pipe(startWith(this.matTrigger), takeUntilDestroyed(this.destroyRef))
142
- .subscribe(() => this.anchorTrigger(this.matTrigger.first));
143
- setTimeout(() => {
144
- this.focusMonitor
145
- .monitor(this.buttonElement)
146
- .pipe(takeUntilDestroyed(this.destroyRef))
147
- .subscribe(origin => this.ngZone.run(() => {
148
- if (origin === 'keyboard') {
149
- this.isFocused.set(true);
150
- }
151
- else {
152
- if (!this.isMenuOpened()) {
153
- this.isFocused.set(false);
154
- }
155
- }
156
- }));
157
- }, 300);
158
- }
159
- /**
160
- * MatMenuTrigger has no public way to position against another element: it takes its origin from
161
- * the protected `_getOverlayOrigin()` when it first creates the overlay. Overriding it on the root
162
- * trigger lets `menuAnchor` move the origin, falling back to the trigger itself.
163
- */
164
- anchorTrigger(trigger) {
165
- if (!trigger || this.anchoredTriggers.has(trigger)) {
166
- return;
167
- }
168
- this.anchoredTriggers.add(trigger);
169
- const anchorable = trigger;
170
- // eslint-disable-next-line no-underscore-dangle -- _getOverlayOrigin is MatMenuTrigger's protected origin hook
171
- const ownOrigin = anchorable._getOverlayOrigin.bind(trigger);
172
- // eslint-disable-next-line no-underscore-dangle -- see above
173
- anchorable._getOverlayOrigin = () => this.resolveMenuAnchor() ?? ownOrigin();
174
- }
175
- resolveMenuAnchor() {
176
- const anchor = this.menuAnchor();
177
- if (typeof anchor === 'string') {
178
- return this.buttonElement?.nativeElement.closest(anchor) ?? null;
179
- }
180
- return anchor;
181
- }
182
- /** Sizes the open panel to the anchor (or the trigger), overriding Material's 112–280px panel limits. */
183
- matchPanelToAnchorWidth() {
184
- if (!this.shouldMatchAnchorWidth()) {
185
- return;
186
- }
187
- const anchor = this.resolveMenuAnchor() ?? this.buttonElement?.nativeElement;
188
- const panelId = this.matmenus.first?.panelId;
189
- const panel = panelId ? this.document.getElementById(panelId) : null;
190
- if (!anchor || !panel) {
191
- return;
192
- }
193
- const width = `${anchor.getBoundingClientRect().width}px`;
194
- panel.style.width = width;
195
- panel.style.minWidth = width;
196
- panel.style.maxWidth = width;
197
- // The theme also caps the content at 340px; left alone, it would stop short of a wider panel.
198
- const content = panel.querySelector('.mat-mdc-menu-content');
199
- if (content) {
200
- content.style.maxWidth = 'none';
201
- }
202
- }
203
- /** Opens the dropdown programmatically, as if the trigger had been used. */
204
- openMenu() {
205
- this.matTrigger.first?.openMenu();
206
- }
207
- /** Closes the dropdown, whichever way it was opened. */
208
- closeMenu() {
209
- this.matTrigger.first?.closeMenu();
210
- }
211
- onSelectItem(event, value) {
212
- if (value) {
213
- this.selectItem.emit(value);
214
- }
215
- }
216
- onMenuOpened() {
217
- this.menuOpened.emit();
218
- this.isMenuOpened.set(true);
219
- this.matchPanelToAnchorWidth();
220
- if (this.isFocused()) {
221
- setTimeout(() => {
222
- // eslint-disable-next-line no-underscore-dangle -- _allItems is MatMenu's internal item query
223
- this.matmenus.first._allItems.first.focus('keyboard');
224
- }, 300);
225
- }
226
- }
227
- onMenuClosed() {
228
- this.isMenuOpened.set(false);
229
- this.menuClosed.emit();
230
- }
231
- onButtonFocus(button) {
232
- if (this.isFocused()) {
233
- button.isFocused = true;
234
- }
235
- }
236
- onButtonBlur(button) {
237
- button.isFocused = false;
238
- }
239
- onButtonClick(button, $event) {
240
- if (button.disabled) {
241
- $event.preventDefault();
242
- $event.stopPropagation();
243
- }
244
- else {
245
- this.onSelectItem($event, button.value);
246
- }
247
- }
248
- onSubmenuOpened() {
249
- this.isMenuOpened.set(!this.isMenuOpened);
250
- if (this.isFocused()) {
251
- setTimeout(() => {
252
- // eslint-disable-next-line no-underscore-dangle -- _allItems is MatMenu's internal item query
253
- this.matmenus.last._allItems.first.focus('keyboard');
254
- }, 300);
255
- }
256
- }
257
- onButtonHover(button, state) {
258
- button.isHovered = state;
259
- }
260
- getMenu(index) {
261
- return typeof index === 'number' && index >= 0 && this.matmenus
262
- ? (this.matmenus.find((x, i) => i === index) ?? null)
263
- : null;
264
- }
265
- reindex() {
266
- this.submenus.forEach((menu) => {
267
- menu.forEach((item) => {
268
- if (item.subMenu !== -1) {
269
- item.subMenu = this.menuItems.indexOf(`${item.action}`);
270
- }
271
- });
272
- });
273
- }
274
- resetSubmenus() {
275
- this.submenus = [];
276
- this.menuItems = [];
277
- }
278
- createSubmenus(menu, prefix, count) {
279
- this.menuItems.push(prefix);
280
- this.submenus.push(menu.map((item, index) => ({
281
- label: item.label,
282
- icon: item.icon,
283
- isDestructive: item.isDestructive,
284
- tooltipText: item.tooltipText,
285
- value: item.value,
286
- disabled: item.disabled,
287
- isSelected: item.isSelected,
288
- btnTemplate: item.btnTemplate,
289
- subMenu: item.subMenu ? 0 : -1,
290
- // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing -- an empty action falls back to a generated key
291
- action: item.action ? item.action : prefix + index,
292
- isTitleButton: item.isTitleButton,
293
- hideTitleButton: item.hideTitleButton,
294
- isPremium: item.isPremium,
295
- // The template reads these off the copy, so omitting them leaves the menu items' ARIA unset.
296
- ariaLabel: item.ariaLabel,
297
- describedby: item.describedby,
298
- testId: item.testId,
299
- })));
300
- menu.forEach((item, index) => {
301
- if (item.subMenu) {
302
- this.createSubmenus(item.subMenu, prefix + index, count + 1);
303
- }
304
- });
305
- }
306
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponent, deps: [{ token: 'CANOPYUI_DEFAULT_APPLICATION_THEME', optional: true }, { token: i1.FocusMonitor }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component }); }
307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.25", type: OverflowMenuComponent, isStandalone: true, selector: "ui-overflow-menu", inputs: { buttons: { classPropertyName: "buttons", publicName: "buttons", isSignal: false, isRequired: false, transformFunction: null }, iconTrigger: { classPropertyName: "iconTrigger", publicName: "iconTrigger", isSignal: false, isRequired: false, transformFunction: null }, menuLabel: { classPropertyName: "menuLabel", publicName: "menuLabel", isSignal: false, isRequired: false, transformFunction: null }, applicationTheme: { classPropertyName: "applicationTheme", publicName: "applicationTheme", isSignal: false, isRequired: false, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: false, isRequired: false, transformFunction: null }, testId: { classPropertyName: "testId", publicName: "testId", isSignal: false, isRequired: false, transformFunction: null }, ariaRequired: { classPropertyName: "ariaRequired", publicName: "ariaRequired", isSignal: false, isRequired: false, transformFunction: null }, describedby: { classPropertyName: "describedby", publicName: "describedby", isSignal: false, isRequired: false, transformFunction: null }, contentTemplateRef: { classPropertyName: "contentTemplateRef", publicName: "contentTemplateRef", isSignal: false, isRequired: false, transformFunction: null }, buttonVariant: { classPropertyName: "buttonVariant", publicName: "buttonVariant", isSignal: false, isRequired: false, transformFunction: null }, buttonSize: { classPropertyName: "buttonSize", publicName: "buttonSize", isSignal: false, isRequired: false, transformFunction: null }, menuConfig: { classPropertyName: "menuConfig", publicName: "menuConfig", isSignal: false, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, menuAnchor: { classPropertyName: "menuAnchor", publicName: "menuAnchor", isSignal: true, isRequired: false, transformFunction: null }, shouldMatchAnchorWidth: { classPropertyName: "shouldMatchAnchorWidth", publicName: "shouldMatchAnchorWidth", isSignal: true, isRequired: false, transformFunction: null }, isDynamicMenu: { classPropertyName: "isDynamicMenu", publicName: "isDynamicMenu", isSignal: false, isRequired: false, transformFunction: null }, withRemovableOption: { classPropertyName: "withRemovableOption", publicName: "withRemovableOption", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { selectItem: "selectItem", menuOpened: "menuOpened", menuClosed: "menuClosed" }, viewQueries: [{ propertyName: "buttonElement", first: true, predicate: ["buttonElement"], descendants: true }, { propertyName: "matmenus", predicate: MatMenu, descendants: true }, { propertyName: "matTrigger", predicate: MatMenuTrigger, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n @if (isMenuRendered()) {\n <button\n #buttonElement\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n [attr.data-testid]=\"testId\"\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n }\n\n <!-- Tracked by index so refreshing the buttons re-renders the rows without destroying an open\n mat-menu, whose trigger would otherwise be left holding a dead overlay. -->\n @for (menu of submenus; track $index) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n @for (button of menu; track trackByButton(id, button); let id = $index) {\n @if (button.btnTemplate) {\n <!-- Menu option by provided button template-->\n <ng-container\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n } @else if (withRemovableOption) {\n <!-- Simple menu option that can be removed dynamically -->\n <div class=\"menu-option\" [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\">\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}\n </span>\n @if (button.icon) {\n <ui-button\n variant=\"icon-button\"\n [applicationTheme]=\"applicationTheme\"\n [iconName]=\"button.icon\"\n [tooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [tooltipPosition]=\"'above'\"\n [size]=\"'medium'\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n (click)=\"onSelectItem($event, button.value)\"\n [testId]=\"button.testId ?? null\"\n [ariaLabel]=\"button.ariaLabel || button.label\"\n >\n </ui-button>\n }\n </div>\n } @else {\n <!-- Default non-removable menu option -->\n @if (button.isTitleButton && !button.hideTitleButton) {\n <div class=\"menu-title\">{{ button.label }}</div>\n }\n @if (!button.isTitleButton) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{\n 'is-destructive': button.isDestructive,\n disabled: button.disabled,\n 'overflow-menu-item-selectable': selectionMode() === 'single',\n }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n [role]=\"selectionMode() === 'single' ? 'menuitemradio' : 'menuitem'\"\n [attr.aria-checked]=\"selectionMode() === 'single' ? !!button.isSelected : null\"\n [attr.data-testid]=\"button.testId ?? null\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n @if (button.icon) {\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.disabled ? 'dark' : button.isDestructive ? 'red' : 'rebrand-black'\"\n ></ui-icon>\n }\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n @if (selectionMode() === 'single' && button.isSelected) {\n <ui-icon\n class=\"overflow-menu-selected-check\"\n [name]=\"'Check-small-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'16'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n @if (button.isPremium) {\n <ui-icon\n [name]=\"'Premium-circle-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n class=\"premium-icon\"\n ></ui-icon>\n }\n </button>\n }\n }\n }\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\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}.overflow-menu-container ui-icon,.overflow-menu .mat-mdc-menu-item ui-icon{pointer-events:none}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer;margin:0}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%;padding:1px 8px 0 6px}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-title{padding:16px;font-weight:700}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-option{padding:16px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}.premium-icon{margin-left:8px;flex-shrink:0}.overflow-menu-item-selectable .mat-mdc-menu-item-text{display:flex;align-items:center;gap:8px}.overflow-menu-selected-check{margin-left:auto;flex-shrink:0}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: EllipseTextDirective, selector: "[uiEllipseText]", inputs: ["isMultiline", "maxDiffPixels", "refresh"], outputs: ["onChangeTextState"] }, { kind: "component", type: MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: UiTranslatePipe, name: "uiTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
308
- }
309
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponent, decorators: [{
310
- type: Component,
311
- args: [{ selector: 'ui-overflow-menu', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
312
- NgClass,
313
- MatMenuTrigger,
314
- MatTooltip,
315
- ButtonComponent,
316
- NgTemplateOutlet,
317
- IconComponent,
318
- MatMenu,
319
- EllipseTextDirective,
320
- MatMenuItem,
321
- AsyncPipe,
322
- UiTranslatePipe,
323
- ], template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n @if (isMenuRendered()) {\n <button\n #buttonElement\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n [attr.data-testid]=\"testId\"\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n }\n\n <!-- Tracked by index so refreshing the buttons re-renders the rows without destroying an open\n mat-menu, whose trigger would otherwise be left holding a dead overlay. -->\n @for (menu of submenus; track $index) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n @for (button of menu; track trackByButton(id, button); let id = $index) {\n @if (button.btnTemplate) {\n <!-- Menu option by provided button template-->\n <ng-container\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n } @else if (withRemovableOption) {\n <!-- Simple menu option that can be removed dynamically -->\n <div class=\"menu-option\" [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\">\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}\n </span>\n @if (button.icon) {\n <ui-button\n variant=\"icon-button\"\n [applicationTheme]=\"applicationTheme\"\n [iconName]=\"button.icon\"\n [tooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [tooltipPosition]=\"'above'\"\n [size]=\"'medium'\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n (click)=\"onSelectItem($event, button.value)\"\n [testId]=\"button.testId ?? null\"\n [ariaLabel]=\"button.ariaLabel || button.label\"\n >\n </ui-button>\n }\n </div>\n } @else {\n <!-- Default non-removable menu option -->\n @if (button.isTitleButton && !button.hideTitleButton) {\n <div class=\"menu-title\">{{ button.label }}</div>\n }\n @if (!button.isTitleButton) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{\n 'is-destructive': button.isDestructive,\n disabled: button.disabled,\n 'overflow-menu-item-selectable': selectionMode() === 'single',\n }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n [role]=\"selectionMode() === 'single' ? 'menuitemradio' : 'menuitem'\"\n [attr.aria-checked]=\"selectionMode() === 'single' ? !!button.isSelected : null\"\n [attr.data-testid]=\"button.testId ?? null\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n @if (button.icon) {\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.disabled ? 'dark' : button.isDestructive ? 'red' : 'rebrand-black'\"\n ></ui-icon>\n }\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n @if (selectionMode() === 'single' && button.isSelected) {\n <ui-icon\n class=\"overflow-menu-selected-check\"\n [name]=\"'Check-small-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'16'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n @if (button.isPremium) {\n <ui-icon\n [name]=\"'Premium-circle-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n class=\"premium-icon\"\n ></ui-icon>\n }\n </button>\n }\n }\n }\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\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}.overflow-menu-container ui-icon,.overflow-menu .mat-mdc-menu-item ui-icon{pointer-events:none}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer;margin:0}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%;padding:1px 8px 0 6px}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-title{padding:16px;font-weight:700}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-option{padding:16px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}.premium-icon{margin-left:8px;flex-shrink:0}.overflow-menu-item-selectable .mat-mdc-menu-item-text{display:flex;align-items:center;gap:8px}.overflow-menu-selected-check{margin-left:auto;flex-shrink:0}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"] }]
324
- }], ctorParameters: () => [{ type: undefined, decorators: [{
325
- type: Optional
326
- }, {
327
- type: Inject,
328
- args: ['CANOPYUI_DEFAULT_APPLICATION_THEME']
329
- }] }, { type: i1.FocusMonitor }, { type: i0.NgZone }], propDecorators: { buttons: [{
330
- type: Input
331
- }], iconTrigger: [{
332
- type: Input
333
- }], menuLabel: [{
334
- type: Input
335
- }], applicationTheme: [{
336
- type: Input
337
- }], ariaLabel: [{
338
- type: Input
339
- }], testId: [{
340
- type: Input
341
- }], ariaRequired: [{
342
- type: Input
343
- }], describedby: [{
344
- type: Input
345
- }], contentTemplateRef: [{
346
- type: Input
347
- }], buttonVariant: [{
348
- type: Input
349
- }], buttonSize: [{
350
- type: Input
351
- }], menuConfig: [{
352
- type: Input
353
- }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], menuAnchor: [{ type: i0.Input, args: [{ isSignal: true, alias: "menuAnchor", required: false }] }], shouldMatchAnchorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "shouldMatchAnchorWidth", required: false }] }], isDynamicMenu: [{
354
- type: Input
355
- }], withRemovableOption: [{
356
- type: Input
357
- }], selectItem: [{
358
- type: Output
359
- }], menuOpened: [{
360
- type: Output
361
- }], menuClosed: [{
362
- type: Output
363
- }], matmenus: [{
364
- type: ViewChildren,
365
- args: [MatMenu]
366
- }], matTrigger: [{
367
- type: ViewChildren,
368
- args: [MatMenuTrigger]
369
- }], buttonElement: [{
370
- type: ViewChild,
371
- args: ['buttonElement']
372
- }] } });
373
-
374
- class OverflowMenuComponentModule {
375
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponentModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
376
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponentModule, imports: [CommonModule,
377
- ButtonComponentModule,
378
- IconComponentModule,
379
- MatMenuModule,
380
- MatButtonModule,
381
- MatTooltipModule,
382
- EllipseTextDirective,
383
- UiTranslatePipe,
384
- OverflowMenuComponent], exports: [OverflowMenuComponent] }); }
385
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponentModule, imports: [CommonModule,
386
- ButtonComponentModule,
387
- IconComponentModule,
388
- MatMenuModule,
389
- MatButtonModule,
390
- MatTooltipModule,
391
- OverflowMenuComponent] }); }
392
- }
393
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: OverflowMenuComponentModule, decorators: [{
394
- type: NgModule,
395
- args: [{
396
- imports: [
397
- CommonModule,
398
- ButtonComponentModule,
399
- IconComponentModule,
400
- MatMenuModule,
401
- MatButtonModule,
402
- MatTooltipModule,
403
- EllipseTextDirective,
404
- UiTranslatePipe,
405
- OverflowMenuComponent,
406
- ],
407
- exports: [OverflowMenuComponent],
408
- }]
409
- }] });
410
-
411
- /**
412
- * Generated bundle index. Do not edit.
413
- */
414
-
19
+ var OverflowMenuComponent = class OverflowMenuComponent {
20
+ get menuItemHasHovered() {
21
+ return this.submenus.some((menu) => menu.some((item) => item.isHovered));
22
+ }
23
+ constructor(defaultAppTheme, focusMonitor, ngZone) {
24
+ this.defaultAppTheme = defaultAppTheme;
25
+ this.focusMonitor = focusMonitor;
26
+ this.ngZone = ngZone;
27
+ this.iconTrigger = "Menu-ellipsis";
28
+ this.menuLabel = "";
29
+ this.applicationTheme = "light";
30
+ this.testId = null;
31
+ this.ariaRequired = false;
32
+ this.describedby = "";
33
+ this.buttonVariant = null;
34
+ this.buttonSize = "medium";
35
+ this.menuConfig = DEFAULT_MENU_CONFIG;
36
+ this.selectionMode = input("none", ...ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []);
37
+ this.menuAnchor = input(null, ...ngDevMode ? [{ debugName: "menuAnchor" }] : /* istanbul ignore next */ []);
38
+ this.shouldMatchAnchorWidth = input(false, {
39
+ ...ngDevMode ? { debugName: "shouldMatchAnchorWidth" } : /* istanbul ignore next */ {},
40
+ transform: booleanAttribute
41
+ });
42
+ this.isDynamicMenu = false;
43
+ this.withRemovableOption = false;
44
+ this.selectItem = new EventEmitter();
45
+ this.menuOpened = new EventEmitter();
46
+ this.menuClosed = new EventEmitter();
47
+ this.menuItems = [];
48
+ this.submenus = [];
49
+ this.isMenuRendered = signal(false, ...ngDevMode ? [{ debugName: "isMenuRendered" }] : /* istanbul ignore next */ []);
50
+ this.isMenuOpened = signal(false, ...ngDevMode ? [{ debugName: "isMenuOpened" }] : /* istanbul ignore next */ []);
51
+ this.isFocused = signal(false, ...ngDevMode ? [{ debugName: "isFocused" }] : /* istanbul ignore next */ []);
52
+ this.destroyRef = inject(DestroyRef);
53
+ this.anchoredTriggers = /* @__PURE__ */ new WeakSet();
54
+ this.document = inject(DOCUMENT);
55
+ this.trackByButton = (_, btn) => btn.action ?? btn.value ?? btn.label;
56
+ if (defaultAppTheme) this.applicationTheme = defaultAppTheme;
57
+ }
58
+ ngOnInit() {
59
+ this.createSubmenus(this.buttons, "s0", 1);
60
+ this.reindex();
61
+ }
62
+ ngOnChanges(changes) {
63
+ if (changes["buttons"] && (this.isDynamicMenu || this.selectionMode() === "single")) {
64
+ this.resetSubmenus();
65
+ this.createSubmenus(this.buttons, "s0", 1);
66
+ this.reindex();
67
+ }
68
+ }
69
+ ngAfterViewInit() {
70
+ this.isMenuRendered.set(true);
71
+ this.matTrigger.changes.pipe(startWith(this.matTrigger), takeUntilDestroyed(this.destroyRef)).subscribe(() => this.anchorTrigger(this.matTrigger.first));
72
+ setTimeout(() => {
73
+ this.focusMonitor.monitor(this.buttonElement).pipe(takeUntilDestroyed(this.destroyRef)).subscribe((origin) => this.ngZone.run(() => {
74
+ if (origin === "keyboard") this.isFocused.set(true);
75
+ else if (!this.isMenuOpened()) this.isFocused.set(false);
76
+ }));
77
+ }, 300);
78
+ }
79
+ anchorTrigger(trigger) {
80
+ if (!trigger || this.anchoredTriggers.has(trigger)) return;
81
+ this.anchoredTriggers.add(trigger);
82
+ const anchorable = trigger;
83
+ const ownOrigin = anchorable._getOverlayOrigin.bind(trigger);
84
+ anchorable._getOverlayOrigin = () => this.resolveMenuAnchor() ?? ownOrigin();
85
+ }
86
+ resolveMenuAnchor() {
87
+ const anchor = this.menuAnchor();
88
+ if (typeof anchor === "string") return this.buttonElement?.nativeElement.closest(anchor) ?? null;
89
+ return anchor;
90
+ }
91
+ matchPanelToAnchorWidth() {
92
+ if (!this.shouldMatchAnchorWidth()) return;
93
+ const anchor = this.resolveMenuAnchor() ?? this.buttonElement?.nativeElement;
94
+ const panelId = this.matmenus.first?.panelId;
95
+ const panel = panelId ? this.document.getElementById(panelId) : null;
96
+ if (!anchor || !panel) return;
97
+ const width = `${anchor.getBoundingClientRect().width}px`;
98
+ panel.style.width = width;
99
+ panel.style.minWidth = width;
100
+ panel.style.maxWidth = width;
101
+ const content = panel.querySelector(".mat-mdc-menu-content");
102
+ if (content) content.style.maxWidth = "none";
103
+ }
104
+ openMenu() {
105
+ this.matTrigger.first?.openMenu();
106
+ }
107
+ closeMenu() {
108
+ this.matTrigger.first?.closeMenu();
109
+ }
110
+ onSelectItem(event, value) {
111
+ if (value) this.selectItem.emit(value);
112
+ }
113
+ onMenuOpened() {
114
+ this.menuOpened.emit();
115
+ this.isMenuOpened.set(true);
116
+ this.matchPanelToAnchorWidth();
117
+ if (this.isFocused()) setTimeout(() => {
118
+ this.matmenus.first._allItems.first.focus("keyboard");
119
+ }, 300);
120
+ }
121
+ onMenuClosed() {
122
+ this.isMenuOpened.set(false);
123
+ this.menuClosed.emit();
124
+ }
125
+ onButtonFocus(button) {
126
+ if (this.isFocused()) button.isFocused = true;
127
+ }
128
+ onButtonBlur(button) {
129
+ button.isFocused = false;
130
+ }
131
+ onButtonClick(button, $event) {
132
+ if (button.disabled) {
133
+ $event.preventDefault();
134
+ $event.stopPropagation();
135
+ } else this.onSelectItem($event, button.value);
136
+ }
137
+ onSubmenuOpened() {
138
+ this.isMenuOpened.set(!this.isMenuOpened);
139
+ if (this.isFocused()) setTimeout(() => {
140
+ this.matmenus.last._allItems.first.focus("keyboard");
141
+ }, 300);
142
+ }
143
+ onButtonHover(button, state) {
144
+ button.isHovered = state;
145
+ }
146
+ getMenu(index) {
147
+ return typeof index === "number" && index >= 0 && this.matmenus ? this.matmenus.find((x, i) => i === index) ?? null : null;
148
+ }
149
+ reindex() {
150
+ this.submenus.forEach((menu) => {
151
+ menu.forEach((item) => {
152
+ if (item.subMenu !== -1) item.subMenu = this.menuItems.indexOf(`${item.action}`);
153
+ });
154
+ });
155
+ }
156
+ resetSubmenus() {
157
+ this.submenus = [];
158
+ this.menuItems = [];
159
+ }
160
+ createSubmenus(menu, prefix, count) {
161
+ this.menuItems.push(prefix);
162
+ this.submenus.push(menu.map((item, index) => ({
163
+ label: item.label,
164
+ icon: item.icon,
165
+ isDestructive: item.isDestructive,
166
+ tooltipText: item.tooltipText,
167
+ value: item.value,
168
+ disabled: item.disabled,
169
+ isSelected: item.isSelected,
170
+ btnTemplate: item.btnTemplate,
171
+ subMenu: item.subMenu ? 0 : -1,
172
+ action: item.action ? item.action : prefix + index,
173
+ isTitleButton: item.isTitleButton,
174
+ hideTitleButton: item.hideTitleButton,
175
+ isPremium: item.isPremium,
176
+ ariaLabel: item.ariaLabel,
177
+ describedby: item.describedby,
178
+ testId: item.testId
179
+ })));
180
+ menu.forEach((item, index) => {
181
+ if (item.subMenu) this.createSubmenus(item.subMenu, prefix + index, count + 1);
182
+ });
183
+ }
184
+ static {
185
+ this.ɵfac = i0.ɵɵngDeclareFactory({
186
+ minVersion: "12.0.0",
187
+ version: "22.2.4",
188
+ ngImport: i0,
189
+ type: OverflowMenuComponent,
190
+ deps: [
191
+ {
192
+ token: "CANOPYUI_DEFAULT_APPLICATION_THEME",
193
+ optional: true
194
+ },
195
+ { token: i1.FocusMonitor },
196
+ { token: i0.NgZone }
197
+ ],
198
+ target: i0.ɵɵFactoryTarget.Component
199
+ });
200
+ }
201
+ static {
202
+ this.ɵcmp = i0.ɵɵngDeclareComponent({
203
+ minVersion: "17.0.0",
204
+ version: "22.2.4",
205
+ type: OverflowMenuComponent,
206
+ isStandalone: true,
207
+ selector: "ui-overflow-menu",
208
+ inputs: {
209
+ buttons: {
210
+ classPropertyName: "buttons",
211
+ publicName: "buttons",
212
+ isSignal: false,
213
+ isRequired: false,
214
+ transformFunction: null
215
+ },
216
+ iconTrigger: {
217
+ classPropertyName: "iconTrigger",
218
+ publicName: "iconTrigger",
219
+ isSignal: false,
220
+ isRequired: false,
221
+ transformFunction: null
222
+ },
223
+ menuLabel: {
224
+ classPropertyName: "menuLabel",
225
+ publicName: "menuLabel",
226
+ isSignal: false,
227
+ isRequired: false,
228
+ transformFunction: null
229
+ },
230
+ applicationTheme: {
231
+ classPropertyName: "applicationTheme",
232
+ publicName: "applicationTheme",
233
+ isSignal: false,
234
+ isRequired: false,
235
+ transformFunction: null
236
+ },
237
+ ariaLabel: {
238
+ classPropertyName: "ariaLabel",
239
+ publicName: "ariaLabel",
240
+ isSignal: false,
241
+ isRequired: false,
242
+ transformFunction: null
243
+ },
244
+ testId: {
245
+ classPropertyName: "testId",
246
+ publicName: "testId",
247
+ isSignal: false,
248
+ isRequired: false,
249
+ transformFunction: null
250
+ },
251
+ ariaRequired: {
252
+ classPropertyName: "ariaRequired",
253
+ publicName: "ariaRequired",
254
+ isSignal: false,
255
+ isRequired: false,
256
+ transformFunction: null
257
+ },
258
+ describedby: {
259
+ classPropertyName: "describedby",
260
+ publicName: "describedby",
261
+ isSignal: false,
262
+ isRequired: false,
263
+ transformFunction: null
264
+ },
265
+ contentTemplateRef: {
266
+ classPropertyName: "contentTemplateRef",
267
+ publicName: "contentTemplateRef",
268
+ isSignal: false,
269
+ isRequired: false,
270
+ transformFunction: null
271
+ },
272
+ buttonVariant: {
273
+ classPropertyName: "buttonVariant",
274
+ publicName: "buttonVariant",
275
+ isSignal: false,
276
+ isRequired: false,
277
+ transformFunction: null
278
+ },
279
+ buttonSize: {
280
+ classPropertyName: "buttonSize",
281
+ publicName: "buttonSize",
282
+ isSignal: false,
283
+ isRequired: false,
284
+ transformFunction: null
285
+ },
286
+ menuConfig: {
287
+ classPropertyName: "menuConfig",
288
+ publicName: "menuConfig",
289
+ isSignal: false,
290
+ isRequired: false,
291
+ transformFunction: null
292
+ },
293
+ selectionMode: {
294
+ classPropertyName: "selectionMode",
295
+ publicName: "selectionMode",
296
+ isSignal: true,
297
+ isRequired: false,
298
+ transformFunction: null
299
+ },
300
+ menuAnchor: {
301
+ classPropertyName: "menuAnchor",
302
+ publicName: "menuAnchor",
303
+ isSignal: true,
304
+ isRequired: false,
305
+ transformFunction: null
306
+ },
307
+ shouldMatchAnchorWidth: {
308
+ classPropertyName: "shouldMatchAnchorWidth",
309
+ publicName: "shouldMatchAnchorWidth",
310
+ isSignal: true,
311
+ isRequired: false,
312
+ transformFunction: null
313
+ },
314
+ isDynamicMenu: {
315
+ classPropertyName: "isDynamicMenu",
316
+ publicName: "isDynamicMenu",
317
+ isSignal: false,
318
+ isRequired: false,
319
+ transformFunction: null
320
+ },
321
+ withRemovableOption: {
322
+ classPropertyName: "withRemovableOption",
323
+ publicName: "withRemovableOption",
324
+ isSignal: false,
325
+ isRequired: false,
326
+ transformFunction: null
327
+ }
328
+ },
329
+ outputs: {
330
+ selectItem: "selectItem",
331
+ menuOpened: "menuOpened",
332
+ menuClosed: "menuClosed"
333
+ },
334
+ viewQueries: [
335
+ {
336
+ propertyName: "buttonElement",
337
+ first: true,
338
+ predicate: ["buttonElement"],
339
+ descendants: true
340
+ },
341
+ {
342
+ propertyName: "matmenus",
343
+ predicate: MatMenu,
344
+ descendants: true
345
+ },
346
+ {
347
+ propertyName: "matTrigger",
348
+ predicate: MatMenuTrigger,
349
+ descendants: true
350
+ }
351
+ ],
352
+ usesOnChanges: true,
353
+ ngImport: i0,
354
+ template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n @if (isMenuRendered()) {\n <button\n #buttonElement\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n [attr.data-testid]=\"testId\"\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n }\n\n <!-- Tracked by index so refreshing the buttons re-renders the rows without destroying an open\n mat-menu, whose trigger would otherwise be left holding a dead overlay. -->\n @for (menu of submenus; track $index) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n @for (button of menu; track trackByButton(id, button); let id = $index) {\n @if (button.btnTemplate) {\n <!-- Menu option by provided button template-->\n <ng-container\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n } @else if (withRemovableOption) {\n <!-- Simple menu option that can be removed dynamically -->\n <div class=\"menu-option\" [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\">\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}\n </span>\n @if (button.icon) {\n <ui-button\n variant=\"icon-button\"\n [applicationTheme]=\"applicationTheme\"\n [iconName]=\"button.icon\"\n [tooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [tooltipPosition]=\"'above'\"\n [size]=\"'medium'\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n (click)=\"onSelectItem($event, button.value)\"\n [testId]=\"button.testId ?? null\"\n [ariaLabel]=\"button.ariaLabel || button.label\"\n >\n </ui-button>\n }\n </div>\n } @else {\n <!-- Default non-removable menu option -->\n @if (button.isTitleButton && !button.hideTitleButton) {\n <div class=\"menu-title\">{{ button.label }}</div>\n }\n @if (!button.isTitleButton) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{\n 'is-destructive': button.isDestructive,\n disabled: button.disabled,\n 'overflow-menu-item-selectable': selectionMode() === 'single',\n }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n [role]=\"selectionMode() === 'single' ? 'menuitemradio' : 'menuitem'\"\n [attr.aria-checked]=\"selectionMode() === 'single' ? !!button.isSelected : null\"\n [attr.data-testid]=\"button.testId ?? null\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n @if (button.icon) {\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.disabled ? 'dark' : button.isDestructive ? 'red' : 'rebrand-black'\"\n ></ui-icon>\n }\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n @if (selectionMode() === 'single' && button.isSelected) {\n <ui-icon\n class=\"overflow-menu-selected-check\"\n [name]=\"'Check-small-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'16'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n @if (button.isPremium) {\n <ui-icon\n [name]=\"'Premium-circle-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n class=\"premium-icon\"\n ></ui-icon>\n }\n </button>\n }\n }\n }\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n",
355
+ 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}.overflow-menu-container ui-icon,.overflow-menu .mat-mdc-menu-item ui-icon{pointer-events:none}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer;margin:0}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%;padding:1px 8px 0 6px}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-title{padding:16px;font-weight:700}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-option{padding:16px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}.premium-icon{margin-left:8px;flex-shrink:0}.overflow-menu-item-selectable .mat-mdc-menu-item-text{display:flex;align-items:center;gap:8px}.overflow-menu-selected-check{margin-left:auto;flex-shrink:0}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"],
356
+ dependencies: [
357
+ {
358
+ kind: "directive",
359
+ type: NgClass,
360
+ selector: "[ngClass]",
361
+ inputs: ["class", "ngClass"]
362
+ },
363
+ {
364
+ kind: "directive",
365
+ type: MatMenuTrigger,
366
+ selector: "[mat-menu-trigger-for], [matMenuTriggerFor]",
367
+ inputs: [
368
+ "mat-menu-trigger-for",
369
+ "matMenuTriggerFor",
370
+ "matMenuTriggerData",
371
+ "matMenuTriggerRestoreFocus"
372
+ ],
373
+ outputs: [
374
+ "menuOpened",
375
+ "onMenuOpen",
376
+ "menuClosed",
377
+ "onMenuClose"
378
+ ],
379
+ exportAs: ["matMenuTrigger"]
380
+ },
381
+ {
382
+ kind: "directive",
383
+ type: MatTooltip,
384
+ selector: "[matTooltip]",
385
+ inputs: [
386
+ "matTooltipPosition",
387
+ "matTooltipPositionAtOrigin",
388
+ "matTooltipDisabled",
389
+ "matTooltipShowDelay",
390
+ "matTooltipHideDelay",
391
+ "matTooltipTouchGestures",
392
+ "matTooltip",
393
+ "matTooltipClass"
394
+ ],
395
+ exportAs: ["matTooltip"]
396
+ },
397
+ {
398
+ kind: "component",
399
+ type: ButtonComponent,
400
+ selector: "ui-button",
401
+ inputs: [
402
+ "size",
403
+ "variant",
404
+ "label",
405
+ "iconPosition",
406
+ "justIcon",
407
+ "iconName",
408
+ "trailingIconName",
409
+ "trailingIconFilled",
410
+ "disabled",
411
+ "loading",
412
+ "loadingWithLabel",
413
+ "fullWidth",
414
+ "url",
415
+ "urlTarget",
416
+ "value",
417
+ "tooltip",
418
+ "isPremium",
419
+ "type",
420
+ "companyColor",
421
+ "buttonBadgeConfig",
422
+ "applicationTheme",
423
+ "disabledScaleOnClick",
424
+ "ariaLabel",
425
+ "ariaExpanded",
426
+ "ariaControls",
427
+ "ariaPressed",
428
+ "ariaRequired",
429
+ "ariaLabelledby",
430
+ "ariaDescribedby",
431
+ "preventDefault",
432
+ "hasBackground",
433
+ "tooltipPosition",
434
+ "role",
435
+ "iconFilled",
436
+ "testId"
437
+ ],
438
+ outputs: ["buttonClickEvent", "buttonHoverEvent"]
439
+ },
440
+ {
441
+ kind: "directive",
442
+ type: NgTemplateOutlet,
443
+ selector: "[ngTemplateOutlet]",
444
+ inputs: [
445
+ "ngTemplateOutletContext",
446
+ "ngTemplateOutlet",
447
+ "ngTemplateOutletInjector"
448
+ ]
449
+ },
450
+ {
451
+ kind: "component",
452
+ type: IconComponent,
453
+ selector: "ui-icon",
454
+ inputs: [
455
+ "size",
456
+ "cssClass",
457
+ "name",
458
+ "color",
459
+ "filled",
460
+ "toggleIconStyle",
461
+ "applicationTheme",
462
+ "useFullIconName"
463
+ ]
464
+ },
465
+ {
466
+ kind: "component",
467
+ type: MatMenu,
468
+ selector: "mat-menu",
469
+ inputs: [
470
+ "backdropClass",
471
+ "aria-label",
472
+ "aria-labelledby",
473
+ "aria-describedby",
474
+ "xPosition",
475
+ "yPosition",
476
+ "overlapTrigger",
477
+ "hasBackdrop",
478
+ "class",
479
+ "classList"
480
+ ],
481
+ outputs: ["closed", "close"],
482
+ exportAs: ["matMenu"]
483
+ },
484
+ {
485
+ kind: "directive",
486
+ type: EllipseTextDirective,
487
+ selector: "[uiEllipseText]",
488
+ inputs: [
489
+ "isMultiline",
490
+ "maxDiffPixels",
491
+ "refresh"
492
+ ],
493
+ outputs: ["onChangeTextState"]
494
+ },
495
+ {
496
+ kind: "component",
497
+ type: MatMenuItem,
498
+ selector: "[mat-menu-item]",
499
+ inputs: [
500
+ "role",
501
+ "disabled",
502
+ "disabledInteractive",
503
+ "disableRipple"
504
+ ],
505
+ exportAs: ["matMenuItem"]
506
+ },
507
+ {
508
+ kind: "pipe",
509
+ type: AsyncPipe,
510
+ name: "async"
511
+ },
512
+ {
513
+ kind: "pipe",
514
+ type: UiTranslatePipe,
515
+ name: "uiTranslate"
516
+ }
517
+ ],
518
+ changeDetection: i0.ChangeDetectionStrategy.OnPush,
519
+ encapsulation: i0.ViewEncapsulation.None
520
+ });
521
+ }
522
+ };
523
+ i0.ɵɵngDeclareClassMetadata({
524
+ minVersion: "12.0.0",
525
+ version: "22.2.4",
526
+ ngImport: i0,
527
+ type: OverflowMenuComponent,
528
+ decorators: [{
529
+ type: Component,
530
+ args: [{
531
+ selector: "ui-overflow-menu",
532
+ encapsulation: ViewEncapsulation.None,
533
+ changeDetection: ChangeDetectionStrategy.OnPush,
534
+ imports: [
535
+ NgClass,
536
+ MatMenuTrigger,
537
+ MatTooltip,
538
+ ButtonComponent,
539
+ NgTemplateOutlet,
540
+ IconComponent,
541
+ MatMenu,
542
+ EllipseTextDirective,
543
+ MatMenuItem,
544
+ AsyncPipe,
545
+ UiTranslatePipe
546
+ ],
547
+ template: "<div class=\"overflow-menu-container\" [attr.theme]=\"applicationTheme\">\n @if (isMenuRendered()) {\n <button\n #buttonElement\n [ngClass]=\"{\n 'icon-button': !contentTemplateRef && !buttonVariant,\n 'content-template': contentTemplateRef,\n 'no-hover': buttonVariant,\n }\"\n [matMenuTriggerFor]=\"matmenus.first\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-required]=\"ariaRequired\"\n [attr.aria-describedby]=\"'describedby'\"\n [attr.aria-haspopup]=\"true\"\n [attr.aria-expanded]=\"isMenuOpened()\"\n [attr.data-testid]=\"testId\"\n (menuOpened)=\"onMenuOpened()\"\n (menuClosed)=\"onMenuClosed()\"\n class=\"overflow-menu-opener\"\n [matTooltip]=\"menuLabel\"\n >\n <span [id]=\"'describedby'\" [style.display]=\"'none'\">{{ describedby }}</span>\n @if (buttonVariant) {\n <ui-button\n [variant]=\"buttonVariant\"\n [justIcon]=\"true\"\n [iconName]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [disabled]=\"false\"\n [size]=\"buttonSize\"\n >\n </ui-button>\n } @else if (contentTemplateRef) {\n <ng-container [ngTemplateOutlet]=\"contentTemplateRef\"></ng-container>\n } @else {\n <ui-icon\n [name]=\"iconTrigger\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n </button>\n }\n\n <!-- Tracked by index so refreshing the buttons re-renders the rows without destroying an open\n mat-menu, whose trigger would otherwise be left holding a dead overlay. -->\n @for (menu of submenus; track $index) {\n <mat-menu\n [xPosition]=\"menuConfig.xPosition\"\n [yPosition]=\"menuConfig.yPosition\"\n #matMenu\n [class]=\"'overflow-menu ' + menuConfig.panelClass\"\n [overlapTrigger]=\"menuConfig.overlapTrigger\"\n backdropClass=\"overflow-menu-backdrop\"\n >\n @for (button of menu; track trackByButton(id, button); let id = $index) {\n @if (button.btnTemplate) {\n <!-- Menu option by provided button template-->\n <ng-container\n [ngTemplateOutlet]=\"button.btnTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: button }\"\n ></ng-container>\n } @else if (withRemovableOption) {\n <!-- Simple menu option that can be removed dynamically -->\n <div class=\"menu-option\" [ngClass]=\"{ 'is-destructive': button.isDestructive, disabled: button.disabled }\">\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}\n </span>\n @if (button.icon) {\n <ui-button\n variant=\"icon-button\"\n [applicationTheme]=\"applicationTheme\"\n [iconName]=\"button.icon\"\n [tooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [tooltipPosition]=\"'above'\"\n [size]=\"'medium'\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n (click)=\"onSelectItem($event, button.value)\"\n [testId]=\"button.testId ?? null\"\n [ariaLabel]=\"button.ariaLabel || button.label\"\n >\n </ui-button>\n }\n </div>\n } @else {\n <!-- Default non-removable menu option -->\n @if (button.isTitleButton && !button.hideTitleButton) {\n <div class=\"menu-title\">{{ button.label }}</div>\n }\n @if (!button.isTitleButton) {\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"getMenu(button.subMenu)\"\n (menuOpened)=\"onSubmenuOpened()\"\n (focus)=\"onButtonFocus(button)\"\n (blur)=\"onButtonBlur(button)\"\n (mouseenter)=\"onButtonHover(button, true)\"\n (mouseleave)=\"onButtonHover(button, false)\"\n [ngClass]=\"{\n 'is-destructive': button.isDestructive,\n disabled: button.disabled,\n 'overflow-menu-item-selectable': selectionMode() === 'single',\n }\"\n disableRipple\n (click)=\"onButtonClick(button, $event)\"\n [matTooltip]=\"button.tooltipText ? button.tooltipText : button.isTextEllipsed ? button.label : ''\"\n [attr.aria-labelledby]=\"'labelledby-' + button.label + id\"\n [attr.aria-describedby]=\"'describedby-' + button.label + id\"\n [attr.aria-label]=\"button.ariaLabel || null\"\n [role]=\"selectionMode() === 'single' ? 'menuitemradio' : 'menuitem'\"\n [attr.aria-checked]=\"selectionMode() === 'single' ? !!button.isSelected : null\"\n [attr.data-testid]=\"button.testId ?? null\"\n matTooltipPosition=\"right\"\n >\n <span [id]=\"'describedby-' + button.label + id\" [style.display]=\"'none'\">\n {{\n button.disabled\n ? ('MENU.MENUITEM_DISABLED' | uiTranslate | async) + ' ' + (button.describedby || '')\n : button.describedby\n }}\n </span>\n @if (button.icon) {\n <ui-icon\n [name]=\"button.icon\"\n [toggleIconStyle]=\"true\"\n [filled]=\"\n button.disabled ? false : button.isHovered ? true : menuItemHasHovered ? false : !!button.isFocused\n \"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n [color]=\"button.disabled ? 'dark' : button.isDestructive ? 'red' : 'rebrand-black'\"\n ></ui-icon>\n }\n <span\n [id]=\"'labelledby-' + button.label + id\"\n class=\"label\"\n uiEllipseText\n [refresh]=\"isMenuOpened()\"\n [maxDiffPixels]=\"1\"\n [isMultiline]=\"true\"\n (onChangeTextState)=\"button.isTextEllipsed = $event\"\n >{{ button.label }}</span\n >\n @if (selectionMode() === 'single' && button.isSelected) {\n <ui-icon\n class=\"overflow-menu-selected-check\"\n [name]=\"'Check-small-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'16'\"\n [color]=\"'rebrand-black'\"\n ></ui-icon>\n }\n @if (button.isPremium) {\n <ui-icon\n [name]=\"'Premium-circle-in-line'\"\n [applicationTheme]=\"applicationTheme\"\n [size]=\"'24'\"\n class=\"premium-icon\"\n ></ui-icon>\n }\n </button>\n }\n }\n }\n\n <ng-content select=\"[menu-content]\"></ng-content>\n </mat-menu>\n }\n</div>\n",
548
+ 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}.overflow-menu-container ui-icon,.overflow-menu .mat-mdc-menu-item ui-icon{pointer-events:none}:host ::ng-deep .overflow-menu .mat-mdc-menu-content:not(:empty){padding:0}:host ::ng-deep .overflow-menu button{padding:0!important;width:fit-content!important}.overflow-menu-opener{background:transparent;border:unset;cursor:pointer;margin:0}.overflow-menu-opener.content-template{display:flex;justify-content:flex-start;height:100%;width:100%;padding:1px 8px 0 6px}.overflow-menu-opener.icon-button{height:40px;width:40px;border-radius:50px;display:flex;align-items:center;justify-content:center}.overflow-menu-opener:focus-visible{outline-color:#242424;outline-style:solid;outline-offset:2px!important;animation:focus-ring-animation .4s forwards}@keyframes focus-ring-animation{0%{outline-width:4px!important}to{outline-width:2px!important}}.overflow-menu-opener:hover{background:#e9e9e9}.overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:8px;box-shadow:2px 24px 48px 8px #00000014}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty){padding:0}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-title{padding:16px;font-weight:700}.overflow-menu-backdrop+* .mat-mdc-menu-content:not(:empty) .menu-option{padding:16px;display:flex;flex-flow:row nowrap;align-items:center;justify-content:space-between}.overflow-menu-backdrop+* .mat-mdc-menu-submenu-icon{padding-right:var(--mat-menu-item-spacing);padding-top:16px;padding-bottom:16px}.overflow-menu-backdrop+* ui-button:first-child button.mat-mdc-unelevated-button.menuCell{border-radius:8px 8px 0 0}.overflow-menu-backdrop+* ui-button:last-child button.mat-mdc-unelevated-button.menuCell{border-radius:0 0 8px 8px}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#cb7b7a}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#f0dad9}.overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#f0dad9}[theme=dark] .overflow-menu-backdrop+* .mat-mdc-menu-panel,[theme=light] .overflow-menu-backdrop+* .mat-mdc-menu-panel{min-height:0;border-radius:10px;box-shadow:0 4px 16px #24242414}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell mat-icon.black svg{color:#e02800!important}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:hover{background-color:#fff2fc}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:active{background-color:#ffe6fa}[theme=dark] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused,[theme=light] .overflow-menu-backdrop+* ui-button.destructive button.mat-mdc-unelevated-button.menuCell:focus.cdk-focused.cdk-mouse-focused{background-color:#ffe6fa}button.is-destructive{background-color:#fff;color:#e02800}button.is-destructive:hover{background-color:#e02800}button.is-destructive:hover ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive:disabled,button.is-destructive:disabled:hover{color:#919191;background:transparent}button.is-destructive ::ng-deep mat-icon.black svg{color:#e02800}button.is-destructive .mat-mdc-progress-spinner ::ng-deep circle{stroke:#242424}button.is-destructive.classic-theme{border:unset;border-radius:4px;background-color:#cb7b7a;color:#fff}button.is-destructive.classic-theme:hover{background-color:#8e5655}button.is-destructive.classic-theme:disabled,button.is-destructive.classic-theme:disabled:hover{background-color:#e3c3c6}button.is-destructive.classic-theme ::ng-deep mat-icon.black svg{color:#fff}button.is-destructive.classic-theme .mat-mdc-progress-spinner ::ng-deep circle{stroke:#000}.premium-icon{margin-left:8px;flex-shrink:0}.overflow-menu-item-selectable .mat-mdc-menu-item-text{display:flex;align-items:center;gap:8px}.overflow-menu-selected-check{margin-left:auto;flex-shrink:0}button .label{text-align:left;overflow:hidden;-webkit-line-clamp:2;display:-webkit-box!important;-webkit-box-orient:vertical;text-overflow:ellipsis;white-space:normal;line-height:16px}button.disabled{background:transparent;color:#888;cursor:not-allowed}button.disabled:hover{background:transparent!important}.overflow-menu-opener.no-hover:hover{background:transparent}\n"]
549
+ }]
550
+ }],
551
+ ctorParameters: () => [
552
+ {
553
+ type: void 0,
554
+ decorators: [{ type: Optional }, {
555
+ type: Inject,
556
+ args: ["CANOPYUI_DEFAULT_APPLICATION_THEME"]
557
+ }]
558
+ },
559
+ { type: i1.FocusMonitor },
560
+ { type: i0.NgZone }
561
+ ],
562
+ propDecorators: {
563
+ buttons: [{ type: Input }],
564
+ iconTrigger: [{ type: Input }],
565
+ menuLabel: [{ type: Input }],
566
+ applicationTheme: [{ type: Input }],
567
+ ariaLabel: [{ type: Input }],
568
+ testId: [{ type: Input }],
569
+ ariaRequired: [{ type: Input }],
570
+ describedby: [{ type: Input }],
571
+ contentTemplateRef: [{ type: Input }],
572
+ buttonVariant: [{ type: Input }],
573
+ buttonSize: [{ type: Input }],
574
+ menuConfig: [{ type: Input }],
575
+ selectionMode: [{
576
+ type: i0.Input,
577
+ args: [{
578
+ isSignal: true,
579
+ alias: "selectionMode",
580
+ required: false
581
+ }]
582
+ }],
583
+ menuAnchor: [{
584
+ type: i0.Input,
585
+ args: [{
586
+ isSignal: true,
587
+ alias: "menuAnchor",
588
+ required: false
589
+ }]
590
+ }],
591
+ shouldMatchAnchorWidth: [{
592
+ type: i0.Input,
593
+ args: [{
594
+ isSignal: true,
595
+ alias: "shouldMatchAnchorWidth",
596
+ required: false
597
+ }]
598
+ }],
599
+ isDynamicMenu: [{ type: Input }],
600
+ withRemovableOption: [{ type: Input }],
601
+ selectItem: [{ type: Output }],
602
+ menuOpened: [{ type: Output }],
603
+ menuClosed: [{ type: Output }],
604
+ matmenus: [{
605
+ type: ViewChildren,
606
+ args: [MatMenu]
607
+ }],
608
+ matTrigger: [{
609
+ type: ViewChildren,
610
+ args: [MatMenuTrigger]
611
+ }],
612
+ buttonElement: [{
613
+ type: ViewChild,
614
+ args: ["buttonElement"]
615
+ }]
616
+ }
617
+ });
618
+ var OverflowMenuComponentModule = class OverflowMenuComponentModule {
619
+ static {
620
+ this.ɵfac = i0.ɵɵngDeclareFactory({
621
+ minVersion: "12.0.0",
622
+ version: "22.2.4",
623
+ ngImport: i0,
624
+ type: OverflowMenuComponentModule,
625
+ deps: [],
626
+ target: i0.ɵɵFactoryTarget.NgModule
627
+ });
628
+ }
629
+ static {
630
+ this.ɵmod = i0.ɵɵngDeclareNgModule({
631
+ minVersion: "14.0.0",
632
+ version: "22.2.4",
633
+ ngImport: i0,
634
+ type: OverflowMenuComponentModule,
635
+ imports: [
636
+ CommonModule,
637
+ ButtonComponentModule,
638
+ IconComponentModule,
639
+ MatMenuModule,
640
+ MatButtonModule,
641
+ MatTooltipModule,
642
+ EllipseTextDirective,
643
+ UiTranslatePipe,
644
+ OverflowMenuComponent
645
+ ],
646
+ exports: [OverflowMenuComponent]
647
+ });
648
+ }
649
+ static {
650
+ this.ɵinj = i0.ɵɵngDeclareInjector({
651
+ minVersion: "12.0.0",
652
+ version: "22.2.4",
653
+ ngImport: i0,
654
+ type: OverflowMenuComponentModule,
655
+ imports: [
656
+ CommonModule,
657
+ ButtonComponentModule,
658
+ IconComponentModule,
659
+ MatMenuModule,
660
+ MatButtonModule,
661
+ MatTooltipModule,
662
+ OverflowMenuComponent
663
+ ]
664
+ });
665
+ }
666
+ };
667
+ i0.ɵɵngDeclareClassMetadata({
668
+ minVersion: "12.0.0",
669
+ version: "22.2.4",
670
+ ngImport: i0,
671
+ type: OverflowMenuComponentModule,
672
+ decorators: [{
673
+ type: NgModule,
674
+ args: [{
675
+ imports: [
676
+ CommonModule,
677
+ ButtonComponentModule,
678
+ IconComponentModule,
679
+ MatMenuModule,
680
+ MatButtonModule,
681
+ MatTooltipModule,
682
+ EllipseTextDirective,
683
+ UiTranslatePipe,
684
+ OverflowMenuComponent
685
+ ],
686
+ exports: [OverflowMenuComponent]
687
+ }]
688
+ }]
689
+ });
415
690
  export { OverflowMenuComponent, OverflowMenuComponentModule };
416
- //# sourceMappingURL=testgorilla-tgo-ui-components-overflow-menu.mjs.map
691
+
692
+ //# sourceMappingURL=testgorilla-tgo-ui-components-overflow-menu.mjs.map