taon-ui 21.0.66 → 21.0.67

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 (213) hide show
  1. package/VERIFIED-BUILD-DATA.jsonc +3 -3
  2. package/browser/fesm2022/taon-ui-browser.mjs +445 -1106
  3. package/browser/fesm2022/taon-ui-browser.mjs.map +1 -1
  4. package/browser/package.json +1 -1
  5. package/browser/types/taon-ui-browser.d.ts +15 -185
  6. package/browser-prod/fesm2022/taon-ui-browser-prod.mjs +446 -1107
  7. package/browser-prod/fesm2022/taon-ui-browser-prod.mjs.map +1 -1
  8. package/browser-prod/package.json +1 -1
  9. package/browser-prod/types/taon-ui-browser-prod.d.ts +15 -185
  10. package/html/lib/ui/taon-simple-layout/taon-simple-layout.component.html +77 -33
  11. package/lib/build-info._auto-generated_.d.ts +1 -1
  12. package/lib/build-info._auto-generated_.js +1 -1
  13. package/lib/env/env.angular-node-app.d.ts +1 -0
  14. package/lib/env/env.angular-node-app.js +6 -2
  15. package/lib/env/env.angular-node-app.js.map +1 -1
  16. package/lib/env/env.docs-webapp.d.ts +1 -0
  17. package/lib/env/env.docs-webapp.js +6 -2
  18. package/lib/env/env.docs-webapp.js.map +1 -1
  19. package/lib/env/env.electron-app.d.ts +1 -0
  20. package/lib/env/env.electron-app.js +6 -2
  21. package/lib/env/env.electron-app.js.map +1 -1
  22. package/lib/env/env.mobile-app.d.ts +1 -0
  23. package/lib/env/env.mobile-app.js +6 -2
  24. package/lib/env/env.mobile-app.js.map +1 -1
  25. package/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  26. package/lib/env/env.npm-lib-and-cli-tool.js +6 -2
  27. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  28. package/lib/env/env.vscode-plugin.d.ts +1 -0
  29. package/lib/env/env.vscode-plugin.js +6 -2
  30. package/lib/env/env.vscode-plugin.js.map +1 -1
  31. package/lib/index._auto-generated_.d.ts +0 -10
  32. package/lib/index._auto-generated_.js +0 -10
  33. package/lib/index._auto-generated_.js.map +1 -1
  34. package/lib/layouts/taon-bootstrap-navbar/index.js +2 -2
  35. package/lib/package.json +1 -1
  36. package/lib/ui/anonymize-text/index.js +2 -2
  37. package/lib/ui/directives/index.js +2 -2
  38. package/lib/ui/index.d.ts +0 -4
  39. package/lib/ui/index.js +2 -2
  40. package/lib/ui/taon-github-fork-me-corner/index.js +2 -2
  41. package/lib/ui/taon-github-fork-me-ribbon/index.js +2 -2
  42. package/lib/ui/taon-iframe-sync/index.js +2 -2
  43. package/lib/ui/taon-lang-selector/index.js +2 -2
  44. package/lib/ui/taon-lang-selector/taon-lang-selector.component.d.ts +1 -1
  45. package/lib/ui/taon-progress-bar/index.js +2 -2
  46. package/lib/ui/taon-session-passcode/index.js +2 -2
  47. package/lib/ui/taon-settings/index.js +2 -2
  48. package/lib/ui/taon-simple-layout/taon-simple-layout.component.d.ts +4 -4
  49. package/lib/ui/taon-slide-content/index.js +2 -2
  50. package/lib-esm/lib/build-info._auto-generated_.d.ts +1 -1
  51. package/lib-esm/lib/build-info._auto-generated_.js +1 -1
  52. package/lib-esm/lib/env/env.angular-node-app.d.ts +1 -0
  53. package/lib-esm/lib/env/env.angular-node-app.js +3 -0
  54. package/lib-esm/lib/env/env.angular-node-app.js.map +1 -1
  55. package/lib-esm/lib/env/env.docs-webapp.d.ts +1 -0
  56. package/lib-esm/lib/env/env.docs-webapp.js +3 -0
  57. package/lib-esm/lib/env/env.docs-webapp.js.map +1 -1
  58. package/lib-esm/lib/env/env.electron-app.d.ts +1 -0
  59. package/lib-esm/lib/env/env.electron-app.js +3 -0
  60. package/lib-esm/lib/env/env.electron-app.js.map +1 -1
  61. package/lib-esm/lib/env/env.mobile-app.d.ts +1 -0
  62. package/lib-esm/lib/env/env.mobile-app.js +3 -0
  63. package/lib-esm/lib/env/env.mobile-app.js.map +1 -1
  64. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  65. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js +3 -0
  66. package/lib-esm/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  67. package/lib-esm/lib/env/env.vscode-plugin.d.ts +1 -0
  68. package/lib-esm/lib/env/env.vscode-plugin.js +3 -0
  69. package/lib-esm/lib/env/env.vscode-plugin.js.map +1 -1
  70. package/lib-esm/lib/index._auto-generated_.d.ts +0 -2
  71. package/lib-esm/lib/index._auto-generated_.js +0 -10
  72. package/lib-esm/lib/index._auto-generated_.js.map +1 -1
  73. package/lib-esm/lib/layouts/taon-bootstrap-navbar/index.d.ts +1 -1
  74. package/lib-esm/lib/layouts/taon-bootstrap-navbar/index.js +1 -1
  75. package/lib-esm/lib/ui/anonymize-text/index.d.ts +1 -1
  76. package/lib-esm/lib/ui/anonymize-text/index.js +1 -1
  77. package/lib-esm/lib/ui/directives/index.d.ts +1 -1
  78. package/lib-esm/lib/ui/directives/index.js +1 -1
  79. package/lib-esm/lib/ui/index.d.ts +1 -1
  80. package/lib-esm/lib/ui/index.js +1 -1
  81. package/lib-esm/lib/ui/taon-github-fork-me-corner/index.d.ts +1 -1
  82. package/lib-esm/lib/ui/taon-github-fork-me-corner/index.js +1 -1
  83. package/lib-esm/lib/ui/taon-github-fork-me-ribbon/index.d.ts +1 -1
  84. package/lib-esm/lib/ui/taon-github-fork-me-ribbon/index.js +1 -1
  85. package/lib-esm/lib/ui/taon-iframe-sync/index.d.ts +1 -1
  86. package/lib-esm/lib/ui/taon-iframe-sync/index.js +1 -1
  87. package/lib-esm/lib/ui/taon-lang-selector/index.d.ts +1 -1
  88. package/lib-esm/lib/ui/taon-lang-selector/index.js +1 -1
  89. package/lib-esm/lib/ui/taon-progress-bar/index.d.ts +1 -1
  90. package/lib-esm/lib/ui/taon-progress-bar/index.js +1 -1
  91. package/lib-esm/lib/ui/taon-session-passcode/index.d.ts +1 -1
  92. package/lib-esm/lib/ui/taon-session-passcode/index.js +1 -1
  93. package/lib-esm/lib/ui/taon-settings/index.d.ts +1 -1
  94. package/lib-esm/lib/ui/taon-settings/index.js +1 -1
  95. package/lib-esm/lib/ui/taon-slide-content/index.d.ts +1 -1
  96. package/lib-esm/lib/ui/taon-slide-content/index.js +1 -1
  97. package/lib-prod/build-info._auto-generated_.d.ts +1 -1
  98. package/lib-prod/build-info._auto-generated_.js +1 -1
  99. package/lib-prod/env/env.angular-node-app.d.ts +1 -0
  100. package/lib-prod/env/env.angular-node-app.js +3 -0
  101. package/lib-prod/env/env.angular-node-app.js.map +1 -1
  102. package/lib-prod/env/env.docs-webapp.d.ts +1 -0
  103. package/lib-prod/env/env.docs-webapp.js +3 -0
  104. package/lib-prod/env/env.docs-webapp.js.map +1 -1
  105. package/lib-prod/env/env.electron-app.d.ts +1 -0
  106. package/lib-prod/env/env.electron-app.js +3 -0
  107. package/lib-prod/env/env.electron-app.js.map +1 -1
  108. package/lib-prod/env/env.mobile-app.d.ts +1 -0
  109. package/lib-prod/env/env.mobile-app.js +3 -0
  110. package/lib-prod/env/env.mobile-app.js.map +1 -1
  111. package/lib-prod/env/env.npm-lib-and-cli-tool.d.ts +1 -0
  112. package/lib-prod/env/env.npm-lib-and-cli-tool.js +3 -0
  113. package/lib-prod/env/env.npm-lib-and-cli-tool.js.map +1 -1
  114. package/lib-prod/env/env.vscode-plugin.d.ts +1 -0
  115. package/lib-prod/env/env.vscode-plugin.js +3 -0
  116. package/lib-prod/env/env.vscode-plugin.js.map +1 -1
  117. package/lib-prod/index._auto-generated_.d.ts +0 -2
  118. package/lib-prod/index._auto-generated_.js +0 -10
  119. package/lib-prod/index._auto-generated_.js.map +1 -1
  120. package/lib-prod/layouts/taon-bootstrap-navbar/index.d.ts +1 -1
  121. package/lib-prod/layouts/taon-bootstrap-navbar/index.js +1 -1
  122. package/lib-prod/package.json +1 -1
  123. package/lib-prod/ui/anonymize-text/index.d.ts +1 -1
  124. package/lib-prod/ui/anonymize-text/index.js +1 -1
  125. package/lib-prod/ui/directives/index.d.ts +1 -1
  126. package/lib-prod/ui/directives/index.js +1 -1
  127. package/lib-prod/ui/index.d.ts +1 -1
  128. package/lib-prod/ui/index.js +1 -1
  129. package/lib-prod/ui/taon-github-fork-me-corner/index.d.ts +1 -1
  130. package/lib-prod/ui/taon-github-fork-me-corner/index.js +1 -1
  131. package/lib-prod/ui/taon-github-fork-me-ribbon/index.d.ts +1 -1
  132. package/lib-prod/ui/taon-github-fork-me-ribbon/index.js +1 -1
  133. package/lib-prod/ui/taon-iframe-sync/index.d.ts +1 -1
  134. package/lib-prod/ui/taon-iframe-sync/index.js +1 -1
  135. package/lib-prod/ui/taon-lang-selector/index.d.ts +1 -1
  136. package/lib-prod/ui/taon-lang-selector/index.js +1 -1
  137. package/lib-prod/ui/taon-progress-bar/index.d.ts +1 -1
  138. package/lib-prod/ui/taon-progress-bar/index.js +1 -1
  139. package/lib-prod/ui/taon-session-passcode/index.d.ts +1 -1
  140. package/lib-prod/ui/taon-session-passcode/index.js +1 -1
  141. package/lib-prod/ui/taon-settings/index.d.ts +1 -1
  142. package/lib-prod/ui/taon-settings/index.js +1 -1
  143. package/lib-prod/ui/taon-slide-content/index.d.ts +1 -1
  144. package/lib-prod/ui/taon-slide-content/index.js +1 -1
  145. package/package.json +1 -1
  146. package/scss/lib/ui/taon-simple-layout/taon-simple-layout.component.scss +36 -1
  147. package/websql/fesm2022/taon-ui-websql.mjs +445 -1106
  148. package/websql/fesm2022/taon-ui-websql.mjs.map +1 -1
  149. package/websql/package.json +1 -1
  150. package/websql/types/taon-ui-websql.d.ts +15 -185
  151. package/websql-prod/fesm2022/taon-ui-websql-prod.mjs +446 -1107
  152. package/websql-prod/fesm2022/taon-ui-websql-prod.mjs.map +1 -1
  153. package/websql-prod/package.json +1 -1
  154. package/websql-prod/types/taon-ui-websql-prod.d.ts +15 -185
  155. package/html/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.html +0 -266
  156. package/html/lib/ui/taon-notifications/taon-notifications.component.html +0 -3
  157. package/html/lib/ui/taon-table/taon-table.component.html +0 -50
  158. package/lib/ui/taon-admin-mode-configuration/index.d.ts +0 -2
  159. package/lib/ui/taon-admin-mode-configuration/index.js +0 -19
  160. package/lib/ui/taon-admin-mode-configuration/index.js.map +0 -1
  161. package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +0 -31
  162. package/lib/ui/taon-admin-mode-configuration/taon-admin.models.d.ts +0 -5
  163. package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js +0 -3
  164. package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js.map +0 -1
  165. package/lib/ui/taon-full-material.module.d.ts +0 -5
  166. package/lib/ui/taon-notifications/index.d.ts +0 -4
  167. package/lib/ui/taon-notifications/index.js +0 -24
  168. package/lib/ui/taon-notifications/index.js.map +0 -1
  169. package/lib/ui/taon-notifications/taon-notifications.component.d.ts +0 -9
  170. package/lib/ui/taon-notifications/taon-notifications.models.d.ts +0 -6
  171. package/lib/ui/taon-notifications/taon-notifications.models.js +0 -11
  172. package/lib/ui/taon-notifications/taon-notifications.models.js.map +0 -1
  173. package/lib/ui/taon-notifications/taon-notifications.module.d.ts +0 -2
  174. package/lib/ui/taon-notifications/taon-notifications.service.d.ts +0 -11
  175. package/lib/ui/taon-simple-layout/taon-simple-layout.routes.d.ts +0 -2
  176. package/lib/ui/taon-table/index.d.ts +0 -2
  177. package/lib/ui/taon-table/index.js +0 -5
  178. package/lib/ui/taon-table/index.js.map +0 -1
  179. package/lib/ui/taon-table/taon-table.component.d.ts +0 -35
  180. package/lib/ui/taon-table/taon-table.module.d.ts +0 -2
  181. package/lib-esm/lib/ui/taon-admin-mode-configuration/index.d.ts +0 -1
  182. package/lib-esm/lib/ui/taon-admin-mode-configuration/index.js +0 -3
  183. package/lib-esm/lib/ui/taon-admin-mode-configuration/index.js.map +0 -1
  184. package/lib-esm/lib/ui/taon-admin-mode-configuration/taon-admin.models.d.ts +0 -5
  185. package/lib-esm/lib/ui/taon-admin-mode-configuration/taon-admin.models.js +0 -2
  186. package/lib-esm/lib/ui/taon-admin-mode-configuration/taon-admin.models.js.map +0 -1
  187. package/lib-esm/lib/ui/taon-notifications/index.d.ts +0 -1
  188. package/lib-esm/lib/ui/taon-notifications/index.js +0 -8
  189. package/lib-esm/lib/ui/taon-notifications/index.js.map +0 -1
  190. package/lib-esm/lib/ui/taon-notifications/taon-notifications.models.d.ts +0 -6
  191. package/lib-esm/lib/ui/taon-notifications/taon-notifications.models.js +0 -7
  192. package/lib-esm/lib/ui/taon-notifications/taon-notifications.models.js.map +0 -1
  193. package/lib-esm/lib/ui/taon-table/index.d.ts +0 -1
  194. package/lib-esm/lib/ui/taon-table/index.js +0 -2
  195. package/lib-esm/lib/ui/taon-table/index.js.map +0 -1
  196. package/lib-prod/ui/taon-admin-mode-configuration/index.d.ts +0 -1
  197. package/lib-prod/ui/taon-admin-mode-configuration/index.js +0 -3
  198. package/lib-prod/ui/taon-admin-mode-configuration/index.js.map +0 -1
  199. package/lib-prod/ui/taon-admin-mode-configuration/taon-admin.models.d.ts +0 -5
  200. package/lib-prod/ui/taon-admin-mode-configuration/taon-admin.models.js +0 -2
  201. package/lib-prod/ui/taon-admin-mode-configuration/taon-admin.models.js.map +0 -1
  202. package/lib-prod/ui/taon-notifications/index.d.ts +0 -1
  203. package/lib-prod/ui/taon-notifications/index.js +0 -8
  204. package/lib-prod/ui/taon-notifications/index.js.map +0 -1
  205. package/lib-prod/ui/taon-notifications/taon-notifications.models.d.ts +0 -6
  206. package/lib-prod/ui/taon-notifications/taon-notifications.models.js +0 -7
  207. package/lib-prod/ui/taon-notifications/taon-notifications.models.js.map +0 -1
  208. package/lib-prod/ui/taon-table/index.d.ts +0 -1
  209. package/lib-prod/ui/taon-table/index.js +0 -2
  210. package/lib-prod/ui/taon-table/index.js.map +0 -1
  211. package/scss/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.scss +0 -101
  212. package/scss/lib/ui/taon-notifications/taon-notifications.component.scss +0 -5
  213. package/scss/lib/ui/taon-table/taon-table.component.scss +0 -15
@@ -1,89 +1,47 @@
1
- import { A11yModule } from '@angular/cdk/a11y';
2
- import * as i10 from '@angular/cdk/drag-drop';
3
- import { DragDropModule } from '@angular/cdk/drag-drop';
4
- import { ScrollingModule } from '@angular/cdk/scrolling';
5
- import { CdkStepperModule } from '@angular/cdk/stepper';
6
- import { CdkTableModule } from '@angular/cdk/table';
7
- import { CdkTreeModule } from '@angular/cdk/tree';
8
- import * as i0 from '@angular/core';
9
- import { NgModule, Input, ChangeDetectionStrategy, Component, inject, ElementRef, HostListener, Directive, Pipe, EventEmitter, HostBinding, Output, Injectable, ViewChild, DestroyRef, Self, ChangeDetectorRef, signal, computed, PLATFORM_ID, effect, input, ContentChildren } from '@angular/core';
10
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
11
- import { MatBadgeModule } from '@angular/material/badge';
12
- import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
13
- import * as i3$1 from '@angular/material/button';
14
- import { MatButtonModule } from '@angular/material/button';
15
- import { MatButtonToggleModule } from '@angular/material/button-toggle';
16
- import * as i7 from '@angular/material/card';
17
- import { MatCardModule } from '@angular/material/card';
18
- import * as i8 from '@angular/material/checkbox';
19
- import { MatCheckboxModule } from '@angular/material/checkbox';
20
- import { MatChipsModule } from '@angular/material/chips';
21
- import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
22
- import { MatDatepickerModule } from '@angular/material/datepicker';
23
- import * as i2$3 from '@angular/material/dialog';
24
- import { MatDialogModule, MatDialogRef, MatDialog } from '@angular/material/dialog';
25
- import { MatDividerModule } from '@angular/material/divider';
26
- import { MatExpansionModule } from '@angular/material/expansion';
27
- import { MatGridListModule } from '@angular/material/grid-list';
28
- import * as i2$2 from '@angular/material/icon';
29
- import { MatIconModule } from '@angular/material/icon';
30
- import * as i5 from '@angular/material/input';
31
- import { MatInputModule } from '@angular/material/input';
32
- import { MatListModule } from '@angular/material/list';
33
- import { MatMenuModule } from '@angular/material/menu';
34
- import { MatPaginatorModule } from '@angular/material/paginator';
35
- import * as i6 from '@angular/material/progress-bar';
36
- import { MatProgressBarModule } from '@angular/material/progress-bar';
37
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
38
- import { MatRadioModule } from '@angular/material/radio';
39
- import { MatSelectModule } from '@angular/material/select';
40
- import * as i4 from '@angular/material/sidenav';
41
- import { MatSidenavModule } from '@angular/material/sidenav';
42
- import * as i1$3 from '@angular/material/slide-toggle';
43
- import { MatSlideToggleModule } from '@angular/material/slide-toggle';
44
- import { MatSliderModule } from '@angular/material/slider';
45
- import { MatSnackBarModule } from '@angular/material/snack-bar';
46
- import { MatSortModule } from '@angular/material/sort';
47
- import { MatStepperModule } from '@angular/material/stepper';
48
- import { MatTableModule } from '@angular/material/table';
49
- import * as i3$2 from '@angular/material/tabs';
50
- import { MatTabsModule } from '@angular/material/tabs';
51
- import { MatToolbarModule } from '@angular/material/toolbar';
52
- import { MatTooltipModule } from '@angular/material/tooltip';
53
- import { MatTreeModule } from '@angular/material/tree';
54
1
  import * as i1 from '@angular/common';
