quang 20.7.2-1 → 20.7.3

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 (305) hide show
  1. package/auth/index.d.ts +194 -0
  2. package/auth/mobile/index.d.ts +5 -0
  3. package/components/autocomplete/index.d.ts +296 -0
  4. package/components/checkbox/index.d.ts +15 -0
  5. package/components/date/index.d.ts +103 -0
  6. package/components/input/index.d.ts +24 -0
  7. package/components/paginator/index.d.ts +67 -0
  8. package/components/radio-group/index.d.ts +31 -0
  9. package/components/select/index.d.ts +56 -0
  10. package/components/shared/index.d.ts +133 -0
  11. package/components/table/index.d.ts +83 -0
  12. package/components/tabs/index.d.ts +29 -0
  13. package/components/wysiwyg/index.d.ts +51 -0
  14. package/data-handling/index.d.ts +10 -0
  15. package/device/index.d.ts +14 -0
  16. package/fesm2022/quang-auth-mobile.mjs +48 -0
  17. package/fesm2022/quang-auth-mobile.mjs.map +1 -0
  18. package/fesm2022/quang-auth.mjs +473 -0
  19. package/fesm2022/quang-auth.mjs.map +1 -0
  20. package/fesm2022/quang-components-autocomplete.mjs +760 -0
  21. package/fesm2022/quang-components-autocomplete.mjs.map +1 -0
  22. package/fesm2022/quang-components-checkbox.mjs +54 -0
  23. package/fesm2022/quang-components-checkbox.mjs.map +1 -0
  24. package/fesm2022/quang-components-date.mjs +599 -0
  25. package/fesm2022/quang-components-date.mjs.map +1 -0
  26. package/fesm2022/quang-components-input.mjs +62 -0
  27. package/fesm2022/quang-components-input.mjs.map +1 -0
  28. package/fesm2022/quang-components-paginator.mjs +160 -0
  29. package/fesm2022/quang-components-paginator.mjs.map +1 -0
  30. package/fesm2022/quang-components-radio-group.mjs +59 -0
  31. package/fesm2022/quang-components-radio-group.mjs.map +1 -0
  32. package/fesm2022/quang-components-select.mjs +183 -0
  33. package/fesm2022/quang-components-select.mjs.map +1 -0
  34. package/fesm2022/quang-components-shared.mjs +468 -0
  35. package/fesm2022/quang-components-shared.mjs.map +1 -0
  36. package/fesm2022/quang-components-table.mjs +238 -0
  37. package/fesm2022/quang-components-table.mjs.map +1 -0
  38. package/fesm2022/quang-components-tabs.mjs +61 -0
  39. package/fesm2022/quang-components-tabs.mjs.map +1 -0
  40. package/fesm2022/quang-components-wysiwyg.mjs +230 -0
  41. package/fesm2022/quang-components-wysiwyg.mjs.map +1 -0
  42. package/fesm2022/quang-data-handling.mjs +54 -0
  43. package/fesm2022/quang-data-handling.mjs.map +1 -0
  44. package/fesm2022/quang-device.mjs +42 -0
  45. package/fesm2022/quang-device.mjs.map +1 -0
  46. package/fesm2022/quang-forms.mjs +188 -0
  47. package/fesm2022/quang-forms.mjs.map +1 -0
  48. package/fesm2022/quang-loader.mjs +115 -0
  49. package/fesm2022/quang-loader.mjs.map +1 -0
  50. package/fesm2022/quang-overlay-modal.mjs +318 -0
  51. package/fesm2022/quang-overlay-modal.mjs.map +1 -0
  52. package/fesm2022/quang-overlay-popover.mjs +70 -0
  53. package/fesm2022/quang-overlay-popover.mjs.map +1 -0
  54. package/fesm2022/quang-overlay-shared.mjs +356 -0
  55. package/fesm2022/quang-overlay-shared.mjs.map +1 -0
  56. package/fesm2022/quang-overlay-toast.mjs +108 -0
  57. package/fesm2022/quang-overlay-toast.mjs.map +1 -0
  58. package/fesm2022/quang-overlay-tooltip.mjs +56 -0
  59. package/fesm2022/quang-overlay-tooltip.mjs.map +1 -0
  60. package/fesm2022/quang-shared.mjs +29 -0
  61. package/fesm2022/quang-shared.mjs.map +1 -0
  62. package/fesm2022/quang-translation.mjs +119 -0
  63. package/fesm2022/quang-translation.mjs.map +1 -0
  64. package/fesm2022/quang.mjs +23 -0
  65. package/fesm2022/quang.mjs.map +1 -0
  66. package/forms/index.d.ts +51 -0
  67. package/index.d.ts +34 -0
  68. package/loader/index.d.ts +69 -0
  69. package/overlay/modal/index.d.ts +97 -0
  70. package/overlay/popover/index.d.ts +25 -0
  71. package/overlay/shared/index.d.ts +116 -0
  72. package/overlay/toast/index.d.ts +44 -0
  73. package/overlay/tooltip/index.d.ts +23 -0
  74. package/package.json +109 -2
  75. package/shared/index.d.ts +16 -0
  76. package/translation/index.d.ts +62 -0
  77. package/README-it.md +0 -104
  78. package/auth/.gitkeep +0 -0
  79. package/auth/README-it.md +0 -158
  80. package/auth/auth-providers.spec.ts +0 -9
  81. package/auth/auth-providers.ts +0 -77
  82. package/auth/auth.service.spec.ts +0 -9
  83. package/auth/auth.service.ts +0 -245
  84. package/auth/directives/has-at-least-one-role.directive.spec.ts +0 -9
  85. package/auth/directives/has-at-least-one-role.directive.ts +0 -59
  86. package/auth/directives/has-every-role.directive.spec.ts +0 -9
  87. package/auth/directives/has-every-role.directive.ts +0 -59
  88. package/auth/directives/is-authenticated.directive.spec.ts +0 -9
  89. package/auth/directives/is-authenticated.directive.ts +0 -39
  90. package/auth/directives/is-not-authenticated.directive.spec.ts +0 -9
  91. package/auth/directives/is-not-authenticated.directive.ts +0 -39
  92. package/auth/guards/index.ts +0 -2
  93. package/auth/guards/is-allowed.guard.spec.ts +0 -9
  94. package/auth/guards/is-allowed.guard.ts +0 -14
  95. package/auth/guards/is-authenticated.guard.spec.ts +0 -9
  96. package/auth/guards/is-authenticated.guard.ts +0 -9
  97. package/auth/index.ts +0 -9
  98. package/auth/logout-on-error.interceptor.spec.ts +0 -9
  99. package/auth/logout-on-error.interceptor.ts +0 -69
  100. package/auth/mobile/index.ts +0 -1
  101. package/auth/mobile/mobile-auth-feature.spec.ts +0 -9
  102. package/auth/mobile/mobile-auth-feature.ts +0 -45
  103. package/auth/mobile/ng-package.json +0 -6
  104. package/auth/ng-package.json +0 -6
  105. package/auth/token-storage/index.ts +0 -3
  106. package/auth/token-storage/local-storage-feature.spec.ts +0 -9
  107. package/auth/token-storage/local-storage-feature.ts +0 -15
  108. package/auth/token-storage/memory-storage-feature.spec.ts +0 -13
  109. package/auth/token-storage/memory-storage-feature.ts +0 -32
  110. package/auth/token-storage/session-storage-feature.spec.ts +0 -9
  111. package/auth/token-storage/session-storage-feature.ts +0 -15
  112. package/components/README-it.md +0 -20
  113. package/components/README.md +0 -21
  114. package/components/autocomplete/README-it.md +0 -152
  115. package/components/autocomplete/__snapshots__/autocomplete.component.spec.ts.snap +0 -5
  116. package/components/autocomplete/autocomplete.component.html +0 -165
  117. package/components/autocomplete/autocomplete.component.scss +0 -115
  118. package/components/autocomplete/autocomplete.component.spec.ts +0 -2966
  119. package/components/autocomplete/autocomplete.component.ts +0 -848
  120. package/components/autocomplete/index.ts +0 -1
  121. package/components/autocomplete/ng-package.json +0 -6
  122. package/components/checkbox/README-it.md +0 -94
  123. package/components/checkbox/checkbox.component.html +0 -59
  124. package/components/checkbox/checkbox.component.scss +0 -118
  125. package/components/checkbox/checkbox.component.spec.ts +0 -131
  126. package/components/checkbox/checkbox.component.ts +0 -46
  127. package/components/checkbox/index.ts +0 -1
  128. package/components/checkbox/ng-package.json +0 -6
  129. package/components/date/README-it.md +0 -151
  130. package/components/date/__snapshots__/date.component.spec.ts.snap +0 -207
  131. package/components/date/date.browser.spec.ts +0 -320
  132. package/components/date/date.component.html +0 -81
  133. package/components/date/date.component.scss +0 -120
  134. package/components/date/date.component.spec.ts +0 -860
  135. package/components/date/date.component.ts +0 -726
  136. package/components/date/index.ts +0 -1
  137. package/components/date/ng-package.json +0 -6
  138. package/components/input/README-it.md +0 -228
  139. package/components/input/index.ts +0 -1
  140. package/components/input/input.component.html +0 -102
  141. package/components/input/input.component.scss +0 -47
  142. package/components/input/input.component.spec.ts +0 -123
  143. package/components/input/input.component.ts +0 -68
  144. package/components/input/ng-package.json +0 -6
  145. package/components/paginator/README-it.md +0 -65
  146. package/components/paginator/index.ts +0 -5
  147. package/components/paginator/ng-package.json +0 -6
  148. package/components/paginator/paginator-language.service.spec.ts +0 -9
  149. package/components/paginator/paginator-language.service.ts +0 -36
  150. package/components/paginator/paginator.component.html +0 -222
  151. package/components/paginator/paginator.component.scss +0 -74
  152. package/components/paginator/paginator.component.spec.ts +0 -9
  153. package/components/paginator/paginator.component.ts +0 -102
  154. package/components/paginator/paginator.module.spec.ts +0 -7
  155. package/components/paginator/paginator.module.ts +0 -8
  156. package/components/paginator/paginator.service.spec.ts +0 -9
  157. package/components/paginator/paginator.service.ts +0 -11
  158. package/components/paginator/paginatorIntl.spec.ts +0 -9
  159. package/components/paginator/paginatorIntl.ts +0 -21
  160. package/components/radio-group/index.ts +0 -1
  161. package/components/radio-group/ng-package.json +0 -6
  162. package/components/radio-group/radio-group.component.html +0 -77
  163. package/components/radio-group/radio-group.component.scss +0 -3
  164. package/components/radio-group/radio-group.component.spec.ts +0 -127
  165. package/components/radio-group/radio-group.component.ts +0 -65
  166. package/components/select/README-it.md +0 -119
  167. package/components/select/index.ts +0 -1
  168. package/components/select/ng-package.json +0 -6
  169. package/components/select/select.component.html +0 -107
  170. package/components/select/select.component.scss +0 -52
  171. package/components/select/select.component.spec.ts +0 -206
  172. package/components/select/select.component.ts +0 -210
  173. package/components/shared/ErrorData.ts +0 -4
  174. package/components/shared/index.ts +0 -4
  175. package/components/shared/makeId.spec.ts +0 -9
  176. package/components/shared/makeId.ts +0 -9
  177. package/components/shared/ng-package.json +0 -6
  178. package/components/shared/option-list/option-list.component.html +0 -65
  179. package/components/shared/option-list/option-list.component.scss +0 -86
  180. package/components/shared/option-list/option-list.component.spec.ts +0 -506
  181. package/components/shared/option-list/option-list.component.ts +0 -371
  182. package/components/shared/quang-base-component.directive.ts +0 -223
  183. package/components/shared/sass/_input-search.scss +0 -9
  184. package/components/table/README-it.md +0 -286
  185. package/components/table/index.ts +0 -1
  186. package/components/table/ng-package.json +0 -6
  187. package/components/table/table.component.html +0 -188
  188. package/components/table/table.component.scss +0 -134
  189. package/components/table/table.component.spec.ts +0 -9
  190. package/components/table/table.component.ts +0 -319
  191. package/components/tabs/README-it.md +0 -399
  192. package/components/tabs/__snapshots__/tabs.component.spec.ts.snap +0 -7
  193. package/components/tabs/index.ts +0 -1
  194. package/components/tabs/ng-package.json +0 -6
  195. package/components/tabs/tabs.component.html +0 -29
  196. package/components/tabs/tabs.component.scss +0 -25
  197. package/components/tabs/tabs.component.spec.ts +0 -646
  198. package/components/tabs/tabs.component.ts +0 -59
  199. package/components/wysiwyg/README-it.md +0 -87
  200. package/components/wysiwyg/index.ts +0 -1
  201. package/components/wysiwyg/ng-package.json +0 -6
  202. package/components/wysiwyg/wysiwyg.component.html +0 -50
  203. package/components/wysiwyg/wysiwyg.component.scss +0 -98
  204. package/components/wysiwyg/wysiwyg.component.spec.ts +0 -9
  205. package/components/wysiwyg/wysiwyg.component.ts +0 -270
  206. package/data-handling/conversion.spec.ts +0 -158
  207. package/data-handling/conversion.ts +0 -20
  208. package/data-handling/download.spec.ts +0 -178
  209. package/data-handling/download.ts +0 -30
  210. package/data-handling/index.ts +0 -2
  211. package/data-handling/ng-package.json +0 -6
  212. package/device/index.ts +0 -1
  213. package/device/ng-package.json +0 -6
  214. package/device/resize-observable.service.spec.ts +0 -9
  215. package/device/resize-observable.service.ts +0 -46
  216. package/eslint.config.mjs +0 -31
  217. package/forms/form-group-model.ts +0 -20
  218. package/forms/index.ts +0 -2
  219. package/forms/ng-package.json +0 -6
  220. package/forms/validators.spec.ts +0 -25
  221. package/forms/validators.ts +0 -185
  222. package/index.ts +0 -50
  223. package/loader/README-it.md +0 -81
  224. package/loader/index.ts +0 -4
  225. package/loader/loader-providers.spec.ts +0 -13
  226. package/loader/loader-providers.ts +0 -38
  227. package/loader/loader.component.html +0 -10
  228. package/loader/loader.component.scss +0 -46
  229. package/loader/loader.component.spec.ts +0 -22
  230. package/loader/loader.component.ts +0 -41
  231. package/loader/loader.interceptor.spec.ts +0 -9
  232. package/loader/loader.interceptor.ts +0 -39
  233. package/loader/loader.service.spec.ts +0 -9
  234. package/loader/loader.service.ts +0 -20
  235. package/loader/ng-package.json +0 -6
  236. package/networking/.gitkeep +0 -0
  237. package/ng-package.json +0 -8
  238. package/overlay/README-it.md +0 -28
  239. package/overlay/README.md +0 -28
  240. package/overlay/global-overlay.scss +0 -1
  241. package/overlay/modal/README-it.md +0 -97
  242. package/overlay/modal/README-service-it.md +0 -233
  243. package/overlay/modal/README-service.md +0 -233
  244. package/overlay/modal/index.ts +0 -4
  245. package/overlay/modal/modal-ref.ts +0 -31
  246. package/overlay/modal/modal.component.html +0 -21
  247. package/overlay/modal/modal.component.scss +0 -96
  248. package/overlay/modal/modal.component.spec.ts +0 -72
  249. package/overlay/modal/modal.component.ts +0 -138
  250. package/overlay/modal/modal.service.ts +0 -202
  251. package/overlay/modal/models/ModalAnimationMode.ts +0 -6
  252. package/overlay/modal/models/ModalInstance.ts +0 -12
  253. package/overlay/modal/models/ModalOptions.ts +0 -12
  254. package/overlay/modal/models/index.ts +0 -2
  255. package/overlay/modal/ng-package.json +0 -6
  256. package/overlay/popover/README-it.md +0 -40
  257. package/overlay/popover/index.ts +0 -1
  258. package/overlay/popover/ng-package.json +0 -6
  259. package/overlay/popover/popover.component.html +0 -13
  260. package/overlay/popover/popover.component.scss +0 -107
  261. package/overlay/popover/popover.component.spec.ts +0 -22
  262. package/overlay/popover/popover.component.ts +0 -50
  263. package/overlay/popover/popover.directive.spec.ts +0 -81
  264. package/overlay/popover/popover.directive.ts +0 -19
  265. package/overlay/shared/CustomViewportRuler.spec.ts +0 -9
  266. package/overlay/shared/CustomViewportRuler.ts +0 -156
  267. package/overlay/shared/index.ts +0 -3
  268. package/overlay/shared/ng-package.json +0 -6
  269. package/overlay/shared/quang-base-overlay.component.ts +0 -15
  270. package/overlay/shared/quang-base-overlay.directive.ts +0 -235
  271. package/overlay/toast/README-it.md +0 -64
  272. package/overlay/toast/index.ts +0 -2
  273. package/overlay/toast/ng-package.json +0 -6
  274. package/overlay/toast/toast.component.html +0 -49
  275. package/overlay/toast/toast.component.scss +0 -74
  276. package/overlay/toast/toast.component.spec.ts +0 -80
  277. package/overlay/toast/toast.component.ts +0 -65
  278. package/overlay/toast/toast.service.spec.ts +0 -66
  279. package/overlay/toast/toast.service.ts +0 -64
  280. package/overlay/tooltip/README-it.md +0 -36
  281. package/overlay/tooltip/index.ts +0 -2
  282. package/overlay/tooltip/ng-package.json +0 -6
  283. package/overlay/tooltip/tooltip.component.html +0 -8
  284. package/overlay/tooltip/tooltip.component.scss +0 -8
  285. package/overlay/tooltip/tooltip.component.spec.ts +0 -32
  286. package/overlay/tooltip/tooltip.component.ts +0 -30
  287. package/overlay/tooltip/tooltip.directive.spec.ts +0 -82
  288. package/overlay/tooltip/tooltip.directive.ts +0 -17
  289. package/shared/index.ts +0 -1
  290. package/shared/intercept-utils.spec.ts +0 -19
  291. package/shared/intercept-utils.ts +0 -31
  292. package/shared/ng-package.json +0 -6
  293. package/test-setup.ts +0 -29
  294. package/translation/index.ts +0 -4
  295. package/translation/ng-package.json +0 -6
  296. package/translation/translation-loader.service.spec.ts +0 -9
  297. package/translation/translation-loader.service.ts +0 -18
  298. package/translation/translation-providers.spec.ts +0 -13
  299. package/translation/translation-providers.ts +0 -77
  300. package/translation/translation.service.spec.ts +0 -9
  301. package/translation/translation.service.ts +0 -38
  302. package/translation/translations.tokens.ts +0 -6
  303. package/tsconfig.lib.json +0 -13
  304. package/tsconfig.lib.prod.json +0 -11
  305. package/tsconfig.spec.json +0 -13
