@taon-dev/ui 21.0.3 → 21.0.4

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 (189) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/browser/fesm2022/ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs +15 -0
  3. package/browser/fesm2022/ui-browser-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map +1 -0
  4. package/browser/fesm2022/ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs +15 -0
  5. package/browser/fesm2022/ui-browser-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map +1 -0
  6. package/browser/fesm2022/ui-browser.mjs +857 -30
  7. package/browser/fesm2022/ui-browser.mjs.map +1 -1
  8. package/browser/package.json +1 -1
  9. package/browser/types/ui-browser.d.ts +213 -6
  10. package/browser-prod/fesm2022/ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs +15 -0
  11. package/browser-prod/fesm2022/ui-browser-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map +1 -0
  12. package/browser-prod/fesm2022/ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs +15 -0
  13. package/browser-prod/fesm2022/ui-browser-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map +1 -0
  14. package/browser-prod/fesm2022/ui-browser-prod.mjs +863 -30
  15. package/browser-prod/fesm2022/ui-browser-prod.mjs.map +1 -1
  16. package/browser-prod/package.json +1 -1
  17. package/browser-prod/types/ui-browser-prod.d.ts +209 -6
  18. package/html/app/main/routes/session/tracking/tracking.component.html +7 -4
  19. package/html/assets/generated/pwa/html-pwa.html +53 -53
  20. package/html/lib/taon-admin-layout/taon-admin-layout.component.html +8 -6
  21. package/html/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.html +3 -0
  22. package/html/lib/taon-backoffice-notifications/taon-error-details-dialog.component.html +36 -0
  23. package/html/lib/taon-confirm-dialog/taon-confirm-dialog.component.html +34 -0
  24. package/html/lib/taon-datatable/taon-datatable.component.html +147 -0
  25. package/html/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.html +48 -62
  26. package/lib/build-info._auto-generated_.d.ts +1 -1
  27. package/lib/build-info._auto-generated_.js +1 -1
  28. package/lib/directives/taon-horizontal-wheel-scrolling.directive.d.ts +13 -0
  29. package/lib/env/env.angular-node-app.js.map +1 -1
  30. package/lib/env/env.docs-webapp.js.map +1 -1
  31. package/lib/env/env.electron-app.js.map +1 -1
  32. package/lib/env/env.mobile-app.js.map +1 -1
  33. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  34. package/lib/env/env.vscode-plugin.js.map +1 -1
  35. package/lib/index._auto-generated_.d.ts +13 -1
  36. package/lib/index._auto-generated_.js +13 -1
  37. package/lib/index._auto-generated_.js.map +1 -1
  38. package/lib/my-organization-proj.js +1 -2
  39. package/lib/my-organization-proj.js.map +1 -1
  40. package/lib/package.json +1 -1
  41. package/lib/taon-admin-layout/index.js +2 -2
  42. package/lib/taon-admin-layout/taon-admin-layout.component.d.ts +1 -0
  43. package/lib/taon-admin-layout/taon-admin-layout.models.d.ts +13 -1
  44. package/lib/taon-admin-layout/taon-admin-layout.models.js +13 -2
  45. package/lib/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
  46. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.d.ts +15 -0
  47. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +15 -0
  48. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js.map +1 -0
  49. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.d.ts +15 -0
  50. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +15 -0
  51. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js.map +1 -0
  52. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.d.ts +4 -0
  53. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js +5 -0
  54. package/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js.map +1 -0
  55. package/lib/taon-backoffice-notifications/index.d.ts +4 -0
  56. package/lib/taon-backoffice-notifications/index.js +24 -0
  57. package/lib/taon-backoffice-notifications/index.js.map +1 -0
  58. package/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.d.ts +9 -0
  59. package/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.d.ts +11 -0
  60. package/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.js +3 -0
  61. package/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.js.map +1 -0
  62. package/lib/taon-backoffice-notifications/taon-backoffice-notifications.service.d.ts +9 -0
  63. package/lib/taon-backoffice-notifications/taon-error-details-dialog.component.d.ts +24 -0
  64. package/lib/taon-backoffice-notifications/taon-error-toast.component.d.ts +10 -0
  65. package/lib/taon-confirm-dialog/taon-confirm-dialog.component.d.ts +12 -0
  66. package/lib/taon-confirm-dialog/taon-confirm-dialog.models.d.ts +1 -0
  67. package/lib/taon-confirm-dialog/taon-confirm-dialog.models.js +3 -0
  68. package/lib/taon-confirm-dialog/taon-confirm-dialog.models.js.map +1 -0
  69. package/lib/taon-datatable/index.d.ts +1 -0
  70. package/lib/taon-datatable/index.js +5 -0
  71. package/lib/taon-datatable/index.js.map +1 -0
  72. package/lib/taon-datatable/taon-datatable.component.d.ts +60 -0
  73. package/lib/taon-datatable/taon-datatable.models.d.ts +1 -0
  74. package/lib/taon-datatable/taon-datatable.models.js +3 -0
  75. package/lib/taon-datatable/taon-datatable.models.js.map +1 -0
  76. package/lib/taon-datatable/taon-datatable.routes.d.ts +7 -0
  77. package/lib/taon-draggable-button-panel/index.js +2 -2
  78. package/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.d.ts +5 -0
  79. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  80. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  81. package/lib-esm/lib/env/env.angular-node-app.js.map +1 -1
  82. package/lib-esm/lib/env/env.docs-webapp.js.map +1 -1
  83. package/lib-esm/lib/env/env.electron-app.js.map +1 -1
  84. package/lib-esm/lib/env/env.mobile-app.js.map +1 -1
  85. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  86. package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -1
  87. package/lib-esm/lib/index._auto-generated_.d.ts +4 -0
  88. package/lib-esm/lib/index._auto-generated_.js +13 -1
  89. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  90. package/lib-esm/lib/my-organization-proj.js +1 -2
  91. package/lib-esm/lib/my-organization-proj.js.map +1 -1
  92. package/lib-esm/lib/taon-admin-layout/index.d.ts +1 -1
  93. package/lib-esm/lib/taon-admin-layout/index.js +1 -1
  94. package/lib-esm/lib/taon-admin-layout/taon-admin-layout.models.d.ts +13 -1
  95. package/lib-esm/lib/taon-admin-layout/taon-admin-layout.models.js +11 -1
  96. package/lib-esm/lib/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
  97. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.d.ts +15 -0
  98. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +13 -0
  99. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js.map +1 -0
  100. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.d.ts +15 -0
  101. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +13 -0
  102. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js.map +1 -0
  103. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.d.ts +4 -0
  104. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js +4 -0
  105. package/lib-esm/lib/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js.map +1 -0
  106. package/lib-esm/lib/taon-backoffice-notifications/index.d.ts +1 -0
  107. package/lib-esm/lib/taon-backoffice-notifications/index.js +8 -0
  108. package/lib-esm/lib/taon-backoffice-notifications/index.js.map +1 -0
  109. package/lib-esm/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.d.ts +11 -0
  110. package/lib-esm/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.js +2 -0
  111. package/lib-esm/lib/taon-backoffice-notifications/taon-backoffice-notifications.models.js.map +1 -0
  112. package/lib-esm/lib/taon-confirm-dialog/taon-confirm-dialog.models.d.ts +1 -0
  113. package/lib-esm/lib/taon-confirm-dialog/taon-confirm-dialog.models.js +2 -0
  114. package/lib-esm/lib/taon-confirm-dialog/taon-confirm-dialog.models.js.map +1 -0
  115. package/lib-esm/lib/taon-datatable/index.d.ts +1 -0
  116. package/lib-esm/lib/taon-datatable/index.js +2 -0
  117. package/lib-esm/lib/taon-datatable/index.js.map +1 -0
  118. package/lib-esm/lib/taon-datatable/taon-datatable.models.d.ts +1 -0
  119. package/lib-esm/lib/taon-datatable/taon-datatable.models.js +2 -0
  120. package/lib-esm/lib/taon-datatable/taon-datatable.models.js.map +1 -0
  121. package/lib-esm/lib/taon-draggable-button-panel/index.d.ts +1 -1
  122. package/lib-esm/lib/taon-draggable-button-panel/index.js +1 -1
  123. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  124. package/lib-prod/build-info._auto-generated_.js +1 -1
  125. package/lib-prod/env/env.angular-node-app.js.map +1 -1
  126. package/lib-prod/env/env.docs-webapp.js.map +1 -1
  127. package/lib-prod/env/env.electron-app.js.map +1 -1
  128. package/lib-prod/env/env.mobile-app.js.map +1 -1
  129. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -1
  130. package/lib-prod/env/env.vscode-plugin.js.map +1 -1
  131. package/lib-prod/index._auto-generated_.d.ts +4 -0
  132. package/lib-prod/index._auto-generated_.js +13 -1
  133. package/lib-prod/index._auto-generated_.js.map +1 -1
  134. package/lib-prod/my-organization-proj.js +1 -2
  135. package/lib-prod/my-organization-proj.js.map +1 -1
  136. package/lib-prod/package.json +1 -1
  137. package/lib-prod/taon-admin-layout/index.d.ts +1 -1
  138. package/lib-prod/taon-admin-layout/index.js +1 -1
  139. package/lib-prod/taon-admin-layout/taon-admin-layout.models.d.ts +13 -1
  140. package/lib-prod/taon-admin-layout/taon-admin-layout.models.js +11 -1
  141. package/lib-prod/taon-admin-layout/taon-admin-layout.models.js.map +1 -1
  142. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.d.ts +15 -0
  143. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js +13 -0
  144. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.en-US.i18n.data.js.map +1 -0
  145. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.d.ts +15 -0
  146. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js +13 -0
  147. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.component.ts.pl-PL.i18n.data.js.map +1 -0
  148. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.d.ts +4 -0
  149. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js +4 -0
  150. package/lib-prod/taon-backoffice-notifications/i18n/taon-backoffice-notifications.translation.js.map +1 -0
  151. package/lib-prod/taon-backoffice-notifications/index.d.ts +1 -0
  152. package/lib-prod/taon-backoffice-notifications/index.js +8 -0
  153. package/lib-prod/taon-backoffice-notifications/index.js.map +1 -0
  154. package/lib-prod/taon-backoffice-notifications/taon-backoffice-notifications.models.d.ts +11 -0
  155. package/lib-prod/taon-backoffice-notifications/taon-backoffice-notifications.models.js +2 -0
  156. package/lib-prod/taon-backoffice-notifications/taon-backoffice-notifications.models.js.map +1 -0
  157. package/lib-prod/taon-confirm-dialog/taon-confirm-dialog.models.d.ts +0 -0
  158. package/lib-prod/taon-confirm-dialog/taon-confirm-dialog.models.js +3 -0
  159. package/lib-prod/taon-confirm-dialog/taon-confirm-dialog.models.js.map +1 -0
  160. package/lib-prod/taon-datatable/index.d.ts +1 -0
  161. package/lib-prod/taon-datatable/index.js +2 -0
  162. package/lib-prod/taon-datatable/index.js.map +1 -0
  163. package/lib-prod/taon-datatable/taon-datatable.models.d.ts +0 -0
  164. package/lib-prod/taon-datatable/taon-datatable.models.js +3 -0
  165. package/lib-prod/taon-datatable/taon-datatable.models.js.map +1 -0
  166. package/lib-prod/taon-draggable-button-panel/index.d.ts +1 -1
  167. package/lib-prod/taon-draggable-button-panel/index.js +1 -1
  168. package/package.json +1 -1
  169. package/scss/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.scss +3 -0
  170. package/scss/lib/taon-backoffice-notifications/taon-error-details-dialog.component.scss +62 -0
  171. package/scss/lib/taon-confirm-dialog/taon-confirm-dialog.component.scss +3 -0
  172. package/scss/lib/taon-datatable/taon-datatable.component.scss +11 -0
  173. package/scss/lib/taon-draggable-button-panel/taon-draggable-button-panel.component.scss +3 -3
  174. package/websql/fesm2022/ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs +15 -0
  175. package/websql/fesm2022/ui-websql-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map +1 -0
  176. package/websql/fesm2022/ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs +15 -0
  177. package/websql/fesm2022/ui-websql-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map +1 -0
  178. package/websql/fesm2022/ui-websql.mjs +857 -30
  179. package/websql/fesm2022/ui-websql.mjs.map +1 -1
  180. package/websql/package.json +1 -1
  181. package/websql/types/ui-websql.d.ts +213 -6
  182. package/websql-prod/fesm2022/ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs +15 -0
  183. package/websql-prod/fesm2022/ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs.map +1 -0
  184. package/websql-prod/fesm2022/ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs +15 -0
  185. package/websql-prod/fesm2022/ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs.map +1 -0
  186. package/websql-prod/fesm2022/ui-websql-prod.mjs +863 -30
  187. package/websql-prod/fesm2022/ui-websql-prod.mjs.map +1 -1
  188. package/websql-prod/package.json +1 -1
  189. package/websql-prod/types/ui-websql-prod.d.ts +209 -6
@@ -1,22 +1,41 @@
1
- import { decodeEnv, UtilsJson__NS__getValue } from 'tnp-core/websql-prod';
1
+ import { decodeEnv, UtilsJson__NS__getValue, ___NS__isFunction, ___NS__isBoolean, ___NS__isEqual, ___NS__upperCase } from 'tnp-core/websql-prod';
2
2
  import { Translation } from '@taon-dev/i18n/websql-prod';
3
3
  import { BaseCommandLineFeature } from 'tnp-helpers/websql-prod';
4
- import { CommonModule } from '@angular/common';
5
4
  import * as i0 from '@angular/core';
6
- import { signal, Input, ChangeDetectionStrategy, Component, ViewChild, EventEmitter, Output } from '@angular/core';
7
- import * as i2$1 from '@angular/material/expansion';
5
+ import { inject, ElementRef, Directive, signal, Input, ChangeDetectionStrategy, Component, ViewChild, Injectable, DestroyRef, ChangeDetectorRef, EventEmitter, Output } from '@angular/core';
6
+ import * as i2$1 from '@angular/common';
7
+ import { CommonModule, NgIf } from '@angular/common';
8
+ import * as i3 from '@angular/material/expansion';
8
9
  import { MatExpansionModule } from '@angular/material/expansion';
9
- import * as i3 from '@angular/material/icon';
10
+ import * as i4 from '@angular/material/icon';
10
11
  import { MatIconModule } from '@angular/material/icon';
11
12
  import * as i1 from '@angular/router';
12
13
  import { NavigationEnd, RouterOutlet, RouterLink } from '@angular/router';
13
- import { filter } from 'rxjs';
14
+ import { filter, BehaviorSubject, Subject, switchMap, debounceTime, distinctUntilChanged, tap, of, from, map, catchError, finalize, firstValueFrom, take } from 'rxjs';
14
15
  import * as i2 from '@angular/material/tabs';
15
16
  import { MatTabsModule } from '@angular/material/tabs';
16
- import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
17
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
18
+ import { Resource__NS__listenErrors, getDefaultModel } from 'ng2-rest/websql-prod';
19
+ import { HotToastRef, HotToastService } from '@ngneat/hot-toast';
20
+ import * as i1$1 from '@angular/material/dialog';
21
+ import { MAT_DIALOG_DATA, MatDialogModule, MatDialog, MatDialogRef } from '@angular/material/dialog';
17
22
  import * as i2$2 from '@angular/material/button';
18
23
  import { MatButtonModule } from '@angular/material/button';
19
- import * as i4 from '@angular/material/tooltip';
24
+ import * as i3$1 from '@angular/material/button-toggle';
25
+ import { MatButtonToggleModule } from '@angular/material/button-toggle';
26
+ import * as i1$2 from '@angular/forms';
27
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
28
+ import * as i3$2 from '@angular/material/form-field';
29
+ import { MatFormFieldModule } from '@angular/material/form-field';
30
+ import * as i5 from '@angular/material/input';
31
+ import { MatInputModule } from '@angular/material/input';
32
+ import { MatPaginatorModule } from '@angular/material/paginator';
33
+ import { MatSelectModule } from '@angular/material/select';
34
+ import * as i6 from '@ng-matero/extensions/grid';
35
+ import { MtxGridModule } from '@ng-matero/extensions/grid';
36
+ import { ClassHelpers__NS__getName, Symbols__NS__old } from 'taon/websql-prod';
37
+ import { CdkDrag, CdkDragHandle } from '@angular/cdk/drag-drop';
38
+ import * as i4$1 from '@angular/material/tooltip';
20
39
  import { MatTooltipModule } from '@angular/material/tooltip';
21
40
 
22
41
  // THIS FILE IS GENERATED - DO NOT MODIFY
@@ -883,12 +902,12 @@ const CURRENT_PACKAGE_TAON_VERSION = 'v21';
883
902
  /**
884
903
  * Autogenerated by current cli tool. Use *tnp release* to bump version.
885
904
  */