55
2
  import { CommonModule, NgIf, AsyncPipe, JsonPipe, isPlatformBrowser, NgStyle } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { Input, ChangeDetectionStrategy, Component, inject, ElementRef, HostListener, Directive, Pipe, EventEmitter, HostBinding, Output, Injectable, ChangeDetectorRef, ViewChild, NgModule, signal, computed, DestroyRef, Self, PLATFORM_ID, effect, input, ContentChildren } from '@angular/core';
56
5
  import * as i2 from '@ng-bootstrap/ng-bootstrap';
57
6
  import { NgbCollapseModule } from '@ng-bootstrap/ng-bootstrap';
58
7
  import { ModalModule } from 'ngx-bootstrap/modal';
59
8
  import * as i1$1 from '@angular/platform-browser';
60
9
  import { DomSanitizer } from '@angular/platform-browser';
61
10
  import { Log, Level } from 'ng2-logger/browser';
62
- import { _, axios, Helpers, json5 } from 'tnp-core/browser';
63
- import * as i2$1 from '@angular/forms';
64
- import { FormGroup, FormControl, ReactiveFormsModule, FormsModule, Validators } from '@angular/forms';
65
- import * as i3 from 'ngx-scrollbar';
66
- import { NgScrollbarModule } from 'ngx-scrollbar';
67
- import { interval, tap, Subject, Observable, BehaviorSubject, map, distinctUntilChanged, shareReplay, take, withLatestFrom, Subscription, defer, fromEvent, debounceTime, share } from 'rxjs';
68
- import * as i4$1 from 'static-columns/browser';
69
- import { StaticColumnsModule } from 'static-columns/browser';
70
- import { TaonAdminPanelMode, TaonAdminService, Symbols } from 'taon/browser';
71
- import { TaonStor } from 'taon-storage/browser';
72
- import { Resource, getDefaultModel } from 'ng2-rest/browser';
73
- import * as i1$2 from '@ngneat/hot-toast';
74
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
75
- import { PasswordModule } from 'primeng/password';
11
+ import { _, axios } from 'tnp-core/browser';
12
+ import * as i2$2 from '@angular/material/button';
13
+ import { MatButtonModule } from '@angular/material/button';
14
+ import * as i2$1 from '@angular/material/dialog';
15
+ import { MatDialogRef, MatDialogModule, MatDialog } from '@angular/material/dialog';
16
+ import * as i2$3 from '@angular/material/icon';
17
+ import { MatIconModule } from '@angular/material/icon';
76
18
  import * as i2$4 from '@angular/router';
77
19
  import { Router, ActivatedRoute, NavigationEnd, RouterLink, RouterOutlet, RouterModule } from '@angular/router';
78
20
  import { ButtonModule } from 'primeng/button';
21
+ import * as i7 from '@angular/forms';
22
+ import { FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
23
+ import { MatDividerModule } from '@angular/material/divider';
79
24
  import { MatFormFieldModule } from '@angular/material/form-field';
25
+ import * as i5 from '@angular/material/input';
26
+ import { MatInputModule } from '@angular/material/input';
27
+ import * as i6 from '@angular/material/progress-bar';
28
+ import { MatProgressBarModule } from '@angular/material/progress-bar';
29
+ import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
80
30
  import { MtxLoaderModule } from '@ng-matero/extensions/loader';
81
31
  import { Translation, TranslateDirective, TranslateService } from '@taon-dev/i18n/browser';
82
32
  import { InputTextModule } from 'primeng/inputtext';
33
+ import { Observable, BehaviorSubject, map, distinctUntilChanged, shareReplay, take, Subject, withLatestFrom, tap, Subscription, interval } from 'rxjs';
83
34
  import { distinctUntilChanged as distinctUntilChanged$1, takeUntil, filter } from 'rxjs/operators';
84
35
  import { TaonStripeCloudflareWorker } from '@taon-dev/api-workers/browser';
85
- import * as i3$3 from '@ng-matero/extensions/grid';
86
- import { MtxGridModule } from '@ng-matero/extensions/grid';
36
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
37
+ import { PasswordModule } from 'primeng/password';
38
+ import { TaonStor } from 'taon-storage/browser';
39
+ import * as i1$2 from '@angular/material/slide-toggle';
40
+ import { MatSlideToggleModule } from '@angular/material/slide-toggle';
41
+ import { MatCardModule } from '@angular/material/card';
42
+ import { MatListModule } from '@angular/material/list';
43
+ import * as i3 from '@angular/material/tabs';
44
+ import { MatTabsModule } from '@angular/material/tabs';
87
45
 
88
46
  // THIS FILE IS GENERATED - DO NOT MODIFY
89
47
  /**
@@ -109,7 +67,7 @@ const CURRENT_PACKAGE_TAON_VERSION = 'v21';
109
67
  /**
110
68
  * Autogenerated by current cli tool. Use *tnp release* to bump version.
111
69
  */
112
- const CURRENT_PACKAGE_VERSION = '21.0.66';
70
+ const CURRENT_PACKAGE_VERSION = '21.0.67';
113
71
  // THIS FILE IS GENERATED - DO NOT MODIFY
114
72
 
115
73
  function myOrgProj() { }
@@ -157,145 +115,6 @@ async function startCli(argsv, filename) {
157
115
  return (void 0);
158
116
  }
159
117
 
160
- //#region imports
161
- //#endregion
162
- /**
163
- * @deprecated too heavy!
164
- */
165
- class TaonFullMaterialModule {
166
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonFullMaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
167
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: TaonFullMaterialModule, exports: [A11yModule,
168
- CdkStepperModule,
169
- CdkTableModule,
170
- CdkTreeModule,
171
- DragDropModule,
172
- MatAutocompleteModule,
173
- MatBadgeModule,
174
- MatBottomSheetModule,
175
- MatButtonModule,
176
- MatButtonToggleModule,
177
- MatCardModule,
178
- MatCheckboxModule,
179
- MatChipsModule,
180
- MatStepperModule,
181
- MatDatepickerModule,
182
- MatDialogModule,
183
- MatDividerModule,
184
- MatExpansionModule,
185
- MatGridListModule,
186
- MatIconModule,
187
- MatInputModule,
188
- MatListModule,
189
- MatMenuModule,
190
- MatNativeDateModule,
191
- MatPaginatorModule,
192
- MatProgressBarModule,
193
- MatProgressSpinnerModule,
194
- MatRadioModule,
195
- MatRippleModule,
196
- MatSelectModule,
197
- MatSidenavModule,
198
- MatSliderModule,
199
- MatSlideToggleModule,
200
- MatSnackBarModule,
201
- MatSortModule,
202
- MatTableModule,
203
- MatTabsModule,
204
- MatToolbarModule,
205
- MatTooltipModule,
206
- MatTreeModule,
207
- ScrollingModule] }); }
208
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonFullMaterialModule, imports: [A11yModule,
209
- CdkStepperModule,
210
- CdkTableModule,
211
- CdkTreeModule,
212
- DragDropModule,
213
- MatAutocompleteModule,
214
- MatBadgeModule,
215
- MatBottomSheetModule,
216
- MatButtonModule,
217
- MatButtonToggleModule,
218
- MatCardModule,
219
- MatCheckboxModule,
220
- MatChipsModule,
221
- MatStepperModule,
222
- MatDatepickerModule,
223
- MatDialogModule,
224
- MatDividerModule,
225
- MatExpansionModule,
226
- MatGridListModule,
227
- MatIconModule,
228
- MatInputModule,
229
- MatListModule,
230
- MatMenuModule,
231
- MatNativeDateModule,
232
- MatPaginatorModule,
233
- MatProgressBarModule,
234
- MatProgressSpinnerModule,
235
- MatRadioModule,
236
- MatRippleModule,
237
- MatSelectModule,
238
- MatSidenavModule,
239
- MatSliderModule,
240
- MatSlideToggleModule,
241
- MatSnackBarModule,
242
- MatSortModule,
243
- MatTableModule,
244
- MatTabsModule,
245
- MatToolbarModule,
246
- MatTooltipModule,
247
- MatTreeModule,
248
- ScrollingModule] }); }
249
- }
250
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonFullMaterialModule, decorators: [{
251
- type: NgModule,
252
- args: [{
253
- exports: [
254
- A11yModule,
255
- CdkStepperModule,
256
- CdkTableModule,
257
- CdkTreeModule,
258
- DragDropModule,
259
- MatAutocompleteModule,
260
- MatBadgeModule,
261
- MatBottomSheetModule,
262
- MatButtonModule,
263
- MatButtonToggleModule,
264
- MatCardModule,
265
- MatCheckboxModule,
266
- MatChipsModule,
267
- MatStepperModule,
268
- MatDatepickerModule,
269
- MatDialogModule,
270
- MatDividerModule,
271
- MatExpansionModule,
272
- MatGridListModule,
273
- MatIconModule,
274
- MatInputModule,
275
- MatListModule,
276
- MatMenuModule,
277
- MatNativeDateModule,
278
- MatPaginatorModule,
279
- MatProgressBarModule,
280
- MatProgressSpinnerModule,
281
- MatRadioModule,
282
- MatRippleModule,
283
- MatSelectModule,
284
- MatSidenavModule,
285
- MatSliderModule,
286
- MatSlideToggleModule,
287
- MatSnackBarModule,
288
- MatSortModule,
289
- MatTableModule,
290
- MatTabsModule,
291
- MatToolbarModule,
292
- MatTooltipModule,
293
- MatTreeModule,
294
- ScrollingModule,
295
- ],
296
- }]
297
- }] });
298
-
299
118
  //#region imports
300
119
  //#endregion
301
120
  class TaonBootstrapNavbarComponent {
@@ -415,604 +234,127 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
415
234
  standalone: true,
416
235
  }]
