quang 19.0.19-2
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.
- package/README.md +25 -0
- package/auth/README.md +160 -0
- package/auth/auth-providers.d.ts +39 -0
- package/auth/auth.service.d.ts +52 -0
- package/auth/directives/has-at-least-one-role.directive.d.ts +26 -0
- package/auth/directives/has-every-role.directive.d.ts +26 -0
- package/auth/directives/is-authenticated.directive.d.ts +14 -0
- package/auth/directives/is-not-authenticated.directive.d.ts +14 -0
- package/auth/guards/index.d.ts +2 -0
- package/auth/guards/is-allowed.guard.d.ts +2 -0
- package/auth/guards/is-authenticated.guard.d.ts +2 -0
- package/auth/index.d.ts +9 -0
- package/auth/logout-on-error.interceptor.d.ts +9 -0
- package/auth/mobile/index.d.ts +1 -0
- package/auth/mobile/mobile-auth-feature.d.ts +2 -0
- package/auth/token-storage/index.d.ts +3 -0
- package/auth/token-storage/local-storage-feature.d.ts +2 -0
- package/auth/token-storage/memory-storage-feature.d.ts +12 -0
- package/auth/token-storage/session-storage-feature.d.ts +2 -0
- package/components/autocomplete/autocomplete.component.d.ts +43 -0
- package/components/autocomplete/index.d.ts +1 -0
- package/components/checkbox/checkbox.component.d.ts +11 -0
- package/components/checkbox/index.d.ts +1 -0
- package/components/date/date.component.d.ts +85 -0
- package/components/date/global-date.component.scss +1 -0
- package/components/date/index.d.ts +1 -0
- package/components/input/index.d.ts +1 -0
- package/components/input/input.component.d.ts +15 -0
- package/components/paginator/index.d.ts +5 -0
- package/components/paginator/paginator-language.service.d.ts +10 -0
- package/components/paginator/paginator.component.d.ts +30 -0
- package/components/paginator/paginator.module.d.ts +7 -0
- package/components/paginator/paginator.service.d.ts +6 -0
- package/components/paginator/paginatorIntl.d.ts +12 -0
- package/components/select/index.d.ts +1 -0
- package/components/select/select.component.d.ts +29 -0
- package/components/shared/ErrorData.d.ts +4 -0
- package/components/shared/index.d.ts +4 -0
- package/components/shared/makeId.d.ts +1 -0
- package/components/shared/option-list/option-list.component.d.ts +50 -0
- package/components/shared/quang-base-component.directive.d.ts +50 -0
- package/components/table/index.d.ts +1 -0
- package/components/table/table.component.d.ts +66 -0
- package/components/wysiwyg/global-wysiswyg.component.scss +1 -0
- package/components/wysiwyg/index.d.ts +1 -0
- package/components/wysiwyg/wysiwyg.component.d.ts +46 -0
- package/device/index.d.ts +1 -0
- package/device/resize-observable.service.d.ts +11 -0
- package/fesm2022/quang-auth-mobile.mjs +48 -0
- package/fesm2022/quang-auth-mobile.mjs.map +1 -0
- package/fesm2022/quang-auth.mjs +473 -0
- package/fesm2022/quang-auth.mjs.map +1 -0
- package/fesm2022/quang-components-autocomplete.mjs +196 -0
- package/fesm2022/quang-components-autocomplete.mjs.map +1 -0
- package/fesm2022/quang-components-checkbox.mjs +53 -0
- package/fesm2022/quang-components-checkbox.mjs.map +1 -0
- package/fesm2022/quang-components-date.mjs +392 -0
- package/fesm2022/quang-components-date.mjs.map +1 -0
- package/fesm2022/quang-components-input.mjs +54 -0
- package/fesm2022/quang-components-input.mjs.map +1 -0
- package/fesm2022/quang-components-paginator.mjs +157 -0
- package/fesm2022/quang-components-paginator.mjs.map +1 -0
- package/fesm2022/quang-components-select.mjs +123 -0
- package/fesm2022/quang-components-select.mjs.map +1 -0
- package/fesm2022/quang-components-shared.mjs +386 -0
- package/fesm2022/quang-components-shared.mjs.map +1 -0
- package/fesm2022/quang-components-table.mjs +162 -0
- package/fesm2022/quang-components-table.mjs.map +1 -0
- package/fesm2022/quang-components-wysiwyg.mjs +230 -0
- package/fesm2022/quang-components-wysiwyg.mjs.map +1 -0
- package/fesm2022/quang-device.mjs +42 -0
- package/fesm2022/quang-device.mjs.map +1 -0
- package/fesm2022/quang-forms.mjs +188 -0
- package/fesm2022/quang-forms.mjs.map +1 -0
- package/fesm2022/quang-loader.mjs +116 -0
- package/fesm2022/quang-loader.mjs.map +1 -0
- package/fesm2022/quang-overlay-modal.mjs +118 -0
- package/fesm2022/quang-overlay-modal.mjs.map +1 -0
- package/fesm2022/quang-overlay-popover.mjs +70 -0
- package/fesm2022/quang-overlay-popover.mjs.map +1 -0
- package/fesm2022/quang-overlay-shared.mjs +359 -0
- package/fesm2022/quang-overlay-shared.mjs.map +1 -0
- package/fesm2022/quang-overlay-toast.mjs +105 -0
- package/fesm2022/quang-overlay-toast.mjs.map +1 -0
- package/fesm2022/quang-overlay-tooltip.mjs +56 -0
- package/fesm2022/quang-overlay-tooltip.mjs.map +1 -0
- package/fesm2022/quang-shared.mjs +29 -0
- package/fesm2022/quang-shared.mjs.map +1 -0
- package/fesm2022/quang-translation.mjs +119 -0
- package/fesm2022/quang-translation.mjs.map +1 -0
- package/fesm2022/quang.mjs +23 -0
- package/fesm2022/quang.mjs.map +1 -0
- package/forms/README.md +6 -0
- package/forms/form-group-model.d.ts +18 -0
- package/forms/index.d.ts +2 -0
- package/forms/validators.d.ts +43 -0
- package/index.d.ts +30 -0
- package/loader/README.md +14 -0
- package/loader/index.d.ts +4 -0
- package/loader/loader-providers.d.ts +23 -0
- package/loader/loader.component.d.ts +23 -0
- package/loader/loader.interceptor.d.ts +10 -0
- package/loader/loader.service.d.ts +9 -0
- package/overlay/modal/index.d.ts +1 -0
- package/overlay/modal/modal.component.d.ts +29 -0
- package/overlay/popover/index.d.ts +1 -0
- package/overlay/popover/popover.component.d.ts +13 -0
- package/overlay/popover/popover.directive.d.ts +11 -0
- package/overlay/shared/CustomViewportRuler.d.ts +63 -0
- package/overlay/shared/index.d.ts +3 -0
- package/overlay/shared/quang-base-overlay.component.d.ts +9 -0
- package/overlay/shared/quang-base-overlay.directive.d.ts +44 -0
- package/overlay/toast/index.d.ts +2 -0
- package/overlay/toast/toast.component.d.ts +13 -0
- package/overlay/toast/toast.service.d.ts +27 -0
- package/overlay/tooltip/index.d.ts +2 -0
- package/overlay/tooltip/tooltip.component.d.ts +11 -0
- package/overlay/tooltip/tooltip.directive.d.ts +11 -0
- package/package.json +146 -0
- package/shared/index.d.ts +1 -0
- package/shared/intercept-utils.d.ts +13 -0
- package/translation/README.md +21 -0
- package/translation/index.d.ts +4 -0
- package/translation/translation-loader.service.d.ts +10 -0
- package/translation/translation-providers.d.ts +28 -0
- package/translation/translation.service.d.ts +15 -0
- package/translation/translations.tokens.d.ts +5 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Quang
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project quang` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project quang`.
|
|
8
|
+
|
|
9
|
+
> Note: Don't forget to add `--project quang` or else it will be added to the default project in your `angular.json` file.
|
|
10
|
+
|
|
11
|
+
## Build
|
|
12
|
+
|
|
13
|
+
Run `ng build quang` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
14
|
+
|
|
15
|
+
## Publishing
|
|
16
|
+
|
|
17
|
+
After building your library with `ng build quang`, go to the dist folder `cd dist/quang` and run `npm publish`.
|
|
18
|
+
|
|
19
|
+
## Running unit tests
|
|
20
|
+
|
|
21
|
+
Run `ng test quang` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
22
|
+
|
|
23
|
+
## Further help
|
|
24
|
+
|
|
25
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
package/auth/README.md
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Quang Auth
|
|
2
|
+
|
|
3
|
+
Quang Auth provides a comprehensive set of tools and utilities based on OIDC (Open ID Connect) for managing
|
|
4
|
+
authentication within your Angular application.
|
|
5
|
+
|
|
6
|
+
This service encapsulates authentication logic, making it reusable and maintainable across different parts of your
|
|
7
|
+
application.
|
|
8
|
+
|
|
9
|
+
To use this set be sure to have installed 'angular-oauth2-oidc' dependency.
|
|
10
|
+
|
|
11
|
+
## Directives
|
|
12
|
+
|
|
13
|
+
This section outlines the custom directives provided by the Quang Auth.
|
|
14
|
+
|
|
15
|
+
### QuangIsAuthenticatedDirective
|
|
16
|
+
|
|
17
|
+
This directive shows content only after user login.
|
|
18
|
+
|
|
19
|
+
To use it import [QuangIsAuthenticatedDirective](./directives/is-authenticated.directive.ts) and put it in your
|
|
20
|
+
template.
|
|
21
|
+
|
|
22
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
23
|
+
|
|
24
|
+
```
|
|
25
|
+
<ng-container *quangIsAuthenticated>
|
|
26
|
+
your HTML content here
|
|
27
|
+
</ng-container>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### QuangIsNotAuthenticatedDirective
|
|
31
|
+
|
|
32
|
+
This directive shows content only if user is not authenticated.
|
|
33
|
+
|
|
34
|
+
To use it import [QuangIsNotAuthenticatedDirective](./directives/is-not-authenticated.directive.ts) and put it in your
|
|
35
|
+
template.
|
|
36
|
+
|
|
37
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
<ng-container *quangIsNotAuthenticated>
|
|
41
|
+
your HTML content here
|
|
42
|
+
</ng-container>
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### QuangHasEveryRoleDirective
|
|
46
|
+
|
|
47
|
+
This directive shows content only if user is not authenticated.
|
|
48
|
+
|
|
49
|
+
To use it import [QuangHasEveryRoleDirective](./directives/has-every-role.directive.ts) and put it in your template.
|
|
50
|
+
|
|
51
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
<div *quangHasEveryRole="['admin', 'editor']">
|
|
55
|
+
This content will only be visible to users with 'admin' and 'editor' roles.
|
|
56
|
+
</div>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### QuangHasAtLeastOneRoleDirective
|
|
60
|
+
|
|
61
|
+
This directive shows content only if user is not authenticated.
|
|
62
|
+
|
|
63
|
+
To use it import [QuangHasAtLeastOneRoleDirective](./directives/has-at-least-one-role.directive.ts) and put it in your
|
|
64
|
+
template.
|
|
65
|
+
|
|
66
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
<div *quangHasAtLeastOneRole="['admin', 'editor']">
|
|
70
|
+
This content will only be visible to users with 'admin' or 'editor' roles.
|
|
71
|
+
</div>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Guards
|
|
75
|
+
|
|
76
|
+
Guards are used to control access to routes in your Angular application. This section details the available guards for
|
|
77
|
+
protecting routes based on user authentication status.
|
|
78
|
+
|
|
79
|
+
### IsAllowedGuard
|
|
80
|
+
|
|
81
|
+
The `quangIsAllowedGuardFactory` allows access to route only if user has definited roles.
|
|
82
|
+
|
|
83
|
+
[quangIsAllowedGuardFactory](./guards/is-allowed.guard.ts)
|
|
84
|
+
|
|
85
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
export const routes: Routes = [
|
|
89
|
+
{
|
|
90
|
+
path: '',
|
|
91
|
+
redirectTo: 'components-test',
|
|
92
|
+
pathMatch: 'full',
|
|
93
|
+
canActivate: [quangIsAllowedGuardFactory(['adming', 'editor'], 'every')]
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
path: '**',
|
|
97
|
+
redirectTo: 'components-test',
|
|
98
|
+
},
|
|
99
|
+
]
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### IsAuthenticatedGuard
|
|
103
|
+
|
|
104
|
+
The `quangIsAuthenticatedGuard` allows access to route only if user is authenticated.
|
|
105
|
+
|
|
106
|
+
[quangIsAuthenticatedGuard](./guards/is-authenticated.guard.ts)
|
|
107
|
+
|
|
108
|
+
<h4 style="color:#657ED4">@example</h4>
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
export const routes: Routes = [
|
|
112
|
+
{
|
|
113
|
+
path: '',
|
|
114
|
+
redirectTo: 'components-test',
|
|
115
|
+
pathMatch: 'full',
|
|
116
|
+
canActivate: [quangIsAuthenticatedGuard],
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
path: '**',
|
|
120
|
+
redirectTo: 'components-test',
|
|
121
|
+
},
|
|
122
|
+
]
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Mobile
|
|
126
|
+
|
|
127
|
+
This section covers the mobile-specific functionalities offered by the Quang Auth service.
|
|
128
|
+
|
|
129
|
+
Function `withMobileAuth()` in [mobile-auth-feature.ts](./mobile/mobile-auth-feature.ts) return if auth is managed in a
|
|
130
|
+
mobile app.
|
|
131
|
+
|
|
132
|
+
### Auth Providers
|
|
133
|
+
|
|
134
|
+
[auth-providers.ts](./auth-providers.ts)
|
|
135
|
+
|
|
136
|
+
This section describes the configuration options for the Quang Auth service. It details the providers that need to be
|
|
137
|
+
registered in your Angular application's configuration (app.config.ts) to enable authentication functionality.
|
|
138
|
+
|
|
139
|
+
### Auth Service
|
|
140
|
+
|
|
141
|
+
[`QuangAuthService`](./auth.service.ts) provides a set of functions, models, and interfaces for interacting with the
|
|
142
|
+
authentication system. This section documents the available methods, data structures, and contracts for using the Auth
|
|
143
|
+
service effectively.
|
|
144
|
+
|
|
145
|
+
The service DOES NOT handle automatically the roles for the user. It's needed to call the `addRoles()` method to add
|
|
146
|
+
roles to the user after login.
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
userSubscription$ = toObservable(this.authService.user)
|
|
150
|
+
.pipe(
|
|
151
|
+
takeUntilDestroyed(),
|
|
152
|
+
tap((u) => console.log('u ---->', u)),
|
|
153
|
+
map((user) => user?.['info'].realm_access.roles as string[]), // customize with your actual handling of roles
|
|
154
|
+
filter((roles) => roles.length > 0),
|
|
155
|
+
tap((roles) => {
|
|
156
|
+
this.authService.addRoles(roles)
|
|
157
|
+
})
|
|
158
|
+
)
|
|
159
|
+
.subscribe()
|
|
160
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { EnvironmentProviders, Provider } from '@angular/core';
|
|
2
|
+
import { type QuangFeature, QuangFeatureKind } from 'quang';
|
|
3
|
+
import { type QuangAuthConfig } from './auth.service';
|
|
4
|
+
export declare function provideAuth(authConfig?: QuangAuthConfig, ...features: QuangAuthFeatures[]): EnvironmentProviders;
|
|
5
|
+
export declare function withAuth(authConfig?: QuangAuthConfig, ...features: QuangAuthFeatures[]): QuangFeature<QuangFeatureKind.LoaderFeature>;
|
|
6
|
+
/**
|
|
7
|
+
* Helper type to represent a QuangAuth feature.
|
|
8
|
+
*
|
|
9
|
+
* @publicApi
|
|
10
|
+
*/
|
|
11
|
+
export interface QuangAuthFeature<FeatureKind extends QuangAuthFeatureKind> {
|
|
12
|
+
ɵkind: FeatureKind;
|
|
13
|
+
ɵproviders: (Provider | EnvironmentProviders)[];
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Helper function to create an object that represents a QuangAuth feature.
|
|
17
|
+
*/
|
|
18
|
+
export declare function quangAuthFeature<FeatureKind extends QuangAuthFeatureKind>(kind: FeatureKind, providers: (Provider | EnvironmentProviders)[]): QuangAuthFeature<FeatureKind>;
|
|
19
|
+
/**
|
|
20
|
+
* A type alias that represents all QuangAuth features available for use with `provideAuth`.
|
|
21
|
+
* Features can be enabled by adding special functions to the `provideAuth` call.
|
|
22
|
+
* See documentation for each symbol to find corresponding function name. See also `provideAuth`
|
|
23
|
+
* documentation on how to use those functions.
|
|
24
|
+
*
|
|
25
|
+
* @see {@link provideAuth}
|
|
26
|
+
*
|
|
27
|
+
* @publicApi
|
|
28
|
+
*/
|
|
29
|
+
export type QuangAuthFeatures = QuangAuthFeature<QuangAuthFeatureKind>;
|
|
30
|
+
/**
|
|
31
|
+
* The list of features as an enum to uniquely type each feature.
|
|
32
|
+
*/
|
|
33
|
+
export declare const enum QuangAuthFeatureKind {
|
|
34
|
+
MobileAuthFeature = 0,
|
|
35
|
+
SessionStorageFeature = 1,
|
|
36
|
+
LocalStorageFeature = 2,
|
|
37
|
+
MemoryStorageFeature = 3,
|
|
38
|
+
LogoutOnErrorFeature = 4
|
|
39
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { EnvironmentProviders, InjectionToken } from '@angular/core';
|
|
2
|
+
import { AuthConfig } from 'angular-oauth2-oidc';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const AUTH_CONFIG: InjectionToken<QuangAuthConfig | undefined>;
|
|
5
|
+
export interface QuangAuthConfig extends AuthConfig {
|
|
6
|
+
autoLogin: boolean;
|
|
7
|
+
sendAccessToken: boolean;
|
|
8
|
+
urlsToSendToken: string[];
|
|
9
|
+
revokeTokensOnLogout?: boolean;
|
|
10
|
+
getUserProfileOnLoginSuccess?: boolean;
|
|
11
|
+
useSilentRefresh: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function provideQuangAuthConfig(authConfig?: QuangAuthConfig): EnvironmentProviders;
|
|
14
|
+
export declare const OPEN_URI: InjectionToken<(uri: string) => void | undefined>;
|
|
15
|
+
export declare function provideOpenURI(openURI: (uri: string) => void | undefined): EnvironmentProviders;
|
|
16
|
+
interface TokenStatus {
|
|
17
|
+
accessToken: string | null;
|
|
18
|
+
accessTokenExpiresAt: number | null;
|
|
19
|
+
idToken: string | null;
|
|
20
|
+
idTokenExpiresAt: number | null;
|
|
21
|
+
refreshToken: string | null;
|
|
22
|
+
}
|
|
23
|
+
export declare class QuangAuthService {
|
|
24
|
+
private config;
|
|
25
|
+
logLevel: "normal" | "verbose" | null;
|
|
26
|
+
private oAuthService;
|
|
27
|
+
private state;
|
|
28
|
+
loginChecked: import("@ngrx/signals/src/deep-signal").Signal<boolean>;
|
|
29
|
+
isAuthenticated: import("@angular/core").Signal<boolean>;
|
|
30
|
+
authenticationError: import("@ngrx/signals/src/deep-signal").Signal<boolean>;
|
|
31
|
+
tokenStatus: import("@ngrx/signals").DeepSignal<TokenStatus>;
|
|
32
|
+
roles: import("@ngrx/signals/src/deep-signal").Signal<Set<string>>;
|
|
33
|
+
user: import("@ngrx/signals/src/deep-signal").Signal<Record<string, any> | null>;
|
|
34
|
+
constructor();
|
|
35
|
+
init(): Promise<void>;
|
|
36
|
+
checkForAuthentication(forceRefresh?: boolean): Promise<boolean | undefined>;
|
|
37
|
+
private refreshAuth;
|
|
38
|
+
login(): void;
|
|
39
|
+
logout(): Promise<void>;
|
|
40
|
+
private loginError;
|
|
41
|
+
getUserProfile(): Promise<void>;
|
|
42
|
+
private setTokens;
|
|
43
|
+
waitForLoginCheck(): Promise<void>;
|
|
44
|
+
getAuthResult(): Promise<boolean>;
|
|
45
|
+
addRoles(rolesToAdd: string[]): void;
|
|
46
|
+
removeRoles(rolesToRemove: string[]): void;
|
|
47
|
+
hasEveryRole(roles: string[]): boolean;
|
|
48
|
+
hasAtLeastOneRole(roles: string[]): boolean;
|
|
49
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangAuthService, never>;
|
|
50
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<QuangAuthService>;
|
|
51
|
+
}
|
|
52
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EmbeddedViewRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { QuangAuthService } from '../auth.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* This directive conditionally renders the associated template if the authenticated user
|
|
6
|
+
* has at least one of the specified roles. By using the `QuangAuthService.hasAtLeastOneRole()` method it checks the user's roles against
|
|
7
|
+
* the required roles provided through the `quangHasAtLeastOneRole` directive.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <div *quangHasAtLeastOneRole="['admin', 'editor']">
|
|
11
|
+
* This content will only be visible to users with 'admin' or 'editor' roles.
|
|
12
|
+
* </div>
|
|
13
|
+
*/
|
|
14
|
+
export declare class QuangHasAtLeastOneRoleDirective {
|
|
15
|
+
logLevel: "normal" | "verbose" | null;
|
|
16
|
+
targetRoles: import("@angular/core").InputSignal<string[]>;
|
|
17
|
+
viewContainerRef: ViewContainerRef;
|
|
18
|
+
embeddedViewRef: EmbeddedViewRef<unknown> | null;
|
|
19
|
+
templateRef: TemplateRef<any>;
|
|
20
|
+
authService: QuangAuthService;
|
|
21
|
+
takeUntilDestroyed: import("rxjs").MonoTypeOperatorFunction<unknown>;
|
|
22
|
+
changeDetectorRef: ChangeDetectorRef;
|
|
23
|
+
hideViewIfNotAllowed: import("@angular/core").EffectRef;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangHasAtLeastOneRoleDirective, never>;
|
|
25
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<QuangHasAtLeastOneRoleDirective, "[quangHasAtLeastOneRole]", never, { "targetRoles": { "alias": "quangHasAtLeastOneRole"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EmbeddedViewRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { QuangAuthService } from '../auth.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* This directive conditionally renders the associated template if the authenticated user
|
|
6
|
+
* has every of the specified roles. By using the `QuangAuthService.hasEveryRole()` method it checks the user's roles against
|
|
7
|
+
* the required roles provided through the `quangHasEveryRole` required input.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* <div *quangHasEveryRole="['admin', 'editor']">
|
|
11
|
+
* This content will only be visible to users with 'admin' and 'editor' roles.
|
|
12
|
+
* </div>
|
|
13
|
+
*/
|
|
14
|
+
export declare class QuangHasEveryRoleDirective {
|
|
15
|
+
logLevel: "normal" | "verbose" | null;
|
|
16
|
+
targetRoles: import("@angular/core").InputSignal<string[]>;
|
|
17
|
+
viewContainerRef: ViewContainerRef;
|
|
18
|
+
embeddedViewRef: EmbeddedViewRef<unknown> | null;
|
|
19
|
+
templateRef: TemplateRef<any>;
|
|
20
|
+
authService: QuangAuthService;
|
|
21
|
+
takeUntilDestroyed: import("rxjs").MonoTypeOperatorFunction<unknown>;
|
|
22
|
+
changeDetectorRef: ChangeDetectorRef;
|
|
23
|
+
hideViewIfNotAllowed: import("@angular/core").EffectRef;
|
|
24
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangHasEveryRoleDirective, never>;
|
|
25
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<QuangHasEveryRoleDirective, "[quangHasEveryRole]", never, { "targetRoles": { "alias": "quangHasEveryRole"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EmbeddedViewRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { QuangAuthService } from '../auth.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class QuangIsAuthenticatedDirective {
|
|
5
|
+
viewContainerRef: ViewContainerRef;
|
|
6
|
+
templateRef: TemplateRef<any>;
|
|
7
|
+
embeddedViewRef: EmbeddedViewRef<any> | null;
|
|
8
|
+
authService: QuangAuthService;
|
|
9
|
+
takeUntilDestroyed: import("rxjs").MonoTypeOperatorFunction<unknown>;
|
|
10
|
+
changeDetectorRef: ChangeDetectorRef;
|
|
11
|
+
hideViewIfNotAuthenticated: import("@angular/core").EffectRef;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangIsAuthenticatedDirective, never>;
|
|
13
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<QuangIsAuthenticatedDirective, "[quangIsAuthenticated]", never, {}, {}, never, never, true, never>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ChangeDetectorRef, EmbeddedViewRef, TemplateRef, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { QuangAuthService } from '../auth.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class QuangIsNotAuthenticatedDirective {
|
|
5
|
+
viewContainerRef: ViewContainerRef;
|
|
6
|
+
templateRef: TemplateRef<any>;
|
|
7
|
+
embeddedViewRef: EmbeddedViewRef<any> | null;
|
|
8
|
+
authService: QuangAuthService;
|
|
9
|
+
takeUntilDestroyed: import("rxjs").MonoTypeOperatorFunction<unknown>;
|
|
10
|
+
changeDetectorRef: ChangeDetectorRef;
|
|
11
|
+
showViewIfNotAuthenticated: import("@angular/core").EffectRef;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangIsNotAuthenticatedDirective, never>;
|
|
13
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<QuangIsNotAuthenticatedDirective, "[quangIsNotAuthenticated]", never, {}, {}, never, never, true, never>;
|
|
14
|
+
}
|
package/auth/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './auth-providers';
|
|
2
|
+
export * from './auth.service';
|
|
3
|
+
export * from './directives/has-at-least-one-role.directive';
|
|
4
|
+
export * from './directives/has-every-role.directive';
|
|
5
|
+
export * from './directives/is-authenticated.directive';
|
|
6
|
+
export * from './directives/is-not-authenticated.directive';
|
|
7
|
+
export * from './guards';
|
|
8
|
+
export * from './logout-on-error.interceptor';
|
|
9
|
+
export * from './token-storage';
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { HttpInterceptorFn } from '@angular/common/http';
|
|
2
|
+
import { InjectionToken } from '@angular/core';
|
|
3
|
+
import { UrlData } from 'quang/shared';
|
|
4
|
+
import { QuangAuthFeature, QuangAuthFeatureKind } from './auth-providers';
|
|
5
|
+
export declare const LOGOUT_RETRIES: InjectionToken<number>;
|
|
6
|
+
export declare const LOGOUT_STATUSES: InjectionToken<number[]>;
|
|
7
|
+
export declare const LOGOUT_EXCLUDED_URLS: InjectionToken<UrlData[]>;
|
|
8
|
+
export declare const logoutOnErrorInterceptor: HttpInterceptorFn;
|
|
9
|
+
export declare function withLogoutOnError(excludedUrls?: UrlData[], statuses?: number[], retries?: number): QuangAuthFeature<QuangAuthFeatureKind.LogoutOnErrorFeature>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mobile-auth-feature';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { OAuthStorage } from 'angular-oauth2-oidc';
|
|
2
|
+
import { QuangAuthFeature, QuangAuthFeatureKind } from '../auth-providers';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class MemoryStorage implements OAuthStorage {
|
|
5
|
+
private data;
|
|
6
|
+
getItem(key: string): string;
|
|
7
|
+
removeItem(key: string): void;
|
|
8
|
+
setItem(key: string, data: string): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<MemoryStorage, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<MemoryStorage>;
|
|
11
|
+
}
|
|
12
|
+
export declare function withMemoryStorage(): QuangAuthFeature<QuangAuthFeatureKind.MemoryStorageFeature>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Subject, Subscription } from 'rxjs';
|
|
2
|
+
import { OptionListParentType, QuangBaseComponent, QuangOptionListComponent, SelectOption } from 'quang/components/shared';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class QuangAutocompleteComponent extends QuangBaseComponent<string | number> {
|
|
5
|
+
syncFormWithText: import("@angular/core").InputSignal<boolean>;
|
|
6
|
+
optionListMaxHeight: import("@angular/core").InputSignal<string>;
|
|
7
|
+
selectOptions: import("@angular/core").InputSignal<SelectOption[]>;
|
|
8
|
+
translateValue: import("@angular/core").InputSignal<boolean>;
|
|
9
|
+
scrollBehaviorOnOpen: import("@angular/core").InputSignal<ScrollBehavior>;
|
|
10
|
+
optionList: import("@angular/core").Signal<QuangOptionListComponent | undefined>;
|
|
11
|
+
/**
|
|
12
|
+
* Only emits the value without saving it in ngControl
|
|
13
|
+
*/
|
|
14
|
+
emitOnly: import("@angular/core").InputSignal<boolean>;
|
|
15
|
+
_showOptions: import("@angular/core").WritableSignal<boolean | null>;
|
|
16
|
+
_inputValue: import("@angular/core").WritableSignal<string>;
|
|
17
|
+
_optionHideTimeout: import("@angular/core").WritableSignal<any>;
|
|
18
|
+
inputValue$: Subject<string>;
|
|
19
|
+
selectOptionsChange: Subscription;
|
|
20
|
+
_filteredOptions: import("@angular/core").Signal<SelectOption[]>;
|
|
21
|
+
selectedOption: import("@angular/core").OutputEmitterRef<string | number | null>;
|
|
22
|
+
searchTextChange: import("@angular/core").OutputEmitterRef<string>;
|
|
23
|
+
searchTextDebounce: import("@angular/core").InputSignal<number>;
|
|
24
|
+
internalFilterOptions: import("@angular/core").InputSignal<boolean>;
|
|
25
|
+
readonly ParentType = OptionListParentType.AUTOCOMPLETE;
|
|
26
|
+
formValueChange$: Subscription | undefined;
|
|
27
|
+
constructor();
|
|
28
|
+
setupFormControl(): void;
|
|
29
|
+
showOptionVisibility(): void;
|
|
30
|
+
hideOptionVisibility(skipTimeout?: boolean): void;
|
|
31
|
+
onChangeInput(value: any): void;
|
|
32
|
+
filterOptions(value: string): SelectOption[];
|
|
33
|
+
onChangedHandler(value: string | number): void;
|
|
34
|
+
onValueChange(value: string | number, hideOptions?: boolean): void;
|
|
35
|
+
checkInputValue(): void;
|
|
36
|
+
writeValue(val: string | number): void;
|
|
37
|
+
onBlurInput(event: FocusEvent): void;
|
|
38
|
+
onBlurHandler(): void;
|
|
39
|
+
onBlurOptionList(event: any): void;
|
|
40
|
+
setInputValue(resetOnMiss?: boolean): void;
|
|
41
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangAutocompleteComponent, never>;
|
|
42
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<QuangAutocompleteComponent, "quang-autocomplete", never, { "syncFormWithText": { "alias": "syncFormWithText"; "required": false; "isSignal": true; }; "optionListMaxHeight": { "alias": "optionListMaxHeight"; "required": false; "isSignal": true; }; "selectOptions": { "alias": "selectOptions"; "required": true; "isSignal": true; }; "translateValue": { "alias": "translateValue"; "required": false; "isSignal": true; }; "scrollBehaviorOnOpen": { "alias": "scrollBehaviorOnOpen"; "required": false; "isSignal": true; }; "emitOnly": { "alias": "emitOnly"; "required": false; "isSignal": true; }; "searchTextDebounce": { "alias": "searchTextDebounce"; "required": false; "isSignal": true; }; "internalFilterOptions": { "alias": "internalFilterOptions"; "required": false; "isSignal": true; }; }, { "selectedOption": "selectedOption"; "searchTextChange": "searchTextChange"; }, never, never, true, never>;
|
|
43
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './autocomplete.component';
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { QuangBaseComponent } from 'quang/components/shared';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type LabelPosition = 'top' | 'left' | 'right' | 'bottom';
|
|
4
|
+
export declare class QuangCheckboxComponent extends QuangBaseComponent<boolean> {
|
|
5
|
+
labelPosition: import("@angular/core").InputSignal<LabelPosition>;
|
|
6
|
+
checkType: import("@angular/core").InputSignal<"checkbox" | "toggle">;
|
|
7
|
+
removeMargin: import("@angular/core").InputSignal<boolean>;
|
|
8
|
+
onChangedEventHandler($event: Event): void;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangCheckboxComponent, never>;
|
|
10
|
+
static ɵcmp: i0.ɵɵ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, never, true, never>;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './checkbox.component';
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import AirDatepicker, { AirDatepickerLocale, AirDatepickerOptions, AirDatepickerPosition } from 'air-datepicker';
|
|
3
|
+
import { QuangTranslationService } from 'quang/translation';
|
|
4
|
+
import { QuangBaseComponent } from 'quang/components/shared';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export interface DateRange {
|
|
7
|
+
dateFrom: string | null;
|
|
8
|
+
dateTo: string | null;
|
|
9
|
+
}
|
|
10
|
+
export type QuangDatepickerOptions = AirDatepickerOptions;
|
|
11
|
+
export declare class QuangDateComponent extends QuangBaseComponent<string | DateRange | null> {
|
|
12
|
+
/**
|
|
13
|
+
* Format to use to show on the input field.
|
|
14
|
+
* The format is based on the standard {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table}
|
|
15
|
+
* Default: dd/MM/yyyy
|
|
16
|
+
* @default dd/MM/yyyy
|
|
17
|
+
*/
|
|
18
|
+
dateFormat: import("@angular/core").InputSignal<string>;
|
|
19
|
+
/**
|
|
20
|
+
* Format to use to show on the time inside the input field.
|
|
21
|
+
* The format is based on the standard {@link https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table}
|
|
22
|
+
* Default: HH:mm
|
|
23
|
+
* @default HH:mm
|
|
24
|
+
*/
|
|
25
|
+
timeFormat: import("@angular/core").InputSignal<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Calendar locale, if not provided the component will try to use the one provided in {@link QuangTranslationService}
|
|
28
|
+
* if the language is not set in {@link QuangTranslationService} it will use the browser language
|
|
29
|
+
* Use this parameter only to override default behavior
|
|
30
|
+
*/
|
|
31
|
+
activeLanguageOverride: import("@angular/core").InputSignal<string | undefined>;
|
|
32
|
+
/**
|
|
33
|
+
* If true enable the timepicker inside the calendar
|
|
34
|
+
*/
|
|
35
|
+
timepicker: import("@angular/core").InputSignal<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* The message to show inside the input if the date is invalid
|
|
38
|
+
*/
|
|
39
|
+
invalidDateMessage: import("@angular/core").InputSignal<string>;
|
|
40
|
+
showOnlyTimepicker: import("@angular/core").InputSignal<boolean>;
|
|
41
|
+
minHour: import("@angular/core").InputSignal<number>;
|
|
42
|
+
maxHour: import("@angular/core").InputSignal<number>;
|
|
43
|
+
minMinute: import("@angular/core").InputSignal<number>;
|
|
44
|
+
maxMinute: import("@angular/core").InputSignal<number>;
|
|
45
|
+
minDate: import("@angular/core").InputSignal<Date | undefined>;
|
|
46
|
+
maxDate: import("@angular/core").InputSignal<Date | undefined>;
|
|
47
|
+
showInline: import("@angular/core").InputSignal<boolean>;
|
|
48
|
+
calendarClasses: import("@angular/core").InputSignal<string>;
|
|
49
|
+
buttonClass: import("@angular/core").InputSignal<string>;
|
|
50
|
+
datepickerOptions: import("@angular/core").InputSignal<QuangDatepickerOptions | undefined>;
|
|
51
|
+
_inputForDate: import("@angular/core").Signal<ElementRef<any> | undefined>;
|
|
52
|
+
contentTemplate: import("@angular/core").Signal<ElementRef<any>>;
|
|
53
|
+
hasNoContent: import("@angular/core").Signal<boolean>;
|
|
54
|
+
_quangTranslationService: import("@angular/core").WritableSignal<QuangTranslationService | undefined>;
|
|
55
|
+
_quangTranslationActiveLang: import("@angular/core").Signal<string | null>;
|
|
56
|
+
multipleDatesSeparator: import("@angular/core").InputSignal<string>;
|
|
57
|
+
rangeSelection: import("@angular/core").InputSignal<boolean>;
|
|
58
|
+
_activeLanguage: import("@angular/core").Signal<string | null | undefined>;
|
|
59
|
+
_airDatepickerInstance: import("@angular/core").WritableSignal<AirDatepicker<HTMLInputElement> | undefined>;
|
|
60
|
+
searchTextDebounce: import("@angular/core").InputSignal<number>;
|
|
61
|
+
targetPosition: import("@angular/core").WritableSignal<AirDatepickerPosition>;
|
|
62
|
+
_generateAirDatepickerEffect: import("@angular/core").EffectRef;
|
|
63
|
+
valueFormat: import("@angular/core").Signal<string>;
|
|
64
|
+
inputValueString: import("@angular/core").Signal<string>;
|
|
65
|
+
constructor();
|
|
66
|
+
showTimepicker: import("@angular/core").Signal<boolean>;
|
|
67
|
+
isMouseInsideCalendar: import("@angular/core").WritableSignal<boolean>;
|
|
68
|
+
isMouseOutsideCalendar: import("@angular/core").Signal<boolean>;
|
|
69
|
+
setupCalendar(): void;
|
|
70
|
+
onChangeText($event: Event): void;
|
|
71
|
+
onBlurHandler(): void;
|
|
72
|
+
setupInputStringToDate(value: string): Date;
|
|
73
|
+
onChangedHandler(value: string | DateRange | null): void;
|
|
74
|
+
onHideCalendar(): void;
|
|
75
|
+
formatDate(val: string | DateRange | null): string;
|
|
76
|
+
openDatePicker(): void;
|
|
77
|
+
interceptInputInteraction($event: Event): void;
|
|
78
|
+
getLocale(): AirDatepickerLocale;
|
|
79
|
+
onCancel(): void;
|
|
80
|
+
private dateToUtc;
|
|
81
|
+
private setCalendarPosition;
|
|
82
|
+
private setupTimepicker;
|
|
83
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangDateComponent, never>;
|
|
84
|
+
static ɵcmp: i0.ɵɵ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, ["*"], true, never>;
|
|
85
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@import 'air-datepicker/air-datepicker.css';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './date.component';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './input.component';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { QuangBaseComponent } from 'quang/components/shared';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type InputType = 'text' | 'textarea' | 'password' | 'email' | 'number' | 'url' | 'search' | 'tel' | 'color';
|
|
4
|
+
export declare class QuangInputComponent extends QuangBaseComponent<string | number> {
|
|
5
|
+
componentType: import("@angular/core").InputSignal<InputType>;
|
|
6
|
+
maxLengthText: import("@angular/core").InputSignal<number | null>;
|
|
7
|
+
minLengthText: import("@angular/core").InputSignal<number | null>;
|
|
8
|
+
minNumber: import("@angular/core").InputSignal<number | undefined>;
|
|
9
|
+
maxNumber: import("@angular/core").InputSignal<number | undefined>;
|
|
10
|
+
componentStep: import("@angular/core").InputSignal<number>;
|
|
11
|
+
resizable: import("@angular/core").InputSignal<boolean>;
|
|
12
|
+
constructor();
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangInputComponent, never>;
|
|
14
|
+
static ɵcmp: i0.ɵɵ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; }; }, {}, never, never, true, never>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { TranslocoService } from '@jsverse/transloco';
|
|
2
|
+
import { PaginatorIntl } from './paginatorIntl';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class QuangPaginatorLanguageService extends PaginatorIntl {
|
|
5
|
+
private readonly transloco;
|
|
6
|
+
constructor(transloco: TranslocoService);
|
|
7
|
+
getAndInitTranslations(): void;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<QuangPaginatorLanguageService, never>;
|
|
9
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<QuangPaginatorLanguageService>;
|
|
10
|
+
}
|