@molecule/app-angular 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/LICENSE +115 -0
  2. package/dist/i18n-reactive.d.ts +41 -0
  3. package/dist/i18n-reactive.d.ts.map +1 -0
  4. package/dist/i18n-reactive.js +46 -0
  5. package/dist/i18n-reactive.js.map +1 -0
  6. package/dist/index.d.ts +84 -0
  7. package/dist/index.d.ts.map +1 -0
  8. package/dist/index.js +84 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/providers.d.ts +96 -0
  11. package/dist/providers.d.ts.map +1 -0
  12. package/dist/providers.js +144 -0
  13. package/dist/providers.js.map +1 -0
  14. package/dist/services/async-state.service.d.ts +50 -0
  15. package/dist/services/async-state.service.d.ts.map +1 -0
  16. package/dist/services/async-state.service.js +109 -0
  17. package/dist/services/async-state.service.js.map +1 -0
  18. package/dist/services/auth.service.d.ts +105 -0
  19. package/dist/services/auth.service.d.ts.map +1 -0
  20. package/dist/services/auth.service.js +124 -0
  21. package/dist/services/auth.service.js.map +1 -0
  22. package/dist/services/capacitor-app.service.d.ts +46 -0
  23. package/dist/services/capacitor-app.service.d.ts.map +1 -0
  24. package/dist/services/capacitor-app.service.js +53 -0
  25. package/dist/services/capacitor-app.service.js.map +1 -0
  26. package/dist/services/change-password.service.d.ts +37 -0
  27. package/dist/services/change-password.service.d.ts.map +1 -0
  28. package/dist/services/change-password.service.js +34 -0
  29. package/dist/services/change-password.service.js.map +1 -0
  30. package/dist/services/device.service.d.ts +35 -0
  31. package/dist/services/device.service.d.ts.map +1 -0
  32. package/dist/services/device.service.js +29 -0
  33. package/dist/services/device.service.js.map +1 -0
  34. package/dist/services/forms.service.d.ts +237 -0
  35. package/dist/services/forms.service.d.ts.map +1 -0
  36. package/dist/services/forms.service.js +280 -0
  37. package/dist/services/forms.service.js.map +1 -0
  38. package/dist/services/http.service.d.ts +118 -0
  39. package/dist/services/http.service.d.ts.map +1 -0
  40. package/dist/services/http.service.js +171 -0
  41. package/dist/services/http.service.js.map +1 -0
  42. package/dist/services/i18n.service.d.ts +111 -0
  43. package/dist/services/i18n.service.d.ts.map +1 -0
  44. package/dist/services/i18n.service.js +135 -0
  45. package/dist/services/i18n.service.js.map +1 -0
  46. package/dist/services/index.d.ts +27 -0
  47. package/dist/services/index.d.ts.map +1 -0
  48. package/dist/services/index.js +27 -0
  49. package/dist/services/index.js.map +1 -0
  50. package/dist/services/logger.service.d.ts +79 -0
  51. package/dist/services/logger.service.d.ts.map +1 -0
  52. package/dist/services/logger.service.js +110 -0
  53. package/dist/services/logger.service.js.map +1 -0
  54. package/dist/services/login.service.d.ts +37 -0
  55. package/dist/services/login.service.d.ts.map +1 -0
  56. package/dist/services/login.service.js +34 -0
  57. package/dist/services/login.service.js.map +1 -0
  58. package/dist/services/oauth.service.d.ts +110 -0
  59. package/dist/services/oauth.service.d.ts.map +1 -0
  60. package/dist/services/oauth.service.js +214 -0
  61. package/dist/services/oauth.service.js.map +1 -0
  62. package/dist/services/password-reset.service.d.ts +41 -0
  63. package/dist/services/password-reset.service.d.ts.map +1 -0
  64. package/dist/services/password-reset.service.js +45 -0
  65. package/dist/services/password-reset.service.js.map +1 -0
  66. package/dist/services/platform.service.d.ts +39 -0
  67. package/dist/services/platform.service.d.ts.map +1 -0
  68. package/dist/services/platform.service.js +33 -0
  69. package/dist/services/platform.service.js.map +1 -0
  70. package/dist/services/promise.service.d.ts +40 -0
  71. package/dist/services/promise.service.d.ts.map +1 -0
  72. package/dist/services/promise.service.js +85 -0
  73. package/dist/services/promise.service.js.map +1 -0
  74. package/dist/services/push.service.d.ts +45 -0
  75. package/dist/services/push.service.d.ts.map +1 -0
  76. package/dist/services/push.service.js +64 -0
  77. package/dist/services/push.service.js.map +1 -0
  78. package/dist/services/router.service.d.ts +114 -0
  79. package/dist/services/router.service.d.ts.map +1 -0
  80. package/dist/services/router.service.js +142 -0
  81. package/dist/services/router.service.js.map +1 -0
  82. package/dist/services/signup.service.d.ts +37 -0
  83. package/dist/services/signup.service.d.ts.map +1 -0
  84. package/dist/services/signup.service.js +34 -0
  85. package/dist/services/signup.service.js.map +1 -0
  86. package/dist/services/state.service.d.ts +82 -0
  87. package/dist/services/state.service.d.ts.map +1 -0
  88. package/dist/services/state.service.js +122 -0
  89. package/dist/services/state.service.js.map +1 -0
  90. package/dist/services/storage.service.d.ts +111 -0
  91. package/dist/services/storage.service.d.ts.map +1 -0
  92. package/dist/services/storage.service.js +167 -0
  93. package/dist/services/storage.service.js.map +1 -0
  94. package/dist/services/theme.service.d.ts +89 -0
  95. package/dist/services/theme.service.d.ts.map +1 -0
  96. package/dist/services/theme.service.js +116 -0
  97. package/dist/services/theme.service.js.map +1 -0
  98. package/dist/services/version.service.d.ts +44 -0
  99. package/dist/services/version.service.d.ts.map +1 -0
  100. package/dist/services/version.service.js +63 -0
  101. package/dist/services/version.service.js.map +1 -0
  102. package/dist/tokens.d.ts +47 -0
  103. package/dist/tokens.d.ts.map +1 -0
  104. package/dist/tokens.js +39 -0
  105. package/dist/tokens.js.map +1 -0
  106. package/dist/types.d.ts +42 -0
  107. package/dist/types.d.ts.map +1 -0
  108. package/dist/types.js +7 -0
  109. package/dist/types.js.map +1 -0
  110. package/package.json +61 -0