417
236
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { taonInjectHTML: [{
418
- type: Input
419
- }] } });
420
-
421
- //#region imports
422
- //#endregion
423
- const log$1 = Log.create(`[taon-helpers] long-press`, Level.WARN, Level.ERROR);
424
- class TaonLongPress {
425
- constructor() {
426
- this.pressDuration = 1000;
427
- this.onLongPress = new EventEmitter();
428
- this.onLongPressing = new EventEmitter();
429
- this.onLongPressEnd = new EventEmitter();
430
- this.mouseX = 0;
431
- this.mouseY = 0;
432
- this.allowTrigger = false;
433
- this.triggerEnd = _.debounce(() => {
434
- this.endPress();
435
- }, 500);
436
- }
437
- get press() {
438
- return this.pressing;
439
- }
440
- get longPress() {
441
- return this.longPressing;
442
- }
443
- onMouseDown(event) {
444
- // don't do right/middle clicks
445
- log$1.d(`MOUSE DOWN `);
446
- if (event.which !== 1)
447
- return;
448
- this.allowTrigger = true;
449
- this.mouseX = event.clientX;
450
- this.mouseY = event.clientY;
451
- this.pressing = true;
452
- this.longPressing = false;
453
- this.timeout = setTimeout(() => {
454
- if (this.allowTrigger) {
455
- this.longPressing = true;
456
- log$1.d(`long pressing start pressDuration:${this.pressDuration} `);
457
- this.onLongPress.emit(event);
458
- this.loop(event);
459
- }
460
- }, this.pressDuration);
461
- this.loop(event);
462
- }
463
- onMouseMove(event) {
464
- if (this.pressing && !this.longPressing) {
465
- const xThres = event.clientX - this.mouseX > 10;
466
- const yThres = event.clientY - this.mouseY > 10;
467
- if (xThres || yThres) {
468
- this.endPress();
469
- }
470
- }
471
- }
472
- loop(event) {
473
- if (this.longPressing) {
474
- this.timeout = setTimeout(() => {
475
- log$1.d(`emil longpressing`);
476
- this.triggerEnd();
477
- this.onLongPressing.emit(event);
478
- this.loop(event);
479
- }, 50);
480
- }
481
- }
482
- endPress(emit = true) {
483
- this.allowTrigger = false;
484
- clearTimeout(this.timeout);
485
- this.longPressing = false;
486
- this.pressing = false;
487
- if (emit) {
488
- log$1.d(`EMIT END`);
489
- this.onLongPressEnd.emit(true);
490
- }
491
- else {
492
- log$1.d(`NOT EMIT END`);
493
- }
494
- }
495
- onMouseUp() {
496
- this.endPress(false);
497
- }
498
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLongPress, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
499
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.9", type: TaonLongPress, isStandalone: true, selector: "[taonLongPress]", inputs: { pressDuration: "pressDuration" }, outputs: { onLongPress: "onLongPress", onLongPressing: "onLongPressing", onLongPressEnd: "onLongPressEnd" }, host: { listeners: { "mousedown": "onMouseDown($event)", "mousemove": "onMouseMove($event)", "mouseup": "onMouseUp()" }, properties: { "class.press": "this.press", "class.longpress": "this.longPress" } }, ngImport: i0 }); }
500
- }
501
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLongPress, decorators: [{
502
- type: Directive,
503
- args: [{
504
- selector: '[taonLongPress]',
505
- standalone: true,
506
- }]
507
- }], propDecorators: { pressDuration: [{
508
- type: Input
509
- }], onLongPress: [{
510
- type: Output
511
- }], onLongPressing: [{
512
- type: Output
513
- }], onLongPressEnd: [{
514
- type: Output
515
- }], press: [{
516
- type: HostBinding,
517
- args: ['class.press']
518
- }], longPress: [{
519
- type: HostBinding,
520
- args: ['class.longpress']
521
- }], onMouseDown: [{
522
- type: HostListener,
523
- args: ['mousedown', ['$event']]
524
- }], onMouseMove: [{
525
- type: HostListener,
526
- args: ['mousemove', ['$event']]
527
- }], onMouseUp: [{
528
- type: HostListener,
529
- args: ['mouseup']
530
- }] } });
531
-
532
- var ViewMode;
533
- (function (ViewMode) {
534
- ViewMode["Add"] = "Add";
535
- ViewMode["Edit"] = "Edit";
536
- ViewMode["Preview"] = "Preview";
537
- })(ViewMode || (ViewMode = {}));
538
-
539
- //#region imports
540
- //#endregion
541
- class TaonNotificationsService {
542
- constructor(toast) {
543
- this.toast = toast;
544
- }
545
- options(type, options) {
546
- if (_.isString(options)) {
547
- options = {
548
- // @ts-ignore
549
- title: options,
550
- };
551
- }
552
- return options;
553
- }
554
- success(options) {
555
- const opt = this.options('success', options);
556
- return this.toast.success(opt.title);
557
- }
558
- error(options) {
559
- const opt = this.options('error', options);
560
- return this.toast.error(opt.title);
561
- }
562
- warn(options) {
563
- const opt = this.options('warning', options);
564
- return this.toast.warning(opt.title);
565
- }
566
- info(options) {
567
- const opt = this.options('info', options);
568
- return this.toast.info(opt.title);
569
- }
570
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsService, deps: [{ token: i1$2.HotToastService }], target: i0.ɵɵFactoryTarget.Injectable }); }
571
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsService, providedIn: 'root' }); }
572
- }
573
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsService, decorators: [{
574
- type: Injectable,
575
- args: [{
576
- providedIn: 'root',
577
- }]
578
- }], ctorParameters: () => [{ type: i1$2.HotToastService }] });
579
-
580
- //#region imports
581
- //#endregion
582
- class TaonNotificationsComponent {
583
- constructor(notification) {
584
- this.notification = notification;
585
- }
586
- ngOnInit() { }
587
- init(subscribtionsArray, template, callback) {
588
- subscribtionsArray.push(Resource.listenErrors.subscribe(err => {
589
- this.notification.error(err.msg);
590
- // subscribtionsArray.push(notify.onTap.subscribe(() => {
591
- // callback(err);
592
- // this.modal.open(template);
593
- // }) as any);
594
- }));
595
- }
596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsComponent, deps: [{ token: TaonNotificationsService }], target: i0.ɵɵFactoryTarget.Component }); }
597
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonNotificationsComponent, isStandalone: false, selector: "taon-notifications", ngImport: i0, template: "<!-- <p>\n notyfications works!\n</p> -->\n", styles: [":host{position:absolute;width:0px;height:0px}\n"] }); }
598
- }
599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsComponent, decorators: [{
600
- type: Component,
601
- args: [{ selector: 'taon-notifications', standalone: false, template: "<!-- <p>\n notyfications works!\n</p> -->\n", styles: [":host{position:absolute;width:0px;height:0px}\n"] }]
602
- }], ctorParameters: () => [{ type: TaonNotificationsService }] });
603
-
604
- //#region imports
605
- class TaonNotificationOptions {
606
- }
607
- //#endregion
608
-
609
- //#endregion
610
- class TaonNotificationsModule {
611
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
612
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsModule, declarations: [TaonNotificationsComponent], exports: [TaonNotificationsComponent] }); }
613
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsModule, providers: [TaonNotificationsService] }); }
614
- }
615
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotificationsModule, decorators: [{
616
- type: NgModule,
617
- args: [{
618
- imports: [
619
- // CommonModule,
620
- // BrowserAnimationsModule, // required animations module
621
- // HotToastModule.forRoot({
622
- // position: 'top-right',
623
- // }),
624
- ],
625
- exports: [TaonNotificationsComponent],
626
- declarations: [TaonNotificationsComponent],
627
- providers: [TaonNotificationsService],
628
- }]
629
- }] });
630
-
631
- //#region @browser
632
- //#endregion
633
-
634
- //#region imports
635
- //#endregion
636
- // import {
637
- // NgProgressConfig,
638
- // NgProgressModule,
639
- // NgProgressRef,
640
- // } from 'ngx-progressbar';
641
- // import { Models } from 'tnp-models';
642
- // import type { TaonAdmin } from '../taon-admin-mode-configuration';
643
- const calculatePercentage = (loaded, total) => Math.floor(loaded * 1.0) / total;
644
- class TaonProgressBarComponent {
645
- // options: NgProgressConfig = _.merge(
646
- // {
647
- // min: 8,
648
- // max: 100,
649
- // speed: 200,
650
- // trickleSpeed: 300,
651
- // debounceTime: 0,
652
- // ease: 'linear',
653
- // spinnerPosition: 'right',
654
- // direction: 'ltr+',
655
- // color: 'gray',
656
- // fixed: true,
657
- // meteor: true,
658
- // spinner: true,
659
- // thick: false,
660
- // },
661
- // _.get(ENV, `plugins['ngx-progressbar']`),
662
- // );
663
- constructor() {
664
- this.handlers = [];
665
- }
666
- ngOnInit() { }
667
- ngOnDestroy() {
668
- this.handlers.forEach(h => h.unsubscribe());
669
- }
670
- ngAfterViewInit() {
671
- // this.labProgress.set(20)
672
- this.loadProgressBar(void 0, axios);
673
- }
674
- loadProgressBar(config, instance = axios) {
675
- // let requestsCounter = 0;
676
- // const setupStartProgress = () => {
677
- // instance.interceptors.request.use(config => {
678
- // requestsCounter++;
679
- // this.labProgress.start();
680
- // return config;
681
- // });
682
- // };
683
- // const setupUpdateProgress = () => {
684
- // const update = e => {
685
- // // NProgress.inc(calculatePercentage(e.loaded, e.total))
686
- // const percentage = calculatePercentage(e.loaded, e.total) * 100;
687
- // // console.log(`loaded: ${e.loaded}, total: ${e.total} , pecent: ${percentage}`)
688
- // this.labProgress.inc(percentage);
689
- // };
690
- // instance.defaults.onDownloadProgress = update;
691
- // instance.defaults.onUploadProgress = update;
692
- // };
693
- // const setupStopProgress = () => {
694
- // const responseFunc = response => {
695
- // if (--requestsCounter === 0) {
696
- // this.labProgress.complete();
697
- // // NProgress.done()
698
- // }
699
- // return response;
700
- // };
701
- // const errorFunc = error => {
702
- // if (--requestsCounter === 0) {
703
- // this.labProgress.complete();
704
- // // NProgress.done()
705
- // }
706
- // return Promise.reject(error);
707
- // };
708
- // instance.interceptors.response.use(responseFunc, errorFunc);
709
- // };
710
- // setupStartProgress();
711
- // setupUpdateProgress();
712
- // setupStopProgress();
713
- /* */
714
- /* */
715
- /* */
716
- /* */
717
- /* */
718
- /* */
719
- /* */
720
- /* */
721
- /* */
722
- /* */
723
- /* */
724
- /* */
725
- /* */
726
- /* */
727
- /* */
728
- /* */
729
- /* */
730
- /* */
731
- /* */
732
- /* */
733
- /* */
734
- /* */
735
- /* */
736
- /* */
737
- /* */
738
- /* */
739
- /* */
740
- /* */
741
- /* */
742
- /* */
743
- /* */
744
- /* */
745
- /* */
746
- /* */
747
- /* */
748
- /* */
749
- /* */
750
- /* */
751
- /* */
752
- /* */
753
- /* */
754
- /* */
755
- }
756
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
757
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonProgressBarComponent, isStandalone: false, selector: "taon-progress-bar", inputs: { isDesktop: "isDesktop" }, viewQueries: [{ propertyName: "labProgress", first: true, predicate: ["labProgress"], descendants: true }], ngImport: i0, template: "<!-- <ng-progress\n #labProgress\n id=\"lab\"\n [meteor]=\"options.meteor\"\n [color]=\"options.color\"\n [min]=\"options.min\"\n [max]=\"options.max\"\n [speed]=\"options.speed\"\n [spinner]=\"\n options.spinner &&\n (!admin.adminPanelIsOpen ||\n (admin.adminPanelIsOpen && (admin.draggablePopupMode || !isDesktop)))\n \"\n [spinnerPosition]=\"options.spinnerPosition\"\n [direction]=\"options.direction\"\n [trickleSpeed]=\"options.trickleSpeed\"\n [debounceTime]=\"options.debounceTime\"\n [ease]=\"options.ease\"\n [thick]=\"options.thick\"\n [fixed]=\"options.fixed\">\n</ng-progress>\n(started)=\"onProgressStarted()\"\n (completed)=\"onProgressCompleted()\" -->\n", styles: [":host{display:block}\n"] }); }
758
- }
759
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarComponent, decorators: [{
760
- type: Component,
761
- args: [{ selector: 'taon-progress-bar', standalone: false, template: "<!-- <ng-progress\n #labProgress\n id=\"lab\"\n [meteor]=\"options.meteor\"\n [color]=\"options.color\"\n [min]=\"options.min\"\n [max]=\"options.max\"\n [speed]=\"options.speed\"\n [spinner]=\"\n options.spinner &&\n (!admin.adminPanelIsOpen ||\n (admin.adminPanelIsOpen && (admin.draggablePopupMode || !isDesktop)))\n \"\n [spinnerPosition]=\"options.spinnerPosition\"\n [direction]=\"options.direction\"\n [trickleSpeed]=\"options.trickleSpeed\"\n [debounceTime]=\"options.debounceTime\"\n [ease]=\"options.ease\"\n [thick]=\"options.thick\"\n [fixed]=\"options.fixed\">\n</ng-progress>\n(started)=\"onProgressStarted()\"\n (completed)=\"onProgressCompleted()\" -->\n", styles: [":host{display:block}\n"] }]
762
- }], ctorParameters: () => [], propDecorators: { labProgress: [{
763
- type: ViewChild,
764
- args: ['labProgress']
765
- }], isDesktop: [{
766
- type: Input
767
- }] } });
768
-
769
- //#region imports
770
- //#endregion
771
- // import { NgProgressConfig, NgProgressModule } from 'ngx-progressbar';
772
- class TaonProgressBarModule {
773
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
774
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, declarations: [TaonProgressBarComponent], imports: [CommonModule], exports: [TaonProgressBarComponent] }); }
775
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, imports: [CommonModule] }); }
776
- }
777
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, decorators: [{
778
- type: NgModule,
779
- args: [{
780
- imports: [
781
- CommonModule,
782
- // NgProgressModule.withConfig({})
783
- ],
784
- declarations: [TaonProgressBarComponent],
785
- exports: [TaonProgressBarComponent],
786
- }]
787
- }] });
788
-
789
- //#region @browser
790
- //#endregion
791
-
792
- //#region imports
793
- class TaonSessionPasscodeComponent {
794
- constructor(element, domSanitizer, cdr) {
795
- this.element = element;
796
- this.domSanitizer = domSanitizer;
797
- this.cdr = cdr;
798
- this.destroyRef = inject(DestroyRef);
799
- this.lastPasscode = TaonStor.inLocalstorage({
800
- defaultValue: '',
801
- keyOrPath: 'lastPasscode',
802
- }, TaonSessionPasscodeComponent);
803
- this.display = 'none';
804
- this.form = new FormGroup({
805
- passcode: new FormControl(),
806
- });
807
- }
808
- async ngOnInit() {
809
- if (!this.message) {
810
- this.message = `
811
- This website is only for testing purpose. Please type passcode bellow to see content.
812
-
813
- `;
814
- }
815
- this.safeMessage = this.domSanitizer.bypassSecurityTrustHtml(this.message);
816
- await this.lastPasscode.ready();
817
- if (this.lastPasscode()?.toString() === this.passcode?.toString()) {
818
- this.hide();
819
- }
820
- else {
821
- this.show();
822
- this.focus();
823
- }
824
- this.cdr.markForCheck();
825
- interval(1000)
826
- .pipe(takeUntilDestroyed(this.destroyRef), tap(() => {
827
- this.focus();
828
- this.cdr.markForCheck();
829
- }))
830
- .subscribe();
831
- }
832
- submit({ passcode }) {
833
- if (this.isPasscodeOK(passcode || '')) {
834
- this.hide();
835
- }
836
- else {
837
- this.clear();
838
- }
839
- }
840
- isPasscodeOK(passcode) {
841
- this.lastPasscode.set(passcode.toString());
842
- return this.passcode.toString() === passcode;
843
- }
844
- ngAfterViewInit() { }
845
- focus() {
846
- this.element.nativeElement.querySelector('input')?.focus();
847
- }
848
- hide() {
849
- this.display = 'none';
850
- }
851
- show() {
852
- this.display = 'block';
853
- }
854
- clear() {
855
- this.form.controls.passcode.setValue('');
856
- }
857
- onKeyup(event) {
858
- if (this.isPasscodeOK(event.target.value || '')) {
859
- this.hide();
860
- return;
861
- }
862
- const key = event.keyCode || event.charCode;
863
- if (key === 8 || key === 46 || this.lastPasscode()?.length > 5) {
864
- this.clear();
865
- }
866
- }
867
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSessionPasscodeComponent, deps: [{ token: i0.ElementRef, self: true }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
868
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonSessionPasscodeComponent, isStandalone: true, selector: "taon-session-passcode", inputs: { passcode: "passcode", message: "message" }, host: { properties: { "style.display": "this.display" } }, ngImport: i0, template: "<form\n [formGroup]=\"form\"\n content=\"notranslate\"\n autocomplete=\"off\"\n (click)=\"focus()\"\n (ngSubmit)=\"submit(form.value)\"\n class=\"flex flex-col items-center w-full h-full\">\n <div class=\"flex content-center w-full justify-center mt-8\">\n <p\n class=\"p-3 max-w-[400px] min-h-[100px]\"\n [innerHtml]=\"safeMessage\"></p>\n </div>\n\n <input\n type=\"password\"\n class=\"text-5xl md:text-8xl pointer-events-none\"\n #taonpasscode\n (keyup)=\"onKeyup($event)\"\n formControlName=\"passcode\" />\n</form>\n", styles: [":host{position:fixed;background-color:#9f9f9f57;z-index:2147483647;backdrop-filter:blur(50px);width:100%;height:100%;display:none}input{background:#fff;border-radius:6px;outline:0px;border:0px;color:gray;text-align:center;width:500px}\n"], dependencies: [{ kind: "ngmodule", type: PasswordModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }] }); }
869
- }
870
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSessionPasscodeComponent, decorators: [{
871
- type: Component,
872
- args: [{ selector: 'taon-session-passcode', standalone: true, imports: [PasswordModule, CommonModule, ReactiveFormsModule, FormsModule], template: "<form\n [formGroup]=\"form\"\n content=\"notranslate\"\n autocomplete=\"off\"\n (click)=\"focus()\"\n (ngSubmit)=\"submit(form.value)\"\n class=\"flex flex-col items-center w-full h-full\">\n <div class=\"flex content-center w-full justify-center mt-8\">\n <p\n class=\"p-3 max-w-[400px] min-h-[100px]\"\n [innerHtml]=\"safeMessage\"></p>\n </div>\n\n <input\n type=\"password\"\n class=\"text-5xl md:text-8xl pointer-events-none\"\n #taonpasscode\n (keyup)=\"onKeyup($event)\"\n formControlName=\"passcode\" />\n</form>\n", styles: [":host{position:fixed;background-color:#9f9f9f57;z-index:2147483647;backdrop-filter:blur(50px);width:100%;height:100%;display:none}input{background:#fff;border-radius:6px;outline:0px;border:0px;color:gray;text-align:center;width:500px}\n"] }]
873
- }], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
874
- type: Self
875
- }] }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }], propDecorators: { passcode: [{
876
- type: Input,
877
- args: [{
878
- required: true,
879
- }]
880
- }], message: [{
881
- type: Input
882
- }], display: [{
883
- type: HostBinding,
884
- args: ['style.display']
885
- }] } });
886
-
887
- //#region @browser
888
- //#endregion
889
-
890
- //#region imports
891
- //#endregion
892
- class TaonAdminModeConfigurationComponent {
893
- constructor() {
894
- //#region fields & getters
895
- this.TaonAdminPanelMode = TaonAdminPanelMode;
896
- this.$destroy = new Subject();
897
- this.cdr = inject(ChangeDetectorRef);
898
- this.taonAdminService = inject(TaonAdminService);
899
- this.isWebSQLMode = Helpers.getIsWebSQL();
900
- this.height = 0;
901
- this.reloading = signal(false, ...(ngDevMode ? [{ debugName: "reloading" }] : []));
902
- this.scrollableEnabled = false;
903
- this.dragPositionX = TaonStor.inLocalstorage({
904
- defaultValue: 0,
905
- keyOrPath: 'dragPositionX',
906
- }, TaonAdminModeConfigurationComponent);
907
- this.dragPositionY = TaonStor.inLocalstorage({
908
- defaultValue: 0,
909
- keyOrPath: 'dragPositionY',
910
- }, TaonAdminModeConfigurationComponent);
911
- this.dragPositionZero = { x: 0, y: 0 };
912
- this.selectedIndex = TaonStor.inLocalstorage({
913
- defaultValue: 0,
914
- keyOrPath: 'selectedIndex',
915
- }, TaonAdminModeConfigurationComponent);
916
- }
917
- //#endregion
918
- //#region on init
919
- async ngOnInit() {
920
- await TaonStor.awaitAll();
921
- this.dragPosition = { x: this.dragPositionX(), y: this.dragPositionY() };
922
- }
923
- //#endregion
924
- //#region after view init
925
- ngAfterViewInit() {
926
- //Called after ngAfterContentInit when the component's view has been initialized. Applies to components only.
927
- //Add 'implements AfterViewInit' to the class.
928
- setTimeout(() => {
929
- this.onResize();
930
- // TODO QUICK_FIX for draggble popup proper first index load on tabs
931
- if (this.taonAdminService.adminPanelMode() !== TaonAdminPanelMode.ICON) {
932
- this.reloadTabs();
933
- }
934
- });
935
- }
936
- //#endregion
937
- //#region on destroy
938
- ngOnDestroy() {
939
- this.$destroy.next(void 0);
940
- this.$destroy.complete();
237
+ type: Input
238
+ }] } });
239
+
240
+ //#region imports
241
+ //#endregion
242
+ const log = Log.create(`[taon-helpers] long-press`, Level.WARN, Level.ERROR);
243
+ class TaonLongPress {
244
+ constructor() {
245
+ this.pressDuration = 1000;
246
+ this.onLongPress = new EventEmitter();
247
+ this.onLongPressing = new EventEmitter();
248
+ this.onLongPressEnd = new EventEmitter();
249
+ this.mouseX = 0;
250
+ this.mouseY = 0;
251
+ this.allowTrigger = false;
252
+ this.triggerEnd = _.debounce(() => {
253
+ this.endPress();
254
+ }, 500);
941
255
  }
942
- //#endregion
943
- //#region on resize
944
- onResize(event) {
945
- this.height = window.innerHeight;
256
+ get press() {
257
+ return this.pressing;
946
258
  }
947
- //#endregion
948
- //#region methods
949
- reloadTabs() {
950
- this.reloading.set(true);
951
- setTimeout(() => {
952
- this.reloading.set(false);
953
- console.log('reloading done');
954
- });
259
+ get longPress() {
260
+ return this.longPressing;
955
261
  }
956
- resetDrag() {
957
- this.dragPositionX.set(0);
958
- this.dragPositionY.set(0);
959
- this.dragPosition = { x: this.dragPositionX(), y: this.dragPositionY() };
262
+ onMouseDown(event) {
263
+ // don't do right/middle clicks
264
+ log.d(`MOUSE DOWN `);
265
+ if (event.which !== 1)
266
+ return;
267
+ this.allowTrigger = true;
268
+ this.mouseX = event.clientX;
269
+ this.mouseY = event.clientY;
270
+ this.pressing = true;
271
+ this.longPressing = false;
272
+ this.timeout = setTimeout(() => {
273
+ if (this.allowTrigger) {
274
+ this.longPressing = true;
275
+ log.d(`long pressing start pressDuration:${this.pressDuration} `);
276
+ this.onLongPress.emit(event);
277
+ this.loop(event);
278
+ }
279
+ }, this.pressDuration);
280
+ this.loop(event);
960
281
  }
961
- moved(c) {
962
- this.dragPositionX.set(this.dragPositionX() + c.distance.x);
963
- this.dragPositionY.set(this.dragPositionY() + c.distance.y);
282
+ onMouseMove(event) {
283
+ if (this.pressing && !this.longPressing) {
284
+ const xThres = event.clientX - this.mouseX > 10;
285
+ const yThres = event.clientY - this.mouseY > 10;
286
+ if (xThres || yThres) {
287
+ this.endPress();
288
+ }
289
+ }
964
290
  }
965
- //#endregion
966
- isLink(tab) {
967
- return typeof tab?.templateOrIframeLink === 'string';
291
+ loop(event) {
292
+ if (this.longPressing) {
293
+ this.timeout = setTimeout(() => {
294
+ log.d(`emil longpressing`);
295
+ this.triggerEnd();
296
+ this.onLongPressing.emit(event);
297
+ this.loop(event);
298
+ }, 50);
299
+ }
968
300
  }
969
- getIfrmeLink(tab) {
970
- if (typeof tab.templateOrIframeLink === 'string') {
971
- if (tab.templateOrIframeLink?.startsWith('http')) {
972
- return tab.templateOrIframeLink;
973
- }
974
- return `${window.location.origin}${window.location.pathname}${tab.templateOrIframeLink}`;
301
+ endPress(emit = true) {
302
+ this.allowTrigger = false;
303
+ clearTimeout(this.timeout);
304
+ this.longPressing = false;
305
+ this.pressing = false;
306
+ if (emit) {
307
+ log.d(`EMIT END`);
308
+ this.onLongPressEnd.emit(true);
309
+ }
310
+ else {
311
+ log.d(`NOT EMIT END`);
975
312
  }
976
313
  }
977
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminModeConfigurationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
978
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonAdminModeConfigurationComponent, isStandalone: true, selector: "taon-admin-mode-configuration", inputs: { scrollableEnabled: "scrollableEnabled", showPasscode: "showPasscode", passcode: "passcode", message: "message" }, host: { listeners: { "window:resize": "onResize($event)" } }, ngImport: i0, template: "<!-- #region basic global components -->\n<taon-session-passcode\n *ngIf=\"showPasscode\"\n [passcode]=\"passcode\"\n [message]=\"message\" />\n<!-- <taon-progress-bar [taonAdminService.isDesktop()]=\"taonAdminService.isDesktop()\"></taon-progress-bar> -->\n<!-- <taon-notifications></taon-notifications> -->\n<button\n mat-fab\n class=\"fab-button\"\n color=\"accent\"\n aria-label=\"Taon Admin Mode\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.ICON &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe\n \"\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\">\n <mat-icon>build</mat-icon>\n</button>\n<!-- #endregion -->\n\n<!-- #region small hidden button -->\n<!-- <button class=\"admin-show-button\"\n *ngIf=\"!taonAdminService.draggablePopupMode && taonAdminService.isDesktop()\"\n (click)=\"toogle()\"> Admin </button> -->\n<!-- #endregion -->\n\n<!-- #region content or content with scrollbar-->\n<ng-template #contentNoScroll>\n <ng-content> </ng-content>\n</ng-template>\n\n<ng-template #content>\n <ng-scrollbar>\n <ng-container [ngTemplateOutlet]=\"contentNoScroll\"></ng-container>\n </ng-scrollbar>\n</ng-template>\n<!-- #endregion-->\n\n<!-- #region admin tabs -->\n<ng-template #adminTabs>\n <!-- #region admin tabs / header -->\n\n <div\n class=\"bg-white taon-header-admin overflow-hidden w-full flex flex-row align-items-center align-content-center justify-content-between\"\n [ngClass]=\"{\n 'block w-full':\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP,\n }\">\n <img\n class=\"p-2 flex\"\n style=\"height: 45px\"\n src=\"assets/assets-for/taon-ui/assets/shared/logo-header-admin-mode.png\" />\n\n <div class=\"flex flex-row\">\n <button\n style=\"width: 40px\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.NONE)\"\n class=\"\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.ICON)\"\n class=\"\">\n <mat-icon>minimize</mat-icon>\n </button>\n\n <button\n *ngIf=\"\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"\n taonAdminService.adminPanelMode.set(TaonAdminPanelMode.FULL_SCREEN)\n \"\n class=\"\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\"\n class=\"\">\n <mat-icon>close_fullscreen</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"taonAdminService.adminPanelMode() !== TaonAdminPanelMode.SIDE\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.SIDE)\"\n class=\"\">\n <mat-icon style=\"transform: rotate(180deg)\">login</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.POPUP &&\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\"\n class=\"\">\n <mat-icon>launch</mat-icon>\n </button>\n </div>\n </div>\n <!-- #endregion -->\n\n <div\n class=\"w-full flex flex-row align-items-center\"\n [ngClass]=\"{\n 'block w-full':\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP,\n }\">\n <div class=\"w-full\">\n <!-- (wheel)=\"scrollTabs($event)\" -->\n <mat-tab-group\n dynamicHeight\n [selectedIndex]=\"selectedIndex()\"\n (selectedIndexChange)=\"selectedIndex.set($event)\">\n <mat-tab label=\"Settings\">\n <section>\n <mat-card>\n <mat-card-header>\n <mat-card-subtitle>WEBSQL MODE</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <mat-checkbox\n [disabled]=\"!isWebSQLMode\"\n [ngModel]=\"taonAdminService.keepWebsqlDbDataAfterReload()\"\n (change)=\"\n taonAdminService.keepWebsqlDbDataAfterReload.set(\n $event.checked\n )\n \">\n Don't remove data when re-loading\n </mat-checkbox>\n </mat-card-content>\n </mat-card>\n </section>\n <br />\n <taon-db-admin />\n </mat-tab>\n\n @for (\n additonalTab of taonAdminService.additionalTabs();\n track additonalTab.name\n ) {\n <mat-tab [label]=\"additonalTab.name\">\n <section>\n @if (isLink(additonalTab.templateOrIframeLink)) {\n <iframe\n class=\"block w-full\"\n [src]=\"additonalTab.templateOrIframeLink\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n } @else {\n <div class=\"block w-full\">\n <ng-container\n *ngTemplateOutlet=\"\n additonalTab.templateOrIframeLink\n \"></ng-container>\n </div>\n }\n </section>\n <br />\n <taon-db-admin />\n </mat-tab>\n }\n </mat-tab-group>\n </div>\n </div>\n</ng-template>\n<!-- #endregion -->\n\n<!-- #region small/mobile draggable popup windows -->\n<div\n class=\"draggable-popup-mode-window\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n cdkDrag\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"moved($event)\">\n <ng-scrollbar>\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n </ng-scrollbar>\n</div>\n<!-- #endregion -->\n\n<!-- #region fullscreen draggable popup window -->\n<div\n class=\"draggable-popup-mode-window-full\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.FULL_SCREEN &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n cdkDrag\n [cdkDragFreeDragPosition]=\"dragPositionZero\">\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n</div>\n<!-- #endregion -->\n\n<!-- #region content in side mode -->\n<!-- <mat-drawer-container (backdropClick)=\"opened = false\" -->\n<!-- [style.height.px]=\"height\" -->\n<mat-drawer-container\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.SIDE &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n class=\"example-container h-screen\"\n style=\"background-color: transparent\"\n [hasBackdrop]=\"false\">\n <mat-drawer\n #drawer\n style=\"width: 450px\"\n [opened]=\"true\"\n [mode]=\"'side'\">\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n </mat-drawer>\n <mat-drawer-content style=\"overflow: hidden\">\n <ng-container\n [ngTemplateOutlet]=\"\n scrollableEnabled ? content : contentNoScroll\n \"></ng-container>\n </mat-drawer-content>\n</mat-drawer-container>\n<!-- #endregion -->\n\n<!-- #region content in any other mode than side side mode -->\n<div\n [style.height.px]=\"height\"\n *ngIf=\"\n !(\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.SIDE &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe &&\n !reloading()\n )\n \"\n style=\"width: 100%; display: block\"\n class=\"content\">\n <ng-container\n [ngTemplateOutlet]=\"\n scrollableEnabled ? content : contentNoScroll\n \"></ng-container>\n</div>\n<!-- #endregion -->\n", styles: ["section{display:block;padding:15px}section>*{margin-top:0!important;margin-bottom:10px!important}section>*:last-child{margin-bottom:0!important}:host{display:block}.admin-show-button{position:fixed;bottom:100px;left:-15px;z-index:2147483647;transform:rotate(90deg);border:0px;color:#fff;background:gray;opacity:.1;cursor:pointer}.admin-show-button:hover{opacity:1}.taon-ui-super-admin-mode{font-family:JosefinSans-Bold;text-align:right;margin-right:10px}mat-drawer{margin:0;background-color:#dcdcdc!important}.draggable-popup-mode-window{width:600px;height:500px;border:solid 1px #ccc;color:#000000de;cursor:move;justify-content:center;align-items:center;background:#fff;border-radius:4px;position:fixed;z-index:105;background-color:#dcdcdc!important;transition:box-shadow .2s cubic-bezier(0,0,.2,1);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.draggable-popup-mode-window:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.draggable-popup-mode-window-full{width:100%;height:100%;overflow:scroll;color:#000000de;justify-content:center;align-items:center;background:#fff;border-radius:4px;position:fixed;z-index:105;background-color:#dcdcdc!important}.fab-button{position:fixed;right:110px;bottom:100px;z-index:10;background-color:#dcdcdc;color:#8f8f8f}.full-tabs{padding:10px}.mat-drawer-container-full-screen{background-color:red}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: StaticColumnsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: NgScrollbarModule }, { kind: "component", type: i3.NgScrollbar, selector: "ng-scrollbar:not([externalViewport]), [ngScrollbar]", exportAs: ["ngScrollbar"] }, { kind: "ngmodule", type: TaonProgressBarModule }, { kind: "ngmodule", type: TaonNotificationsModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i4.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i4.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i4.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i7.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i7.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i7.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i7.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i8.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass", "id"], exportAs: ["matTab"] }, { kind: "component", type: i3$2.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "mat-align-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor", "aria-label", "aria-labelledby"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DragDropModule }, { kind: "directive", type: i10.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: "component", type:
979
- // TaonDbAdminComponent,
980
- TaonSessionPasscodeComponent, selector: "taon-session-passcode", inputs: ["passcode", "message"] }] }); }
314
+ onMouseUp() {
315
+ this.endPress(false);
316
+ }
317
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLongPress, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
318
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.9", type: TaonLongPress, isStandalone: true, selector: "[taonLongPress]", inputs: { pressDuration: "pressDuration" }, outputs: { onLongPress: "onLongPress", onLongPressing: "onLongPressing", onLongPressEnd: "onLongPressEnd" }, host: { listeners: { "mousedown": "onMouseDown($event)", "mousemove": "onMouseMove($event)", "mouseup": "onMouseUp()" }, properties: { "class.press": "this.press", "class.longpress": "this.longPress" } }, ngImport: i0 }); }
981
319
  }
982
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonAdminModeConfigurationComponent, decorators: [{
983
- type: Component,
984
- args: [{ selector: 'taon-admin-mode-configuration', imports: [
985
- CommonModule,
986
- StaticColumnsModule,
987
- FormsModule,
988
- NgScrollbarModule,
989
- TaonProgressBarModule,
990
- TaonNotificationsModule,
991
- MatSidenavModule,
992
- MatButtonModule,
993
- MatIconModule,
994
- MatCardModule,
995
- MatCheckboxModule,
996
- MatInputModule,
997
- MatTabsModule,
998
- ReactiveFormsModule,
999
- DragDropModule,
1000
- // TaonDbAdminComponent,
1001
- TaonSessionPasscodeComponent,
1002
- ], template: "<!-- #region basic global components -->\n<taon-session-passcode\n *ngIf=\"showPasscode\"\n [passcode]=\"passcode\"\n [message]=\"message\" />\n<!-- <taon-progress-bar [taonAdminService.isDesktop()]=\"taonAdminService.isDesktop()\"></taon-progress-bar> -->\n<!-- <taon-notifications></taon-notifications> -->\n<button\n mat-fab\n class=\"fab-button\"\n color=\"accent\"\n aria-label=\"Taon Admin Mode\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.ICON &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe\n \"\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\">\n <mat-icon>build</mat-icon>\n</button>\n<!-- #endregion -->\n\n<!-- #region small hidden button -->\n<!-- <button class=\"admin-show-button\"\n *ngIf=\"!taonAdminService.draggablePopupMode && taonAdminService.isDesktop()\"\n (click)=\"toogle()\"> Admin </button> -->\n<!-- #endregion -->\n\n<!-- #region content or content with scrollbar-->\n<ng-template #contentNoScroll>\n <ng-content> </ng-content>\n</ng-template>\n\n<ng-template #content>\n <ng-scrollbar>\n <ng-container [ngTemplateOutlet]=\"contentNoScroll\"></ng-container>\n </ng-scrollbar>\n</ng-template>\n<!-- #endregion-->\n\n<!-- #region admin tabs -->\n<ng-template #adminTabs>\n <!-- #region admin tabs / header -->\n\n <div\n class=\"bg-white taon-header-admin overflow-hidden w-full flex flex-row align-items-center align-content-center justify-content-between\"\n [ngClass]=\"{\n 'block w-full':\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP,\n }\">\n <img\n class=\"p-2 flex\"\n style=\"height: 45px\"\n src=\"assets/assets-for/taon-ui/assets/shared/logo-header-admin-mode.png\" />\n\n <div class=\"flex flex-row\">\n <button\n style=\"width: 40px\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.NONE)\"\n class=\"\">\n <mat-icon>close</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.ICON)\"\n class=\"\">\n <mat-icon>minimize</mat-icon>\n </button>\n\n <button\n *ngIf=\"\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"\n taonAdminService.adminPanelMode.set(TaonAdminPanelMode.FULL_SCREEN)\n \"\n class=\"\">\n <mat-icon>fullscreen</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\"\n class=\"\">\n <mat-icon>close_fullscreen</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"taonAdminService.adminPanelMode() !== TaonAdminPanelMode.SIDE\"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.SIDE)\"\n class=\"\">\n <mat-icon style=\"transform: rotate(180deg)\">login</mat-icon>\n </button>\n\n <button\n style=\"width: 40px\"\n *ngIf=\"\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.POPUP &&\n taonAdminService.adminPanelMode() !== TaonAdminPanelMode.FULL_SCREEN\n \"\n mat-icon-button\n (click)=\"taonAdminService.adminPanelMode.set(TaonAdminPanelMode.POPUP)\"\n class=\"\">\n <mat-icon>launch</mat-icon>\n </button>\n </div>\n </div>\n <!-- #endregion -->\n\n <div\n class=\"w-full flex flex-row align-items-center\"\n [ngClass]=\"{\n 'block w-full':\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP,\n }\">\n <div class=\"w-full\">\n <!-- (wheel)=\"scrollTabs($event)\" -->\n <mat-tab-group\n dynamicHeight\n [selectedIndex]=\"selectedIndex()\"\n (selectedIndexChange)=\"selectedIndex.set($event)\">\n <mat-tab label=\"Settings\">\n <section>\n <mat-card>\n <mat-card-header>\n <mat-card-subtitle>WEBSQL MODE</mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <mat-checkbox\n [disabled]=\"!isWebSQLMode\"\n [ngModel]=\"taonAdminService.keepWebsqlDbDataAfterReload()\"\n (change)=\"\n taonAdminService.keepWebsqlDbDataAfterReload.set(\n $event.checked\n )\n \">\n Don't remove data when re-loading\n </mat-checkbox>\n </mat-card-content>\n </mat-card>\n </section>\n <br />\n <taon-db-admin />\n </mat-tab>\n\n @for (\n additonalTab of taonAdminService.additionalTabs();\n track additonalTab.name\n ) {\n <mat-tab [label]=\"additonalTab.name\">\n <section>\n @if (isLink(additonalTab.templateOrIframeLink)) {\n <iframe\n class=\"block w-full\"\n [src]=\"additonalTab.templateOrIframeLink\"\n frameborder=\"0\"\n allowfullscreen>\n </iframe>\n } @else {\n <div class=\"block w-full\">\n <ng-container\n *ngTemplateOutlet=\"\n additonalTab.templateOrIframeLink\n \"></ng-container>\n </div>\n }\n </section>\n <br />\n <taon-db-admin />\n </mat-tab>\n }\n </mat-tab-group>\n </div>\n </div>\n</ng-template>\n<!-- #endregion -->\n\n<!-- #region small/mobile draggable popup windows -->\n<div\n class=\"draggable-popup-mode-window\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.POPUP &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n cdkDrag\n [cdkDragFreeDragPosition]=\"dragPosition\"\n (cdkDragEnded)=\"moved($event)\">\n <ng-scrollbar>\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n </ng-scrollbar>\n</div>\n<!-- #endregion -->\n\n<!-- #region fullscreen draggable popup window -->\n<div\n class=\"draggable-popup-mode-window-full\"\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.FULL_SCREEN &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n cdkDrag\n [cdkDragFreeDragPosition]=\"dragPositionZero\">\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n</div>\n<!-- #endregion -->\n\n<!-- #region content in side mode -->\n<!-- <mat-drawer-container (backdropClick)=\"opened = false\" -->\n<!-- [style.height.px]=\"height\" -->\n<mat-drawer-container\n *ngIf=\"\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.SIDE &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe &&\n !reloading()\n \"\n class=\"example-container h-screen\"\n style=\"background-color: transparent\"\n [hasBackdrop]=\"false\">\n <mat-drawer\n #drawer\n style=\"width: 450px\"\n [opened]=\"true\"\n [mode]=\"'side'\">\n <ng-container [ngTemplateOutlet]=\"adminTabs\"></ng-container>\n </mat-drawer>\n <mat-drawer-content style=\"overflow: hidden\">\n <ng-container\n [ngTemplateOutlet]=\"\n scrollableEnabled ? content : contentNoScroll\n \"></ng-container>\n </mat-drawer-content>\n</mat-drawer-container>\n<!-- #endregion -->\n\n<!-- #region content in any other mode than side side mode -->\n<div\n [style.height.px]=\"height\"\n *ngIf=\"\n !(\n taonAdminService.adminPanelMode() === TaonAdminPanelMode.SIDE &&\n taonAdminService.isDesktop() &&\n !taonAdminService.isIframe &&\n !reloading()\n )\n \"\n style=\"width: 100%; display: block\"\n class=\"content\">\n <ng-container\n [ngTemplateOutlet]=\"\n scrollableEnabled ? content : contentNoScroll\n \"></ng-container>\n</div>\n<!-- #endregion -->\n", styles: ["section{display:block;padding:15px}section>*{margin-top:0!important;margin-bottom:10px!important}section>*:last-child{margin-bottom:0!important}:host{display:block}.admin-show-button{position:fixed;bottom:100px;left:-15px;z-index:2147483647;transform:rotate(90deg);border:0px;color:#fff;background:gray;opacity:.1;cursor:pointer}.admin-show-button:hover{opacity:1}.taon-ui-super-admin-mode{font-family:JosefinSans-Bold;text-align:right;margin-right:10px}mat-drawer{margin:0;background-color:#dcdcdc!important}.draggable-popup-mode-window{width:600px;height:500px;border:solid 1px #ccc;color:#000000de;cursor:move;justify-content:center;align-items:center;background:#fff;border-radius:4px;position:fixed;z-index:105;background-color:#dcdcdc!important;transition:box-shadow .2s cubic-bezier(0,0,.2,1);box-shadow:0 3px 1px -2px #0003,0 2px 2px #00000024,0 1px 5px #0000001f}.draggable-popup-mode-window:active{box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.draggable-popup-mode-window-full{width:100%;height:100%;overflow:scroll;color:#000000de;justify-content:center;align-items:center;background:#fff;border-radius:4px;position:fixed;z-index:105;background-color:#dcdcdc!important}.fab-button{position:fixed;right:110px;bottom:100px;z-index:10;background-color:#dcdcdc;color:#8f8f8f}.full-tabs{padding:10px}.mat-drawer-container-full-screen{background-color:red}\n"] }]
1003
- }], propDecorators: { scrollableEnabled: [{
1004
- type: Input
1005
- }], showPasscode: [{
1006
- type: Input
1007
- }], passcode: [{
1008
- type: Input
1009
- }], message: [{
320
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLongPress, decorators: [{
321
+ type: Directive,
322
+ args: [{
323
+ selector: '[taonLongPress]',
324
+ standalone: true,
325
+ }]
326
+ }], propDecorators: { pressDuration: [{
1010
327
  type: Input
1011
- }], onResize: [{
328
+ }], onLongPress: [{
329
+ type: Output
330
+ }], onLongPressing: [{
331
+ type: Output
332
+ }], onLongPressEnd: [{
333
+ type: Output
334
+ }], press: [{
335
+ type: HostBinding,
336
+ args: ['class.press']
337
+ }], longPress: [{
338
+ type: HostBinding,
339
+ args: ['class.longpress']
340
+ }], onMouseDown: [{
341
+ type: HostListener,
342
+ args: ['mousedown', ['$event']]
343
+ }], onMouseMove: [{
344
+ type: HostListener,
345
+ args: ['mousemove', ['$event']]
346
+ }], onMouseUp: [{
1012
347
  type: HostListener,
1013
- args: ['window:resize', ['$event']]
348
+ args: ['mouseup']
1014
349
  }] } });
1015
350
 
351
+ var ViewMode;
352
+ (function (ViewMode) {
353
+ ViewMode["Add"] = "Add";
354
+ ViewMode["Edit"] = "Edit";
355
+ ViewMode["Preview"] = "Preview";
356
+ })(ViewMode || (ViewMode = {}));
357
+
1016
358
  class GoogleAuthService {
1017
359
  constructor(zone) {
1018
360
  this.zone = zone;
@@ -1279,7 +621,7 @@ class AuthDialogComponent {
1279
621
  });
1280
622
  }
1281
623
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: AuthDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: AuthDialogComponent, isStandalone: true, selector: "app-auth-dialog", inputs: { googleClientId: "googleClientId", microsoftClientId: "microsoftClientId" }, viewQueries: [{ propertyName: "emailLoginBtn", first: true, predicate: ["emailLoginBtn"], descendants: true, static: true }, { propertyName: "googleBtn", first: true, predicate: ["googleBtn"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"auth-dialog p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login or Register\n </h4>\n\n <div\n class=\"w-full pt-3\"\n #emailLoginBtn>\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"loginByEmail()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label *ngIf=\"!diableLoginByEmail\">Email</mat-label>\n\n <input\n matInput\n formControlName=\"email\"\n class=\"pl-1\"\n type=\"email\"\n [placeholder]=\"\n diableLoginByEmail ? t.gettext('Login by email (disabled)') : ''\n \" />\n\n <button\n mat-icon-button\n [disabled]=\"diableLoginByEmail\"\n matSuffix\n color=\"primary\">\n <mat-icon>mail</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('pattern') && form.get('email')?.touched\n \"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n Please enter a valid email address\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('required') &&\n form.get('email')?.touched\n \">\n {{ t.gettext('Email is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n\n <div class=\"divider\">\n <span translate [translate-t]=\"t\">or</span>\n </div>\n\n <!-- GOOGLE BUTTON -->\n <div\n #googleBtn\n class=\"google-container\">\n <span\n *ngIf=\"!googleButtonLoaded\"\n class=\"text-300 p-2\"\n translate\n [translate-t]=\"t\" [translate-t]=\"t\">loading google button..</span\n >\n <mat-progress-bar\n *ngIf=\"!googleButtonLoaded\"\n mode=\"indeterminate\"\n class=\"auth-progress\" />\n </div>\n\n <!-- MICROSOFT BUTTON -->\n <div\n *ngIf=\"microsoftClientId\"\n #microsoftBtn\n class=\"microsoft-container\">\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"w-full microsoft-btn\"\n (click)=\"loginWithMicrosoft()\">\n <mat-icon class=\"mr-2\">login</mat-icon>\n {{ t.gettext('Continue with Microsoft') }}\n </button>\n </div>\n </div>\n\n <br />\n\n <div class=\"flex justify-content-end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('Cancel') }}\n </button>\n </div>\n</div>\n", styles: [".auth-dialog{width:100%}.google-container{width:100%;height:50px;border-color:#9ca3af!important}.microsoft-container{width:100%}.microsoft-btn{height:40px;border-radius:4px!important;border-color:#9ca3af!important;background-color:#fff}:host::ng-deep .email-field .mdc-notched-outline__trailing,:host::ng-deep .email-field .mdc-notched-outline__leading,:host::ng-deep .email-field .mdc-notched-outline__notch{border-color:#9ca3af!important}:host ::ng-deep .auth-progress .mdc-linear-progress__bar-inner{border-color:#9ca3af!important}.divider{display:flex;align-items:center;text-align:center;width:100%;margin:1rem 0}.divider:before,.divider:after{content:\"\";flex:1;border-bottom:1px solid #ccc}.divider span{padding:0 10px;color:#666;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.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: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { 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: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MtxLoaderModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2$1.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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
624
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: AuthDialogComponent, isStandalone: true, selector: "app-auth-dialog", inputs: { googleClientId: "googleClientId", microsoftClientId: "microsoftClientId" }, viewQueries: [{ propertyName: "emailLoginBtn", first: true, predicate: ["emailLoginBtn"], descendants: true, static: true }, { propertyName: "googleBtn", first: true, predicate: ["googleBtn"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"auth-dialog p-5\">\n <h4\n class=\"mb-3\"\n translate [translate-t]=\"t\">\n Login or Register\n </h4>\n\n <div\n class=\"w-full pt-3\"\n #emailLoginBtn>\n <form\n [formGroup]=\"form\"\n (ngSubmit)=\"loginByEmail()\"\n class=\"w-full\">\n <mat-form-field\n appearance=\"outline\"\n class=\"w-full email-field\">\n <mat-label *ngIf=\"!diableLoginByEmail\">Email</mat-label>\n\n <input\n matInput\n formControlName=\"email\"\n class=\"pl-1\"\n type=\"email\"\n [placeholder]=\"\n diableLoginByEmail ? t.gettext('Login by email (disabled)') : ''\n \" />\n\n <button\n mat-icon-button\n [disabled]=\"diableLoginByEmail\"\n matSuffix\n color=\"primary\">\n <mat-icon>mail</mat-icon>\n </button>\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('pattern') && form.get('email')?.touched\n \"\n translate [translate-t]=\"t\" [translate-t]=\"t\">\n Please enter a valid email address\n </mat-error>\n\n <mat-error\n *ngIf=\"\n form.get('email')?.hasError('required') &&\n form.get('email')?.touched\n \">\n {{ t.gettext('Email is') }} <strong translate [translate-t]=\"t\">required</strong>\n </mat-error>\n </mat-form-field>\n </form>\n\n <div class=\"divider\">\n <span translate [translate-t]=\"t\">or</span>\n </div>\n\n <!-- GOOGLE BUTTON -->\n <div\n #googleBtn\n class=\"google-container\">\n <span\n *ngIf=\"!googleButtonLoaded\"\n class=\"text-300 p-2\"\n translate\n [translate-t]=\"t\" [translate-t]=\"t\">loading google button..</span\n >\n <mat-progress-bar\n *ngIf=\"!googleButtonLoaded\"\n mode=\"indeterminate\"\n class=\"auth-progress\" />\n </div>\n\n <!-- MICROSOFT BUTTON -->\n <div\n *ngIf=\"microsoftClientId\"\n #microsoftBtn\n class=\"microsoft-container\">\n <button\n mat-stroked-button\n color=\"primary\"\n class=\"w-full microsoft-btn\"\n (click)=\"loginWithMicrosoft()\">\n <mat-icon class=\"mr-2\">login</mat-icon>\n {{ t.gettext('Continue with Microsoft') }}\n </button>\n </div>\n </div>\n\n <br />\n\n <div class=\"flex justify-content-end\">\n <button\n mat-button\n mat-dialog-close>\n {{ t.gettext('Cancel') }}\n </button>\n </div>\n</div>\n", styles: [".auth-dialog{width:100%}.google-container{width:100%;height:50px;border-color:#9ca3af!important}.microsoft-container{width:100%}.microsoft-btn{height:40px;border-radius:4px!important;border-color:#9ca3af!important;background-color:#fff}:host::ng-deep .email-field .mdc-notched-outline__trailing,:host::ng-deep .email-field .mdc-notched-outline__leading,:host::ng-deep .email-field .mdc-notched-outline__notch{border-color:#9ca3af!important}:host ::ng-deep .auth-progress .mdc-linear-progress__bar-inner{border-color:#9ca3af!important}.divider{display:flex;align-items:center;text-align:center;width:100%;margin:1rem 0}.divider:before,.divider:after{content:\"\";flex:1;border-bottom:1px solid #ccc}.divider span{padding:0 10px;color:#666;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { 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: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { 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: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "ngmodule", type: MtxLoaderModule }, { kind: "ngmodule", type: ButtonModule }, { kind: "ngmodule", type: InputTextModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1283
625
  }
1284
626
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: AuthDialogComponent, decorators: [{
1285
627
  type: Component,
@@ -1349,7 +691,7 @@ class AuthButtonComponent {
1349
691
  : true;
1350
692
  }
1351
693
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: AuthButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1352
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: AuthButtonComponent, isStandalone: true, selector: "taon-auth-button", inputs: { linkToDashboard: "linkToDashboard", googleClientId: "googleClientId", microsoftClientId: "microsoftClientId", displayDashboardButton: "displayDashboardButton" }, ngImport: i0, template: "<div class=\"flex align-items-center gap-2\">\n <ng-container *ngIf=\"(session.isLoggedIn$ | async) === false; else loggedIn\">\n <button\n mat-button\n (click)=\"openLogin()\">\n Login\n </button>\n </ng-container>\n\n <ng-template #loggedIn>\n <button\n *ngIf=\"displayDashboardButton\"\n mat-button\n color=\"primary\"\n class=\"auth-btn\"\n (click)=\"goDashboard()\">\n <mat-icon>dashboard</mat-icon>\n Dashboard\n </button>\n\n <button\n mat-button\n class=\"ml-2\"\n (click)=\"logout()\">\n Logout ({{ (session.data$ | async)?.displayName }})\n </button>\n </ng-template>\n</div>\n", styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.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: ButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
694
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: AuthButtonComponent, isStandalone: true, selector: "taon-auth-button", inputs: { linkToDashboard: "linkToDashboard", googleClientId: "googleClientId", microsoftClientId: "microsoftClientId", displayDashboardButton: "displayDashboardButton" }, ngImport: i0, template: "<div class=\"flex align-items-center gap-2\">\n <ng-container *ngIf=\"(session.isLoggedIn$ | async) === false; else loggedIn\">\n <button\n mat-button\n (click)=\"openLogin()\">\n Login\n </button>\n </ng-container>\n\n <ng-template #loggedIn>\n <button\n *ngIf=\"displayDashboardButton\"\n mat-button\n color=\"primary\"\n class=\"auth-btn\"\n (click)=\"goDashboard()\">\n <mat-icon>dashboard</mat-icon>\n Dashboard\n </button>\n\n <button\n mat-button\n class=\"ml-2\"\n (click)=\"logout()\">\n Logout ({{ (session.data$ | async)?.displayName }})\n </button>\n </ng-template>\n</div>\n", styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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: ButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] }); }
1353
695
  }
1354
696
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: AuthButtonComponent, decorators: [{
1355
697
  type: Component,
@@ -1752,21 +1094,176 @@ class TaonLangSelectorComponent {
1752
1094
  const select = event.target;
1753
1095
  await this.translateService.changeGlobalLang(select.value);
1754
1096
  }
1755
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLangSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1756
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonLangSelectorComponent, isStandalone: true, selector: "taon-lang-selector", ngImport: i0, template: "<label class=\"taon-lang-selector\">\n <span class=\"taon-lang-selector__label\">\n {{\n t.gettext('Select Language') +\n ' ' +\n ((isDisabled$ | async) ? t.gettext('(disabled)') : '')\n }}\n </span>\n\n <!-- currentLang = {{ currentLang | json }} -->\n\n <select\n class=\"taon-lang-selector__select\"\n [value]=\"currentLang\"\n [disabled]=\"isDisabled$ | async\"\n (change)=\"changeLanguage($event)\">\n @for (lang of availableLangs$ | async; track lang.code) {\n <option\n [value]=\"lang.code\"\n [selected]=\"lang.code === currentLang\">\n {{ lang.label }}\n </option>\n }\n </select>\n</label>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1097
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLangSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1098
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonLangSelectorComponent, isStandalone: true, selector: "taon-lang-selector", ngImport: i0, template: "<label class=\"taon-lang-selector\">\n <span class=\"taon-lang-selector__label\">\n {{\n t.gettext('Select Language') +\n ' ' +\n ((isDisabled$ | async) ? t.gettext('(disabled)') : '')\n }}\n </span>\n\n <!-- currentLang = {{ currentLang | json }} -->\n\n <select\n class=\"taon-lang-selector__select\"\n [value]=\"currentLang\"\n [disabled]=\"isDisabled$ | async\"\n (change)=\"changeLanguage($event)\">\n @for (lang of availableLangs$ | async; track lang.code) {\n <option\n [value]=\"lang.code\"\n [selected]=\"lang.code === currentLang\">\n {{ lang.label }}\n </option>\n }\n </select>\n</label>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1099
+ }
1100
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLangSelectorComponent, decorators: [{
1101
+ type: Component,
1102
+ args: [{ selector: 'taon-lang-selector', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, TranslateDirective, JsonPipe], template: "<label class=\"taon-lang-selector\">\n <span class=\"taon-lang-selector__label\">\n {{\n t.gettext('Select Language') +\n ' ' +\n ((isDisabled$ | async) ? t.gettext('(disabled)') : '')\n }}\n </span>\n\n <!-- currentLang = {{ currentLang | json }} -->\n\n <select\n class=\"taon-lang-selector__select\"\n [value]=\"currentLang\"\n [disabled]=\"isDisabled$ | async\"\n (change)=\"changeLanguage($event)\">\n @for (lang of availableLangs$ | async; track lang.code) {\n <option\n [value]=\"lang.code\"\n [selected]=\"lang.code === currentLang\">\n {{ lang.label }}\n </option>\n }\n </select>\n</label>\n", styles: [":host{display:block}\n"] }]
1103
+ }], ctorParameters: () => [] });
1104
+
1105
+ class TaonNotFoundComponent {
1106
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonNotFoundComponent, isStandalone: true, selector: "taon-not-found", ngImport: i0, template: "<div class=\"flex align-items-center justify-content-center min-h-screen px-3\">\n <div\n class=\"text-center surface-card p-5 border-round shadow-2 w-full\"\n style=\"max-width: 600px\">\n <h1 class=\"text-6xl font-bold mb-3 text-red-500\">404</h1>\n\n <h2 class=\"text-2xl mb-3\">Page not found</h2>\n\n <p class=\"text-color-secondary mb-4\">\n The page you are looking for does not exist or has been moved.\n </p>\n\n <a\n routerLink=\"/\"\n class=\"p-button p-component no-underline\">\n <span class=\"p-button-label text-primary no-underline\">Go to Home</span>\n </a>\n\n <br />\n <br />\n <br />\n\n <h4\n class=\"flex flex-row align-content-center justify-content-center align-items-center\">\n <img\n height=\"20px\"\n src=\"assets/assets-for/taon-ui/assets/shared/taon-small-logo-for-not-found.png\"\n alt=\"\" />\n\n <span class=\"p-2 text-gray-200\"\n >Powered by\n <a\n class=\"text-gray-200\"\n href=\"https://taon.dev\">\n Taon.Dev\n </a></span\n >\n </h4>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1108
+ }
1109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotFoundComponent, decorators: [{
1110
+ type: Component,
1111
+ args: [{ selector: 'taon-not-found', standalone: true, imports: [RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex align-items-center justify-content-center min-h-screen px-3\">\n <div\n class=\"text-center surface-card p-5 border-round shadow-2 w-full\"\n style=\"max-width: 600px\">\n <h1 class=\"text-6xl font-bold mb-3 text-red-500\">404</h1>\n\n <h2 class=\"text-2xl mb-3\">Page not found</h2>\n\n <p class=\"text-color-secondary mb-4\">\n The page you are looking for does not exist or has been moved.\n </p>\n\n <a\n routerLink=\"/\"\n class=\"p-button p-component no-underline\">\n <span class=\"p-button-label text-primary no-underline\">Go to Home</span>\n </a>\n\n <br />\n <br />\n <br />\n\n <h4\n class=\"flex flex-row align-content-center justify-content-center align-items-center\">\n <img\n height=\"20px\"\n src=\"assets/assets-for/taon-ui/assets/shared/taon-small-logo-for-not-found.png\"\n alt=\"\" />\n\n <span class=\"p-2 text-gray-200\"\n >Powered by\n <a\n class=\"text-gray-200\"\n href=\"https://taon.dev\">\n Taon.Dev\n </a></span\n >\n </h4>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
1112
+ }] });
1113
+
1114
+ //#region imports
1115
+ //#endregion
1116
+ // import {
1117
+ // NgProgressConfig,
1118
+ // NgProgressModule,
1119
+ // NgProgressRef,
1120
+ // } from 'ngx-progressbar';
1121
+ // import { Models } from 'tnp-models';
1122
+ // import type { TaonAdmin } from '../taon-admin-mode-configuration';
1123
+ const calculatePercentage = (loaded, total) => Math.floor(loaded * 1.0) / total;
1124
+ class TaonProgressBarComponent {
1125
+ // options: NgProgressConfig = _.merge(
1126
+ // {
1127
+ // min: 8,
1128
+ // max: 100,
1129
+ // speed: 200,
1130
+ // trickleSpeed: 300,
1131
+ // debounceTime: 0,
1132
+ // ease: 'linear',
1133
+ // spinnerPosition: 'right',
1134
+ // direction: 'ltr+',
1135
+ // color: 'gray',
1136
+ // fixed: true,
1137
+ // meteor: true,
1138
+ // spinner: true,
1139
+ // thick: false,
1140
+ // },
1141
+ // _.get(ENV, `plugins['ngx-progressbar']`),
1142
+ // );
1143
+ constructor() {
1144
+ this.handlers = [];
1145
+ }
1146
+ ngOnInit() { }
1147
+ ngOnDestroy() {
1148
+ this.handlers.forEach(h => h.unsubscribe());
1149
+ }
1150
+ ngAfterViewInit() {
1151
+ // this.labProgress.set(20)
1152
+ this.loadProgressBar(void 0, axios);
1153
+ }
1154
+ loadProgressBar(config, instance = axios) {
1155
+ // let requestsCounter = 0;
1156
+ // const setupStartProgress = () => {
1157
+ // instance.interceptors.request.use(config => {
1158
+ // requestsCounter++;
1159
+ // this.labProgress.start();
1160
+ // return config;
1161
+ // });
1162
+ // };
1163
+ // const setupUpdateProgress = () => {
1164
+ // const update = e => {
1165
+ // // NProgress.inc(calculatePercentage(e.loaded, e.total))
1166
+ // const percentage = calculatePercentage(e.loaded, e.total) * 100;
1167
+ // // console.log(`loaded: ${e.loaded}, total: ${e.total} , pecent: ${percentage}`)
1168
+ // this.labProgress.inc(percentage);
1169
+ // };
1170
+ // instance.defaults.onDownloadProgress = update;
1171
+ // instance.defaults.onUploadProgress = update;
1172
+ // };
1173
+ // const setupStopProgress = () => {
1174
+ // const responseFunc = response => {
1175
+ // if (--requestsCounter === 0) {
1176
+ // this.labProgress.complete();
1177
+ // // NProgress.done()
1178
+ // }
1179
+ // return response;
1180
+ // };
1181
+ // const errorFunc = error => {
1182
+ // if (--requestsCounter === 0) {
1183
+ // this.labProgress.complete();
1184
+ // // NProgress.done()
1185
+ // }
1186
+ // return Promise.reject(error);
1187
+ // };
1188
+ // instance.interceptors.response.use(responseFunc, errorFunc);
1189
+ // };
1190
+ // setupStartProgress();
1191
+ // setupUpdateProgress();
1192
+ // setupStopProgress();
1193
+ /* */
1194
+ /* */
1195
+ /* */
1196
+ /* */
1197
+ /* */
1198
+ /* */
1199
+ /* */
1200
+ /* */
1201
+ /* */
1202
+ /* */
1203
+ /* */
1204
+ /* */
1205
+ /* */
1206
+ /* */
1207
+ /* */
1208
+ /* */
1209
+ /* */
1210
+ /* */
1211
+ /* */
1212
+ /* */
1213
+ /* */
1214
+ /* */
1215
+ /* */
1216
+ /* */
1217
+ /* */
1218
+ /* */
1219
+ /* */
1220
+ /* */
1221
+ /* */
1222
+ /* */
1223
+ /* */
1224
+ /* */
1225
+ /* */
1226
+ /* */
1227
+ /* */
1228
+ /* */
1229
+ /* */
1230
+ /* */
1231
+ /* */
1232
+ /* */
1233
+ /* */
1234
+ /* */
1235
+ }
1236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1237
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonProgressBarComponent, isStandalone: false, selector: "taon-progress-bar", inputs: { isDesktop: "isDesktop" }, viewQueries: [{ propertyName: "labProgress", first: true, predicate: ["labProgress"], descendants: true }], ngImport: i0, template: "<!-- <ng-progress\n #labProgress\n id=\"lab\"\n [meteor]=\"options.meteor\"\n [color]=\"options.color\"\n [min]=\"options.min\"\n [max]=\"options.max\"\n [speed]=\"options.speed\"\n [spinner]=\"\n options.spinner &&\n (!admin.adminPanelIsOpen ||\n (admin.adminPanelIsOpen && (admin.draggablePopupMode || !isDesktop)))\n \"\n [spinnerPosition]=\"options.spinnerPosition\"\n [direction]=\"options.direction\"\n [trickleSpeed]=\"options.trickleSpeed\"\n [debounceTime]=\"options.debounceTime\"\n [ease]=\"options.ease\"\n [thick]=\"options.thick\"\n [fixed]=\"options.fixed\">\n</ng-progress>\n(started)=\"onProgressStarted()\"\n (completed)=\"onProgressCompleted()\" -->\n", styles: [":host{display:block}\n"] }); }
1757
1238
  }
1758
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonLangSelectorComponent, decorators: [{
1239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarComponent, decorators: [{
1759
1240
  type: Component,
1760
- args: [{ selector: 'taon-lang-selector', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, TranslateDirective, JsonPipe], template: "<label class=\"taon-lang-selector\">\n <span class=\"taon-lang-selector__label\">\n {{\n t.gettext('Select Language') +\n ' ' +\n ((isDisabled$ | async) ? t.gettext('(disabled)') : '')\n }}\n </span>\n\n <!-- currentLang = {{ currentLang | json }} -->\n\n <select\n class=\"taon-lang-selector__select\"\n [value]=\"currentLang\"\n [disabled]=\"isDisabled$ | async\"\n (change)=\"changeLanguage($event)\">\n @for (lang of availableLangs$ | async; track lang.code) {\n <option\n [value]=\"lang.code\"\n [selected]=\"lang.code === currentLang\">\n {{ lang.label }}\n </option>\n }\n </select>\n</label>\n", styles: [":host{display:block}\n"] }]
1761
- }], ctorParameters: () => [] });
1241
+ args: [{ selector: 'taon-progress-bar', standalone: false, template: "<!-- <ng-progress\n #labProgress\n id=\"lab\"\n [meteor]=\"options.meteor\"\n [color]=\"options.color\"\n [min]=\"options.min\"\n [max]=\"options.max\"\n [speed]=\"options.speed\"\n [spinner]=\"\n options.spinner &&\n (!admin.adminPanelIsOpen ||\n (admin.adminPanelIsOpen && (admin.draggablePopupMode || !isDesktop)))\n \"\n [spinnerPosition]=\"options.spinnerPosition\"\n [direction]=\"options.direction\"\n [trickleSpeed]=\"options.trickleSpeed\"\n [debounceTime]=\"options.debounceTime\"\n [ease]=\"options.ease\"\n [thick]=\"options.thick\"\n [fixed]=\"options.fixed\">\n</ng-progress>\n(started)=\"onProgressStarted()\"\n (completed)=\"onProgressCompleted()\" -->\n", styles: [":host{display:block}\n"] }]
1242
+ }], ctorParameters: () => [], propDecorators: { labProgress: [{
1243
+ type: ViewChild,
1244
+ args: ['labProgress']
1245
+ }], isDesktop: [{
1246
+ type: Input
1247
+ }] } });
1762
1248
 