@@ -0,0 +1,194 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, Provider, ViewContainerRef, EmbeddedViewRef, TemplateRef, ChangeDetectorRef } from '@angular/core';
3
+ import { QuangFeature, QuangFeatureKind } from 'quang';
4
+ import * as _ngrx_signals from '@ngrx/signals';
5
+ import { AuthConfig, OAuthStorage } from 'angular-oauth2-oidc';
6
+ import * as rxjs from 'rxjs';
7
+ import { CanActivateFn } from '@angular/router';
8
+ import { HttpInterceptorFn } from '@angular/common/http';
9
+ import { UrlData } from 'quang/shared';
10
+
11
+ declare const AUTH_CONFIG: InjectionToken<QuangAuthConfig | undefined>;
12
+ interface QuangAuthConfig extends AuthConfig {
13
+ autoLogin: boolean;
14
+ sendAccessToken: boolean;
15
+ urlsToSendToken: string[];
16
+ revokeTokensOnLogout?: boolean;
17
+ getUserProfileOnLoginSuccess?: boolean;
18
+ useSilentRefresh: boolean;
19
+ }
20
+ declare function provideQuangAuthConfig(authConfig?: QuangAuthConfig): EnvironmentProviders;
21
+ declare const OPEN_URI: InjectionToken<(uri: string) => void | undefined>;
22
+ declare function provideOpenURI(openURI: (uri: string) => void | undefined): EnvironmentProviders;
23
+ interface TokenStatus {
24
+ accessToken: string | null;
25
+ accessTokenExpiresAt: number | null;
26
+ idToken: string | null;
27
+ idTokenExpiresAt: number | null;
28
+ refreshToken: string | null;
29
+ }
30
+ declare class QuangAuthService {
31
+ private config;
32
+ logLevel: "normal" | "verbose" | null;
33
+ private oAuthService;
34
+ private state;
35
+ loginChecked: i0.Signal<boolean>;
36
+ isAuthenticated: i0.Signal<boolean>;
37
+ authenticationError: i0.Signal<boolean>;
38
+ tokenStatus: _ngrx_signals.DeepSignal<TokenStatus>;
39
+ roles: i0.Signal<Set<string>>;
40
+ user: i0.Signal<Record<string, any> | null>;
41
+ constructor();
42
+ init(): Promise<void>;
43
+ checkForAuthentication(forceRefresh?: boolean): Promise<boolean | undefined>;
44
+ private refreshAuth;
45
+ login(): void;
46
+ logout(): Promise<void>;
47
+ private loginError;
48
+ getUserProfile(): Promise<void>;
49
+ private setTokens;
50
+ waitForLoginCheck(): Promise<void>;
51
+ getAuthResult(): Promise<boolean>;
52
+ addRoles(rolesToAdd: string[]): void;
53
+ removeRoles(rolesToRemove: string[]): void;
54
+ hasEveryRole(roles: string[]): boolean;
55
+ hasAtLeastOneRole(roles: string[]): boolean;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuangAuthService, never>;
57
+ static ɵprov: i0.ɵɵInjectableDeclaration<QuangAuthService>;
58
+ }
59
+
60
+ declare function provideAuth(authConfig?: QuangAuthConfig, ...features: QuangAuthFeatures[]): EnvironmentProviders;
61
+ declare function withAuth(authConfig?: QuangAuthConfig, ...features: QuangAuthFeatures[]): QuangFeature<QuangFeatureKind.LoaderFeature>;
62
+ /**
63
+ * Helper type to represent a QuangAuth feature.
64
+ *
65
+ * @publicApi
66
+ */
67
+ interface QuangAuthFeature<FeatureKind extends QuangAuthFeatureKind> {
68
+ ɵkind: FeatureKind;
69
+ ɵproviders: (Provider | EnvironmentProviders)[];
70
+ }
71
+ /**
72
+ * Helper function to create an object that represents a QuangAuth feature.
73
+ */
74
+ declare function quangAuthFeature<FeatureKind extends QuangAuthFeatureKind>(kind: FeatureKind, providers: (Provider | EnvironmentProviders)[]): QuangAuthFeature<FeatureKind>;
75
+ /**
76
+ * A type alias that represents all QuangAuth features available for use with `provideAuth`.
77
+ * Features can be enabled by adding special functions to the `provideAuth` call.
78
+ * See documentation for each symbol to find corresponding function name. See also `provideAuth`
79
+ * documentation on how to use those functions.
80
+ *
81
+ * @see {@link provideAuth}
82
+ *
83
+ * @publicApi
84
+ */
85
+ type QuangAuthFeatures = QuangAuthFeature<QuangAuthFeatureKind>;
86
+ /**
87
+ * The list of features as an enum to uniquely type each feature.
88
+ */
89
+ declare const enum QuangAuthFeatureKind {
90
+ MobileAuthFeature = 0,
91
+ SessionStorageFeature = 1,
92
+ LocalStorageFeature = 2,
93
+ MemoryStorageFeature = 3,
94
+ LogoutOnErrorFeature = 4
95
+ }
96
+
97
+ /**
98
+ * This directive conditionally renders the associated template if the authenticated user
99
+ * has at least one of the specified roles. By using the `QuangAuthService.hasAtLeastOneRole()` method it checks the user's roles against
100
+ * the required roles provided through the `quangHasAtLeastOneRole` directive.
101
+ *
102
+ * @example
103
+ * <div *quangHasAtLeastOneRole="['admin', 'editor']">
104
+ * This content will only be visible to users with 'admin' or 'editor' roles.
105
+ * </div>
106
+ */
107
+ declare class QuangHasAtLeastOneRoleDirective {
108
+ logLevel: "normal" | "verbose" | null;
109
+ targetRoles: i0.InputSignal<string[]>;
110
+ viewContainerRef: ViewContainerRef;
111
+ embeddedViewRef: EmbeddedViewRef<unknown> | null;
112
+ templateRef: TemplateRef<any>;
113
+ authService: QuangAuthService;
114
+ takeUntilDestroyed: rxjs.MonoTypeOperatorFunction<unknown>;
115
+ changeDetectorRef: ChangeDetectorRef;
116
+ hideViewIfNotAllowed: i0.EffectRef;
117
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuangHasAtLeastOneRoleDirective, never>;
118
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QuangHasAtLeastOneRoleDirective, "[quangHasAtLeastOneRole]", never, { "targetRoles": { "alias": "quangHasAtLeastOneRole"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
119
+ }
120
+
121
+ /**
122
+ * This directive conditionally renders the associated template if the authenticated user
123
+ * has every of the specified roles. By using the `QuangAuthService.hasEveryRole()` method it checks the user's roles against
124
+ * the required roles provided through the `quangHasEveryRole` required input.
125
+ *
126
+ * @example
127
+ * <div *quangHasEveryRole="['admin', 'editor']">
128
+ * This content will only be visible to users with 'admin' and 'editor' roles.
129
+ * </div>
130
+ */
131
+ declare class QuangHasEveryRoleDirective {
132
+ logLevel: "normal" | "verbose" | null;
133
+ targetRoles: i0.InputSignal<string[]>;
134
+ viewContainerRef: ViewContainerRef;
135
+ embeddedViewRef: EmbeddedViewRef<unknown> | null;
136
+ templateRef: TemplateRef<any>;
137
+ authService: QuangAuthService;
138
+ takeUntilDestroyed: rxjs.MonoTypeOperatorFunction<unknown>;
139
+ changeDetectorRef: ChangeDetectorRef;
140
+ hideViewIfNotAllowed: i0.EffectRef;
141
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuangHasEveryRoleDirective, never>;
142
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QuangHasEveryRoleDirective, "[quangHasEveryRole]", never, { "targetRoles": { "alias": "quangHasEveryRole"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
143
+ }
144
+
145
+ declare class QuangIsAuthenticatedDirective {
146
+ viewContainerRef: ViewContainerRef;
147
+ templateRef: TemplateRef<unknown>;
148
+ embeddedViewRef: EmbeddedViewRef<unknown> | null;
149
+ authService: QuangAuthService;
150
+ takeUntilDestroyed: rxjs.MonoTypeOperatorFunction<unknown>;
151
+ changeDetectorRef: ChangeDetectorRef;
152
+ hideViewIfNotAuthenticated: i0.EffectRef;
153
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuangIsAuthenticatedDirective, never>;
154
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QuangIsAuthenticatedDirective, "[quangIsAuthenticated]", never, {}, {}, never, never, true, never>;
155
+ }
156
+
157
+ declare class QuangIsNotAuthenticatedDirective {
158
+ viewContainerRef: ViewContainerRef;
159
+ templateRef: TemplateRef<unknown>;
160
+ embeddedViewRef: EmbeddedViewRef<unknown> | null;
161
+ authService: QuangAuthService;
162
+ takeUntilDestroyed: rxjs.MonoTypeOperatorFunction<unknown>;
163
+ changeDetectorRef: ChangeDetectorRef;
164
+ showViewIfNotAuthenticated: i0.EffectRef;
165
+ static ɵfac: i0.ɵɵFactoryDeclaration<QuangIsNotAuthenticatedDirective, never>;
166
+ static ɵdir: i0.ɵɵDirectiveDeclaration<QuangIsNotAuthenticatedDirective, "[quangIsNotAuthenticated]", never, {}, {}, never, never, true, never>;
167
+ }
168
+
169
+ declare const quangIsAllowedGuardFactory: (roles: string[], behavior: "every" | "atLeastOne") => CanActivateFn;
170
+
171
+ declare const quangIsAuthenticatedGuard: CanActivateFn;
172
+
173
+ declare const LOGOUT_RETRIES: InjectionToken<number>;
174
+ declare const LOGOUT_STATUSES: InjectionToken<number[]>;
175
+ declare const LOGOUT_EXCLUDED_URLS: InjectionToken<UrlData[]>;
176
+ declare const logoutOnErrorInterceptor: HttpInterceptorFn;
177
+ declare function withLogoutOnError(excludedUrls?: UrlData[], statuses?: number[], retries?: number): QuangAuthFeature<QuangAuthFeatureKind.LogoutOnErrorFeature>;
178
+
179
+ declare function withLocalStorage(): QuangAuthFeature<QuangAuthFeatureKind.LocalStorageFeature>;
180
+
181
+ declare class MemoryStorage implements OAuthStorage {
182
+ private data;
183
+ getItem(key: string): string;
184
+ removeItem(key: string): void;
185
+ setItem(key: string, data: string): void;
186
+ static ɵfac: i0.ɵɵFactoryDeclaration<MemoryStorage, never>;
187
+ static ɵprov: i0.ɵɵInjectableDeclaration<MemoryStorage>;
188
+ }
189
+ declare function withMemoryStorage(): QuangAuthFeature<QuangAuthFeatureKind.MemoryStorageFeature>;
190
+
191
+ declare function withSessionStorage(): QuangAuthFeature<QuangAuthFeatureKind.SessionStorageFeature>;
192
+
193
+ export { AUTH_CONFIG, LOGOUT_EXCLUDED_URLS, LOGOUT_RETRIES, LOGOUT_STATUSES, MemoryStorage, OPEN_URI, QuangAuthFeatureKind, QuangAuthService, QuangHasAtLeastOneRoleDirective, QuangHasEveryRoleDirective, QuangIsAuthenticatedDirective, QuangIsNotAuthenticatedDirective, logoutOnErrorInterceptor, provideAuth, provideOpenURI, provideQuangAuthConfig, quangAuthFeature, quangIsAllowedGuardFactory, quangIsAuthenticatedGuard, withAuth, withLocalStorage, withLogoutOnError, withMemoryStorage, withSessionStorage };
194
+ export type { QuangAuthConfig, QuangAuthFeature, QuangAuthFeatures };
@@ -0,0 +1,5 @@
1
+ import { QuangAuthFeature, QuangAuthFeatureKind } from 'quang/auth';
2
+
3
+ declare function withMobileAuth(toolbarColor?: string, presentationStyle?: 'popover' | 'fullscreen'): QuangAuthFeature<QuangAuthFeatureKind.MobileAuthFeature>;
4
+
5
+ export { withMobileAuth };
@@ -0,0 +1,296 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { QuangBaseComponent, SelectOption, QuangOptionListComponent, OptionListParentType } from 'quang/components/shared';
3
+
4
+ /**
5
+ * Autocomplete component for providing suggestion options {@link SelectOption} as the user types.
6
+ *
7
+ * @usageNotes
8
+ * This component displays a list of filtered options based on user input.
9
+ * It allows users to select an option from the suggestions and emits the event `selectedOption` when an option is selected.
10
+ *
11
+ * `searchTextDebounce` is by default set to 300ms.
12
+ */
13
+ declare class QuangAutocompleteComponent extends QuangBaseComponent<string | number | string[] | number[] | null> {
14
+ /**
15
+ * The list of options to display in the autocomplete dropdown.
16
+ */
17
+ selectOptions: _angular_core.InputSignal<SelectOption[]>;
18
+ /**
19
+ * When true, allows any text input as a valid form value, not just option values.
20
+ * The form value will sync with whatever text the user types.
21
+ * When false (default), the form value must match one of the option values.
22
+ * @default false
23
+ */
24
+ allowFreeText: _angular_core.InputSignal<boolean>;
25
+ /**
26
+ * When true and allowFreeText is false, automatically selects an option if the user's
27
+ * input text matches an option's label exactly (case-insensitive, trimmed).
28
+ * This provides a better UX by auto-selecting when users type a complete option label.
29
+ * @default true
30
+ */
31
+ autoSelectOnExactMatch: _angular_core.InputSignal<boolean>;
32
+ /**
33
+ * When true, updates the form value as the user types (after debounce).
34
+ * When false (default), the form value is only updated when:
35
+ * - User selects an option from the dropdown
36
+ * - User stops typing and the input loses focus (blur)
37
+ * @default false
38
+ */
39
+ updateValueOnType: _angular_core.InputSignal<boolean>;
40
+ /**
41
+ * Whether the form value can be any text or must match one of the options.
42
+ * When true, the form value syncs with the input text.
43
+ * When false (default), the form value must be one of the option values.
44
+ * @default false
45
+ * @deprecated Use `allowFreeText` instead. This input will be removed in a future version.
46
+ */
47
+ syncFormWithText: _angular_core.InputSignal<boolean>;
48
+ /**
49
+ * Maximum height of the option list before scrolling.
50
+ * @default '200px'
51
+ */
52
+ optionListMaxHeight: _angular_core.InputSignal<string>;
53
+ /**
54
+ * Whether to translate option labels.
55
+ * @default true
56
+ */
57
+ translateValue: _angular_core.InputSignal<boolean>;
58
+ /**
59
+ * Scroll behavior when the option list opens.
60
+ * @default 'smooth'
61
+ */
62
+ scrollBehaviorOnOpen: _angular_core.InputSignal<ScrollBehavior>;
63
+ /**
64
+ * When true, only emits the value without saving it to ngControl.
65
+ * @default false
66
+ */
67
+ emitOnly: _angular_core.InputSignal<boolean>;
68
+ /**
69
+ * Enable multiple selection mode with chips.
70
+ * @default false
71
+ */
72
+ multiple: _angular_core.InputSignal<boolean>;
73
+ /**
74
+ * Maximum length in characters for chip display text.
75
+ * When set, chips will be truncated and show a tooltip with full text.
76
+ * @default 0 (no limit)
77
+ */
78
+ chipMaxLength: _angular_core.InputSignal<number>;
79
+ /**
80
+ * Layout direction for chips in multiple selection mode.
81
+ * @default 'vertical'
82
+ */
83
+ multiSelectDisplayMode: _angular_core.InputSignal<"vertical" | "horizontal">;
84
+ /**
85
+ * Position of chips relative to the input in multiple selection mode.
86
+ * - 'top': Chips are displayed above the input (default)
87
+ * - 'bottom': Chips are displayed below the input
88
+ * @default 'top'
89
+ */
90
+ chipsPosition: _angular_core.InputSignal<"top" | "bottom">;
91
+ /**
92
+ * Debounce time in milliseconds for search text changes.
93
+ * @default 300
94
+ */
95
+ searchTextDebounce: _angular_core.InputSignal<number>;
96
+ /**
97
+ * Whether to filter options internally based on input text.
98
+ * When false, filtering should be handled externally via searchTextChange event.
99
+ * @default true
100
+ */
101
+ internalFilterOptions: _angular_core.InputSignal<boolean>;
102
+ /**
103
+ * Emitted when an option is selected.
104
+ * Emits the selected option's value, or null when cleared.
105
+ */
106
+ selectedOption: _angular_core.OutputEmitterRef<string | number | null>;
107
+ /**
108
+ * Emitted when the search text changes (after debounce).
109
+ * Useful for external filtering or API calls.
110
+ */
111
+ searchTextChange: _angular_core.OutputEmitterRef<string>;
112
+ /** Reference to the option list component */
113
+ protected readonly optionList: _angular_core.Signal<QuangOptionListComponent | undefined>;
114
+ /** Reference to the input element */
115
+ private readonly selectInput;
116
+ /** Reference to the chip container element */
117
+ private readonly chipContainer;
118
+ /** Reference to the main autocomplete container */
119
+ private readonly autocompleteContainer;
120
+ /** Constant for option list parent type */
121
+ readonly ParentType = OptionListParentType.AUTOCOMPLETE;
122
+ /** Height of the input element (used for positioning) */
123
+ readonly inputHeight: _angular_core.WritableSignal<number>;
124
+ /**
125
+ * The display text for the input field.
126
+ * - When searching: shows what the user typed
127
+ * - When allowFreeText/syncFormWithText is true and no matching option: shows the raw value
128
+ * - When not searching: shows the selected option's label (derived from _value)
129
+ */
130
+ readonly _inputValue: _angular_core.Signal<string>;
131
+ /** Whether the option list is currently visible */
132
+ readonly _showOptions: _angular_core.WritableSignal<boolean | null>;
133
+ /** List of selected chip values (for multiple mode) */
134
+ readonly _chipList: _angular_core.WritableSignal<string[]>;
135
+ /** List of selected option objects (for multiple mode) */
136
+ readonly _selectedOptions: _angular_core.WritableSignal<SelectOption[]>;
137
+ /** Filtered options based on search text and chip selection */
138
+ readonly _filteredOptions: _angular_core.Signal<SelectOption[]>;
139
+ /**
140
+ * The value to use for highlighting in the option list.
141
+ * When searching: shows the matched option (if any) based on exact label match
142
+ * When not searching: shows the current form value
143
+ * This keeps highlighting in sync with what will be selected on blur.
144
+ */
145
+ readonly _highlightedValue: _angular_core.Signal<string | number | string[] | number[] | null>;
146
+ /** Whether the user is actively typing/searching */
147
+ protected readonly _isSearching: _angular_core.WritableSignal<boolean>;
148
+ /** The text the user is currently typing while searching */
149
+ protected readonly _userSearchText: _angular_core.WritableSignal<string>;
150
+ /**
151
+ * Internal computed that returns true if free text input is allowed.
152
+ * Combines both `allowFreeText` and deprecated `syncFormWithText` inputs.
153
+ */
154
+ protected readonly _allowFreeTextInternal: _angular_core.Signal<boolean>;
155
+ /**
156
+ * Finds an option whose label exactly matches the given text (case-insensitive, trimmed).
157
+ * @param text The text to match against option labels
158
+ * @returns The matching option, or undefined if no match
159
+ */
160
+ protected findMatchingOption(text: string | null | undefined): SelectOption | undefined;
161
+ /** Timer for search text debounce */
162
+ private _searchDebounceTimer;
163
+ /** Last emitted search text (for distinctUntilChanged behavior) */
164
+ private _lastEmittedSearchText;
165
+ /** Whether the component has been destroyed */
166
+ private _isDestroyed;
167
+ /** Subscription to form value changes */
168
+ private formValueChangeSubscription;
169
+ /** Effect to handle input element setup and keyboard events */
170
+ private readonly onChangeSelectInputEffect;
171
+ /** Subscription to options changes */
172
+ private readonly selectOptionsChangeSubscription;
173
+ /** Subscription to show options changes */
174
+ private readonly showOptionsChangeSubscription;
175
+ constructor();
176
+ setupFormControl(): void;
177
+ writeValue(val: string | number | string[] | number[] | null): void;
178
+ onChangedHandler(value: string | number | string[] | number[] | null): void;
179
+ onBlurHandler(): void;
180
+ /**
181
+ * Shows the option list dropdown.
182
+ */
183
+ showOptionVisibility(): void;
184
+ /**
185
+ * Hides the option list dropdown.
186
+ */
187
+ hideOptionVisibility(): void;
188
+ /**
189
+ * Handles input text changes (typing).
190
+ * @param event The input event
191
+ */
192
+ onChangeInput(event: Event): void;
193
+ /**
194
+ * Handles option selection from the dropdown.
195
+ * @param value The selected option's value
196
+ * @param hideOptions Whether to hide the dropdown after selection
197
+ */
198
+ onValueChange(value: string | number | null, hideOptions?: boolean): void;
199
+ /**
200
+ * Handles keydown events on the input element for accessibility.
201
+ * @param event The keyboard event
202
+ */
203
+ onInputKeydown(event: KeyboardEvent): void;
204
+ /**
205
+ * Handles Escape key press from option list.
206
+ * Closes dropdown and returns focus to input.
207
+ */
208
+ onEscapePressed(): void;
209
+ /**
210
+ * Handles Tab key press from option list.
211
+ * Closes dropdown and allows natural tab navigation.
212
+ */
213
+ onTabPressed(_event: {
214
+ shiftKey: boolean;
215
+ }): void;
216
+ /**
217
+ * Sets focus to the input element.
218
+ */
219
+ focusInput(): void;
220
+ /**
221
+ * Handles input blur event.
222
+ * @param event The focus event
223
+ */
224
+ onBlurInput(event: FocusEvent): void;
225
+ /**
226
+ * Handles blur event on the option list.
227
+ * @param event The blur event (truthy if should hide)
228
+ */
229
+ onBlurOptionList(event: FocusEvent | boolean): void;
230
+ /**
231
+ * Gets the display description for a chip value.
232
+ * @param chipValue The chip's value
233
+ * @returns The chip's display label
234
+ */
235
+ getDescription(chipValue: string | number): string;
236
+ getOptionByValue(value: string | number): SelectOption | undefined;
237
+ getOptionIndex(option: SelectOption): number;
238
+ /**
239
+ * Removes a chip from the selection (multiple mode).
240
+ * @param chipValue The chip value to remove
241
+ */
242
+ deleteChip(chipValue: string | number): void;
243
+ /**
244
+ * Filters options based on input text.
245
+ * @param value The search text
246
+ * @returns Filtered options
247
+ */
248
+ protected filterOptions(value: string): SelectOption[];
249
+ /**
250
+ * Core method that processes text input and updates form value accordingly.
251
+ *
252
+ * Matching logic:
253
+ * - If text matches an option label (case-insensitive, trimmed) and autoSelectOnExactMatch is true, select that option
254
+ * - If no match and allowFreeText is true, use the typed text as value
255
+ * - If no match and allowFreeText is false, clear the value
256
+ *
257
+ * @param text The text to process
258
+ * @param options Configuration options:
259
+ * - exitSearchMode: If true, uses onChangedHandler which exits search mode. If false, stays in search mode.
260
+ * - updateOnMatch: If true, updates form when match found. If false, only clears on no-match.
261
+ * - clearSearchText: If true, clears _userSearchText after processing.
262
+ */
263
+ private processTextToFormValue;
264
+ /**
265
+ * Handles keyboard events on the input element.
266
+ */
267
+ private handleInputKeydown;
268
+ /**
269
+ * Handles changes to the select options input.
270
+ */
271
+ private handleOptionsChange;
272
+ /**
273
+ * Handles form value changes from external sources.
274
+ */
275
+ private handleFormValueChange;
276
+ /**
277
+ * Handles selecting a value (adding to chip list in multiple mode).
278
+ */
279
+ private handleSelectValue;
280
+ /**
281
+ * Emits search text change after debounce.
282
+ * When `updateValueOnType` is true, also updates the form value using the same
283
+ * matching logic as processTextToFormValue (auto-select matching options, or use free text).
284
+ */
285
+ private emitDebouncedSearchText;
286
+ /**
287
+ * Updates the form value and internal _value signal without exiting search mode.
288
+ * This is used when clearing the value during typing - we want to update the form
289
+ * but keep the user in search mode so they can continue typing.
290
+ */
291
+ private updateValueWithoutExitingSearchMode;
292
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangAutocompleteComponent, never>;
293
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangAutocompleteComponent, "quang-autocomplete", never, { "selectOptions": { "alias": "selectOptions"; "required": true; "isSignal": true; }; "allowFreeText": { "alias": "allowFreeText"; "required": false; "isSignal": true; }; "autoSelectOnExactMatch": { "alias": "autoSelectOnExactMatch"; "required": false; "isSignal": true; }; "updateValueOnType": { "alias": "updateValueOnType"; "required": false; "isSignal": true; }; "syncFormWithText": { "alias": "syncFormWithText"; "required": false; "isSignal": true; }; "optionListMaxHeight": { "alias": "optionListMaxHeight"; "required": false; "isSignal": true; }; "translateValue": { "alias": "translateValue"; "required": false; "isSignal": true; }; "scrollBehaviorOnOpen": { "alias": "scrollBehaviorOnOpen"; "required": false; "isSignal": true; }; "emitOnly": { "alias": "emitOnly"; "required": false; "isSignal": true; }; "multiple": { "alias": "multiple"; "required": false; "isSignal": true; }; "chipMaxLength": { "alias": "chipMaxLength"; "required": false; "isSignal": true; }; "multiSelectDisplayMode": { "alias": "multiSelectDisplayMode"; "required": false; "isSignal": true; }; "chipsPosition": { "alias": "chipsPosition"; "required": false; "isSignal": true; }; "searchTextDebounce": { "alias": "searchTextDebounce"; "required": false; "isSignal": true; }; "internalFilterOptions": { "alias": "internalFilterOptions"; "required": false; "isSignal": true; }; }, { "selectedOption": "selectedOption"; "searchTextChange": "searchTextChange"; }, never, ["[help-icon]"], true, never>;
294
+ }
295
+
296
+ export { QuangAutocompleteComponent };
@@ -0,0 +1,15 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { QuangBaseComponent } from 'quang/components/shared';
3
+
4
+ type LabelPosition = 'top' | 'left' | 'right' | 'bottom';
5
+ declare class QuangCheckboxComponent extends QuangBaseComponent<boolean> {
6
+ labelPosition: _angular_core.InputSignal<LabelPosition>;
7
+ checkType: _angular_core.InputSignal<"checkbox" | "toggle">;
8
+ removeMargin: _angular_core.InputSignal<boolean>;
9
+ onChangedEventHandler($event: Event): void;
10
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangCheckboxComponent, never>;
11
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangCheckboxComponent, "quang-checkbox", never, { "labelPosition": { "alias": "labelPosition"; "required": false; "isSignal": true; }; "checkType": { "alias": "checkType"; "required": true; "isSignal": true; }; "removeMargin": { "alias": "removeMargin"; "required": false; "isSignal": true; }; }, {}, never, ["[help-icon]"], true, never>;
12
+ }
13
+
14
+ export { QuangCheckboxComponent };
15
+ export type { LabelPosition };
@@ -0,0 +1,103 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef } from '@angular/core';
3
+ import AirDatepicker, { AirDatepickerOptions, AirDatepickerPosition, AirDatepickerLocale } from 'air-datepicker';
4
+ import { QuangTranslationService } from 'quang/translation';
5
+ import { QuangBaseComponent } from 'quang/components/shared';
6
+
7
+ interface DateRange {
8
+ dateFrom: string | null;
9
+ dateTo: string | null;
10
+ }
11
+ type QuangDatepickerOptions = AirDatepickerOptions;
12
+ declare class QuangDateComponent extends QuangBaseComponent<string | DateRange | null> {
13
+ private readonly _ngZone;
14
+ private readonly _cdr;
15
+ private readonly _appRef;
16
+ private _tickScheduled;
17
+ /**
18
+ * Format to use to show on the input field.
19
+ * The format is based on the standard {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table}
20
+ * Default: dd/MM/yyyy
21
+ * @default dd/MM/yyyy
22
+ */
23
+ dateFormat: _angular_core.InputSignal<string>;
24
+ /**
25
+ * Format to use to show on the time inside the input field.
26
+ * The format is based on the standard {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table}
27
+ * Default: HH:mm
28
+ * @default HH:mm
29
+ */
30
+ timeFormat: _angular_core.InputSignal<string>;
31
+ /**
32
+ * Calendar locale, if not provided the component will try to use the one provided in {@link QuangTranslationService}
33
+ * if the language is not set in {@link QuangTranslationService} it will use the browser language
34
+ * Use this parameter only to override default behavior
35
+ */
36
+ activeLanguageOverride: _angular_core.InputSignal<string | undefined>;
37
+ /**
38
+ * If true enable the timepicker inside the calendar
39
+ */
40
+ timepicker: _angular_core.InputSignal<boolean>;
41
+ /**
42
+ * The message to show inside the input if the date is invalid
43
+ */
44
+ invalidDateMessage: _angular_core.InputSignal<string>;
45
+ showOnlyTimepicker: _angular_core.InputSignal<boolean>;
46
+ minHour: _angular_core.InputSignal<number>;
47
+ maxHour: _angular_core.InputSignal<number>;
48
+ minMinute: _angular_core.InputSignal<number>;
49
+ maxMinute: _angular_core.InputSignal<number>;
50
+ minDate: _angular_core.InputSignal<Date | undefined>;
51
+ maxDate: _angular_core.InputSignal<Date | undefined>;
52
+ showInline: _angular_core.InputSignal<boolean>;
53
+ calendarClasses: _angular_core.InputSignal<string>;
54
+ buttonClass: _angular_core.InputSignal<string>;
55
+ datepickerOptions: _angular_core.InputSignal<QuangDatepickerOptions | undefined>;
56
+ _inputForDate: _angular_core.Signal<ElementRef<any> | undefined>;
57
+ contentTemplate: _angular_core.Signal<ElementRef<any>>;
58
+ hasNoContent: _angular_core.Signal<boolean>;
59
+ _quangTranslationService: _angular_core.WritableSignal<QuangTranslationService | undefined>;
60
+ _quangTranslationActiveLang: _angular_core.Signal<string | null>;
61
+ multipleDatesSeparator: _angular_core.InputSignal<string>;
62
+ rangeSelection: _angular_core.InputSignal<boolean>;
63
+ _activeLanguage: _angular_core.Signal<string | null | undefined>;
64
+ _airDatepickerInstance: _angular_core.WritableSignal<AirDatepicker<HTMLInputElement> | undefined>;
65
+ private readonly _airDatepickerInlineMode;
66
+ searchTextDebounce: _angular_core.InputSignal<number>;
67
+ targetPosition: _angular_core.WritableSignal<AirDatepickerPosition>;
68
+ _generateAirDatepickerEffect: _angular_core.EffectRef;
69
+ valueFormat: _angular_core.Signal<string>;
70
+ inputValueString: _angular_core.Signal<string>;
71
+ constructor();
72
+ showTimepicker: _angular_core.Signal<boolean>;
73
+ isMouseInsideCalendar: _angular_core.WritableSignal<boolean>;
74
+ isMouseOutsideCalendar: _angular_core.Signal<boolean>;
75
+ private _shouldRefocusInputOnHide;
76
+ setupCalendar(): void;
77
+ private handleDisabledState;
78
+ onChangeText($event: Event): void;
79
+ onBlurHandler(): void;
80
+ setupInputStringToDate(value: string): Date;
81
+ onChangedHandler(value: string | DateRange | null): void;
82
+ private propagateValueToControl;
83
+ private requestRender;
84
+ private syncValueFromDatepickerSelection;
85
+ onHideCalendar(): void;
86
+ formatDate(val: string | DateRange | null): string;
87
+ openDatePicker(): void;
88
+ onInputKeydown(event: KeyboardEvent): void;
89
+ interceptInputInteraction($event: Event): void;
90
+ getLocale(): AirDatepickerLocale;
91
+ private unwrapLocaleModule;
92
+ onCancel(): void;
93
+ private dateToUtc;
94
+ private setCalendarPosition;
95
+ private setupTimepicker;
96
+ checkDateMatch(date: string): boolean;
97
+ private setTimepickerInputValues;
98
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangDateComponent, never>;
99
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangDateComponent, "quang-date", never, { "dateFormat": { "alias": "dateFormat"; "required": false; "isSignal": true; }; "timeFormat": { "alias": "timeFormat"; "required": false; "isSignal": true; }; "activeLanguageOverride": { "alias": "activeLanguageOverride"; "required": false; "isSignal": true; }; "timepicker": { "alias": "timepicker"; "required": false; "isSignal": true; }; "invalidDateMessage": { "alias": "invalidDateMessage"; "required": false; "isSignal": true; }; "showOnlyTimepicker": { "alias": "showOnlyTimepicker"; "required": false; "isSignal": true; }; "minHour": { "alias": "minHour"; "required": false; "isSignal": true; }; "maxHour": { "alias": "maxHour"; "required": false; "isSignal": true; }; "minMinute": { "alias": "minMinute"; "required": false; "isSignal": true; }; "maxMinute": { "alias": "maxMinute"; "required": false; "isSignal": true; }; "minDate": { "alias": "minDate"; "required": false; "isSignal": true; }; "maxDate": { "alias": "maxDate"; "required": false; "isSignal": true; }; "showInline": { "alias": "showInline"; "required": false; "isSignal": true; }; "calendarClasses": { "alias": "calendarClasses"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "buttonClass"; "required": false; "isSignal": true; }; "datepickerOptions": { "alias": "datepickerOptions"; "required": false; "isSignal": true; }; "multipleDatesSeparator": { "alias": "multipleDatesSeparator"; "required": false; "isSignal": true; }; "rangeSelection": { "alias": "rangeSelection"; "required": false; "isSignal": true; }; "searchTextDebounce": { "alias": "searchTextDebounce"; "required": false; "isSignal": true; }; }, {}, never, ["[help-icon]", "*"], true, never>;
100
+ }
101
+
102
+ export { QuangDateComponent };
103
+ export type { DateRange, QuangDatepickerOptions };
@@ -0,0 +1,24 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { QuangBaseComponent } from 'quang/components/shared';
3
+
4
+ type InputType = 'text' | 'textarea' | 'password' | 'email' | 'number' | 'url' | 'search' | 'tel' | 'color';
5
+ declare class QuangInputComponent extends QuangBaseComponent<string | number> {
6
+ componentType: _angular_core.InputSignal<InputType>;
7
+ maxLengthText: _angular_core.InputSignal<number | null>;
8
+ minLengthText: _angular_core.InputSignal<number | null>;
9
+ minNumber: _angular_core.InputSignal<number | undefined>;
10
+ maxNumber: _angular_core.InputSignal<number | undefined>;
11
+ componentStep: _angular_core.InputSignal<number>;
12
+ resizable: _angular_core.InputSignal<boolean>;
13
+ buttonClass: _angular_core.InputSignal<string>;
14
+ showHidePasswordButton: _angular_core.InputSignal<boolean>;
15
+ showPassword: _angular_core.WritableSignal<boolean>;
16
+ componentInputType: _angular_core.Signal<InputType>;
17
+ constructor();
18
+ onTogglePasswordVisibility(): void;
19
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuangInputComponent, never>;
20
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QuangInputComponent, "quang-input", never, { "componentType": { "alias": "componentType"; "required": true; "isSignal": true; }; "maxLengthText": { "alias": "maxLengthText"; "required": false; "isSignal": true; }; "minLengthText": { "alias": "minLengthText"; "required": false; "isSignal": true; }; "minNumber": { "alias": "minNumber"; "required": false; "isSignal": true; }; "maxNumber": { "alias": "maxNumber"; "required": false; "isSignal": true; }; "componentStep": { "alias": "componentStep"; "required": false; "isSignal": true; }; "resizable": { "alias": "resizable"; "required": false; "isSignal": true; }; "buttonClass": { "alias": "buttonClass"; "required": false; "isSignal": true; }; "showHidePasswordButton": { "alias": "showHidePasswordButton"; "required": false; "isSignal": true; }; }, {}, never, ["[help-icon]", "[hide-password]", "[show-password]"], true, never>;
21
+ }
22
+
23
+ export { QuangInputComponent };
24
+ export type { InputType };