886
- const CURRENT_PACKAGE_VERSION = '21.0.3';
905
+ const CURRENT_PACKAGE_VERSION = '21.0.4';
887
906
  // THIS FILE IS GENERATED - DO NOT MODIFY
888
907
 
889
- const t = Translation.for('src/lib/my-organization-proj.ts', { "src/lib/my-organization-proj.ts": { "en-US": async () => (await import('./ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs')).default, "pl-PL": async () => (await import('./ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs')).default } });
908
+ const t$1 = Translation.for('src/lib/my-organization-proj.ts', { "src/lib/my-organization-proj.ts": { "en-US": async () => (await import('./ui-websql-prod-my-organization-proj.ts.en-US.i18n.data-CoSik70Y.mjs')).default, "pl-PL": async () => (await import('./ui-websql-prod-my-organization-proj.ts.pl-PL.i18n.data-BZPsT3Zk.mjs')).default } });
890
909
  function myOrgProj() {
891
- t.gettext('My Translated Company Name!');
910
+ t$1.gettext('My Translated Company Name!');
892
911
  }
893
912
 
894
913
  //#region tnp-helpers cli template
@@ -980,6 +999,67 @@ async function startCli(argsv, filename) {
980
999
  return (void 0);
981
1000
  }
982
1001
 
1002
+ //#region imports
1003
+ //#endregion
1004
+ class TaonHorizontalWheelScrollDirective {
1005
+ constructor() {
1006
+ //#region fields
1007
+ this.elementRef = inject((ElementRef));
1008
+ this.wheelAccumulator = 0;
1009
+ /**
1010
+ * Amount of wheel movement required before triggering
1011
+ * Material's previous/next pagination.
1012
+ */
1013
+ this.wheelThreshold = 40;
1014
+ //#endregion
1015
+ //#region wheel
1016
+ this.onWheel = (event) => {
1017
+ const delta = Math.abs(event.deltaX) > Math.abs(event.deltaY)
1018
+ ? event.deltaX
1019
+ : event.deltaY;
1020
+ if (!delta) {
1021
+ return;
1022
+ }
1023
+ this.wheelAccumulator += delta;
1024
+ if (Math.abs(this.wheelAccumulator) < this.wheelThreshold) {
1025
+ return;
1026
+ }
1027
+ const direction = this.wheelAccumulator > 0 ? 'after' : 'before';
1028
+ this.wheelAccumulator = 0;
1029
+ // @ts-ignore
1030
+ const pagination = this.elementRef.nativeElement.querySelector(`.mat-mdc-tab-header-pagination-${direction}`);
1031
+ if (!pagination) {
1032
+ return;
1033
+ }
1034
+ const disabled = pagination.classList.contains('mat-mdc-tab-header-pagination-disabled');
1035
+ if (disabled) {
1036
+ return;
1037
+ }
1038
+ event.preventDefault();
1039
+ pagination.click();
1040
+ };
1041
+ }
1042
+ //#endregion
1043
+ //#region lifecycle
1044
+ ngAfterViewInit() {
1045
+ this.elementRef.nativeElement.addEventListener('wheel', this.onWheel, {
1046
+ passive: false,
1047
+ });
1048
+ }
1049
+ ngOnDestroy() {
1050
+ this.elementRef.nativeElement.removeEventListener('wheel', this.onWheel);
1051
+ }
1052
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonHorizontalWheelScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1053
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.9", type: TaonHorizontalWheelScrollDirective, isStandalone: true, selector: "[taonHorizontalWheelScroll]", ngImport: i0 }); }
1054
+ }
1055
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonHorizontalWheelScrollDirective, decorators: [{
1056
+ type: Directive,
1057
+ args: [{
1058
+ selector: '[taonHorizontalWheelScroll]',
1059
+ standalone: true,
1060
+ }]
1061
+ }] });
1062
+
983
1063
  ;
984
1064
  // THIS FILE IS GENERATED - DO NOT MODIFY
985
1065
 
@@ -1477,6 +1557,9 @@ class TaonAdminLayoutComponent {
1477
1557
  label(route) {
1478
1558
  return route.data?.['menuItem'] ?? this.startCase(route.path ?? '');
1479
1559
  }
1560
+ color(route) {
1561
+ return route.data?.['color'];
1562
+ }
1480
1563
  icon(route) {
1481
1564
  return route.data?.['icon'];
1482
1565
  }
@@ -1529,7 +1612,7 @@ class TaonAdminLayoutComponent {
1529
1612
  .replace(/\b\w/g, char => char.toUpperCase());
1530
1613
  }
1531
1614
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminLayoutComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1532
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonAdminLayoutComponent, isStandalone: true, selector: "taon-admin-layout", inputs: { routes: "routes", basePath: "basePath", outlet: "outlet" }, ngImport: i0, template: "<div class=\"flex h-dvh min-h-0 flex-col overflow-hidden\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header\n class=\"flex h-16 shrink-0 items-center border-b border-gray-200 bg-white\">\n <!-- hamburger ALWAYS visible -->\n <button\n mat-icon-button\n type=\"button\"\n aria-label=\"Toggle admin menu\"\n class=\"mx-2 shrink-0 cursor-pointer\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"min-w-0 flex-1\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"relative flex min-h-0 flex-1 overflow-hidden\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"absolute inset-0 z-20 bg-black/30 md:hidden\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"absolute inset-y-0 left-0 z-30 flex min-h-0 flex-col border-r border-gray-200 bg-white transition-[width,transform] duration-200 md:relative md:inset-auto md:z-auto md:translate-x-0\"\n [class.w-72]=\"asideOpened()\"\n [class.-translate-x-full]=\"!asideOpened()\"\n [class.translate-x-0]=\"asideOpened()\"\n [class.md:w-72]=\"asideOpened()\"\n [class.md:w-0]=\"!asideOpened()\"\n [class.md:overflow-hidden]=\"!asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n <!-- =================================================== -->\n <!-- EXPANDABLE LEVEL 1 -->\n <!-- =================================================== -->\n\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [expanded]=\"isLevel1Active(level1)\"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <!-- ================================================= -->\n <!-- LEVEL 1 -->\n <!-- ================================================= -->\n\n <mat-expansion-panel-header (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"flex items-center gap-3\">\n @if (icon(level1)) {\n <mat-icon>\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span [class.font-semibold]=\"isLevel1Active(level1)\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <!-- ================================================= -->\n <!-- LEVEL 2 -->\n <!-- ================================================= -->\n\n <div class=\"flex flex-col\">\n @if (isLoading(level1)) {\n <div class=\"px-4 py-2 text-sm text-gray-400\">\n Loading...\n </div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n <a\n (click)=\"level2Clicked(level1, level2)\"\n class=\"flex cursor-pointer items-center gap-3 px-6 py-2.5 text-sm transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel2Active(level1, level2)\"\n [class.font-semibold]=\"isLevel2Active(level1, level2)\">\n @if (icon(level2)) {\n <mat-icon>\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span>\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <!-- ================================================= -->\n <!-- NON-EXPANDABLE LEVEL 1 -->\n <!-- ================================================= -->\n\n <a\n (click)=\"level1Clicked(level1)\"\n class=\"flex h-14 cursor-pointer items-center gap-3 px-6 transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel1Active(level1)\"\n [class.font-semibold]=\"isLevel1Active(level1)\">\n @if (icon(level1)) {\n <mat-icon>\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span>\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER - ALWAYS VISIBLE -->\n <!-- ========================================================= -->\n\n <footer class=\"shrink-0 border-t border-gray-200 bg-white p-3\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"shrink-0\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- ROUTER CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 md:p-6\">\n <router-outlet />\n </div>\n </main>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.admin-menu mat-expansion-panel{border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant);margin-top:0!important;margin-bottom:0!important}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type{border-radius:0!important}.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-aside{position:absolute;inset-block:0;left:0;z-index:30;display:flex;flex-direction:column;width:18rem;min-height:0;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease;overflow:hidden}.admin-aside-open{transform:translate(0)}@media(min-width:768px){.admin-aside{position:relative;inset:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:18rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2$1.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2$1.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2$1.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i2$1.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: TaonAdminPageTabsComponent, selector: "taon-admin-page-tabs", inputs: ["routes", "basePath", "outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1615
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonAdminLayoutComponent, isStandalone: true, selector: "taon-admin-layout", inputs: { routes: "routes", basePath: "basePath", outlet: "outlet" }, ngImport: i0, template: "<div class=\"flex h-dvh min-h-0 flex-col overflow-hidden\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header\n class=\"flex h-16 shrink-0 items-center border-b border-gray-200 bg-white\">\n <!-- hamburger ALWAYS visible -->\n <button\n mat-icon-button\n type=\"button\"\n aria-label=\"Toggle admin menu\"\n class=\"mx-2 shrink-0 cursor-pointer\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"min-w-0 flex-1\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"relative flex min-h-0 flex-1 overflow-hidden\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"absolute inset-0 z-20 bg-black/30 md:hidden\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"absolute inset-y-0 left-0 z-30 flex min-h-0 flex-col border-r border-gray-200 bg-white transition-[width,transform] duration-200 md:relative md:inset-auto md:z-auto md:translate-x-0\"\n [class.w-72]=\"asideOpened()\"\n [class.-translate-x-full]=\"!asideOpened()\"\n [class.translate-x-0]=\"asideOpened()\"\n [class.md:w-72]=\"asideOpened()\"\n [class.md:w-0]=\"!asideOpened()\"\n [class.md:overflow-hidden]=\"!asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n <!-- =================================================== -->\n <!-- EXPANDABLE LEVEL 1 -->\n <!-- =================================================== -->\n\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [expanded]=\"isLevel1Active(level1)\"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <!-- ================================================= -->\n <!-- LEVEL 1 -->\n <!-- ================================================= -->\n\n <mat-expansion-panel-header (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"flex items-center gap-3\">\n @if (icon(level1)) {\n <mat-icon [ngStyle]=\"{ color: color(level1) }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{ color: color(level1) }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <!-- ================================================= -->\n <!-- LEVEL 2 -->\n <!-- ================================================= -->\n\n <div class=\"flex flex-col\">\n @if (isLoading(level1)) {\n <div class=\"px-4 py-2 text-sm text-gray-400\">\n Loading...\n </div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n <a\n (click)=\"level2Clicked(level1, level2)\"\n class=\"flex cursor-pointer items-center gap-3 px-6 py-2.5 text-sm transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel2Active(level1, level2)\"\n [class.font-semibold]=\"isLevel2Active(level1, level2)\">\n @if (icon(level2)) {\n <mat-icon [ngStyle]=\"{ color: color(level2) }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span [ngStyle]=\"{ color: color(level2) }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <!-- ================================================= -->\n <!-- NON-EXPANDABLE LEVEL 1 -->\n <!-- ================================================= -->\n\n <a\n (click)=\"level1Clicked(level1)\"\n class=\"flex h-14 cursor-pointer items-center gap-3 px-6 transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel1Active(level1)\"\n [class.font-semibold]=\"isLevel1Active(level1)\">\n @if (icon(level1)) {\n <mat-icon [ngStyle]=\"{ color: color(level1) }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span [ngStyle]=\"{ color: color(level1) }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER - ALWAYS VISIBLE -->\n <!-- ========================================================= -->\n\n <footer class=\"shrink-0 border-t border-gray-200 bg-white p-3\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"shrink-0\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- ROUTER CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 md:p-6\">\n <router-outlet />\n </div>\n </main>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.admin-menu mat-expansion-panel{border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant);margin-top:0!important;margin-bottom:0!important}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type{border-radius:0!important}.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-aside{position:absolute;inset-block:0;left:0;z-index:30;display:flex;flex-direction:column;width:18rem;min-height:0;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease;overflow:hidden}.admin-aside-open{transform:translate(0)}@media(min-width:768px){.admin-aside{position:relative;inset:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:18rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name", "routerOutletData"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i3.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: TaonAdminPageTabsComponent, selector: "taon-admin-page-tabs", inputs: ["routes", "basePath", "outlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1533
1616
  }
1534
1617
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminLayoutComponent, decorators: [{
1535
1618
  type: Component,
@@ -1540,7 +1623,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1540
1623
  MatExpansionModule,
1541
1624
  MatIconModule,
1542
1625
  TaonAdminPageTabsComponent,
1543
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex h-dvh min-h-0 flex-col overflow-hidden\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header\n class=\"flex h-16 shrink-0 items-center border-b border-gray-200 bg-white\">\n <!-- hamburger ALWAYS visible -->\n <button\n mat-icon-button\n type=\"button\"\n aria-label=\"Toggle admin menu\"\n class=\"mx-2 shrink-0 cursor-pointer\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"min-w-0 flex-1\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"relative flex min-h-0 flex-1 overflow-hidden\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"absolute inset-0 z-20 bg-black/30 md:hidden\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"absolute inset-y-0 left-0 z-30 flex min-h-0 flex-col border-r border-gray-200 bg-white transition-[width,transform] duration-200 md:relative md:inset-auto md:z-auto md:translate-x-0\"\n [class.w-72]=\"asideOpened()\"\n [class.-translate-x-full]=\"!asideOpened()\"\n [class.translate-x-0]=\"asideOpened()\"\n [class.md:w-72]=\"asideOpened()\"\n [class.md:w-0]=\"!asideOpened()\"\n [class.md:overflow-hidden]=\"!asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n <!-- =================================================== -->\n <!-- EXPANDABLE LEVEL 1 -->\n <!-- =================================================== -->\n\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [expanded]=\"isLevel1Active(level1)\"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <!-- ================================================= -->\n <!-- LEVEL 1 -->\n <!-- ================================================= -->\n\n <mat-expansion-panel-header (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"flex items-center gap-3\">\n @if (icon(level1)) {\n <mat-icon>\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span [class.font-semibold]=\"isLevel1Active(level1)\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <!-- ================================================= -->\n <!-- LEVEL 2 -->\n <!-- ================================================= -->\n\n <div class=\"flex flex-col\">\n @if (isLoading(level1)) {\n <div class=\"px-4 py-2 text-sm text-gray-400\">\n Loading...\n </div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n <a\n (click)=\"level2Clicked(level1, level2)\"\n class=\"flex cursor-pointer items-center gap-3 px-6 py-2.5 text-sm transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel2Active(level1, level2)\"\n [class.font-semibold]=\"isLevel2Active(level1, level2)\">\n @if (icon(level2)) {\n <mat-icon>\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span>\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <!-- ================================================= -->\n <!-- NON-EXPANDABLE LEVEL 1 -->\n <!-- ================================================= -->\n\n <a\n (click)=\"level1Clicked(level1)\"\n class=\"flex h-14 cursor-pointer items-center gap-3 px-6 transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel1Active(level1)\"\n [class.font-semibold]=\"isLevel1Active(level1)\">\n @if (icon(level1)) {\n <mat-icon>\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span>\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER - ALWAYS VISIBLE -->\n <!-- ========================================================= -->\n\n <footer class=\"shrink-0 border-t border-gray-200 bg-white p-3\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"shrink-0\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- ROUTER CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 md:p-6\">\n <router-outlet />\n </div>\n </main>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.admin-menu mat-expansion-panel{border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant);margin-top:0!important;margin-bottom:0!important}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type{border-radius:0!important}.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-aside{position:absolute;inset-block:0;left:0;z-index:30;display:flex;flex-direction:column;width:18rem;min-height:0;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease;overflow:hidden}.admin-aside-open{transform:translate(0)}@media(min-width:768px){.admin-aside{position:relative;inset:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:18rem}}\n"] }]
1626
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex h-dvh min-h-0 flex-col overflow-hidden\">\n <!-- ============================================================= -->\n <!-- HEADER -->\n <!-- ============================================================= -->\n\n <header\n class=\"flex h-16 shrink-0 items-center border-b border-gray-200 bg-white\">\n <!-- hamburger ALWAYS visible -->\n <button\n mat-icon-button\n type=\"button\"\n aria-label=\"Toggle admin menu\"\n class=\"mx-2 shrink-0 cursor-pointer\"\n (click)=\"toggleAside()\">\n <mat-icon>menu</mat-icon>\n </button>\n\n <div class=\"min-w-0 flex-1\">\n <ng-content select=\"[header]\" />\n </div>\n </header>\n\n <!-- ============================================================= -->\n <!-- BODY -->\n <!-- ============================================================= -->\n\n <div class=\"relative flex min-h-0 flex-1 overflow-hidden\">\n <!-- =========================================================== -->\n <!-- MOBILE BACKDROP -->\n <!-- =========================================================== -->\n\n @if (asideOpened()) {\n <div\n class=\"absolute inset-0 z-20 bg-black/30 md:hidden\"\n (click)=\"closeAside()\"></div>\n }\n\n <!-- =========================================================== -->\n <!-- ASIDE -->\n <!-- =========================================================== -->\n\n <aside\n class=\"absolute inset-y-0 left-0 z-30 flex min-h-0 flex-col border-r border-gray-200 bg-white transition-[width,transform] duration-200 md:relative md:inset-auto md:z-auto md:translate-x-0\"\n [class.w-72]=\"asideOpened()\"\n [class.-translate-x-full]=\"!asideOpened()\"\n [class.translate-x-0]=\"asideOpened()\"\n [class.md:w-72]=\"asideOpened()\"\n [class.md:w-0]=\"!asideOpened()\"\n [class.md:overflow-hidden]=\"!asideOpened()\">\n <!-- ========================================================= -->\n <!-- SCROLLABLE ASIDE CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto\">\n <mat-accordion class=\"admin-menu\">\n @for (level1 of routes; track level1.path) {\n <!-- =================================================== -->\n <!-- EXPANDABLE LEVEL 1 -->\n <!-- =================================================== -->\n\n @if (isExpandable(level1)) {\n <mat-expansion-panel\n [expanded]=\"isLevel1Active(level1)\"\n (expandedChange)=\"panelExpanded(level1, $event)\">\n <!-- ================================================= -->\n <!-- LEVEL 1 -->\n <!-- ================================================= -->\n\n <mat-expansion-panel-header (click)=\"level1Clicked(level1)\">\n <mat-panel-title>\n <div class=\"flex items-center gap-3\">\n @if (icon(level1)) {\n <mat-icon [ngStyle]=\"{ color: color(level1) }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span\n [class.font-semibold]=\"isLevel1Active(level1)\"\n [ngStyle]=\"{ color: color(level1) }\">\n {{ label(level1) }}\n </span>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <!-- ================================================= -->\n <!-- LEVEL 2 -->\n <!-- ================================================= -->\n\n <div class=\"flex flex-col\">\n @if (isLoading(level1)) {\n <div class=\"px-4 py-2 text-sm text-gray-400\">\n Loading...\n </div>\n } @else {\n @for (\n level2 of getLevel2Routes(level1);\n track level2.path\n ) {\n <a\n (click)=\"level2Clicked(level1, level2)\"\n class=\"flex cursor-pointer items-center gap-3 px-6 py-2.5 text-sm transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel2Active(level1, level2)\"\n [class.font-semibold]=\"isLevel2Active(level1, level2)\">\n @if (icon(level2)) {\n <mat-icon [ngStyle]=\"{ color: color(level2) }\">\n {{ icon(level2) }}\n </mat-icon>\n }\n\n <span [ngStyle]=\"{ color: color(level2) }\">\n {{ label(level2) }}\n </span>\n </a>\n }\n }\n </div>\n </mat-expansion-panel>\n } @else {\n <!-- ================================================= -->\n <!-- NON-EXPANDABLE LEVEL 1 -->\n <!-- ================================================= -->\n\n <a\n (click)=\"level1Clicked(level1)\"\n class=\"flex h-14 cursor-pointer items-center gap-3 px-6 transition-colors hover:bg-gray-100\"\n [class.bg-gray-100]=\"isLevel1Active(level1)\"\n [class.font-semibold]=\"isLevel1Active(level1)\">\n @if (icon(level1)) {\n <mat-icon [ngStyle]=\"{ color: color(level1) }\">\n {{ icon(level1) }}\n </mat-icon>\n }\n\n <span [ngStyle]=\"{ color: color(level1) }\">\n {{ label(level1) }}\n </span>\n </a>\n }\n }\n </mat-accordion>\n </div>\n\n <!-- ========================================================= -->\n <!-- ASIDE FOOTER - ALWAYS VISIBLE -->\n <!-- ========================================================= -->\n\n <footer class=\"shrink-0 border-t border-gray-200 bg-white p-3\">\n <ng-content select=\"[asideFooter]\" />\n </footer>\n </aside>\n\n <!-- =========================================================== -->\n <!-- MAIN -->\n <!-- =========================================================== -->\n\n <main class=\"flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden\">\n <!-- ========================================================= -->\n <!-- LEVEL 3+ TABS -->\n <!-- ========================================================= -->\n\n <taon-admin-page-tabs\n class=\"shrink-0\"\n [routes]=\"routes\"\n [basePath]=\"basePath\"\n [outlet]=\"outlet\" />\n\n <!-- ========================================================= -->\n <!-- ROUTER CONTENT -->\n <!-- ========================================================= -->\n\n <div class=\"min-h-0 flex-1 overflow-y-auto p-4 md:p-6\">\n <router-outlet />\n </div>\n </main>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;min-height:0}.admin-menu mat-expansion-panel{border-radius:0!important;box-shadow:none!important;border-bottom:1px solid var(--mat-sys-outline-variant);margin-top:0!important;margin-bottom:0!important}.admin-menu mat-expansion-panel:first-of-type,.admin-menu mat-expansion-panel:last-of-type{border-radius:0!important}.admin-menu mat-expansion-panel-header{border-radius:0!important}.admin-aside{position:absolute;inset-block:0;left:0;z-index:30;display:flex;flex-direction:column;width:18rem;min-height:0;background:#fff;border-right:1px solid var(--mat-sys-outline-variant);transform:translate(-100%);transition:transform .2s ease,width .2s ease;overflow:hidden}.admin-aside-open{transform:translate(0)}@media(min-width:768px){.admin-aside{position:relative;inset:auto;z-index:auto;width:0;transform:none}.admin-aside-open{width:18rem}}\n"] }]
1544
1627
  }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { routes: [{
1545
1628
  type: Input,
1546
1629
  args: [{ required: true }]
@@ -1550,8 +1633,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1550
1633
  type: Input
1551
1634
  }] } });