1763
- class TaonNotFoundComponent {
1764
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotFoundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1765
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonNotFoundComponent, isStandalone: true, selector: "taon-not-found", ngImport: i0, template: "<div class=\"flex align-items-center justify-content-center min-h-screen px-3\">\n <div\n class=\"text-center surface-card p-5 border-round shadow-2 w-full\"\n style=\"max-width: 600px\">\n <h1 class=\"text-6xl font-bold mb-3 text-red-500\">404</h1>\n\n <h2 class=\"text-2xl mb-3\">Page not found</h2>\n\n <p class=\"text-color-secondary mb-4\">\n The page you are looking for does not exist or has been moved.\n </p>\n\n <a\n routerLink=\"/\"\n class=\"p-button p-component no-underline\">\n <span class=\"p-button-label text-primary no-underline\">Go to Home</span>\n </a>\n\n <br />\n <br />\n <br />\n\n <h4\n class=\"flex flex-row align-content-center justify-content-center align-items-center\">\n <img\n height=\"20px\"\n src=\"assets/assets-for/taon-ui/assets/shared/taon-small-logo-for-not-found.png\"\n alt=\"\" />\n\n <span class=\"p-2 text-gray-200\"\n >Powered by\n <a\n class=\"text-gray-200\"\n href=\"https://taon.dev\">\n Taon.Dev\n </a></span\n >\n </h4>\n </div>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1249
+ //#region imports
1250
+ //#endregion
1251
+ // import { NgProgressConfig, NgProgressModule } from 'ngx-progressbar';
1252
+ class TaonProgressBarModule {
1253
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1254
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, declarations: [TaonProgressBarComponent], imports: [CommonModule], exports: [TaonProgressBarComponent] }); }
1255
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, imports: [CommonModule] }); }
1766
1256
  }