@@ -0,0 +1,171 @@
1
+ /**
2
+ * Angular service for HTTP requests.
3
+ *
4
+ * @module
5
+ */
6
+ import { Inject, Injectable } from '@angular/core';
7
+ import { BehaviorSubject, from } from 'rxjs';
8
+ import { catchError, map, tap } from 'rxjs/operators';
9
+ import { HTTP_CLIENT } from '../tokens.js';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * Angular service for HTTP requests.
13
+ *
14
+ * Wraps molecule HTTP client and returns RxJS observables.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * @Component({
19
+ * selector: 'app-users',
20
+ * template: `
21
+ * <div *ngIf="loading$ | async">Loading...</div>
22
+ * <div *ngIf="error$ | async as error">Error: {{ error.message }}</div>
23
+ * <ul *ngIf="users$ | async as users">
24
+ * <li *ngFor="let user of users">{{ user.name }}</li>
25
+ * </ul>
26
+ * `
27
+ * })
28
+ * export class UsersComponent implements OnInit {
29
+ * users$ = this.httpService.get<User[]>('/api/users')
30
+ *
31
+ * // Or with state management:
32
+ * private state = this.httpService.createState<User[]>()
33
+ * loading$ = this.state.pipe(map(s => s.loading))
34
+ * error$ = this.state.pipe(map(s => s.error))
35
+ * users$ = this.state.pipe(map(s => s.data))
36
+ *
37
+ * constructor(private httpService: MoleculeHttpService) {}
38
+ *
39
+ * ngOnInit() {
40
+ * this.httpService.getWithState('/api/users', this.state)
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ /**
46
+ * Molecule Http Service class.
47
+ */
48
+ export class MoleculeHttpService {
49
+ constructor(client) {
50
+ this.client = client;
51
+ }
52
+ /**
53
+ * Make a GET request.
54
+ *
55
+ * @param url - Request URL
56
+ * @param config - Request configuration
57
+ * @returns Observable of response data
58
+ */
59
+ get(url, config) {
60
+ return from(this.client.get(url, config)).pipe(map((res) => res.data));
61
+ }
62
+ /**
63
+ * Make a POST request.
64
+ *
65
+ * @param url - Request URL
66
+ * @param data - Request body
67
+ * @param config - Request configuration
68
+ * @returns Observable of response data
69
+ */
70
+ post(url, data, config) {
71
+ return from(this.client.post(url, data, config)).pipe(map((res) => res.data));
72
+ }
73
+ /**
74
+ * Make a PUT request.
75
+ *
76
+ * @param url - Request URL
77
+ * @param data - Request body
78
+ * @param config - Request configuration
79
+ * @returns Observable of response data
80
+ */
81
+ put(url, data, config) {
82
+ return from(this.client.put(url, data, config)).pipe(map((res) => res.data));
83
+ }
84
+ /**
85
+ * Make a PATCH request.
86
+ *
87
+ * @param url - Request URL
88
+ * @param data - Request body
89
+ * @param config - Request configuration
90
+ * @returns Observable of response data
91
+ */
92
+ patch(url, data, config) {
93
+ return from(this.client.patch(url, data, config)).pipe(map((res) => res.data));
94
+ }
95
+ /**
96
+ * Make a DELETE request.
97
+ *
98
+ * @param url - Request URL
99
+ * @param config - Request configuration
100
+ * @returns Observable of response data
101
+ */
102
+ delete(url, config) {
103
+ return from(this.client.delete(url, config)).pipe(map((res) => res.data));
104
+ }
105
+ /**
106
+ * Get the full response (including headers, status, etc.).
107
+ *
108
+ * @param method - HTTP method
109
+ * @param url - Request URL
110
+ * @param config - Request configuration
111
+ * @returns Observable of full response
112
+ */
113
+ request(method, url, config) {
114
+ const promise = (async () => {
115
+ switch (method) {
116
+ case 'GET':
117
+ return this.client.get(url, config);
118
+ case 'POST':
119
+ return this.client.post(url, config?.data, config);
120
+ case 'PUT':
121
+ return this.client.put(url, config?.data, config);
122
+ case 'PATCH':
123
+ return this.client.patch(url, config?.data, config);
124
+ case 'DELETE':
125
+ return this.client.delete(url, config);
126
+ }
127
+ })();
128
+ return from(promise);
129
+ }
130
+ /**
131
+ * Create a state subject for managing request state.
132
+ *
133
+ * @returns The created instance.
134
+ */
135
+ createState() {
136
+ return new BehaviorSubject({
137
+ data: null,
138
+ loading: false,
139
+ error: null,
140
+ });
141
+ }
142
+ /**
143
+ * Make a GET request with state management.
144
+ *
145
+ * @param url - Request URL
146
+ * @param state - State subject to update
147
+ * @param config - Request configuration
148
+ */
149
+ getWithState(url, state, config) {
150
+ state.next({ ...state.value, loading: true, error: null });
151
+ this.get(url, config)
152
+ .pipe(tap((data) => state.next({ data, loading: false, error: null })), catchError((error) => {
153
+ state.next({ data: null, loading: false, error });
154
+ throw error;
155
+ }))
156
+ .subscribe();
157
+ }
158
+ static { this.ɵfac = function MoleculeHttpService_Factory(__ngFactoryType__) { /* @ts-ignore */
159
+ return new (__ngFactoryType__ || MoleculeHttpService)(i0.ɵɵinject(HTTP_CLIENT)); }; }
160
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MoleculeHttpService, factory: MoleculeHttpService.ɵfac, providedIn: 'root' }); }
161
+ }
162
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MoleculeHttpService, [{
163
+ type: Injectable,
164
+ args: [{
165
+ providedIn: 'root',
166
+ }]
167
+ }], () => [{ type: undefined, decorators: [{
168
+ type: Inject,
169
+ args: [HTTP_CLIENT]
170
+ }] }], null); })();
171
+ //# sourceMappingURL=http.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.service.js","sourceRoot":"","sources":["../../src/services/http.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Angular service for internationalization.
3
+ *
4
+ * @module
5
+ */
6
+ import { type OnDestroy } from '@angular/core';
7
+ import { type Observable } from 'rxjs';
8
+ import type { DateFormatOptions, I18nProvider, InterpolationValues, LocaleConfig, NumberFormatOptions } from '@molecule/app-i18n';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * Angular service for internationalization.
12
+ *
13
+ * Wraps molecule i18n provider and exposes state as RxJS observables.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * @Component({
18
+ * selector: 'app-header',
19
+ * template: `
20
+ * <h1>{{ t('welcome.title', { name: userName }) }}</h1>
21
+ * <select [value]="locale$ | async" (change)="setLocale($event.target.value)">
22
+ * <option *ngFor="let loc of locales$ | async" [value]="loc.code">
23
+ * {{ loc.name }}
24
+ * </option>
25
+ * </select>
26
+ * `
27
+ * })
28
+ * export class HeaderComponent {
29
+ * locale$ = this.i18nService.locale$
30
+ * locales$ = this.i18nService.locales$
31
+ * userName = 'User'
32
+ *
33
+ * constructor(private i18nService: MoleculeI18nService) {}
34
+ *
35
+ * t(key: string, values?: Record<string, unknown>) {
36
+ * return this.i18nService.t(key, values)
37
+ * }
38
+ *
39
+ * setLocale(code: string) {
40
+ * this.i18nService.setLocale(code)
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ export declare class MoleculeI18nService implements OnDestroy {
46
+ private provider;
47
+ private localeSubject;
48
+ private directionSubject;
49
+ private localesSubject;
50
+ private unsubscribe;
51
+ /**
52
+ * Observable of the current locale code.
53
+ */
54
+ locale$: Observable<string>;
55
+ /**
56
+ * Observable of the text direction.
57
+ */
58
+ direction$: Observable<'ltr' | 'rtl'>;
59
+ /**
60
+ * Observable of available locales.
61
+ */
62
+ locales$: Observable<LocaleConfig[]>;
63
+ constructor(provider: I18nProvider);
64
+ /**
65
+ * Get the current locale code snapshot.
66
+ * @returns The active locale code (e.g. `'en'`, `'fr'`).
67
+ */
68
+ get locale(): string;
69
+ /**
70
+ * Get the current text direction snapshot.
71
+ * @returns The text direction for the active locale, either `'ltr'` or `'rtl'`.
72
+ */
73
+ get direction(): 'ltr' | 'rtl';
74
+ /**
75
+ * Translate a key.
76
+ *
77
+ * @param key - The dot-notation translation key to look up.
78
+ * @param values - Optional interpolation values to substitute into the translated string.
79
+ * @returns The translated and interpolated string for the current locale.
80
+ */
81
+ t(key: string, values?: InterpolationValues): string;
82
+ /**
83
+ * Set the current locale.
84
+ *
85
+ * @param code - The locale code to switch to (e.g. `'en'`, `'fr'`).
86
+ */
87
+ setLocale(code: string): void;
88
+ /**
89
+ * Format a number.
90
+ *
91
+ * @param value - The number to format.
92
+ * @param options - Locale-aware formatting options such as style, currency, and precision.
93
+ * @returns The locale-formatted number string.
94
+ */
95
+ formatNumber(value: number, options?: NumberFormatOptions): string;
96
+ /**
97
+ * Format a date.
98
+ *
99
+ * @param value - The date to format, as a Date object, timestamp, or ISO string.
100
+ * @param options - Locale-aware formatting options such as date style and time zone.
101
+ * @returns The locale-formatted date string.
102
+ */
103
+ formatDate(value: Date | number | string, options?: DateFormatOptions): string;
104
+ /**
105
+ * Clean up locale change subscription and complete all subjects on service destruction.
106
+ */
107
+ ngOnDestroy(): void;
108
+ static ɵfac: i0.ɵɵFactoryDeclaration<MoleculeI18nService, never>;
109
+ static ɵprov: i0.ɵɵInjectableDeclaration<MoleculeI18nService>;
110
+ }
111
+ //# sourceMappingURL=i18n.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.service.d.ts","sourceRoot":"","sources":["../../src/services/i18n.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAsB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAClE,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,MAAM,CAAA;AAEvD,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACpB,MAAM,oBAAoB,CAAA;;AAI3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,qBAGa,mBAAoB,YAAW,SAAS;IAqBhB,OAAO,CAAC,QAAQ;IApBnD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,gBAAgB,CAAgC;IACxD,OAAO,CAAC,cAAc,CAAiC;IACvD,OAAO,CAAC,WAAW,CAA4B;IAE/C;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,CAAA;IAE3B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC,CAAA;IAErC;;OAEG;IACH,QAAQ,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAA;gBAEO,QAAQ,EAAE,YAAY;IAgBjE;;;OAGG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED;;;OAGG;IACH,IAAI,SAAS,IAAI,KAAK,GAAG,KAAK,CAE7B;IAED;;;;;;OAMG;IACH,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAIpD;;;;OAIG;IACH,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM;IAIlE;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,MAAM;IAI9E;;OAEG;IACH,WAAW,IAAI,IAAI;yCAlGR,mBAAmB;6CAAnB,mBAAmB;CAwG/B"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * Angular service for internationalization.
3
+ *
4
+ * @module
5
+ */
6
+ import { Inject, Injectable } from '@angular/core';
7
+ import { BehaviorSubject } from 'rxjs';
8
+ import { I18N_PROVIDER } from '../tokens.js';
9
+ import * as i0 from "@angular/core";
10
+ /**
11
+ * Angular service for internationalization.
12
+ *
13
+ * Wraps molecule i18n provider and exposes state as RxJS observables.
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * @Component({
18
+ * selector: 'app-header',
19
+ * template: `
20
+ * <h1>{{ t('welcome.title', { name: userName }) }}</h1>
21
+ * <select [value]="locale$ | async" (change)="setLocale($event.target.value)">
22
+ * <option *ngFor="let loc of locales$ | async" [value]="loc.code">
23
+ * {{ loc.name }}
24
+ * </option>
25
+ * </select>
26
+ * `
27
+ * })
28
+ * export class HeaderComponent {
29
+ * locale$ = this.i18nService.locale$
30
+ * locales$ = this.i18nService.locales$
31
+ * userName = 'User'
32
+ *
33
+ * constructor(private i18nService: MoleculeI18nService) {}
34
+ *
35
+ * t(key: string, values?: Record<string, unknown>) {
36
+ * return this.i18nService.t(key, values)
37
+ * }
38
+ *
39
+ * setLocale(code: string) {
40
+ * this.i18nService.setLocale(code)
41
+ * }
42
+ * }
43
+ * ```
44
+ */
45
+ export class MoleculeI18nService {
46
+ constructor(provider) {
47
+ this.provider = provider;
48
+ this.unsubscribe = null;
49
+ this.localeSubject = new BehaviorSubject(provider.getLocale());
50
+ this.directionSubject = new BehaviorSubject(provider.getDirection());
51
+ this.localesSubject = new BehaviorSubject(provider.getLocales());
52
+ this.unsubscribe = provider.onLocaleChange(() => {
53
+ this.localeSubject.next(provider.getLocale());
54
+ this.directionSubject.next(provider.getDirection());
55
+ this.localesSubject.next(provider.getLocales());
56
+ });
57
+ this.locale$ = this.localeSubject.asObservable();
58
+ this.direction$ = this.directionSubject.asObservable();
59
+ this.locales$ = this.localesSubject.asObservable();
60
+ }
61
+ /**
62
+ * Get the current locale code snapshot.
63
+ * @returns The active locale code (e.g. `'en'`, `'fr'`).
64
+ */
65
+ get locale() {
66
+ return this.provider.getLocale();
67
+ }
68
+ /**
69
+ * Get the current text direction snapshot.
70
+ * @returns The text direction for the active locale, either `'ltr'` or `'rtl'`.
71
+ */
72
+ get direction() {
73
+ return this.provider.getDirection();
74
+ }
75
+ /**
76
+ * Translate a key.
77
+ *
78
+ * @param key - The dot-notation translation key to look up.
79
+ * @param values - Optional interpolation values to substitute into the translated string.
80
+ * @returns The translated and interpolated string for the current locale.
81
+ */
82
+ t(key, values) {
83
+ return this.provider.t(key, values);
84
+ }
85
+ /**
86
+ * Set the current locale.
87
+ *
88
+ * @param code - The locale code to switch to (e.g. `'en'`, `'fr'`).
89
+ */
90
+ setLocale(code) {
91
+ this.provider.setLocale(code);
92
+ }
93
+ /**
94
+ * Format a number.
95
+ *
96
+ * @param value - The number to format.
97
+ * @param options - Locale-aware formatting options such as style, currency, and precision.
98
+ * @returns The locale-formatted number string.
99
+ */
100
+ formatNumber(value, options) {
101
+ return this.provider.formatNumber(value, options);
102
+ }
103
+ /**
104
+ * Format a date.
105
+ *
106
+ * @param value - The date to format, as a Date object, timestamp, or ISO string.
107
+ * @param options - Locale-aware formatting options such as date style and time zone.
108
+ * @returns The locale-formatted date string.
109
+ */
110
+ formatDate(value, options) {
111
+ return this.provider.formatDate(value, options);
112
+ }
113
+ /**
114
+ * Clean up locale change subscription and complete all subjects on service destruction.
115
+ */
116
+ ngOnDestroy() {
117
+ this.unsubscribe?.();
118
+ this.localeSubject.complete();
119
+ this.directionSubject.complete();
120
+ this.localesSubject.complete();
121
+ }
122
+ static { this.ɵfac = function MoleculeI18nService_Factory(__ngFactoryType__) { /* @ts-ignore */
123
+ return new (__ngFactoryType__ || MoleculeI18nService)(i0.ɵɵinject(I18N_PROVIDER)); }; }
124
+ static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: MoleculeI18nService, factory: MoleculeI18nService.ɵfac, providedIn: 'root' }); }
125
+ }
126
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(MoleculeI18nService, [{
127
+ type: Injectable,
128
+ args: [{
129
+ providedIn: 'root',
130
+ }]
131
+ }], () => [{ type: undefined, decorators: [{
132
+ type: Inject,
133
+ args: [I18N_PROVIDER]
134
+ }] }], null); })();
135
+ //# sourceMappingURL=i18n.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.service.js","sourceRoot":"","sources":["../../src/services/i18n.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAkB,MAAM,eAAe,CAAA;AAClE,OAAO,EAAE,eAAe,EAAmB,MAAM,MAAM,CAAA;AAUvD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;;AAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,MAAM,OAAO,mBAAmB;IAqB9B,YAA2C,QAAsB;QAAtB,aAAQ,GAAR,QAAQ,CAAc;QAjBzD,gBAAW,GAAwB,IAAI,CAAA;QAkB7C,IAAI,CAAC,aAAa,GAAG,IAAI,eAAe,CAAS,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;QACtE,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,CAAgB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;QACnF,IAAI,CAAC,cAAc,GAAG,IAAI,eAAe,CAAiB,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QAEhF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,GAAG,EAAE;YAC9C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAA;YAC7C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;YACnD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAA;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,CAAA;QACtD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE,CAAA;IACpD,CAAC;IAED;;;OAGG;IACH,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAA;IAClC,CAAC;IAED;;;OAGG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAA;IACrC,CAAC;IAED;;;;;;OAMG;IACH,CAAC,CAAC,GAAW,EAAE,MAA4B;QACzC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IACrC,CAAC;IAED;;;;OAIG;IACH,SAAS,CAAC,IAAY;QACpB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,YAAY,CAAC,KAAa,EAAE,OAA6B;QACvD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACnD,CAAC;IAED;;;;;;OAMG;IACH,UAAU,CAAC,KAA6B,EAAE,OAA2B;QACnE,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACjD,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,CAAC,WAAW,EAAE,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAA;QAC7B,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAA;QAChC,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAA;IAChC,CAAC;;qCAvGU,mBAAmB,cAqBV,aAAa;uEArBtB,mBAAmB,WAAnB,mBAAmB,mBAFlB,MAAM;;iFAEP,mBAAmB;cAH/B,UAAU;eAAC;gBACV,UAAU,EAAE,MAAM;aACnB;;sBAsBc,MAAM;uBAAC,aAAa"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Angular services for molecule.dev framework bindings.
3
+ *
4
+ * @module
5
+ */
6
+ export * from './async-state.service.js';
7
+ export * from './auth.service.js';
8
+ export * from './capacitor-app.service.js';
9
+ export * from './change-password.service.js';
10
+ export * from './device.service.js';
11
+ export * from './forms.service.js';
12
+ export * from './http.service.js';
13
+ export * from './i18n.service.js';
14
+ export * from './logger.service.js';
15
+ export * from './login.service.js';
16
+ export * from './oauth.service.js';
17
+ export * from './password-reset.service.js';
18
+ export * from './platform.service.js';
19
+ export * from './promise.service.js';
20
+ export * from './push.service.js';
21
+ export * from './router.service.js';
22
+ export * from './signup.service.js';
23
+ export * from './state.service.js';
24
+ export * from './storage.service.js';
25
+ export * from './theme.service.js';
26
+ export * from './version.service.js';
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Angular services for molecule.dev framework bindings.
3
+ *
4
+ * @module
5
+ */
6
+ export * from './async-state.service.js';
7
+ export * from './auth.service.js';
8
+ export * from './capacitor-app.service.js';
9
+ export * from './change-password.service.js';
10
+ export * from './device.service.js';
11
+ export * from './forms.service.js';
12
+ export * from './http.service.js';
13
+ export * from './i18n.service.js';
14
+ export * from './logger.service.js';
15
+ export * from './login.service.js';
16
+ export * from './oauth.service.js';
17
+ export * from './password-reset.service.js';
18
+ export * from './platform.service.js';
19
+ export * from './promise.service.js';
20
+ export * from './push.service.js';
21
+ export * from './router.service.js';
22
+ export * from './signup.service.js';
23
+ export * from './state.service.js';
24
+ export * from './storage.service.js';
25
+ export * from './theme.service.js';
26
+ export * from './version.service.js';
27
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,oBAAoB,CAAA;AAClC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,79 @@
1
+ import type { Logger, LoggerConfig, LoggerProvider } from '@molecule/app-logger';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Angular service for logging.
5
+ *
6
+ * Wraps molecule logger provider.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * @Component({
11
+ * selector: 'app-user-profile',
12
+ * template: `...`
13
+ * })
14
+ * export class UserProfileComponent implements OnInit, OnDestroy {
15
+ * private logger = this.loggerService.getLogger('UserProfileComponent')
16
+ *
17
+ * constructor(private loggerService: MoleculeLoggerService) {}
18
+ *
19
+ * ngOnInit() {
20
+ * this.logger.info('Component initialized')
21
+ * }
22
+ *
23
+ * ngOnDestroy() {
24
+ * this.logger.debug('Component destroyed')
25
+ * }
26
+ *
27
+ * handleError(error: Error) {
28
+ * this.logger.error('Operation failed', error)
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ export declare class MoleculeLoggerService {
34
+ private provider;
35
+ constructor(provider: LoggerProvider);
36
+ /**
37
+ * Get a logger instance.
38
+ *
39
+ * @param name - Logger name (usually component/service name)
40
+ * @returns The result.
41
+ */
42
+ getLogger(name?: string): Logger;
43
+ /**
44
+ * Create a logger with custom configuration.
45
+ *
46
+ * @param config - Logger configuration
47
+ * @returns The created instance.
48
+ */
49
+ createLogger(config: LoggerConfig): Logger;
50
+ /**
51
+ * Set the global log level.
52
+ *
53
+ * @param level - Log level
54
+ */
55
+ setLevel(level: 'trace' | 'debug' | 'info' | 'warn' | 'error' | 'silent'): void;
56
+ /**
57
+ * Get the current global log level.
58
+ *
59
+ * @returns The result.
60
+ */
61
+ getLevel(): string;
62
+ /**
63
+ * Enable logging.
64
+ */
65
+ enable(): void;
66
+ /**
67
+ * Disable logging.
68
+ */
69
+ disable(): void;
70
+ /**
71
+ * Check if logging is enabled.
72
+ *
73
+ * @returns Whether logging is enabled
74
+ */
75
+ isEnabled(): boolean;
76
+ static ɵfac: i0.ɵɵFactoryDeclaration<MoleculeLoggerService, never>;
77
+ static ɵprov: i0.ɵɵInjectableDeclaration<MoleculeLoggerService>;
78
+ }
79
+ //# sourceMappingURL=logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.service.d.ts","sourceRoot":"","sources":["../../src/services/logger.service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;;AAIhF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAGa,qBAAqB;IACK,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,cAAc;IAErE;;;;;OAKG;IACH,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAIhC;;;;;OAKG;IACH,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAI1C;;;;OAIG;IACH,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,IAAI;IAI/E;;;;OAIG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,MAAM,IAAI,IAAI;IAId;;OAEG;IACH,OAAO,IAAI,IAAI;IAIf;;;;OAIG;IACH,SAAS,IAAI,OAAO;yCA5DT,qBAAqB;6CAArB,qBAAqB;CA+DjC"}