1552
1635
 
1553
- function adminLazyRoutes(loader) {
1636
+ const TaonBaselineBackofficeOutletName = 'admin';
1637
+ function adminLazyRoute(options) {
1638
+ const { path, loader, menuItem, icon, color, expandable, hideInNavigation } = options;
1554
1639
  return {
1640
+ path,
1641
+ data: {
1642
+ menuItem,
1643
+ color,
1644
+ icon,
1645
+ expandable,
1646
+ hideInNavigation,
1647
+ },
1555
1648
  loadChildren: loader,
1556
1649
  loadAdminChildren: loader,
1557
1650
  };
@@ -1574,6 +1667,618 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1574
1667
  args: [RouterOutlet]
1575
1668
  }] } });
1576
1669
 
1670
+ //#region imports
1671
+ class TaonErrorDetailsDialogComponent {
1672
+ constructor() {
1673
+ //#region injections
1674
+ this.data = inject(MAT_DIALOG_DATA);
1675
+ //#endregion
1676
+ //#region constants
1677
+ this.editorStorageKey = 'taon-error-details-editor';
1678
+ //#endregion
1679
+ //#region state
1680
+ this.editor = this.loadEditor();
1681
+ this.stackLines = this.parseStackTrace(this.data.details);
1682
+ }
1683
+ //#endregion
1684
+ //#region editor
1685
+ setEditor(editor) {
1686
+ this.editor = editor;
1687
+ localStorage.setItem(this.editorStorageKey, editor);
1688
+ }
1689
+ loadEditor() {
1690
+ const editor = localStorage.getItem(this.editorStorageKey);
1691
+ if (editor === 'vscode' || editor === 'vscodium') {
1692
+ return editor;
1693
+ }
1694
+ return 'vscode';
1695
+ }
1696
+ //#endregion
1697
+ //#region stack trace
1698
+ parseStackTrace(stack) {
1699
+ return stack
1700
+ .split('\n')
1701
+ .map(text => text.trimEnd())
1702
+ .filter(text => text.trim().length > 0)
1703
+ .map(text => this.parseStackTraceLine(text));
1704
+ }
1705
+ parseStackTraceLine(text) {
1706
+ /**
1707
+ * Matches:
1708
+ *
1709
+ * /Users/test/file.ts:10:20
1710
+ *
1711
+ * C:\projects\test\file.ts:10:20
1712
+ *
1713
+ * at something (/Users/test/file.ts:10:20)
1714
+ */
1715
+ const match = text.match(/((?:[A-Za-z]:[\\/]|\/)[^()\n]+?):(\d+):(\d+)/);
1716
+ if (!match) {
1717
+ return {
1718
+ text,
1719
+ };
1720
+ }
1721
+ return {
1722
+ text,
1723
+ file: match[1],
1724
+ line: Number(match[2]),
1725
+ column: Number(match[3]),
1726
+ };
1727
+ }
1728
+ //#endregion
1729
+ //#region open editor
1730
+ openStackLine(stackLine) {
1731
+ if (!stackLine.file || !stackLine.line) {
1732
+ return;
1733
+ }
1734
+ const url = this.createEditorUrl(stackLine.file, stackLine.line, stackLine.column);
1735
+ window.location.href = url;
1736
+ }
1737
+ createEditorUrl(file, line, column) {
1738
+ const protocol = this.editor === 'vscodium' ? 'vscodium' : 'vscode';
1739
+ const location = [file, line, column]
1740
+ .filter(value => value !== undefined)
1741
+ .join(':');
1742
+ return `${protocol}://file${location}`;
1743
+ }
1744
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorDetailsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1745
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonErrorDetailsDialogComponent, isStandalone: true, selector: "taon-error-details-dialog", ngImport: i0, template: "<h2 mat-dialog-title>Error details</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\"> I am using editor: </span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n aria-label=\"Code editor\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n title=\"Open {{ stackLine.file }}:{{ stackLine.line }}:{{ stackLine.column }}\"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n Close\n </button>\n</mat-dialog-actions>\n", styles: [".error-message{margin-bottom:16px;font-weight:500}.editor-selector{display:flex;align-items:center;gap:12px;margin-bottom:12px}.editor-selector-label{font-size:13px}.error-details{box-sizing:border-box;max-width:100%;max-height:60vh;margin:0;padding:16px;overflow-y:auto;overflow-x:hidden;border-radius:6px;background:#0000000f;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.stack-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.stack-link:hover{background:#00000014}.stack-line{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i3$1.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$1.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }] }); }
1746
+ }
1747
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorDetailsDialogComponent, decorators: [{
1748
+ type: Component,
1749
+ args: [{ selector: 'taon-error-details-dialog', standalone: true, imports: [MatDialogModule, MatButtonModule, MatButtonToggleModule], template: "<h2 mat-dialog-title>Error details</h2>\n\n<mat-dialog-content>\n <div class=\"error-message\">\n {{ data.message }}\n </div>\n\n <div class=\"editor-selector\">\n <span class=\"editor-selector-label\"> I am using editor: </span>\n\n <mat-button-toggle-group\n [value]=\"editor\"\n (change)=\"setEditor($event.value)\"\n aria-label=\"Code editor\">\n <mat-button-toggle value=\"vscode\"> VS Code </mat-button-toggle>\n\n <mat-button-toggle value=\"vscodium\"> VSCodium </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n\n <pre\n class=\"error-details\"><code>@for (stackLine of stackLines; track $index) {\n@if (stackLine.file) {<a\n class=\"stack-link\"\n title=\"Open {{ stackLine.file }}:{{ stackLine.line }}:{{ stackLine.column }}\"\n (click)=\"openStackLine(stackLine)\">{{ stackLine.text }}</a>} @else {{{ stackLine.text }}}{{ '\\n' }}\n}</code></pre>\n</mat-dialog-content>\n\n<mat-dialog-actions align=\"end\">\n <button\n mat-button\n mat-dialog-close>\n Close\n </button>\n</mat-dialog-actions>\n", styles: [".error-message{margin-bottom:16px;font-weight:500}.editor-selector{display:flex;align-items:center;gap:12px;margin-bottom:12px}.editor-selector-label{font-size:13px}.error-details{box-sizing:border-box;max-width:100%;max-height:60vh;margin:0;padding:16px;overflow-y:auto;overflow-x:hidden;border-radius:6px;background:#0000000f;font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:12px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.stack-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px}.stack-link:hover{background:#00000014}.stack-line{white-space:pre-wrap;overflow-wrap:anywhere;word-break:break-word}\n"] }]
1750
+ }] });
1751
+
1752
+ class TaonErrorToastComponent {
1753
+ constructor() {
1754
+ this.toastRef = inject(HotToastRef);
1755
+ this.dialog = inject(MatDialog);
1756
+ this.data = this.toastRef.data;
1757
+ }
1758
+ showDetails() {
1759
+ this.dialog.open(TaonErrorDetailsDialogComponent, {
1760
+ width: '800px',
1761
+ maxWidth: '95vw',
1762
+ data: {
1763
+ message: this.data.title,
1764
+ details: this.data.details,
1765
+ },
1766
+ });
1767
+ this.toastRef.close();
1768
+ }
1769
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1770
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonErrorToastComponent, isStandalone: true, selector: "taon-error-toast", ngImport: i0, template: `
1771
+ <div
1772
+ class="taon-error-toast"
1773
+ (click)="showDetails()">
1774
+ <div>{{ data.title }}</div>
1775
+
1776
+ <small> Click for details </small>
1777
+ </div>
1778
+ `, isInline: true, styles: [".taon-error-toast{cursor:pointer}small{display:block;margin-top:4px;opacity:.7}\n"] }); }
1779
+ }
1780
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonErrorToastComponent, decorators: [{
1781
+ type: Component,
1782
+ args: [{ selector: 'taon-error-toast', standalone: true, template: `
1783
+ <div
1784
+ class="taon-error-toast"
1785
+ (click)="showDetails()">
1786
+ <div>{{ data.title }}</div>
1787
+
1788
+ <small> Click for details </small>
1789
+ </div>
1790
+ `, styles: [".taon-error-toast{cursor:pointer}small{display:block;margin-top:4px;opacity:.7}\n"] }]
1791
+ }] });
1792
+
1793
+ //#region imports
1794
+ //#endregion
1795
+ class TaonBackofficeNotificationsService {
1796
+ constructor() {
1797
+ //#region injections
1798
+ this.toast = inject(HotToastService);
1799
+ }
1800
+ //#endregion
1801
+ //#region private methods
1802
+ normalize(input) {
1803
+ return typeof input === 'string' ? { title: input } : input;
1804
+ }
1805
+ //#endregion
1806
+ //#region notifications
1807
+ success(input) {
1808
+ const { title } = this.normalize(input);
1809
+ return this.toast.success(title);
1810
+ }
1811
+ error(input) {
1812
+ const { title, details } = this.normalize(input);
1813
+ // Normal error - exactly as before
1814
+ if (!details) {
1815
+ return this.toast.error(title);
1816
+ }
1817
+ // Error with clickable details
1818
+ return this.toast.error(TaonErrorToastComponent, {
1819
+ data: {
1820
+ title,
1821
+ details,
1822
+ },
1823
+ });
1824
+ }
1825
+ warn(input) {
1826
+ const { title } = this.normalize(input);
1827
+ return this.toast.warning(title);
1828
+ }
1829
+ info(input) {
1830
+ const { title } = this.normalize(input);
1831
+ return this.toast.info(title);
1832
+ }
1833
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonBackofficeNotificationsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1834
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonBackofficeNotificationsService, providedIn: 'root' }); }
1835
+ }
1836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonBackofficeNotificationsService, decorators: [{
1837
+ type: Injectable,
1838
+ args: [{
1839
+ providedIn: 'root',
1840
+ }]
1841
+ }] });
1842
+
1843
+ //#region imports
1844
+ //#endregion
1845
+ const t = Translation.for('src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts', { "src/lib/taon-backoffice-notifications/taon-backoffice-notifications.component.ts": { "en-US": async () => (await import('./ui-websql-prod-taon-backoffice-notifications.component.ts.en-US.i18n.data-uyZjV7Qx.mjs')).default, "pl-PL": async () => (await import('./ui-websql-prod-taon-backoffice-notifications.component.ts.pl-PL.i18n.data-s0tK5HDk.mjs')).default } });
1846
+ class TaonBackofficeNotificationsComponent {
1847
+ //#endregion
1848
+ //#region constructor
1849
+ constructor() {
1850
+ //#region injections
1851
+ this.t = t.for(this);
1852
+ this.notification = inject(TaonBackofficeNotificationsService);
1853
+ this.destroyRef = inject(DestroyRef);
1854
+ Resource__NS__listenErrors
1855
+ .pipe(takeUntilDestroyed(this.destroyRef))
1856
+ .subscribe((error) => {
1857
+ if (___NS__isFunction(this.filter)) {
1858
+ error = this.filter(error);
1859
+ }
1860
+ const jsonMsg = error?.body?.json;
1861
+ if (!jsonMsg?.message) {
1862
+ console.log({ error });
1863
+ }
1864
+ this.notification.error({
1865
+ title: jsonMsg?.message || t.gettext('Unknown error'),
1866
+ details: jsonMsg?.details,
1867
+ });
1868
+ });
1869
+ }
1870
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonBackofficeNotificationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1871
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonBackofficeNotificationsComponent, isStandalone: true, selector: "taon-backoffice-notifications", inputs: { filter: "filter" }, ngImport: i0, template: "<!-- <p>\n notyfications works!\n</p> -->\n", styles: [":host{display:none}\n"] }); }
1872
+ }
1873
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonBackofficeNotificationsComponent, decorators: [{
1874
+ type: Component,
1875
+ args: [{ selector: 'taon-backoffice-notifications', standalone: true, template: "<!-- <p>\n notyfications works!\n</p> -->\n", styles: [":host{display:none}\n"] }]
1876
+ }], ctorParameters: () => [], propDecorators: { filter: [{
1877
+ type: Input
1878
+ }] } });
1879
+
1880
+ class TaonConfirmDialogComponent {
1881
+ constructor() {
1882
+ this.data = inject(MAT_DIALOG_DATA);
1883
+ this.dialogRef = inject((MatDialogRef));
1884
+ }
1885
+ cancel() {
1886
+ this.dialogRef.close(false);
1887
+ }
1888
+ confirm() {
1889
+ this.dialogRef.close(true);
1890
+ }
1891
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonConfirmDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1892
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonConfirmDialogComponent, isStandalone: true, selector: "taon-confirm-dialog", ngImport: i0, template: "<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || 'Cancel' }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || 'OK' }}\n </button>\n </div>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }] }); }
1893
+ }
1894
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonConfirmDialogComponent, decorators: [{
1895
+ type: Component,
1896
+ args: [{ selector: 'taon-confirm-dialog', standalone: true, imports: [MatDialogModule, MatButtonModule], template: "<div\n class=\"flex min-w-[320px] max-w-[560px] flex-col gap-6 p-6 text-gray-900 dark:text-gray-100 sm:p-7\">\n <!-- Header -->\n <h2 class=\"m-0 text-xl leading-snug font-medium sm:text-2xl\">\n {{ data.title }}\n </h2>\n\n <!-- Message -->\n @if (data.message) {\n <p\n class=\"m-0 whitespace-pre-line text-base leading-relaxed text-gray-600 dark:text-gray-300 sm:text-lg\">\n {{ data.message }}\n </p>\n }\n\n <!-- Actions -->\n <div class=\"flex flex-wrap items-center justify-end gap-3\">\n <button\n mat-button\n type=\"button\"\n (click)=\"cancel()\">\n {{ data.cancelText || 'Cancel' }}\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n class=\"!rounded-full !px-6\"\n (click)=\"confirm()\">\n {{ data.confirmText || 'OK' }}\n </button>\n </div>\n</div>\n" }]
1897
+ }] });
1898
+
1899
+ //namespace TaonConfirmDialogModels
1900
+ //end of namespace TaonConfirmDialogModels
1901
+
1902
+ //#region imports
1903
+ //#endregion
1904
+ const defaultColumns = [
1905
+ {
1906
+ header: 'ID',
1907
+ field: 'id',
1908
+ },
1909
+ {
1910
+ header: 'NAME',
1911
+ field: 'name',
1912
+ },
1913
+ ];
1914
+ class TaonDatatableComponent {
1915
+ constructor() {
1916
+ this.cdr = inject(ChangeDetectorRef);
1917
+ this.destroyRef = inject(DestroyRef);
1918
+ //#region inputs
1919
+ this.pageNumber = 1;
1920
+ this.pageSize = 10;
1921
+ this.pageSizeOptions = [5, 10, 20, 50, 100];
1922
+ this.allowedColumns = [];
1923
+ this.columns = defaultColumns;
1924
+ this.hideSearch = false;
1925
+ this.hideAddButton = false;
1926
+ this.safe = false;
1927
+ this.searchMode = 'advanced';
1928
+ //#endregion
1929
+ //#region outputs
1930
+ this.expansionChange = new EventEmitter();
1931
+ this.addingItem = new EventEmitter();
1932
+ //#endregion
1933
+ //#region fields
1934
+ this.rows = [];
1935
+ this.totalElements = 0;
1936
+ this.isLoading = false;
1937
+ this.expandable = false;
1938
+ this.advancedSearchOpened = false;
1939
+ this.searchValue = '';
1940
+ this.columnFilters = {};
1941
+ this.reload$ = new BehaviorSubject(undefined);
1942
+ this.searchChange$ = new Subject();
1943
+ this.data$ = this.reload$.pipe(switchMap(() => this.loadData()));
1944
+ }
1945
+ set data(value) {
1946
+ this._data = value ?? undefined;
1947
+ if (this._data) {
1948
+ this.pageNumber = 1;
1949
+ this.reload();
1950
+ }
1951
+ }
1952
+ get data() {
1953
+ return this._data;
1954
+ }
1955
+ get offlineMode() {
1956
+ return this.data !== undefined;
1957
+ }
1958
+ //#endregion
1959
+ //#region getters
1960
+ get entity() {
1961
+ return this.entityCrudController?.entityClassResolveFn();
1962
+ }
1963
+ get filterableColumns() {
1964
+ return this.columns.filter(column => Boolean(column.field));
1965
+ }
1966
+ //#endregion
1967
+ //#region init
1968
+ ngOnInit() {
1969
+ this.prepareColumns();
1970
+ // console.log({ columns: this.columns });
1971
+ this.expandable = Boolean(this.expansionTemplate);
1972
+ this.showPaginator = ___NS__isBoolean(this.showPaginator)
1973
+ ? this.showPaginator
1974
+ : Boolean(this.entity) || this.offlineMode;
1975
+ this.searchChange$
1976
+ .pipe(debounceTime(400), distinctUntilChanged(), tap(search => {
1977
+ this.searchValue = search;
1978
+ this.pageNumber = 1;
1979
+ this.reload();
1980
+ }), takeUntilDestroyed(this.destroyRef))
1981
+ .subscribe();
1982
+ this.data$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(rows => {
1983
+ this.rows = rows;
1984
+ this.cdr.markForCheck();
1985
+ });
1986
+ }
1987
+ //#endregion
1988
+ //#region search
1989
+ searchChanged(value) {
1990
+ this.searchChange$.next(value);
1991
+ }
1992
+ clearSearch() {
1993
+ this.searchValue = '';
1994
+ this.columnFilters = {};
1995
+ this.pageNumber = 1;
1996
+ this.reload();
1997
+ }
1998
+ applyAdvancedFilters() {
1999
+ this.pageNumber = 1;
2000
+ this.reload();
2001
+ }
2002
+ toggleAdvancedSearch() {
2003
+ this.advancedSearchOpened = !this.advancedSearchOpened;
2004
+ }
2005
+ //#endregion
2006
+ //#region pagination
2007
+ getNextPage(event) {
2008
+ this.pageNumber = event.pageIndex + 1;
2009
+ this.pageSize = event.pageSize;
2010
+ this.reload();
2011
+ }
2012
+ //#endregion
2013
+ //#region sorting
2014
+ sortChanged(event) {
2015
+ const field = event?.active ?? event?.field;
2016
+ const direction = event?.direction ?? '';
2017
+ this.sort = {
2018
+ field,
2019
+ direction,
2020
+ };
2021
+ this.pageNumber = 1;
2022
+ this.reload();
2023
+ }
2024
+ //#endregion
2025
+ //#region data
2026
+ reload() {
2027
+ this.reload$.next();
2028
+ }
2029
+ getFieldValue(row, field) {
2030
+ return field.split('.').reduce((value, key) => value?.[key], row);
2031
+ }
2032
+ loadOfflineData() {
2033
+ let rows = [...(this.data ?? [])];
2034
+ //#region global search
2035
+ const search = this.searchValue.trim().toLowerCase();
2036
+ if (search) {
2037
+ rows = rows.filter(row => this.columns.some(column => {
2038
+ if (!column.field) {
2039
+ return false;
2040
+ }
2041
+ const value = this.getFieldValue(row, String(column.field));
2042
+ return String(value ?? '')
2043
+ .toLowerCase()
2044
+ .includes(search);
2045
+ }));
2046
+ }
2047
+ //#endregion
2048
+ //#region column filters
2049
+ const filters = this.cleanFilters(this.columnFilters);
2050
+ for (const [field, filterValue] of Object.entries(filters)) {
2051
+ const normalizedFilter = filterValue.toLowerCase();
2052
+ rows = rows.filter(row => {
2053
+ const value = this.getFieldValue(row, field);
2054
+ return String(value ?? '')
2055
+ .toLowerCase()
2056
+ .includes(normalizedFilter);
2057
+ });
2058
+ }
2059
+ //#endregion
2060
+ //#region sorting
2061
+ if (this.sort?.field && this.sort.direction) {
2062
+ const field = String(this.sort.field);
2063
+ const direction = this.sort.direction === 'desc' ? -1 : 1;
2064
+ rows.sort((a, b) => {
2065
+ const aValue = this.getFieldValue(a, field);
2066
+ const bValue = this.getFieldValue(b, field);
2067
+ if (aValue === bValue) {
2068
+ return 0;
2069
+ }
2070
+ if (aValue === undefined || aValue === null) {
2071
+ return -1 * direction;
2072
+ }
2073
+ if (bValue === undefined || bValue === null) {
2074
+ return 1 * direction;
2075
+ }
2076
+ if (typeof aValue === 'number' && typeof bValue === 'number') {
2077
+ return (aValue - bValue) * direction;
2078
+ }
2079
+ return (String(aValue).localeCompare(String(bValue), undefined, {
2080
+ numeric: true,
2081
+ sensitivity: 'base',
2082
+ }) * direction);
2083
+ });
2084
+ }
2085
+ //#endregion
2086
+ //#region pagination
2087
+ this.totalElements = rows.length;
2088
+ const start = (this.pageNumber - 1) * this.pageSize;
2089
+ const end = start + this.pageSize;
2090
+ return this.prepareRows(rows.slice(start, end));
2091
+ //#endregion
2092
+ }
2093
+ loadData() {
2094
+ if (this.offlineMode) {
2095
+ return of(this.loadOfflineData());
2096
+ }
2097
+ if (!this.entity || !this.entityCrudController) {
2098
+ this.totalElements = 0;
2099
+ return of([]);
2100
+ }
2101
+ this.isLoading = true;
2102
+ this.cdr.markForCheck();
2103
+ const query = {
2104
+ pageNumber: this.pageNumber,
2105
+ pageSize: this.pageSize,
2106
+ search: this.searchValue,
2107
+ filters: this.cleanFilters(this.columnFilters),
2108
+ sort: this.sort,
2109
+ callQueryMethod: this.callQueryMethod,
2110
+ };
2111
+ //#region handle info when not allowed method on controller level
2112
+ if (!this.safe && !this.entityCrudController.paginationQuery(query)) {
2113
+ throw new Error(`Please enable paginationQuery() method in your
2114
+ controller ${ClassHelpers__NS__getName(this.entityCrudController)}
2115
+
2116
+ @Controller({ allowedMethods: ['paginationQuery'] })
2117
+ class ${ClassHelpers__NS__getName(this.entityCrudController)} ..
2118
+ `);
2119
+ }
2120
+ if (this.safe && !this.entityCrudController.paginationQuerySafe(query)) {
2121
+ throw new Error(`Please enable paginationQuerySafe() method in your controller
2122
+ ${ClassHelpers__NS__getName(this.entityCrudController)}
2123
+
2124
+ @Controller({ allowedMethods: ['paginationQuerySafe'] })
2125
+ class ${ClassHelpers__NS__getName(this.entityCrudController)} ..
2126
+ `);
2127
+ }
2128
+ //#endregion
2129
+ return from((this.safe
2130
+ ? this.entityCrudController.paginationQuerySafe
2131
+ : this.entityCrudController.paginationQuery)(query).request()
2132
+ .observable).pipe(tap(response => {
2133
+ this.totalElements =
2134
+ Number(response.headers.get(Symbols__NS__old.X_TOTAL_COUNT)) || 0;
2135
+ }), map(response => this.prepareRows(response.body.json)), catchError(error => {
2136
+ console.error(`[taon-datatable] Unable to load data from ` +
2137
+ `${ClassHelpers__NS__getName(this.entityCrudController)} ${this.safe ? 'paginationQuerySafe' : 'paginationQuery'}`, error);
2138
+ return of([]);
2139
+ }), finalize(() => {
2140
+ this.isLoading = false;
2141
+ this.cdr.markForCheck();
2142
+ }));
2143
+ }
2144
+ //#endregion
2145
+ //#region helpers
2146
+ cleanFilters(filters) {
2147
+ return Object.fromEntries(Object.entries(filters)
2148
+ .filter(([, value]) => value !== undefined &&
2149
+ value !== null &&
2150
+ String(value).trim() !== '')
2151
+ .map(([key, value]) => [key, String(value).trim()]));
2152
+ }
2153
+ prepareRows(rows) {
2154
+ return rows.map(row => {
2155
+ // const result = {
2156
+ // ...row,
2157
+ // };
2158
+ // for (const key of Object.keys(result)) {
2159
+ // if (___NS__isObject(result[key])) {
2160
+ // result[key] = json5.stringify(result[key]);
2161
+ // }
2162
+ // }
2163
+ return row;
2164
+ });
2165
+ }
2166
+ prepareColumns() {
2167
+ const entityClass = this.entity;
2168
+ if (!entityClass) {
2169
+ return;
2170
+ }
2171
+ const usingDefaultColumns = ___NS__isEqual(this.columns, defaultColumns);
2172
+ if (!usingDefaultColumns) {
2173
+ return;
2174
+ }
2175
+ try {
2176
+ const props = Object.keys(getDefaultModel(entityClass) || {});
2177
+ let columns = props
2178
+ .filter(prop => this.allowedColumns.length > 0
2179
+ ? this.allowedColumns.includes(prop)
2180
+ : true)
2181
+ .map(prop => ({
2182
+ header: ___NS__upperCase(prop),
2183
+ field: prop,
2184
+ }));
2185
+ const extra = this.allowedColumns.filter(field => !props.includes(field));
2186
+ columns = [
2187
+ ...columns,
2188
+ ...extra.map(field => ({
2189
+ header: ___NS__upperCase(field),
2190
+ field,
2191
+ })),
2192
+ ];
2193
+ this.columns = columns;
2194
+ }
2195
+ catch (error) {
2196
+ console.error('[taon-datatable] Unable to generate columns', error);
2197
+ }
2198
+ }
2199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2200
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDatatableComponent, isStandalone: true, selector: "taon-datatable", inputs: { pageNumber: "pageNumber", pageSize: "pageSize", pageSizeOptions: "pageSizeOptions", allowedColumns: "allowedColumns", expansionTemplate: "expansionTemplate", entityCrudController: "entityCrudController", columns: "columns", hideSearch: "hideSearch", hideAddButton: "hideAddButton", safe: "safe", searchMode: "searchMode", callQueryMethod: "callQueryMethod", data: "data", showPaginator: "showPaginator" }, outputs: { expansionChange: "expansionChange", addingItem: "addingItem" }, ngImport: i0, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n placeholder=\"Search...\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n Filters\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n title=\"Refresh\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n Add\n </button>\n }\n </div>\n }\n\n <!-- advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n Clear\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n Apply filters\n </button>\n </div>\n </div>\n }\n\n <!-- grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n Loading...\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"expansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"expansionChange.emit($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3$2.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i3$2.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: MtxGridModule }, { kind: "component", type: i6.MtxGrid, selector: "mtx-grid", inputs: ["displayedColumns", "columns", "data", "length", "loading", "trackBy", "columnResizable", "emptyValuePlaceholder", "pageOnFront", "showPaginator", "pageDisabled", "showFirstLastButtons", "pageIndex", "pageSize", "pageSizeOptions", "hidePageSize", "paginationTemplate", "sortOnFront", "sortActive", "sortDirection", "sortDisableClear", "sortDisabled", "sortStart", "rowHover", "rowStriped", "expandable", "expansionTemplate", "multiSelectable", "multiSelectionWithClick", "rowSelectable", "hideRowSelectionCheckbox", "disableRowClickSelection", "rowSelectionFormatter", "rowClassFormatter", "rowSelected", "cellSelectable", "showToolbar", "toolbarTitle", "toolbarTemplate", "columnHideable", "columnHideableChecked", "columnSortable", "columnPinnable", "columnPinOptions", "showColumnMenuButton", "columnMenuButtonText", "columnMenuButtonType", "columnMenuButtonColor", "columnMenuButtonClass", "columnMenuButtonIcon", "columnMenuButtonFontIcon", "columnMenuButtonSvgIcon", "showColumnMenuHeader", "columnMenuHeaderText", "columnMenuHeaderTemplate", "showColumnMenuFooter", "columnMenuFooterText", "columnMenuFooterTemplate", "noResultText", "noResultTemplate", "headerTemplate", "headerExtraTemplate", "cellTemplate", "useContentRowTemplate", "useContentHeaderRowTemplate", "useContentFooterRowTemplate", "showSummary", "summaryTemplate", "showSidebar", "sidebarTemplate", "showStatusbar", "statusbarTemplate"], outputs: ["page", "sortChange", "rowClick", "rowContextMenu", "expansionChange", "rowSelectedChange", "cellSelectedChange", "columnChange"], exportAs: ["mtxGrid"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2201
+ }
2202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDatatableComponent, decorators: [{
2203
+ type: Component,
2204
+ args: [{ selector: 'taon-datatable', standalone: true, imports: [
2205
+ CommonModule,
2206
+ FormsModule,
2207
+ ReactiveFormsModule,
2208
+ MatButtonModule,
2209
+ MatFormFieldModule,
2210
+ MatIconModule,
2211
+ MatInputModule,
2212
+ MatPaginatorModule,
2213
+ MatSelectModule,
2214
+ MtxGridModule,
2215
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex w-full flex-col gap-3\">\n <!-- toolbar -->\n @if (!hideSearch) {\n <div\n class=\"flex w-full flex-col gap-2 rounded-lg border border-gray-200 bg-white p-3 shadow-sm dark:border-gray-700 dark:bg-gray-900 md:flex-row md:items-center\">\n <!-- global search -->\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"min-w-0 flex-1\">\n <mat-icon matPrefix> search </mat-icon>\n\n <input\n matInput\n placeholder=\"Search...\"\n [value]=\"searchValue\"\n (input)=\"searchChanged($any($event.target).value)\" />\n\n @if (searchValue) {\n <button\n mat-icon-button\n matSuffix\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n\n <!-- advanced search -->\n @if (searchMode === 'advanced') {\n <button\n mat-stroked-button\n type=\"button\"\n (click)=\"toggleAdvancedSearch()\">\n <mat-icon> tune </mat-icon>\n\n Filters\n\n @if (advancedSearchOpened) {\n <mat-icon> expand_less </mat-icon>\n } @else {\n <mat-icon> expand_more </mat-icon>\n }\n </button>\n }\n\n <!-- refresh -->\n <button\n mat-icon-button\n type=\"button\"\n title=\"Refresh\"\n (click)=\"reload()\">\n <mat-icon> refresh </mat-icon>\n </button>\n\n <!-- add -->\n @if (!hideAddButton) {\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"addingItem.emit()\">\n <mat-icon> add </mat-icon>\n\n Add\n </button>\n }\n </div>\n }\n\n <!-- advanced filters -->\n @if (!hideSearch && searchMode === 'advanced' && advancedSearchOpened) {\n <div\n class=\"grid grid-cols-1 gap-3 rounded-lg border border-gray-200 bg-gray-50 p-4 shadow-sm dark:border-gray-700 dark:bg-gray-800 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\">\n @for (column of filterableColumns; track column.field) {\n <mat-form-field\n appearance=\"outline\"\n subscriptSizing=\"dynamic\"\n class=\"w-full\">\n <mat-label>\n {{ column.header }}\n </mat-label>\n\n <input\n matInput\n [(ngModel)]=\"columnFilters[$any(column.field)]\"\n (keyup.enter)=\"applyAdvancedFilters()\" />\n </mat-form-field>\n }\n\n <div\n class=\"flex items-center justify-end gap-2 md:col-span-2 lg:col-span-3 xl:col-span-4\">\n <button\n mat-button\n type=\"button\"\n (click)=\"clearSearch()\">\n <mat-icon> filter_alt_off </mat-icon>\n\n Clear\n </button>\n\n <button\n mat-flat-button\n color=\"primary\"\n type=\"button\"\n (click)=\"applyAdvancedFilters()\">\n <mat-icon> filter_alt </mat-icon>\n\n Apply filters\n </button>\n </div>\n </div>\n }\n\n <!-- grid -->\n <div\n class=\"relative min-h-[250px] overflow-hidden rounded-lg border border-gray-200 bg-white shadow-sm dark:border-gray-700 dark:bg-gray-900\">\n @if (isLoading) {\n <div\n class=\"absolute inset-0 z-10 flex items-center justify-center bg-white/60 backdrop-blur-[1px] dark:bg-gray-900/60\">\n <div\n class=\"flex items-center gap-2 rounded-md bg-white px-4 py-2 shadow dark:bg-gray-800\">\n <mat-icon class=\"animate-spin\"> refresh </mat-icon>\n\n Loading...\n </div>\n </div>\n }\n\n <mtx-grid\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"expansionTemplate\"\n [length]=\"totalElements\"\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (expansionChange)=\"expansionChange.emit($event)\"\n (page)=\"getNextPage($event)\"\n (sortChange)=\"sortChanged($event)\">\n </mtx-grid>\n </div>\n</div>\n", styles: [":host{display:block;width:100%;min-height:250px}:host ::ng-deep .mat-mdc-form-field{margin:0}\n"] }]
2216
+ }], propDecorators: { pageNumber: [{
2217
+ type: Input
2218
+ }], pageSize: [{
2219
+ type: Input
2220
+ }], pageSizeOptions: [{
2221
+ type: Input
2222
+ }], allowedColumns: [{
2223
+ type: Input
2224
+ }], expansionTemplate: [{
2225
+ type: Input
2226
+ }], entityCrudController: [{
2227
+ type: Input
2228
+ }], columns: [{
2229
+ type: Input
2230
+ }], hideSearch: [{
2231
+ type: Input
2232
+ }], hideAddButton: [{
2233
+ type: Input
2234
+ }], safe: [{
2235
+ type: Input
2236
+ }], searchMode: [{
2237
+ type: Input
2238
+ }], callQueryMethod: [{
2239
+ type: Input
2240
+ }], data: [{
2241
+ type: Input
2242
+ }], expansionChange: [{
2243
+ type: Output
2244
+ }], addingItem: [{
2245
+ type: Output
2246
+ }], showPaginator: [{
2247
+ type: Input
2248
+ }] } });
2249
+
2250
+ var taonDatatable_component = /*#__PURE__*/Object.freeze({
2251
+ __proto__: null,
2252
+ TaonDatatableComponent: TaonDatatableComponent
2253
+ });
2254
+
2255
+ //namespace TaonDatatableModels
2256
+ //end of namespace TaonDatatableModels
2257
+
2258
+ //#endregion
2259
+ const TaonDatatableRoutes = [
2260
+ {
2261
+ path: '',
2262
+ loadComponent: () => Promise.resolve().then(function () { return taonDatatable_component; }).then(m => m.TaonDatatableComponent),
2263
+ children: [
2264
+ // adminLazyRoute({
2265
+ // path: 'dashboard',
2266
+ // menuItem: 'Dashboard',
2267
+ // icon: 'dashboard',
2268
+ // expandable: false,
2269
+ // loader: () =>
2270
+ // import('./anothermodule.routes').then(m => m.DashboardRoutes),
2271
+ // }),
2272
+ ],
2273
+ },
2274
+ ];
2275
+ /**
2276
+ * By default exporting TaonDatatableRoutes,
2277
+ * the command `taon generate:app:routes`
2278
+ * will automatically add them to the root routes in ./src/app.ts.
2279
+ */
2280
+ // export default TaonDatatableRoutes;
2281
+
1577
2282
  var TaonDraggableButtonPanelState;