1767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonNotFoundComponent, decorators: [{
1768
- type: Component,
1769
- args: [{ selector: 'taon-not-found', standalone: true, imports: [RouterLink], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex align-items-center justify-content-center min-h-screen px-3\">\n <div\n class=\"text-center surface-card p-5 border-round shadow-2 w-full\"\n style=\"max-width: 600px\">\n <h1 class=\"text-6xl font-bold mb-3 text-red-500\">404</h1>\n\n <h2 class=\"text-2xl mb-3\">Page not found</h2>\n\n <p class=\"text-color-secondary mb-4\">\n The page you are looking for does not exist or has been moved.\n </p>\n\n <a\n routerLink=\"/\"\n class=\"p-button p-component no-underline\">\n <span class=\"p-button-label text-primary no-underline\">Go to Home</span>\n </a>\n\n <br />\n <br />\n <br />\n\n <h4\n class=\"flex flex-row align-content-center justify-content-center align-items-center\">\n <img\n height=\"20px\"\n src=\"assets/assets-for/taon-ui/assets/shared/taon-small-logo-for-not-found.png\"\n alt=\"\" />\n\n <span class=\"p-2 text-gray-200\"\n >Powered by\n <a\n class=\"text-gray-200\"\n href=\"https://taon.dev\">\n Taon.Dev\n </a></span\n >\n </h4>\n </div>\n</div>\n", styles: [":host{display:block}\n"] }]
1257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonProgressBarModule, decorators: [{
1258
+ type: NgModule,
1259
+ args: [{
1260
+ imports: [
1261
+ CommonModule,
1262
+ // NgProgressModule.withConfig({})
1263
+ ],
1264
+ declarations: [TaonProgressBarComponent],
1265
+ exports: [TaonProgressBarComponent],
1266
+ }]
1770
1267
  }] });
