@nucleus-suite-pe/core 0.1.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.
@@ -0,0 +1,368 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { InjectionToken, EnvironmentProviders, Signal } from '@angular/core';
3
+ import { HttpContextToken, HttpInterceptorFn } from '@angular/common/http';
4
+ import * as _nucleus_suite_pe_core from '@nucleus-suite-pe/core';
5
+ import * as _primeuix_themes from '@primeuix/themes';
6
+ import * as _primeuix_themes_types_base from '@primeuix/themes/types/base';
7
+
8
+ interface NucleusConfig {
9
+ readonly appId: string;
10
+ readonly securityApiUrl: string;
11
+ readonly appApiUrl: string | null;
12
+ readonly landingUrl: string | null;
13
+ }
14
+ declare const NUCLEUS_CONFIG: InjectionToken<NucleusConfig>;
15
+ declare function provideNucleus(config: NucleusConfig): EnvironmentProviders;
16
+ declare function loadNucleusConfig(url?: string): Promise<NucleusConfig>;
17
+ declare function isNucleusConfigured(config: NucleusConfig): boolean;
18
+ declare function ownsUrl(config: NucleusConfig, url: string): boolean;
19
+
20
+ interface NucleusIdentity {
21
+ readonly uid: string;
22
+ readonly provider: string;
23
+ readonly providerUserId: string;
24
+ readonly email: string | null;
25
+ readonly displayName: string | null;
26
+ readonly photoUrl: string | null;
27
+ }
28
+ declare abstract class NucleusAuth {
29
+ abstract readonly user: Signal<NucleusIdentity | null>;
30
+ abstract idToken(): Promise<string | null>;
31
+ signOut?(): Promise<void>;
32
+ switchAccount?(): Promise<void>;
33
+ }
34
+
35
+ declare const NUCLEUS_FORCE_BEARER: HttpContextToken<boolean>;
36
+ declare const NUCLEUS_SKIP_AUTH: HttpContextToken<boolean>;
37
+
38
+ declare const nucleusAuthInterceptor: HttpInterceptorFn;
39
+
40
+ interface SessionTicket {
41
+ readonly userId: string;
42
+ readonly expiresAtUtc: string;
43
+ }
44
+ declare class NucleusSessionAuth {
45
+ private readonly http;
46
+ private readonly config;
47
+ private readonly injector;
48
+ private readonly _ticket;
49
+ private readonly _failed;
50
+ private pending;
51
+ readonly ticket: _angular_core.Signal<SessionTicket | null>;
52
+ readonly failed: _angular_core.Signal<boolean>;
53
+ readonly established: _angular_core.Signal<boolean>;
54
+ establish(force?: boolean): Promise<boolean>;
55
+ clear(): Promise<void>;
56
+ private request;
57
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NucleusSessionAuth, never>;
58
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<NucleusSessionAuth>;
59
+ }
60
+
61
+ interface AuthSyncRequest {
62
+ readonly provider: string;
63
+ readonly providerUserId: string;
64
+ readonly email: string | null;
65
+ readonly displayName: string | null;
66
+ readonly photoUrl: string | null;
67
+ }
68
+ interface AppUser {
69
+ readonly userId: string;
70
+ readonly displayName: string | null;
71
+ readonly photoUrl: string | null;
72
+ readonly createdAt: string;
73
+ readonly isNew: boolean;
74
+ readonly profileCompleted: boolean;
75
+ readonly hasCompanies: boolean;
76
+ readonly isPlatformAdmin: boolean;
77
+ }
78
+ declare class UserSyncService {
79
+ private readonly http;
80
+ private readonly config;
81
+ readonly appUser: _angular_core.WritableSignal<AppUser | null>;
82
+ readonly failed: _angular_core.WritableSignal<boolean>;
83
+ sync(session: NucleusIdentity, idToken: () => Promise<string | null>): Promise<void>;
84
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<UserSyncService, never>;
85
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<UserSyncService>;
86
+ }
87
+
88
+ interface MenuNode {
89
+ readonly id: string;
90
+ readonly label: string;
91
+ readonly icon: string | null;
92
+ readonly route: string | null;
93
+ readonly sortOrder: number;
94
+ readonly canView: boolean;
95
+ readonly canInsert: boolean;
96
+ readonly canEdit: boolean;
97
+ readonly canDelete: boolean;
98
+ readonly canExport: boolean;
99
+ readonly children: readonly MenuNode[];
100
+ }
101
+ interface SiteAccess {
102
+ readonly siteId: string;
103
+ readonly siteName: string;
104
+ readonly appId: string;
105
+ readonly appName: string;
106
+ readonly roleName: string;
107
+ }
108
+ interface CompanySummary {
109
+ readonly id: string;
110
+ readonly legalName: string;
111
+ readonly tradeName: string | null;
112
+ readonly taxId: string;
113
+ readonly countryCode: string | null;
114
+ readonly logoPath: string | null;
115
+ readonly status: number;
116
+ readonly isOwner: boolean;
117
+ readonly ownerUserId: string;
118
+ readonly siteCount: number;
119
+ readonly createdAtUtc: string;
120
+ readonly myAccess: readonly SiteAccess[];
121
+ }
122
+ interface UserProfile {
123
+ readonly firstName: string | null;
124
+ readonly lastName: string | null;
125
+ readonly language: string | null;
126
+ readonly timeZone: string | null;
127
+ readonly themePreference: string | null;
128
+ readonly completedAtUtc: string | null;
129
+ }
130
+ interface Subscription {
131
+ readonly planName: string;
132
+ readonly status: number;
133
+ readonly quotaBytes: number;
134
+ readonly usedBytes: number;
135
+ readonly usedPercentage: number;
136
+ }
137
+ interface MeResponse {
138
+ readonly userId: string;
139
+ readonly emailVerified: boolean;
140
+ readonly displayName: string | null;
141
+ readonly photoUrl: string | null;
142
+ readonly status: number;
143
+ readonly isPlatformAdmin: boolean;
144
+ readonly createdAtUtc: string;
145
+ readonly lastLoginAtUtc: string | null;
146
+ readonly profile: UserProfile;
147
+ readonly subscription: Subscription;
148
+ readonly ownedCompanies: readonly CompanySummary[];
149
+ readonly sharedCompanies: readonly CompanySummary[];
150
+ }
151
+ type AccessScope = 'site' | 'account';
152
+ interface AppSummary {
153
+ readonly id: string;
154
+ readonly name: string;
155
+ readonly description: string | null;
156
+ readonly icon: string | null;
157
+ readonly color: string | null;
158
+ readonly url: string | null;
159
+ readonly status: number;
160
+ readonly sortOrder: number;
161
+ }
162
+ interface LauncherApp extends AppSummary {
163
+ readonly hasAccess: boolean;
164
+ }
165
+
166
+ declare class SessionService {
167
+ private readonly http;
168
+ private readonly auth;
169
+ private readonly userSync;
170
+ private readonly sessionAuth;
171
+ private readonly config;
172
+ private readonly _me;
173
+ private readonly _menu;
174
+ private readonly _access;
175
+ private readonly _scope;
176
+ private readonly _apps;
177
+ private readonly _loading;
178
+ private readonly _error;
179
+ private inFlight;
180
+ private loadedKey;
181
+ readonly me: _angular_core.Signal<MeResponse | null>;
182
+ readonly menu: _angular_core.Signal<readonly MenuNode[]>;
183
+ readonly access: _angular_core.Signal<SiteAccess | null>;
184
+ readonly scope: _angular_core.Signal<AccessScope | null>;
185
+ readonly apps: _angular_core.Signal<readonly LauncherApp[]>;
186
+ readonly loading: _angular_core.Signal<boolean>;
187
+ readonly error: _angular_core.Signal<string | null>;
188
+ readonly roleName: _angular_core.Signal<string | null>;
189
+ readonly siteName: _angular_core.Signal<string | null>;
190
+ readonly companies: _angular_core.Signal<_nucleus_suite_pe_core.CompanySummary[]>;
191
+ load(language: string, force?: boolean): Promise<void>;
192
+ reload(language: string): Promise<void>;
193
+ private buildLauncher;
194
+ private siteMenu;
195
+ private accountMenu;
196
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SessionService, never>;
197
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SessionService>;
198
+ }
199
+
200
+ type NucleusLang = 'es' | 'en';
201
+ declare const NUCLEUS_LANGS: readonly NucleusLang[];
202
+ declare class NucleusLanguage {
203
+ private readonly _lang;
204
+ readonly lang: _angular_core.Signal<NucleusLang>;
205
+ constructor();
206
+ setLang(lang: NucleusLang): void;
207
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NucleusLanguage, never>;
208
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<NucleusLanguage>;
209
+ }
210
+
211
+ type ThemeId = 'nucleus' | 'light' | 'dark' | 'bubblegum' | 'cool-breeze' | 'cool-slate' | 'icy-mint' | 'juicy-plum' | 'mango-paradise' | 'moonlight-glow' | 'mystical-forest' | 'silky-pink' | 'spicy-red' | 'sunny-day';
212
+ type ThemePreference = ThemeId | 'system';
213
+ interface ThemeTokens {
214
+ readonly bg: string;
215
+ readonly surface: string;
216
+ readonly surfaceAlt: string;
217
+ readonly text: string;
218
+ readonly textMuted: string;
219
+ readonly border: string;
220
+ readonly accent: string;
221
+ readonly onAccent: string;
222
+ }
223
+ interface Theme {
224
+ readonly id: ThemeId;
225
+ readonly scheme: 'light' | 'dark';
226
+ readonly swatch: string;
227
+ readonly starfield: boolean;
228
+ readonly tokens: ThemeTokens;
229
+ }
230
+ declare const THEMES: readonly Theme[];
231
+ declare const THEME_LABELS: Readonly<Record<ThemeId, string>>;
232
+ declare const DEFAULT_THEME: ThemeId;
233
+ declare function themeById(id: ThemeId): Theme;
234
+ declare function isThemePreference(value: unknown): value is ThemePreference;
235
+
236
+ declare class ThemeService {
237
+ private readonly _preference;
238
+ private readonly systemDark;
239
+ readonly preference: _angular_core.Signal<ThemePreference>;
240
+ readonly theme: _angular_core.Signal<Theme>;
241
+ readonly starfield: _angular_core.Signal<boolean>;
242
+ constructor();
243
+ setPreference(preference: ThemePreference): void;
244
+ private applyToDom;
245
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ThemeService, never>;
246
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ThemeService>;
247
+ }
248
+
249
+ declare const NucleusPreset: _primeuix_themes.Preset<_primeuix_themes_types_base.BaseDesignTokens>;
250
+
251
+ declare const NUCLEUS_DARK_SELECTOR = ".ns-dark";
252
+ declare function provideNucleusTheme(): EnvironmentProviders;
253
+
254
+ declare class NucleusMark {
255
+ readonly accent: _angular_core.InputSignal<string>;
256
+ readonly size: _angular_core.InputSignal<number>;
257
+ protected readonly orbit: {
258
+ readonly rx: 78;
259
+ readonly ry: 196;
260
+ };
261
+ protected readonly rotations: number[];
262
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NucleusMark, never>;
263
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NucleusMark, "nucleus-mark", never, { "accent": { "alias": "accent"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
264
+ }
265
+
266
+ declare class NucleusStarfield {
267
+ protected readonly W = 1280;
268
+ protected readonly H = 720;
269
+ protected readonly stars: {
270
+ cx: number;
271
+ cy: number;
272
+ r: number;
273
+ opacity: string;
274
+ dx: string;
275
+ dy: string;
276
+ duration: string;
277
+ delay: string;
278
+ }[];
279
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NucleusStarfield, never>;
280
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NucleusStarfield, "nucleus-starfield", never, {}, {}, never, never, true, never>;
281
+ }
282
+
283
+ interface ShellCopy {
284
+ readonly navToggle: string;
285
+ readonly appsLauncher: string;
286
+ readonly appsEmpty: string;
287
+ readonly settingsTitle: string;
288
+ readonly settingsTheme: string;
289
+ readonly settingsThemeHint: string;
290
+ readonly themeSystem: string;
291
+ readonly signOut: string;
292
+ readonly accountManage: string;
293
+ readonly accountSwitch: string;
294
+ readonly accessLoading: string;
295
+ readonly accessEmpty: string;
296
+ readonly accountScope: string;
297
+ readonly hintNoAccess: string;
298
+ readonly hintComingSoon: string;
299
+ readonly hintNotDeployed: string;
300
+ }
301
+ declare const SHELL_COPY: Readonly<Record<NucleusLang, ShellCopy>>;
302
+
303
+ interface ShellNavItem {
304
+ readonly id: string;
305
+ readonly icon: string;
306
+ readonly label: string;
307
+ }
308
+ interface ThemeOption {
309
+ readonly value: ThemePreference;
310
+ readonly label: string;
311
+ readonly swatch: string | null;
312
+ }
313
+ interface ShellIdentity {
314
+ readonly name: string;
315
+ readonly email: string;
316
+ readonly photoUrl: string | null;
317
+ }
318
+ declare class NucleusShell {
319
+ private readonly session;
320
+ private readonly sessionAuth;
321
+ private readonly themes;
322
+ private readonly language;
323
+ private readonly config;
324
+ private readonly injector;
325
+ private readonly router;
326
+ readonly brand: _angular_core.InputSignal<string>;
327
+ readonly heading: _angular_core.InputSignal<string>;
328
+ readonly lead: _angular_core.InputSignal<string>;
329
+ readonly navItems: _angular_core.InputSignal<readonly ShellNavItem[]>;
330
+ readonly activeNavId: _angular_core.InputSignal<string | null>;
331
+ readonly selectedMenuId: _angular_core.InputSignal<string | null>;
332
+ readonly navSelect: _angular_core.OutputEmitterRef<string>;
333
+ readonly menuSelect: _angular_core.OutputEmitterRef<MenuNode>;
334
+ protected readonly lang: _angular_core.Signal<NucleusLang>;
335
+ protected readonly copy: _angular_core.Signal<_nucleus_suite_pe_core.ShellCopy>;
336
+ protected readonly starfield: _angular_core.Signal<boolean>;
337
+ protected readonly themePreference: _angular_core.Signal<ThemePreference>;
338
+ protected readonly menu: _angular_core.Signal<readonly MenuNode[]>;
339
+ protected readonly menuLoading: _angular_core.Signal<boolean>;
340
+ protected readonly menuError: _angular_core.Signal<string | null>;
341
+ protected readonly launcherApps: _angular_core.Signal<readonly LauncherApp[]>;
342
+ protected readonly sidebarOpen: _angular_core.WritableSignal<boolean>;
343
+ protected readonly settingsOpen: _angular_core.WritableSignal<boolean>;
344
+ private readonly auth;
345
+ protected readonly identity: _angular_core.Signal<ShellIdentity | null>;
346
+ protected readonly initials: _angular_core.Signal<string>;
347
+ protected readonly canSwitchAccount: _angular_core.Signal<boolean>;
348
+ protected readonly accessCaption: _angular_core.Signal<string>;
349
+ protected readonly themeOptions: _angular_core.Signal<ThemeOption[]>;
350
+ private readonly loadSession;
351
+ protected setLang(lang: NucleusLang): void;
352
+ protected toggleSidebar(): void;
353
+ protected selectTheme(preference: ThemePreference | null): void;
354
+ protected selectNav(id: string): void;
355
+ protected selectMenu(node: MenuNode): void;
356
+ protected isSelected(node: MenuNode): boolean;
357
+ protected canOpen(app: LauncherApp): boolean;
358
+ protected launch(app: LauncherApp): void;
359
+ protected appInitials(app: LauncherApp): string;
360
+ protected launchHint(app: LauncherApp): string;
361
+ protected switchAccount(): Promise<void>;
362
+ protected signOut(): Promise<void>;
363
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NucleusShell, never>;
364
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<NucleusShell, "nucleus-shell", never, { "brand": { "alias": "brand"; "required": false; "isSignal": true; }; "heading": { "alias": "heading"; "required": false; "isSignal": true; }; "lead": { "alias": "lead"; "required": false; "isSignal": true; }; "navItems": { "alias": "navItems"; "required": false; "isSignal": true; }; "activeNavId": { "alias": "activeNavId"; "required": false; "isSignal": true; }; "selectedMenuId": { "alias": "selectedMenuId"; "required": false; "isSignal": true; }; }, { "navSelect": "navSelect"; "menuSelect": "menuSelect"; }, never, ["*"], true, never>;
365
+ }
366
+
367
+ export { DEFAULT_THEME, NUCLEUS_CONFIG, NUCLEUS_DARK_SELECTOR, NUCLEUS_FORCE_BEARER, NUCLEUS_LANGS, NUCLEUS_SKIP_AUTH, NucleusAuth, NucleusLanguage, NucleusMark, NucleusPreset, NucleusSessionAuth, NucleusShell, NucleusStarfield, SHELL_COPY, SessionService, THEMES, THEME_LABELS, ThemeService, UserSyncService, isNucleusConfigured, isThemePreference, loadNucleusConfig, nucleusAuthInterceptor, ownsUrl, provideNucleus, provideNucleusTheme, themeById };
368
+ export type { AccessScope, AppSummary, AppUser, AuthSyncRequest, CompanySummary, LauncherApp, MeResponse, MenuNode, NucleusConfig, NucleusIdentity, NucleusLang, SessionTicket, ShellCopy, ShellNavItem, SiteAccess, Subscription, Theme, ThemeId, ThemePreference, ThemeTokens, UserProfile };