1578
2283
  (function (TaonDraggableButtonPanelState) {
1579
2284
  TaonDraggableButtonPanelState["CLICKABLE_BUTTON"] = "CLICKABLE_BUTTON";
@@ -1584,6 +2289,8 @@ var TaonDraggableButtonPanelState;
1584
2289
  //namespace TaonDraggableButtonPanelModels
1585
2290
  //end of namespace TaonDraggableButtonPanelModels
1586
2291
 
2292
+ //#region imports
2293
+ //#endregion
1587
2294
  class TaonDraggableButtonPanelComponent {
1588
2295
  set state(state) {
1589
2296
  this.currentState.set(state);
@@ -1599,11 +2306,60 @@ class TaonDraggableButtonPanelComponent {
1599
2306
  */
1600
2307
  this.stateParamName = 'state';
1601
2308
  this.stateChange = new EventEmitter();
2309
+ this.forceFullScreen = signal(window.innerWidth < 900, ...(ngDevMode ? [{ debugName: "forceFullScreen" }] : []));
2310
+ this.resizeListener = () => {
2311
+ const wasForceFullScreen = this.forceFullScreen();
2312
+ const forceFullScreen = window.innerWidth < 900;
2313
+ this.forceFullScreen.set(forceFullScreen);
2314
+ // Desktop -> mobile: remove old CDK drag x/y transform.
2315
+ if (!wasForceFullScreen && forceFullScreen) {
2316
+ this.resetDragPosition();
2317
+ }
2318
+ };
1602
2319
  this.currentState = signal(TaonDraggableButtonPanelState.CLICKABLE_BUTTON, ...(ngDevMode ? [{ debugName: "currentState" }] : []));
1603
2320
  }
1604
2321
  async ngOnInit() {
2322
+ window.addEventListener('resize', this.resizeListener);
2323
+ /**
2324
+ * IMPORTANT:
2325
+ *
2326
+ * The component may be created while Angular is still processing
2327
+ * the application's initial navigation.
2328
+ *
2329
+ * For example:
2330
+ *
2331
+ * / -> redirectTo: /app
2332
+ *
2333
+ * If we create:
2334
+ *
2335
+ * (admin:main)
2336
+ *
2337
+ * before that redirect finishes, the auxiliary outlet navigation
2338
+ * may effectively replace/interfere with the primary navigation,
2339
+ * producing:
2340
+ *
2341
+ * /(admin:main)
2342
+ *
2343
+ * instead of:
2344
+ *
2345
+ * /app(admin:main)
2346
+ */
2347
+ await this.waitForInitialNavigation();
2348
+ /**
2349
+ * Ensure the auxiliary outlet exists only AFTER the primary
2350
+ * application route has settled.
2351
+ */
1605
2352
  await this.ensureOutletBasePath();
2353
+ /**
2354
+ * The outlet may already contain persisted state, e.g.
2355
+ *
2356
+ * (admin:main;state=WINDOW/dashboard)
2357
+ */
1606
2358
  this.restoreStateFromUrl();
2359
+ /**
2360
+ * From this point on keep the component state synchronized
2361
+ * with subsequent router navigations.
2362
+ */
1607
2363
  this.routerSubscription = this.router.events
1608
2364
  .pipe(filter(event => event instanceof NavigationEnd))
1609
2365
  .subscribe(() => {
@@ -1611,18 +2367,77 @@ class TaonDraggableButtonPanelComponent {
1611
2367
  });
1612
2368
  }
1613
2369
  ngOnDestroy() {
2370
+ window.removeEventListener('resize', this.resizeListener);
1614
2371
  this.routerSubscription?.unsubscribe();
1615
2372
  }
2373
+ toogleFullscreen(event) {
2374
+ event.stopImmediatePropagation();
2375
+ event.stopPropagation();
2376
+ event.preventDefault();
2377
+ if (this.forceFullScreen()) {
2378
+ return;
2379
+ }
2380
+ if (this.currentState() === TaonDraggableButtonPanelState.WINDOW) {
2381
+ this.resetDragPosition();
2382
+ void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);
2383
+ }
2384
+ else if ([
2385
+ TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE,
2386
+ TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED,
2387
+ ].includes(this.currentState())) {
2388
+ this.resetDragPosition();
2389
+ void this.setState(TaonDraggableButtonPanelState.WINDOW);
2390
+ }
2391
+ }
2392
+ effectiveState() {
2393
+ if (this.forceFullScreen() &&
2394
+ this.currentState() !== TaonDraggableButtonPanelState.CLICKABLE_BUTTON) {
2395
+ return TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED;
2396
+ }
2397
+ return this.currentState();
2398
+ }
2399
+ // ===========================================================================
2400
+ // INITIAL ROUTING
2401
+ // ===========================================================================
2402
+ async waitForInitialNavigation() {
2403
+ /**
2404
+ * Router already completed at least one navigation.
2405
+ */
2406
+ if (this.router.navigated) {
2407
+ return;
2408
+ }
2409
+ /**
2410
+ * Wait until redirects/lazy routing/etc. belonging to the initial
2411
+ * navigation have settled.
2412
+ */
2413
+ await firstValueFrom(this.router.events.pipe(filter(event => event instanceof NavigationEnd), take(1)));
2414
+ }
1616
2415
  async ensureOutletBasePath() {
1617
2416
  if (!this.outlet || !this.basePath) {
1618
2417
  return;
1619
2418
  }
2419
+ /**
2420
+ * IMPORTANT:
2421
+ *
2422
+ * Parse the URL only AFTER initial navigation has completed.
2423
+ *
2424
+ * At this point:
2425
+ *
2426
+ * /
2427
+ *
2428
+ * may already have become:
2429
+ *
2430
+ * /app
2431
+ */
1620
2432
  const tree = this.router.parseUrl(this.router.url);
1621
2433
  /**
1622
- * Outlet already exists — don't touch it.
2434
+ * Outlet already exists — preserve it exactly as it is.
1623
2435
  *
1624
- * For example:
1625
- * (admin:main/session/providers)
2436
+ * Examples:
2437
+ *
2438
+ * /app(admin:main)
2439
+ *
2440
+ * /app(admin:main;state=WINDOW/dashboard)
1626
2441
  */
1627
2442
  if (tree.root.children[this.outlet]) {
1628
2443
  return;
@@ -1631,6 +2446,18 @@ class TaonDraggableButtonPanelComponent {
1631
2446
  if (!baseSegments.length) {
1632
2447
  return;
1633
2448
  }
2449
+ /**
2450
+ * Add the auxiliary outlet while preserving the current
2451
+ * primary route.
2452
+ *
2453
+ * Example:
2454
+ *
2455
+ * /app
2456
+ *
2457
+ * becomes:
2458
+ *
2459
+ * /app(admin:main)
2460
+ */
1634
2461
  await this.router.navigate([
1635
2462
  {
1636
2463
  outlets: {
@@ -1670,6 +2497,9 @@ class TaonDraggableButtonPanelComponent {
1670
2497
  void this.setState(TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED);
1671
2498
  }
1672
2499
  isDraggingEnabled() {
2500
+ if (this.forceFullScreen()) {
2501
+ return false;
2502
+ }
1673
2503
  return (this.currentState() === TaonDraggableButtonPanelState.WINDOW ||
1674
2504
  this.currentState() ===
1675
2505
  TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE);
@@ -1687,11 +2517,11 @@ class TaonDraggableButtonPanelComponent {
1687
2517
  return;
1688
2518
  }
1689
2519
  /**
1690
- * We store the panel state on the first segment:
2520
+ * State is stored on the first auxiliary outlet segment:
1691
2521
  *
1692
2522
  * admin:
1693
2523
  *
1694
- * main;state=WINDOW/session/providers
2524
+ * main;state=WINDOW/dashboard
1695
2525
  * └────────────────┘
1696
2526
  */
1697
2527
  const rootSegment = outletGroup.segments[0];
@@ -1703,15 +2533,14 @@ class TaonDraggableButtonPanelComponent {
1703
2533
  return;
1704
2534
  }
1705
2535
  /**
1706
- * URL restoration should NOT go through
1707
- * the transition state machine.
2536
+ * URL restoration should NOT go through the transition
2537
+ * state machine.
1708
2538
  *
1709
- * A bookmarked URL is authoritative.
2539
+ * A bookmarked/refreshed URL is authoritative.
1710
2540
  */
1711
2541
  this.currentState.set(state);
1712
2542
  /**
1713
- * Fullscreen must never inherit an old
1714
- * CdkDrag transform.
2543
+ * Fullscreen must never inherit an old CdkDrag transform.
1715
2544
  */
1716
2545
  if (state === TaonDraggableButtonPanelState.FULL_SCREEN_DRAGGABLE ||
1717
2546
  state === TaonDraggableButtonPanelState.FULL_SCREEN_LOCKED) {
@@ -1729,15 +2558,15 @@ class TaonDraggableButtonPanelComponent {
1729
2558
  /**
1730
2559
  * The outlet might not yet exist.
1731
2560
  *
1732
- * In that case there is nowhere sensible
1733
- * to attach its matrix parameter.
2561
+ * In that case there is nowhere sensible to attach
2562
+ * its matrix parameter.
1734
2563
  */
1735
2564
  if (!outletGroup || outletGroup.segments.length === 0) {
1736
2565
  return;
1737
2566
  }
1738
2567
  const rootSegment = outletGroup.segments[0];
1739
2568
  /**
1740
- * Preserve any existing matrix params.
2569
+ * Preserve any existing matrix parameters.
1741
2570
  */
1742
2571
  rootSegment.parameters = {
1743
2572
  ...rootSegment.parameters,
@@ -1784,17 +2613,18 @@ class TaonDraggableButtonPanelComponent {
1784
2613
  return transitions[current].includes(next);
1785
2614
  }
1786
2615
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDraggableButtonPanelComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); }
1787
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDraggableButtonPanelComponent, isStandalone: true, selector: "taon-draggable-button-panel", inputs: { basePath: "basePath", buttonIcon: "buttonIcon", title: "title", outlet: "outlet", stateParamName: "stateParamName", state: "state" }, outputs: { stateChange: "stateChange" }, viewQueries: [{ propertyName: "drag", first: true, predicate: CdkDrag, descendants: true }], ngImport: i0, template: "@if (currentState() === State.CLICKABLE_BUTTON) {\n <!-- ============================================================ -->\n <!-- BUTTON -->\n <!-- ============================================================ -->\n\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"open()\">\n <mat-icon>\n {{ buttonIcon }}\n </mat-icon>\n </button>\n} @else {\n <!-- ============================================================ -->\n <!-- PANEL -->\n <!-- ============================================================ -->\n\n <section\n cdkDrag\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"currentState() === State.WINDOW\"\n [class.taon-fullscreen]=\"\n currentState() === State.FULL_SCREEN_DRAGGABLE ||\n currentState() === State.FULL_SCREEN_LOCKED\n \">\n <!-- ========================================================== -->\n <!-- WINDOW BAR / DRAG HANDLE -->\n <!-- ========================================================== -->\n\n <header\n cdkDragHandle\n class=\"taon-window-bar\">\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <div class=\"flex shrink-0 items-center\">\n <!-- WINDOW MODE -->\n\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon> filter_none </mat-icon>\n </button>\n }\n\n <!-- FULLSCREEN -->\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon> fullscreen </mat-icon>\n </button>\n }\n\n <!-- LOCK -->\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon> lock_open </mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon> lock </mat-icon>\n </button>\n }\n\n <!-- RETURN TO BUTTON -->\n\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon> close </mat-icon>\n </button>\n </div>\n </header>\n\n <!-- ========================================================== -->\n <!-- CONTENT -->\n <!-- ========================================================== -->\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n </section>\n}\n", styles: [":host{display:contents}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:50vw;height:50vh;left:25vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:flex;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2616
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonDraggableButtonPanelComponent, isStandalone: true, selector: "taon-draggable-button-panel", inputs: { basePath: "basePath", buttonIcon: "buttonIcon", title: "title", outlet: "outlet", stateParamName: "stateParamName", state: "state" }, outputs: { stateChange: "stateChange" }, viewQueries: [{ propertyName: "drag", first: true, predicate: CdkDrag, descendants: true }], ngImport: i0, template: "@if (currentState() === State.CLICKABLE_BUTTON) {\n <!-- #region BUTTON - works on desktop AND mobile -->\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"open()\">\n <mat-icon>\n {{ buttonIcon }}\n </mat-icon>\n </button>\n <!-- #endregion -->\n} @else {\n <section\n cdkDrag\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n </section>\n}\n", styles: [":host{display:contents}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:70vw;height:70vh;left:15vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:flex;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1788
2617
  }
1789
2618
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonDraggableButtonPanelComponent, decorators: [{
1790
2619
  type: Component,
1791
2620
  args: [{ selector: 'taon-draggable-button-panel', standalone: true, imports: [
1792
2621
  CdkDrag,
1793
2622
  CdkDragHandle,
2623
+ NgIf,
1794
2624
  MatButtonModule,
1795
2625
  MatIconModule,
1796
2626
  MatTooltipModule,
1797
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (currentState() === State.CLICKABLE_BUTTON) {\n <!-- ============================================================ -->\n <!-- BUTTON -->\n <!-- ============================================================ -->\n\n <button\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"open()\">\n <mat-icon>\n {{ buttonIcon }}\n </mat-icon>\n </button>\n} @else {\n <!-- ============================================================ -->\n <!-- PANEL -->\n <!-- ============================================================ -->\n\n <section\n cdkDrag\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"currentState() === State.WINDOW\"\n [class.taon-fullscreen]=\"\n currentState() === State.FULL_SCREEN_DRAGGABLE ||\n currentState() === State.FULL_SCREEN_LOCKED\n \">\n <!-- ========================================================== -->\n <!-- WINDOW BAR / DRAG HANDLE -->\n <!-- ========================================================== -->\n\n <header\n cdkDragHandle\n class=\"taon-window-bar\">\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <div class=\"flex shrink-0 items-center\">\n <!-- WINDOW MODE -->\n\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon> filter_none </mat-icon>\n </button>\n }\n\n <!-- FULLSCREEN -->\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon> fullscreen </mat-icon>\n </button>\n }\n\n <!-- LOCK -->\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon> lock_open </mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon> lock </mat-icon>\n </button>\n }\n\n <!-- RETURN TO BUTTON -->\n\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon> close </mat-icon>\n </button>\n </div>\n </header>\n\n <!-- ========================================================== -->\n <!-- CONTENT -->\n <!-- ========================================================== -->\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n </section>\n}\n", styles: [":host{display:contents}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:50vw;height:50vh;left:25vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:flex;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"] }]
2627
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (currentState() === State.CLICKABLE_BUTTON) {\n <!-- #region BUTTON - works on desktop AND mobile -->\n <button\n class=\"taon-admin-panel-toogle-open-button\"\n mat-icon-button\n type=\"button\"\n [matTooltip]=\"title\"\n (click)=\"open()\">\n <mat-icon>\n {{ buttonIcon }}\n </mat-icon>\n </button>\n <!-- #endregion -->\n} @else {\n <section\n cdkDrag\n [cdkDragDisabled]=\"!isDraggingEnabled()\"\n class=\"taon-draggable-panel\"\n [class.taon-window]=\"effectiveState() === State.WINDOW\"\n [class.taon-fullscreen]=\"\n effectiveState() === State.FULL_SCREEN_DRAGGABLE ||\n effectiveState() === State.FULL_SCREEN_LOCKED\n \">\n <header\n cdkDragHandle\n (dblclick)=\"toogleFullscreen($event)\"\n class=\"taon-window-bar\">\n <div class=\"flex min-w-0 flex-1 items-center gap-2\">\n <mat-icon class=\"text-gray-500\"> admin_panel_settings </mat-icon>\n\n <span class=\"truncate font-medium\">\n {{ title }}\n </span>\n </div>\n\n <!-- #region window buttons -->\n <div class=\"flex shrink-0 items-center\">\n <!-- Desktop-only window/fullscreen controls -->\n @if (!forceFullScreen()) {\n @if (currentState() !== State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Window mode\"\n (click)=\"windowMode()\">\n <mat-icon>filter_none</mat-icon>\n </button>\n }\n\n @if (currentState() === State.WINDOW) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Full screen\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n }\n\n @if (currentState() !== State.FULL_SCREEN_LOCKED) {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Lock full screen\"\n (click)=\"lockFullScreen()\">\n <mat-icon>lock_open</mat-icon>\n </button>\n } @else {\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Unlock\"\n (click)=\"fullScreenDraggable()\">\n <mat-icon>lock</mat-icon>\n </button>\n }\n }\n\n <!-- ALWAYS available -->\n <button\n mat-icon-button\n type=\"button\"\n matTooltip=\"Close admin panel\"\n (click)=\"returnToButton()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n <!-- #endregion -->\n </header>\n\n <div class=\"min-h-0 flex-1 overflow-hidden\">\n <ng-content />\n </div>\n </section>\n}\n", styles: [":host{display:contents}.taon-draggable-panel{position:fixed;display:flex;flex-direction:column;min-width:320px;min-height:240px;overflow:hidden;background:#fff;border:1px solid #e5e7eb;box-shadow:0 20px 50px #00000026;z-index:1000}.taon-window{width:70vw;height:70vh;left:15vw;top:25vh;border-radius:6px}.taon-fullscreen{width:100vw;height:100dvh;left:0;top:0;border-radius:0}.taon-window-bar{height:48px;display:flex;align-items:center;flex-shrink:0;padding-left:12px;border-bottom:1px solid #e5e7eb;background:#fafafa;-webkit-user-select:none;user-select:none;cursor:move}\n"] }]
1798
2628
  }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { drag: [{
1799
2629
  type: ViewChild,
1800
2630
  args: [CdkDrag]
@@ -1827,6 +2657,9 @@ const TaonDraggableButtonPanelRoutes = [
1827
2657
  // },
1828
2658
  ];
1829
2659
 
2660
+ ;
2661
+ // THIS FILE IS GENERATED - DO NOT MODIFY
2662
+
1830
2663
  // @ts-nocheck
1831
2664
  // This file is auto-generated during init process. Do not modify.
1832
2665
  // This disable this auto generate file.
@@ -1840,5 +2673,5 @@ var index = {};
1840
2673
  * Generated bundle index. Do not edit.
1841
2674
  */
1842
2675
 
1843
- export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, ENV_ANGULAR_NODE_APP_BUILD_BASE_HREF, ENV_ANGULAR_NODE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_ANGULAR_NODE_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_ANGULAR_NODE_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_ANGULAR_NODE_APP_BUILD_PROD, ENV_ANGULAR_NODE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_ANGULAR_NODE_APP_BUILD_PWA_NAME, ENV_ANGULAR_NODE_APP_BUILD_PWA_SHORT_NAME, ENV_ANGULAR_NODE_APP_BUILD_PWA_START_URL, ENV_ANGULAR_NODE_APP_BUILD_SSR, ENV_ANGULAR_NODE_APP_BUILD_WATCH, ENV_ANGULAR_NODE_APP_BUILD_WEBSQL, ENV_ANGULAR_NODE_APP_CONTAINER_END, ENV_ANGULAR_NODE_APP_CONTAINER_ONLY, ENV_ANGULAR_NODE_APP_CONTAINER_SKIP, ENV_ANGULAR_NODE_APP_CONTAINER_SKIP_RELEASED, ENV_ANGULAR_NODE_APP_CONTAINER_START, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_SKIP, ENV_ANGULAR_NODE_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_ANGULAR_NODE_APP_DOCKER_SKIP_START_IN_ORDER, ENV_ANGULAR_NODE_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_ANGULAR_NODE_APP_FINISH_CALLBACK, ENV_ANGULAR_NODE_APP_INIT_BRANDING, ENV_ANGULAR_NODE_APP_INIT_STRUCT, ENV_ANGULAR_NODE_APP_IS_CI_PROCESS, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_ANGULAR_NODE_APP_PURPOSE, ENV_ANGULAR_NODE_APP_RECURSIVE_ACTION, ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_ANGULAR_NODE_APP_RELEASE_CLI_COMPRESS, ENV_ANGULAR_NODE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_ANGULAR_NODE_APP_RELEASE_CLI_MINIFY, ENV_ANGULAR_NODE_APP_RELEASE_CLI_OBSCURE, ENV_ANGULAR_NODE_APP_RELEASE_CLI_UGLIFY, ENV_ANGULAR_NODE_APP_RELEASE_ENV_NAME, ENV_ANGULAR_NODE_APP_RELEASE_ENV_NUMBER, ENV_ANGULAR_NODE_APP_RELEASE_INSTALL_LOCALLY, ENV_ANGULAR_NODE_APP_RELEASE_LIB_COMPRESS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_ANGULAR_NODE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_ANGULAR_NODE_APP_RELEASE_LIB_REMOVE_DTS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_ANGULAR_NODE_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_ANGULAR_NODE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_TYPE, ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_ANGULAR_NODE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_ANGULAR_NODE_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_CODE_CUTTING, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_DEPLOY, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_ANGULAR_NODE_APP_RELEASE_TAON_INSTANCE_IP, ENV_ANGULAR_NODE_APP_RELEASE_TARGET_ARTIFACT, ENV_ANGULAR_NODE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_ANGULAR_NODE_APP_WEBSITE_DOMAIN, ENV_ANGULAR_NODE_APP_WEBSITE_TITLE, ENV_ANGULAR_NODE_APP_WEBSITE_USE_DOMAIN, ENV_DOCS_WEBAPP_BUILD_BASE_HREF, ENV_DOCS_WEBAPP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_DOCS_WEBAPP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_DOCS_WEBAPP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_DOCS_WEBAPP_BUILD_PROD, ENV_DOCS_WEBAPP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_DOCS_WEBAPP_BUILD_PWA_NAME, ENV_DOCS_WEBAPP_BUILD_PWA_SHORT_NAME, ENV_DOCS_WEBAPP_BUILD_PWA_START_URL, ENV_DOCS_WEBAPP_BUILD_SSR, ENV_DOCS_WEBAPP_BUILD_WATCH, ENV_DOCS_WEBAPP_BUILD_WEBSQL, ENV_DOCS_WEBAPP_CONTAINER_END, ENV_DOCS_WEBAPP_CONTAINER_ONLY, ENV_DOCS_WEBAPP_CONTAINER_SKIP, ENV_DOCS_WEBAPP_CONTAINER_SKIP_RELEASED, ENV_DOCS_WEBAPP_CONTAINER_START, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_SKIP, ENV_DOCS_WEBAPP_DOCKER_ADDITIONAL_CONTAINER, ENV_DOCS_WEBAPP_DOCKER_SKIP_START_IN_ORDER, ENV_DOCS_WEBAPP_DOCKER_SKIP_USING_MYSQL_DB, ENV_DOCS_WEBAPP_FINISH_CALLBACK, ENV_DOCS_WEBAPP_INIT_BRANDING, ENV_DOCS_WEBAPP_INIT_STRUCT, ENV_DOCS_WEBAPP_IS_CI_PROCESS, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_DOCS_WEBAPP_PURPOSE, ENV_DOCS_WEBAPP_RECURSIVE_ACTION, ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_DOCS_WEBAPP_RELEASE_CLI_COMPRESS, ENV_DOCS_WEBAPP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_DOCS_WEBAPP_RELEASE_CLI_MINIFY, ENV_DOCS_WEBAPP_RELEASE_CLI_OBSCURE, ENV_DOCS_WEBAPP_RELEASE_CLI_UGLIFY, ENV_DOCS_WEBAPP_RELEASE_ENV_NAME, ENV_DOCS_WEBAPP_RELEASE_ENV_NUMBER, ENV_DOCS_WEBAPP_RELEASE_INSTALL_LOCALLY, ENV_DOCS_WEBAPP_RELEASE_LIB_COMPRESS, ENV_DOCS_WEBAPP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_DOCS_WEBAPP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_DOCS_WEBAPP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_DOCS_WEBAPP_RELEASE_LIB_REMOVE_DTS, ENV_DOCS_WEBAPP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_DOCS_WEBAPP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_DOCS_WEBAPP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_DOCS_WEBAPP_RELEASE_RELEASE_TYPE, ENV_DOCS_WEBAPP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_DOCS_WEBAPP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_DOCS_WEBAPP_RELEASE_RESOLVED_NEW_VERSION, ENV_DOCS_WEBAPP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_DOCS_WEBAPP_RELEASE_SKIP_CODE_CUTTING, ENV_DOCS_WEBAPP_RELEASE_SKIP_DEPLOY, ENV_DOCS_WEBAPP_RELEASE_SKIP_NPM_PUBLISH, ENV_DOCS_WEBAPP_RELEASE_SKIP_RELEASE_QUESTION, ENV_DOCS_WEBAPP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_DOCS_WEBAPP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_DOCS_WEBAPP_RELEASE_TAON_INSTANCE_IP, ENV_DOCS_WEBAPP_RELEASE_TARGET_ARTIFACT, ENV_DOCS_WEBAPP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_DOCS_WEBAPP_WEBSITE_DOMAIN, ENV_DOCS_WEBAPP_WEBSITE_TITLE, ENV_DOCS_WEBAPP_WEBSITE_USE_DOMAIN, ENV_ELECTRON_APP_BUILD_BASE_HREF, ENV_ELECTRON_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_ELECTRON_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_ELECTRON_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_ELECTRON_APP_BUILD_PROD, ENV_ELECTRON_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_ELECTRON_APP_BUILD_PWA_NAME, ENV_ELECTRON_APP_BUILD_PWA_SHORT_NAME, ENV_ELECTRON_APP_BUILD_PWA_START_URL, ENV_ELECTRON_APP_BUILD_SSR, ENV_ELECTRON_APP_BUILD_WATCH, ENV_ELECTRON_APP_BUILD_WEBSQL, ENV_ELECTRON_APP_CONTAINER_END, ENV_ELECTRON_APP_CONTAINER_ONLY, ENV_ELECTRON_APP_CONTAINER_SKIP, ENV_ELECTRON_APP_CONTAINER_SKIP_RELEASED, ENV_ELECTRON_APP_CONTAINER_START, ENV_ELECTRON_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_ELECTRON_APP_COPY_TO_MANAGER_SKIP, ENV_ELECTRON_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_ELECTRON_APP_DOCKER_SKIP_START_IN_ORDER, ENV_ELECTRON_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_ELECTRON_APP_FINISH_CALLBACK, ENV_ELECTRON_APP_INIT_BRANDING, ENV_ELECTRON_APP_INIT_STRUCT, ENV_ELECTRON_APP_IS_CI_PROCESS, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_ELECTRON_APP_PURPOSE, ENV_ELECTRON_APP_RECURSIVE_ACTION, ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_ELECTRON_APP_RELEASE_CLI_COMPRESS, ENV_ELECTRON_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_ELECTRON_APP_RELEASE_CLI_MINIFY, ENV_ELECTRON_APP_RELEASE_CLI_OBSCURE, ENV_ELECTRON_APP_RELEASE_CLI_UGLIFY, ENV_ELECTRON_APP_RELEASE_ENV_NAME, ENV_ELECTRON_APP_RELEASE_ENV_NUMBER, ENV_ELECTRON_APP_RELEASE_INSTALL_LOCALLY, ENV_ELECTRON_APP_RELEASE_LIB_COMPRESS, ENV_ELECTRON_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_ELECTRON_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_ELECTRON_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_ELECTRON_APP_RELEASE_LIB_REMOVE_DTS, ENV_ELECTRON_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_ELECTRON_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_ELECTRON_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_ELECTRON_APP_RELEASE_RELEASE_TYPE, ENV_ELECTRON_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_ELECTRON_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_ELECTRON_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_ELECTRON_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_ELECTRON_APP_RELEASE_SKIP_CODE_CUTTING, ENV_ELECTRON_APP_RELEASE_SKIP_DEPLOY, ENV_ELECTRON_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_ELECTRON_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_ELECTRON_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_ELECTRON_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_ELECTRON_APP_RELEASE_TAON_INSTANCE_IP, ENV_ELECTRON_APP_RELEASE_TARGET_ARTIFACT, ENV_ELECTRON_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_ELECTRON_APP_WEBSITE_DOMAIN, ENV_ELECTRON_APP_WEBSITE_TITLE, ENV_ELECTRON_APP_WEBSITE_USE_DOMAIN, ENV_MOBILE_APP_BUILD_BASE_HREF, ENV_MOBILE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_MOBILE_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_MOBILE_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_MOBILE_APP_BUILD_PROD, ENV_MOBILE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_MOBILE_APP_BUILD_PWA_NAME, ENV_MOBILE_APP_BUILD_PWA_SHORT_NAME, ENV_MOBILE_APP_BUILD_PWA_START_URL, ENV_MOBILE_APP_BUILD_SSR, ENV_MOBILE_APP_BUILD_WATCH, ENV_MOBILE_APP_BUILD_WEBSQL, ENV_MOBILE_APP_CONTAINER_END, ENV_MOBILE_APP_CONTAINER_ONLY, ENV_MOBILE_APP_CONTAINER_SKIP, ENV_MOBILE_APP_CONTAINER_SKIP_RELEASED, ENV_MOBILE_APP_CONTAINER_START, ENV_MOBILE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_MOBILE_APP_COPY_TO_MANAGER_SKIP, ENV_MOBILE_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_MOBILE_APP_DOCKER_SKIP_START_IN_ORDER, ENV_MOBILE_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_MOBILE_APP_FINISH_CALLBACK, ENV_MOBILE_APP_INIT_BRANDING, ENV_MOBILE_APP_INIT_STRUCT, ENV_MOBILE_APP_IS_CI_PROCESS, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_MOBILE_APP_PURPOSE, ENV_MOBILE_APP_RECURSIVE_ACTION, ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_MOBILE_APP_RELEASE_CLI_COMPRESS, ENV_MOBILE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_MOBILE_APP_RELEASE_CLI_MINIFY, ENV_MOBILE_APP_RELEASE_CLI_OBSCURE, ENV_MOBILE_APP_RELEASE_CLI_UGLIFY, ENV_MOBILE_APP_RELEASE_ENV_NAME, ENV_MOBILE_APP_RELEASE_ENV_NUMBER, ENV_MOBILE_APP_RELEASE_INSTALL_LOCALLY, ENV_MOBILE_APP_RELEASE_LIB_COMPRESS, ENV_MOBILE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_MOBILE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_MOBILE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_MOBILE_APP_RELEASE_LIB_REMOVE_DTS, ENV_MOBILE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_MOBILE_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_MOBILE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_MOBILE_APP_RELEASE_RELEASE_TYPE, ENV_MOBILE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_MOBILE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_MOBILE_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_MOBILE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_MOBILE_APP_RELEASE_SKIP_CODE_CUTTING, ENV_MOBILE_APP_RELEASE_SKIP_DEPLOY, ENV_MOBILE_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_MOBILE_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_MOBILE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_MOBILE_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_MOBILE_APP_RELEASE_TAON_INSTANCE_IP, ENV_MOBILE_APP_RELEASE_TARGET_ARTIFACT, ENV_MOBILE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_MOBILE_APP_WEBSITE_DOMAIN, ENV_MOBILE_APP_WEBSITE_TITLE, ENV_MOBILE_APP_WEBSITE_USE_DOMAIN, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_BASE_HREF, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_GEN_ONLY_CLIENT_CODE, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_OVERRIDE_OUTPUT_PATH, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PROD, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_NAME, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_SHORT_NAME, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_START_URL, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_SSR, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WATCH, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WEBSQL, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_END, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_ONLY, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP_RELEASED, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_START, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_SKIP, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_ADDITIONAL_CONTAINER, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_START_IN_ORDER, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_USING_MYSQL_DB, ENV_NPM_LIB_AND_CLI_TOOL_FINISH_CALLBACK, ENV_NPM_LIB_AND_CLI_TOOL_INIT_BRANDING, ENV_NPM_LIB_AND_CLI_TOOL_INIT_STRUCT, ENV_NPM_LIB_AND_CLI_TOOL_IS_CI_PROCESS, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_NPM_LIB_AND_CLI_TOOL_PURPOSE, ENV_NPM_LIB_AND_CLI_TOOL_RECURSIVE_ACTION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_COMPRESS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_MINIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_OBSCURE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_UGLIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NAME, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NUMBER, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_INSTALL_LOCALLY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_COMPRESS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_REMOVE_DTS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_TYPE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RESOLVED_NEW_VERSION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_CODE_CUTTING, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_DEPLOY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_NPM_PUBLISH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RELEASE_QUESTION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_TAG_GIT_PUSH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TAON_INSTANCE_IP, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TARGET_ARTIFACT, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_DOMAIN, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_TITLE, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_USE_DOMAIN, ENV_VSCODE_PLUGIN_BUILD_BASE_HREF, ENV_VSCODE_PLUGIN_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_VSCODE_PLUGIN_BUILD_GEN_ONLY_CLIENT_CODE, ENV_VSCODE_PLUGIN_BUILD_OVERRIDE_OUTPUT_PATH, ENV_VSCODE_PLUGIN_BUILD_PROD, ENV_VSCODE_PLUGIN_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_VSCODE_PLUGIN_BUILD_PWA_NAME, ENV_VSCODE_PLUGIN_BUILD_PWA_SHORT_NAME, ENV_VSCODE_PLUGIN_BUILD_PWA_START_URL, ENV_VSCODE_PLUGIN_BUILD_SSR, ENV_VSCODE_PLUGIN_BUILD_WATCH, ENV_VSCODE_PLUGIN_BUILD_WEBSQL, ENV_VSCODE_PLUGIN_CONTAINER_END, ENV_VSCODE_PLUGIN_CONTAINER_ONLY, ENV_VSCODE_PLUGIN_CONTAINER_SKIP, ENV_VSCODE_PLUGIN_CONTAINER_SKIP_RELEASED, ENV_VSCODE_PLUGIN_CONTAINER_START, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_SKIP, ENV_VSCODE_PLUGIN_DOCKER_ADDITIONAL_CONTAINER, ENV_VSCODE_PLUGIN_DOCKER_SKIP_START_IN_ORDER, ENV_VSCODE_PLUGIN_DOCKER_SKIP_USING_MYSQL_DB, ENV_VSCODE_PLUGIN_FINISH_CALLBACK, ENV_VSCODE_PLUGIN_INIT_BRANDING, ENV_VSCODE_PLUGIN_INIT_STRUCT, ENV_VSCODE_PLUGIN_IS_CI_PROCESS, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_VSCODE_PLUGIN_PURPOSE, ENV_VSCODE_PLUGIN_RECURSIVE_ACTION, ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_VSCODE_PLUGIN_RELEASE_CLI_COMPRESS, ENV_VSCODE_PLUGIN_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_VSCODE_PLUGIN_RELEASE_CLI_MINIFY, ENV_VSCODE_PLUGIN_RELEASE_CLI_OBSCURE, ENV_VSCODE_PLUGIN_RELEASE_CLI_UGLIFY, ENV_VSCODE_PLUGIN_RELEASE_ENV_NAME, ENV_VSCODE_PLUGIN_RELEASE_ENV_NUMBER, ENV_VSCODE_PLUGIN_RELEASE_INSTALL_LOCALLY, ENV_VSCODE_PLUGIN_RELEASE_LIB_COMPRESS, ENV_VSCODE_PLUGIN_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_VSCODE_PLUGIN_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_VSCODE_PLUGIN_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_VSCODE_PLUGIN_RELEASE_LIB_REMOVE_DTS, ENV_VSCODE_PLUGIN_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_VSCODE_PLUGIN_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_VSCODE_PLUGIN_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_VSCODE_PLUGIN_RELEASE_RELEASE_TYPE, ENV_VSCODE_PLUGIN_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_VSCODE_PLUGIN_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_VSCODE_PLUGIN_RELEASE_RESOLVED_NEW_VERSION, ENV_VSCODE_PLUGIN_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_VSCODE_PLUGIN_RELEASE_SKIP_CODE_CUTTING, ENV_VSCODE_PLUGIN_RELEASE_SKIP_DEPLOY, ENV_VSCODE_PLUGIN_RELEASE_SKIP_NPM_PUBLISH, ENV_VSCODE_PLUGIN_RELEASE_SKIP_RELEASE_QUESTION, ENV_VSCODE_PLUGIN_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_VSCODE_PLUGIN_RELEASE_SKIP_TAG_GIT_PUSH, ENV_VSCODE_PLUGIN_RELEASE_TAON_INSTANCE_IP, ENV_VSCODE_PLUGIN_RELEASE_TARGET_ARTIFACT, ENV_VSCODE_PLUGIN_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_VSCODE_PLUGIN_WEBSITE_DOMAIN, ENV_VSCODE_PLUGIN_WEBSITE_TITLE, ENV_VSCODE_PLUGIN_WEBSITE_USE_DOMAIN, PROJECT_NPM_NAME, TaonAdminLayoutComponent, TaonAdminPageTabsComponent, TaonBaseAdminLayoutPage, TaonDraggableButtonPanelComponent, TaonDraggableButtonPanelRoutes, TaonDraggableButtonPanelState, adminLazyRoutes, myOrgProj, startCli };
2676
+ export { APP_ID, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, ENV_ANGULAR_NODE_APP_BUILD_BASE_HREF, ENV_ANGULAR_NODE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_ANGULAR_NODE_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_ANGULAR_NODE_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_ANGULAR_NODE_APP_BUILD_PROD, ENV_ANGULAR_NODE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_ANGULAR_NODE_APP_BUILD_PWA_NAME, ENV_ANGULAR_NODE_APP_BUILD_PWA_SHORT_NAME, ENV_ANGULAR_NODE_APP_BUILD_PWA_START_URL, ENV_ANGULAR_NODE_APP_BUILD_SSR, ENV_ANGULAR_NODE_APP_BUILD_WATCH, ENV_ANGULAR_NODE_APP_BUILD_WEBSQL, ENV_ANGULAR_NODE_APP_CONTAINER_END, ENV_ANGULAR_NODE_APP_CONTAINER_ONLY, ENV_ANGULAR_NODE_APP_CONTAINER_SKIP, ENV_ANGULAR_NODE_APP_CONTAINER_SKIP_RELEASED, ENV_ANGULAR_NODE_APP_CONTAINER_START, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_ANGULAR_NODE_APP_COPY_TO_MANAGER_SKIP, ENV_ANGULAR_NODE_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_ANGULAR_NODE_APP_DOCKER_SKIP_START_IN_ORDER, ENV_ANGULAR_NODE_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_ANGULAR_NODE_APP_FINISH_CALLBACK, ENV_ANGULAR_NODE_APP_INIT_BRANDING, ENV_ANGULAR_NODE_APP_INIT_STRUCT, ENV_ANGULAR_NODE_APP_IS_CI_PROCESS, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_ANGULAR_NODE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_ANGULAR_NODE_APP_PURPOSE, ENV_ANGULAR_NODE_APP_RECURSIVE_ACTION, ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_ANGULAR_NODE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_ANGULAR_NODE_APP_RELEASE_CLI_COMPRESS, ENV_ANGULAR_NODE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_ANGULAR_NODE_APP_RELEASE_CLI_MINIFY, ENV_ANGULAR_NODE_APP_RELEASE_CLI_OBSCURE, ENV_ANGULAR_NODE_APP_RELEASE_CLI_UGLIFY, ENV_ANGULAR_NODE_APP_RELEASE_ENV_NAME, ENV_ANGULAR_NODE_APP_RELEASE_ENV_NUMBER, ENV_ANGULAR_NODE_APP_RELEASE_INSTALL_LOCALLY, ENV_ANGULAR_NODE_APP_RELEASE_LIB_COMPRESS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_ANGULAR_NODE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_ANGULAR_NODE_APP_RELEASE_LIB_REMOVE_DTS, ENV_ANGULAR_NODE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_ANGULAR_NODE_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_ANGULAR_NODE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_TYPE, ENV_ANGULAR_NODE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_ANGULAR_NODE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_ANGULAR_NODE_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_CODE_CUTTING, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_DEPLOY, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_ANGULAR_NODE_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_ANGULAR_NODE_APP_RELEASE_TAON_INSTANCE_IP, ENV_ANGULAR_NODE_APP_RELEASE_TARGET_ARTIFACT, ENV_ANGULAR_NODE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_ANGULAR_NODE_APP_WEBSITE_DOMAIN, ENV_ANGULAR_NODE_APP_WEBSITE_TITLE, ENV_ANGULAR_NODE_APP_WEBSITE_USE_DOMAIN, ENV_DOCS_WEBAPP_BUILD_BASE_HREF, ENV_DOCS_WEBAPP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_DOCS_WEBAPP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_DOCS_WEBAPP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_DOCS_WEBAPP_BUILD_PROD, ENV_DOCS_WEBAPP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_DOCS_WEBAPP_BUILD_PWA_NAME, ENV_DOCS_WEBAPP_BUILD_PWA_SHORT_NAME, ENV_DOCS_WEBAPP_BUILD_PWA_START_URL, ENV_DOCS_WEBAPP_BUILD_SSR, ENV_DOCS_WEBAPP_BUILD_WATCH, ENV_DOCS_WEBAPP_BUILD_WEBSQL, ENV_DOCS_WEBAPP_CONTAINER_END, ENV_DOCS_WEBAPP_CONTAINER_ONLY, ENV_DOCS_WEBAPP_CONTAINER_SKIP, ENV_DOCS_WEBAPP_CONTAINER_SKIP_RELEASED, ENV_DOCS_WEBAPP_CONTAINER_START, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_DOCS_WEBAPP_COPY_TO_MANAGER_SKIP, ENV_DOCS_WEBAPP_DOCKER_ADDITIONAL_CONTAINER, ENV_DOCS_WEBAPP_DOCKER_SKIP_START_IN_ORDER, ENV_DOCS_WEBAPP_DOCKER_SKIP_USING_MYSQL_DB, ENV_DOCS_WEBAPP_FINISH_CALLBACK, ENV_DOCS_WEBAPP_INIT_BRANDING, ENV_DOCS_WEBAPP_INIT_STRUCT, ENV_DOCS_WEBAPP_IS_CI_PROCESS, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_DOCS_WEBAPP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_DOCS_WEBAPP_PURPOSE, ENV_DOCS_WEBAPP_RECURSIVE_ACTION, ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_DOCS_WEBAPP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_DOCS_WEBAPP_RELEASE_CLI_COMPRESS, ENV_DOCS_WEBAPP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_DOCS_WEBAPP_RELEASE_CLI_MINIFY, ENV_DOCS_WEBAPP_RELEASE_CLI_OBSCURE, ENV_DOCS_WEBAPP_RELEASE_CLI_UGLIFY, ENV_DOCS_WEBAPP_RELEASE_ENV_NAME, ENV_DOCS_WEBAPP_RELEASE_ENV_NUMBER, ENV_DOCS_WEBAPP_RELEASE_INSTALL_LOCALLY, ENV_DOCS_WEBAPP_RELEASE_LIB_COMPRESS, ENV_DOCS_WEBAPP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_DOCS_WEBAPP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_DOCS_WEBAPP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_DOCS_WEBAPP_RELEASE_LIB_REMOVE_DTS, ENV_DOCS_WEBAPP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_DOCS_WEBAPP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_DOCS_WEBAPP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_DOCS_WEBAPP_RELEASE_RELEASE_TYPE, ENV_DOCS_WEBAPP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_DOCS_WEBAPP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_DOCS_WEBAPP_RELEASE_RESOLVED_NEW_VERSION, ENV_DOCS_WEBAPP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_DOCS_WEBAPP_RELEASE_SKIP_CODE_CUTTING, ENV_DOCS_WEBAPP_RELEASE_SKIP_DEPLOY, ENV_DOCS_WEBAPP_RELEASE_SKIP_NPM_PUBLISH, ENV_DOCS_WEBAPP_RELEASE_SKIP_RELEASE_QUESTION, ENV_DOCS_WEBAPP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_DOCS_WEBAPP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_DOCS_WEBAPP_RELEASE_TAON_INSTANCE_IP, ENV_DOCS_WEBAPP_RELEASE_TARGET_ARTIFACT, ENV_DOCS_WEBAPP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_DOCS_WEBAPP_WEBSITE_DOMAIN, ENV_DOCS_WEBAPP_WEBSITE_TITLE, ENV_DOCS_WEBAPP_WEBSITE_USE_DOMAIN, ENV_ELECTRON_APP_BUILD_BASE_HREF, ENV_ELECTRON_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_ELECTRON_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_ELECTRON_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_ELECTRON_APP_BUILD_PROD, ENV_ELECTRON_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_ELECTRON_APP_BUILD_PWA_NAME, ENV_ELECTRON_APP_BUILD_PWA_SHORT_NAME, ENV_ELECTRON_APP_BUILD_PWA_START_URL, ENV_ELECTRON_APP_BUILD_SSR, ENV_ELECTRON_APP_BUILD_WATCH, ENV_ELECTRON_APP_BUILD_WEBSQL, ENV_ELECTRON_APP_CONTAINER_END, ENV_ELECTRON_APP_CONTAINER_ONLY, ENV_ELECTRON_APP_CONTAINER_SKIP, ENV_ELECTRON_APP_CONTAINER_SKIP_RELEASED, ENV_ELECTRON_APP_CONTAINER_START, ENV_ELECTRON_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_ELECTRON_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_ELECTRON_APP_COPY_TO_MANAGER_SKIP, ENV_ELECTRON_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_ELECTRON_APP_DOCKER_SKIP_START_IN_ORDER, ENV_ELECTRON_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_ELECTRON_APP_FINISH_CALLBACK, ENV_ELECTRON_APP_INIT_BRANDING, ENV_ELECTRON_APP_INIT_STRUCT, ENV_ELECTRON_APP_IS_CI_PROCESS, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_ELECTRON_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_ELECTRON_APP_PURPOSE, ENV_ELECTRON_APP_RECURSIVE_ACTION, ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_ELECTRON_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_ELECTRON_APP_RELEASE_CLI_COMPRESS, ENV_ELECTRON_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_ELECTRON_APP_RELEASE_CLI_MINIFY, ENV_ELECTRON_APP_RELEASE_CLI_OBSCURE, ENV_ELECTRON_APP_RELEASE_CLI_UGLIFY, ENV_ELECTRON_APP_RELEASE_ENV_NAME, ENV_ELECTRON_APP_RELEASE_ENV_NUMBER, ENV_ELECTRON_APP_RELEASE_INSTALL_LOCALLY, ENV_ELECTRON_APP_RELEASE_LIB_COMPRESS, ENV_ELECTRON_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_ELECTRON_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_ELECTRON_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_ELECTRON_APP_RELEASE_LIB_REMOVE_DTS, ENV_ELECTRON_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_ELECTRON_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_ELECTRON_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_ELECTRON_APP_RELEASE_RELEASE_TYPE, ENV_ELECTRON_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_ELECTRON_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_ELECTRON_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_ELECTRON_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_ELECTRON_APP_RELEASE_SKIP_CODE_CUTTING, ENV_ELECTRON_APP_RELEASE_SKIP_DEPLOY, ENV_ELECTRON_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_ELECTRON_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_ELECTRON_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_ELECTRON_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_ELECTRON_APP_RELEASE_TAON_INSTANCE_IP, ENV_ELECTRON_APP_RELEASE_TARGET_ARTIFACT, ENV_ELECTRON_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_ELECTRON_APP_WEBSITE_DOMAIN, ENV_ELECTRON_APP_WEBSITE_TITLE, ENV_ELECTRON_APP_WEBSITE_USE_DOMAIN, ENV_MOBILE_APP_BUILD_BASE_HREF, ENV_MOBILE_APP_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_MOBILE_APP_BUILD_GEN_ONLY_CLIENT_CODE, ENV_MOBILE_APP_BUILD_OVERRIDE_OUTPUT_PATH, ENV_MOBILE_APP_BUILD_PROD, ENV_MOBILE_APP_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_MOBILE_APP_BUILD_PWA_NAME, ENV_MOBILE_APP_BUILD_PWA_SHORT_NAME, ENV_MOBILE_APP_BUILD_PWA_START_URL, ENV_MOBILE_APP_BUILD_SSR, ENV_MOBILE_APP_BUILD_WATCH, ENV_MOBILE_APP_BUILD_WEBSQL, ENV_MOBILE_APP_CONTAINER_END, ENV_MOBILE_APP_CONTAINER_ONLY, ENV_MOBILE_APP_CONTAINER_SKIP, ENV_MOBILE_APP_CONTAINER_SKIP_RELEASED, ENV_MOBILE_APP_CONTAINER_START, ENV_MOBILE_APP_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_MOBILE_APP_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_MOBILE_APP_COPY_TO_MANAGER_SKIP, ENV_MOBILE_APP_DOCKER_ADDITIONAL_CONTAINER, ENV_MOBILE_APP_DOCKER_SKIP_START_IN_ORDER, ENV_MOBILE_APP_DOCKER_SKIP_USING_MYSQL_DB, ENV_MOBILE_APP_FINISH_CALLBACK, ENV_MOBILE_APP_INIT_BRANDING, ENV_MOBILE_APP_INIT_STRUCT, ENV_MOBILE_APP_IS_CI_PROCESS, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_MOBILE_APP_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_MOBILE_APP_PURPOSE, ENV_MOBILE_APP_RECURSIVE_ACTION, ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_MOBILE_APP_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_MOBILE_APP_RELEASE_CLI_COMPRESS, ENV_MOBILE_APP_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_MOBILE_APP_RELEASE_CLI_MINIFY, ENV_MOBILE_APP_RELEASE_CLI_OBSCURE, ENV_MOBILE_APP_RELEASE_CLI_UGLIFY, ENV_MOBILE_APP_RELEASE_ENV_NAME, ENV_MOBILE_APP_RELEASE_ENV_NUMBER, ENV_MOBILE_APP_RELEASE_INSTALL_LOCALLY, ENV_MOBILE_APP_RELEASE_LIB_COMPRESS, ENV_MOBILE_APP_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_MOBILE_APP_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_MOBILE_APP_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_MOBILE_APP_RELEASE_LIB_REMOVE_DTS, ENV_MOBILE_APP_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_MOBILE_APP_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_MOBILE_APP_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_MOBILE_APP_RELEASE_RELEASE_TYPE, ENV_MOBILE_APP_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_MOBILE_APP_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_MOBILE_APP_RELEASE_RESOLVED_NEW_VERSION, ENV_MOBILE_APP_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_MOBILE_APP_RELEASE_SKIP_CODE_CUTTING, ENV_MOBILE_APP_RELEASE_SKIP_DEPLOY, ENV_MOBILE_APP_RELEASE_SKIP_NPM_PUBLISH, ENV_MOBILE_APP_RELEASE_SKIP_RELEASE_QUESTION, ENV_MOBILE_APP_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_MOBILE_APP_RELEASE_SKIP_TAG_GIT_PUSH, ENV_MOBILE_APP_RELEASE_TAON_INSTANCE_IP, ENV_MOBILE_APP_RELEASE_TARGET_ARTIFACT, ENV_MOBILE_APP_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_MOBILE_APP_WEBSITE_DOMAIN, ENV_MOBILE_APP_WEBSITE_TITLE, ENV_MOBILE_APP_WEBSITE_USE_DOMAIN, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_BASE_HREF, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_GEN_ONLY_CLIENT_CODE, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_OVERRIDE_OUTPUT_PATH, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PROD, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_NAME, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_SHORT_NAME, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_PWA_START_URL, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_SSR, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WATCH, ENV_NPM_LIB_AND_CLI_TOOL_BUILD_WEBSQL, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_END, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_ONLY, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_SKIP_RELEASED, ENV_NPM_LIB_AND_CLI_TOOL_CONTAINER_START, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_NPM_LIB_AND_CLI_TOOL_COPY_TO_MANAGER_SKIP, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_ADDITIONAL_CONTAINER, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_START_IN_ORDER, ENV_NPM_LIB_AND_CLI_TOOL_DOCKER_SKIP_USING_MYSQL_DB, ENV_NPM_LIB_AND_CLI_TOOL_FINISH_CALLBACK, ENV_NPM_LIB_AND_CLI_TOOL_INIT_BRANDING, ENV_NPM_LIB_AND_CLI_TOOL_INIT_STRUCT, ENV_NPM_LIB_AND_CLI_TOOL_IS_CI_PROCESS, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_NPM_LIB_AND_CLI_TOOL_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_NPM_LIB_AND_CLI_TOOL_PURPOSE, ENV_NPM_LIB_AND_CLI_TOOL_RECURSIVE_ACTION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_COMPRESS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_MINIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_OBSCURE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_CLI_UGLIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NAME, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_ENV_NUMBER, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_INSTALL_LOCALLY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_COMPRESS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_REMOVE_DTS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_TYPE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_RESOLVED_NEW_VERSION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_CODE_CUTTING, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_DEPLOY, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_NPM_PUBLISH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RELEASE_QUESTION, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_SKIP_TAG_GIT_PUSH, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TAON_INSTANCE_IP, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_TARGET_ARTIFACT, ENV_NPM_LIB_AND_CLI_TOOL_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_DOMAIN, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_TITLE, ENV_NPM_LIB_AND_CLI_TOOL_WEBSITE_USE_DOMAIN, ENV_VSCODE_PLUGIN_BUILD_BASE_HREF, ENV_VSCODE_PLUGIN_BUILD_ELECTRON_SHOW_DEV_TOOLS, ENV_VSCODE_PLUGIN_BUILD_GEN_ONLY_CLIENT_CODE, ENV_VSCODE_PLUGIN_BUILD_OVERRIDE_OUTPUT_PATH, ENV_VSCODE_PLUGIN_BUILD_PROD, ENV_VSCODE_PLUGIN_BUILD_PWA_DISABLE_SERVICE_WORKER, ENV_VSCODE_PLUGIN_BUILD_PWA_NAME, ENV_VSCODE_PLUGIN_BUILD_PWA_SHORT_NAME, ENV_VSCODE_PLUGIN_BUILD_PWA_START_URL, ENV_VSCODE_PLUGIN_BUILD_SSR, ENV_VSCODE_PLUGIN_BUILD_WATCH, ENV_VSCODE_PLUGIN_BUILD_WEBSQL, ENV_VSCODE_PLUGIN_CONTAINER_END, ENV_VSCODE_PLUGIN_CONTAINER_ONLY, ENV_VSCODE_PLUGIN_CONTAINER_SKIP, ENV_VSCODE_PLUGIN_CONTAINER_SKIP_RELEASED, ENV_VSCODE_PLUGIN_CONTAINER_START, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_BEFORE_COPY_HOOK, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_LOCATIONS, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_COPY_TO_PROJECTS, ENV_VSCODE_PLUGIN_COPY_TO_MANAGER_SKIP, ENV_VSCODE_PLUGIN_DOCKER_ADDITIONAL_CONTAINER, ENV_VSCODE_PLUGIN_DOCKER_SKIP_START_IN_ORDER, ENV_VSCODE_PLUGIN_DOCKER_SKIP_USING_MYSQL_DB, ENV_VSCODE_PLUGIN_FINISH_CALLBACK, ENV_VSCODE_PLUGIN_INIT_BRANDING, ENV_VSCODE_PLUGIN_INIT_STRUCT, ENV_VSCODE_PLUGIN_IS_CI_PROCESS, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_BACKGROUND, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER, ENV_VSCODE_PLUGIN_LOADING_PRE_ANGULAR_BOOTSTRAP_LOADER_NAME, ENV_VSCODE_PLUGIN_PURPOSE, ENV_VSCODE_PLUGIN_RECURSIVE_ACTION, ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_TASK_NAME, ENV_VSCODE_PLUGIN_RELEASE_AUTO_RELEASE_USING_CONFIG, ENV_VSCODE_PLUGIN_RELEASE_CLI_COMPRESS, ENV_VSCODE_PLUGIN_RELEASE_CLI_INCLUDE_NODE_MODULES, ENV_VSCODE_PLUGIN_RELEASE_CLI_MINIFY, ENV_VSCODE_PLUGIN_RELEASE_CLI_OBSCURE, ENV_VSCODE_PLUGIN_RELEASE_CLI_UGLIFY, ENV_VSCODE_PLUGIN_RELEASE_ENV_NAME, ENV_VSCODE_PLUGIN_RELEASE_ENV_NUMBER, ENV_VSCODE_PLUGIN_RELEASE_INSTALL_LOCALLY, ENV_VSCODE_PLUGIN_RELEASE_LIB_COMPRESS, ENV_VSCODE_PLUGIN_RELEASE_LIB_DO_NOT_INCLUDE_LIB_FILES, ENV_VSCODE_PLUGIN_RELEASE_LIB_INCLUDE_SOURCE_MAPS, ENV_VSCODE_PLUGIN_RELEASE_LIB_OBSCURE_FILE_BY_FILE, ENV_VSCODE_PLUGIN_RELEASE_LIB_REMOVE_DTS, ENV_VSCODE_PLUGIN_RELEASE_LIB_UGLIFY_FILE_BY_FILE, ENV_VSCODE_PLUGIN_RELEASE_NODE_BACKEND_APP_MINIFY, ENV_VSCODE_PLUGIN_RELEASE_PUSH_TO_ALL_ORIGINS_WHEN_LOCAL_RELEASE_BRANCH, ENV_VSCODE_PLUGIN_RELEASE_RELEASE_TYPE, ENV_VSCODE_PLUGIN_RELEASE_RELEASE_VERSION_BUMP_TYPE, ENV_VSCODE_PLUGIN_RELEASE_REMOVE_RELEASE_OUTPUT_AFTER_LOCAL_INSTALL, ENV_VSCODE_PLUGIN_RELEASE_RESOLVED_NEW_VERSION, ENV_VSCODE_PLUGIN_RELEASE_SKIP_BUILDING_ARTIFACTS, ENV_VSCODE_PLUGIN_RELEASE_SKIP_CODE_CUTTING, ENV_VSCODE_PLUGIN_RELEASE_SKIP_DEPLOY, ENV_VSCODE_PLUGIN_RELEASE_SKIP_NPM_PUBLISH, ENV_VSCODE_PLUGIN_RELEASE_SKIP_RELEASE_QUESTION, ENV_VSCODE_PLUGIN_RELEASE_SKIP_RESOLVING_GIT_CHANGES, ENV_VSCODE_PLUGIN_RELEASE_SKIP_TAG_GIT_PUSH, ENV_VSCODE_PLUGIN_RELEASE_TAON_INSTANCE_IP, ENV_VSCODE_PLUGIN_RELEASE_TARGET_ARTIFACT, ENV_VSCODE_PLUGIN_RELEASE_USE_LOCAL_RELEASE_BRANCH, ENV_VSCODE_PLUGIN_WEBSITE_DOMAIN, ENV_VSCODE_PLUGIN_WEBSITE_TITLE, ENV_VSCODE_PLUGIN_WEBSITE_USE_DOMAIN, PROJECT_NPM_NAME, TaonAdminLayoutComponent, TaonAdminPageTabsComponent, TaonBackofficeNotificationsComponent, TaonBackofficeNotificationsService, TaonBaseAdminLayoutPage, TaonBaselineBackofficeOutletName, TaonConfirmDialogComponent, TaonDatatableComponent, TaonDatatableRoutes, TaonDraggableButtonPanelComponent, TaonDraggableButtonPanelRoutes, TaonDraggableButtonPanelState, TaonErrorDetailsDialogComponent, TaonErrorToastComponent, TaonHorizontalWheelScrollDirective, adminLazyRoute, myOrgProj, startCli };
1844
2677
  //# sourceMappingURL=ui-websql-prod.mjs.map