1771
1268
 
1772
1269
  class TaonRumbleComponent {
@@ -1829,6 +1326,101 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1829
1326
  type: Output
1830
1327
  }] } });
1831
1328
 
1329
+ //#region imports
1330
+ class TaonSessionPasscodeComponent {
1331
+ constructor(element, domSanitizer, cdr) {
1332
+ this.element = element;
1333
+ this.domSanitizer = domSanitizer;
1334
+ this.cdr = cdr;
1335
+ this.destroyRef = inject(DestroyRef);
1336
+ this.lastPasscode = TaonStor.inLocalstorage({
1337
+ defaultValue: '',
1338
+ keyOrPath: 'lastPasscode',
1339
+ }, TaonSessionPasscodeComponent);
1340
+ this.display = 'none';
1341
+ this.form = new FormGroup({
1342
+ passcode: new FormControl(),
1343
+ });
1344
+ }
1345
+ async ngOnInit() {
1346
+ if (!this.message) {
1347
+ this.message = `
1348
+ This website is only for testing purpose. Please type passcode bellow to see content.
1349
+
1350
+ `;
1351
+ }
1352
+ this.safeMessage = this.domSanitizer.bypassSecurityTrustHtml(this.message);
1353
+ await this.lastPasscode.ready();
1354
+ if (this.lastPasscode()?.toString() === this.passcode?.toString()) {
1355
+ this.hide();
1356
+ }
1357
+ else {
1358
+ this.show();
1359
+ this.focus();
1360
+ }
1361
+ this.cdr.markForCheck();
1362
+ interval(1000)
1363
+ .pipe(takeUntilDestroyed(this.destroyRef), tap(() => {
1364
+ this.focus();
1365
+ this.cdr.markForCheck();
1366
+ }))
1367
+ .subscribe();
1368
+ }
1369
+ submit({ passcode }) {
1370
+ if (this.isPasscodeOK(passcode || '')) {
1371
+ this.hide();
1372
+ }
1373
+ else {
1374
+ this.clear();
1375
+ }
1376
+ }
1377
+ isPasscodeOK(passcode) {
1378
+ this.lastPasscode.set(passcode.toString());
1379
+ return this.passcode.toString() === passcode;
1380
+ }
1381
+ ngAfterViewInit() { }
1382
+ focus() {
1383
+ this.element.nativeElement.querySelector('input')?.focus();
1384
+ }
1385
+ hide() {
1386
+ this.display = 'none';
1387
+ }
1388
+ show() {
1389
+ this.display = 'block';
1390
+ }
1391
+ clear() {
1392
+ this.form.controls.passcode.setValue('');
1393
+ }
1394
+ onKeyup(event) {
1395
+ if (this.isPasscodeOK(event.target.value || '')) {
1396
+ this.hide();
1397
+ return;
1398
+ }
1399
+ const key = event.keyCode || event.charCode;
1400
+ if (key === 8 || key === 46 || this.lastPasscode()?.length > 5) {
1401
+ this.clear();
1402
+ }
1403
+ }
1404
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSessionPasscodeComponent, deps: [{ token: i0.ElementRef, self: true }, { token: i1$1.DomSanitizer }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
1405
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonSessionPasscodeComponent, isStandalone: true, selector: "taon-session-passcode", inputs: { passcode: "passcode", message: "message" }, host: { properties: { "style.display": "this.display" } }, ngImport: i0, template: "<form\n [formGroup]=\"form\"\n content=\"notranslate\"\n autocomplete=\"off\"\n (click)=\"focus()\"\n (ngSubmit)=\"submit(form.value)\"\n class=\"flex flex-col items-center w-full h-full\">\n <div class=\"flex content-center w-full justify-center mt-8\">\n <p\n class=\"p-3 max-w-[400px] min-h-[100px]\"\n [innerHtml]=\"safeMessage\"></p>\n </div>\n\n <input\n type=\"password\"\n class=\"text-5xl md:text-8xl pointer-events-none\"\n #taonpasscode\n (keyup)=\"onKeyup($event)\"\n formControlName=\"passcode\" />\n</form>\n", styles: [":host{position:fixed;background-color:#9f9f9f57;z-index:2147483647;backdrop-filter:blur(50px);width:100%;height:100%;display:none}input{background:#fff;border-radius:6px;outline:0px;border:0px;color:gray;text-align:center;width:500px}\n"], dependencies: [{ kind: "ngmodule", type: PasswordModule }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: FormsModule }] }); }
1406
+ }
1407
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSessionPasscodeComponent, decorators: [{
1408
+ type: Component,
1409
+ args: [{ selector: 'taon-session-passcode', standalone: true, imports: [PasswordModule, CommonModule, ReactiveFormsModule, FormsModule], template: "<form\n [formGroup]=\"form\"\n content=\"notranslate\"\n autocomplete=\"off\"\n (click)=\"focus()\"\n (ngSubmit)=\"submit(form.value)\"\n class=\"flex flex-col items-center w-full h-full\">\n <div class=\"flex content-center w-full justify-center mt-8\">\n <p\n class=\"p-3 max-w-[400px] min-h-[100px]\"\n [innerHtml]=\"safeMessage\"></p>\n </div>\n\n <input\n type=\"password\"\n class=\"text-5xl md:text-8xl pointer-events-none\"\n #taonpasscode\n (keyup)=\"onKeyup($event)\"\n formControlName=\"passcode\" />\n</form>\n", styles: [":host{position:fixed;background-color:#9f9f9f57;z-index:2147483647;backdrop-filter:blur(50px);width:100%;height:100%;display:none}input{background:#fff;border-radius:6px;outline:0px;border:0px;color:gray;text-align:center;width:500px}\n"] }]
1410
+ }], ctorParameters: () => [{ type: i0.ElementRef, decorators: [{
1411
+ type: Self
1412
+ }] }, { type: i1$1.DomSanitizer }, { type: i0.ChangeDetectorRef }], propDecorators: { passcode: [{
1413
+ type: Input,
1414
+ args: [{
1415
+ required: true,
1416
+ }]
1417
+ }], message: [{
1418
+ type: Input
1419
+ }], display: [{
1420
+ type: HostBinding,
1421
+ args: ['style.display']
1422
+ }] } });
1423
+
1832
1424
  var TaonThemeMode;
1833
1425
  (function (TaonThemeMode) {
1834
1426
  TaonThemeMode["AUTO"] = "auto";
@@ -1926,7 +1518,7 @@ class TaonSettingsComponent {
1926
1518
  this.dialogRef.close();
1927
1519
  }
1928
1520
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1929
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonSettingsComponent, isStandalone: true, selector: "taon-settings", ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\" translate [translate-t]=\"t\">Language Settings</h3>\n <taon-lang-selector />\n\n <br />\n <hr />\n <br />\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: TaonLangSelectorComponent, selector: "taon-lang-selector" }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1521
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonSettingsComponent, isStandalone: true, selector: "taon-settings", ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\" translate [translate-t]=\"t\">Language Settings</h3>\n <taon-lang-selector />\n\n <br />\n <hr />\n <br />\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n", styles: [":host{display:block}\n"], dependencies: [{ kind: "component", type: TaonLangSelectorComponent, selector: "taon-lang-selector" }, { kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatDialogModule }, { kind: "directive", type: TranslateDirective, selector: "[translate]", inputs: ["translate-t", "translate-params", "translate-context"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1930
1522
  }
1931
1523
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSettingsComponent, decorators: [{
1932
1524
  type: Component,
@@ -1942,36 +1534,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
1942
1534
  ], template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\" translate [translate-t]=\"t\">Language Settings</h3>\n <taon-lang-selector />\n\n <br />\n <hr />\n <br />\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n", styles: [":host{display:block}\n"] }]
1943
1535
  }] });
1944
1536
 
1945
- //#region imports
1946
- //#endregion
1947
- const t$1 = Translation.for('src/lib/ui/taon-theme/taon-theme.component.ts', { "src/lib/ui/taon-theme/taon-theme.component.html": { "en-US": async () => (await import('./taon-ui-browser-taon-theme.component.html.en-US.i18n.data-CoRxBSnr.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-theme.component.html.pl-PL.i18n.data-BtT2qLG9.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-theme.component.html.de-DE.i18n.data-iiWo6rX0.mjs')).default } });
1948
- /**
1949
- * @deprecated use TaonSettings
1950
- */
1951
- class TaonThemeComponent {
1952
- constructor() {
1953
- this.t = t$1.for(this);
1954
- this.TaonThemeMode = TaonThemeMode;
1955
- this.dialogRef = inject((MatDialogRef));
1956
- this.taonTheme = inject(TaonThemeService);
1957
- }
1958
- close() {
1959
- this.dialogRef.close();
1960
- }
1961
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1962
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonThemeComponent, isStandalone: true, selector: "taon-theme", ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$3.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatDialogModule }] }); }
1963
- }
1964
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonThemeComponent, decorators: [{
1965
- type: Component,
1966
- args: [{ selector: 'taon-theme', imports: [
1967
- MatSlideToggleModule,
1968
- MatIconModule,
1969
- MatButtonModule,
1970
- MatDialogModule,
1971
- TranslateDirective,
1972
- ], template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n" }]
1973
- }] });
1974
-
1975
1537
  //#region imports
1976
1538
  //#endregion
1977
1539
  class TaonSimpleLayoutComponent {
@@ -1980,19 +1542,35 @@ class TaonSimpleLayoutComponent {
1980
1542
  this.dialog = inject(MatDialog);
1981
1543
  this.theme = inject(TaonThemeService);
1982
1544
  this.navItems = input(...(ngDevMode ? [undefined, { debugName: "navItems" }] : []));
1545
+ this.mobileMenuOpen = signal(false, ...(ngDevMode ? [{ debugName: "mobileMenuOpen" }] : []));
1546
+ }
1547
+ navigateToMobile(item) {
1548
+ this.mobileMenuOpen.set(false);
1549
+ this.navigateTo(item);
1550
+ }
1551
+ openSettingsFromMobileMenu() {
1552
+ this.mobileMenuOpen.set(false);
1553
+ this.openDialog(200, 200);
1983
1554
  }
1984
1555
  navigateTo(item) {
1985
- this.router.navigateByUrl(item.path);
1556
+ const primarySegments = item.path.split('/').filter(Boolean);
1557
+ this.router.navigate([
1558
+ {
1559
+ outlets: {
1560
+ primary: primarySegments,
1561
+ },
1562
+ },
1563
+ ]);
1986
1564
  }
1987
1565
  openDialog(enterAnimationDuration, exitAnimationDuration) {
1988
- this.dialog.open(TaonThemeComponent, {
1566
+ this.dialog.open(TaonSettingsComponent, {
1989
1567
  width: '400px',
1990
1568
  enterAnimationDuration,
1991
1569
  exitAnimationDuration,
1992
1570
  });
1993
1571
  }
1994
1572
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSimpleLayoutComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1995
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonSimpleLayoutComponent, isStandalone: true, selector: "taon-simple-layout", inputs: { hideThemeSettings: { classPropertyName: "hideThemeSettings", publicName: "hideThemeSettings", isSignal: false, isRequired: false, transformFunction: null }, hideHeader: { classPropertyName: "hideHeader", publicName: "hideHeader", isSignal: false, isRequired: false, transformFunction: null }, navItems: { classPropertyName: "navItems", publicName: "navItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (!hideHeader) {\n <header\n class=\"relative z-10 inline-flex w-full flex-row items-center justify-end bg-white shadow-md\">\n <div class=\"flex flex-1 flex-row items-center justify-right\">\n @if (navItems()?.length > 0) {\n <nav\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (item of navItems(); track item.path) {\n <a\n mat-tab-link\n href=\"javascript:void(0)\"\n [style.text-decoration]=\"\n (activePath === item.path && !forceShowBaseRootApp) ||\n ('/' === item.path && forceShowBaseRootApp)\n ? 'underline'\n : 'none'\n \"\n (click)=\"navigateTo(item)\">\n @if (item.path === '/') {\n <mat-icon\n aria-hidden=\"false\"\n aria-label=\"Example home icon\"\n fontIcon=\"home\">\n </mat-icon>\n } @else {\n {{ item.label }}\n }\n </a>\n }\n </nav>\n }\n\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"flex shrink-0 flex-row items-center justify-center\">\n <ng-content select=\"[buttons]\"></ng-content>\n\n @if (!hideThemeSettings) {\n <button\n class=\"mr-2\"\n (click)=\"openDialog(200, 200)\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n </header>\n}\n\n<mat-tab-nav-panel\n #tabPanel\n class=\"pt-2\">\n <div class=\"projected-wrapper\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"fallback-message\">\n Please add your component inside\n <br />\n\n <pre>\n <code class=\"block bg-gray-100\">\n &lt;taon-simple-layout class=&quot;p-4&quot;&gt;\n &lt;header\n header\n class=&quot;flex&quot;&gt;\n\n &lt;img\n class=&quot;rounded&quot;\n src=&quot;assets/assets-for/taon-ui/assets/images/pluszka-logo.png&quot;\n height=&quot;50px&quot; /&gt;\n\n &lt;/header&gt;\n\n &lt;br /&gt;\n\n &lt;h3 class=&quot;text-blue-200&quot;&gt;\n Welcome to hamster store.\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Buy cheap hamster videos for free!\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Subscribe more hamsters video daily!\n &lt;/h3&gt;\n\n &lt;ng-container buttons&gt;\n &lt;button\n mat-button\n class=&quot;flex items-center&quot;&gt;\n Hello friend!\n &lt;/button&gt;\n &lt;/ng-container&gt;\n\n &lt;/taon-simple-layout&gt;\n </code>\n </pre>\n </div>\n</mat-tab-nav-panel>\n", styles: [":host{display:block}:host header{z-index:999}:host header nav{max-width:400px}.projected-wrapper:not(:empty)+.fallback-message{display:none}.projected-wrapper:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatListModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3$2.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3$2.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3$2.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1573
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.9", type: TaonSimpleLayoutComponent, isStandalone: true, selector: "taon-simple-layout", inputs: { hideThemeSettings: { classPropertyName: "hideThemeSettings", publicName: "hideThemeSettings", isSignal: false, isRequired: false, transformFunction: null }, hideHeader: { classPropertyName: "hideHeader", publicName: "hideHeader", isSignal: false, isRequired: false, transformFunction: null }, navItems: { classPropertyName: "navItems", publicName: "navItems", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@if (!hideHeader) {\n <header class=\"relative z-10 flex w-full flex-row items-center shadow-md\">\n <!-- LEFT: projected header/logo -->\n <div class=\"flex shrink-0 items-center\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <!-- DESKTOP NAVIGATION -->\n @if (navItems()?.length > 0) {\n <nav\n class=\"desktop-navigation shrink-0\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (item of navItems(); track item.path) {\n <a\n mat-tab-link\n href=\"javascript:void(0)\"\n [style.text-decoration]=\"\n (activePath === item.path && !forceShowBaseRootApp) ||\n ('/' === item.path && forceShowBaseRootApp)\n ? 'underline'\n : 'none'\n \"\n (click)=\"navigateTo(item)\">\n @if (item.path === '/') {\n <mat-icon fontIcon=\"home\"></mat-icon>\n } @else {\n {{ item.label }}\n }\n </a>\n }\n </nav>\n }\n\n <!-- spacer -->\n <div class=\"flex-1\"></div>\n\n <!-- DESKTOP BUTTONS -->\n <div class=\"flex shrink-0 flex-row items-center\">\n <ng-content select=\"[buttons]\"></ng-content>\n\n @if (!hideThemeSettings) {\n <button\n class=\"mr-2\"\n (click)=\"openDialog(200, 200)\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n\n <!-- MOBILE MENU BUTTON -->\n <div class=\"mobile-menu relative\">\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"mobileMenuOpen.set(!mobileMenuOpen())\">\n <mat-icon>\n {{ mobileMenuOpen() ? 'close' : 'menu' }}\n </mat-icon>\n </button>\n\n @if (mobileMenuOpen()) {\n <div\n class=\"absolute right-2 top-full z-[1000] mt-1 min-w-52 overflow-hidden rounded-md border border-gray-200 bg-white shadow-lg\">\n @for (item of navItems() ?? []; track item.path) {\n <button\n mat-button\n class=\"!flex !w-full !justify-start !rounded-none\"\n (click)=\"navigateToMobile(item)\">\n @if (item.path === '/') {\n <mat-icon class=\"mr-2\">home</mat-icon>\n }\n\n {{ item.label }}\n </button>\n }\n\n @if (!hideThemeSettings) {\n <div class=\"border-t border-gray-200\">\n <button\n mat-button\n class=\"!flex !w-full !justify-start !rounded-none\"\n (click)=\"openSettingsFromMobileMenu()\">\n <mat-icon class=\"mr-2\">settings</mat-icon>\n Settings\n </button>\n </div>\n }\n </div>\n }\n </div>\n </header>\n}\n\n<mat-tab-nav-panel\n #tabPanel\n class=\"pt-2\">\n <div class=\"projected-wrapper\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"fallback-message\">\n Please add your component inside\n <br />\n\n <pre>\n <code class=\"block bg-gray-100\">\n &lt;taon-simple-layout class=&quot;p-4&quot;&gt;\n &lt;header\n header\n class=&quot;flex&quot;&gt;\n\n &lt;img\n class=&quot;rounded&quot;\n src=&quot;assets/assets-for/taon-ui/assets/images/pluszka-logo.png&quot;\n height=&quot;50px&quot; /&gt;\n\n &lt;/header&gt;\n\n &lt;br /&gt;\n\n &lt;h3 class=&quot;text-blue-200&quot;&gt;\n Welcome to hamster store.\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Buy cheap hamster videos for free!\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Subscribe more hamsters video daily!\n &lt;/h3&gt;\n\n &lt;ng-container buttons&gt;\n &lt;button\n mat-button\n class=&quot;flex items-center&quot;&gt;\n Hello friend!\n &lt;/button&gt;\n &lt;/ng-container&gt;\n\n &lt;/taon-simple-layout&gt;\n </code>\n </pre>\n </div>\n</mat-tab-nav-panel>\n", styles: [":host{display:block}:host header{z-index:999}:host header nav{max-width:400px}:host ::ng-deep .mat-mdc-tab-link-container{border:none!important;box-shadow:none!important;background:transparent!important}.projected-wrapper:not(:empty)+.fallback-message{display:none}.projected-wrapper:empty{display:none}.desktop-navigation,.desktop-buttons{display:flex}.mobile-menu{display:none}@media(max-width:767px){.desktop-navigation,.desktop-buttons{display:none!important}.mobile-menu{display:block!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { 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: MatListModule }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i3.MatTabNav, selector: "[mat-tab-nav-bar]", inputs: ["fitInkBarToContent", "mat-stretch-tabs", "animationDuration", "backgroundColor", "disableRipple", "color", "tabPanel"], exportAs: ["matTabNavBar", "matTabNav"] }, { kind: "component", type: i3.MatTabNavPanel, selector: "mat-tab-nav-panel", inputs: ["id"], exportAs: ["matTabNavPanel"] }, { kind: "component", type: i3.MatTabLink, selector: "[mat-tab-link], [matTabLink]", inputs: ["active", "disabled", "disableRipple", "tabIndex", "id"], exportAs: ["matTabLink"] }, { kind: "ngmodule", type: RouterModule }, { kind: "ngmodule", type: MatDialogModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1996
1574
  }
1997
1575
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSimpleLayoutComponent, decorators: [{
1998
1576
  type: Component,
@@ -2008,27 +1586,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
2008
1586
  RouterModule,
2009
1587
  MatDialogModule,
2010
1588
  JsonPipe,
2011
- TaonThemeComponent,
2012
- ], template: "@if (!hideHeader) {\n <header\n class=\"relative z-10 inline-flex w-full flex-row items-center justify-end bg-white shadow-md\">\n <div class=\"flex flex-1 flex-row items-center justify-right\">\n @if (navItems()?.length > 0) {\n <nav\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (item of navItems(); track item.path) {\n <a\n mat-tab-link\n href=\"javascript:void(0)\"\n [style.text-decoration]=\"\n (activePath === item.path && !forceShowBaseRootApp) ||\n ('/' === item.path && forceShowBaseRootApp)\n ? 'underline'\n : 'none'\n \"\n (click)=\"navigateTo(item)\">\n @if (item.path === '/') {\n <mat-icon\n aria-hidden=\"false\"\n aria-label=\"Example home icon\"\n fontIcon=\"home\">\n </mat-icon>\n } @else {\n {{ item.label }}\n }\n </a>\n }\n </nav>\n }\n\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"flex shrink-0 flex-row items-center justify-center\">\n <ng-content select=\"[buttons]\"></ng-content>\n\n @if (!hideThemeSettings) {\n <button\n class=\"mr-2\"\n (click)=\"openDialog(200, 200)\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n </header>\n}\n\n<mat-tab-nav-panel\n #tabPanel\n class=\"pt-2\">\n <div class=\"projected-wrapper\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"fallback-message\">\n Please add your component inside\n <br />\n\n <pre>\n <code class=\"block bg-gray-100\">\n &lt;taon-simple-layout class=&quot;p-4&quot;&gt;\n &lt;header\n header\n class=&quot;flex&quot;&gt;\n\n &lt;img\n class=&quot;rounded&quot;\n src=&quot;assets/assets-for/taon-ui/assets/images/pluszka-logo.png&quot;\n height=&quot;50px&quot; /&gt;\n\n &lt;/header&gt;\n\n &lt;br /&gt;\n\n &lt;h3 class=&quot;text-blue-200&quot;&gt;\n Welcome to hamster store.\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Buy cheap hamster videos for free!\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Subscribe more hamsters video daily!\n &lt;/h3&gt;\n\n &lt;ng-container buttons&gt;\n &lt;button\n mat-button\n class=&quot;flex items-center&quot;&gt;\n Hello friend!\n &lt;/button&gt;\n &lt;/ng-container&gt;\n\n &lt;/taon-simple-layout&gt;\n </code>\n </pre>\n </div>\n</mat-tab-nav-panel>\n", styles: [":host{display:block}:host header{z-index:999}:host header nav{max-width:400px}.projected-wrapper:not(:empty)+.fallback-message{display:none}.projected-wrapper:empty{display:none}\n"] }]
1589
+ TaonSettingsComponent,
1590
+ ], template: "@if (!hideHeader) {\n <header class=\"relative z-10 flex w-full flex-row items-center shadow-md\">\n <!-- LEFT: projected header/logo -->\n <div class=\"flex shrink-0 items-center\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <!-- DESKTOP NAVIGATION -->\n @if (navItems()?.length > 0) {\n <nav\n class=\"desktop-navigation shrink-0\"\n mat-tab-nav-bar\n [tabPanel]=\"tabPanel\">\n @for (item of navItems(); track item.path) {\n <a\n mat-tab-link\n href=\"javascript:void(0)\"\n [style.text-decoration]=\"\n (activePath === item.path && !forceShowBaseRootApp) ||\n ('/' === item.path && forceShowBaseRootApp)\n ? 'underline'\n : 'none'\n \"\n (click)=\"navigateTo(item)\">\n @if (item.path === '/') {\n <mat-icon fontIcon=\"home\"></mat-icon>\n } @else {\n {{ item.label }}\n }\n </a>\n }\n </nav>\n }\n\n <!-- spacer -->\n <div class=\"flex-1\"></div>\n\n <!-- DESKTOP BUTTONS -->\n <div class=\"flex shrink-0 flex-row items-center\">\n <ng-content select=\"[buttons]\"></ng-content>\n\n @if (!hideThemeSettings) {\n <button\n class=\"mr-2\"\n (click)=\"openDialog(200, 200)\"\n mat-icon-button>\n <mat-icon>settings</mat-icon>\n </button>\n }\n </div>\n\n <!-- MOBILE MENU BUTTON -->\n <div class=\"mobile-menu relative\">\n <button\n mat-icon-button\n type=\"button\"\n (click)=\"mobileMenuOpen.set(!mobileMenuOpen())\">\n <mat-icon>\n {{ mobileMenuOpen() ? 'close' : 'menu' }}\n </mat-icon>\n </button>\n\n @if (mobileMenuOpen()) {\n <div\n class=\"absolute right-2 top-full z-[1000] mt-1 min-w-52 overflow-hidden rounded-md border border-gray-200 bg-white shadow-lg\">\n @for (item of navItems() ?? []; track item.path) {\n <button\n mat-button\n class=\"!flex !w-full !justify-start !rounded-none\"\n (click)=\"navigateToMobile(item)\">\n @if (item.path === '/') {\n <mat-icon class=\"mr-2\">home</mat-icon>\n }\n\n {{ item.label }}\n </button>\n }\n\n @if (!hideThemeSettings) {\n <div class=\"border-t border-gray-200\">\n <button\n mat-button\n class=\"!flex !w-full !justify-start !rounded-none\"\n (click)=\"openSettingsFromMobileMenu()\">\n <mat-icon class=\"mr-2\">settings</mat-icon>\n Settings\n </button>\n </div>\n }\n </div>\n }\n </div>\n </header>\n}\n\n<mat-tab-nav-panel\n #tabPanel\n class=\"pt-2\">\n <div class=\"projected-wrapper\">\n <ng-content></ng-content>\n </div>\n\n <div class=\"fallback-message\">\n Please add your component inside\n <br />\n\n <pre>\n <code class=\"block bg-gray-100\">\n &lt;taon-simple-layout class=&quot;p-4&quot;&gt;\n &lt;header\n header\n class=&quot;flex&quot;&gt;\n\n &lt;img\n class=&quot;rounded&quot;\n src=&quot;assets/assets-for/taon-ui/assets/images/pluszka-logo.png&quot;\n height=&quot;50px&quot; /&gt;\n\n &lt;/header&gt;\n\n &lt;br /&gt;\n\n &lt;h3 class=&quot;text-blue-200&quot;&gt;\n Welcome to hamster store.\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Buy cheap hamster videos for free!\n &lt;/h3&gt;\n\n &lt;h3 class=&quot;text-blue-300&quot;&gt;\n Subscribe more hamsters video daily!\n &lt;/h3&gt;\n\n &lt;ng-container buttons&gt;\n &lt;button\n mat-button\n class=&quot;flex items-center&quot;&gt;\n Hello friend!\n &lt;/button&gt;\n &lt;/ng-container&gt;\n\n &lt;/taon-simple-layout&gt;\n </code>\n </pre>\n </div>\n</mat-tab-nav-panel>\n", styles: [":host{display:block}:host header{z-index:999}:host header nav{max-width:400px}:host ::ng-deep .mat-mdc-tab-link-container{border:none!important;box-shadow:none!important;background:transparent!important}.projected-wrapper:not(:empty)+.fallback-message{display:none}.projected-wrapper:empty{display:none}.desktop-navigation,.desktop-buttons{display:flex}.mobile-menu{display:none}@media(max-width:767px){.desktop-navigation,.desktop-buttons{display:none!important}.mobile-menu{display:block!important}}\n"] }]
2013
1591
  }], propDecorators: { hideThemeSettings: [{
2014
1592
  type: Input
2015
1593
  }], hideHeader: [{
2016
1594
  type: Input
2017
1595
  }], navItems: [{ type: i0.Input, args: [{ isSignal: true, alias: "navItems", required: false }] }] } });
2018
1596
 
2019
- //#endregion
2020
- const TaonSimpleLayoutRoutes = [
2021
- {
2022
- path: '',
2023
- component: TaonSimpleLayoutComponent,
2024
- },
2025
- // {
2026
- // path: 'anothermodulepath',
2027
- // loadChildren: () => import('anothermodule')
2028
- // .then(m => m.AnotherLazyModule),
2029
- // },
2030
- ];
2031
-
2032
1597
  class TaonSlideContentContentChildComponent {
2033
1598
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonSlideContentContentChildComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2034
1599
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonSlideContentContentChildComponent, isStandalone: true, selector: "taon-slide-content-child", inputs: { assignToState: "assignToState" }, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:block;flex:0 0 100%;width:100%;min-width:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -2085,12 +1650,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
2085
1650
  type: Input
2086
1651
  }] } });
2087
1652
 
2088
- const t = Translation.for('src/lib/ui/taon-stripe-buy-button/taon-stripe-buy-button.component.ts', { "src/lib/ui/taon-stripe-buy-button/taon-stripe-buy-button.component.ts": { "en-US": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.en-US.i18n.data-Dm_w_Ca7.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.pl-PL.i18n.data-Ceog6BY8.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.de-DE.i18n.data-qkknVsLY.mjs')).default } }, {
1653
+ const t$1 = Translation.for('src/lib/ui/taon-stripe-buy-button/taon-stripe-buy-button.component.ts', { "src/lib/ui/taon-stripe-buy-button/taon-stripe-buy-button.component.ts": { "en-US": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.en-US.i18n.data-Dm_w_Ca7.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.pl-PL.i18n.data-Ceog6BY8.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-stripe-buy-button.component.ts.de-DE.i18n.data-qkknVsLY.mjs')).default } }, {
2089
1654
  // debug: true
2090
1655
  });
2091
1656
  class TaonStripeBuyButtonComponent {
2092
1657
  constructor() {
2093
- this.t = t.for(this);
1658
+ this.t = t$1.for(this);
2094
1659
  /**
2095
1660
  * optional label for buy button
2096
1661
  */
@@ -2144,7 +1709,7 @@ class TaonStripeBuyButtonComponent {
2144
1709
  }
2145
1710
  }
2146
1711
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonStripeBuyButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonStripeBuyButtonComponent, isStandalone: true, selector: "taon-stripe-buy-button", inputs: { priceId: "priceId", productId: "productId", promotionPreviousPrice: "promotionPreviousPrice", workerUrl: "workerUrl", email: "email", successUrl: "successUrl", cancelUrl: "cancelUrl" }, ngImport: i0, template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 rounded-xl whitespace-nowrap ml-2\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3$1.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"] }] }); }
1712
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonStripeBuyButtonComponent, isStandalone: true, selector: "taon-stripe-buy-button", inputs: { priceId: "priceId", productId: "productId", promotionPreviousPrice: "promotionPreviousPrice", workerUrl: "workerUrl", email: "email", successUrl: "successUrl", cancelUrl: "cancelUrl" }, ngImport: i0, template: "<button\n type=\"button\"\n matButton=\"filled\"\n (click)=\"buy()\"\n [disabled]=\"loading\">\n <span *ngIf=\"!loading\">\n {{ label() }}\n </span>\n <span\n class=\"line-through absolute bg-red-500 p-1 rounded-xl whitespace-nowrap ml-2\"\n *ngIf=\"promotionPreviousPrice\">\n {{ promotionPreviousPrice }}\n </span>\n\n <span *ngIf=\"loading\"> Redirecting to Stripe... </span>\n</button>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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"] }] }); }
2148
1713
  }
2149
1714
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonStripeBuyButtonComponent, decorators: [{
2150
1715
  type: Component,
@@ -2171,258 +1736,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImpor
2171
1736
 
2172
1737
  //#region imports
2173
1738
  //#endregion
2174
- //#region constants
2175
- const log = Log.create('Table wrapper',
2176
- // levels
2177
- Level.WARN, Level.ERROR);
2178
- const defaultColumns = [
2179
- {
2180
- header: 'ID',
2181
- field: 'id',
2182
- },
2183
- {
2184
- header: 'NAME',
2185
- field: 'name',
2186
- },
2187
- ];
2188
- //#endregion
2189
- class TaonTableComponent {
1739
+ const t = Translation.for('src/lib/ui/taon-theme/taon-theme.component.ts', { "src/lib/ui/taon-theme/taon-theme.component.html": { "en-US": async () => (await import('./taon-ui-browser-taon-theme.component.html.en-US.i18n.data-CoRxBSnr.mjs')).default, "pl-PL": async () => (await import('./taon-ui-browser-taon-theme.component.html.pl-PL.i18n.data-BtT2qLG9.mjs')).default, "de-DE": async () => (await import('./taon-ui-browser-taon-theme.component.html.de-DE.i18n.data-iiWo6rX0.mjs')).default } });
1740
+ /**
1741
+ * @deprecated use TaonSettings
1742
+ */
1743
+ class TaonThemeComponent {
2190
1744
  constructor() {
2191
- this.cdr = inject(ChangeDetectorRef);
2192
- //#region fields
2193
- this.pageNumber = 1;
2194
- this.pageSize = 5;
2195
- this.allowedColumns = [];
2196
- this.rows = _.times(20, id => {
2197
- return {
2198
- id,
2199
- name: `Amazing ${id} row `,
2200
- };
2201
- });
2202
- this.columns = defaultColumns;
2203
- this.pageSizeOptions = [5, 10, 20];
2204
- this.expansionChange = new EventEmitter();
2205
- this.addingItem = new EventEmitter();
2206
- this.expandable = false;
2207
- this.showPaginator = true;
2208
- this.isLoading = false;
2209
- this.totalElements = 100;
2210
- this.sub = new Subscription();
2211
- }
2212
- //#endregion
2213
- get entity() {
2214
- return this.entityCrudController?.entityClassResolveFn();
2215
- }
2216
- //#region hooks
2217
- //#region hooks / on init
2218
- async ngOnInit() {
2219
- if (!this.hideSearch) {
2220
- this.searchInputChange$ = defer(() => fromEvent(this.search?.nativeElement, 'keyup')).pipe(map(c => c.target['value']), debounceTime(500), distinctUntilChanged(), share(), tap(data => {
2221
- console.log({ data });
2222
- }));
2223
- this.sub.add(this.searchInputChange$.subscribe());
2224
- }
2225
- const entityClass = this.entity;
2226
- if (!!entityClass) {
2227
- this.rows = [];
2228
- }
2229
- this.expandable = !!this.expansionTemplate;
2230
- // this.arrayDataConfig.set.pagination.rowDisplayed(5);
2231
- log.i('this.columns,', this.columns);
2232
- const columnsConfigSameAsDefault = _.isEqual(this.columns, defaultColumns);
2233
- // console.log({
2234
- // columnsConfigSameAsDefault
2235
- // })
2236
- if (entityClass && columnsConfigSameAsDefault) {
2237
- const props = Object.keys(getDefaultModel(entityClass));
2238
- log.i('this.crud.entity props', props);
2239
- try {
2240
- let columns = props
2241
- .filter(prop => this.allowedColumns.length > 0
2242
- ? this.allowedColumns.includes(prop)
2243
- : true)
2244
- .map(prop => {
2245
- return {
2246
- header: _.upperCase(prop),
2247
- field: prop,
2248
- };
2249
- });
2250
- const extra = this.allowedColumns.filter(f => !props.includes(f));
2251
- columns = [
2252
- ...columns,
2253
- ...extra.map(prop => {
2254
- return {
2255
- header: _.upperCase(prop),
2256
- field: prop,
2257
- };
2258
- }),
2259
- ];
2260
- // console.log({
2261
- // extra
2262
- // });
2263
- if (!this.expandable) {
2264
- for (let index = 0; index < columns.length; index++) {
2265
- const col = columns[index];
2266
- delete col.showExpand;
2267
- }
2268
- }
2269
- this.columns = columns;
2270
- }
2271
- catch (error) {
2272
- console.error(error);
2273
- }
2274
- }
2275
- else {
2276
- }
2277
- if (!this.entity) {
2278
- this.showPaginator = false;
2279
- }
2280
- await this.getData();
2281
- }
2282
- //#endregion
2283
- //#region hooks / on destroy
2284
- ngOnDestroy() {
2285
- this.sub.unsubscribe();
2286
- }
2287
- //#endregion
2288
- //#endregion
2289
- //#region methods
2290
- //#region methods / get next page
2291
- async getNextPage(e) {
2292
- // console.log({
2293
- // e
2294
- // });
2295
- this.pageNumber = e.pageIndex + 1;
2296
- this.pageSize = e.pageSize;
2297
- await this.getData();
2298
- }
2299
- //#endregion
2300
- //#region methods / retrive data
2301
- async getData() {
2302
- if (!this.entity) {
2303
- return;
2304
- }
2305
- this.isLoading = true;
2306
- // console.log('PAGINTION FETCH DATA START!')
2307
- const controller = this.entityCrudController;
2308
- if (controller) {
2309
- const data = await controller.pagination(this.pageNumber, this.pageSize)
2310
- .received;
2311
- // console.log('PAGINTION DATA', {
2312
- // data,
2313
- // });
2314
- const totalElements = Number(data.headers.get(Symbols.old.X_TOTAL_COUNT));
2315
- const rows = data.body.json;
2316
- // console.log('PAGINTION DATA', {
2317
- // rows,
2318
- // totalElements,
2319
- // });
2320
- this.totalElements = totalElements;
2321
- this.rows = rows.map(d => {
2322
- for (const key in d) {
2323
- if (Object.prototype.hasOwnProperty.call(d, key)) {
2324
- const elem = d[key];
2325
- if (_.isObject(elem)) {
2326
- d[key] = json5.stringify(d[key]);
2327
- }
2328
- }
2329
- }
2330
- // console.log({ d })
2331
- return d;
2332
- });
2333
- }
2334
- this.isLoading = false;
2335
- this.cdr.markForCheck();
2336
- }
2337
- //#endregion
2338
- //#region methods / expansion row
2339
- expansionRow(e) {
2340
- this.expansionChange.next(e);
1745
+ this.t = t.for(this);
1746
+ this.TaonThemeMode = TaonThemeMode;
1747
+ this.dialogRef = inject((MatDialogRef));
1748
+ this.taonTheme = inject(TaonThemeService);
2341
1749
  }
2342
- //#endregion
2343
- //#region methods / on table context menu
2344
- onTableContextMenu(e) {
2345
- // if (this.rowHref) {
2346
- // this.router.navigateByUrl(this.rowHref)
2347
- // }
2348
- log.i('context menu event', e);
1750
+ close() {
1751
+ this.dialogRef.close();
2349
1752
  }
2350
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2351
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonTableComponent, isStandalone: false, selector: "taon-table", inputs: { pageNumber: "pageNumber", pageSize: "pageSize", allowedColumns: "allowedColumns", expansionTemplate: "expansionTemplate", rows: "rows", entityCrudController: "entityCrudController", columns: "columns", pageSizeOptions: "pageSizeOptions", hideSearch: "hideSearch" }, outputs: { expansionChange: "expansionChange", addingItem: "addingItem" }, viewQueries: [{ propertyName: "search", first: true, predicate: ["search"], descendants: true, static: true }], ngImport: i0, template: "<br />\n<columns-container *ngIf=\"!hideSearch\">\n <column grow>\n <mat-form-field class=\"search-input\">\n <input\n matInput\n placeholder=\"Type to search table...\"\n #search />\n </mat-form-field>\n </column>\n <column [width]=\"80\">\n <button\n mat-fab\n [ngClass]=\"{ 'half-opacity': !search.value }\"\n class=\"undo-button\"\n color=\"secondary\"\n (click)=\"search.value = ''\">\n <mat-icon>close </mat-icon>\n </button>\n </column>\n\n <column [width]=\"80\">\n <button\n mat-fab\n (click)=\"addingItem.next()\"\n class=\"undo-button\"\n color=\"primary\">\n <mat-icon>add</mat-icon>\n </button>\n </column>\n</columns-container>\n\n<mtx-grid\n *ngIf=\"rows && columns\"\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"expansionTemplate\"\n (expansionChange)=\"expansionRow($event)\"\n [length]=\"totalElements\"\n\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (page)=\"getNextPage($event)\">\n</mtx-grid>\n\n<!-- [loading]=\"isLoading\" -->\n", styles: [":host{min-height:250px}.search-input{width:100%}.undo-button{margin-left:10px}.half-opacity{opacity:.2}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i3$3.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"] }, { 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: "component", type: i4$1.ColumnsComponent, selector: "columns-container" }, { kind: "component", type: i4$1.ColumnComponent, selector: "column", inputs: ["width"] }, { kind: "directive", type: i4$1.DirectiveGrow, selector: "[grow]" }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatFabButton, selector: "button[mat-fab], a[mat-fab], button[matFab], a[matFab]", inputs: ["extended"], exportAs: ["matButton", "matAnchor"] }] }); }
1753
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonThemeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1754
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonThemeComponent, isStandalone: true, selector: "taon-theme", ngImport: i0, template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n", dependencies: [{ kind: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i1$2.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon", "disabledInteractive"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatDialogModule }] }); }
2352
1755
  }
2353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonTableComponent, decorators: [{
1756
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonThemeComponent, decorators: [{
2354
1757
  type: Component,
2355
- args: [{ selector: 'taon-table', standalone: false, template: "<br />\n<columns-container *ngIf=\"!hideSearch\">\n <column grow>\n <mat-form-field class=\"search-input\">\n <input\n matInput\n placeholder=\"Type to search table...\"\n #search />\n </mat-form-field>\n </column>\n <column [width]=\"80\">\n <button\n mat-fab\n [ngClass]=\"{ 'half-opacity': !search.value }\"\n class=\"undo-button\"\n color=\"secondary\"\n (click)=\"search.value = ''\">\n <mat-icon>close </mat-icon>\n </button>\n </column>\n\n <column [width]=\"80\">\n <button\n mat-fab\n (click)=\"addingItem.next()\"\n class=\"undo-button\"\n color=\"primary\">\n <mat-icon>add</mat-icon>\n </button>\n </column>\n</columns-container>\n\n<mtx-grid\n *ngIf=\"rows && columns\"\n [data]=\"rows\"\n [columns]=\"columns\"\n [expandable]=\"expandable\"\n [expansionTemplate]=\"expansionTemplate\"\n (expansionChange)=\"expansionRow($event)\"\n [length]=\"totalElements\"\n\n [pageOnFront]=\"false\"\n [pageIndex]=\"pageNumber - 1\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [showPaginator]=\"showPaginator\"\n (page)=\"getNextPage($event)\">\n</mtx-grid>\n\n<!-- [loading]=\"isLoading\" -->\n", styles: [":host{min-height:250px}.search-input{width:100%}.undo-button{margin-left:10px}.half-opacity{opacity:.2}\n"] }]
2356
- }], propDecorators: { pageNumber: [{
2357
- type: Input
2358
- }], pageSize: [{
2359
- type: Input
2360
- }], allowedColumns: [{
2361
- type: Input
2362
- }], expansionTemplate: [{
2363
- type: Input
2364
- }], rows: [{
2365
- type: Input
2366
- }], entityCrudController: [{
2367
- type: Input
2368
- }], columns: [{
2369
- type: Input
2370
- }], pageSizeOptions: [{
2371
- type: Input
2372
- }], hideSearch: [{
2373
- type: Input
2374
- }], expansionChange: [{
2375
- type: Output
2376
- }], addingItem: [{
2377
- type: Output
2378
- }], search: [{
2379
- type: ViewChild,
2380
- args: ['search', { static: true }]
2381
- }] } });
2382
-
2383
- //#region imports
2384
- //#endregion
2385
- class TaonTableModule {
2386
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonTableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2387
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.9", ngImport: i0, type: TaonTableModule, declarations: [TaonTableComponent], imports: [CommonModule,
2388
- MatSelectModule,
2389
- MtxGridModule,
2390
- MatFormFieldModule,
2391
- MatInputModule,
2392
- StaticColumnsModule,
2393
- MatIconModule,
2394
- MatButtonModule,
2395
- FormsModule,
2396
- ReactiveFormsModule], exports: [TaonTableComponent] }); }
2397
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonTableModule, imports: [CommonModule,
2398
- MatSelectModule,
2399
- MtxGridModule,
2400
- MatFormFieldModule,
2401
- MatInputModule,
2402
- StaticColumnsModule,
2403
- MatIconModule,
2404
- MatButtonModule,
2405
- FormsModule,
2406
- ReactiveFormsModule] }); }
2407
- }
2408
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonTableModule, decorators: [{
2409
- type: NgModule,
2410
- args: [{
2411
- imports: [
2412
- CommonModule,
2413
- MatSelectModule,
2414
- MtxGridModule,
2415
- MatFormFieldModule,
2416
- MatInputModule,
2417
- StaticColumnsModule,
1758
+ args: [{ selector: 'taon-theme', imports: [
1759
+ MatSlideToggleModule,
2418
1760
  MatIconModule,
2419
1761
  MatButtonModule,
2420
- FormsModule,
2421
- ReactiveFormsModule,
2422
- ],
2423
- exports: [TaonTableComponent],
2424
- declarations: [TaonTableComponent],
2425
- }]
1762
+ MatDialogModule,
1763
+ TranslateDirective,
1764
+ ], template: "<div class=\"absolute top-2 right-2\">\n <button\n mat-icon-button\n aria-label=\"Close dialog\"\n (click)=\"close()\">\n <mat-icon>close</mat-icon>\n </button>\n</div>\n<div class=\"p-4\">\n <h3 class=\"bold\">\n {{ t.gettext('Theme settings') }}\n {{ taonTheme.pernamentMode ? t.gettext(\"Settings can't ba changed\") : '' }}\n </h3>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isAuto()\"\n [disabled]=\"taonTheme.pernamentMode\"\n (change)=\"taonTheme.toogleAuto($event.checked)\">\n {{ t.gettext('Sync colors with system') }}\n </mat-slide-toggle>\n\n <mat-slide-toggle\n class=\"p-2\"\n [checked]=\"taonTheme.isDark()\"\n [disabled]=\"taonTheme.isAuto() || taonTheme.pernamentMode\"\n (change)=\"taonTheme.setDark($event.checked)\">\n {{ t.gettext('Dark mode') }}\n </mat-slide-toggle>\n</div>\n" }]
2426
1765
  }] });
2427
1766
 
2428
1767
  var TaonYouTubeUtils;
@@ -2661,7 +2000,7 @@ class TaonYoutubeVideoComponent {
2661
2000
  }), 'https://www.youtube.com');
2662
2001
  }
2663
2002
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonYoutubeVideoComponent, deps: [{ token: i1$1.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component }); }
2664
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonYoutubeVideoComponent, isStandalone: true, selector: "taon-youtube-video", inputs: { videoId: "videoId", title: "title", height: "height", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["ytFrame"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- THUMBNAIL -->\n <div\n *ngIf=\"!videoActivated()\"\n class=\"yt-preview\"\n (click)=\"onPreviewClick()\">\n <!-- @if (isInViewport()) { -->\n <img\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle || 'YouTube video'\"\n decoding=\"async\"\n draggable=\"false\"\n (error)=\"onThumbnailError($event)\" />\n <!-- } -->\n\n <!-- PLAY -->\n <div\n *ngIf=\"state !== 'preview-picture-locked'\"\n class=\"yt-play-button\">\n <mat-icon>play_arrow</mat-icon>\n </div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n </div>\n\n <!-- ACTUAL YOUTUBE PLAYER -->\n <iframe\n #ytFrame\n *ngIf=\"videoActivated()\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; web-share\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n *ngIf=\"\n videoActivated() &&\n state === 'video-preview-private' &&\n allowedToBeDisplayedVideoOveraly()\n \"\n class=\"yt-overlay-video\"\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n (click)=\"clicked($event)\">\n <h1 class=\"text-center\">\n Thanks for buying<br />\n this video\n </h1>\n </div>\n</div>\n\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>\n", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-preview{position:absolute;inset:0;cursor:pointer;touch-action:pan-y}.yt-media{width:100%;height:100%;display:block;object-fit:contain;border:0}img.yt-media{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.yt-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.yt-play-button{position:absolute;left:50%;top:50%;width:72px;height:52px;transform:translate(-50%,-50%);border-radius:14px;background:#ff0000e6;display:flex;align-items:center;justify-content:center;pointer-events:none}.yt-play-button mat-icon{width:40px;height:40px;font-size:40px;color:#fff}.yt-preview:hover .yt-play-button{transform:translate(-50%,-50%) scale(1.08)}.yt-lock{background:#0000008c}.yt-lock mat-icon{width:60px;height:60px;font-size:56px;color:#fff}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2003
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.0.9", type: TaonYoutubeVideoComponent, isStandalone: true, selector: "taon-youtube-video", inputs: { videoId: "videoId", title: "title", height: "height", state: "state" }, outputs: { paddlockClicked: "paddlockClicked", previewClicked: "previewClicked" }, viewQueries: [{ propertyName: "iframeRef", first: true, predicate: ["ytFrame"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"yt-container\"\n [ngClass]=\"state\"\n [ngStyle]=\"containerStyle\">\n <!-- THUMBNAIL -->\n <div\n *ngIf=\"!videoActivated()\"\n class=\"yt-preview\"\n (click)=\"onPreviewClick()\">\n <!-- @if (isInViewport()) { -->\n <img\n class=\"yt-media\"\n [src]=\"previewImage()\"\n [alt]=\"displayTitle || 'YouTube video'\"\n decoding=\"async\"\n draggable=\"false\"\n (error)=\"onThumbnailError($event)\" />\n <!-- } -->\n\n <!-- PLAY -->\n <div\n *ngIf=\"state !== 'preview-picture-locked'\"\n class=\"yt-play-button\">\n <mat-icon>play_arrow</mat-icon>\n </div>\n\n <!-- LOCK -->\n <div\n *ngIf=\"state === 'preview-picture-locked'\"\n class=\"yt-overlay yt-lock\"\n (click)=\"onLockClick($event)\">\n <mat-icon>lock</mat-icon>\n </div>\n </div>\n\n <!-- ACTUAL YOUTUBE PLAYER -->\n <iframe\n #ytFrame\n *ngIf=\"videoActivated()\"\n class=\"yt-media\"\n [src]=\"embedUrl()\"\n frameborder=\"0\"\n allow=\"autoplay; encrypted-media; picture-in-picture; web-share\"\n allowfullscreen>\n </iframe>\n\n <!-- PRIVATE OVERLAY -->\n <div\n *ngIf=\"\n videoActivated() &&\n state === 'video-preview-private' &&\n allowedToBeDisplayedVideoOveraly()\n \"\n class=\"yt-overlay-video\"\n (contextmenu)=\"onRightClick($event)\"\n (dblclick)=\"clicked($event)\"\n (click)=\"clicked($event)\">\n <h1 class=\"text-center\">\n Thanks for buying<br />\n this video\n </h1>\n </div>\n</div>\n\n<div\n class=\"yt-title\"\n *ngIf=\"displayTitle\">\n {{ displayTitle }}\n</div>\n", styles: [".yt-container{position:relative;overflow:hidden;border-radius:8px;border:1px solid var(--surface-border)}.yt-container:not([style*=height]){aspect-ratio:16/9}.yt-preview{position:absolute;inset:0;cursor:pointer;touch-action:pan-y}.yt-media{width:100%;height:100%;display:block;object-fit:contain;border:0}img.yt-media{pointer-events:none;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.yt-overlay{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.yt-play-button{position:absolute;left:50%;top:50%;width:72px;height:52px;transform:translate(-50%,-50%);border-radius:14px;background:#ff0000e6;display:flex;align-items:center;justify-content:center;pointer-events:none}.yt-play-button mat-icon{width:40px;height:40px;font-size:40px;color:#fff}.yt-preview:hover .yt-play-button{transform:translate(-50%,-50%) scale(1.08)}.yt-lock{background:#0000008c}.yt-lock mat-icon{width:60px;height:60px;font-size:56px;color:#fff}.yt-overlay-video{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;background:#c8c8c880}.yt-title{margin-top:.5rem;font-size:.9rem;font-weight:500}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2$3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2665
2004
  }
2666
2005
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.9", ngImport: i0, type: TaonYoutubeVideoComponent, decorators: [{
2667
2006
  type: Component,
@@ -2714,5 +2053,5 @@ var index = {};
2714
2053
  * Generated bundle index. Do not edit.
2715
2054
  */
2716
2055
 
2717
- export { APP_ID, AnonymizeTextDirective, AuthButtonComponent, AuthDialogComponent, AuthGuard, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, GoogleAuthService, MicrosoftAuthService, PROJECT_NPM_NAME, SafePipe, SessionService, TaonAdminModeConfigurationComponent, TaonBootstrapNavbarComponent, TaonFullMaterialModule, TaonGithubForkMeCornerComponent, TaonGithubForkMeCornerModule, TaonGithubForkMeRibbonComponent, TaonGithubForkMeRibbonModule, TaonIframeSyncComponent, TaonInjectHTMLDirective, TaonKvAuthorizationComponent, TaonLangSelectorComponent, TaonLongPress, TaonNotFoundComponent, TaonNotificationOptions, TaonNotificationsComponent, TaonNotificationsModule, TaonNotificationsService, TaonProgressBarComponent, TaonProgressBarModule, TaonRumbleComponent, TaonSessionPasscodeComponent, TaonSettingsComponent, TaonSimpleLayoutComponent, TaonSimpleLayoutRoutes, TaonSlideContentComponent, TaonSlideContentContentChildComponent, TaonStripeBuyButtonComponent, TaonTableComponent, TaonTableModule, TaonThemeComponent, TaonThemeMode, TaonThemeService, TaonYouTubeUtils, TaonYoutubeVideoComponent, ViewMode, myOrgProj, startCli };
2056
+ export { APP_ID, AnonymizeTextDirective, AuthButtonComponent, AuthDialogComponent, AuthGuard, BUILD_BASE_HREF, BUILD_FRAMEWORK_CLI_NAME, CURRENT_PACKAGE_TAON_VERSION, CURRENT_PACKAGE_VERSION, GoogleAuthService, MicrosoftAuthService, PROJECT_NPM_NAME, SafePipe, SessionService, TaonBootstrapNavbarComponent, TaonGithubForkMeCornerComponent, TaonGithubForkMeCornerModule, TaonGithubForkMeRibbonComponent, TaonGithubForkMeRibbonModule, TaonIframeSyncComponent, TaonInjectHTMLDirective, TaonKvAuthorizationComponent, TaonLangSelectorComponent, TaonLongPress, TaonNotFoundComponent, TaonProgressBarComponent, TaonProgressBarModule, TaonRumbleComponent, TaonSessionPasscodeComponent, TaonSettingsComponent, TaonSimpleLayoutComponent, TaonSlideContentComponent, TaonSlideContentContentChildComponent, TaonStripeBuyButtonComponent, TaonThemeComponent, TaonThemeMode, TaonThemeService, TaonYouTubeUtils, TaonYoutubeVideoComponent, ViewMode, myOrgProj, startCli };
2718
2057
  //# sourceMappingURL=taon-ui-browser.mjs.map