@nucleus-suite-pe/core 2.1.0 → 2.3.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.
@@ -1 +1 @@
1
- {"version":3,"file":"nucleus-suite-pe-core.mjs","sources":["../../../projects/core/src/lib/config/nucleus-config.ts","../../../projects/core/src/lib/config/nucleus-home.ts","../../../projects/core/src/lib/auth/nucleus-auth.ts","../../../projects/core/src/lib/auth/auth.context.ts","../../../projects/core/src/lib/auth/session-auth.service.ts","../../../projects/core/src/lib/auth/auth.interceptor.ts","../../../projects/core/src/lib/auth/logout.ts","../../../projects/core/src/lib/auth/user-sync.service.ts","../../../projects/core/src/lib/i18n/nucleus-language.ts","../../../projects/core/src/lib/api/permissions.ts","../../../projects/core/src/lib/i18n/common.copy.ts","../../../projects/core/src/lib/api/error-message.ts","../../../projects/core/src/lib/api/session.service.ts","../../../projects/core/src/lib/api/access.guard.ts","../../../projects/core/src/lib/api/nucleus-cache.ts","../../../projects/core/src/lib/format/nucleus-format.ts","../../../projects/core/src/lib/a11y/focus.ts","../../../projects/core/src/lib/a11y/shortcut.models.ts","../../../projects/core/src/lib/a11y/nucleus-shortcuts.ts","../../../projects/core/src/lib/a11y/nucleus-shortcut.ts","../../../projects/core/src/lib/a11y/nucleus-enter-advance.ts","../../../projects/core/src/lib/geo/geo.models.ts","../../../projects/core/src/lib/geo/geo.copy.ts","../../../projects/core/src/lib/geo/nucleus-geo.ts","../../../projects/core/src/lib/geo/nucleus-geo-select.ts","../../../projects/core/src/lib/theme/contrast.ts","../../../projects/core/src/lib/theme/theme.ts","../../../projects/core/src/lib/theme/theme.copy.ts","../../../projects/core/src/lib/theme/theme.service.ts","../../../projects/core/src/lib/theme/primeng-preset.ts","../../../projects/core/src/lib/theme/provide-theme.ts","../../../projects/core/src/lib/ui/lordicon/lordicon.ts","../../../projects/core/src/lib/ui/card/nucleus-card.ts","../../../projects/core/src/lib/ui/metric/nucleus-metrics.ts","../../../projects/core/src/lib/ui/metric/nucleus-metric.ts","../../../projects/core/src/lib/ui/tabs/nucleus-tabs.ts","../../../projects/core/src/lib/ui/page/nucleus-page.ts","../../../projects/core/src/lib/ui/page/nucleus-page-actions.ts","../../../projects/core/src/lib/ui/page/nucleus-feedback.ts","../../../projects/core/src/lib/ui/form/form.models.ts","../../../projects/core/src/lib/ui/form/icon-catalog.ts","../../../projects/core/src/lib/ui/form/nucleus-icon-picker.ts","../../../projects/core/src/lib/ui/form/nucleus-color-picker.ts","../../../projects/core/src/lib/ui/form/nucleus-form.ts","../../../projects/core/src/lib/ui/form/nucleus-form.html","../../../projects/core/src/lib/ui/list/nucleus-cell.ts","../../../projects/core/src/lib/ui/list/nucleus-list.ts","../../../projects/core/src/lib/ui/list/nucleus-list.html","../../../projects/core/src/lib/ui/tree/tree-rows.ts","../../../projects/core/src/lib/ui/nucleus-mark/nucleus-mark.ts","../../../projects/core/src/lib/ui/appearance/nucleus-appearance.ts","../../../projects/core/src/lib/ui/appearance/nucleus-appearance.html","../../../projects/core/src/lib/ui/menu/menu.models.ts","../../../projects/core/src/lib/ui/menu/nucleus-menu.ts","../../../projects/core/src/lib/ui/menu/nucleus-menu.html","../../../projects/core/src/lib/ui/menu/recent-apps.service.ts","../../../projects/core/src/lib/ui/starfield/starfield.ts","../../../projects/core/src/lib/ui/shell/shell.copy.ts","../../../projects/core/src/lib/ui/shell/nucleus-shell.ts","../../../projects/core/src/lib/ui/shell/nucleus-shell.html","../../../projects/core/src/nucleus-suite-pe-core.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nexport interface NucleusConfig {\n readonly appId: string;\n readonly securityApiUrl: string;\n readonly appApiUrl: string | null;\n readonly landingUrl: string | null;\n}\n\nexport const NUCLEUS_CONFIG = new InjectionToken<NucleusConfig>('NUCLEUS_CONFIG');\n\nconst CONFIG_URL = 'config.json';\n\nexport function provideNucleus(config: NucleusConfig): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: NUCLEUS_CONFIG, useValue: normalize(config) }]);\n}\n\nexport async function loadNucleusConfig(url = CONFIG_URL): Promise<NucleusConfig> {\n const response = await fetch(url, { cache: 'no-store' });\n\n if (!response.ok) {\n throw new Error(`No se pudo cargar ${url}: HTTP ${response.status}`);\n }\n\n return normalize((await response.json()) as NucleusConfig);\n}\n\nexport function isNucleusConfigured(config: NucleusConfig): boolean {\n return config.securityApiUrl.length > 0 && config.appId.length > 0;\n}\n\nexport function ownsUrl(config: NucleusConfig, url: string): boolean {\n if (config.securityApiUrl.length > 0 && url.startsWith(config.securityApiUrl)) {\n return true;\n }\n\n return config.appApiUrl !== null && config.appApiUrl.length > 0 && url.startsWith(config.appApiUrl);\n}\n\nfunction normalize(config: NucleusConfig): NucleusConfig {\n return {\n appId: (config.appId ?? '').trim().toLowerCase(),\n securityApiUrl: trimSlash(config.securityApiUrl),\n appApiUrl: config.appApiUrl ? trimSlash(config.appApiUrl) : null,\n landingUrl: config.landingUrl ? trimSlash(config.landingUrl) : null,\n };\n}\n\nfunction trimSlash(value: string | null | undefined): string {\n return (value ?? '').trim().replace(/\\/+$/, '');\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nexport const NUCLEUS_HOME = new InjectionToken<string>('NUCLEUS_HOME', {\n providedIn: 'root',\n factory: () => '/',\n});\n\nexport function normalizeHomeRoute(route: string): string {\n const trimmed = (route ?? '').trim().replace(/\\/+$/, '');\n\n if (!trimmed) return '/';\n\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n}\n\nexport function provideNucleusHome(route: string): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NUCLEUS_HOME, useValue: normalizeHomeRoute(route) },\n ]);\n}\n\nexport function routePath(url: string): string {\n const path = (url ?? '').replace(/[?#].*$/, '').replace(/\\/+$/, '');\n\n return path.length ? path : '/';\n}\n\nexport function isHomeRoute(home: string, url: string): boolean {\n return routePath(url) === normalizeHomeRoute(home);\n}\n","import { Signal } from '@angular/core';\n\nexport interface NucleusIdentity {\n readonly uid: string;\n readonly provider: string;\n readonly providerUserId: string;\n readonly email: string | null;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n}\n\nexport abstract class NucleusAuth {\n abstract readonly user: Signal<NucleusIdentity | null>;\n\n abstract idToken(): Promise<string | null>;\n\n signOut?(): Promise<void>;\n\n switchAccount?(): Promise<void>;\n}\n","import { HttpContextToken } from '@angular/common/http';\n\nexport const NUCLEUS_FORCE_BEARER = new HttpContextToken<boolean>(() => false);\n\nexport const NUCLEUS_SKIP_AUTH = new HttpContextToken<boolean>(() => false);\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { NUCLEUS_FORCE_BEARER, NUCLEUS_SKIP_AUTH } from './auth.context';\nimport { NucleusAuth } from './nucleus-auth';\n\nconst SESSION_PATH = '/auth/session';\n\nconst LOGOUT_PATH = '/auth/logout';\n\nexport interface SessionTicket {\n readonly userId: string;\n readonly expiresAtUtc: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusSessionAuth {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n private readonly injector = inject(Injector);\n\n private readonly _ticket = signal<SessionTicket | null>(null);\n private readonly _failed = signal(false);\n private readonly _usable = signal(true);\n\n private pending: Promise<boolean> | null = null;\n\n readonly ticket = this._ticket.asReadonly();\n\n readonly failed = this._failed.asReadonly();\n\n readonly established = computed(() => this._usable() && this._ticket() !== null);\n\n readonly usable = this._usable.asReadonly();\n\n disable(): void {\n this._usable.set(false);\n this._ticket.set(null);\n }\n\n establish(force = false): Promise<boolean> {\n if (!this._usable()) return Promise.resolve(false);\n if (!force && this._ticket() !== null) return Promise.resolve(true);\n\n this.pending ??= this.request().finally(() => {\n this.pending = null;\n });\n\n return this.pending;\n }\n\n async clear(): Promise<void> {\n this._ticket.set(null);\n this._failed.set(false);\n this._usable.set(true);\n\n if (!isNucleusConfigured(this.config)) return;\n\n try {\n await firstValueFrom(\n this.http.post(\n `${this.config.securityApiUrl}${LOGOUT_PATH}`,\n {},\n {\n withCredentials: true,\n context: new HttpContext().set(NUCLEUS_SKIP_AUTH, true),\n },\n ),\n );\n } catch (error) {\n console.error('[auth] no se pudo cerrar la sesión de cookie', error);\n }\n }\n\n private async request(): Promise<boolean> {\n if (!isNucleusConfigured(this.config)) return false;\n\n if (this.injector.get(NucleusAuth, null) === null) return false;\n\n try {\n const ticket = await firstValueFrom(\n this.http.post<SessionTicket>(\n `${this.config.securityApiUrl}${SESSION_PATH}`,\n {},\n {\n withCredentials: true,\n context: new HttpContext().set(NUCLEUS_FORCE_BEARER, true),\n },\n ),\n );\n\n this._ticket.set(ticket);\n this._failed.set(false);\n\n return true;\n } catch (error) {\n this._ticket.set(null);\n this._failed.set(true);\n console.error('[auth] no se pudo abrir la sesión de cookie', error);\n\n return false;\n }\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, from, switchMap, throwError } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, ownsUrl } from '../config/nucleus-config';\nimport { NUCLEUS_FORCE_BEARER, NUCLEUS_SKIP_AUTH } from './auth.context';\nimport { NucleusAuth } from './nucleus-auth';\nimport { NucleusSessionAuth } from './session-auth.service';\n\nexport const nucleusAuthInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(NUCLEUS_CONFIG);\n\n if (!ownsUrl(config, req.url) || req.context.get(NUCLEUS_SKIP_AUTH)) {\n return next(req);\n }\n\n const session = inject(NucleusSessionAuth);\n const auth = inject(NucleusAuth, { optional: true });\n\n const request = req.clone({ withCredentials: true });\n\n const withBearer = () => {\n if (!auth) return next(request);\n\n return from(auth.idToken()).pipe(\n switchMap((token) =>\n next(token ? request.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : request),\n ),\n );\n };\n\n if (req.context.get(NUCLEUS_FORCE_BEARER) || !session.established()) {\n return withBearer();\n }\n\n return next(request).pipe(\n catchError((error: unknown) => {\n if (!(error instanceof HttpErrorResponse) || error.status !== 401) {\n return throwError(() => error);\n }\n\n return from(session.establish(true)).pipe(\n switchMap((renewed) => (renewed ? next(request) : throwError(() => error))),\n catchError((retried: unknown) => {\n if (!(retried instanceof HttpErrorResponse) || retried.status !== 401) {\n return throwError(() => retried);\n }\n\n session.disable();\n\n return withBearer();\n }),\n );\n }),\n );\n};\n","export const NUCLEUS_LOGOUT_PARAM = 'nucleus_logout';\n\nexport function nucleusLogoutUrl(landingUrl: string): string {\n const url = new URL(landingUrl, window.location.origin);\n\n url.searchParams.set(NUCLEUS_LOGOUT_PARAM, '1');\n\n return url.toString();\n}\n\nexport function consumeNucleusLogout(): boolean {\n const url = new URL(window.location.href);\n\n if (url.searchParams.get(NUCLEUS_LOGOUT_PARAM) !== '1') return false;\n\n url.searchParams.delete(NUCLEUS_LOGOUT_PARAM);\n\n window.history.replaceState({}, '', url.toString());\n\n return true;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { NucleusIdentity } from './nucleus-auth';\n\nconst AUTH_SYNC_PATH = '/auth/sync';\n\nexport interface AuthSyncRequest {\n readonly provider: string;\n readonly providerUserId: string;\n readonly email: string | null;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n}\n\nexport interface AppUser {\n readonly userId: string;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n readonly createdAt: string;\n readonly isNew: boolean;\n readonly profileCompleted: boolean;\n readonly hasCompanies: boolean;\n readonly isPlatformAdmin: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UserSyncService {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n readonly appUser = signal<AppUser | null>(null);\n\n readonly failed = signal(false);\n\n async sync(session: NucleusIdentity, idToken: () => Promise<string | null>): Promise<void> {\n if (!isNucleusConfigured(this.config)) {\n console.info('[auth] sincronización omitida: securityApiUrl o appId vacíos en config.json');\n return;\n }\n\n const token = await idToken();\n\n if (!token) {\n this.failed.set(true);\n console.error('[auth] no hay ID token con el que autenticar la sincronización');\n return;\n }\n\n const body: AuthSyncRequest = {\n provider: session.provider,\n providerUserId: session.providerUserId,\n email: session.email,\n displayName: session.displayName,\n photoUrl: session.photoUrl,\n };\n\n try {\n const user = await firstValueFrom(\n this.http.post<AppUser>(`${this.config.securityApiUrl}${AUTH_SYNC_PATH}`, body),\n );\n\n this.appUser.set(user);\n this.failed.set(false);\n } catch (error) {\n this.failed.set(true);\n console.error('[auth] no se pudo sincronizar el usuario con el backend', error);\n }\n }\n}\n","import { Injectable, effect, signal } from '@angular/core';\n\nexport type NucleusLang = 'es' | 'en';\n\nexport const NUCLEUS_LANGS: readonly NucleusLang[] = ['es', 'en'];\n\nconst STORAGE_KEY = 'nucleus_lang';\n\nfunction isLang(value: unknown): value is NucleusLang {\n return value === 'es' || value === 'en';\n}\n\nfunction readStored(): NucleusLang {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (isLang(stored)) return stored;\n } catch {}\n\n return 'es';\n}\n\nlet current: NucleusLang = readStored();\n\nexport function nucleusLang(): NucleusLang {\n return current;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusLanguage {\n private readonly _lang = signal<NucleusLang>(readStored());\n\n readonly lang = this._lang.asReadonly();\n\n constructor() {\n effect(() => {\n const lang = this._lang();\n\n current = lang;\n document.documentElement.lang = lang;\n\n try {\n localStorage.setItem(STORAGE_KEY, lang);\n } catch {}\n });\n }\n\n setLang(lang: NucleusLang): void {\n this._lang.set(lang);\n }\n}\n","import { MenuNode } from './api.models';\n\nexport interface MenuPermissions {\n readonly canView: boolean;\n readonly canInsert: boolean;\n readonly canEdit: boolean;\n readonly canDelete: boolean;\n readonly canExport: boolean;\n}\n\nexport const NO_PERMISSIONS: MenuPermissions = {\n canView: false,\n canInsert: false,\n canEdit: false,\n canDelete: false,\n canExport: false,\n};\n\nexport function findMenuByRoute(nodes: readonly MenuNode[], route: string): MenuNode | null {\n for (const node of nodes) {\n if (node.route && route.startsWith(node.route)) return node;\n\n const child = findMenuByRoute(node.children, route);\n\n if (child) return child;\n }\n\n return null;\n}\n\nexport function isUnderRoute(url: string, route: string): boolean {\n return url === route || url.startsWith(`${route}/`);\n}\n\nexport function matchMenuByRoute(nodes: readonly MenuNode[], url: string): MenuNode | null {\n let best: MenuNode | null = null;\n\n for (const node of nodes) {\n if (node.route && isUnderRoute(url, node.route)) {\n if (!best || node.route.length > (best.route ?? '').length) best = node;\n }\n\n const child = matchMenuByRoute(node.children, url);\n\n if (child && (!best || (child.route ?? '').length > (best.route ?? '').length)) best = child;\n }\n\n return best;\n}\n\nexport function permissionsOf(node: MenuNode | null): MenuPermissions {\n if (!node) return NO_PERMISSIONS;\n\n return {\n canView: node.canView,\n canInsert: node.canInsert,\n canEdit: node.canEdit,\n canDelete: node.canDelete,\n canExport: node.canExport,\n };\n}\n","export interface CommonCopy {\n readonly search: string;\n readonly choose: string;\n readonly noIcon: string;\n readonly noColor: string;\n readonly searchIcon: string;\n readonly noMatches: string;\n readonly sessionExpired: string;\n readonly errorNetwork: string;\n readonly errorTimeout: string;\n readonly errorServer: string;\n readonly errorInvalid: string;\n readonly errorForbidden: string;\n readonly errorNotFound: string;\n readonly errorConflict: string;\n readonly errorUnknown: string;\n}\n\nexport interface CommonCopySet {\n readonly es: CommonCopy;\n readonly en: CommonCopy;\n}\n\nexport const COMMON_COPY: CommonCopySet = {\n es: {\n search: 'Buscar',\n choose: 'Selecciona',\n noIcon: 'Sin icono',\n noColor: 'Sin color',\n searchIcon: 'Busca un icono',\n noMatches: 'Ningún icono coincide',\n sessionExpired: 'Tu sesión expiró. Vuelve a iniciar sesión.',\n errorNetwork:\n 'No se pudo conectar con el servidor. Revisa tu conexión o inténtalo en unos minutos.',\n errorTimeout: 'El servidor tardó demasiado en responder. Inténtalo de nuevo.',\n errorServer:\n 'Algo falló en el servidor y no pudimos completar la operación. Inténtalo de nuevo en unos ' +\n 'minutos; si sigue pasando, avísale al equipo.',\n errorInvalid: 'Revisa los datos: hay algo que no es válido.',\n errorForbidden: 'No tienes permiso para hacer esto.',\n errorNotFound: 'No encontramos lo que buscabas. Puede que ya no exista.',\n errorConflict: 'Ese cambio choca con algo que ya existe.',\n errorUnknown: 'No se pudo completar la operación. Inténtalo de nuevo.',\n },\n en: {\n search: 'Search',\n choose: 'Select',\n noIcon: 'No icon',\n noColor: 'No colour',\n searchIcon: 'Search an icon',\n noMatches: 'No icon matches',\n sessionExpired: 'Your session expired. Sign in again.',\n errorNetwork: 'Could not reach the server. Check your connection or try again in a moment.',\n errorTimeout: 'The server took too long to answer. Try again.',\n errorServer:\n 'Something broke on the server and we could not finish. Try again in a few minutes; if it ' +\n 'keeps happening, tell the team.',\n errorInvalid: 'Check the data: something is not valid.',\n errorForbidden: 'You do not have permission to do this.',\n errorNotFound: 'We could not find that. It may no longer exist.',\n errorConflict: 'That change clashes with something that already exists.',\n errorUnknown: 'We could not finish the operation. Try again.',\n },\n};\n\nexport function commonCopyOf(lang: string): CommonCopy {\n return lang === 'en' ? COMMON_COPY.en : COMMON_COPY.es;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { nucleusLang } from '../i18n/nucleus-language';\n\ninterface ProblemDetails {\n readonly detail?: string;\n readonly title?: string;\n readonly errors?: Record<string, string[]>;\n}\n\nconst SPOKEN: readonly number[] = [400, 402, 403, 404, 409, 422];\n\nfunction problemOf(error: HttpErrorResponse): ProblemDetails | null {\n const body = error.error;\n\n return body !== null && typeof body === 'object' ? (body as ProblemDetails) : null;\n}\n\nfunction fieldErrorsOf(problem: ProblemDetails | null): string {\n const groups = problem?.errors;\n\n if (!groups) return '';\n\n return Object.values(groups)\n .flat()\n .map((message) => message.trim())\n .filter(Boolean)\n .join(' ');\n}\n\nexport function nucleusErrorMessage(error: unknown, lang?: string): string {\n const copy = commonCopyOf(lang ?? nucleusLang());\n\n if (!(error instanceof HttpErrorResponse)) return copy.errorUnknown;\n\n const status = error.status;\n\n if (status === 0) return copy.errorNetwork;\n if (status === 401) return copy.sessionExpired;\n if (status === 408 || status === 504) return copy.errorTimeout;\n\n if (SPOKEN.includes(status)) {\n const problem = problemOf(error);\n const fields = fieldErrorsOf(problem);\n\n if (fields) return fields;\n\n const detail = problem?.detail?.trim() || problem?.title?.trim();\n\n if (detail) return detail;\n }\n\n if (status === 400 || status === 422) return copy.errorInvalid;\n if (status === 403) return copy.errorForbidden;\n if (status === 404) return copy.errorNotFound;\n if (status === 409) return copy.errorConflict;\n if (status >= 500) return copy.errorServer;\n\n return copy.errorUnknown;\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, computed, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NucleusAuth } from '../auth/nucleus-auth';\nimport { nucleusLogoutUrl } from '../auth/logout';\nimport { NucleusSessionAuth } from '../auth/session-auth.service';\nimport { UserSyncService } from '../auth/user-sync.service';\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { nucleusErrorMessage } from './error-message';\nimport { MenuPermissions, findMenuByRoute, permissionsOf } from './permissions';\nimport {\n AccessScope,\n AppSummary,\n CompanyOption,\n CompanySummary,\n LauncherApp,\n MeResponse,\n MenuNode,\n Site,\n SiteAccess,\n UserProfile,\n} from './api.models';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionService {\n private readonly http = inject(HttpClient);\n private readonly auth = inject(NucleusAuth, { optional: true });\n private readonly userSync = inject(UserSyncService);\n private readonly sessionAuth = inject(NucleusSessionAuth);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n private readonly _me = signal<MeResponse | null>(null);\n private readonly _menu = signal<readonly MenuNode[]>([]);\n private readonly _access = signal<SiteAccess | null>(null);\n private readonly _globalRole = signal<string | null>(null);\n private readonly _scope = signal<AccessScope | null>(null);\n private readonly _apps = signal<readonly LauncherApp[]>([]);\n private readonly _catalog = signal<readonly AppSummary[]>([]);\n private readonly _siteId = signal<string | null>(null);\n private readonly _loading = signal(false);\n private readonly _switching = signal(false);\n private readonly _error = signal<string | null>(null);\n\n private inFlight = false;\n private current: Promise<void> | null = null;\n private loadedKey: string | null = null;\n private language = 'es';\n\n readonly me = this._me.asReadonly();\n\n readonly menu = this._menu.asReadonly();\n\n readonly access = this._access.asReadonly();\n\n readonly scope = this._scope.asReadonly();\n\n readonly apps = this._apps.asReadonly();\n\n readonly catalog = this._catalog.asReadonly();\n\n readonly currentApp = computed<AppSummary | null>(\n () => this._catalog().find((app) => app.id.toLowerCase() === this.config.appId) ?? null,\n );\n\n readonly siteId = this._siteId.asReadonly();\n\n readonly loading = this._loading.asReadonly();\n\n readonly switching = this._switching.asReadonly();\n\n readonly error = this._error.asReadonly();\n\n readonly roleName = computed(() => this._access()?.roleName ?? this._globalRole());\n\n readonly siteName = computed(() => this._access()?.siteName ?? null);\n\n readonly companies = computed<readonly CompanySummary[]>(() => {\n const me = this._me();\n if (!me) return [];\n return [...me.ownedCompanies, ...me.sharedCompanies];\n });\n\n readonly companyOptions = computed<readonly CompanyOption[]>(() => {\n const me = this._me();\n if (!me) return [];\n\n return [\n ...me.ownedCompanies.map((company) => toOption(company, 'owner' as const)),\n ...me.sharedCompanies.map((company) => toOption(company, 'collaborator' as const)),\n ];\n });\n\n readonly companyId = computed(() => {\n const siteId = this._siteId();\n if (!siteId) return this._me()?.profile.lastCompanyId ?? null;\n\n const owner = this.companies().find((company) =>\n company.myAccess.some((entry) => entry.siteId === siteId),\n );\n\n return owner?.id ?? this._me()?.profile.lastCompanyId ?? null;\n });\n\n readonly companyName = computed(() => {\n const id = this.companyId();\n if (!id) return null;\n\n return this.companyOptions().find((company) => company.id === id)?.name ?? null;\n });\n\n load(language: string, force = false): Promise<void> {\n if (this.inFlight && this.current) return this.current;\n\n const task = this.run(language, force);\n\n this.current = task;\n\n return task;\n }\n\n ready(): Promise<void> {\n return this.current ?? Promise.resolve();\n }\n\n private async run(language: string, force: boolean): Promise<void> {\n if (!isNucleusConfigured(this.config)) return;\n\n const identity = this.auth?.user() ?? null;\n\n if (this.auth && !identity) return;\n\n const key = `${identity?.uid ?? 'cookie'}|${language}`;\n\n if (this.inFlight) return;\n if (!force && this.loadedKey === key) return;\n\n this.inFlight = true;\n this.loadedKey = key;\n this.language = language;\n\n this._loading.set(true);\n this._error.set(null);\n\n try {\n if (identity && this.auth) {\n await this.userSync.sync(identity, () => this.auth!.idToken());\n await this.sessionAuth.establish(force);\n }\n\n const [me, catalog] = await Promise.all([\n firstValueFrom(this.http.get<MeResponse>(`${this.config.securityApiUrl}/me`)),\n firstValueFrom(this.http.get<AppSummary[]>(`${this.config.securityApiUrl}/apps`)),\n ]);\n\n this._me.set(me);\n this._catalog.set([...catalog].sort((a, b) => a.sortOrder - b.sortOrder));\n this._apps.set(this.buildLauncher(catalog));\n\n await this.resolveMenu(me, language);\n } catch (error) {\n this._menu.set([]);\n\n if (isSessionRejected(error)) {\n await this.signOutToLanding();\n\n return;\n }\n\n this._error.set(nucleusErrorMessage(error, this.language));\n console.error('[session] no se pudo cargar la sesión del backend', error);\n } finally {\n this.inFlight = false;\n this._loading.set(false);\n }\n }\n\n async signOutToLanding(): Promise<void> {\n const landing = this.config.landingUrl;\n\n this.loadedKey = null;\n this._me.set(null);\n this._access.set(null);\n this._globalRole.set(null);\n this._apps.set([]);\n this._catalog.set([]);\n\n if (!landing) {\n this._error.set(commonCopyOf(this.language).sessionExpired);\n\n return;\n }\n\n await this.sessionAuth.clear();\n await this.auth?.signOut?.();\n\n window.location.href = nucleusLogoutUrl(landing);\n }\n\n permissionsFor(route: string): MenuPermissions {\n return permissionsOf(findMenuByRoute(this._menu(), route));\n }\n\n reload(language: string): Promise<void> {\n return this.load(language, true);\n }\n\n sites(companyId: string): Promise<Site[]> {\n return firstValueFrom(\n this.http.get<Site[]>(`${this.config.securityApiUrl}/companies/${companyId}/sites`),\n );\n }\n\n async accessibleSites(companyId: string): Promise<Site[]> {\n const company = this.companies().find((entry) => entry.id === companyId);\n const all = (await this.sites(companyId)).filter((site) => site.isActive);\n\n if (!company || company.isOwner) return all;\n\n const granted = new Set(company.myAccess.map((entry) => entry.siteId));\n\n return all.filter((site) => granted.has(site.id));\n }\n\n async switchContext(companyId: string, siteId: string): Promise<void> {\n if (this._switching()) return;\n\n this._switching.set(true);\n this._error.set(null);\n\n try {\n const profile = await firstValueFrom(\n this.http.put<UserProfile>(`${this.config.securityApiUrl}/me/context`, {\n companyId,\n siteId,\n }),\n );\n\n const me = this._me();\n\n if (me) {\n const updated: MeResponse = { ...me, profile };\n this._me.set(updated);\n this._siteId.set(siteId);\n await this.resolveMenu(updated, this.language, siteId);\n }\n } catch (error) {\n if (isSessionRejected(error)) {\n await this.signOutToLanding();\n\n return;\n }\n\n this._error.set(nucleusErrorMessage(error, this.language));\n console.error('[session] no se pudo cambiar de sede', error);\n } finally {\n this._switching.set(false);\n }\n }\n\n private async resolveMenu(me: MeResponse, language: string, preferred?: string): Promise<void> {\n const entries = [...me.ownedCompanies, ...me.sharedCompanies]\n .flatMap((company) => company.myAccess)\n .filter((entry) => entry.appId.toLowerCase() === this.config.appId);\n\n const wanted = preferred ?? me.profile.lastSiteId ?? null;\n\n const access = entries.find((entry) => entry.siteId === wanted) ?? entries[0] ?? null;\n\n if (access) {\n this._access.set(access);\n this._globalRole.set(null);\n this._siteId.set(access.siteId);\n this._scope.set('site');\n this._menu.set(await this.siteMenu(access.siteId, language));\n return;\n }\n\n const global = (me.globalAccess ?? []).find(\n (entry) => entry.appId.toLowerCase() === this.config.appId,\n );\n\n this._access.set(null);\n this._globalRole.set(global?.roleName ?? null);\n this._siteId.set(wanted);\n this._scope.set('account');\n this._menu.set(await this.accountMenu(language));\n }\n\n private buildLauncher(catalog: readonly AppSummary[]): LauncherApp[] {\n return catalog\n .filter((app) => app.id.toLowerCase() !== this.config.appId)\n .slice()\n .sort((a, b) => a.sortOrder - b.sortOrder);\n }\n\n private siteMenu(siteId: string, language: string): Promise<MenuNode[]> {\n return firstValueFrom(\n this.http.get<MenuNode[]>(\n `${this.config.securityApiUrl}/sites/${siteId}/apps/${this.config.appId}/menu`,\n { params: { language } },\n ),\n );\n }\n\n private accountMenu(language: string): Promise<MenuNode[]> {\n return firstValueFrom(\n this.http.get<MenuNode[]>(`${this.config.securityApiUrl}/me/menu`, {\n params: { appId: this.config.appId, language },\n }),\n );\n }\n}\n\nfunction toOption(company: CompanySummary, relation: 'owner' | 'collaborator'): CompanyOption {\n return {\n id: company.id,\n name: company.tradeName ?? company.legalName,\n relation,\n };\n}\n\nfunction isSessionRejected(error: unknown): boolean {\n return error instanceof HttpErrorResponse && (error.status === 401 || error.status === 403);\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\n\nimport { NUCLEUS_HOME, isHomeRoute, normalizeHomeRoute, routePath } from '../config/nucleus-home';\nimport { NucleusLanguage } from '../i18n/nucleus-language';\nimport { matchMenuByRoute } from './permissions';\nimport { SessionService } from './session.service';\n\nexport const nucleusAccessGuard: CanActivateFn = async (\n _route,\n state,\n): Promise<boolean | UrlTree> => {\n const session = inject(SessionService);\n const language = inject(NucleusLanguage);\n const router = inject(Router);\n const home = normalizeHomeRoute(inject(NUCLEUS_HOME));\n\n const url = routePath(state.url);\n\n if (isHomeRoute(home, url)) return true;\n\n await session.load(language.lang());\n\n const node = matchMenuByRoute(session.menu(), url);\n\n if (node && node.route !== home && node.canView) return true;\n\n return router.parseUrl(home);\n};\n","import { Injectable } from '@angular/core';\n\ninterface CacheEntry {\n readonly at: number;\n readonly value: unknown;\n}\n\nconst DEFAULT_TTL_MS = 30_000;\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusCache {\n private readonly entries = new Map<string, CacheEntry>();\n\n private readonly inFlight = new Map<string, Promise<unknown>>();\n\n read<T>(key: string, loader: () => Promise<T>, ttlMs = DEFAULT_TTL_MS): Promise<T> {\n const entry = this.entries.get(key);\n\n if (entry && Date.now() - entry.at < ttlMs) {\n return Promise.resolve(entry.value as T);\n }\n\n return this.load(key, loader);\n }\n\n prefetch<T>(key: string, loader: () => Promise<T>, ttlMs = DEFAULT_TTL_MS): void {\n const entry = this.entries.get(key);\n\n if (entry && Date.now() - entry.at < ttlMs) return;\n if (this.inFlight.has(key)) return;\n\n void this.load(key, loader).catch(() => undefined);\n }\n\n invalidate(...prefixes: readonly string[]): void {\n if (prefixes.length === 0) {\n this.entries.clear();\n\n return;\n }\n\n for (const key of [...this.entries.keys()]) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) this.entries.delete(key);\n }\n }\n\n private load<T>(key: string, loader: () => Promise<T>): Promise<T> {\n const running = this.inFlight.get(key) as Promise<T> | undefined;\n\n if (running) return running;\n\n const promise = loader()\n .then((value) => {\n this.entries.set(key, { at: Date.now(), value });\n\n return value;\n })\n .finally(() => {\n this.inFlight.delete(key);\n });\n\n this.inFlight.set(key, promise);\n\n return promise;\n }\n}\n","import { NucleusLang, nucleusLang } from '../i18n/nucleus-language';\n\nconst DATE_LOCALES: Record<NucleusLang, string> = {\n es: 'es-PE',\n en: 'en-US',\n};\n\nconst NUMBER_LOCALE = 'es-PE';\n\nconst DAY_MS = 86400000;\n\nconst DATE_ONLY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst MONEY = new Intl.NumberFormat(NUMBER_LOCALE, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n});\n\nconst QTY = new Intl.NumberFormat(NUMBER_LOCALE, { maximumFractionDigits: 4 });\n\nconst INTEGER = new Intl.NumberFormat(NUMBER_LOCALE, { maximumFractionDigits: 0 });\n\nconst dates = new Map<string, Intl.DateTimeFormat>();\n\nfunction formatter(kind: 'date' | 'stamp' | 'clock'): Intl.DateTimeFormat {\n const locale = DATE_LOCALES[nucleusLang()];\n const key = `${kind}:${locale}`;\n const cached = dates.get(key);\n\n if (cached) return cached;\n\n const options: Intl.DateTimeFormatOptions =\n kind === 'date'\n ? { day: '2-digit', month: 'short', year: 'numeric' }\n : kind === 'stamp'\n ? { day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }\n : { hour: '2-digit', minute: '2-digit' };\n\n const built = new Intl.DateTimeFormat(locale, options);\n\n dates.set(key, built);\n\n return built;\n}\n\nexport function nucleusParseDate(value: string | null | undefined): Date | null {\n if (!value) return null;\n\n if (DATE_ONLY.test(value)) {\n const [year, month, day] = value.split('-').map(Number);\n\n return new Date(year, month - 1, day);\n }\n\n const parsed = new Date(value);\n\n return Number.isNaN(parsed.valueOf()) ? null : parsed;\n}\n\nexport function money(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : MONEY.format(value);\n}\n\nexport function signedMoney(value: number | null | undefined): string {\n if (value === null || value === undefined) return '';\n\n return value > 0 ? `+${MONEY.format(value)}` : MONEY.format(value);\n}\n\nexport function qty(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : QTY.format(value);\n}\n\nexport function integer(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : INTEGER.format(value);\n}\n\nexport function percent(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : `${MONEY.format(value)}%`;\n}\n\nexport function day(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('date').format(parsed) : '';\n}\n\nexport function stamp(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('stamp').format(parsed) : '';\n}\n\nexport function clock(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('clock').format(parsed) : '';\n}\n\nexport function minutesAsClock(value: number | null | undefined): string {\n if (value === null || value === undefined) return '';\n\n const total = Math.max(Math.trunc(value), 0);\n const hours = Math.trunc(total / 60);\n const minutes = total % 60;\n\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n}\n\nexport function isoDay(value: Date | string | null | undefined): string {\n const parsed = typeof value === 'string' || value === null || value === undefined\n ? nucleusParseDate(value)\n : value;\n\n if (!parsed) return '';\n\n const year = parsed.getFullYear();\n const month = String(parsed.getMonth() + 1).padStart(2, '0');\n const date = String(parsed.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${date}`;\n}\n\nexport function toNumber(value: unknown): number {\n const parsed = typeof value === 'number' ? value : Number(value);\n\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nexport function shiftDay(value: string, days: number): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(new Date(parsed.valueOf() + days * DAY_MS)) : '';\n}\n\nexport function isToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) === isoDay(new Date()) : false;\n}\n\nexport function isBeforeToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) < isoDay(new Date()) : false;\n}\n\nexport function isOnOrBeforeToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) <= isoDay(new Date()) : false;\n}\n\nexport function startOfDayUtc(value: string): string {\n return `${isoDay(nucleusParseDate(value))}T00:00:00.000Z`;\n}\n\nexport function endOfDayUtc(value: string): string {\n return `${isoDay(nucleusParseDate(value))}T23:59:59.999Z`;\n}\n","export const FIELD_TARGETS = [\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[role=\"combobox\"]:not([aria-disabled=\"true\"])',\n].join(',');\n\nconst TEXTUAL: readonly string[] = ['text', 'email', 'password', 'number', 'search', 'tel', 'url'];\n\nexport function isReachable(element: HTMLElement): boolean {\n return element.tabIndex >= 0 && element.offsetParent !== null;\n}\n\nexport function fieldsIn(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FIELD_TARGETS)).filter(isReachable);\n}\n\nexport function moveTo(element: HTMLElement): void {\n element.focus({ preventScroll: true });\n\n if (element instanceof HTMLInputElement && TEXTUAL.includes(element.type)) {\n element.select();\n }\n}\n","export interface ShortcutBinding {\n readonly keys: string;\n readonly label: string;\n readonly whileTyping: boolean;\n readonly run: () => void;\n}\n\nconst MODIFIERS: readonly string[] = ['ctrl', 'alt', 'shift'];\n\nconst ALIASES: Readonly<Record<string, string>> = {\n cmd: 'ctrl',\n meta: 'ctrl',\n command: 'ctrl',\n control: 'ctrl',\n option: 'alt',\n esc: 'escape',\n ' ': 'space',\n};\n\nexport function normalizeKeys(keys: string): string {\n const parts = keys\n .toLowerCase()\n .split('+')\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => ALIASES[part] ?? part);\n\n const modifiers = MODIFIERS.filter((modifier) => parts.includes(modifier));\n const rest = parts.filter((part) => !MODIFIERS.includes(part));\n\n return [...modifiers, ...rest].join('+');\n}\n\nexport function comboOf(event: KeyboardEvent): string {\n const key = event.key.toLowerCase();\n const parts: string[] = [];\n\n if (event.ctrlKey || event.metaKey) parts.push('ctrl');\n if (event.altKey) parts.push('alt');\n if (event.shiftKey && key.length > 1) parts.push('shift');\n\n parts.push(ALIASES[key] ?? key);\n\n return parts.join('+');\n}\n\nexport function hasModifier(keys: string): boolean {\n return keys.startsWith('ctrl+') || keys.startsWith('alt+');\n}\n\nexport function isTypingTarget(target: EventTarget | null): boolean {\n const element = target as HTMLElement | null;\n\n if (!element || typeof element.tagName !== 'string') return false;\n if (element.isContentEditable) return true;\n\n return ['INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName);\n}\n\nexport function isApplePlatform(): boolean {\n if (typeof navigator === 'undefined') return false;\n\n return /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent);\n}\n\nconst DISPLAY: Readonly<Record<string, string>> = {\n escape: 'Esc',\n enter: 'Enter',\n space: 'Espacio',\n arrowup: '↑',\n arrowdown: '↓',\n arrowleft: '←',\n arrowright: '→',\n};\n\nexport function shortcutHint(keys: string): string {\n const apple = isApplePlatform();\n\n return normalizeKeys(keys)\n .split('+')\n .map((part) => {\n if (part === 'ctrl') return apple ? '⌘' : 'Ctrl';\n if (part === 'alt') return apple ? '⌥' : 'Alt';\n if (part === 'shift') return apple ? '⇧' : 'Shift';\n\n return DISPLAY[part] ?? part.toUpperCase();\n })\n .join(apple ? '' : '+');\n}\n\nconst ARIA: Readonly<Record<string, string>> = {\n ctrl: 'Control',\n alt: 'Alt',\n shift: 'Shift',\n escape: 'Escape',\n enter: 'Enter',\n space: 'Space',\n};\n\nexport function ariaKeysOf(keys: string): string {\n return normalizeKeys(keys)\n .split('+')\n .map((part) => ARIA[part] ?? part.toUpperCase())\n .join('+');\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, inject, signal } from '@angular/core';\n\nimport { ShortcutBinding, comboOf, hasModifier, isTypingTarget } from './shortcut.models';\n\nconst MODAL_SELECTOR = '.p-drawer-mask, .p-dialog-mask, .p-overlay-mask';\n\nconst STORAGE_KEY = 'nucleus_shortcuts';\n\nfunction readStored(): boolean {\n try {\n return localStorage.getItem(STORAGE_KEY) !== 'off';\n } catch {\n return true;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusShortcuts {\n private readonly document = inject(DOCUMENT);\n\n private readonly _bindings = signal<readonly ShortcutBinding[]>([]);\n private readonly _enabled = signal(readStored());\n\n readonly bindings = this._bindings.asReadonly();\n\n readonly enabled = this._enabled.asReadonly();\n\n constructor() {\n const listener = (event: Event) => this.handle(event as KeyboardEvent);\n\n this.document.addEventListener('keydown', listener);\n\n inject(DestroyRef).onDestroy(() => this.document.removeEventListener('keydown', listener));\n }\n\n setEnabled(enabled: boolean): void {\n this._enabled.set(enabled);\n\n try {\n localStorage.setItem(STORAGE_KEY, enabled ? 'on' : 'off');\n } catch {}\n }\n\n register(binding: ShortcutBinding): () => void {\n this._bindings.update((list) => [...list, binding]);\n\n return () => this._bindings.update((list) => list.filter((entry) => entry !== binding));\n }\n\n private handle(event: KeyboardEvent): void {\n if (!this._enabled() || event.isComposing || event.repeat) return;\n\n const combo = comboOf(event);\n const typing = isTypingTarget(event.target);\n const blocked = this.document.querySelector(MODAL_SELECTOR) !== null;\n const bindings = this._bindings();\n\n for (let index = bindings.length - 1; index >= 0; index -= 1) {\n const binding = bindings[index];\n\n if (!binding || binding.keys !== combo) continue;\n if (typing && !binding.whileTyping) continue;\n if (blocked && !hasModifier(binding.keys)) continue;\n\n event.preventDefault();\n binding.run();\n\n return;\n }\n }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\n\nimport { NucleusShortcuts } from './nucleus-shortcuts';\nimport { ariaKeysOf, hasModifier, normalizeKeys } from './shortcut.models';\n\nconst CLICKABLE = 'button, a, input';\n\n@Directive({\n selector: '[nucleusShortcut]',\n})\nexport class NucleusShortcut {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly shortcuts = inject(NucleusShortcuts);\n\n readonly nucleusShortcut = input.required<string>();\n\n readonly shortcutLabel = input('');\n\n readonly shortcutWhileTyping = input<boolean | null>(null);\n\n constructor() {\n effect((onCleanup) => {\n const keys = normalizeKeys(this.nucleusShortcut());\n const label = this.shortcutLabel();\n const whileTyping = this.shortcutWhileTyping() ?? hasModifier(keys);\n\n this.host.nativeElement.setAttribute('aria-keyshortcuts', ariaKeysOf(keys));\n\n const dispose = this.shortcuts.register({\n keys,\n label,\n whileTyping,\n run: () => this.press(),\n });\n\n onCleanup(dispose);\n });\n }\n\n private press(): void {\n const element = this.host.nativeElement;\n const target = element.matches(CLICKABLE)\n ? element\n : element.querySelector<HTMLElement>(CLICKABLE);\n\n if (!target || target.hasAttribute('disabled')) return;\n\n target.click();\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { fieldsIn, moveTo } from './focus';\n\nconst SCOPES = 'nucleus-card, form, .p-drawer-content';\n\nconst ACTIONS = '.actions button:not([disabled]), .drawer-actions button:not([disabled])';\n\n@Directive({\n selector: '[nucleusEnterAdvance]',\n host: { '(keydown)': 'onKeyDown($event)' },\n})\nexport class NucleusEnterAdvance {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n onKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.isComposing) return;\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n\n const source = event.target as HTMLElement | null;\n\n if (!source || source.tagName === 'TEXTAREA') return;\n if (source.getAttribute('aria-expanded') === 'true') return;\n\n const scope = this.scope();\n const targets = fieldsIn(scope);\n const index = targets.indexOf(source);\n\n if (index === -1) return;\n\n event.preventDefault();\n\n const next = targets[index + 1];\n\n if (next) {\n moveTo(next);\n return;\n }\n\n scope.querySelector<HTMLElement>(ACTIONS)?.focus();\n }\n\n private scope(): HTMLElement {\n const element = this.host.nativeElement;\n\n return element.closest<HTMLElement>(SCOPES) ?? element;\n }\n}\n","export interface GeoCountry {\n readonly id: string;\n readonly code: string;\n readonly phoneCode: string | null;\n readonly name: string;\n}\n\nexport interface GeoDivision {\n readonly id: string;\n readonly countryId: string;\n readonly parentId: string | null;\n readonly level: number;\n readonly code: string;\n readonly name: string;\n readonly kind: string | null;\n}\n\nexport interface GeoLevel {\n readonly level: number;\n readonly kind: string | null;\n readonly items: readonly GeoDivision[];\n}\n\nexport interface GeoPlace {\n readonly countryId: string;\n readonly countryCode: string;\n readonly countryName: string;\n readonly trail: readonly GeoDivision[];\n}\n\nexport interface GeoValue {\n readonly countryId: string | null;\n readonly divisionId: string | null;\n}\n\nexport const EMPTY_GEO_VALUE: GeoValue = { countryId: null, divisionId: null };\n\nexport function flagOf(code: string): string {\n if (code.length !== 2) return '';\n\n return String.fromCodePoint(\n ...[...code.toUpperCase()].map((letter) => 0x1f1a5 + letter.charCodeAt(0)),\n );\n}\n","export interface GeoCopy {\n readonly country: string;\n readonly levels: readonly [string, string, string, string];\n readonly kinds: Readonly<Record<string, string>>;\n}\n\nexport interface GeoCopySet {\n readonly es: GeoCopy;\n readonly en: GeoCopy;\n}\n\nexport const GEO_COPY: GeoCopySet = {\n es: {\n country: 'País',\n levels: ['Región', 'Provincia', 'Distrito', 'Zona'],\n kinds: {\n department: 'Departamento',\n province: 'Provincia',\n district: 'Distrito',\n region: 'Región',\n state: 'Estado',\n municipality: 'Municipio',\n county: 'Condado',\n parish: 'Parroquia',\n prefecture: 'Prefectura',\n governorate: 'Gobernación',\n territory: 'Territorio',\n canton: 'Cantón',\n emirate: 'Emirato',\n oblast: 'Óblast',\n city: 'Ciudad',\n division: 'División',\n republic: 'República',\n 'autonomous community': 'Comunidad autónoma',\n 'federal district': 'Distrito federal',\n 'capital city': 'Ciudad capital',\n 'metropolitan department': 'Departamento metropolitano',\n 'unitary authority': 'Autoridad unitaria',\n },\n },\n en: {\n country: 'Country',\n levels: ['Region', 'Province', 'District', 'Area'],\n kinds: {\n department: 'Department',\n province: 'Province',\n district: 'District',\n region: 'Region',\n state: 'State',\n municipality: 'Municipality',\n county: 'County',\n parish: 'Parish',\n prefecture: 'Prefecture',\n governorate: 'Governorate',\n territory: 'Territory',\n canton: 'Canton',\n emirate: 'Emirate',\n oblast: 'Oblast',\n city: 'City',\n division: 'Division',\n republic: 'Republic',\n 'autonomous community': 'Autonomous community',\n 'federal district': 'Federal district',\n 'capital city': 'Capital city',\n 'metropolitan department': 'Metropolitan department',\n 'unitary authority': 'Unitary authority',\n },\n },\n};\n\nexport function geoCopyOf(lang: string): GeoCopy {\n return lang === 'en' ? GEO_COPY.en : GEO_COPY.es;\n}\n\nexport function levelLabel(copy: GeoCopy, level: number, kind: string | null): string {\n if (kind) {\n const known = copy.kinds[kind.toLowerCase()];\n if (known) return known;\n }\n\n const index = Math.min(Math.max(level, 1), copy.levels.length) - 1;\n\n return copy.levels[index];\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG } from '../config/nucleus-config';\nimport { GeoCountry, GeoLevel, GeoPlace } from './geo.models';\n\nconst EMPTY_LEVEL: GeoLevel = { level: 0, kind: null, items: [] };\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusGeo {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n private readonly cache = new Map<string, Promise<unknown>>();\n\n countries(language: string): Promise<readonly GeoCountry[]> {\n return this.once(`countries|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoCountry[]>(`${this.config.securityApiUrl}/geo/countries`, {\n params: { language },\n }),\n ),\n );\n }\n\n divisions(countryId: string, parentId: string | null, language: string): Promise<GeoLevel> {\n const params: Record<string, string> = { language };\n\n if (parentId) params['parentId'] = parentId;\n\n return this.once(`divisions|${countryId}|${parentId ?? ''}|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoLevel>(\n `${this.config.securityApiUrl}/geo/countries/${countryId}/divisions`,\n { params },\n ),\n ),\n );\n }\n\n place(divisionId: string, language: string): Promise<GeoPlace> {\n return this.once(`place|${divisionId}|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoPlace>(\n `${this.config.securityApiUrl}/geo/divisions/${divisionId}/place`,\n { params: { language } },\n ),\n ),\n );\n }\n\n async levelOf(countryId: string, parentId: string | null, language: string): Promise<GeoLevel> {\n try {\n return await this.divisions(countryId, parentId, language);\n } catch {\n return EMPTY_LEVEL;\n }\n }\n\n private once<T>(key: string, load: () => Promise<T>): Promise<T> {\n const cached = this.cache.get(key);\n\n if (cached) return cached as Promise<T>;\n\n const started = load().catch((error) => {\n this.cache.delete(key);\n throw error;\n });\n\n this.cache.set(key, started);\n\n return started;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SelectModule } from 'primeng/select';\n\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { NucleusEnterAdvance } from '../a11y/nucleus-enter-advance';\nimport { NucleusLanguage } from '../i18n/nucleus-language';\nimport { geoCopyOf, levelLabel } from './geo.copy';\nimport { EMPTY_GEO_VALUE, GeoCountry, GeoDivision, GeoValue } from './geo.models';\nimport { NucleusGeo } from './nucleus-geo';\n\ninterface GeoStep {\n readonly level: number;\n readonly kind: string | null;\n readonly items: GeoDivision[];\n readonly selectedId: string | null;\n}\n\n@Component({\n selector: 'nucleus-geo-select',\n imports: [SelectModule, FormsModule],\n hostDirectives: [NucleusEnterAdvance],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n `,\n template: `\n @let copy = labels();\n @let shared = words();\n\n <div class=\"ns-form-grid\" [class]=\"gridClass()\">\n <div class=\"ns-field is-span-1 is-size-md\">\n <label for=\"ns-geo-country\">{{ copy.country }}</label>\n <p-select\n inputId=\"ns-geo-country\"\n [options]=\"countries()\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"value().countryId\"\n (ngModelChange)=\"pickCountry($event)\"\n [disabled]=\"readonly()\"\n [filter]=\"true\"\n filterBy=\"name\"\n [filterPlaceholder]=\"shared.search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"shared.choose\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n </div>\n\n @for (step of steps(); track step.level; let index = $index) {\n <div class=\"ns-field is-span-1 is-size-md\">\n <label [attr.for]=\"'ns-geo-' + step.level\">{{ nameOf(step) }}</label>\n <p-select\n [inputId]=\"'ns-geo-' + step.level\"\n [options]=\"step.items\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"step.selectedId\"\n (ngModelChange)=\"pick(index, $event)\"\n [disabled]=\"readonly()\"\n [filter]=\"true\"\n filterBy=\"name\"\n [filterPlaceholder]=\"shared.search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"shared.choose\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n </div>\n }\n </div>\n `,\n})\nexport class NucleusGeoSelect {\n private readonly geo = inject(NucleusGeo);\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<GeoValue>(EMPTY_GEO_VALUE);\n\n readonly readonly = input(false);\n\n readonly columns = input<number | null>(null);\n\n protected readonly countries = signal<GeoCountry[]>([]);\n\n protected readonly steps = signal<GeoStep[]>([]);\n\n protected readonly labels = computed(() => geoCopyOf(this.language.lang()));\n\n protected readonly words = computed(() => commonCopyOf(this.language.lang()));\n\n private syncedKey: string | null = null;\n\n constructor() {\n effect(() => {\n const lang = this.language.lang();\n const current = this.value();\n const key = `${lang}|${current.countryId ?? ''}|${current.divisionId ?? ''}`;\n\n if (key === this.syncedKey) return;\n\n this.syncedKey = key;\n\n untracked(() => void this.sync(current, lang));\n });\n }\n\n protected gridClass(): string {\n const columns = this.columns();\n\n return columns ? `is-cap-${Math.min(Math.max(columns, 1), 4)}` : '';\n }\n\n protected nameOf(step: GeoStep): string {\n return levelLabel(this.labels(), step.level, step.kind);\n }\n\n protected async pickCountry(countryId: string | null): Promise<void> {\n const lang = this.language.lang();\n\n this.syncedKey = `${lang}|${countryId ?? ''}|`;\n this.value.set({ countryId, divisionId: null });\n\n if (!countryId) {\n this.steps.set([]);\n return;\n }\n\n const first = await this.geo.levelOf(countryId, null, lang);\n\n this.steps.set(first.items.length ? [toStep(first.level, first.kind, first.items, null)] : []);\n }\n\n protected async pick(index: number, divisionId: string | null): Promise<void> {\n const countryId = this.value().countryId;\n\n if (!countryId) return;\n\n const lang = this.language.lang();\n const next = this.steps().slice(0, index + 1);\n const current = next[index];\n\n if (!current) return;\n\n next[index] = { ...current, selectedId: divisionId };\n\n if (divisionId) {\n const child = await this.geo.levelOf(countryId, divisionId, lang);\n\n if (child.items.length) {\n next.push(toStep(child.level, child.kind, child.items, null));\n }\n }\n\n this.steps.set(next);\n\n const deepest = deepestOf(next);\n\n this.syncedKey = `${lang}|${countryId}|${deepest ?? ''}`;\n this.value.set({ countryId, divisionId: deepest });\n }\n\n private async sync(value: GeoValue, lang: string): Promise<void> {\n this.countries.set([...(await this.geo.countries(lang))]);\n\n if (!value.countryId) {\n this.steps.set([]);\n return;\n }\n\n if (!value.divisionId) {\n const first = await this.geo.levelOf(value.countryId, null, lang);\n\n this.steps.set(first.items.length ? [toStep(first.level, first.kind, first.items, null)] : []);\n return;\n }\n\n const place = await this.geo.place(value.divisionId, lang);\n const built: GeoStep[] = [];\n\n let parentId: string | null = null;\n\n for (const node of place.trail) {\n const level = await this.geo.levelOf(place.countryId, parentId, lang);\n\n if (!level.items.length) break;\n\n built.push(toStep(level.level, level.kind, level.items, node.id));\n parentId = node.id;\n }\n\n const tail = await this.geo.levelOf(place.countryId, parentId, lang);\n\n if (tail.items.length) {\n built.push(toStep(tail.level, tail.kind, tail.items, null));\n }\n\n this.steps.set(built);\n }\n}\n\nfunction toStep(\n level: number,\n kind: string | null,\n items: readonly GeoDivision[],\n selectedId: string | null,\n): GeoStep {\n return { level, kind, items: [...items], selectedId };\n}\n\nfunction deepestOf(steps: readonly GeoStep[]): string | null {\n for (let index = steps.length - 1; index >= 0; index -= 1) {\n const selected = steps[index]?.selectedId;\n\n if (selected) return selected;\n }\n\n return null;\n}\n","export const TEXT_CONTRAST = 4.5;\n\nexport const CONTROL_CONTRAST = 3;\n\nconst DARK_INK = '#101014';\n\nconst LIGHT_INK = '#ffffff';\n\nexport interface ContrastIssue {\n readonly scope: string;\n\n readonly pair: string;\n\n readonly ratio: number;\n\n readonly required: number;\n}\n\nexport function relativeLuminance(hex: string): number {\n const channel = (offset: number): number => {\n const value = parseInt(hex.slice(offset, offset + 2), 16) / 255;\n\n return value <= 0.03928 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4);\n };\n\n return 0.2126 * channel(1) + 0.7152 * channel(3) + 0.0722 * channel(5);\n}\n\nexport function contrastRatio(foreground: string, background: string): number {\n const first = relativeLuminance(foreground);\n const second = relativeLuminance(background);\n\n return (Math.max(first, second) + 0.05) / (Math.min(first, second) + 0.05);\n}\n\nexport function readableOn(background: string): string {\n return contrastRatio(DARK_INK, background) >= contrastRatio(LIGHT_INK, background)\n ? DARK_INK\n : LIGHT_INK;\n}\n\nexport function mixHex(foreground: string, background: string, ratio: number): string {\n const amount = Math.min(Math.max(ratio, 0), 1);\n\n const channel = (offset: number): string => {\n const front = parseInt(foreground.slice(offset, offset + 2), 16);\n const back = parseInt(background.slice(offset, offset + 2), 16);\n\n return Math.round(front * amount + back * (1 - amount))\n .toString(16)\n .padStart(2, '0');\n };\n\n return `#${channel(1)}${channel(3)}${channel(5)}`;\n}\n\nexport function meetsContrast(foreground: string, background: string, required: number): boolean {\n return contrastRatio(foreground, background) >= required;\n}\n\nexport function contrastIssue(\n scope: string,\n pair: string,\n foreground: string,\n background: string,\n required: number,\n): ContrastIssue | null {\n const ratio = contrastRatio(foreground, background);\n\n return ratio >= required ? null : { scope, pair, ratio, required };\n}\n","import { ContrastIssue, CONTROL_CONTRAST, TEXT_CONTRAST, contrastIssue, readableOn } from './contrast';\n\nexport type FrameId =\n | 'nucleus'\n | 'ember'\n | 'forest'\n | 'plum'\n | 'midnight'\n | 'slate'\n | 'ocean'\n | 'sand'\n | 'ink'\n | 'graphite'\n | 'paper'\n | 'mist';\n\nexport type CanvasId = 'light' | 'dim' | 'dark';\n\nexport type CanvasPreference = CanvasId | 'system';\n\nexport type AccentId =\n | 'violet'\n | 'blue'\n | 'cyan'\n | 'green'\n | 'lime'\n | 'amber'\n | 'orange'\n | 'rose'\n | 'red';\n\nexport type AccentPreference = AccentId | 'auto';\n\nexport type DensityId = 'comfortable' | 'compact';\n\nexport interface FrameTokens {\n readonly bg: string;\n\n readonly raised: string;\n\n readonly ink: string;\n\n readonly muted: string;\n\n readonly line: string;\n\n readonly glow: string;\n}\n\nexport interface Frame {\n readonly id: FrameId;\n\n readonly scheme: CanvasId;\n\n readonly starfield: boolean;\n\n readonly accent: AccentId;\n\n readonly tokens: FrameTokens;\n}\n\nexport interface CanvasTokens {\n readonly bg: string;\n\n readonly surface: string;\n\n readonly surfaceAlt: string;\n\n readonly text: string;\n\n readonly textMuted: string;\n\n readonly border: string;\n}\n\nexport interface CanvasEffects {\n readonly shadowOne: string;\n\n readonly shadowTwo: string;\n\n readonly wash: number;\n\n readonly washStrong: number;\n\n readonly headerBg: string;\n\n readonly headerInk: string;\n\n readonly headerLine: string;\n\n readonly danger: string;\n\n readonly success: string;\n\n readonly warning: string;\n}\n\nexport interface Canvas {\n readonly id: CanvasId;\n\n readonly tokens: CanvasTokens;\n\n readonly effects: CanvasEffects;\n}\n\nexport interface Accent {\n readonly id: AccentId;\n\n readonly light: string;\n\n readonly dark: string;\n}\n\nexport interface Density {\n readonly id: DensityId;\n\n readonly scale: number;\n}\n\nexport interface Appearance {\n readonly frame: FrameId;\n\n readonly canvas: CanvasPreference;\n\n readonly accent: AccentPreference;\n\n readonly density: DensityId;\n}\n\nexport const FRAMES: readonly Frame[] = [\n {\n id: 'nucleus',\n scheme: 'dark',\n starfield: true,\n accent: 'violet',\n tokens: {\n bg: '#16132b',\n raised: '#241f42',\n ink: '#ece9fb',\n muted: '#9d95c6',\n line: '#302a54',\n glow: '#8c7ff0',\n },\n },\n {\n id: 'midnight',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#131f33',\n raised: '#1e2e48',\n ink: '#e3ecfa',\n muted: '#94a9c9',\n line: '#2b3d5d',\n glow: '#6ea8f0',\n },\n },\n {\n id: 'ocean',\n scheme: 'dark',\n starfield: false,\n accent: 'cyan',\n tokens: {\n bg: '#0d2a30',\n raised: '#153c45',\n ink: '#e0f2f4',\n muted: '#8cb3b9',\n line: '#1d4e58',\n glow: '#4cc5e8',\n },\n },\n {\n id: 'forest',\n scheme: 'dark',\n starfield: false,\n accent: 'green',\n tokens: {\n bg: '#122419',\n raised: '#1d3526',\n ink: '#e2f1e7',\n muted: '#93b8a1',\n line: '#28462f',\n glow: '#5cc47f',\n },\n },\n {\n id: 'plum',\n scheme: 'dark',\n starfield: false,\n accent: 'rose',\n tokens: {\n bg: '#241330',\n raised: '#341e43',\n ink: '#f3e8f7',\n muted: '#b596c3',\n line: '#452851',\n glow: '#cf7fdb',\n },\n },\n {\n id: 'ember',\n scheme: 'dark',\n starfield: false,\n accent: 'red',\n tokens: {\n bg: '#2a1113',\n raised: '#3d1b1f',\n ink: '#f8e6e7',\n muted: '#c9979c',\n line: '#4d2429',\n glow: '#f0797b',\n },\n },\n {\n id: 'sand',\n scheme: 'dark',\n starfield: false,\n accent: 'amber',\n tokens: {\n bg: '#2b2415',\n raised: '#3d3320',\n ink: '#f6efdd',\n muted: '#c2b18b',\n line: '#4b3f28',\n glow: '#e0a33a',\n },\n },\n {\n id: 'slate',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#232b36',\n raised: '#313c4b',\n ink: '#e6ecf4',\n muted: '#9fb0c4',\n line: '#3d4a5b',\n glow: '#6fb2ea',\n },\n },\n {\n id: 'ink',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#101318',\n raised: '#1b2129',\n ink: '#edf0f4',\n muted: '#97a1ae',\n line: '#262d37',\n glow: '#7fb3d9',\n },\n },\n {\n id: 'graphite',\n scheme: 'dark',\n starfield: false,\n accent: 'violet',\n tokens: {\n bg: '#17171a',\n raised: '#232327',\n ink: '#eeeef0',\n muted: '#9c9ca4',\n line: '#2f2f35',\n glow: '#b9b9c2',\n },\n },\n {\n id: 'paper',\n scheme: 'light',\n starfield: false,\n accent: 'violet',\n tokens: {\n bg: '#ffffff',\n raised: '#f1f0f5',\n ink: '#16151d',\n muted: '#5e5c6b',\n line: '#e3e2ea',\n glow: '#5b4fd6',\n },\n },\n {\n id: 'mist',\n scheme: 'light',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#eef1f6',\n raised: '#e2e7ef',\n ink: '#141a24',\n muted: '#576274',\n line: '#d3dae5',\n glow: '#1160b8',\n },\n },\n];\n\nexport const CANVASES: readonly Canvas[] = [\n {\n id: 'light',\n tokens: {\n bg: '#edeff3',\n surface: '#ffffff',\n surfaceAlt: '#e2e6ed',\n text: '#16151d',\n textMuted: '#5a5f6b',\n border: '#d3d8e1',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(16 20 30 / 6%), 0 2px 8px rgb(16 20 30 / 5%)',\n shadowTwo: '0 4px 12px rgb(16 20 30 / 8%), 0 12px 32px rgb(16 20 30 / 7%)',\n wash: 0.1,\n washStrong: 0.18,\n headerBg: '#d8dee8',\n headerInk: '#39404e',\n headerLine: '#bcc5d4',\n danger: '#b02121',\n success: '#136b35',\n warning: '#8a5a00',\n },\n },\n {\n id: 'dim',\n tokens: {\n bg: '#1b1a22',\n surface: '#23222c',\n surfaceAlt: '#2c2b37',\n text: '#e9e8ef',\n textMuted: '#a6a4b4',\n border: '#383744',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(0 0 0 / 24%)',\n shadowTwo: '0 10px 34px rgb(0 0 0 / 40%)',\n wash: 0.09,\n washStrong: 0.17,\n headerBg: '#302f3d',\n headerInk: '#c8c6d4',\n headerLine: '#423f50',\n danger: '#f0797b',\n success: '#5bd98a',\n warning: '#e0a33a',\n },\n },\n {\n id: 'dark',\n tokens: {\n bg: '#0e0d13',\n surface: '#17161f',\n surfaceAlt: '#211f2a',\n text: '#f2f1f6',\n textMuted: '#a09eb0',\n border: '#2a2833',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(0 0 0 / 28%)',\n shadowTwo: '0 10px 34px rgb(0 0 0 / 45%)',\n wash: 0.08,\n washStrong: 0.16,\n headerBg: '#262433',\n headerInk: '#c2c0ce',\n headerLine: '#3a3745',\n danger: '#f0797b',\n success: '#5bd98a',\n warning: '#e0a33a',\n },\n },\n];\n\nexport const ACCENTS: readonly Accent[] = [\n { id: 'violet', light: '#5b4fd6', dark: '#9b8ef5' },\n { id: 'blue', light: '#1160b8', dark: '#6fb2f2' },\n { id: 'cyan', light: '#0d6f87', dark: '#4cc5e8' },\n { id: 'green', light: '#157a3c', dark: '#5bd98a' },\n { id: 'lime', light: '#4d7c0f', dark: '#a3d94b' },\n { id: 'amber', light: '#8a5a00', dark: '#e0a33a' },\n { id: 'orange', light: '#b2430c', dark: '#f2934f' },\n { id: 'rose', light: '#b21b5c', dark: '#f07aab' },\n { id: 'red', light: '#b02121', dark: '#f0797b' },\n];\n\nexport const DENSITIES: readonly Density[] = [\n { id: 'comfortable', scale: 1 },\n { id: 'compact', scale: 0.72 },\n];\n\nexport const DEFAULT_APPEARANCE: Appearance = {\n frame: 'nucleus',\n canvas: 'dark',\n accent: 'auto',\n density: 'comfortable',\n};\n\nexport const LEGACY_THEMES: Readonly<Record<string, Partial<Appearance>>> = {\n nucleus: { frame: 'nucleus', canvas: 'dark', accent: 'auto' },\n light: { frame: 'paper', canvas: 'light', accent: 'blue' },\n dark: { frame: 'graphite', canvas: 'dark', accent: 'blue' },\n bubblegum: { frame: 'plum', canvas: 'light', accent: 'rose' },\n 'cool-breeze': { frame: 'ocean', canvas: 'light', accent: 'cyan' },\n 'cool-slate': { frame: 'slate', canvas: 'dark', accent: 'blue' },\n 'icy-mint': { frame: 'ocean', canvas: 'light', accent: 'green' },\n 'juicy-plum': { frame: 'plum', canvas: 'dark', accent: 'rose' },\n 'mango-paradise': { frame: 'sand', canvas: 'light', accent: 'orange' },\n 'moonlight-glow': { frame: 'midnight', canvas: 'dark', accent: 'blue' },\n 'mystical-forest': { frame: 'forest', canvas: 'dark', accent: 'green' },\n 'silky-pink': { frame: 'plum', canvas: 'light', accent: 'rose' },\n 'spicy-red': { frame: 'ember', canvas: 'dark', accent: 'red' },\n 'sunny-day': { frame: 'sand', canvas: 'light', accent: 'amber' },\n system: { frame: 'paper', canvas: 'system', accent: 'blue' },\n};\n\nconst FRAME_BY_ID = new Map(FRAMES.map((frame) => [frame.id, frame]));\n\nconst CANVAS_BY_ID = new Map(CANVASES.map((canvas) => [canvas.id, canvas]));\n\nconst ACCENT_BY_ID = new Map(ACCENTS.map((accent) => [accent.id, accent]));\n\nconst DENSITY_BY_ID = new Map(DENSITIES.map((density) => [density.id, density]));\n\nexport function frameById(id: string): Frame {\n return FRAME_BY_ID.get(id as FrameId) ?? FRAME_BY_ID.get(DEFAULT_APPEARANCE.frame)!;\n}\n\nexport function canvasById(id: CanvasId): Canvas {\n return CANVAS_BY_ID.get(id) ?? CANVAS_BY_ID.get('dark')!;\n}\n\nexport function accentById(id: string): Accent {\n return ACCENT_BY_ID.get(id as AccentId) ?? ACCENT_BY_ID.get('violet')!;\n}\n\nexport function densityById(id: string): Density {\n return DENSITY_BY_ID.get(id as DensityId) ?? DENSITY_BY_ID.get('comfortable')!;\n}\n\nexport function isFrameId(value: unknown): value is FrameId {\n return typeof value === 'string' && FRAME_BY_ID.has(value as FrameId);\n}\n\nexport function isCanvasPreference(value: unknown): value is CanvasPreference {\n return value === 'system' || (typeof value === 'string' && CANVAS_BY_ID.has(value as CanvasId));\n}\n\nexport function isAccentPreference(value: unknown): value is AccentPreference {\n return value === 'auto' || (typeof value === 'string' && ACCENT_BY_ID.has(value as AccentId));\n}\n\nexport function isDensityId(value: unknown): value is DensityId {\n return typeof value === 'string' && DENSITY_BY_ID.has(value as DensityId);\n}\n\nexport function resolveAccent(frame: Frame, preference: AccentPreference): Accent {\n return accentById(preference === 'auto' ? frame.accent : preference);\n}\n\nexport function accentOn(accent: Accent, canvas: CanvasId): string {\n return canvas === 'light' ? accent.light : accent.dark;\n}\n\nexport function isDarkCanvas(canvas: CanvasId): boolean {\n return canvas !== 'light';\n}\n\nexport function auditAppearance(): readonly ContrastIssue[] {\n const issues: (ContrastIssue | null)[] = [];\n\n for (const canvas of CANVASES) {\n const { bg, surface, surfaceAlt } = canvas.tokens;\n const { danger, success, warning } = canvas.effects;\n const scope = `semantic:${canvas.id}`;\n\n for (const [name, color] of [\n ['danger', danger],\n ['success', success],\n ['warning', warning],\n ] as const) {\n issues.push(\n contrastIssue(scope, `${name}/bg`, color, bg, TEXT_CONTRAST),\n contrastIssue(scope, `${name}/surface`, color, surface, TEXT_CONTRAST),\n contrastIssue(scope, `${name}/surfaceAlt`, color, surfaceAlt, TEXT_CONTRAST),\n );\n }\n }\n\n for (const frame of FRAMES) {\n const { bg, raised, ink, muted, glow } = frame.tokens;\n const scope = `frame:${frame.id}`;\n\n issues.push(\n contrastIssue(scope, 'ink/bg', ink, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'ink/raised', ink, raised, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/bg', muted, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/raised', muted, raised, TEXT_CONTRAST),\n contrastIssue(scope, 'glow/bg', glow, bg, CONTROL_CONTRAST),\n contrastIssue(scope, 'glow/raised', glow, raised, CONTROL_CONTRAST),\n contrastIssue(scope, 'onGlow/glow', readableOn(glow), glow, TEXT_CONTRAST),\n );\n }\n\n for (const canvas of CANVASES) {\n const { bg, surface, surfaceAlt, text, textMuted } = canvas.tokens;\n const scope = `canvas:${canvas.id}`;\n\n issues.push(\n contrastIssue(scope, 'text/bg', text, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'text/surface', text, surface, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/bg', textMuted, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/surface', textMuted, surface, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/surfaceAlt', textMuted, surfaceAlt, TEXT_CONTRAST),\n );\n }\n\n for (const accent of ACCENTS) {\n for (const canvas of CANVASES) {\n const color = accentOn(accent, canvas.id);\n const scope = `accent:${accent.id}/${canvas.id}`;\n\n issues.push(\n contrastIssue(scope, 'accent/bg', color, canvas.tokens.bg, CONTROL_CONTRAST),\n contrastIssue(scope, 'accent/surface', color, canvas.tokens.surface, CONTROL_CONTRAST),\n contrastIssue(scope, 'accent/surfaceAlt', color, canvas.tokens.surfaceAlt, CONTROL_CONTRAST),\n contrastIssue(scope, 'onAccent/accent', readableOn(color), color, TEXT_CONTRAST),\n );\n }\n }\n\n return issues.filter((issue): issue is ContrastIssue => issue !== null);\n}\n","import { NucleusLang } from '../i18n/nucleus-language';\nimport { AccentId, AccentPreference, CanvasPreference, DensityId, FrameId } from './theme';\n\nexport interface ThemeCopy {\n readonly title: string;\n readonly frameTitle: string;\n readonly frameHint: string;\n readonly canvasTitle: string;\n readonly canvasHint: string;\n readonly accentTitle: string;\n readonly accentHint: string;\n readonly densityTitle: string;\n readonly densityHint: string;\n readonly frames: Readonly<Record<FrameId, string>>;\n readonly canvases: Readonly<Record<CanvasPreference, string>>;\n readonly accents: Readonly<Record<AccentPreference, string>>;\n readonly densities: Readonly<Record<DensityId, string>>;\n}\n\nconst FRAMES_ES: Readonly<Record<FrameId, string>> = {\n nucleus: 'Nucleus',\n midnight: 'Medianoche',\n ocean: 'Océano',\n forest: 'Bosque',\n plum: 'Ciruela',\n ember: 'Brasa',\n sand: 'Arena',\n slate: 'Pizarra',\n ink: 'Tinta',\n graphite: 'Grafito',\n paper: 'Papel',\n mist: 'Bruma',\n};\n\nconst FRAMES_EN: Readonly<Record<FrameId, string>> = {\n nucleus: 'Nucleus',\n midnight: 'Midnight',\n ocean: 'Ocean',\n forest: 'Forest',\n plum: 'Plum',\n ember: 'Ember',\n sand: 'Sand',\n slate: 'Slate',\n ink: 'Ink',\n graphite: 'Graphite',\n paper: 'Paper',\n mist: 'Mist',\n};\n\nconst ACCENTS_ES: Readonly<Record<AccentPreference, string>> = {\n auto: 'Del marco',\n violet: 'Violeta',\n blue: 'Azul',\n cyan: 'Cian',\n green: 'Verde',\n lime: 'Lima',\n amber: 'Ámbar',\n orange: 'Naranja',\n rose: 'Rosa',\n red: 'Rojo',\n};\n\nconst ACCENTS_EN: Readonly<Record<AccentPreference, string>> = {\n auto: 'From the frame',\n violet: 'Violet',\n blue: 'Blue',\n cyan: 'Cyan',\n green: 'Green',\n lime: 'Lime',\n amber: 'Amber',\n orange: 'Orange',\n rose: 'Rose',\n red: 'Red',\n};\n\nexport const THEME_COPY: Readonly<Record<NucleusLang, ThemeCopy>> = {\n es: {\n title: 'Apariencia',\n frameTitle: 'Marco',\n frameHint: 'El color de la barra superior y del menú lateral.',\n canvasTitle: 'Lienzo',\n canvasHint: 'La superficie donde lees y escribes. Nunca se tiñe.',\n accentTitle: 'Acción',\n accentHint: 'El color del botón principal, del foco y de lo seleccionado.',\n densityTitle: 'Densidad',\n densityHint: 'Cuántas filas quieres ver de una sola pasada.',\n frames: FRAMES_ES,\n canvases: { light: 'Claro', dim: 'Atenuado', dark: 'Oscuro', system: 'Del sistema' },\n accents: ACCENTS_ES,\n densities: { comfortable: 'Cómoda', compact: 'Compacta' },\n },\n en: {\n title: 'Appearance',\n frameTitle: 'Frame',\n frameHint: 'The color of the top bar and the side menu.',\n canvasTitle: 'Canvas',\n canvasHint: 'The surface where you read and type. Never tinted.',\n accentTitle: 'Action',\n accentHint: 'The color of the primary button, the focus ring and the selected row.',\n densityTitle: 'Density',\n densityHint: 'How many rows you want to see at a glance.',\n frames: FRAMES_EN,\n canvases: { light: 'Light', dim: 'Dim', dark: 'Dark', system: 'System' },\n accents: ACCENTS_EN,\n densities: { comfortable: 'Comfortable', compact: 'Compact' },\n },\n};\n\nexport function themeCopyOf(lang: NucleusLang): ThemeCopy {\n return THEME_COPY[lang] ?? THEME_COPY.es;\n}\n\nexport function accentLabelOf(lang: NucleusLang, id: AccentId): string {\n return themeCopyOf(lang).accents[id];\n}\n","import { Injectable, computed, effect, signal } from '@angular/core';\n\nimport { mixHex, readableOn } from './contrast';\nimport {\n Accent,\n AccentPreference,\n Appearance,\n Canvas,\n CanvasId,\n CanvasPreference,\n DEFAULT_APPEARANCE,\n Density,\n DensityId,\n Frame,\n FrameId,\n LEGACY_THEMES,\n accentOn,\n canvasById,\n densityById,\n frameById,\n isAccentPreference,\n isCanvasPreference,\n isDensityId,\n isDarkCanvas,\n isFrameId,\n resolveAccent,\n} from './theme';\n\nconst STORAGE_KEY = 'nucleus_appearance';\n\nconst LEGACY_STORAGE_KEY = 'nucleus_theme';\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\n\nfunction parseAppearance(raw: string | null): Appearance | null {\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as Partial<Appearance>;\n\n return {\n frame: isFrameId(parsed.frame) ? parsed.frame : DEFAULT_APPEARANCE.frame,\n canvas: isCanvasPreference(parsed.canvas) ? parsed.canvas : DEFAULT_APPEARANCE.canvas,\n accent: isAccentPreference(parsed.accent) ? parsed.accent : DEFAULT_APPEARANCE.accent,\n density: isDensityId(parsed.density) ? parsed.density : DEFAULT_APPEARANCE.density,\n };\n } catch {\n return null;\n }\n}\n\nfunction migrateLegacy(raw: string | null): Appearance | null {\n if (!raw) return null;\n\n const legacy = LEGACY_THEMES[raw];\n\n return legacy ? { ...DEFAULT_APPEARANCE, ...legacy } : null;\n}\n\nfunction readStored(): Appearance {\n try {\n const current = parseAppearance(localStorage.getItem(STORAGE_KEY));\n\n if (current) return current;\n\n const migrated = migrateLegacy(localStorage.getItem(LEGACY_STORAGE_KEY));\n\n if (migrated) {\n localStorage.removeItem(LEGACY_STORAGE_KEY);\n\n return migrated;\n }\n } catch {}\n\n return DEFAULT_APPEARANCE;\n}\n\nfunction prefersDark(): boolean {\n return globalThis.matchMedia?.(DARK_QUERY).matches ?? false;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly _appearance = signal<Appearance>(readStored());\n\n private readonly systemDark = signal(prefersDark());\n\n readonly appearance = this._appearance.asReadonly();\n\n readonly frame = computed<Frame>(() => frameById(this._appearance().frame));\n\n readonly canvasId = computed<CanvasId>(() => {\n const preference = this._appearance().canvas;\n\n if (preference !== 'system') return preference;\n\n return this.systemCanvasId();\n });\n\n readonly systemCanvasId = computed<CanvasId>(() => (this.systemDark() ? 'dark' : 'light'));\n\n readonly canvas = computed<Canvas>(() => canvasById(this.canvasId()));\n\n readonly accent = computed<Accent>(() => resolveAccent(this.frame(), this._appearance().accent));\n\n readonly accentColor = computed(() => accentOn(this.accent(), this.canvasId()));\n\n readonly density = computed<Density>(() => densityById(this._appearance().density));\n\n readonly starfield = computed(() => this.frame().starfield && isDarkCanvas(this.canvasId()));\n\n constructor() {\n globalThis\n .matchMedia?.(DARK_QUERY)\n .addEventListener('change', (event) => this.systemDark.set(event.matches));\n\n effect(() => {\n const appearance = this._appearance();\n\n this.applyToDom();\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(appearance));\n } catch {}\n });\n }\n\n setFrame(frame: FrameId): void {\n this.patch({ frame });\n }\n\n setCanvas(canvas: CanvasPreference): void {\n this.patch({ canvas });\n }\n\n setAccent(accent: AccentPreference): void {\n this.patch({ accent });\n }\n\n setDensity(density: DensityId): void {\n this.patch({ density });\n }\n\n reset(): void {\n this._appearance.set(DEFAULT_APPEARANCE);\n }\n\n private patch(change: Partial<Appearance>): void {\n this._appearance.update((appearance) => ({ ...appearance, ...change }));\n }\n\n private applyToDom(): void {\n const root = document.documentElement;\n const frame = this.frame();\n const canvas = this.canvas();\n const accent = this.accentColor();\n const density = this.density();\n\n for (const [name, value] of Object.entries(frame.tokens)) {\n root.style.setProperty(`--ns-frame-${kebab(name)}`, value);\n }\n\n root.style.setProperty('--ns-frame-on-glow', readableOn(frame.tokens.glow));\n\n for (const [name, value] of Object.entries(canvas.tokens)) {\n root.style.setProperty(`--ac-${kebab(name)}`, value);\n }\n\n root.style.setProperty('--ac-accent', accent);\n root.style.setProperty('--ac-on-accent', readableOn(accent));\n\n root.style.setProperty('--ns-shadow-1', canvas.effects.shadowOne);\n root.style.setProperty('--ns-shadow-2', canvas.effects.shadowTwo);\n root.style.setProperty('--ns-header-bg', canvas.effects.headerBg);\n root.style.setProperty('--ns-header-ink', canvas.effects.headerInk);\n root.style.setProperty('--ns-header-line', canvas.effects.headerLine);\n root.style.setProperty('--ns-danger', canvas.effects.danger);\n root.style.setProperty('--ns-success', canvas.effects.success);\n root.style.setProperty('--ns-warning', canvas.effects.warning);\n root.style.setProperty(\n '--ns-accent-wash',\n mixHex(accent, canvas.tokens.surface, canvas.effects.wash),\n );\n root.style.setProperty(\n '--ns-accent-wash-strong',\n mixHex(accent, canvas.tokens.surface, canvas.effects.washStrong),\n );\n\n root.style.setProperty('--ns-density', String(density.scale));\n\n root.dataset['frame'] = frame.id;\n root.dataset['canvas'] = canvas.id;\n root.dataset['density'] = density.id;\n\n root.classList.toggle('ns-dark', isDarkCanvas(canvas.id));\n\n root.style.colorScheme = isDarkCanvas(canvas.id) ? 'dark' : 'light';\n }\n}\n\nfunction kebab(name: string): string {\n return name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n","import { definePreset } from '@primeuix/themes';\nimport Lara from '@primeuix/themes/lara';\n\nconst MASK = {\n background: 'rgba(0, 0, 0, 0.55)',\n color: 'var(--ac-text)',\n};\n\nconst SHADOW = 'var(--ns-shadow-2, 0 10px 40px rgb(0 0 0 / 45%))';\n\nconst PANEL = {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n};\n\nconst schemeTokens = {\n primary: {\n color: 'var(--ac-accent)',\n contrastColor: 'var(--ac-on-accent)',\n hoverColor: 'color-mix(in srgb, var(--ac-accent) 85%, var(--ac-text))',\n activeColor: 'color-mix(in srgb, var(--ac-accent) 70%, var(--ac-text))',\n },\n highlight: {\n background: 'color-mix(in srgb, var(--ac-accent) 16%, transparent)',\n focusBackground: 'color-mix(in srgb, var(--ac-accent) 24%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n },\n text: {\n color: 'var(--ac-text)',\n hoverColor: 'var(--ac-text)',\n mutedColor: 'var(--ac-text-muted)',\n hoverMutedColor: 'var(--ac-text)',\n },\n content: {\n background: 'var(--ac-surface)',\n hoverBackground: 'var(--ac-surface-alt)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n hoverColor: 'var(--ac-text)',\n },\n overlay: {\n select: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n popover: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n modal: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n },\n formField: {\n paddingY: 'var(--ns-control-y, 0.55rem)',\n background: 'var(--ac-bg)',\n disabledBackground: 'var(--ac-surface-alt)',\n filledBackground: 'var(--ac-surface-alt)',\n filledHoverBackground: 'var(--ac-surface-alt)',\n filledFocusBackground: 'var(--ac-surface-alt)',\n borderColor: 'var(--ac-border)',\n hoverBorderColor: 'var(--ac-accent)',\n focusBorderColor: 'var(--ac-accent)',\n color: 'var(--ac-text)',\n disabledColor: 'var(--ac-text-muted)',\n placeholderColor: 'var(--ac-text-muted)',\n floatLabelColor: 'var(--ac-text-muted)',\n floatLabelFocusColor: 'var(--ac-accent)',\n iconColor: 'var(--ac-text-muted)',\n },\n list: {\n option: {\n focusBackground: 'var(--ac-surface-alt)',\n selectedBackground: 'color-mix(in srgb, var(--ac-accent) 20%, transparent)',\n selectedFocusBackground: 'color-mix(in srgb, var(--ac-accent) 28%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n selectedColor: 'var(--ac-text)',\n selectedFocusColor: 'var(--ac-text)',\n icon: {\n color: 'var(--ac-text-muted)',\n focusColor: 'var(--ac-text)',\n },\n },\n },\n navigation: {\n item: {\n focusBackground: 'var(--ac-surface-alt)',\n activeBackground: 'color-mix(in srgb, var(--ac-accent) 20%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n activeColor: 'var(--ac-text)',\n icon: {\n color: 'var(--ac-text-muted)',\n focusColor: 'var(--ac-text)',\n activeColor: 'var(--ac-accent)',\n },\n },\n },\n};\n\nexport const NucleusPreset = definePreset(Lara, {\n semantic: {\n colorScheme: {\n light: { ...schemeTokens, mask: MASK },\n dark: { ...schemeTokens, mask: MASK },\n },\n },\n components: {\n drawer: { root: { ...PANEL, shadow: SHADOW } },\n popover: { root: { ...PANEL, shadow: SHADOW } },\n menu: { root: { ...PANEL, shadow: SHADOW } },\n listbox: { root: PANEL },\n },\n});\n","import { EnvironmentProviders } from '@angular/core';\nimport { providePrimeNG } from 'primeng/config';\n\nimport { NucleusPreset } from './primeng-preset';\n\nexport const NUCLEUS_DARK_SELECTOR = '.ns-dark';\n\nexport function provideNucleusTheme(): EnvironmentProviders {\n return providePrimeNG({\n theme: {\n preset: NucleusPreset,\n options: { darkModeSelector: NUCLEUS_DARK_SELECTOR },\n },\n });\n}\n","import {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nimport { ThemeService } from '../../theme/theme.service';\n\nconst SCRIPT_URL = 'https://cdn.lordicon.com/lordicon.js';\n\nlet loading: Promise<void> | null = null;\n\nexport function loadLordicon(): Promise<void> {\n if (loading) return loading;\n\n loading = new Promise<void>((resolve) => {\n if (document.querySelector(`script[src=\"${SCRIPT_URL}\"]`)) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n\n script.src = SCRIPT_URL;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () => resolve();\n\n document.head.appendChild(script);\n });\n\n return loading;\n}\n\nexport const NUCLEUS_ICONS = {\n trash: 'https://cdn.lordicon.com/wpyrrmcq.json',\n check: 'https://cdn.lordicon.com/lomfljuq.json',\n warning: 'https://cdn.lordicon.com/vihyezfv.json',\n power: 'https://cdn.lordicon.com/gwvmctbb.json',\n user: 'https://cdn.lordicon.com/hrjifpbq.json',\n key: 'https://cdn.lordicon.com/ossgtprr.json',\n} as const;\n\n@Component({\n selector: 'nucleus-lordicon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n styles: `\n :host {\n display: inline-flex;\n }\n `,\n template: `\n <lord-icon\n [attr.src]=\"src()\"\n [attr.trigger]=\"trigger()\"\n [attr.state]=\"state()\"\n [attr.colors]=\"colors()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n ></lord-icon>\n `,\n})\nexport class NucleusLordicon {\n private readonly themes = inject(ThemeService);\n\n readonly src = input.required<string>();\n readonly trigger = input('in');\n readonly state = input<string | null>(null);\n readonly size = input(48);\n readonly tone = input<'accent' | 'danger'>('accent');\n\n protected readonly colors = computed(() => {\n const canvas = this.themes.canvas();\n const primary = this.tone() === 'danger' ? canvas.effects.danger : this.themes.accentColor();\n\n return `primary:${primary},secondary:${canvas.tokens.text}`;\n });\n\n constructor() {\n void loadLordicon();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nexport type CardSize = 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'nucleus-card',\n imports: [SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[attr.data-size]': 'size()' },\n styles: `\n :host {\n display: block;\n padding: 22px 24px;\n border: 1px solid var(--ac-border);\n border-radius: 12px;\n background: var(--ac-surface);\n box-shadow: var(--ns-shadow-1);\n }\n\n :host([data-size='sm']) {\n max-width: 34rem;\n }\n\n :host([data-size='md']) {\n max-width: 48rem;\n }\n\n :host([data-size='lg']) {\n max-width: 64rem;\n }\n\n .head {\n margin-bottom: 18px;\n }\n\n h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n }\n\n .subtitle {\n margin: 4px 0 0;\n color: var(--ac-text-muted);\n font-size: 13px;\n }\n\n .body {\n display: contents;\n }\n\n .skeleton-rows {\n display: grid;\n }\n\n .skeleton-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 13px 0;\n border-bottom: 1px solid color-mix(in srgb, var(--ac-border) 60%, transparent);\n }\n\n .skeleton-row:last-child {\n border-bottom: 0;\n }\n\n .actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 20px;\n }\n\n .actions:empty {\n display: none;\n }\n `,\n template: `\n @if (heading() || subtitle()) {\n <div class=\"head\">\n @if (heading()) {\n <h2>{{ heading() }}</h2>\n }\n @if (subtitle()) {\n <p class=\"subtitle\">{{ subtitle() }}</p>\n }\n </div>\n }\n\n @if (loading()) {\n <div class=\"skeleton-rows\">\n @for (row of placeholders(); track row.index) {\n <div class=\"skeleton-row\">\n <p-skeleton height=\"13px\" [width]=\"row.left\" />\n <p-skeleton height=\"12px\" [width]=\"row.right\" />\n </div>\n }\n </div>\n }\n\n <div class=\"body\" [style.display]=\"loading() ? 'none' : null\">\n <ng-content />\n </div>\n\n <div class=\"actions\">\n <ng-content select=\"[nucleusCardActions]\" />\n </div>\n `,\n})\nexport class NucleusCard {\n readonly heading = input('');\n readonly subtitle = input('');\n readonly size = input<CardSize>('full');\n readonly loading = input(false);\n readonly skeletonRows = input(4);\n\n private static readonly widths: readonly (readonly [string, string])[] = [\n ['46%', '22%'],\n ['62%', '17%'],\n ['38%', '25%'],\n ['54%', '19%'],\n ['44%', '23%'],\n ['58%', '16%'],\n ];\n\n protected readonly placeholders = computed(() =>\n Array.from({ length: Math.max(this.skeletonRows(), 1) }, (_, index) => ({\n index,\n left: NucleusCard.widths[index % NucleusCard.widths.length][0],\n right: NucleusCard.widths[index % NucleusCard.widths.length][1],\n })),\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'nucleus-metrics',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: grid;\n gap: 14px;\n grid-template-columns: repeat(auto-fit, minmax(var(--ns-metric-min, 210px), 1fr));\n }\n `,\n template: '<ng-content />',\n})\nexport class NucleusMetrics {\n readonly loading = input(false);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nimport { NucleusMetrics } from './nucleus-metrics';\n\nexport type MetricTone = 'plain' | 'accent';\n\n@Component({\n selector: 'nucleus-metric',\n imports: [NgTemplateOutlet, RouterLink, SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[attr.data-tone]': \"tone() === 'accent' ? 'accent' : null\" },\n styles: `\n :host {\n display: block;\n }\n\n .tile {\n display: grid;\n align-content: start;\n gap: 5px;\n height: 100%;\n padding: 18px 20px;\n border: 1px solid var(--ac-border);\n border-radius: 12px;\n background: var(--ac-surface);\n color: inherit;\n text-decoration: none;\n transition: border-color 140ms ease;\n }\n\n a.tile:hover {\n border-color: var(--ac-accent);\n }\n\n :host([data-tone='accent']) .tile {\n border-color: var(--ac-accent);\n }\n\n .label {\n color: var(--ac-text-muted);\n font-size: 11px;\n font-weight: 600;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n\n .value {\n font-size: 26px;\n font-variant-numeric: tabular-nums;\n line-height: 1;\n }\n\n .hint {\n color: var(--ac-text-muted);\n font-size: 12px;\n }\n\n .value-skeleton {\n margin: 1px 0 2px;\n }\n\n .hint-skeleton {\n margin: 3px 0;\n }\n `,\n template: `\n @if (link().length) {\n <a class=\"tile\" [routerLink]=\"link()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </a>\n } @else {\n <div class=\"tile\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n }\n\n <ng-template #body>\n <span class=\"label\">{{ label() }}</span>\n\n @if (busy()) {\n <p-skeleton styleClass=\"value-skeleton\" height=\"23px\" width=\"92px\" />\n @if (hint().length) {\n <p-skeleton styleClass=\"hint-skeleton\" height=\"10px\" width=\"132px\" />\n }\n } @else {\n <strong class=\"value\">{{ value() }}</strong>\n @if (hint().length) {\n <small class=\"hint\">{{ hint() }}</small>\n }\n }\n </ng-template>\n `,\n})\nexport class NucleusMetric {\n private readonly group = inject(NucleusMetrics, { optional: true });\n\n readonly label = input('');\n readonly value = input<string | number>('');\n readonly hint = input('');\n readonly link = input<string | unknown[]>('');\n readonly tone = input<MetricTone>('plain');\n readonly loading = input<boolean | null>(null);\n\n protected readonly busy = computed(() => this.loading() ?? this.group?.loading() ?? false);\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\n\nexport interface TabItem {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly badge?: number;\n}\n\n@Component({\n selector: 'nucleus-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n margin-bottom: 12px;\n }\n\n .bar {\n display: flex;\n overflow-x: auto;\n justify-content: flex-start;\n gap: 4px;\n border-bottom: 1px solid var(--ac-border);\n scrollbar-width: none;\n }\n\n .bar::-webkit-scrollbar {\n display: none;\n }\n\n .tab {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n padding: 10px 16px;\n border: 0;\n border-bottom: 2px solid transparent;\n margin-bottom: -1px;\n background: transparent;\n color: var(--ac-text-muted);\n font: inherit;\n font-size: 13px;\n font-weight: 500;\n white-space: nowrap;\n cursor: pointer;\n transition:\n color 120ms ease,\n border-color 120ms ease;\n }\n\n .tab:hover {\n color: var(--ac-text);\n }\n\n .tab.is-active {\n border-bottom-color: var(--ac-accent);\n color: var(--ac-text);\n }\n\n .tab i {\n font-size: 13px;\n }\n\n .badge {\n padding: 1px 7px;\n border-radius: var(--ac-radius-pill);\n background: color-mix(in srgb, var(--ac-text) 12%, transparent);\n font-size: 11px;\n }\n\n .tab.is-active .badge {\n background: color-mix(in srgb, var(--ac-accent) 26%, transparent);\n }\n `,\n template: `\n <div class=\"bar\" role=\"tablist\">\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"tab\"\n role=\"tab\"\n [class.is-active]=\"tab.id === active()\"\n [attr.aria-selected]=\"tab.id === active()\"\n (click)=\"active.set(tab.id)\"\n >\n @if (tab.icon) {\n <i [class]=\"tab.icon\" aria-hidden=\"true\"></i>\n }\n {{ tab.label }}\n @if (tab.badge !== undefined) {\n <span class=\"badge\">{{ tab.badge }}</span>\n }\n </button>\n }\n </div>\n `,\n})\nexport class NucleusTabs {\n readonly tabs = input.required<readonly TabItem[]>();\n\n readonly active = model.required<string>();\n}\n","import { Injectable, TemplateRef, signal } from '@angular/core';\n\nexport interface Crumb {\n readonly label: string;\n readonly route?: readonly unknown[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusPage {\n readonly heading = signal('');\n\n readonly crumbs = signal<readonly Crumb[]>([]);\n\n readonly actions = signal<TemplateRef<unknown> | null>(null);\n\n set(heading: string, crumbs: readonly Crumb[] = []): void {\n this.heading.set(heading);\n this.crumbs.set(crumbs);\n }\n}\n","import { Directive, OnDestroy, TemplateRef, inject } from '@angular/core';\n\nimport { NucleusPage } from './nucleus-page';\n\n@Directive({\n selector: '[nucleusPageActions]',\n})\nexport class NucleusPageActions implements OnDestroy {\n private readonly page = inject(NucleusPage);\n\n private readonly template: TemplateRef<unknown> = inject(TemplateRef);\n\n constructor() {\n this.page.actions.set(this.template);\n }\n\n ngOnDestroy(): void {\n if (this.page.actions() === this.template) this.page.actions.set(null);\n }\n}\n","import { EnvironmentProviders, Injectable, inject, makeEnvironmentProviders } from '@angular/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\n\nimport { NUCLEUS_ICONS } from '../lordicon/lordicon';\n\nexport interface ConfirmRequest {\n readonly header: string;\n readonly message: string;\n readonly accept: string;\n readonly reject: string;\n readonly icon?: string;\n readonly tone?: 'accent' | 'danger';\n}\n\nexport function provideNucleusFeedback(): EnvironmentProviders {\n return makeEnvironmentProviders([ConfirmationService, MessageService]);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusFeedback {\n private readonly confirmation = inject(ConfirmationService);\n private readonly messages = inject(MessageService);\n\n ask(request: ConfirmRequest): Promise<boolean> {\n return new Promise((resolve) => {\n this.confirmation.confirm({\n header: request.header,\n message: request.message,\n acceptLabel: request.accept,\n rejectLabel: request.reject,\n icon: request.icon ?? NUCLEUS_ICONS.warning,\n acceptButtonStyleClass: request.tone === 'danger' ? 'p-button-danger' : '',\n accept: () => resolve(true),\n reject: () => resolve(false),\n });\n });\n }\n\n done(summary: string, detail = ''): void {\n this.messages.add({ severity: 'success', summary, detail, life: 3200 });\n }\n\n failed(summary: string, detail = ''): void {\n this.messages.add({ severity: 'error', summary, detail, life: 5000 });\n }\n}\n","export type FieldKind =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'textarea'\n | 'select'\n | 'checkbox'\n | 'switch'\n | 'icon'\n | 'color';\n\nexport type FieldSpan = 1 | 2 | 3 | 4 | 'full';\n\nexport type FieldSize = 'xs' | 'sm' | 'md' | 'lg' | 'full';\n\nexport interface FieldOption {\n readonly label: string;\n readonly value: unknown;\n}\n\nexport interface FormField {\n readonly key: string;\n readonly label: string;\n readonly kind?: FieldKind;\n readonly span?: FieldSpan;\n readonly size?: FieldSize;\n readonly hint?: string;\n readonly placeholder?: string;\n readonly maxlength?: number;\n readonly rows?: number;\n readonly options?: readonly FieldOption[];\n readonly disabled?: boolean;\n readonly clearable?: boolean;\n readonly searchable?: boolean;\n}\n\nexport type FormValue = Record<string, unknown>;\n\nexport function resolveFieldSize(field: FormField): FieldSize {\n if (field.size) return field.size;\n\n if (field.kind === 'textarea' || field.kind === 'color') return 'full';\n\n if (field.kind === 'icon') return 'md';\n\n const max = field.maxlength;\n\n if (max === undefined) return 'md';\n if (max <= 8) return 'xs';\n if (max <= 20) return 'sm';\n if (max <= 40) return 'md';\n if (max <= 80) return 'lg';\n\n return 'full';\n}\n\nexport function isFieldSearchable(field: FormField): boolean {\n return field.searchable !== false;\n}\n","export const NUCLEUS_ICON_CATALOG: readonly string[] = [\n 'address-book', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon',\n 'android', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up',\n 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'arrow-circle-down',\n 'arrow-circle-left', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-down-left',\n 'arrow-down-left-and-arrow-up-right-to-center', 'arrow-down-right', 'arrow-left',\n 'arrow-right', 'arrow-right-arrow-left', 'arrow-u-turn-up-left', 'arrow-u-turn-up-right',\n 'arrow-up', 'arrow-up-left', 'arrow-up-right',\n 'arrow-up-right-and-arrow-down-left-from-center', 'arrows-alt', 'arrows-h', 'arrows-v',\n 'asterisk', 'at', 'backward', 'ban', 'barcode', 'bars', 'bell', 'bell-slash', 'bitcoin',\n 'block-quote', 'bold', 'bolt', 'book', 'bookmark', 'bookmark-fill', 'box', 'briefcase',\n 'building', 'building-columns', 'bullseye', 'calculator', 'calendar', 'calendar-clock',\n 'calendar-minus', 'calendar-plus', 'calendar-times', 'camera', 'car', 'caret-down',\n 'caret-left', 'caret-right', 'caret-up', 'cart-arrow-down', 'cart-minus', 'cart-plus',\n 'case-sensitive', 'chart-bar', 'chart-line', 'chart-pie', 'chart-scatter', 'check',\n 'check-circle', 'check-square', 'chevron-circle-down', 'chevron-circle-left',\n 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right',\n 'chevron-up', 'circle', 'circle-fill', 'circle-off', 'circle-on', 'clipboard', 'clock',\n 'clone', 'cloud', 'cloud-download', 'cloud-upload', 'code', 'code-branch', 'cog', 'columns-2',\n 'comment', 'comments', 'compass', 'compress', 'copy', 'credit-card', 'crown', 'database',\n 'delete-left', 'desktop', 'directions', 'directions-alt', 'discord', 'dollar', 'dot',\n 'download', 'eject', 'ellipsis-h', 'ellipsis-v', 'envelope', 'equals', 'eraser', 'ethereum',\n 'euro', 'exclamation-circle', 'exclamation-triangle', 'expand', 'external-link', 'eye',\n 'eye-dropper', 'eye-slash', 'face-smile', 'facebook', 'fast-backward', 'fast-forward', 'file',\n 'file-arrow-up', 'file-check', 'file-edit', 'file-excel', 'file-export', 'file-import',\n 'file-o', 'file-pdf', 'file-plus', 'file-word', 'filter', 'filter-fill', 'filter-slash',\n 'flag', 'flag-fill', 'folder', 'folder-open', 'folder-plus', 'forward', 'gauge', 'gift',\n 'github', 'globe', 'google', 'graduation-cap', 'grid-2', 'grip', 'grip-horizontal',\n 'grip-vertical', 'hammer', 'hashtag', 'heading', 'heading-1', 'heading-2', 'heading-3',\n 'heading-4', 'heading-5', 'heading-6', 'headphones', 'heart', 'heart-fill', 'highlighter',\n 'history', 'home', 'horizontal-rule', 'hourglass', 'id-card', 'image', 'images', 'inbox',\n 'indent', 'indian-rupee', 'info', 'info-circle', 'instagram', 'italic', 'key', 'language',\n 'lightbulb', 'link', 'linkedin', 'list', 'list-check', 'list-ol', 'list-tree', 'lock',\n 'lock-open', 'map', 'map-marker', 'mars', 'megaphone', 'microchip', 'microchip-ai',\n 'microphone', 'microsoft', 'minus', 'minus-circle', 'mobile', 'money-bill', 'moon',\n 'note-sticky', 'objects-column', 'outdent', 'palette', 'paperclip', 'paragraph-left',\n 'paragraph-right', 'pause', 'pause-circle', 'paypal', 'pen-line', 'pen-to-square', 'pencil',\n 'percentage', 'phone', 'pinterest', 'play', 'play-circle', 'plus', 'plus-circle', 'pound',\n 'power-off', 'prime', 'print', 'qrcode', 'question', 'question-circle', 'receipt',\n 'rectangle-xmark', 'reddit', 'refresh', 'replay', 'reply', 'rows-2', 'save', 'search',\n 'search-minus', 'search-plus', 'send', 'server', 'share-alt', 'shield', 'shop', 'shopping-bag',\n 'shopping-cart', 'sidebar', 'sign-in', 'sign-out', 'signature', 'sitemap', 'slack', 'slash',\n 'sliders-h', 'sliders-v', 'sort', 'sort-alpha-down', 'sort-alpha-down-alt', 'sort-alpha-up',\n 'sort-alpha-up-alt', 'sort-alt', 'sort-alt-slash', 'sort-amount-down', 'sort-amount-down-alt',\n 'sort-amount-up', 'sort-amount-up-alt', 'sort-down', 'sort-down-fill', 'sort-numeric-down',\n 'sort-numeric-down-alt', 'sort-numeric-up', 'sort-numeric-up-alt', 'sort-up', 'sort-up-fill',\n 'sparkles', 'spinner', 'spinner-dotted', 'square', 'stamp', 'star', 'star-fill', 'star-half',\n 'star-half-fill', 'step-backward', 'step-backward-alt', 'step-forward', 'step-forward-alt',\n 'stop', 'stop-circle', 'stopwatch', 'strikethrough', 'subscript', 'sun', 'superscript', 'sync',\n 'table', 'tablet', 'tag', 'tags', 'telegram', 'text', 'text-color', 'th-large', 'thumbs-down',\n 'thumbs-down-fill', 'thumbs-up', 'thumbs-up-fill', 'thumbtack', 'ticket', 'tiktok', 'times',\n 'times-circle', 'trash', 'trophy', 'truck', 'turkish-lira', 'twitch', 'twitter', 'underline',\n 'undo', 'unlock', 'upload', 'user', 'user-edit', 'user-minus', 'user-plus', 'users', 'venus',\n 'verified', 'video', 'vimeo', 'volume-down', 'volume-off', 'volume-up', 'wallet', 'warehouse',\n 'wave-pulse', 'whatsapp', 'wifi', 'window-maximize', 'window-minimize', 'wrench', 'youtube'\n];\n\nexport function searchIcons(term: string): readonly string[] {\n const needle = term.trim().toLowerCase();\n\n if (!needle) return NUCLEUS_ICON_CATALOG;\n\n return NUCLEUS_ICON_CATALOG.filter((name) => name.includes(needle));\n}\n\nexport function iconClassOf(name: string | null): string {\n return name ? (name.startsWith('pi ') ? name : `pi pi-${name}`) : '';\n}\n\nexport function iconNameOf(value: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/^pi\\s+/, '').replace(/^pi-/, '');\n\n return trimmed || null;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { Popover, PopoverModule } from 'primeng/popover';\n\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { iconClassOf, iconNameOf, searchIcons } from './icon-catalog';\n\n@Component({\n selector: 'nucleus-icon-picker',\n imports: [FormsModule, InputTextModule, PopoverModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 0 10px;\n height: 38px;\n border: 1px solid var(--ac-border);\n border-radius: 8px;\n background: var(--ac-surface);\n color: var(--ac-text);\n font: inherit;\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n }\n\n .trigger:disabled {\n opacity: 0.6;\n cursor: default;\n }\n\n .trigger:not(:disabled):hover {\n border-color: color-mix(in srgb, var(--ac-accent) 55%, var(--ac-border));\n }\n\n .preview {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--ac-accent) 16%, transparent);\n color: var(--ac-accent);\n font-size: 13px;\n }\n\n .preview.is-empty {\n background: color-mix(in srgb, var(--ac-text) 8%, transparent);\n color: var(--ac-text-muted);\n }\n\n .name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .name.is-empty {\n color: var(--ac-text-muted);\n }\n\n .caret {\n color: var(--ac-text-muted);\n font-size: 11px;\n }\n\n .panel {\n width: min(21rem, 80vw);\n }\n\n .panel-head {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n }\n\n .panel-head input {\n flex: 1;\n }\n\n .clear {\n padding: 0 10px;\n height: 34px;\n border: 1px solid var(--ac-border);\n border-radius: 8px;\n background: transparent;\n color: var(--ac-text-muted);\n font: inherit;\n font-size: 12px;\n white-space: nowrap;\n cursor: pointer;\n }\n\n .clear:hover {\n color: var(--ac-text);\n }\n\n .grid {\n display: grid;\n grid-template-columns: repeat(8, 1fr);\n gap: 4px;\n overflow-y: auto;\n max-height: 16rem;\n }\n\n .cell {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n border: 1px solid transparent;\n border-radius: 8px;\n background: transparent;\n color: var(--ac-text);\n font-size: 15px;\n cursor: pointer;\n }\n\n .cell:hover {\n background: color-mix(in srgb, var(--ac-text) 10%, transparent);\n }\n\n .cell.is-active {\n border-color: var(--ac-accent);\n background: color-mix(in srgb, var(--ac-accent) 18%, transparent);\n color: var(--ac-accent);\n }\n\n .empty {\n padding: 18px 4px;\n color: var(--ac-text-muted);\n font-size: 13px;\n text-align: center;\n }\n\n @media (max-width: 420px) {\n .grid {\n grid-template-columns: repeat(6, 1fr);\n }\n }\n `,\n template: `\n @let copy = labels();\n\n <button\n type=\"button\"\n class=\"trigger\"\n [id]=\"inputId()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"copy.searchIcon\"\n (click)=\"panel().toggle($event)\"\n >\n <span class=\"preview\" [class.is-empty]=\"!name()\">\n <i [class]=\"name() ? iconClass() : 'pi pi-image'\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"name\" [class.is-empty]=\"!name()\">{{ name() ?? copy.noIcon }}</span>\n <i class=\"pi pi-chevron-down caret\" aria-hidden=\"true\"></i>\n </button>\n\n <p-popover #popover appendTo=\"body\" [dismissable]=\"true\" (onShow)=\"onShow()\">\n <div class=\"panel\">\n <div class=\"panel-head\">\n <input\n #searchBox\n pInputText\n type=\"search\"\n autocomplete=\"off\"\n [placeholder]=\"copy.searchIcon\"\n [ngModel]=\"term()\"\n (ngModelChange)=\"term.set($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <button type=\"button\" class=\"clear\" (click)=\"pick(null)\">{{ copy.noIcon }}</button>\n </div>\n\n @if (results().length) {\n <div class=\"grid\">\n @for (icon of results(); track icon) {\n <button\n type=\"button\"\n class=\"cell\"\n [class.is-active]=\"icon === name()\"\n [title]=\"icon\"\n [attr.aria-label]=\"icon\"\n (click)=\"pick(icon)\"\n >\n <i [class]=\"'pi pi-' + icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n } @else {\n <p class=\"empty\">{{ copy.noMatches }}</p>\n }\n </div>\n </p-popover>\n `,\n})\nexport class NucleusIconPicker {\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<string | null>(null);\n\n readonly disabled = input(false);\n\n readonly inputId = input('');\n\n protected readonly panel = viewChild.required<Popover>('popover');\n\n protected readonly search = viewChild<ElementRef<HTMLInputElement>>('searchBox');\n\n protected readonly term = signal('');\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n protected readonly name = computed(() => iconNameOf(this.value()));\n\n protected readonly iconClass = computed(() => iconClassOf(this.name()));\n\n protected readonly results = computed(() => searchIcons(this.term()));\n\n protected onShow(): void {\n this.term.set('');\n\n setTimeout(() => this.search()?.nativeElement.focus(), 0);\n }\n\n protected pick(icon: string | null): void {\n this.value.set(icon ? `pi pi-${icon}` : null);\n this.panel().hide();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model } from '@angular/core';\n\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { ACCENTS, AccentId } from '../../theme/theme';\nimport { themeCopyOf } from '../../theme/theme.copy';\n\nexport interface AccentOption {\n readonly id: AccentId;\n readonly light: string;\n readonly dark: string;\n}\n\nexport const NUCLEUS_ACCENTS: readonly AccentOption[] = ACCENTS.map((accent) => ({\n id: accent.id,\n light: accent.light,\n dark: accent.dark,\n}));\n\n@Component({\n selector: 'nucleus-color-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n .row {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n min-height: 38px;\n }\n\n .swatch {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 2px solid transparent;\n border-radius: 50%;\n color: #ffffff;\n cursor: pointer;\n transition: transform 120ms ease;\n }\n\n .swatch:hover:not(:disabled) {\n transform: scale(1.12);\n }\n\n .swatch:disabled {\n cursor: default;\n opacity: 0.6;\n }\n\n .swatch.is-active {\n border-color: var(--ac-text);\n box-shadow: 0 0 0 2px var(--ac-bg) inset;\n }\n\n .swatch i {\n font-size: 11px;\n text-shadow: 0 0 3px rgba(0, 0, 0, 0.5);\n }\n\n .none {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 1px dashed var(--ac-border);\n border-radius: 50%;\n background: transparent;\n color: var(--ac-text-muted);\n cursor: pointer;\n }\n\n .none.is-active {\n border-style: solid;\n border-color: var(--ac-text);\n color: var(--ac-text);\n }\n\n .none i {\n font-size: 11px;\n }\n `,\n template: `\n @let copy = labels();\n\n <div class=\"row\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel() || copy.choose\">\n <button\n type=\"button\"\n class=\"none\"\n role=\"radio\"\n [class.is-active]=\"!value()\"\n [attr.aria-checked]=\"!value()\"\n [attr.aria-label]=\"copy.noColor\"\n [title]=\"copy.noColor\"\n [disabled]=\"disabled()\"\n (click)=\"pick(null)\"\n >\n <i class=\"pi pi-ban\" aria-hidden=\"true\"></i>\n </button>\n\n @for (option of options(); track option.color) {\n <button\n type=\"button\"\n class=\"swatch\"\n role=\"radio\"\n [class.is-active]=\"option.color === value()\"\n [attr.aria-checked]=\"option.color === value()\"\n [attr.aria-label]=\"option.label\"\n [title]=\"option.label + ' · ' + option.color\"\n [style.background]=\"option.color\"\n [disabled]=\"disabled()\"\n (click)=\"pick(option.color)\"\n >\n @if (option.color === value()) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n `,\n})\nexport class NucleusColorPicker {\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<string | null>(null);\n\n readonly disabled = input(false);\n\n readonly ariaLabel = input('');\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n protected readonly options = computed(() => {\n const names = themeCopyOf(this.language.lang()).accents;\n\n return NUCLEUS_ACCENTS.map((accent) => ({ color: accent.light, label: names[accent.id] }));\n });\n\n protected pick(color: string | null): void {\n this.value.set(color);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { fieldsIn, moveTo } from '../../a11y/focus';\nimport { NucleusEnterAdvance } from '../../a11y/nucleus-enter-advance';\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { FieldOption, FormField, FormValue, isFieldSearchable, resolveFieldSize } from './form.models';\nimport { NucleusColorPicker } from './nucleus-color-picker';\nimport { NucleusIconPicker } from './nucleus-icon-picker';\n\n@Component({\n selector: 'nucleus-form',\n imports: [\n CheckboxModule,\n InputTextModule,\n SelectModule,\n TextareaModule,\n ToggleSwitchModule,\n FormsModule,\n NucleusColorPicker,\n NucleusIconPicker,\n ],\n hostDirectives: [NucleusEnterAdvance],\n templateUrl: './nucleus-form.html',\n styleUrl: './nucleus-form.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusForm {\n private readonly language = inject(NucleusLanguage);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n readonly fields = input.required<readonly FormField[]>();\n readonly value = input.required<FormValue>();\n readonly readonly = input(false);\n readonly columns = input<number | null>(null);\n readonly autofocus = input(false);\n\n readonly valueChange = output<FormValue>();\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n private landed = false;\n\n constructor() {\n effect(() => {\n const ready = this.autofocus() && !this.readonly() && this.fields().length > 0;\n\n if (!ready || this.landed) return;\n\n this.landed = true;\n\n afterNextRender(\n () => {\n const first = fieldsIn(this.host.nativeElement)[0];\n\n if (first) moveTo(first);\n },\n { injector: this.injector },\n );\n });\n }\n\n protected read(field: FormField): unknown {\n return this.value()[field.key] ?? null;\n }\n\n protected text(field: FormField): string {\n const raw = this.value()[field.key];\n\n return raw === null || raw === undefined ? '' : String(raw);\n }\n\n protected nullableText(field: FormField): string | null {\n const raw = this.value()[field.key];\n\n return raw === null || raw === undefined || raw === '' ? null : String(raw);\n }\n\n protected checked(field: FormField): boolean {\n return this.value()[field.key] === true;\n }\n\n protected write(field: FormField, next: unknown): void {\n this.valueChange.emit({ ...this.value(), [field.key]: next });\n }\n\n protected isDisabled(field: FormField): boolean {\n return this.readonly() || field.disabled === true;\n }\n\n protected isSearchable(field: FormField): boolean {\n return isFieldSearchable(field);\n }\n\n protected fieldClass(field: FormField): string {\n const span = field.span ?? 1;\n\n return `is-span-${span === 'full' ? 'full' : span} is-size-${resolveFieldSize(field)}`;\n }\n\n protected gridClass(): string {\n const columns = this.columns();\n\n return columns ? `is-cap-${Math.min(Math.max(columns, 1), 4)}` : '';\n }\n\n protected optionsOf(field: FormField): FieldOption[] {\n return [...(field.options ?? [])];\n }\n\n protected kindOf(field: FormField): string {\n return field.kind ?? 'text';\n }\n}\n","<div class=\"ns-form-grid\" [class]=\"gridClass()\">\n @for (field of fields(); track field.key) {\n <div class=\"ns-field\" [class]=\"fieldClass(field)\">\n @if (kindOf(field) !== 'checkbox' && kindOf(field) !== 'switch') {\n <label [attr.for]=\"kindOf(field) === 'color' ? null : 'nf-' + field.key\">\n {{ field.label }}\n </label>\n }\n\n @switch (kindOf(field)) {\n @case ('textarea') {\n <textarea\n pTextarea\n [id]=\"'nf-' + field.key\"\n [rows]=\"field.rows ?? 3\"\n [ngModel]=\"text(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [attr.maxlength]=\"field.maxlength ?? null\"\n [attr.placeholder]=\"field.placeholder ?? null\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n ></textarea>\n }\n @case ('select') {\n <p-select\n [inputId]=\"'nf-' + field.key\"\n [options]=\"optionsOf(field)\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [ngModel]=\"read(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [placeholder]=\"field.placeholder ?? labels().choose\"\n [showClear]=\"field.clearable === true\"\n [filter]=\"isSearchable(field)\"\n filterBy=\"label\"\n [filterPlaceholder]=\"labels().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n }\n @case ('icon') {\n <nucleus-icon-picker\n [inputId]=\"'nf-' + field.key\"\n [value]=\"nullableText(field)\"\n (valueChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n />\n }\n @case ('color') {\n <nucleus-color-picker\n [value]=\"nullableText(field)\"\n (valueChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ariaLabel]=\"field.label\"\n />\n }\n @case ('checkbox') {\n <div class=\"ns-inline\">\n <p-checkbox\n [inputId]=\"'nf-' + field.key\"\n [binary]=\"true\"\n [ngModel]=\"checked(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <label [attr.for]=\"'nf-' + field.key\" class=\"ns-inline-label\">{{ field.label }}</label>\n </div>\n }\n @case ('switch') {\n <div class=\"ns-inline\">\n <p-toggleswitch\n [inputId]=\"'nf-' + field.key\"\n [ngModel]=\"checked(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <label [attr.for]=\"'nf-' + field.key\" class=\"ns-inline-label\">{{ field.label }}</label>\n </div>\n }\n @default {\n <input\n pInputText\n [id]=\"'nf-' + field.key\"\n [type]=\"kindOf(field) === 'number' ? 'number' : kindOf(field)\"\n [ngModel]=\"text(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [attr.maxlength]=\"field.maxlength ?? null\"\n [attr.placeholder]=\"field.placeholder ?? null\"\n [ngModelOptions]=\"{ standalone: true }\"\n autocomplete=\"off\"\n fluid\n />\n }\n }\n\n @if (field.hint) {\n <p class=\"ns-hint\">{{ field.hint }}</p>\n }\n </div>\n }\n</div>\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n@Directive({\n selector: '[nucleusCell]',\n})\nexport class NucleusCell {\n readonly nucleusCell = input.required<string>();\n\n readonly template = inject(TemplateRef);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n contentChildren,\n input,\n output,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonModule } from 'primeng/button';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport {\n ListAction,\n ListActionEvent,\n ListColumn,\n ListTag,\n ListToggleEvent,\n} from './list.models';\nimport { NucleusCell } from './nucleus-cell';\n\n@Component({\n selector: 'nucleus-list',\n imports: [NgTemplateOutlet, ButtonModule, SkeletonModule, TableModule, TagModule, TooltipModule],\n templateUrl: './nucleus-list.html',\n styleUrl: './nucleus-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusList<T extends object = Record<string, unknown>> {\n readonly rows = input.required<T[]>();\n readonly columns = input.required<readonly ListColumn<T>[]>();\n readonly actions = input<readonly ListAction<T>[]>([]);\n readonly empty = input('');\n readonly loading = input(false);\n readonly minWidth = input('640px');\n readonly skeletonRows = input(5);\n readonly rowClass = input<(row: T) => string>(() => '');\n readonly pageSize = input(5);\n readonly pageSizes = input<number[]>([5, 10, 20, 25]);\n\n readonly action = output<ListActionEvent<T>>();\n readonly toggle = output<ListToggleEvent<T>>();\n\n private readonly cells = contentChildren(NucleusCell);\n\n protected readonly paginate = computed(() => !this.loading());\n\n protected readonly tableStyle = computed(() => ({ 'min-width': this.minWidth() }));\n\n protected readonly showEmpty = computed(() => !this.loading() && this.rows().length === 0);\n\n protected readonly placeholders = computed<object[]>(() =>\n Array.from({ length: Math.max(this.skeletonRows(), 1) }, (_, index) => ({ index })),\n );\n\n protected readonly data = computed<object[]>(() =>\n this.loading() ? this.placeholders() : this.rows(),\n );\n\n protected skeletonWidth(column: ListColumn<T>): string {\n if (column.kind === 'switch') return '84px';\n if (column.align === 'right') return '40px';\n if (column.width) return '60%';\n\n return column.strong ? '58%' : '78%';\n }\n\n protected cellTemplate(key: string): TemplateRef<unknown> | null {\n return this.cells().find((cell) => cell.nucleusCell() === key)?.template ?? null;\n }\n\n protected text(column: ListColumn<T>, row: T): string {\n if (column.value) return column.value(row);\n\n const raw = (row as Record<string, unknown>)[column.key];\n\n return raw === null || raw === undefined ? '—' : String(raw);\n }\n\n protected tagOf(column: ListColumn<T>, row: T): ListTag | null {\n return column.tag ? column.tag(row) : null;\n }\n\n protected visibleActions(row: T): readonly ListAction<T>[] {\n return this.actions().filter((entry) => !entry.visible || entry.visible(row));\n }\n\n protected isActionLocked(entry: ListAction<T>, row: T): boolean {\n return entry.disabled ? entry.disabled(row) : false;\n }\n\n protected run(entry: ListAction<T>, row: T): void {\n this.action.emit({ id: entry.id, row });\n }\n\n protected isChecked(column: ListColumn<T>, row: T): boolean {\n return column.checked ? column.checked(row) : false;\n }\n\n protected isLocked(column: ListColumn<T>, row: T): boolean {\n return column.disabled ? column.disabled(row) : false;\n }\n\n protected hintOf(column: ListColumn<T>, row: T): string {\n return column.hint ? column.hint(row) : '';\n }\n\n protected flip(column: ListColumn<T>, row: T): void {\n if (this.isLocked(column, row)) return;\n\n this.toggle.emit({ key: column.key, row, value: !this.isChecked(column, row) });\n }\n}\n","<div class=\"head\">\n <ng-content select=\"[nucleusListTitle]\" />\n <div class=\"head-actions\">\n <ng-content select=\"[nucleusListActions]\" />\n </div>\n</div>\n\n@if (showEmpty()) {\n <div class=\"placeholder\">{{ empty() }}</div>\n} @else {\n <p-table\n [value]=\"data()\"\n styleClass=\"ns-table\"\n [tableStyle]=\"tableStyle()\"\n [paginator]=\"paginate()\"\n [rows]=\"pageSize()\"\n [rowsPerPageOptions]=\"pageSizes()\"\n [alwaysShowPaginator]=\"true\"\n >\n <ng-template #header>\n <tr>\n @for (column of columns(); track column.key) {\n <th [class]=\"'align-' + (column.align ?? 'left')\" [style.width]=\"column.width\">\n {{ column.header }}\n </th>\n }\n @if (actions().length) {\n <th class=\"align-right\"></th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-row>\n @if (loading()) {\n <tr class=\"is-skeleton\">\n @for (column of columns(); track column.key) {\n <td [class]=\"'align-' + (column.align ?? 'left')\">\n <p-skeleton height=\"13px\" [width]=\"skeletonWidth(column)\" />\n </td>\n }\n @if (actions().length) {\n <td class=\"align-right actions\">\n <p-skeleton shape=\"circle\" size=\"26px\" />\n </td>\n }\n </tr>\n } @else {\n <tr [class]=\"rowClass()(row)\">\n @for (column of columns(); track column.key) {\n <td [class]=\"'align-' + (column.align ?? 'left')\" [class.strong]=\"column.strong\">\n @if (cellTemplate(column.key); as custom) {\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\n />\n } @else if (column.kind === 'switch') {\n <span class=\"switch-cell\">\n <button\n type=\"button\"\n class=\"ns-switch\"\n role=\"switch\"\n [class.is-on]=\"isChecked(column, row)\"\n [attr.aria-checked]=\"isChecked(column, row)\"\n [attr.aria-label]=\"text(column, row)\"\n [disabled]=\"isLocked(column, row)\"\n [pTooltip]=\"hintOf(column, row)\"\n tooltipPosition=\"top\"\n (click)=\"flip(column, row)\"\n >\n <span class=\"knob\"></span>\n </button>\n <span class=\"switch-label\">{{ text(column, row) }}</span>\n </span>\n } @else {\n {{ text(column, row) }}\n @if (tagOf(column, row); as tag) {\n <p-tag [value]=\"tag.label\" [severity]=\"tag.severity ?? 'secondary'\" />\n }\n }\n </td>\n }\n\n @if (actions().length) {\n <td class=\"align-right actions\">\n @for (entry of visibleActions(row); track entry.id) {\n <p-button\n [icon]=\"entry.icon\"\n [severity]=\"entry.tone === 'danger' ? 'danger' : 'secondary'\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [pTooltip]=\"entry.label\"\n tooltipPosition=\"left\"\n [ariaLabel]=\"entry.label\"\n [disabled]=\"isActionLocked(entry, row)\"\n (onClick)=\"run(entry, row)\"\n />\n }\n </td>\n }\n </tr>\n }\n </ng-template>\n </p-table>\n}\n","export interface TreeRow {\n readonly id: string;\n readonly parentId: string | null;\n}\n\nexport function toggleCollapsed(collapsed: ReadonlySet<string>, id: string): ReadonlySet<string> {\n const next = new Set(collapsed);\n\n if (!next.delete(id)) next.add(id);\n\n return next;\n}\n\nexport function hasChildren(rows: readonly TreeRow[], id: string): boolean {\n return rows.some((row) => row.parentId === id);\n}\n\nexport function visibleTreeRows<T extends TreeRow>(\n rows: readonly T[],\n collapsed: ReadonlySet<string>,\n): T[] {\n if (collapsed.size === 0) return [...rows];\n\n const parents = new Map(rows.map((row) => [row.id, row.parentId]));\n\n const buried = (row: T): boolean => {\n let parentId = row.parentId;\n\n while (parentId) {\n if (collapsed.has(parentId)) return true;\n\n parentId = parents.get(parentId) ?? null;\n }\n\n return false;\n };\n\n return rows.filter((row) => !buried(row));\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nconst ORBIT = { rx: 78, ry: 196 } as const;\n\n@Component({\n selector: 'nucleus-mark',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n svg {\n display: block;\n }\n `,\n template: `\n <svg\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n viewBox=\"-230 -230 460 460\"\n aria-hidden=\"true\"\n >\n @for (r of rotations; track $index) {\n <ellipse\n [attr.rx]=\"orbit.rx\"\n [attr.ry]=\"orbit.ry\"\n [attr.transform]=\"'rotate(' + r + ')'\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"18\"\n />\n }\n <circle r=\"42\" [attr.fill]=\"accent()\" />\n </svg>\n `,\n})\nexport class NucleusMark {\n readonly accent = input('#7C6CF5');\n readonly size = input(28);\n\n protected readonly orbit = ORBIT;\n protected readonly rotations = [0, 60, 120];\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\n\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { readableOn } from '../../theme/contrast';\nimport {\n ACCENTS,\n AccentPreference,\n CANVASES,\n CanvasPreference,\n DENSITIES,\n DensityId,\n FRAMES,\n Frame,\n accentOn,\n accentById,\n canvasById,\n} from '../../theme/theme';\nimport { themeCopyOf } from '../../theme/theme.copy';\nimport { ThemeService } from '../../theme/theme.service';\n\ninterface FrameChoice {\n readonly id: Frame['id'];\n readonly label: string;\n readonly tokens: Frame['tokens'];\n}\n\ninterface CanvasChoice {\n readonly id: CanvasPreference;\n readonly label: string;\n readonly bg: string;\n readonly surface: string;\n readonly text: string;\n readonly icon: string | null;\n}\n\ninterface AccentChoice {\n readonly id: AccentPreference;\n readonly label: string;\n readonly color: string;\n readonly ink: string;\n}\n\ninterface DensityChoice {\n readonly id: DensityId;\n readonly label: string;\n readonly gap: number;\n}\n\n@Component({\n selector: 'nucleus-appearance',\n templateUrl: './nucleus-appearance.html',\n styleUrl: './nucleus-appearance.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusAppearance {\n private readonly theme = inject(ThemeService);\n private readonly language = inject(NucleusLanguage);\n\n protected readonly copy = computed(() => themeCopyOf(this.language.lang()));\n\n protected readonly appearance = this.theme.appearance;\n\n protected readonly canvasId = this.theme.canvasId;\n\n protected readonly frames = computed<FrameChoice[]>(() => {\n const labels = this.copy().frames;\n\n return FRAMES.map((frame) => ({ id: frame.id, label: labels[frame.id], tokens: frame.tokens }));\n });\n\n protected readonly canvases = computed<CanvasChoice[]>(() => {\n const labels = this.copy().canvases;\n\n const preview = (id: CanvasPreference): CanvasChoice => {\n const resolved = canvasById(id === 'system' ? this.theme.systemCanvasId() : id);\n\n return {\n id,\n label: labels[id],\n bg: resolved.tokens.bg,\n surface: resolved.tokens.surface,\n text: resolved.tokens.text,\n icon: id === 'system' ? 'pi pi-desktop' : null,\n };\n };\n\n return [...CANVASES.map((canvas) => preview(canvas.id)), preview('system')];\n });\n\n protected readonly accents = computed<AccentChoice[]>(() => {\n const labels = this.copy().accents;\n const canvas = this.canvasId();\n const auto = accentOn(accentById(this.theme.frame().accent), canvas);\n\n return [\n { id: 'auto' as AccentPreference, label: labels.auto, color: auto, ink: readableOn(auto) },\n ...ACCENTS.map((accent) => {\n const color = accentOn(accent, canvas);\n\n return { id: accent.id as AccentPreference, label: labels[accent.id], color, ink: readableOn(color) };\n }),\n ];\n });\n\n protected readonly densities = computed<DensityChoice[]>(() => {\n const labels = this.copy().densities;\n\n return DENSITIES.map((density) => ({\n id: density.id,\n label: labels[density.id],\n gap: Math.round(6 * density.scale),\n }));\n });\n\n protected pickFrame(id: Frame['id']): void {\n this.theme.setFrame(id);\n }\n\n protected pickCanvas(id: CanvasPreference): void {\n this.theme.setCanvas(id);\n }\n\n protected pickAccent(id: AccentPreference): void {\n this.theme.setAccent(id);\n }\n\n protected pickDensity(id: DensityId): void {\n this.theme.setDensity(id);\n }\n}\n","@let t = copy();\n@let current = appearance();\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.frameTitle }}</h3>\n <p class=\"group-hint\">{{ t.frameHint }}</p>\n\n <div class=\"frames\" role=\"radiogroup\" [attr.aria-label]=\"t.frameTitle\">\n @for (frame of frames(); track frame.id) {\n <button\n type=\"button\"\n class=\"frame\"\n role=\"radio\"\n [class.is-active]=\"frame.id === current.frame\"\n [attr.aria-checked]=\"frame.id === current.frame\"\n [attr.aria-label]=\"frame.label\"\n [style.--f-bg]=\"frame.tokens.bg\"\n [style.--f-raised]=\"frame.tokens.raised\"\n [style.--f-ink]=\"frame.tokens.ink\"\n [style.--f-muted]=\"frame.tokens.muted\"\n [style.--f-line]=\"frame.tokens.line\"\n [style.--f-glow]=\"frame.tokens.glow\"\n (click)=\"pickFrame(frame.id)\"\n >\n <span class=\"frame-chip\" aria-hidden=\"true\">\n <span class=\"frame-bar\">\n <span class=\"frame-dot\"></span>\n </span>\n <span class=\"frame-lower\">\n <span class=\"frame-rail\">\n <span class=\"frame-pin\"></span>\n <span class=\"frame-row is-on\"></span>\n <span class=\"frame-row\"></span>\n <span class=\"frame-row\"></span>\n </span>\n <span class=\"frame-canvas\"></span>\n </span>\n </span>\n <span class=\"frame-name\">{{ frame.label }}</span>\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.canvasTitle }}</h3>\n <p class=\"group-hint\">{{ t.canvasHint }}</p>\n\n <div class=\"canvases\" role=\"radiogroup\" [attr.aria-label]=\"t.canvasTitle\">\n @for (canvas of canvases(); track canvas.id) {\n <button\n type=\"button\"\n class=\"canvas\"\n role=\"radio\"\n [class.is-active]=\"canvas.id === current.canvas\"\n [attr.aria-checked]=\"canvas.id === current.canvas\"\n (click)=\"pickCanvas(canvas.id)\"\n >\n <span\n class=\"canvas-chip\"\n aria-hidden=\"true\"\n [style.background]=\"canvas.bg\"\n [style.color]=\"canvas.text\"\n >\n @if (canvas.icon) {\n <i [class]=\"canvas.icon\"></i>\n } @else {\n <span class=\"canvas-sheet\" [style.background]=\"canvas.surface\"></span>\n }\n </span>\n <span class=\"canvas-name\">{{ canvas.label }}</span>\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.accentTitle }}</h3>\n <p class=\"group-hint\">{{ t.accentHint }}</p>\n\n <div class=\"accents\" role=\"radiogroup\" [attr.aria-label]=\"t.accentTitle\">\n @for (accent of accents(); track accent.id) {\n <button\n type=\"button\"\n class=\"accent\"\n role=\"radio\"\n [class.is-auto]=\"accent.id === 'auto'\"\n [class.is-active]=\"accent.id === current.accent\"\n [attr.aria-checked]=\"accent.id === current.accent\"\n [attr.aria-label]=\"accent.label\"\n [title]=\"accent.label\"\n [style.background]=\"accent.color\"\n [style.color]=\"accent.ink\"\n (click)=\"pickAccent(accent.id)\"\n >\n @if (accent.id === current.accent) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n } @else if (accent.id === 'auto') {\n <i class=\"pi pi-sparkles\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.densityTitle }}</h3>\n <p class=\"group-hint\">{{ t.densityHint }}</p>\n\n <div class=\"densities\" role=\"radiogroup\" [attr.aria-label]=\"t.densityTitle\">\n @for (density of densities(); track density.id) {\n <button\n type=\"button\"\n class=\"density\"\n role=\"radio\"\n [class.is-active]=\"density.id === current.density\"\n [attr.aria-checked]=\"density.id === current.density\"\n (click)=\"pickDensity(density.id)\"\n >\n <span class=\"density-chip\" aria-hidden=\"true\" [style.gap.px]=\"density.gap\">\n <span class=\"density-row\"></span>\n <span class=\"density-row\"></span>\n <span class=\"density-row\"></span>\n </span>\n <span class=\"density-name\">{{ density.label }}</span>\n </button>\n }\n </div>\n</section>\n","import { readableOn } from '../../theme/contrast';\n\nexport interface MenuTile {\n readonly label: string;\n\n readonly icon: string | null;\n\n readonly color: string | null;\n\n readonly ink: string | null;\n\n readonly ghost: boolean;\n}\n\nexport interface MenuRow {\n readonly id: string;\n\n readonly name: string;\n\n readonly meta: string | null;\n\n readonly tile: MenuTile | null;\n\n readonly tag: string | null;\n\n readonly current: boolean;\n\n readonly disabled: boolean;\n}\n\nexport interface MenuSection {\n readonly id: string;\n\n readonly label: string | null;\n\n readonly rows: readonly MenuRow[];\n}\n\nexport function menuTile(label: string, icon: string | null, color: string | null): MenuTile {\n return { label, icon, color, ink: color ? readableOn(color) : null, ghost: false };\n}\n\nexport function menuGlyph(icon: string): MenuTile {\n return { label: '', icon, color: null, ink: null, ghost: true };\n}\n\nexport function foldText(value: string): string {\n return value\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase();\n}\n\nexport function matchesRow(row: MenuRow, term: string): boolean {\n return foldText(row.name).includes(term) || foldText(row.meta ?? '').includes(term);\n}\n\nexport function selectableRows(sections: readonly MenuSection[]): MenuRow[] {\n return sections.flatMap((section) => section.rows).filter((row) => !row.disabled && !row.current);\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport { MenuRow, MenuSection, foldText, matchesRow, selectableRows } from './menu.models';\n\n@Component({\n selector: 'nucleus-menu',\n templateUrl: './nucleus-menu.html',\n styleUrl: './nucleus-menu.css',\n host: {\n '[style.width.px]': 'width()',\n '(keydown)': 'onKeydown($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusMenu {\n readonly sections = input<readonly MenuSection[]>([]);\n\n readonly heading = input('');\n\n readonly badge = input<string | null>(null);\n\n readonly searchable = input(false);\n\n readonly searchPlaceholder = input('');\n\n readonly emptyText = input('');\n\n readonly keyboardHint = input('');\n\n readonly width = input(320);\n\n readonly select = output<MenuRow>();\n\n readonly dismiss = output<void>();\n\n protected readonly term = signal('');\n\n private readonly searchBox = viewChild<ElementRef<HTMLInputElement>>('searchBox');\n\n private readonly root = viewChild.required<ElementRef<HTMLElement>>('root');\n\n protected readonly visible = computed<readonly MenuSection[]>(() => {\n const term = foldText(this.term().trim());\n\n if (!term) return this.sections();\n\n const rows = this.sections()\n .flatMap((section) => section.rows)\n .filter((row) => !row.current && matchesRow(row, term));\n\n return [{ id: 'results', label: null, rows }];\n });\n\n protected readonly isEmpty = computed(() => this.visible().every((s) => s.rows.length === 0));\n\n protected readonly showSearch = computed(() => this.searchable());\n\n private readonly reachable = computed(() => selectableRows(this.visible()));\n\n private readonly activeId = signal<string | null>(null);\n\n private readonly syncActive = effect(() => {\n const rows = this.reachable();\n const current = this.activeId();\n\n if (rows.some((row) => row.id === current)) return;\n\n this.activeId.set(rows[0]?.id ?? null);\n });\n\n constructor() {\n queueMicrotask(() => this.focusEntry());\n }\n\n protected isActive(row: MenuRow): boolean {\n return row.id === this.activeId();\n }\n\n protected onTerm(value: string): void {\n this.term.set(value);\n }\n\n protected choose(row: MenuRow): void {\n if (row.disabled || row.current) return;\n\n this.select.emit(row);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.dismiss.emit();\n\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n this.step(event.key === 'ArrowDown' ? 1 : -1);\n\n return;\n }\n\n if (event.key === 'Enter') {\n const row = this.reachable().find((item) => item.id === this.activeId());\n\n if (!row) return;\n\n event.preventDefault();\n this.choose(row);\n }\n }\n\n private step(delta: number): void {\n const rows = this.reachable();\n\n if (!rows.length) return;\n\n const index = rows.findIndex((row) => row.id === this.activeId());\n const next = (index + delta + rows.length) % rows.length;\n\n this.activeId.set(rows[next].id);\n this.scrollIntoView(rows[next].id);\n }\n\n private scrollIntoView(id: string): void {\n const target = this.root().nativeElement.querySelector<HTMLElement>(`[data-row=\"${id}\"]`);\n\n target?.scrollIntoView({ block: 'nearest' });\n }\n\n private focusEntry(): void {\n const box = this.searchBox()?.nativeElement;\n\n if (box) {\n box.focus();\n\n return;\n }\n\n this.root().nativeElement.focus();\n }\n}\n","<div class=\"menu\" #root tabindex=\"-1\">\n @if (heading()) {\n <div class=\"menu-head\">\n <h4>{{ heading() }}</h4>\n @if (badge(); as count) {\n <span class=\"menu-badge\">{{ count }}</span>\n }\n </div>\n }\n\n @if (showSearch()) {\n <div class=\"menu-search\">\n <label class=\"menu-field\">\n <i class=\"pi pi-search\" aria-hidden=\"true\"></i>\n <input\n #searchBox\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"searchPlaceholder()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"term()\"\n (input)=\"onTerm($any($event.target).value)\"\n />\n </label>\n </div>\n }\n\n <div class=\"menu-body\" role=\"listbox\" [attr.aria-label]=\"heading()\">\n @if (isEmpty()) {\n <p class=\"menu-empty\">{{ emptyText() }}</p>\n }\n\n @for (section of visible(); track section.id) {\n @if (section.rows.length) {\n @if (section.label) {\n <p class=\"menu-section\">{{ section.label }}</p>\n }\n\n @for (row of section.rows; track row.id) {\n <button\n type=\"button\"\n class=\"menu-row\"\n role=\"option\"\n [attr.data-row]=\"row.id\"\n [class.is-current]=\"row.current\"\n [class.is-locked]=\"row.disabled\"\n [class.is-active]=\"isActive(row)\"\n [attr.aria-selected]=\"isActive(row)\"\n [disabled]=\"row.disabled || row.current\"\n (click)=\"choose(row)\"\n >\n @if (row.tile; as tile) {\n <span\n class=\"menu-tile\"\n [class.is-ghost]=\"tile.ghost\"\n [style.background]=\"tile.ghost ? null : tile.color\"\n [style.color]=\"tile.ghost ? null : tile.ink\"\n aria-hidden=\"true\"\n >\n @if (tile.icon) {\n <i [class]=\"tile.icon\"></i>\n } @else {\n {{ tile.label }}\n }\n </span>\n }\n\n <span class=\"menu-text\">\n <span class=\"menu-name\">{{ row.name }}</span>\n @if (row.meta) {\n <span class=\"menu-meta\">{{ row.meta }}</span>\n }\n </span>\n\n <span class=\"menu-end\">\n @if (row.tag) {\n <span class=\"menu-tag\" [class.is-current]=\"row.current\">{{ row.tag }}</span>\n } @else if (!row.disabled && !row.current) {\n <i class=\"pi pi-chevron-right menu-chevron\" aria-hidden=\"true\"></i>\n }\n </span>\n </button>\n }\n }\n }\n </div>\n\n @if (showSearch() && keyboardHint()) {\n <p class=\"menu-foot\">{{ keyboardHint() }}</p>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\n\nconst STORAGE_KEY = 'nucleus_recent_apps';\n\nconst KEEP = 8;\n\nfunction readIds(): readonly string[] {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n\n if (!raw) return [];\n\n const parsed = JSON.parse(raw) as unknown;\n\n if (!Array.isArray(parsed)) return [];\n\n return parsed.filter((value): value is string => typeof value === 'string').slice(0, KEEP);\n } catch {\n return [];\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusRecentApps {\n private readonly _ids = signal<readonly string[]>(readIds());\n\n readonly ids = this._ids.asReadonly();\n\n remember(appId: string): void {\n const key = appId.toLowerCase();\n\n this._ids.update((ids) => [key, ...ids.filter((id) => id !== key)].slice(0, KEEP));\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this._ids()));\n } catch {}\n }\n\n pick<T extends { readonly id: string }>(source: readonly T[], limit: number): T[] {\n const byId = new Map(source.map((item) => [item.id.toLowerCase(), item]));\n\n return this._ids()\n .map((id) => byId.get(id))\n .filter((item): item is T => item !== undefined)\n .slice(0, limit);\n }\n\n clear(): void {\n this._ids.set([]);\n\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {}\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nconst W = 1280;\nconst H = 720;\n\nconst STARS = Array.from({ length: 130 }, (_, i) => {\n const a = i * 2.399963;\n const big = i % 11 === 0;\n const sway = Math.sin(a * 1.7);\n const lift = Math.cos(a * 2.3);\n\n return {\n cx: +((Math.sin(a * 7.13) * 0.5 + 0.5) * W).toFixed(2),\n cy: +((Math.cos(a * 3.77) * 0.5 + 0.5) * H).toFixed(2),\n r: +((big ? 2.4 : 0.9) + (i % 4) * 0.5).toFixed(2),\n opacity: ((big ? 0.85 : 0.42) + (i % 5) * 0.09).toFixed(2),\n dx: `${(sway * 26).toFixed(1)}px`,\n dy: `${(lift * 18).toFixed(1)}px`,\n duration: `${(11 + (i % 9) * 1.7).toFixed(1)}s`,\n delay: `-${((i % 13) * 0.85).toFixed(2)}s`,\n };\n});\n\n@Component({\n selector: 'nucleus-starfield',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.viewBox]=\"'0 0 ' + W + ' ' + H\"\n preserveAspectRatio=\"xMidYMid slice\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <defs>\n <radialGradient id=\"ns-starfield-glow\" cx=\"50%\" cy=\"0%\" r=\"75%\">\n <stop offset=\"0%\" stop-color=\"var(--ac-accent)\" stop-opacity=\"0.18\" />\n <stop offset=\"70%\" stop-color=\"var(--ac-accent)\" stop-opacity=\"0\" />\n </radialGradient>\n </defs>\n\n <rect width=\"100%\" height=\"100%\" fill=\"url(#ns-starfield-glow)\" />\n\n @for (star of stars; track $index) {\n <circle\n [attr.cx]=\"star.cx\"\n [attr.cy]=\"star.cy\"\n [attr.r]=\"star.r\"\n [style.--o]=\"star.opacity\"\n [style.--dx]=\"star.dx\"\n [style.--dy]=\"star.dy\"\n [style.--dur]=\"star.duration\"\n [style.--delay]=\"star.delay\"\n fill=\"#ffffff\"\n />\n }\n </svg>\n `,\n styles: `\n :host {\n position: fixed;\n inset: 0;\n z-index: -1;\n display: block;\n pointer-events: none;\n background: var(--ac-bg);\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n circle {\n opacity: var(--o);\n animation: ns-drift var(--dur) ease-in-out var(--delay) infinite alternate;\n }\n\n @keyframes ns-drift {\n from {\n transform: translate(0, 0);\n opacity: var(--o);\n }\n to {\n transform: translate(var(--dx), var(--dy));\n opacity: calc(var(--o) * 0.3);\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n circle {\n animation: none;\n }\n }\n `,\n})\nexport class NucleusStarfield {\n protected readonly W = W;\n protected readonly H = H;\n protected readonly stars = STARS;\n}\n","import { NucleusLang } from '../../i18n/nucleus-language';\n\nexport interface ShellCopy {\n readonly navToggle: string;\n readonly appsLauncher: string;\n readonly appsEmpty: string;\n readonly appsSwitch: string;\n readonly appsSearch: string;\n readonly appsNoMatch: string;\n readonly appsRecent: string;\n readonly appsAll: string;\n readonly appsAvailable: string;\n readonly appsHere: string;\n readonly keyboardHint: string;\n readonly accountSwitchHint: string;\n readonly signOutHint: string;\n readonly settingsTitle: string;\n readonly signOut: string;\n readonly accountManage: string;\n readonly accountSwitch: string;\n readonly homeLabel: string;\n readonly accessLoading: string;\n readonly accessEmpty: string;\n readonly accountScope: string;\n readonly hintComingSoon: string;\n readonly hintNotDeployed: string;\n readonly roleCaption: string;\n readonly companyLabel: string;\n readonly companyPlaceholder: string;\n readonly siteLabel: string;\n readonly sitePlaceholder: string;\n readonly sitesLoading: string;\n readonly sitesEmpty: string;\n readonly relationOwner: string;\n readonly relationCollaborator: string;\n readonly noCompanyTitle: string;\n readonly noCompanyHint: string;\n}\n\nexport const SHELL_COPY: Readonly<Record<NucleusLang, ShellCopy>> = {\n es: {\n navToggle: 'Mostrar u ocultar el menú',\n appsLauncher: 'Aplicaciones',\n appsEmpty: 'No hay otras aplicaciones',\n appsSwitch: 'Cambiar de aplicación',\n appsSearch: 'Buscar aplicación',\n appsNoMatch: 'Ninguna aplicación coincide con lo que escribiste.',\n appsRecent: 'Recientes',\n appsAll: 'Todas',\n appsAvailable: 'Disponibles',\n appsHere: 'Aquí',\n keyboardHint: '↑ ↓ moverse · ↵ abrir · esc cerrar',\n accountSwitchHint: 'Entrar con otro correo',\n signOutHint: 'Salir de la suite',\n settingsTitle: 'Ajustes',\n signOut: 'Cerrar sesión',\n accountManage: 'Gestionar mi cuenta',\n accountSwitch: 'Cambiar de cuenta',\n homeLabel: 'Inicio',\n accessLoading: 'Cargando accesos...',\n accessEmpty: 'Sin accesos asignados',\n accountScope: 'Mi cuenta',\n hintComingSoon: 'Próximamente',\n hintNotDeployed: 'Sin publicar',\n roleCaption: 'Tu rol',\n companyLabel: 'Compañía',\n companyPlaceholder: 'Selecciona una compañía',\n siteLabel: 'Sede',\n sitePlaceholder: 'Selecciona una sede',\n sitesLoading: 'Cargando sedes...',\n sitesEmpty: 'Esta compañía no tiene sedes a tu alcance',\n relationOwner: 'Propietario',\n relationCollaborator: 'Colaborador',\n noCompanyTitle: 'Te falta una compañía',\n noCompanyHint:\n 'Para trabajar en las aplicaciones necesitas al menos una compañía con una sede, ' +\n 'propia o donde te hayan invitado. Puedes entrar igual, pero el menú saldrá vacío.',\n },\n en: {\n navToggle: 'Show or hide the menu',\n appsLauncher: 'Applications',\n appsEmpty: 'No other applications',\n appsSwitch: 'Switch application',\n appsSearch: 'Search applications',\n appsNoMatch: 'No application matches what you typed.',\n appsRecent: 'Recent',\n appsAll: 'All',\n appsAvailable: 'Available',\n appsHere: 'Here',\n keyboardHint: '↑ ↓ move · ↵ open · esc close',\n accountSwitchHint: 'Sign in with another address',\n signOutHint: 'Leave the suite',\n settingsTitle: 'Settings',\n signOut: 'Sign out',\n accountManage: 'Manage my account',\n accountSwitch: 'Switch account',\n homeLabel: 'Home',\n accessLoading: 'Loading access...',\n accessEmpty: 'No access granted',\n accountScope: 'My account',\n hintComingSoon: 'Coming soon',\n hintNotDeployed: 'Not deployed',\n roleCaption: 'Your role',\n companyLabel: 'Company',\n companyPlaceholder: 'Select a company',\n siteLabel: 'Site',\n sitePlaceholder: 'Select a site',\n sitesLoading: 'Loading sites...',\n sitesEmpty: 'This company has no sites available to you',\n relationOwner: 'Owner',\n relationCollaborator: 'Collaborator',\n noCompanyTitle: 'You need a company',\n noCompanyHint:\n 'To work in the applications you need at least one company with a site, your own or ' +\n 'one you have been invited to. You can still open them, but the menu will be empty.',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { ToastModule } from 'primeng/toast';\nimport { MenuItem } from 'primeng/api';\nimport { DrawerModule } from 'primeng/drawer';\nimport { PopoverModule } from 'primeng/popover';\nimport { SelectModule } from 'primeng/select';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { CompanyOption, LauncherApp, MenuNode, Site } from '../../api/api.models';\nimport { SessionService } from '../../api/session.service';\nimport { nucleusLogoutUrl } from '../../auth/logout';\nimport { NucleusAuth } from '../../auth/nucleus-auth';\nimport { NucleusSessionAuth } from '../../auth/session-auth.service';\nimport { NUCLEUS_CONFIG } from '../../config/nucleus-config';\nimport { NUCLEUS_HOME, isHomeRoute, normalizeHomeRoute } from '../../config/nucleus-home';\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLang, NucleusLanguage } from '../../i18n/nucleus-language';\nimport { ThemeService } from '../../theme/theme.service';\nimport { NucleusAppearance } from '../appearance/nucleus-appearance';\nimport { MenuRow, MenuSection, menuGlyph, menuTile } from '../menu/menu.models';\nimport { NucleusMenu } from '../menu/nucleus-menu';\nimport { NucleusRecentApps } from '../menu/recent-apps.service';\nimport { NUCLEUS_ICONS, NucleusLordicon } from '../lordicon/lordicon';\nimport { NucleusPage } from '../page/nucleus-page';\nimport { NucleusMark } from '../nucleus-mark/nucleus-mark';\nimport { NucleusStarfield } from '../starfield/starfield';\nimport { SHELL_COPY } from './shell.copy';\n\nconst LAUNCHER_RICH_THRESHOLD = 6;\n\nconst RECENT_LIMIT = 3;\n\nconst FALLBACK_APP_COLOR = '#64748b';\n\nconst HOME_MENU_ID = 'nucleus-home';\n\nexport interface ShellNavItem {\n readonly id: string;\n readonly icon: string;\n readonly label: string;\n}\n\ninterface CompanyChoice extends CompanyOption {\n readonly tag: string;\n}\n\ninterface ShellIdentity {\n readonly name: string;\n readonly email: string;\n readonly photoUrl: string | null;\n}\n\n@Component({\n selector: 'nucleus-shell',\n imports: [\n NgTemplateOutlet,\n AvatarModule,\n BreadcrumbModule,\n ButtonModule,\n ConfirmDialogModule,\n ToastModule,\n DrawerModule,\n PopoverModule,\n SelectModule,\n SkeletonModule,\n TagModule,\n TooltipModule,\n FormsModule,\n NucleusAppearance,\n NucleusLordicon,\n NucleusMenu,\n NucleusMark,\n NucleusStarfield,\n ],\n templateUrl: './nucleus-shell.html',\n styleUrl: './nucleus-shell.css',\n host: { '[style.--ns-topbar-h]': 'topbarHeight()' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusShell {\n private readonly session = inject(SessionService);\n private readonly sessionAuth = inject(NucleusSessionAuth);\n private readonly themes = inject(ThemeService);\n private readonly recents = inject(NucleusRecentApps);\n private readonly language = inject(NucleusLanguage);\n private readonly page = inject(NucleusPage);\n private readonly config = inject(NUCLEUS_CONFIG);\n private readonly injector = inject(Injector);\n private readonly router = inject(Router);\n\n readonly brand = input('SUITE');\n readonly heading = input('');\n readonly navItems = input<readonly ShellNavItem[]>([]);\n readonly activeNavId = input<string | null>(null);\n readonly selectedMenuId = input<string | null>(null);\n\n readonly navSelect = output<string>();\n readonly menuSelect = output<MenuNode>();\n\n protected readonly lang = this.language.lang;\n protected readonly icons = NUCLEUS_ICONS;\n protected readonly menuPlaceholders = ['64%', '80%', '52%', '72%', '58%'];\n\n protected readonly title = computed(() => this.heading() || this.page.heading());\n\n protected readonly pageActions = this.page.actions;\n\n protected readonly home = computed<MenuItem>(() => ({\n icon: 'pi pi-home',\n routerLink: this.homeRoute,\n }));\n\n protected readonly crumbs = computed<MenuItem[]>(() =>\n this.page.crumbs().map((crumb) => ({\n label: crumb.label,\n routerLink: crumb.route ? [...crumb.route] : undefined,\n })),\n );\n protected readonly copy = computed(() => SHELL_COPY[this.lang()]);\n\n protected readonly starfield = this.themes.starfield;\n\n private readonly homeRoute = normalizeHomeRoute(inject(NUCLEUS_HOME));\n\n private readonly currentUrl = signal(this.router.url);\n\n protected readonly menu = computed<readonly MenuNode[]>(() => {\n const nodes = this.session.menu();\n\n if (!nodes.length && !this.session.me()) return nodes;\n if (hasRoute(nodes, this.homeRoute)) return nodes;\n\n return [homeNode(this.homeRoute, this.copy().homeLabel), ...nodes];\n });\n\n private readonly collapsedIds = signal<ReadonlySet<string>>(new Set<string>());\n protected readonly menuLoading = this.session.loading;\n protected readonly menuError = this.session.error;\n protected readonly launcherApps = this.session.apps;\n protected readonly switching = this.session.switching;\n\n private readonly narrowQuery =\n typeof window === 'undefined' ? null : window.matchMedia('(max-width: 720px)');\n\n protected readonly narrow = signal(this.narrowQuery?.matches ?? false);\n\n protected readonly sidebarOpen = signal(!(this.narrowQuery?.matches ?? false));\n\n protected readonly settingsOpen = signal(false);\n\n protected readonly companyChoice = signal<string | null>(null);\n protected readonly siteChoice = signal<string | null>(null);\n protected readonly siteOptions = signal<Site[]>([]);\n protected readonly sitesLoading = signal(false);\n\n private readonly auth = this.injector.get(NucleusAuth, null);\n\n private sitesCompanyId: string | null = null;\n\n protected readonly identity = computed<ShellIdentity | null>(() => {\n const me = this.session.me();\n\n if (me) {\n return {\n name: me.displayName ?? me.userId,\n email: me.userId,\n photoUrl: me.photoUrl,\n };\n }\n\n const user = this.auth?.user() ?? null;\n\n if (!user) return null;\n\n return {\n name: user.displayName ?? user.email ?? user.providerUserId,\n email: user.email ?? user.providerUserId,\n photoUrl: user.photoUrl,\n };\n });\n\n protected readonly initials = computed(() => initialsOf(this.identity()?.name ?? ''));\n\n protected readonly canSwitchAccount = computed(() => this.auth?.switchAccount !== undefined);\n\n protected readonly hasCompany = computed(() => this.session.companies().length > 0);\n\n protected readonly companyChoices = computed<CompanyChoice[]>(() => {\n const t = this.copy();\n\n return this.session.companyOptions().map((company) => ({\n ...company,\n tag: company.relation === 'owner' ? t.relationOwner : t.relationCollaborator,\n }));\n });\n\n protected readonly roleName = this.session.roleName;\n\n protected readonly words = computed(() => commonCopyOf(this.lang()));\n\n protected readonly hasSiteContext = computed(() => this.session.scope() === 'site');\n\n protected readonly launcherRich = computed(\n () => this.launcherApps().length > LAUNCHER_RICH_THRESHOLD,\n );\n\n protected readonly launcherCount = computed(() => {\n const total = this.launcherApps().length + (this.session.currentApp() ? 1 : 0);\n\n return total > LAUNCHER_RICH_THRESHOLD ? String(total) : null;\n });\n\n protected readonly launcherSections = computed<MenuSection[]>(() => {\n const t = this.copy();\n const apps = this.launcherApps();\n const current = this.session.currentApp();\n const sections: MenuSection[] = [];\n\n if (current) {\n sections.push({ id: 'current', label: null, rows: [this.appRow(current, true)] });\n }\n\n if (!apps.length) return sections;\n\n if (this.launcherRich()) {\n const recent = this.recents.pick(apps, RECENT_LIMIT);\n\n if (recent.length) {\n sections.push({\n id: 'recent',\n label: t.appsRecent,\n rows: recent.map((app) => this.appRow(app, false)),\n });\n }\n\n sections.push({\n id: 'all',\n label: t.appsAll,\n rows: apps.map((app) => this.appRow(app, false)),\n });\n\n return sections;\n }\n\n sections.push({\n id: 'all',\n label: current ? t.appsAvailable : null,\n rows: apps.map((app) => this.appRow(app, false)),\n });\n\n return sections;\n });\n\n protected readonly accountSections = computed<MenuSection[]>(() => {\n const t = this.copy();\n const rows: MenuRow[] = [];\n\n if (this.canSwitchAccount()) {\n rows.push({\n id: 'switch',\n name: t.accountSwitch,\n meta: t.accountSwitchHint,\n tile: menuGlyph('pi pi-users'),\n tag: null,\n current: false,\n disabled: false,\n });\n }\n\n rows.push({\n id: 'signout',\n name: t.signOut,\n meta: t.signOutHint,\n tile: menuGlyph('pi pi-sign-out'),\n tag: null,\n current: false,\n disabled: false,\n });\n\n return [{ id: 'actions', label: null, rows }];\n });\n\n protected readonly accountContext = computed(() => {\n const company = this.companyChoices().find((item) => item.id === this.companyChoice());\n const site = this.session.siteName();\n\n if (company && site) return `${company.name} · ${site}`;\n if (company) return company.name;\n\n return this.copy().accountScope;\n });\n\n protected readonly sitePlaceholder = computed(() => {\n const t = this.copy();\n\n if (this.sitesLoading()) return t.sitesLoading;\n if (!this.siteOptions().length) return t.sitesEmpty;\n\n return t.sitePlaceholder;\n });\n\n protected readonly topbarHeight = computed(() =>\n this.narrow() && this.hasSiteContext() ? '100px' : '56px',\n );\n\n private readonly syncContext = effect(() => {\n const companyId = this.session.companyId();\n const siteId = this.session.siteId();\n\n untracked(() => {\n this.companyChoice.set(companyId);\n this.siteChoice.set(siteId);\n\n if (companyId) void this.loadSites(companyId);\n else this.siteOptions.set([]);\n });\n });\n\n private lastUid: string | null = null;\n\n private readonly watchIdentity = effect(() => {\n const uid = this.auth?.user()?.uid ?? null;\n\n untracked(() => {\n if (!uid) return;\n\n if (this.lastUid === null) {\n this.lastUid = uid;\n\n return;\n }\n\n if (this.lastUid === uid) return;\n\n this.lastUid = uid;\n\n this.goHome();\n });\n });\n\n private readonly loadSession = effect(() => {\n const language = this.lang();\n const user = this.auth?.user() ?? null;\n\n if (this.auth && !user) return;\n\n untracked(() => void this.session.load(language));\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n const navigation = this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) this.currentUrl.set(event.urlAfterRedirects);\n });\n\n destroyRef.onDestroy(() => navigation.unsubscribe());\n\n const query = this.narrowQuery;\n\n if (!query) return;\n\n const onChange = (event: MediaQueryListEvent) => {\n this.narrow.set(event.matches);\n this.sidebarOpen.set(!event.matches);\n };\n\n query.addEventListener('change', onChange);\n\n destroyRef.onDestroy(() => query.removeEventListener('change', onChange));\n }\n\n protected setLang(lang: NucleusLang): void {\n this.language.setLang(lang);\n }\n\n protected toggleSidebar(): void {\n this.sidebarOpen.update((open) => !open);\n }\n\n protected selectNav(id: string): void {\n this.navSelect.emit(id);\n this.closeSidebarOnNarrow();\n }\n\n protected isGroup(node: MenuNode): boolean {\n return node.children.length > 0;\n }\n\n protected isExpanded(node: MenuNode): boolean {\n return !this.collapsedIds().has(node.id);\n }\n\n protected selectMenu(node: MenuNode): void {\n if (this.isGroup(node)) {\n this.collapsedIds.update((ids) => {\n const next = new Set(ids);\n\n if (!next.delete(node.id)) next.add(node.id);\n\n return next;\n });\n\n return;\n }\n\n if (!node.route) return;\n\n this.menuSelect.emit(node);\n\n void this.router.navigateByUrl(node.route);\n\n this.closeSidebarOnNarrow();\n }\n\n private closeSidebarOnNarrow(): void {\n if (this.narrow()) this.sidebarOpen.set(false);\n }\n\n protected isSelected(node: MenuNode): boolean {\n if (node.id === HOME_MENU_ID) return isHomeRoute(this.homeRoute, this.currentUrl());\n\n return this.selectedMenuId() === node.id;\n }\n\n protected async onCompanyChange(companyId: string | null): Promise<void> {\n if (!companyId || companyId === this.session.companyId()) return;\n\n this.companyChoice.set(companyId);\n this.siteChoice.set(null);\n\n const sites = await this.loadSites(companyId);\n const first = sites[0]?.id ?? null;\n\n this.siteChoice.set(first);\n\n if (first) {\n await this.session.switchContext(companyId, first);\n\n this.goHome();\n }\n }\n\n protected async onSiteChange(siteId: string | null): Promise<void> {\n const companyId = this.companyChoice();\n\n if (!siteId || !companyId || siteId === this.session.siteId()) return;\n\n this.siteChoice.set(siteId);\n\n await this.session.switchContext(companyId, siteId);\n\n this.goHome();\n }\n\n private goHome(): void {\n if (isHomeRoute(this.homeRoute, this.router.url)) return;\n\n void this.router.navigateByUrl(this.homeRoute);\n }\n\n private appRow(app: LauncherApp, current: boolean): MenuRow {\n const hint = current ? this.copy().appsHere : this.launchHint(app);\n\n return {\n id: app.id,\n name: app.name,\n meta: app.description,\n tile: menuTile(initialsOf(app.name), app.icon, app.color ?? FALLBACK_APP_COLOR),\n tag: hint || null,\n current,\n disabled: !current && !this.canOpen(app),\n };\n }\n\n protected onLauncherSelect(row: MenuRow): void {\n const app = this.launcherApps().find((item) => item.id === row.id);\n\n if (app) this.launch(app);\n }\n\n protected onAccountSelect(row: MenuRow): void {\n if (row.id === 'switch') {\n void this.switchAccount();\n\n return;\n }\n\n void this.signOut();\n }\n\n protected canOpen(app: LauncherApp): boolean {\n return app.status === 1 && !!app.url;\n }\n\n protected launch(app: LauncherApp): void {\n if (!this.canOpen(app)) return;\n\n this.recents.remember(app.id);\n\n const target = new URL(app.url as string, window.location.origin);\n\n if (target.origin === window.location.origin) {\n void this.router.navigateByUrl(target.pathname + target.search);\n\n return;\n }\n\n window.location.href = app.url as string;\n }\n\n protected appInitials(app: LauncherApp): string {\n return initialsOf(app.name);\n }\n\n protected launchHint(app: LauncherApp): string {\n const t = this.copy();\n\n if (app.status !== 1) return t.hintComingSoon;\n if (!app.url) return t.hintNotDeployed;\n\n return '';\n }\n\n protected async switchAccount(): Promise<void> {\n await this.auth?.switchAccount?.();\n }\n\n protected async signOut(): Promise<void> {\n await this.sessionAuth.clear();\n await this.auth?.signOut?.();\n\n const landing = this.config.landingUrl;\n\n if (landing) window.location.href = nucleusLogoutUrl(landing);\n }\n\n private async loadSites(companyId: string): Promise<Site[]> {\n if (this.sitesCompanyId === companyId) return this.siteOptions();\n\n this.sitesCompanyId = companyId;\n this.sitesLoading.set(true);\n\n try {\n const sites = await this.session.accessibleSites(companyId);\n\n this.siteOptions.set(sites);\n\n return sites;\n } catch (error) {\n this.sitesCompanyId = null;\n this.siteOptions.set([]);\n console.error('[shell] no se pudieron cargar las sedes', error);\n\n return [];\n } finally {\n this.sitesLoading.set(false);\n }\n }\n}\n\nfunction initialsOf(source: string): string {\n const parts = source.trim().split(/\\s+/).filter(Boolean);\n\n if (!parts.length) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n\n return (parts[0][0] + parts[1][0]).toUpperCase();\n}\n\nfunction hasRoute(nodes: readonly MenuNode[], route: string): boolean {\n return nodes.some((node) => node.route === route || hasRoute(node.children, route));\n}\n\nfunction homeNode(route: string, label: string): MenuNode {\n return {\n id: HOME_MENU_ID,\n label,\n icon: 'pi pi-home',\n route,\n sortOrder: -1,\n canView: true,\n canInsert: false,\n canEdit: false,\n canDelete: false,\n canExport: false,\n children: [],\n };\n}\n","@let t = copy();\n@let me = identity();\n\n@if (starfield()) {\n <nucleus-starfield />\n}\n\n<header class=\"topbar ns-frame\">\n <div class=\"side\">\n <p-button\n icon=\"pi pi-bars\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.navToggle\"\n [pTooltip]=\"t.navToggle\"\n tooltipPosition=\"bottom\"\n (onClick)=\"toggleSidebar()\"\n />\n\n <div class=\"brand\">\n <nucleus-mark [size]=\"20\" />\n <div class=\"brand-name\">\n <span class=\"brand-primary\">NUCLEUS</span>\n <span class=\"brand-secondary\">{{ brand() }}</span>\n </div>\n </div>\n\n </div>\n\n @if (hasSiteContext()) {\n <div class=\"context ns-context\">\n <p-select\n styleClass=\"context-select\"\n [options]=\"companyChoices()\"\n optionValue=\"id\"\n optionLabel=\"name\"\n [ngModel]=\"companyChoice()\"\n (ngModelChange)=\"onCompanyChange($event)\"\n [placeholder]=\"t.companyPlaceholder\"\n [disabled]=\"switching()\"\n [filter]=\"companyChoices().length > 8\"\n filterBy=\"name\"\n [filterPlaceholder]=\"words().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ariaLabel]=\"t.companyLabel\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <ng-template #item let-option>\n <span class=\"company-option\">\n <span class=\"company-name\">{{ option.name }}</span>\n <p-tag [value]=\"option.tag\" severity=\"secondary\" />\n </span>\n </ng-template>\n </p-select>\n\n <p-select\n styleClass=\"context-select\"\n [options]=\"siteOptions()\"\n optionValue=\"id\"\n optionLabel=\"name\"\n [ngModel]=\"siteChoice()\"\n (ngModelChange)=\"onSiteChange($event)\"\n [placeholder]=\"sitePlaceholder()\"\n [disabled]=\"switching() || sitesLoading() || !siteOptions().length\"\n [filter]=\"siteOptions().length > 8\"\n filterBy=\"name\"\n [filterPlaceholder]=\"words().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ariaLabel]=\"t.siteLabel\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n </div>\n }\n\n <div class=\"side is-end\">\n <div class=\"lang-switch\" role=\"group\" aria-label=\"Idioma / Language\">\n <button\n type=\"button\"\n class=\"lang-pill\"\n [class.is-active]=\"lang() === 'es'\"\n [attr.aria-pressed]=\"lang() === 'es'\"\n (click)=\"setLang('es')\"\n >\n ES\n </button>\n <button\n type=\"button\"\n class=\"lang-pill\"\n [class.is-active]=\"lang() === 'en'\"\n [attr.aria-pressed]=\"lang() === 'en'\"\n (click)=\"setLang('en')\"\n >\n EN\n </button>\n </div>\n\n <p-button\n icon=\"pi pi-th-large\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.appsLauncher\"\n [pTooltip]=\"t.appsLauncher\"\n tooltipPosition=\"bottom\"\n (onClick)=\"launcher.toggle($event)\"\n />\n\n <p-popover #launcher styleClass=\"ns-flush-popover\">\n @if (!hasCompany()) {\n <div class=\"launcher-notice\">\n <i class=\"pi pi-building\" aria-hidden=\"true\"></i>\n <div>\n <p class=\"launcher-notice-title\">{{ t.noCompanyTitle }}</p>\n <p class=\"launcher-notice-body\">{{ t.noCompanyHint }}</p>\n </div>\n </div>\n }\n\n <nucleus-menu\n [heading]=\"t.appsSwitch\"\n [badge]=\"launcherCount()\"\n [sections]=\"launcherSections()\"\n [searchable]=\"launcherRich()\"\n [searchPlaceholder]=\"t.appsSearch\"\n [emptyText]=\"launcherRich() ? t.appsNoMatch : t.appsEmpty\"\n [keyboardHint]=\"t.keyboardHint\"\n [width]=\"336\"\n (select)=\"onLauncherSelect($event); launcher.hide()\"\n (dismiss)=\"launcher.hide()\"\n />\n </p-popover>\n\n <p-button\n icon=\"pi pi-cog\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.settingsTitle\"\n [pTooltip]=\"t.settingsTitle\"\n tooltipPosition=\"bottom\"\n (onClick)=\"settingsOpen.set(true)\"\n />\n\n @if (me) {\n <p-button\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n styleClass=\"avatar-trigger\"\n [ariaLabel]=\"me.name\"\n [pTooltip]=\"me.name\"\n tooltipPosition=\"bottom\"\n (onClick)=\"account.toggle($event)\"\n >\n <p-avatar\n [image]=\"me.photoUrl ?? undefined\"\n [label]=\"me.photoUrl ? undefined : initials()\"\n shape=\"circle\"\n size=\"normal\"\n />\n </p-button>\n }\n </div>\n</header>\n\n<p-popover #account styleClass=\"ns-flush-popover\">\n @if (me) {\n <div class=\"who\">\n @if (me.photoUrl) {\n <img class=\"who-photo\" [src]=\"me.photoUrl\" alt=\"\" width=\"42\" height=\"42\" />\n } @else {\n <span class=\"who-photo who-initials\">{{ initials() }}</span>\n }\n <span class=\"who-text\">\n <span class=\"who-name\">{{ me.name }}</span>\n <span class=\"who-mail\">{{ me.email }}</span>\n </span>\n </div>\n\n <p class=\"who-role\">\n <span class=\"who-dot\" aria-hidden=\"true\"></span>\n @if (roleName(); as role) {\n <b>{{ role }}</b>\n <span class=\"who-sep\">·</span>\n }\n <span class=\"who-context\">{{ accountContext() }}</span>\n </p>\n\n <nucleus-menu\n [sections]=\"accountSections()\"\n [width]=\"304\"\n (select)=\"onAccountSelect($event); account.hide()\"\n (dismiss)=\"account.hide()\"\n />\n }\n</p-popover>\n\n<div class=\"body\">\n @if (narrow() && sidebarOpen()) {\n <button\n type=\"button\"\n class=\"sidebar-scrim\"\n [attr.aria-label]=\"t.navToggle\"\n (click)=\"toggleSidebar()\"\n ></button>\n }\n\n <aside class=\"sidebar ns-frame\" [class.is-collapsed]=\"!sidebarOpen()\">\n @if (roleName(); as role) {\n <div class=\"role-badge\" [pTooltip]=\"sidebarOpen() ? '' : role\" tooltipPosition=\"right\">\n <i class=\"pi pi-key\" aria-hidden=\"true\"></i>\n <span class=\"nav-label role-text\">\n <span class=\"role-name\">{{ role }}</span>\n <span class=\"role-caption\">{{ t.roleCaption }}</span>\n </span>\n </div>\n }\n\n @if (navItems().length) {\n <nav>\n @for (item of navItems(); track item.id) {\n <button\n type=\"button\"\n class=\"nav-item\"\n [class.is-active]=\"activeNavId() === item.id\"\n [attr.aria-current]=\"activeNavId() === item.id ? 'page' : null\"\n [pTooltip]=\"sidebarOpen() ? '' : item.label\"\n tooltipPosition=\"right\"\n (click)=\"selectNav(item.id)\"\n >\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n </button>\n }\n </nav>\n }\n\n <nav class=\"access-menu\">\n @if (menuLoading()) {\n <div class=\"nav-skeleton\" role=\"status\" [attr.aria-label]=\"t.accessLoading\">\n @for (width of menuPlaceholders; track $index) {\n <div class=\"nav-skeleton-item\">\n <p-skeleton shape=\"circle\" size=\"15px\" />\n <p-skeleton height=\"9px\" [width]=\"width\" />\n </div>\n }\n </div>\n } @else if (menuError()) {\n <p class=\"access-state is-error\">{{ menuError() }}</p>\n } @else if (!menu().length) {\n <p class=\"access-state\">{{ t.accessEmpty }}</p>\n } @else {\n @for (node of menu(); track node.id) {\n @let group = isGroup(node);\n @let open = isExpanded(node);\n\n <button\n type=\"button\"\n class=\"nav-item\"\n [class.is-active]=\"!group && isSelected(node)\"\n [class.is-inert]=\"!group && !node.route\"\n [attr.aria-expanded]=\"group ? open : null\"\n [disabled]=\"!group && !node.route\"\n [pTooltip]=\"sidebarOpen() ? '' : node.label\"\n tooltipPosition=\"right\"\n (click)=\"selectMenu(node)\"\n >\n <i [class]=\"node.icon ?? 'pi pi-circle'\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ node.label }}</span>\n @if (group && sidebarOpen()) {\n <i\n class=\"pi nav-caret\"\n [class.pi-chevron-down]=\"open\"\n [class.pi-chevron-right]=\"!open\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n\n @if (open) {\n @for (child of node.children; track child.id) {\n <button\n type=\"button\"\n class=\"nav-item is-child\"\n [class.is-active]=\"isSelected(child)\"\n [pTooltip]=\"sidebarOpen() ? '' : child.label\"\n tooltipPosition=\"right\"\n (click)=\"selectMenu(child)\"\n >\n <i [class]=\"child.icon ?? 'pi pi-circle'\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ child.label }}</span>\n </button>\n }\n }\n }\n }\n </nav>\n </aside>\n\n <main class=\"content\">\n <div class=\"measure\">\n <ng-content select=\"[nucleusTop]\" />\n\n @if (crumbs().length || title() || pageActions()) {\n <header class=\"page-head\">\n <div class=\"page-head-main\">\n @if (crumbs().length) {\n <p-breadcrumb [model]=\"crumbs()\" [home]=\"home()\" styleClass=\"ns-crumbs\" />\n }\n\n @if (title()) {\n <h1>{{ title() }}</h1>\n }\n </div>\n\n @if (pageActions(); as actions) {\n <div class=\"page-head-actions\">\n <ng-container [ngTemplateOutlet]=\"actions\" />\n </div>\n }\n </header>\n }\n\n <ng-content />\n </div>\n </main>\n</div>\n\n<p-drawer\n [visible]=\"settingsOpen()\"\n (visibleChange)=\"settingsOpen.set($event)\"\n position=\"right\"\n [header]=\"t.settingsTitle\"\n [modal]=\"false\"\n [blockScroll]=\"false\"\n styleClass=\"ns-settings-drawer\"\n [style]=\"{ width: '380px' }\"\n>\n <nucleus-appearance />\n</p-drawer>\n\n<p-toast position=\"bottom-right\" styleClass=\"ns-toast\">\n <ng-template #message let-message>\n <nucleus-lordicon\n [src]=\"message.severity === 'success' ? icons.check : icons.warning\"\n [tone]=\"message.severity === 'success' ? 'accent' : 'danger'\"\n [size]=\"34\"\n trigger=\"in\"\n />\n <div class=\"toast-text\">\n <p class=\"toast-summary\">{{ message.summary }}</p>\n @if (message.detail) {\n <p class=\"toast-detail\">{{ message.detail }}</p>\n }\n </div>\n </ng-template>\n</p-toast>\n\n<p-confirmdialog [style]=\"{ width: '420px' }\">\n <ng-template #headless let-message let-onAccept=\"onAccept\" let-onReject=\"onReject\">\n <div class=\"confirm\">\n <nucleus-lordicon\n [src]=\"message.icon\"\n [tone]=\"message.acceptButtonStyleClass ? 'danger' : 'accent'\"\n [size]=\"64\"\n trigger=\"loop\"\n />\n <h2>{{ message.header }}</h2>\n <p>{{ message.message }}</p>\n <div class=\"confirm-actions\">\n <p-button\n [label]=\"message.rejectLabel\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onReject()\"\n />\n <p-button\n [label]=\"message.acceptLabel\"\n [severity]=\"message.acceptButtonStyleClass ? 'danger' : 'primary'\"\n (onClick)=\"onAccept()\"\n />\n </div>\n </div>\n </ng-template>\n</p-confirmdialog>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["STORAGE_KEY","readStored","i1.NucleusEnterAdvance","i3","i1","i2","i4","i7","i5","i6","i9","i10","i11","i12"],"mappings":"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"}
1
+ {"version":3,"file":"nucleus-suite-pe-core.mjs","sources":["../../../projects/core/src/lib/config/nucleus-config.ts","../../../projects/core/src/lib/config/nucleus-home.ts","../../../projects/core/src/lib/auth/nucleus-auth.ts","../../../projects/core/src/lib/auth/auth.context.ts","../../../projects/core/src/lib/auth/session-auth.service.ts","../../../projects/core/src/lib/auth/auth.interceptor.ts","../../../projects/core/src/lib/auth/logout.ts","../../../projects/core/src/lib/auth/user-sync.service.ts","../../../projects/core/src/lib/i18n/nucleus-language.ts","../../../projects/core/src/lib/api/permissions.ts","../../../projects/core/src/lib/i18n/common.copy.ts","../../../projects/core/src/lib/api/error-message.ts","../../../projects/core/src/lib/api/session.service.ts","../../../projects/core/src/lib/api/access.guard.ts","../../../projects/core/src/lib/api/nucleus-cache.ts","../../../projects/core/src/lib/format/nucleus-format.ts","../../../projects/core/src/lib/format/nucleus-compact.ts","../../../projects/core/src/lib/a11y/focus.ts","../../../projects/core/src/lib/a11y/shortcut.models.ts","../../../projects/core/src/lib/a11y/nucleus-shortcuts.ts","../../../projects/core/src/lib/a11y/nucleus-shortcut.ts","../../../projects/core/src/lib/a11y/nucleus-enter-advance.ts","../../../projects/core/src/lib/geo/geo.models.ts","../../../projects/core/src/lib/geo/geo.copy.ts","../../../projects/core/src/lib/geo/nucleus-geo.ts","../../../projects/core/src/lib/geo/nucleus-geo-select.ts","../../../projects/core/src/lib/theme/contrast.ts","../../../projects/core/src/lib/theme/theme.ts","../../../projects/core/src/lib/theme/theme.copy.ts","../../../projects/core/src/lib/theme/theme.service.ts","../../../projects/core/src/lib/theme/primeng-preset.ts","../../../projects/core/src/lib/theme/provide-theme.ts","../../../projects/core/src/lib/ui/lordicon/lordicon.ts","../../../projects/core/src/lib/ui/card/nucleus-card.ts","../../../projects/core/src/lib/ui/metric/nucleus-metrics.ts","../../../projects/core/src/lib/ui/metric/nucleus-metric.ts","../../../projects/core/src/lib/ui/tabs/nucleus-tabs.ts","../../../projects/core/src/lib/ui/page/nucleus-page.ts","../../../projects/core/src/lib/ui/page/nucleus-page-actions.ts","../../../projects/core/src/lib/ui/page/nucleus-feedback.ts","../../../projects/core/src/lib/ui/form/form.models.ts","../../../projects/core/src/lib/ui/form/icon-catalog.ts","../../../projects/core/src/lib/ui/form/nucleus-icon-picker.ts","../../../projects/core/src/lib/ui/form/nucleus-color-picker.ts","../../../projects/core/src/lib/ui/form/nucleus-form.ts","../../../projects/core/src/lib/ui/form/nucleus-form.html","../../../projects/core/src/lib/ui/link/nucleus-link.ts","../../../projects/core/src/lib/ui/link/nucleus-link.html","../../../projects/core/src/lib/ui/list/nucleus-cell.ts","../../../projects/core/src/lib/ui/menu/menu.models.ts","../../../projects/core/src/lib/ui/viewport/nucleus-viewport.ts","../../../projects/core/src/lib/ui/list/nucleus-list.ts","../../../projects/core/src/lib/ui/list/nucleus-list.html","../../../projects/core/src/lib/ui/tree/tree-rows.ts","../../../projects/core/src/lib/ui/nucleus-mark/nucleus-mark.ts","../../../projects/core/src/lib/ui/appearance/nucleus-appearance.ts","../../../projects/core/src/lib/ui/appearance/nucleus-appearance.html","../../../projects/core/src/lib/ui/menu/nucleus-menu.ts","../../../projects/core/src/lib/ui/menu/nucleus-menu.html","../../../projects/core/src/lib/ui/menu/recent-apps.service.ts","../../../projects/core/src/lib/ui/starfield/starfield.ts","../../../projects/core/src/lib/ui/shell/shell.copy.ts","../../../projects/core/src/lib/ui/shell/nucleus-shell.ts","../../../projects/core/src/lib/ui/shell/nucleus-shell.html","../../../projects/core/src/nucleus-suite-pe-core.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nexport interface NucleusConfig {\n readonly appId: string;\n readonly securityApiUrl: string;\n readonly appApiUrl: string | null;\n readonly landingUrl: string | null;\n}\n\nexport const NUCLEUS_CONFIG = new InjectionToken<NucleusConfig>('NUCLEUS_CONFIG');\n\nconst CONFIG_URL = 'config.json';\n\nexport function provideNucleus(config: NucleusConfig): EnvironmentProviders {\n return makeEnvironmentProviders([{ provide: NUCLEUS_CONFIG, useValue: normalize(config) }]);\n}\n\nexport async function loadNucleusConfig(url = CONFIG_URL): Promise<NucleusConfig> {\n const response = await fetch(url, { cache: 'no-store' });\n\n if (!response.ok) {\n throw new Error(`No se pudo cargar ${url}: HTTP ${response.status}`);\n }\n\n return normalize((await response.json()) as NucleusConfig);\n}\n\nexport function isNucleusConfigured(config: NucleusConfig): boolean {\n return config.securityApiUrl.length > 0 && config.appId.length > 0;\n}\n\nexport function ownsUrl(config: NucleusConfig, url: string): boolean {\n if (config.securityApiUrl.length > 0 && url.startsWith(config.securityApiUrl)) {\n return true;\n }\n\n return config.appApiUrl !== null && config.appApiUrl.length > 0 && url.startsWith(config.appApiUrl);\n}\n\nfunction normalize(config: NucleusConfig): NucleusConfig {\n return {\n appId: (config.appId ?? '').trim().toLowerCase(),\n securityApiUrl: trimSlash(config.securityApiUrl),\n appApiUrl: config.appApiUrl ? trimSlash(config.appApiUrl) : null,\n landingUrl: config.landingUrl ? trimSlash(config.landingUrl) : null,\n };\n}\n\nfunction trimSlash(value: string | null | undefined): string {\n return (value ?? '').trim().replace(/\\/+$/, '');\n}\n","import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core';\n\nexport const NUCLEUS_HOME = new InjectionToken<string>('NUCLEUS_HOME', {\n providedIn: 'root',\n factory: () => '/',\n});\n\nexport function normalizeHomeRoute(route: string): string {\n const trimmed = (route ?? '').trim().replace(/\\/+$/, '');\n\n if (!trimmed) return '/';\n\n return trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n}\n\nexport function provideNucleusHome(route: string): EnvironmentProviders {\n return makeEnvironmentProviders([\n { provide: NUCLEUS_HOME, useValue: normalizeHomeRoute(route) },\n ]);\n}\n\nexport function routePath(url: string): string {\n const path = (url ?? '').replace(/[?#].*$/, '').replace(/\\/+$/, '');\n\n return path.length ? path : '/';\n}\n\nexport function isHomeRoute(home: string, url: string): boolean {\n return routePath(url) === normalizeHomeRoute(home);\n}\n","import { Signal } from '@angular/core';\n\nexport interface NucleusIdentity {\n readonly uid: string;\n readonly provider: string;\n readonly providerUserId: string;\n readonly email: string | null;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n}\n\nexport abstract class NucleusAuth {\n abstract readonly user: Signal<NucleusIdentity | null>;\n\n abstract idToken(): Promise<string | null>;\n\n signOut?(): Promise<void>;\n\n switchAccount?(): Promise<void>;\n}\n","import { HttpContextToken } from '@angular/common/http';\n\nexport const NUCLEUS_FORCE_BEARER = new HttpContextToken<boolean>(() => false);\n\nexport const NUCLEUS_SKIP_AUTH = new HttpContextToken<boolean>(() => false);\n","import { HttpClient, HttpContext } from '@angular/common/http';\nimport { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { NUCLEUS_FORCE_BEARER, NUCLEUS_SKIP_AUTH } from './auth.context';\nimport { NucleusAuth } from './nucleus-auth';\n\nconst SESSION_PATH = '/auth/session';\n\nconst LOGOUT_PATH = '/auth/logout';\n\nexport interface SessionTicket {\n readonly userId: string;\n readonly expiresAtUtc: string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusSessionAuth {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n private readonly injector = inject(Injector);\n\n private readonly _ticket = signal<SessionTicket | null>(null);\n private readonly _failed = signal(false);\n private readonly _usable = signal(true);\n\n private pending: Promise<boolean> | null = null;\n\n readonly ticket = this._ticket.asReadonly();\n\n readonly failed = this._failed.asReadonly();\n\n readonly established = computed(() => this._usable() && this._ticket() !== null);\n\n readonly usable = this._usable.asReadonly();\n\n disable(): void {\n this._usable.set(false);\n this._ticket.set(null);\n }\n\n establish(force = false): Promise<boolean> {\n if (!this._usable()) return Promise.resolve(false);\n if (!force && this._ticket() !== null) return Promise.resolve(true);\n\n this.pending ??= this.request().finally(() => {\n this.pending = null;\n });\n\n return this.pending;\n }\n\n async clear(): Promise<void> {\n this._ticket.set(null);\n this._failed.set(false);\n this._usable.set(true);\n\n if (!isNucleusConfigured(this.config)) return;\n\n try {\n await firstValueFrom(\n this.http.post(\n `${this.config.securityApiUrl}${LOGOUT_PATH}`,\n {},\n {\n withCredentials: true,\n context: new HttpContext().set(NUCLEUS_SKIP_AUTH, true),\n },\n ),\n );\n } catch (error) {\n console.error('[auth] no se pudo cerrar la sesión de cookie', error);\n }\n }\n\n private async request(): Promise<boolean> {\n if (!isNucleusConfigured(this.config)) return false;\n\n if (this.injector.get(NucleusAuth, null) === null) return false;\n\n try {\n const ticket = await firstValueFrom(\n this.http.post<SessionTicket>(\n `${this.config.securityApiUrl}${SESSION_PATH}`,\n {},\n {\n withCredentials: true,\n context: new HttpContext().set(NUCLEUS_FORCE_BEARER, true),\n },\n ),\n );\n\n this._ticket.set(ticket);\n this._failed.set(false);\n\n return true;\n } catch (error) {\n this._ticket.set(null);\n this._failed.set(true);\n console.error('[auth] no se pudo abrir la sesión de cookie', error);\n\n return false;\n }\n }\n}\n","import { HttpErrorResponse, HttpInterceptorFn } from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, from, switchMap, throwError } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, ownsUrl } from '../config/nucleus-config';\nimport { NUCLEUS_FORCE_BEARER, NUCLEUS_SKIP_AUTH } from './auth.context';\nimport { NucleusAuth } from './nucleus-auth';\nimport { NucleusSessionAuth } from './session-auth.service';\n\nexport const nucleusAuthInterceptor: HttpInterceptorFn = (req, next) => {\n const config = inject(NUCLEUS_CONFIG);\n\n if (!ownsUrl(config, req.url) || req.context.get(NUCLEUS_SKIP_AUTH)) {\n return next(req);\n }\n\n const session = inject(NucleusSessionAuth);\n const auth = inject(NucleusAuth, { optional: true });\n\n const request = req.clone({ withCredentials: true });\n\n const withBearer = () => {\n if (!auth) return next(request);\n\n return from(auth.idToken()).pipe(\n switchMap((token) =>\n next(token ? request.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : request),\n ),\n );\n };\n\n if (req.context.get(NUCLEUS_FORCE_BEARER) || !session.established()) {\n return withBearer();\n }\n\n return next(request).pipe(\n catchError((error: unknown) => {\n if (!(error instanceof HttpErrorResponse) || error.status !== 401) {\n return throwError(() => error);\n }\n\n return from(session.establish(true)).pipe(\n switchMap((renewed) => (renewed ? next(request) : throwError(() => error))),\n catchError((retried: unknown) => {\n if (!(retried instanceof HttpErrorResponse) || retried.status !== 401) {\n return throwError(() => retried);\n }\n\n session.disable();\n\n return withBearer();\n }),\n );\n }),\n );\n};\n","export const NUCLEUS_LOGOUT_PARAM = 'nucleus_logout';\n\nexport function nucleusLogoutUrl(landingUrl: string): string {\n const url = new URL(landingUrl, window.location.origin);\n\n url.searchParams.set(NUCLEUS_LOGOUT_PARAM, '1');\n\n return url.toString();\n}\n\nexport function consumeNucleusLogout(): boolean {\n const url = new URL(window.location.href);\n\n if (url.searchParams.get(NUCLEUS_LOGOUT_PARAM) !== '1') return false;\n\n url.searchParams.delete(NUCLEUS_LOGOUT_PARAM);\n\n window.history.replaceState({}, '', url.toString());\n\n return true;\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { NucleusIdentity } from './nucleus-auth';\n\nconst AUTH_SYNC_PATH = '/auth/sync';\n\nexport interface AuthSyncRequest {\n readonly provider: string;\n readonly providerUserId: string;\n readonly email: string | null;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n}\n\nexport interface AppUser {\n readonly userId: string;\n readonly displayName: string | null;\n readonly photoUrl: string | null;\n readonly createdAt: string;\n readonly isNew: boolean;\n readonly profileCompleted: boolean;\n readonly hasCompanies: boolean;\n readonly isPlatformAdmin: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class UserSyncService {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n readonly appUser = signal<AppUser | null>(null);\n\n readonly failed = signal(false);\n\n async sync(session: NucleusIdentity, idToken: () => Promise<string | null>): Promise<void> {\n if (!isNucleusConfigured(this.config)) {\n console.info('[auth] sincronización omitida: securityApiUrl o appId vacíos en config.json');\n return;\n }\n\n const token = await idToken();\n\n if (!token) {\n this.failed.set(true);\n console.error('[auth] no hay ID token con el que autenticar la sincronización');\n return;\n }\n\n const body: AuthSyncRequest = {\n provider: session.provider,\n providerUserId: session.providerUserId,\n email: session.email,\n displayName: session.displayName,\n photoUrl: session.photoUrl,\n };\n\n try {\n const user = await firstValueFrom(\n this.http.post<AppUser>(`${this.config.securityApiUrl}${AUTH_SYNC_PATH}`, body),\n );\n\n this.appUser.set(user);\n this.failed.set(false);\n } catch (error) {\n this.failed.set(true);\n console.error('[auth] no se pudo sincronizar el usuario con el backend', error);\n }\n }\n}\n","import { Injectable, effect, signal } from '@angular/core';\n\nexport type NucleusLang = 'es' | 'en';\n\nexport const NUCLEUS_LANGS: readonly NucleusLang[] = ['es', 'en'];\n\nconst STORAGE_KEY = 'nucleus_lang';\n\nfunction isLang(value: unknown): value is NucleusLang {\n return value === 'es' || value === 'en';\n}\n\nfunction readStored(): NucleusLang {\n try {\n const stored = localStorage.getItem(STORAGE_KEY);\n if (isLang(stored)) return stored;\n } catch {}\n\n return 'es';\n}\n\nlet current: NucleusLang = readStored();\n\nexport function nucleusLang(): NucleusLang {\n return current;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusLanguage {\n private readonly _lang = signal<NucleusLang>(readStored());\n\n readonly lang = this._lang.asReadonly();\n\n constructor() {\n effect(() => {\n const lang = this._lang();\n\n current = lang;\n document.documentElement.lang = lang;\n\n try {\n localStorage.setItem(STORAGE_KEY, lang);\n } catch {}\n });\n }\n\n setLang(lang: NucleusLang): void {\n this._lang.set(lang);\n }\n}\n","import { MenuNode } from './api.models';\n\nexport interface MenuPermissions {\n readonly canView: boolean;\n readonly canInsert: boolean;\n readonly canEdit: boolean;\n readonly canDelete: boolean;\n readonly canExport: boolean;\n}\n\nexport const NO_PERMISSIONS: MenuPermissions = {\n canView: false,\n canInsert: false,\n canEdit: false,\n canDelete: false,\n canExport: false,\n};\n\nexport function findMenuByRoute(nodes: readonly MenuNode[], route: string): MenuNode | null {\n for (const node of nodes) {\n if (node.route && route.startsWith(node.route)) return node;\n\n const child = findMenuByRoute(node.children, route);\n\n if (child) return child;\n }\n\n return null;\n}\n\nexport function isUnderRoute(url: string, route: string): boolean {\n return url === route || url.startsWith(`${route}/`);\n}\n\nexport function matchMenuByRoute(nodes: readonly MenuNode[], url: string): MenuNode | null {\n let best: MenuNode | null = null;\n\n for (const node of nodes) {\n if (node.route && isUnderRoute(url, node.route)) {\n if (!best || node.route.length > (best.route ?? '').length) best = node;\n }\n\n const child = matchMenuByRoute(node.children, url);\n\n if (child && (!best || (child.route ?? '').length > (best.route ?? '').length)) best = child;\n }\n\n return best;\n}\n\nexport function permissionsOf(node: MenuNode | null): MenuPermissions {\n if (!node) return NO_PERMISSIONS;\n\n return {\n canView: node.canView,\n canInsert: node.canInsert,\n canEdit: node.canEdit,\n canDelete: node.canDelete,\n canExport: node.canExport,\n };\n}\n","export interface CommonCopy {\n readonly search: string;\n readonly choose: string;\n readonly noIcon: string;\n readonly noColor: string;\n readonly searchIcon: string;\n readonly noMatches: string;\n readonly reorderHandle: string;\n readonly noResults: string;\n readonly viewGrid: string;\n readonly viewRows: string;\n readonly sessionExpired: string;\n readonly errorNetwork: string;\n readonly errorTimeout: string;\n readonly errorServer: string;\n readonly errorInvalid: string;\n readonly errorForbidden: string;\n readonly errorNotFound: string;\n readonly errorConflict: string;\n readonly errorUnknown: string;\n}\n\nexport interface CommonCopySet {\n readonly es: CommonCopy;\n readonly en: CommonCopy;\n}\n\nexport const COMMON_COPY: CommonCopySet = {\n es: {\n search: 'Buscar',\n choose: 'Selecciona',\n noIcon: 'Sin icono',\n noColor: 'Sin color',\n searchIcon: 'Busca un icono',\n noMatches: 'Ningún icono coincide',\n reorderHandle: 'Arrastra para cambiar el orden',\n noResults: 'Ningún registro coincide con la búsqueda',\n viewGrid: 'Vista en mosaico',\n viewRows: 'Vista en filas',\n sessionExpired: 'Tu sesión expiró. Vuelve a iniciar sesión.',\n errorNetwork:\n 'No se pudo conectar con el servidor. Revisa tu conexión o inténtalo en unos minutos.',\n errorTimeout: 'El servidor tardó demasiado en responder. Inténtalo de nuevo.',\n errorServer:\n 'Algo falló en el servidor y no pudimos completar la operación. Inténtalo de nuevo en unos ' +\n 'minutos; si sigue pasando, avísale al equipo.',\n errorInvalid: 'Revisa los datos: hay algo que no es válido.',\n errorForbidden: 'No tienes permiso para hacer esto.',\n errorNotFound: 'No encontramos lo que buscabas. Puede que ya no exista.',\n errorConflict: 'Ese cambio choca con algo que ya existe.',\n errorUnknown: 'No se pudo completar la operación. Inténtalo de nuevo.',\n },\n en: {\n search: 'Search',\n choose: 'Select',\n noIcon: 'No icon',\n noColor: 'No colour',\n searchIcon: 'Search an icon',\n noMatches: 'No icon matches',\n reorderHandle: 'Drag to reorder',\n noResults: 'No records match your search',\n viewGrid: 'Tile view',\n viewRows: 'Row view',\n sessionExpired: 'Your session expired. Sign in again.',\n errorNetwork: 'Could not reach the server. Check your connection or try again in a moment.',\n errorTimeout: 'The server took too long to answer. Try again.',\n errorServer:\n 'Something broke on the server and we could not finish. Try again in a few minutes; if it ' +\n 'keeps happening, tell the team.',\n errorInvalid: 'Check the data: something is not valid.',\n errorForbidden: 'You do not have permission to do this.',\n errorNotFound: 'We could not find that. It may no longer exist.',\n errorConflict: 'That change clashes with something that already exists.',\n errorUnknown: 'We could not finish the operation. Try again.',\n },\n};\n\nexport function commonCopyOf(lang: string): CommonCopy {\n return lang === 'en' ? COMMON_COPY.en : COMMON_COPY.es;\n}\n","import { HttpErrorResponse } from '@angular/common/http';\n\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { nucleusLang } from '../i18n/nucleus-language';\n\ninterface ProblemDetails {\n readonly detail?: string;\n readonly title?: string;\n readonly errors?: Record<string, string[]>;\n}\n\nconst SPOKEN: readonly number[] = [400, 402, 403, 404, 409, 422];\n\nfunction problemOf(error: HttpErrorResponse): ProblemDetails | null {\n const body = error.error;\n\n return body !== null && typeof body === 'object' ? (body as ProblemDetails) : null;\n}\n\nfunction fieldErrorsOf(problem: ProblemDetails | null): string {\n const groups = problem?.errors;\n\n if (!groups) return '';\n\n return Object.values(groups)\n .flat()\n .map((message) => message.trim())\n .filter(Boolean)\n .join(' ');\n}\n\nexport function nucleusErrorMessage(error: unknown, lang?: string): string {\n const copy = commonCopyOf(lang ?? nucleusLang());\n\n if (!(error instanceof HttpErrorResponse)) return copy.errorUnknown;\n\n const status = error.status;\n\n if (status === 0) return copy.errorNetwork;\n if (status === 401) return copy.sessionExpired;\n if (status === 408 || status === 504) return copy.errorTimeout;\n\n if (SPOKEN.includes(status)) {\n const problem = problemOf(error);\n const fields = fieldErrorsOf(problem);\n\n if (fields) return fields;\n\n const detail = problem?.detail?.trim() || problem?.title?.trim();\n\n if (detail) return detail;\n }\n\n if (status === 400 || status === 422) return copy.errorInvalid;\n if (status === 403) return copy.errorForbidden;\n if (status === 404) return copy.errorNotFound;\n if (status === 409) return copy.errorConflict;\n if (status >= 500) return copy.errorServer;\n\n return copy.errorUnknown;\n}\n","import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, computed, inject, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NucleusAuth } from '../auth/nucleus-auth';\nimport { nucleusLogoutUrl } from '../auth/logout';\nimport { NucleusSessionAuth } from '../auth/session-auth.service';\nimport { UserSyncService } from '../auth/user-sync.service';\nimport { NUCLEUS_CONFIG, isNucleusConfigured } from '../config/nucleus-config';\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { nucleusErrorMessage } from './error-message';\nimport { MenuPermissions, findMenuByRoute, permissionsOf } from './permissions';\nimport {\n AccessScope,\n AppSummary,\n CompanyOption,\n CompanySummary,\n LauncherApp,\n MeResponse,\n MenuNode,\n Site,\n SiteAccess,\n UserProfile,\n} from './api.models';\n\n@Injectable({ providedIn: 'root' })\nexport class SessionService {\n private readonly http = inject(HttpClient);\n private readonly auth = inject(NucleusAuth, { optional: true });\n private readonly userSync = inject(UserSyncService);\n private readonly sessionAuth = inject(NucleusSessionAuth);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n private readonly _me = signal<MeResponse | null>(null);\n private readonly _menu = signal<readonly MenuNode[]>([]);\n private readonly _access = signal<SiteAccess | null>(null);\n private readonly _globalRole = signal<string | null>(null);\n private readonly _scope = signal<AccessScope | null>(null);\n private readonly _apps = signal<readonly LauncherApp[]>([]);\n private readonly _catalog = signal<readonly AppSummary[]>([]);\n private readonly _siteId = signal<string | null>(null);\n private readonly _loading = signal(false);\n private readonly _switching = signal(false);\n private readonly _error = signal<string | null>(null);\n\n private inFlight = false;\n private current: Promise<void> | null = null;\n private loadedKey: string | null = null;\n private language = 'es';\n\n readonly me = this._me.asReadonly();\n\n readonly menu = this._menu.asReadonly();\n\n readonly access = this._access.asReadonly();\n\n readonly scope = this._scope.asReadonly();\n\n readonly apps = this._apps.asReadonly();\n\n readonly catalog = this._catalog.asReadonly();\n\n readonly currentApp = computed<AppSummary | null>(\n () => this._catalog().find((app) => app.id.toLowerCase() === this.config.appId) ?? null,\n );\n\n readonly siteId = this._siteId.asReadonly();\n\n readonly loading = this._loading.asReadonly();\n\n readonly switching = this._switching.asReadonly();\n\n readonly error = this._error.asReadonly();\n\n readonly roleName = computed(() => this._access()?.roleName ?? this._globalRole());\n\n readonly siteName = computed(() => this._access()?.siteName ?? null);\n\n readonly companies = computed<readonly CompanySummary[]>(() => {\n const me = this._me();\n if (!me) return [];\n return [...me.ownedCompanies, ...me.sharedCompanies];\n });\n\n readonly companyOptions = computed<readonly CompanyOption[]>(() => {\n const me = this._me();\n if (!me) return [];\n\n return [\n ...me.ownedCompanies\n .filter((company) => company.isActive)\n .map((company) => toOption(company, 'owner' as const)),\n ...me.sharedCompanies\n .filter((company) => company.isActive)\n .map((company) => toOption(company, 'collaborator' as const)),\n ];\n });\n\n readonly companyId = computed(() => {\n const siteId = this._siteId();\n if (!siteId) return this._me()?.profile.lastCompanyId ?? null;\n\n const owner = this.companies().find((company) =>\n company.myAccess.some((entry) => entry.siteId === siteId),\n );\n\n return owner?.id ?? this._me()?.profile.lastCompanyId ?? null;\n });\n\n readonly companyName = computed(() => {\n const id = this.companyId();\n if (!id) return null;\n\n return this.companyOptions().find((company) => company.id === id)?.name ?? null;\n });\n\n load(language: string, force = false): Promise<void> {\n if (this.inFlight && this.current) return this.current;\n\n const task = this.run(language, force);\n\n this.current = task;\n\n return task;\n }\n\n ready(): Promise<void> {\n return this.current ?? Promise.resolve();\n }\n\n private async run(language: string, force: boolean): Promise<void> {\n if (!isNucleusConfigured(this.config)) return;\n\n const identity = this.auth?.user() ?? null;\n\n if (this.auth && !identity) return;\n\n const key = `${identity?.uid ?? 'cookie'}|${language}`;\n\n if (this.inFlight) return;\n if (!force && this.loadedKey === key) return;\n\n this.inFlight = true;\n this.loadedKey = key;\n this.language = language;\n\n this._loading.set(true);\n this._error.set(null);\n\n try {\n if (identity && this.auth) {\n await this.userSync.sync(identity, () => this.auth!.idToken());\n await this.sessionAuth.establish(force);\n }\n\n const [me, catalog] = await Promise.all([\n firstValueFrom(this.http.get<MeResponse>(`${this.config.securityApiUrl}/me`)),\n firstValueFrom(this.http.get<AppSummary[]>(`${this.config.securityApiUrl}/apps`)),\n ]);\n\n this._me.set(me);\n this._catalog.set([...catalog].sort((a, b) => a.sortOrder - b.sortOrder));\n this._apps.set(this.buildLauncher(catalog));\n\n await this.resolveMenu(me, language);\n } catch (error) {\n this._menu.set([]);\n\n if (isSessionRejected(error)) {\n await this.signOutToLanding();\n\n return;\n }\n\n this._error.set(nucleusErrorMessage(error, this.language));\n console.error('[session] no se pudo cargar la sesión del backend', error);\n } finally {\n this.inFlight = false;\n this._loading.set(false);\n }\n }\n\n async signOutToLanding(): Promise<void> {\n const landing = this.config.landingUrl;\n\n this.loadedKey = null;\n this._me.set(null);\n this._access.set(null);\n this._globalRole.set(null);\n this._apps.set([]);\n this._catalog.set([]);\n\n if (!landing) {\n this._error.set(commonCopyOf(this.language).sessionExpired);\n\n return;\n }\n\n await this.sessionAuth.clear();\n await this.auth?.signOut?.();\n\n window.location.href = nucleusLogoutUrl(landing);\n }\n\n permissionsFor(route: string): MenuPermissions {\n return permissionsOf(findMenuByRoute(this._menu(), route));\n }\n\n reload(language: string): Promise<void> {\n return this.load(language, true);\n }\n\n sites(companyId: string): Promise<Site[]> {\n return firstValueFrom(\n this.http.get<Site[]>(`${this.config.securityApiUrl}/companies/${companyId}/sites`),\n );\n }\n\n async accessibleSites(companyId: string): Promise<Site[]> {\n const company = this.companies().find((entry) => entry.id === companyId);\n const all = (await this.sites(companyId)).filter((site) => site.isActive);\n\n if (!company || company.isOwner) return all;\n\n const granted = new Set(company.myAccess.map((entry) => entry.siteId));\n\n return all.filter((site) => granted.has(site.id));\n }\n\n async switchContext(companyId: string, siteId: string): Promise<void> {\n if (this._switching()) return;\n\n this._switching.set(true);\n this._error.set(null);\n\n try {\n const profile = await firstValueFrom(\n this.http.put<UserProfile>(`${this.config.securityApiUrl}/me/context`, {\n companyId,\n siteId,\n }),\n );\n\n const me = this._me();\n\n if (me) {\n const updated: MeResponse = { ...me, profile };\n this._me.set(updated);\n this._siteId.set(siteId);\n await this.resolveMenu(updated, this.language, siteId);\n }\n } catch (error) {\n if (isSessionRejected(error)) {\n await this.signOutToLanding();\n\n return;\n }\n\n this._error.set(nucleusErrorMessage(error, this.language));\n console.error('[session] no se pudo cambiar de sede', error);\n } finally {\n this._switching.set(false);\n }\n }\n\n private async resolveMenu(me: MeResponse, language: string, preferred?: string): Promise<void> {\n const entries = [...me.ownedCompanies, ...me.sharedCompanies]\n .flatMap((company) => company.myAccess)\n .filter((entry) => entry.appId.toLowerCase() === this.config.appId);\n\n const wanted = preferred ?? me.profile.lastSiteId ?? null;\n\n const access = entries.find((entry) => entry.siteId === wanted) ?? entries[0] ?? null;\n\n if (access) {\n this._access.set(access);\n this._globalRole.set(null);\n this._siteId.set(access.siteId);\n this._scope.set('site');\n this._menu.set(await this.siteMenu(access.siteId, language));\n return;\n }\n\n const global = (me.globalAccess ?? []).find(\n (entry) => entry.appId.toLowerCase() === this.config.appId,\n );\n\n this._access.set(null);\n this._globalRole.set(global?.roleName ?? null);\n this._siteId.set(wanted);\n this._scope.set('account');\n this._menu.set(await this.accountMenu(language));\n }\n\n private buildLauncher(catalog: readonly AppSummary[]): LauncherApp[] {\n return catalog\n .filter((app) => app.id.toLowerCase() !== this.config.appId)\n .slice()\n .sort((a, b) => a.sortOrder - b.sortOrder);\n }\n\n private siteMenu(siteId: string, language: string): Promise<MenuNode[]> {\n return firstValueFrom(\n this.http.get<MenuNode[]>(\n `${this.config.securityApiUrl}/sites/${siteId}/apps/${this.config.appId}/menu`,\n { params: { language } },\n ),\n );\n }\n\n private accountMenu(language: string): Promise<MenuNode[]> {\n return firstValueFrom(\n this.http.get<MenuNode[]>(`${this.config.securityApiUrl}/me/menu`, {\n params: { appId: this.config.appId, language },\n }),\n );\n }\n}\n\nfunction toOption(company: CompanySummary, relation: 'owner' | 'collaborator'): CompanyOption {\n return {\n id: company.id,\n name: company.tradeName ?? company.legalName,\n relation,\n };\n}\n\nfunction isSessionRejected(error: unknown): boolean {\n return error instanceof HttpErrorResponse && (error.status === 401 || error.status === 403);\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\n\nimport { NUCLEUS_HOME, isHomeRoute, normalizeHomeRoute, routePath } from '../config/nucleus-home';\nimport { NucleusLanguage } from '../i18n/nucleus-language';\nimport { matchMenuByRoute } from './permissions';\nimport { SessionService } from './session.service';\n\nexport const nucleusAccessGuard: CanActivateFn = async (\n _route,\n state,\n): Promise<boolean | UrlTree> => {\n const session = inject(SessionService);\n const language = inject(NucleusLanguage);\n const router = inject(Router);\n const home = normalizeHomeRoute(inject(NUCLEUS_HOME));\n\n const url = routePath(state.url);\n\n if (isHomeRoute(home, url)) return true;\n\n await session.load(language.lang());\n\n const node = matchMenuByRoute(session.menu(), url);\n\n if (node && node.route !== home && node.canView) return true;\n\n return router.parseUrl(home);\n};\n","import { Injectable } from '@angular/core';\n\ninterface CacheEntry {\n readonly at: number;\n readonly value: unknown;\n}\n\nconst DEFAULT_TTL_MS = 30_000;\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusCache {\n private readonly entries = new Map<string, CacheEntry>();\n\n private readonly inFlight = new Map<string, Promise<unknown>>();\n\n read<T>(key: string, loader: () => Promise<T>, ttlMs = DEFAULT_TTL_MS): Promise<T> {\n const entry = this.entries.get(key);\n\n if (entry && Date.now() - entry.at < ttlMs) {\n return Promise.resolve(entry.value as T);\n }\n\n return this.load(key, loader);\n }\n\n prefetch<T>(key: string, loader: () => Promise<T>, ttlMs = DEFAULT_TTL_MS): void {\n const entry = this.entries.get(key);\n\n if (entry && Date.now() - entry.at < ttlMs) return;\n if (this.inFlight.has(key)) return;\n\n void this.load(key, loader).catch(() => undefined);\n }\n\n invalidate(...prefixes: readonly string[]): void {\n if (prefixes.length === 0) {\n this.entries.clear();\n\n return;\n }\n\n for (const key of [...this.entries.keys()]) {\n if (prefixes.some((prefix) => key.startsWith(prefix))) this.entries.delete(key);\n }\n }\n\n private load<T>(key: string, loader: () => Promise<T>): Promise<T> {\n const running = this.inFlight.get(key) as Promise<T> | undefined;\n\n if (running) return running;\n\n const promise = loader()\n .then((value) => {\n this.entries.set(key, { at: Date.now(), value });\n\n return value;\n })\n .finally(() => {\n this.inFlight.delete(key);\n });\n\n this.inFlight.set(key, promise);\n\n return promise;\n }\n}\n","import { NucleusLang, nucleusLang } from '../i18n/nucleus-language';\n\nconst DATE_LOCALES: Record<NucleusLang, string> = {\n es: 'es-PE',\n en: 'en-US',\n};\n\nconst NUMBER_LOCALE = 'es-PE';\n\nconst DAY_MS = 86400000;\n\nconst DATE_ONLY = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst MONEY = new Intl.NumberFormat(NUMBER_LOCALE, {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n});\n\nconst QTY = new Intl.NumberFormat(NUMBER_LOCALE, { maximumFractionDigits: 4 });\n\nconst INTEGER = new Intl.NumberFormat(NUMBER_LOCALE, { maximumFractionDigits: 0 });\n\nconst dates = new Map<string, Intl.DateTimeFormat>();\n\nfunction formatter(kind: 'date' | 'stamp' | 'clock'): Intl.DateTimeFormat {\n const locale = DATE_LOCALES[nucleusLang()];\n const key = `${kind}:${locale}`;\n const cached = dates.get(key);\n\n if (cached) return cached;\n\n const options: Intl.DateTimeFormatOptions =\n kind === 'date'\n ? { day: '2-digit', month: 'short', year: 'numeric' }\n : kind === 'stamp'\n ? { day: '2-digit', month: 'short', year: 'numeric', hour: '2-digit', minute: '2-digit' }\n : { hour: '2-digit', minute: '2-digit' };\n\n const built = new Intl.DateTimeFormat(locale, options);\n\n dates.set(key, built);\n\n return built;\n}\n\nexport function nucleusParseDate(value: string | null | undefined): Date | null {\n if (!value) return null;\n\n if (DATE_ONLY.test(value)) {\n const [year, month, day] = value.split('-').map(Number);\n\n return new Date(year, month - 1, day);\n }\n\n const parsed = new Date(value);\n\n return Number.isNaN(parsed.valueOf()) ? null : parsed;\n}\n\nexport function money(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : MONEY.format(value);\n}\n\nexport function signedMoney(value: number | null | undefined): string {\n if (value === null || value === undefined) return '';\n\n return value > 0 ? `+${MONEY.format(value)}` : MONEY.format(value);\n}\n\nexport function qty(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : QTY.format(value);\n}\n\nexport function integer(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : INTEGER.format(value);\n}\n\nexport function percent(value: number | null | undefined): string {\n return value === null || value === undefined ? '' : `${MONEY.format(value)}%`;\n}\n\nexport function day(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('date').format(parsed) : '';\n}\n\nexport function stamp(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('stamp').format(parsed) : '';\n}\n\nexport function clock(value: string | null | undefined): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? formatter('clock').format(parsed) : '';\n}\n\nexport function minutesAsClock(value: number | null | undefined): string {\n if (value === null || value === undefined) return '';\n\n const total = Math.max(Math.trunc(value), 0);\n const hours = Math.trunc(total / 60);\n const minutes = total % 60;\n\n return `${String(hours).padStart(2, '0')}:${String(minutes).padStart(2, '0')}`;\n}\n\nexport function isoDay(value: Date | string | null | undefined): string {\n const parsed = typeof value === 'string' || value === null || value === undefined\n ? nucleusParseDate(value)\n : value;\n\n if (!parsed) return '';\n\n const year = parsed.getFullYear();\n const month = String(parsed.getMonth() + 1).padStart(2, '0');\n const date = String(parsed.getDate()).padStart(2, '0');\n\n return `${year}-${month}-${date}`;\n}\n\nexport function toNumber(value: unknown): number {\n const parsed = typeof value === 'number' ? value : Number(value);\n\n return Number.isFinite(parsed) ? parsed : 0;\n}\n\nexport function shiftDay(value: string, days: number): string {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(new Date(parsed.valueOf() + days * DAY_MS)) : '';\n}\n\nexport function isToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) === isoDay(new Date()) : false;\n}\n\nexport function isBeforeToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) < isoDay(new Date()) : false;\n}\n\nexport function isOnOrBeforeToday(value: string | null | undefined): boolean {\n const parsed = nucleusParseDate(value);\n\n return parsed ? isoDay(parsed) <= isoDay(new Date()) : false;\n}\n\nexport function startOfDayUtc(value: string): string {\n return `${isoDay(nucleusParseDate(value))}T00:00:00.000Z`;\n}\n\nexport function endOfDayUtc(value: string): string {\n return `${isoDay(nucleusParseDate(value))}T23:59:59.999Z`;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { nucleusLang } from '../i18n/nucleus-language';\n\nconst COMPACT_LOCALES: Record<string, string> = { es: 'es-PE', en: 'en-US' };\n\nconst BYTE_UNITS: readonly string[] = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\nfunction trim(value: string): string {\n return value.endsWith('.0') ? value.slice(0, -2) : value;\n}\n\nexport function compactNumber(value: number): string {\n if (!Number.isFinite(value)) return '—';\n\n const abs = Math.abs(value);\n const locale = COMPACT_LOCALES[nucleusLang()] ?? 'en-US';\n\n let digits = 0;\n\n if (abs >= 1000) {\n const unit = 1000 ** Math.floor(Math.log10(abs) / 3);\n\n digits = Math.abs(value / unit) < 10 ? 1 : 0;\n }\n\n const text = new Intl.NumberFormat(locale, {\n notation: 'compact',\n compactDisplay: 'short',\n maximumFractionDigits: digits,\n }).format(value);\n\n return text.replace(/(\\d)\\s?k$/, '$1 K');\n}\n\nexport function compactBytes(value: number): string {\n if (!Number.isFinite(value) || value <= 0) return '0 B';\n\n const index = Math.min(Math.floor(Math.log(value) / Math.log(1024)), BYTE_UNITS.length - 1);\n const scaled = value / 1024 ** index;\n const digits = index === 0 ? 0 : scaled < 10 ? 1 : 0;\n\n return `${trim(scaled.toFixed(digits))} ${BYTE_UNITS[index]}`;\n}\n\nexport function compactMegabytes(value: number): string {\n return compactBytes(value * 1024 * 1024);\n}\n\nfunction toNumber(value: number | string | null | undefined): number | null {\n if (value === null || value === undefined || value === '') return null;\n\n const parsed = typeof value === 'number' ? value : Number(value);\n\n return Number.isFinite(parsed) ? parsed : null;\n}\n\n@Pipe({ name: 'nucleusCompact' })\nexport class NucleusCompact implements PipeTransform {\n transform(value: number | string | null | undefined, fallback = '—'): string {\n const parsed = toNumber(value);\n\n return parsed === null ? fallback : compactNumber(parsed);\n }\n}\n\n@Pipe({ name: 'nucleusBytes' })\nexport class NucleusBytes implements PipeTransform {\n transform(value: number | string | null | undefined, fallback = '—'): string {\n const parsed = toNumber(value);\n\n return parsed === null ? fallback : compactBytes(parsed);\n }\n}\n\n@Pipe({ name: 'nucleusMegabytes' })\nexport class NucleusMegabytes implements PipeTransform {\n transform(value: number | string | null | undefined, fallback = '—'): string {\n const parsed = toNumber(value);\n\n return parsed === null ? fallback : compactMegabytes(parsed);\n }\n}\n","export const FIELD_TARGETS = [\n 'input:not([type=\"hidden\"]):not([disabled])',\n 'textarea:not([disabled])',\n 'select:not([disabled])',\n '[role=\"combobox\"]:not([aria-disabled=\"true\"])',\n].join(',');\n\nconst TEXTUAL: readonly string[] = ['text', 'email', 'password', 'number', 'search', 'tel', 'url'];\n\nexport function isReachable(element: HTMLElement): boolean {\n return element.tabIndex >= 0 && element.offsetParent !== null;\n}\n\nexport function fieldsIn(root: HTMLElement): HTMLElement[] {\n return Array.from(root.querySelectorAll<HTMLElement>(FIELD_TARGETS)).filter(isReachable);\n}\n\nexport function moveTo(element: HTMLElement): void {\n element.focus({ preventScroll: true });\n\n if (element instanceof HTMLInputElement && TEXTUAL.includes(element.type)) {\n element.select();\n }\n}\n","export interface ShortcutBinding {\n readonly keys: string;\n readonly label: string;\n readonly whileTyping: boolean;\n readonly run: () => void;\n}\n\nconst MODIFIERS: readonly string[] = ['ctrl', 'alt', 'shift'];\n\nconst ALIASES: Readonly<Record<string, string>> = {\n cmd: 'ctrl',\n meta: 'ctrl',\n command: 'ctrl',\n control: 'ctrl',\n option: 'alt',\n esc: 'escape',\n ' ': 'space',\n};\n\nexport function normalizeKeys(keys: string): string {\n const parts = keys\n .toLowerCase()\n .split('+')\n .map((part) => part.trim())\n .filter(Boolean)\n .map((part) => ALIASES[part] ?? part);\n\n const modifiers = MODIFIERS.filter((modifier) => parts.includes(modifier));\n const rest = parts.filter((part) => !MODIFIERS.includes(part));\n\n return [...modifiers, ...rest].join('+');\n}\n\nexport function comboOf(event: KeyboardEvent): string {\n const key = event.key.toLowerCase();\n const parts: string[] = [];\n\n if (event.ctrlKey || event.metaKey) parts.push('ctrl');\n if (event.altKey) parts.push('alt');\n if (event.shiftKey && key.length > 1) parts.push('shift');\n\n parts.push(ALIASES[key] ?? key);\n\n return parts.join('+');\n}\n\nexport function hasModifier(keys: string): boolean {\n return keys.startsWith('ctrl+') || keys.startsWith('alt+');\n}\n\nexport function isTypingTarget(target: EventTarget | null): boolean {\n const element = target as HTMLElement | null;\n\n if (!element || typeof element.tagName !== 'string') return false;\n if (element.isContentEditable) return true;\n\n return ['INPUT', 'TEXTAREA', 'SELECT'].includes(element.tagName);\n}\n\nexport function isApplePlatform(): boolean {\n if (typeof navigator === 'undefined') return false;\n\n return /Mac|iPhone|iPad|iPod/.test(navigator.platform || navigator.userAgent);\n}\n\nconst DISPLAY: Readonly<Record<string, string>> = {\n escape: 'Esc',\n enter: 'Enter',\n space: 'Espacio',\n arrowup: '↑',\n arrowdown: '↓',\n arrowleft: '←',\n arrowright: '→',\n};\n\nexport function shortcutHint(keys: string): string {\n const apple = isApplePlatform();\n\n return normalizeKeys(keys)\n .split('+')\n .map((part) => {\n if (part === 'ctrl') return apple ? '⌘' : 'Ctrl';\n if (part === 'alt') return apple ? '⌥' : 'Alt';\n if (part === 'shift') return apple ? '⇧' : 'Shift';\n\n return DISPLAY[part] ?? part.toUpperCase();\n })\n .join(apple ? '' : '+');\n}\n\nconst ARIA: Readonly<Record<string, string>> = {\n ctrl: 'Control',\n alt: 'Alt',\n shift: 'Shift',\n escape: 'Escape',\n enter: 'Enter',\n space: 'Space',\n};\n\nexport function ariaKeysOf(keys: string): string {\n return normalizeKeys(keys)\n .split('+')\n .map((part) => ARIA[part] ?? part.toUpperCase())\n .join('+');\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, inject, signal } from '@angular/core';\n\nimport { ShortcutBinding, comboOf, hasModifier, isTypingTarget } from './shortcut.models';\n\nconst MODAL_SELECTOR = '.p-drawer-mask, .p-dialog-mask, .p-overlay-mask';\n\nconst STORAGE_KEY = 'nucleus_shortcuts';\n\nfunction readStored(): boolean {\n try {\n return localStorage.getItem(STORAGE_KEY) !== 'off';\n } catch {\n return true;\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusShortcuts {\n private readonly document = inject(DOCUMENT);\n\n private readonly _bindings = signal<readonly ShortcutBinding[]>([]);\n private readonly _enabled = signal(readStored());\n\n readonly bindings = this._bindings.asReadonly();\n\n readonly enabled = this._enabled.asReadonly();\n\n constructor() {\n const listener = (event: Event) => this.handle(event as KeyboardEvent);\n\n this.document.addEventListener('keydown', listener);\n\n inject(DestroyRef).onDestroy(() => this.document.removeEventListener('keydown', listener));\n }\n\n setEnabled(enabled: boolean): void {\n this._enabled.set(enabled);\n\n try {\n localStorage.setItem(STORAGE_KEY, enabled ? 'on' : 'off');\n } catch {}\n }\n\n register(binding: ShortcutBinding): () => void {\n this._bindings.update((list) => [...list, binding]);\n\n return () => this._bindings.update((list) => list.filter((entry) => entry !== binding));\n }\n\n private handle(event: KeyboardEvent): void {\n if (!this._enabled() || event.isComposing || event.repeat) return;\n\n const combo = comboOf(event);\n const typing = isTypingTarget(event.target);\n const blocked = this.document.querySelector(MODAL_SELECTOR) !== null;\n const bindings = this._bindings();\n\n for (let index = bindings.length - 1; index >= 0; index -= 1) {\n const binding = bindings[index];\n\n if (!binding || binding.keys !== combo) continue;\n if (typing && !binding.whileTyping) continue;\n if (blocked && !hasModifier(binding.keys)) continue;\n\n event.preventDefault();\n binding.run();\n\n return;\n }\n }\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\n\nimport { NucleusShortcuts } from './nucleus-shortcuts';\nimport { ariaKeysOf, hasModifier, normalizeKeys } from './shortcut.models';\n\nconst CLICKABLE = 'button, a, input';\n\n@Directive({\n selector: '[nucleusShortcut]',\n})\nexport class NucleusShortcut {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly shortcuts = inject(NucleusShortcuts);\n\n readonly nucleusShortcut = input.required<string>();\n\n readonly shortcutLabel = input('');\n\n readonly shortcutWhileTyping = input<boolean | null>(null);\n\n constructor() {\n effect((onCleanup) => {\n const keys = normalizeKeys(this.nucleusShortcut());\n const label = this.shortcutLabel();\n const whileTyping = this.shortcutWhileTyping() ?? hasModifier(keys);\n\n this.host.nativeElement.setAttribute('aria-keyshortcuts', ariaKeysOf(keys));\n\n const dispose = this.shortcuts.register({\n keys,\n label,\n whileTyping,\n run: () => this.press(),\n });\n\n onCleanup(dispose);\n });\n }\n\n private press(): void {\n const element = this.host.nativeElement;\n const target = element.matches(CLICKABLE)\n ? element\n : element.querySelector<HTMLElement>(CLICKABLE);\n\n if (!target || target.hasAttribute('disabled')) return;\n\n target.click();\n }\n}\n","import { Directive, ElementRef, inject } from '@angular/core';\n\nimport { fieldsIn, moveTo } from './focus';\n\nconst SCOPES = 'nucleus-card, form, .p-drawer-content';\n\nconst ACTIONS = '.actions button:not([disabled]), .drawer-actions button:not([disabled])';\n\n@Directive({\n selector: '[nucleusEnterAdvance]',\n host: { '(keydown)': 'onKeyDown($event)' },\n})\nexport class NucleusEnterAdvance {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n onKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Enter' || event.isComposing) return;\n if (event.ctrlKey || event.metaKey || event.altKey || event.shiftKey) return;\n\n const source = event.target as HTMLElement | null;\n\n if (!source || source.tagName === 'TEXTAREA') return;\n if (source.getAttribute('aria-expanded') === 'true') return;\n\n const scope = this.scope();\n const targets = fieldsIn(scope);\n const index = targets.indexOf(source);\n\n if (index === -1) return;\n\n event.preventDefault();\n\n const next = targets[index + 1];\n\n if (next) {\n moveTo(next);\n return;\n }\n\n scope.querySelector<HTMLElement>(ACTIONS)?.focus();\n }\n\n private scope(): HTMLElement {\n const element = this.host.nativeElement;\n\n return element.closest<HTMLElement>(SCOPES) ?? element;\n }\n}\n","export interface GeoCountry {\n readonly id: string;\n readonly code: string;\n readonly phoneCode: string | null;\n readonly name: string;\n}\n\nexport interface GeoDivision {\n readonly id: string;\n readonly countryId: string;\n readonly parentId: string | null;\n readonly level: number;\n readonly code: string;\n readonly name: string;\n readonly kind: string | null;\n}\n\nexport interface GeoLevel {\n readonly level: number;\n readonly kind: string | null;\n readonly items: readonly GeoDivision[];\n}\n\nexport interface GeoPlace {\n readonly countryId: string;\n readonly countryCode: string;\n readonly countryName: string;\n readonly trail: readonly GeoDivision[];\n}\n\nexport interface GeoValue {\n readonly countryId: string | null;\n readonly divisionId: string | null;\n}\n\nexport const EMPTY_GEO_VALUE: GeoValue = { countryId: null, divisionId: null };\n\nexport function flagOf(code: string): string {\n if (code.length !== 2) return '';\n\n return String.fromCodePoint(\n ...[...code.toUpperCase()].map((letter) => 0x1f1a5 + letter.charCodeAt(0)),\n );\n}\n","export interface GeoCopy {\n readonly country: string;\n readonly levels: readonly [string, string, string, string];\n readonly kinds: Readonly<Record<string, string>>;\n}\n\nexport interface GeoCopySet {\n readonly es: GeoCopy;\n readonly en: GeoCopy;\n}\n\nexport const GEO_COPY: GeoCopySet = {\n es: {\n country: 'País',\n levels: ['Región', 'Provincia', 'Distrito', 'Zona'],\n kinds: {\n department: 'Departamento',\n province: 'Provincia',\n district: 'Distrito',\n region: 'Región',\n state: 'Estado',\n municipality: 'Municipio',\n county: 'Condado',\n parish: 'Parroquia',\n prefecture: 'Prefectura',\n governorate: 'Gobernación',\n territory: 'Territorio',\n canton: 'Cantón',\n emirate: 'Emirato',\n oblast: 'Óblast',\n city: 'Ciudad',\n division: 'División',\n republic: 'República',\n 'autonomous community': 'Comunidad autónoma',\n 'federal district': 'Distrito federal',\n 'capital city': 'Ciudad capital',\n 'metropolitan department': 'Departamento metropolitano',\n 'unitary authority': 'Autoridad unitaria',\n },\n },\n en: {\n country: 'Country',\n levels: ['Region', 'Province', 'District', 'Area'],\n kinds: {\n department: 'Department',\n province: 'Province',\n district: 'District',\n region: 'Region',\n state: 'State',\n municipality: 'Municipality',\n county: 'County',\n parish: 'Parish',\n prefecture: 'Prefecture',\n governorate: 'Governorate',\n territory: 'Territory',\n canton: 'Canton',\n emirate: 'Emirate',\n oblast: 'Oblast',\n city: 'City',\n division: 'Division',\n republic: 'Republic',\n 'autonomous community': 'Autonomous community',\n 'federal district': 'Federal district',\n 'capital city': 'Capital city',\n 'metropolitan department': 'Metropolitan department',\n 'unitary authority': 'Unitary authority',\n },\n },\n};\n\nexport function geoCopyOf(lang: string): GeoCopy {\n return lang === 'en' ? GEO_COPY.en : GEO_COPY.es;\n}\n\nexport function levelLabel(copy: GeoCopy, level: number, kind: string | null): string {\n if (kind) {\n const known = copy.kinds[kind.toLowerCase()];\n if (known) return known;\n }\n\n const index = Math.min(Math.max(level, 1), copy.levels.length) - 1;\n\n return copy.levels[index];\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\n\nimport { NUCLEUS_CONFIG } from '../config/nucleus-config';\nimport { GeoCountry, GeoLevel, GeoPlace } from './geo.models';\n\nconst EMPTY_LEVEL: GeoLevel = { level: 0, kind: null, items: [] };\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusGeo {\n private readonly http = inject(HttpClient);\n private readonly config = inject(NUCLEUS_CONFIG);\n\n private readonly cache = new Map<string, Promise<unknown>>();\n\n countries(language: string): Promise<readonly GeoCountry[]> {\n return this.once(`countries|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoCountry[]>(`${this.config.securityApiUrl}/geo/countries`, {\n params: { language },\n }),\n ),\n );\n }\n\n divisions(countryId: string, parentId: string | null, language: string): Promise<GeoLevel> {\n const params: Record<string, string> = { language };\n\n if (parentId) params['parentId'] = parentId;\n\n return this.once(`divisions|${countryId}|${parentId ?? ''}|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoLevel>(\n `${this.config.securityApiUrl}/geo/countries/${countryId}/divisions`,\n { params },\n ),\n ),\n );\n }\n\n place(divisionId: string, language: string): Promise<GeoPlace> {\n return this.once(`place|${divisionId}|${language}`, () =>\n firstValueFrom(\n this.http.get<GeoPlace>(\n `${this.config.securityApiUrl}/geo/divisions/${divisionId}/place`,\n { params: { language } },\n ),\n ),\n );\n }\n\n async levelOf(countryId: string, parentId: string | null, language: string): Promise<GeoLevel> {\n try {\n return await this.divisions(countryId, parentId, language);\n } catch {\n return EMPTY_LEVEL;\n }\n }\n\n private once<T>(key: string, load: () => Promise<T>): Promise<T> {\n const cached = this.cache.get(key);\n\n if (cached) return cached as Promise<T>;\n\n const started = load().catch((error) => {\n this.cache.delete(key);\n throw error;\n });\n\n this.cache.set(key, started);\n\n return started;\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, effect, inject, input, model, signal, untracked } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SelectModule } from 'primeng/select';\n\nimport { commonCopyOf } from '../i18n/common.copy';\nimport { NucleusEnterAdvance } from '../a11y/nucleus-enter-advance';\nimport { NucleusLanguage } from '../i18n/nucleus-language';\nimport { geoCopyOf, levelLabel } from './geo.copy';\nimport { EMPTY_GEO_VALUE, GeoCountry, GeoDivision, GeoValue } from './geo.models';\nimport { NucleusGeo } from './nucleus-geo';\n\ninterface GeoStep {\n readonly level: number;\n readonly kind: string | null;\n readonly items: GeoDivision[];\n readonly selectedId: string | null;\n}\n\n@Component({\n selector: 'nucleus-geo-select',\n imports: [SelectModule, FormsModule],\n hostDirectives: [NucleusEnterAdvance],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n `,\n template: `\n @let copy = labels();\n @let shared = words();\n\n <div class=\"ns-form-grid\" [class]=\"gridClass()\">\n <div class=\"ns-field is-span-1 is-size-md\">\n <label for=\"ns-geo-country\">{{ copy.country }}</label>\n <p-select\n inputId=\"ns-geo-country\"\n [options]=\"countries()\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"value().countryId\"\n (ngModelChange)=\"pickCountry($event)\"\n [disabled]=\"readonly()\"\n [filter]=\"true\"\n filterBy=\"name\"\n [filterPlaceholder]=\"shared.search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"shared.choose\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n </div>\n\n @for (step of steps(); track step.level; let index = $index) {\n <div class=\"ns-field is-span-1 is-size-md\">\n <label [attr.for]=\"'ns-geo-' + step.level\">{{ nameOf(step) }}</label>\n <p-select\n [inputId]=\"'ns-geo-' + step.level\"\n [options]=\"step.items\"\n optionLabel=\"name\"\n optionValue=\"id\"\n [ngModel]=\"step.selectedId\"\n (ngModelChange)=\"pick(index, $event)\"\n [disabled]=\"readonly()\"\n [filter]=\"true\"\n filterBy=\"name\"\n [filterPlaceholder]=\"shared.search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [showClear]=\"true\"\n [placeholder]=\"shared.choose\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n </div>\n }\n </div>\n `,\n})\nexport class NucleusGeoSelect {\n private readonly geo = inject(NucleusGeo);\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<GeoValue>(EMPTY_GEO_VALUE);\n\n readonly readonly = input(false);\n\n readonly columns = input<number | null>(null);\n\n protected readonly countries = signal<GeoCountry[]>([]);\n\n protected readonly steps = signal<GeoStep[]>([]);\n\n protected readonly labels = computed(() => geoCopyOf(this.language.lang()));\n\n protected readonly words = computed(() => commonCopyOf(this.language.lang()));\n\n private syncedKey: string | null = null;\n\n constructor() {\n effect(() => {\n const lang = this.language.lang();\n const current = this.value();\n const key = `${lang}|${current.countryId ?? ''}|${current.divisionId ?? ''}`;\n\n if (key === this.syncedKey) return;\n\n this.syncedKey = key;\n\n untracked(() => void this.sync(current, lang));\n });\n }\n\n protected gridClass(): string {\n const columns = this.columns();\n\n return columns ? `is-cap-${Math.min(Math.max(columns, 1), 4)}` : '';\n }\n\n protected nameOf(step: GeoStep): string {\n return levelLabel(this.labels(), step.level, step.kind);\n }\n\n protected async pickCountry(countryId: string | null): Promise<void> {\n const lang = this.language.lang();\n\n this.syncedKey = `${lang}|${countryId ?? ''}|`;\n this.value.set({ countryId, divisionId: null });\n\n if (!countryId) {\n this.steps.set([]);\n return;\n }\n\n const first = await this.geo.levelOf(countryId, null, lang);\n\n this.steps.set(first.items.length ? [toStep(first.level, first.kind, first.items, null)] : []);\n }\n\n protected async pick(index: number, divisionId: string | null): Promise<void> {\n const countryId = this.value().countryId;\n\n if (!countryId) return;\n\n const lang = this.language.lang();\n const next = this.steps().slice(0, index + 1);\n const current = next[index];\n\n if (!current) return;\n\n next[index] = { ...current, selectedId: divisionId };\n\n if (divisionId) {\n const child = await this.geo.levelOf(countryId, divisionId, lang);\n\n if (child.items.length) {\n next.push(toStep(child.level, child.kind, child.items, null));\n }\n }\n\n this.steps.set(next);\n\n const deepest = deepestOf(next);\n\n this.syncedKey = `${lang}|${countryId}|${deepest ?? ''}`;\n this.value.set({ countryId, divisionId: deepest });\n }\n\n private async sync(value: GeoValue, lang: string): Promise<void> {\n this.countries.set([...(await this.geo.countries(lang))]);\n\n if (!value.countryId) {\n this.steps.set([]);\n return;\n }\n\n if (!value.divisionId) {\n const first = await this.geo.levelOf(value.countryId, null, lang);\n\n this.steps.set(first.items.length ? [toStep(first.level, first.kind, first.items, null)] : []);\n return;\n }\n\n const place = await this.geo.place(value.divisionId, lang);\n const built: GeoStep[] = [];\n\n let parentId: string | null = null;\n\n for (const node of place.trail) {\n const level = await this.geo.levelOf(place.countryId, parentId, lang);\n\n if (!level.items.length) break;\n\n built.push(toStep(level.level, level.kind, level.items, node.id));\n parentId = node.id;\n }\n\n const tail = await this.geo.levelOf(place.countryId, parentId, lang);\n\n if (tail.items.length) {\n built.push(toStep(tail.level, tail.kind, tail.items, null));\n }\n\n this.steps.set(built);\n }\n}\n\nfunction toStep(\n level: number,\n kind: string | null,\n items: readonly GeoDivision[],\n selectedId: string | null,\n): GeoStep {\n return { level, kind, items: [...items], selectedId };\n}\n\nfunction deepestOf(steps: readonly GeoStep[]): string | null {\n for (let index = steps.length - 1; index >= 0; index -= 1) {\n const selected = steps[index]?.selectedId;\n\n if (selected) return selected;\n }\n\n return null;\n}\n","export const TEXT_CONTRAST = 4.5;\n\nexport const CONTROL_CONTRAST = 3;\n\nconst DARK_INK = '#101014';\n\nconst LIGHT_INK = '#ffffff';\n\nexport interface ContrastIssue {\n readonly scope: string;\n\n readonly pair: string;\n\n readonly ratio: number;\n\n readonly required: number;\n}\n\nexport function relativeLuminance(hex: string): number {\n const channel = (offset: number): number => {\n const value = parseInt(hex.slice(offset, offset + 2), 16) / 255;\n\n return value <= 0.03928 ? value / 12.92 : Math.pow((value + 0.055) / 1.055, 2.4);\n };\n\n return 0.2126 * channel(1) + 0.7152 * channel(3) + 0.0722 * channel(5);\n}\n\nexport function contrastRatio(foreground: string, background: string): number {\n const first = relativeLuminance(foreground);\n const second = relativeLuminance(background);\n\n return (Math.max(first, second) + 0.05) / (Math.min(first, second) + 0.05);\n}\n\nexport function readableOn(background: string): string {\n return contrastRatio(DARK_INK, background) >= contrastRatio(LIGHT_INK, background)\n ? DARK_INK\n : LIGHT_INK;\n}\n\nexport function mixHex(foreground: string, background: string, ratio: number): string {\n const amount = Math.min(Math.max(ratio, 0), 1);\n\n const channel = (offset: number): string => {\n const front = parseInt(foreground.slice(offset, offset + 2), 16);\n const back = parseInt(background.slice(offset, offset + 2), 16);\n\n return Math.round(front * amount + back * (1 - amount))\n .toString(16)\n .padStart(2, '0');\n };\n\n return `#${channel(1)}${channel(3)}${channel(5)}`;\n}\n\nexport function meetsContrast(foreground: string, background: string, required: number): boolean {\n return contrastRatio(foreground, background) >= required;\n}\n\nexport function contrastIssue(\n scope: string,\n pair: string,\n foreground: string,\n background: string,\n required: number,\n): ContrastIssue | null {\n const ratio = contrastRatio(foreground, background);\n\n return ratio >= required ? null : { scope, pair, ratio, required };\n}\n","import { ContrastIssue, CONTROL_CONTRAST, TEXT_CONTRAST, contrastIssue, readableOn } from './contrast';\n\nexport type FrameId =\n | 'nucleus'\n | 'ember'\n | 'forest'\n | 'plum'\n | 'midnight'\n | 'slate'\n | 'ocean'\n | 'sand'\n | 'ink'\n | 'graphite'\n | 'paper'\n | 'mist'\n | 'studio'\n | 'sage'\n | 'sky'\n | 'lavender';\n\nexport type CanvasId = 'light' | 'soft' | 'dim' | 'dark';\n\nexport type CanvasPreference = CanvasId | 'system';\n\nexport type AccentId =\n | 'violet'\n | 'blue'\n | 'cyan'\n | 'green'\n | 'lime'\n | 'amber'\n | 'orange'\n | 'rose'\n | 'red'\n | 'indigo'\n | 'teal'\n | 'plum'\n | 'slate'\n | 'graphite';\n\nexport type AccentPreference = AccentId | 'auto';\n\nexport type DensityId = 'comfortable' | 'compact';\n\nexport interface FrameTokens {\n readonly bg: string;\n\n readonly raised: string;\n\n readonly ink: string;\n\n readonly muted: string;\n\n readonly line: string;\n\n readonly glow: string;\n}\n\nexport interface Frame {\n readonly id: FrameId;\n\n readonly scheme: CanvasId;\n\n readonly starfield: boolean;\n\n readonly accent: AccentId;\n\n readonly tokens: FrameTokens;\n}\n\nexport interface CanvasTokens {\n readonly bg: string;\n\n readonly surface: string;\n\n readonly surfaceAlt: string;\n\n readonly text: string;\n\n readonly textMuted: string;\n\n readonly border: string;\n}\n\nexport interface CanvasEffects {\n readonly shadowOne: string;\n\n readonly shadowTwo: string;\n\n readonly wash: number;\n\n readonly washStrong: number;\n\n readonly headerBg: string;\n\n readonly headerInk: string;\n\n readonly headerLine: string;\n\n readonly danger: string;\n\n readonly success: string;\n\n readonly warning: string;\n}\n\nexport interface Canvas {\n readonly id: CanvasId;\n\n readonly tokens: CanvasTokens;\n\n readonly effects: CanvasEffects;\n}\n\nexport interface Accent {\n readonly id: AccentId;\n\n readonly light: string;\n\n readonly dark: string;\n}\n\nexport interface Density {\n readonly id: DensityId;\n\n readonly scale: number;\n}\n\nexport interface Appearance {\n readonly frame: FrameId;\n\n readonly canvas: CanvasPreference;\n\n readonly accent: AccentPreference;\n\n readonly density: DensityId;\n}\n\nexport const FRAMES: readonly Frame[] = [\n {\n id: 'nucleus',\n scheme: 'dark',\n starfield: true,\n accent: 'violet',\n tokens: {\n bg: '#1f1646',\n raised: '#2c2160',\n ink: '#ece9fb',\n muted: '#9690af',\n line: '#403863',\n glow: '#a78bfa',\n },\n },\n {\n id: 'midnight',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#12244a',\n raised: '#1b3263',\n ink: '#e6edf9',\n muted: '#95a1b7',\n line: '#344466',\n glow: '#60a5fa',\n },\n },\n {\n id: 'ocean',\n scheme: 'dark',\n starfield: false,\n accent: 'cyan',\n tokens: {\n bg: '#0b3a44',\n raised: '#124d59',\n ink: '#e3f3f6',\n muted: '#a2bcc1',\n line: '#2e5860',\n glow: '#22d3ee',\n },\n },\n {\n id: 'forest',\n scheme: 'dark',\n starfield: false,\n accent: 'green',\n tokens: {\n bg: '#0f3d2b',\n raised: '#18523b',\n ink: '#e6f2eb',\n muted: '#aabfb5',\n line: '#315a4a',\n glow: '#4ade80',\n },\n },\n {\n id: 'plum',\n scheme: 'dark',\n starfield: false,\n accent: 'plum',\n tokens: {\n bg: '#3a1a4f',\n raised: '#4d2666',\n ink: '#f3e8fa',\n muted: '#b09ebc',\n line: '#583b6a',\n glow: '#c084fc',\n },\n },\n {\n id: 'ember',\n scheme: 'dark',\n starfield: false,\n accent: 'red',\n tokens: {\n bg: '#4a1519',\n raised: '#611f24',\n ink: '#fbe9e9',\n muted: '#b8989a',\n line: '#66373a',\n glow: '#f87171',\n },\n },\n {\n id: 'sand',\n scheme: 'dark',\n starfield: false,\n accent: 'amber',\n tokens: {\n bg: '#3d2d12',\n raised: '#52401c',\n ink: '#f7efdd',\n muted: '#bbb19c',\n line: '#5b4c32',\n glow: '#fbbf24',\n },\n },\n {\n id: 'slate',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#27313f',\n raised: '#354254',\n ink: '#e8edf3',\n muted: '#aab1b9',\n line: '#464f5c',\n glow: '#60a5fa',\n },\n },\n {\n id: 'ink',\n scheme: 'dark',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#101318',\n raised: '#1b2129',\n ink: '#e9edf2',\n muted: '#85898e',\n line: '#33363b',\n glow: '#94a3b8',\n },\n },\n {\n id: 'graphite',\n scheme: 'dark',\n starfield: false,\n accent: 'violet',\n tokens: {\n bg: '#17171a',\n raised: '#232327',\n ink: '#ededf0',\n muted: '#8b8b8e',\n line: '#39393c',\n glow: '#a1a1aa',\n },\n },\n {\n id: 'paper',\n scheme: 'light',\n starfield: false,\n accent: 'violet',\n tokens: {\n bg: '#ffffff',\n raised: '#f1f0f5',\n ink: '#16151d',\n muted: '#6a696e',\n line: '#dadadb',\n glow: '#7c3aed',\n },\n },\n {\n id: 'mist',\n scheme: 'light',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#eef1f6',\n raised: '#e2e7ef',\n ink: '#141a24',\n muted: '#5e636b',\n line: '#cbcfd4',\n glow: '#2563eb',\n },\n },\n {\n id: 'studio',\n scheme: 'light',\n starfield: false,\n accent: 'amber',\n tokens: {\n bg: '#f1cba0',\n raised: '#f6dfc4',\n ink: '#3b2f24',\n muted: '#675442',\n line: '#d4b28c',\n glow: '#7a4a0a',\n },\n },\n {\n id: 'sage',\n scheme: 'light',\n starfield: false,\n accent: 'green',\n tokens: {\n bg: '#d3e4d6',\n raised: '#e3efe5',\n ink: '#1c2b20',\n muted: '#536257',\n line: '#b6c6b9',\n glow: '#15803d',\n },\n },\n {\n id: 'sky',\n scheme: 'light',\n starfield: false,\n accent: 'blue',\n tokens: {\n bg: '#cfe0f5',\n raised: '#e0ebf9',\n ink: '#14213a',\n muted: '#505e76',\n line: '#b1c1d7',\n glow: '#2563eb',\n },\n },\n {\n id: 'lavender',\n scheme: 'light',\n starfield: false,\n accent: 'violet',\n tokens: {\n bg: '#ddd6f3',\n raised: '#eae5f8',\n ink: '#221a3d',\n muted: '#5e5677',\n line: '#bfb8d6',\n glow: '#7c3aed',\n },\n },\n];\n\nexport const CANVASES: readonly Canvas[] = [\n {\n id: 'light',\n tokens: {\n bg: '#edeff3',\n surface: '#ffffff',\n surfaceAlt: '#e2e6ed',\n text: '#16151d',\n textMuted: '#5a5f6b',\n border: '#d3d8e1',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(16 20 30 / 6%), 0 2px 8px rgb(16 20 30 / 5%)',\n shadowTwo: '0 4px 12px rgb(16 20 30 / 8%), 0 12px 32px rgb(16 20 30 / 7%)',\n wash: 0.1,\n washStrong: 0.18,\n headerBg: '#d8dee8',\n headerInk: '#39404e',\n headerLine: '#bcc5d4',\n danger: '#b02121',\n success: '#136b35',\n warning: '#8a5a00',\n },\n },\n {\n id: 'soft',\n tokens: {\n bg: '#d9dce3',\n surface: '#eef0f4',\n surfaceAlt: '#dfe3ea',\n text: '#16151d',\n textMuted: '#545a66',\n border: '#c0c6d1',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(16 20 30 / 8%), 0 2px 8px rgb(16 20 30 / 6%)',\n shadowTwo: '0 4px 12px rgb(16 20 30 / 10%), 0 12px 32px rgb(16 20 30 / 8%)',\n wash: 0.1,\n washStrong: 0.18,\n headerBg: '#c6ccd8',\n headerInk: '#333a47',\n headerLine: '#aeb6c4',\n danger: '#b02121',\n success: '#136b35',\n warning: '#8a5a00',\n },\n },\n {\n id: 'dim',\n tokens: {\n bg: '#1b1a22',\n surface: '#23222c',\n surfaceAlt: '#2c2b37',\n text: '#e9e8ef',\n textMuted: '#a6a4b4',\n border: '#383744',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(0 0 0 / 24%)',\n shadowTwo: '0 10px 34px rgb(0 0 0 / 40%)',\n wash: 0.09,\n washStrong: 0.17,\n headerBg: '#302f3d',\n headerInk: '#c8c6d4',\n headerLine: '#423f50',\n danger: '#f0797b',\n success: '#5bd98a',\n warning: '#e0a33a',\n },\n },\n {\n id: 'dark',\n tokens: {\n bg: '#0e0d13',\n surface: '#17161f',\n surfaceAlt: '#211f2a',\n text: '#f2f1f6',\n textMuted: '#a09eb0',\n border: '#2a2833',\n },\n effects: {\n shadowOne: '0 1px 2px rgb(0 0 0 / 28%)',\n shadowTwo: '0 10px 34px rgb(0 0 0 / 45%)',\n wash: 0.08,\n washStrong: 0.16,\n headerBg: '#262433',\n headerInk: '#c2c0ce',\n headerLine: '#3a3745',\n danger: '#f0797b',\n success: '#5bd98a',\n warning: '#e0a33a',\n },\n },\n];\n\nexport const ACCENTS: readonly Accent[] = [\n { id: 'violet', light: '#7c3aed', dark: '#a78bfa' },\n { id: 'blue', light: '#2563eb', dark: '#60a5fa' },\n { id: 'cyan', light: '#0e7490', dark: '#22d3ee' },\n { id: 'green', light: '#15803d', dark: '#4ade80' },\n { id: 'lime', light: '#4d7c0f', dark: '#a3e635' },\n { id: 'amber', light: '#b45309', dark: '#fbbf24' },\n { id: 'orange', light: '#c2410c', dark: '#fb923c' },\n { id: 'rose', light: '#e11d48', dark: '#fb7185' },\n { id: 'red', light: '#dc2626', dark: '#f87171' },\n { id: 'indigo', light: '#4f46e5', dark: '#818cf8' },\n { id: 'teal', light: '#0f766e', dark: '#2dd4bf' },\n { id: 'plum', light: '#9333ea', dark: '#c084fc' },\n { id: 'slate', light: '#64748b', dark: '#94a3b8' },\n { id: 'graphite', light: '#71717a', dark: '#a1a1aa' },\n];\n\nexport const DENSITIES: readonly Density[] = [\n { id: 'comfortable', scale: 1 },\n { id: 'compact', scale: 0.72 },\n];\n\nexport const DEFAULT_APPEARANCE: Appearance = {\n frame: 'nucleus',\n canvas: 'dark',\n accent: 'auto',\n density: 'comfortable',\n};\n\nexport const LEGACY_THEMES: Readonly<Record<string, Partial<Appearance>>> = {\n nucleus: { frame: 'nucleus', canvas: 'dark', accent: 'auto' },\n light: { frame: 'paper', canvas: 'light', accent: 'blue' },\n dark: { frame: 'graphite', canvas: 'dark', accent: 'blue' },\n bubblegum: { frame: 'plum', canvas: 'light', accent: 'rose' },\n 'cool-breeze': { frame: 'ocean', canvas: 'light', accent: 'cyan' },\n 'cool-slate': { frame: 'slate', canvas: 'dark', accent: 'blue' },\n 'icy-mint': { frame: 'ocean', canvas: 'light', accent: 'green' },\n 'juicy-plum': { frame: 'plum', canvas: 'dark', accent: 'rose' },\n 'mango-paradise': { frame: 'sand', canvas: 'light', accent: 'orange' },\n 'moonlight-glow': { frame: 'midnight', canvas: 'dark', accent: 'blue' },\n 'mystical-forest': { frame: 'forest', canvas: 'dark', accent: 'green' },\n 'silky-pink': { frame: 'plum', canvas: 'light', accent: 'rose' },\n 'spicy-red': { frame: 'ember', canvas: 'dark', accent: 'red' },\n 'sunny-day': { frame: 'sand', canvas: 'light', accent: 'amber' },\n system: { frame: 'paper', canvas: 'system', accent: 'blue' },\n};\n\nconst FRAME_BY_ID = new Map(FRAMES.map((frame) => [frame.id, frame]));\n\nconst CANVAS_BY_ID = new Map(CANVASES.map((canvas) => [canvas.id, canvas]));\n\nconst ACCENT_BY_ID = new Map(ACCENTS.map((accent) => [accent.id, accent]));\n\nconst DENSITY_BY_ID = new Map(DENSITIES.map((density) => [density.id, density]));\n\nexport function frameById(id: string): Frame {\n return FRAME_BY_ID.get(id as FrameId) ?? FRAME_BY_ID.get(DEFAULT_APPEARANCE.frame)!;\n}\n\nexport function canvasById(id: CanvasId): Canvas {\n return CANVAS_BY_ID.get(id) ?? CANVAS_BY_ID.get('dark')!;\n}\n\nexport function accentById(id: string): Accent {\n return ACCENT_BY_ID.get(id as AccentId) ?? ACCENT_BY_ID.get('violet')!;\n}\n\nexport function densityById(id: string): Density {\n return DENSITY_BY_ID.get(id as DensityId) ?? DENSITY_BY_ID.get('comfortable')!;\n}\n\nexport function isFrameId(value: unknown): value is FrameId {\n return typeof value === 'string' && FRAME_BY_ID.has(value as FrameId);\n}\n\nexport function isCanvasPreference(value: unknown): value is CanvasPreference {\n return value === 'system' || (typeof value === 'string' && CANVAS_BY_ID.has(value as CanvasId));\n}\n\nexport function isAccentPreference(value: unknown): value is AccentPreference {\n return value === 'auto' || (typeof value === 'string' && ACCENT_BY_ID.has(value as AccentId));\n}\n\nexport function isDensityId(value: unknown): value is DensityId {\n return typeof value === 'string' && DENSITY_BY_ID.has(value as DensityId);\n}\n\nexport function resolveAccent(frame: Frame, preference: AccentPreference): Accent {\n return accentById(preference === 'auto' ? frame.accent : preference);\n}\n\nexport function accentOn(accent: Accent, canvas: CanvasId): string {\n return isDarkCanvas(canvas) ? accent.dark : accent.light;\n}\n\nexport function isDarkCanvas(canvas: CanvasId): boolean {\n return canvas === 'dim' || canvas === 'dark';\n}\n\nexport function auditAppearance(): readonly ContrastIssue[] {\n const issues: (ContrastIssue | null)[] = [];\n\n for (const canvas of CANVASES) {\n const { bg, surface, surfaceAlt } = canvas.tokens;\n const { danger, success, warning } = canvas.effects;\n const scope = `semantic:${canvas.id}`;\n\n for (const [name, color] of [\n ['danger', danger],\n ['success', success],\n ['warning', warning],\n ] as const) {\n issues.push(\n contrastIssue(scope, `${name}/bg`, color, bg, TEXT_CONTRAST),\n contrastIssue(scope, `${name}/surface`, color, surface, TEXT_CONTRAST),\n contrastIssue(scope, `${name}/surfaceAlt`, color, surfaceAlt, TEXT_CONTRAST),\n );\n }\n }\n\n for (const frame of FRAMES) {\n const { bg, raised, ink, muted, glow } = frame.tokens;\n const scope = `frame:${frame.id}`;\n\n issues.push(\n contrastIssue(scope, 'ink/bg', ink, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'ink/raised', ink, raised, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/bg', muted, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/raised', muted, raised, TEXT_CONTRAST),\n contrastIssue(scope, 'glow/bg', glow, bg, CONTROL_CONTRAST),\n contrastIssue(scope, 'glow/raised', glow, raised, CONTROL_CONTRAST),\n contrastIssue(scope, 'onGlow/glow', readableOn(glow), glow, TEXT_CONTRAST),\n );\n }\n\n for (const canvas of CANVASES) {\n const { bg, surface, surfaceAlt, text, textMuted } = canvas.tokens;\n const scope = `canvas:${canvas.id}`;\n\n issues.push(\n contrastIssue(scope, 'text/bg', text, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'text/surface', text, surface, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/bg', textMuted, bg, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/surface', textMuted, surface, TEXT_CONTRAST),\n contrastIssue(scope, 'muted/surfaceAlt', textMuted, surfaceAlt, TEXT_CONTRAST),\n );\n }\n\n for (const accent of ACCENTS) {\n for (const canvas of CANVASES) {\n const color = accentOn(accent, canvas.id);\n const scope = `accent:${accent.id}/${canvas.id}`;\n\n issues.push(\n contrastIssue(scope, 'accent/bg', color, canvas.tokens.bg, CONTROL_CONTRAST),\n contrastIssue(scope, 'accent/surface', color, canvas.tokens.surface, CONTROL_CONTRAST),\n contrastIssue(scope, 'accent/surfaceAlt', color, canvas.tokens.surfaceAlt, CONTROL_CONTRAST),\n contrastIssue(scope, 'onAccent/accent', readableOn(color), color, TEXT_CONTRAST),\n );\n }\n }\n\n return issues.filter((issue): issue is ContrastIssue => issue !== null);\n}\n","import { NucleusLang } from '../i18n/nucleus-language';\nimport { AccentId, AccentPreference, CanvasPreference, DensityId, FrameId } from './theme';\n\nexport interface ThemeCopy {\n readonly title: string;\n readonly frameTitle: string;\n readonly frameHint: string;\n readonly canvasTitle: string;\n readonly canvasHint: string;\n readonly accentTitle: string;\n readonly accentHint: string;\n readonly densityTitle: string;\n readonly densityHint: string;\n readonly frames: Readonly<Record<FrameId, string>>;\n readonly canvases: Readonly<Record<CanvasPreference, string>>;\n readonly accents: Readonly<Record<AccentPreference, string>>;\n readonly densities: Readonly<Record<DensityId, string>>;\n}\n\nconst FRAMES_ES: Readonly<Record<FrameId, string>> = {\n nucleus: 'Nucleus',\n midnight: 'Medianoche',\n ocean: 'Océano',\n forest: 'Bosque',\n plum: 'Ciruela',\n ember: 'Brasa',\n sand: 'Arena',\n slate: 'Pizarra',\n ink: 'Tinta',\n graphite: 'Grafito',\n paper: 'Papel',\n mist: 'Bruma',\n studio: 'Estudio',\n sage: 'Salvia',\n sky: 'Cielo',\n lavender: 'Lavanda',\n};\n\nconst FRAMES_EN: Readonly<Record<FrameId, string>> = {\n nucleus: 'Nucleus',\n midnight: 'Midnight',\n ocean: 'Ocean',\n forest: 'Forest',\n plum: 'Plum',\n ember: 'Ember',\n sand: 'Sand',\n slate: 'Slate',\n ink: 'Ink',\n graphite: 'Graphite',\n paper: 'Paper',\n mist: 'Mist',\n studio: 'Studio',\n sage: 'Sage',\n sky: 'Sky',\n lavender: 'Lavender',\n};\n\nconst ACCENTS_ES: Readonly<Record<AccentPreference, string>> = {\n auto: 'Del marco',\n violet: 'Violeta',\n blue: 'Azul',\n cyan: 'Cian',\n green: 'Verde',\n lime: 'Lima',\n amber: 'Ámbar',\n orange: 'Naranja',\n rose: 'Rosa',\n red: 'Rojo',\n slate: 'Pizarra',\n graphite: 'Grafito',\n indigo: 'Índigo',\n teal: 'Verde azulado',\n plum: 'Ciruela',\n};\n\nconst ACCENTS_EN: Readonly<Record<AccentPreference, string>> = {\n auto: 'From the frame',\n violet: 'Violet',\n blue: 'Blue',\n cyan: 'Cyan',\n green: 'Green',\n lime: 'Lime',\n amber: 'Amber',\n orange: 'Orange',\n rose: 'Rose',\n red: 'Red',\n slate: 'Slate',\n graphite: 'Graphite',\n indigo: 'Indigo',\n teal: 'Teal',\n plum: 'Plum',\n};\n\nexport const THEME_COPY: Readonly<Record<NucleusLang, ThemeCopy>> = {\n es: {\n title: 'Apariencia',\n frameTitle: 'Marco',\n frameHint: 'El color de la barra superior y del menú lateral.',\n canvasTitle: 'Lienzo',\n canvasHint: 'La superficie donde lees y escribes. Nunca se tiñe.',\n accentTitle: 'Acción',\n accentHint: 'El color del botón principal, del foco y de lo seleccionado.',\n densityTitle: 'Densidad',\n densityHint: 'Cuántas filas quieres ver de una sola pasada.',\n frames: FRAMES_ES,\n canvases: {\n light: 'Claro',\n soft: 'Suave',\n dim: 'Atenuado',\n dark: 'Oscuro',\n system: 'Del sistema',\n },\n accents: ACCENTS_ES,\n densities: { comfortable: 'Cómoda', compact: 'Compacta' },\n },\n en: {\n title: 'Appearance',\n frameTitle: 'Frame',\n frameHint: 'The color of the top bar and the side menu.',\n canvasTitle: 'Canvas',\n canvasHint: 'The surface where you read and type. Never tinted.',\n accentTitle: 'Action',\n accentHint: 'The color of the primary button, the focus ring and the selected row.',\n densityTitle: 'Density',\n densityHint: 'How many rows you want to see at a glance.',\n frames: FRAMES_EN,\n canvases: {\n light: 'Light',\n soft: 'Soft',\n dim: 'Dim',\n dark: 'Dark',\n system: 'System',\n },\n accents: ACCENTS_EN,\n densities: { comfortable: 'Comfortable', compact: 'Compact' },\n },\n};\n\nexport function themeCopyOf(lang: NucleusLang): ThemeCopy {\n return THEME_COPY[lang] ?? THEME_COPY.es;\n}\n\nexport function accentLabelOf(lang: NucleusLang, id: AccentId): string {\n return themeCopyOf(lang).accents[id];\n}\n","import { Injectable, computed, effect, signal } from '@angular/core';\n\nimport { mixHex, readableOn } from './contrast';\nimport {\n Accent,\n AccentPreference,\n Appearance,\n Canvas,\n CanvasId,\n CanvasPreference,\n DEFAULT_APPEARANCE,\n Density,\n DensityId,\n Frame,\n FrameId,\n LEGACY_THEMES,\n accentOn,\n canvasById,\n densityById,\n frameById,\n isAccentPreference,\n isCanvasPreference,\n isDensityId,\n isDarkCanvas,\n isFrameId,\n resolveAccent,\n} from './theme';\n\nconst STORAGE_KEY = 'nucleus_appearance';\n\nconst LEGACY_STORAGE_KEY = 'nucleus_theme';\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\n\nfunction parseAppearance(raw: string | null): Appearance | null {\n if (!raw) return null;\n\n try {\n const parsed = JSON.parse(raw) as Partial<Appearance>;\n\n return {\n frame: isFrameId(parsed.frame) ? parsed.frame : DEFAULT_APPEARANCE.frame,\n canvas: isCanvasPreference(parsed.canvas) ? parsed.canvas : DEFAULT_APPEARANCE.canvas,\n accent: isAccentPreference(parsed.accent) ? parsed.accent : DEFAULT_APPEARANCE.accent,\n density: isDensityId(parsed.density) ? parsed.density : DEFAULT_APPEARANCE.density,\n };\n } catch {\n return null;\n }\n}\n\nfunction migrateLegacy(raw: string | null): Appearance | null {\n if (!raw) return null;\n\n const legacy = LEGACY_THEMES[raw];\n\n return legacy ? { ...DEFAULT_APPEARANCE, ...legacy } : null;\n}\n\nfunction readStored(): Appearance {\n try {\n const current = parseAppearance(localStorage.getItem(STORAGE_KEY));\n\n if (current) return current;\n\n const migrated = migrateLegacy(localStorage.getItem(LEGACY_STORAGE_KEY));\n\n if (migrated) {\n localStorage.removeItem(LEGACY_STORAGE_KEY);\n\n return migrated;\n }\n } catch {}\n\n return DEFAULT_APPEARANCE;\n}\n\nfunction prefersDark(): boolean {\n return globalThis.matchMedia?.(DARK_QUERY).matches ?? false;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ThemeService {\n private readonly _appearance = signal<Appearance>(readStored());\n\n private readonly systemDark = signal(prefersDark());\n\n readonly appearance = this._appearance.asReadonly();\n\n readonly frame = computed<Frame>(() => frameById(this._appearance().frame));\n\n readonly canvasId = computed<CanvasId>(() => {\n const preference = this._appearance().canvas;\n\n if (preference !== 'system') return preference;\n\n return this.systemCanvasId();\n });\n\n readonly systemCanvasId = computed<CanvasId>(() => (this.systemDark() ? 'dark' : 'light'));\n\n readonly canvas = computed<Canvas>(() => canvasById(this.canvasId()));\n\n readonly accent = computed<Accent>(() => resolveAccent(this.frame(), this._appearance().accent));\n\n readonly accentColor = computed(() => accentOn(this.accent(), this.canvasId()));\n\n readonly density = computed<Density>(() => densityById(this._appearance().density));\n\n readonly starfield = computed(() => this.frame().starfield && isDarkCanvas(this.canvasId()));\n\n constructor() {\n globalThis\n .matchMedia?.(DARK_QUERY)\n .addEventListener('change', (event) => this.systemDark.set(event.matches));\n\n effect(() => {\n const appearance = this._appearance();\n\n this.applyToDom();\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(appearance));\n } catch {}\n });\n }\n\n setFrame(frame: FrameId): void {\n this.patch({ frame });\n }\n\n setCanvas(canvas: CanvasPreference): void {\n this.patch({ canvas });\n }\n\n setAccent(accent: AccentPreference): void {\n this.patch({ accent });\n }\n\n setDensity(density: DensityId): void {\n this.patch({ density });\n }\n\n reset(): void {\n this._appearance.set(DEFAULT_APPEARANCE);\n }\n\n private patch(change: Partial<Appearance>): void {\n this._appearance.update((appearance) => ({ ...appearance, ...change }));\n }\n\n private applyToDom(): void {\n const root = document.documentElement;\n const frame = this.frame();\n const canvas = this.canvas();\n const accent = this.accentColor();\n const density = this.density();\n\n for (const [name, value] of Object.entries(frame.tokens)) {\n root.style.setProperty(`--ns-frame-${kebab(name)}`, value);\n }\n\n root.style.setProperty('--ns-frame-on-glow', readableOn(frame.tokens.glow));\n\n const navActive = readableOn(frame.tokens.bg);\n\n root.style.setProperty('--ns-nav-active-bg', navActive);\n root.style.setProperty('--ns-nav-active-ink', readableOn(navActive));\n\n for (const [name, value] of Object.entries(canvas.tokens)) {\n root.style.setProperty(`--ac-${kebab(name)}`, value);\n }\n\n root.style.setProperty('--ac-accent', accent);\n root.style.setProperty('--ac-on-accent', readableOn(accent));\n\n root.style.setProperty('--ns-shadow-1', canvas.effects.shadowOne);\n root.style.setProperty('--ns-shadow-2', canvas.effects.shadowTwo);\n root.style.setProperty('--ns-header-bg', canvas.effects.headerBg);\n root.style.setProperty('--ns-header-ink', canvas.effects.headerInk);\n root.style.setProperty('--ns-header-line', canvas.effects.headerLine);\n root.style.setProperty('--ns-danger', canvas.effects.danger);\n root.style.setProperty('--ns-success', canvas.effects.success);\n root.style.setProperty('--ns-warning', canvas.effects.warning);\n root.style.setProperty(\n '--ns-accent-wash',\n mixHex(accent, canvas.tokens.surface, canvas.effects.wash),\n );\n root.style.setProperty(\n '--ns-accent-wash-strong',\n mixHex(accent, canvas.tokens.surface, canvas.effects.washStrong),\n );\n\n root.style.setProperty('--ns-density', String(density.scale));\n\n root.dataset['frame'] = frame.id;\n root.dataset['canvas'] = canvas.id;\n root.dataset['density'] = density.id;\n\n root.classList.toggle('ns-dark', isDarkCanvas(canvas.id));\n\n root.style.colorScheme = isDarkCanvas(canvas.id) ? 'dark' : 'light';\n }\n}\n\nfunction kebab(name: string): string {\n return name.replace(/[A-Z]/g, (letter) => `-${letter.toLowerCase()}`);\n}\n","import { definePreset } from '@primeuix/themes';\nimport Lara from '@primeuix/themes/lara';\n\nconst MASK = {\n background: 'rgba(0, 0, 0, 0.55)',\n color: 'var(--ac-text)',\n};\n\nconst SHADOW = 'var(--ns-shadow-2, 0 10px 40px rgb(0 0 0 / 45%))';\n\nconst PANEL = {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n};\n\nconst schemeTokens = {\n primary: {\n color: 'var(--ac-accent)',\n contrastColor: 'var(--ac-on-accent)',\n hoverColor: 'color-mix(in srgb, var(--ac-accent) 85%, var(--ac-text))',\n activeColor: 'color-mix(in srgb, var(--ac-accent) 70%, var(--ac-text))',\n },\n highlight: {\n background: 'color-mix(in srgb, var(--ac-accent) 16%, transparent)',\n focusBackground: 'color-mix(in srgb, var(--ac-accent) 24%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n },\n text: {\n color: 'var(--ac-text)',\n hoverColor: 'var(--ac-text)',\n mutedColor: 'var(--ac-text-muted)',\n hoverMutedColor: 'var(--ac-text)',\n },\n content: {\n background: 'var(--ac-surface)',\n hoverBackground: 'var(--ac-surface-alt)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n hoverColor: 'var(--ac-text)',\n },\n overlay: {\n select: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n popover: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n modal: {\n background: 'var(--ac-surface)',\n borderColor: 'var(--ac-border)',\n color: 'var(--ac-text)',\n },\n },\n formField: {\n paddingY: 'var(--ns-control-y, 0.55rem)',\n background: 'var(--ac-bg)',\n disabledBackground: 'var(--ac-surface-alt)',\n filledBackground: 'var(--ac-surface-alt)',\n filledHoverBackground: 'var(--ac-surface-alt)',\n filledFocusBackground: 'var(--ac-surface-alt)',\n borderColor: 'var(--ac-border)',\n hoverBorderColor: 'var(--ac-accent)',\n focusBorderColor: 'var(--ac-accent)',\n color: 'var(--ac-text)',\n disabledColor: 'var(--ac-text-muted)',\n placeholderColor: 'var(--ac-text-muted)',\n floatLabelColor: 'var(--ac-text-muted)',\n floatLabelFocusColor: 'var(--ac-accent)',\n iconColor: 'var(--ac-text-muted)',\n },\n list: {\n option: {\n focusBackground: 'var(--ac-surface-alt)',\n selectedBackground: 'color-mix(in srgb, var(--ac-accent) 20%, transparent)',\n selectedFocusBackground: 'color-mix(in srgb, var(--ac-accent) 28%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n selectedColor: 'var(--ac-text)',\n selectedFocusColor: 'var(--ac-text)',\n icon: {\n color: 'var(--ac-text-muted)',\n focusColor: 'var(--ac-text)',\n },\n },\n },\n navigation: {\n item: {\n focusBackground: 'var(--ac-surface-alt)',\n activeBackground: 'color-mix(in srgb, var(--ac-accent) 20%, transparent)',\n color: 'var(--ac-text)',\n focusColor: 'var(--ac-text)',\n activeColor: 'var(--ac-text)',\n icon: {\n color: 'var(--ac-text-muted)',\n focusColor: 'var(--ac-text)',\n activeColor: 'var(--ac-accent)',\n },\n },\n },\n};\n\nexport const NucleusPreset = definePreset(Lara, {\n semantic: {\n colorScheme: {\n light: { ...schemeTokens, mask: MASK },\n dark: { ...schemeTokens, mask: MASK },\n },\n },\n components: {\n drawer: { root: { ...PANEL, shadow: SHADOW } },\n popover: { root: { ...PANEL, shadow: SHADOW } },\n menu: { root: { ...PANEL, shadow: SHADOW } },\n listbox: { root: PANEL },\n },\n});\n","import { EnvironmentProviders } from '@angular/core';\nimport { providePrimeNG } from 'primeng/config';\n\nimport { NucleusPreset } from './primeng-preset';\n\nexport const NUCLEUS_DARK_SELECTOR = '.ns-dark';\n\nexport function provideNucleusTheme(): EnvironmentProviders {\n return providePrimeNG({\n theme: {\n preset: NucleusPreset,\n options: { darkModeSelector: NUCLEUS_DARK_SELECTOR },\n },\n });\n}\n","import {\n CUSTOM_ELEMENTS_SCHEMA,\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n} from '@angular/core';\n\nimport { ThemeService } from '../../theme/theme.service';\n\nconst SCRIPT_URL = 'https://cdn.lordicon.com/lordicon.js';\n\nlet loading: Promise<void> | null = null;\n\nexport function loadLordicon(): Promise<void> {\n if (loading) return loading;\n\n loading = new Promise<void>((resolve) => {\n if (document.querySelector(`script[src=\"${SCRIPT_URL}\"]`)) {\n resolve();\n return;\n }\n\n const script = document.createElement('script');\n\n script.src = SCRIPT_URL;\n script.async = true;\n script.onload = () => resolve();\n script.onerror = () => resolve();\n\n document.head.appendChild(script);\n });\n\n return loading;\n}\n\nexport const NUCLEUS_ICONS = {\n trash: 'https://cdn.lordicon.com/wpyrrmcq.json',\n check: 'https://cdn.lordicon.com/lomfljuq.json',\n warning: 'https://cdn.lordicon.com/vihyezfv.json',\n power: 'https://cdn.lordicon.com/gwvmctbb.json',\n user: 'https://cdn.lordicon.com/hrjifpbq.json',\n key: 'https://cdn.lordicon.com/ossgtprr.json',\n} as const;\n\n@Component({\n selector: 'nucleus-lordicon',\n changeDetection: ChangeDetectionStrategy.OnPush,\n schemas: [CUSTOM_ELEMENTS_SCHEMA],\n styles: `\n :host {\n display: inline-flex;\n }\n `,\n template: `\n <lord-icon\n [attr.src]=\"src()\"\n [attr.trigger]=\"trigger()\"\n [attr.state]=\"state()\"\n [attr.colors]=\"colors()\"\n [style.width.px]=\"size()\"\n [style.height.px]=\"size()\"\n ></lord-icon>\n `,\n})\nexport class NucleusLordicon {\n private readonly themes = inject(ThemeService);\n\n readonly src = input.required<string>();\n readonly trigger = input('in');\n readonly state = input<string | null>(null);\n readonly size = input(48);\n readonly tone = input<'accent' | 'danger'>('accent');\n\n protected readonly colors = computed(() => {\n const canvas = this.themes.canvas();\n const primary = this.tone() === 'danger' ? canvas.effects.danger : this.themes.accentColor();\n\n return `primary:${primary},secondary:${canvas.tokens.text}`;\n });\n\n constructor() {\n void loadLordicon();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nexport type CardSize = 'sm' | 'md' | 'lg' | 'full';\n\n@Component({\n selector: 'nucleus-card',\n imports: [SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[attr.data-size]': 'size()' },\n styles: `\n :host {\n display: block;\n padding: 22px 24px;\n border: 1px solid var(--ac-border);\n border-radius: 12px;\n background: var(--ac-surface);\n box-shadow: var(--ns-shadow-1);\n }\n\n :host([data-size='sm']) {\n max-width: 34rem;\n }\n\n :host([data-size='md']) {\n max-width: 48rem;\n }\n\n :host([data-size='lg']) {\n max-width: 64rem;\n }\n\n .head {\n margin-bottom: 18px;\n }\n\n h2 {\n margin: 0;\n font-size: 16px;\n font-weight: var(--ns-weight-heading);\n }\n\n .subtitle {\n margin: 4px 0 0;\n color: var(--ac-text-muted);\n font-size: 13px;\n }\n\n .body {\n display: contents;\n }\n\n .skeleton-rows {\n display: grid;\n }\n\n .skeleton-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n padding: 13px 0;\n border-bottom: 1px solid color-mix(in srgb, var(--ac-border) 60%, transparent);\n }\n\n .skeleton-row:last-child {\n border-bottom: 0;\n }\n\n .actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n margin-top: 20px;\n }\n\n .actions:empty {\n display: none;\n }\n `,\n template: `\n @if (heading() || subtitle()) {\n <div class=\"head\">\n @if (heading()) {\n <h2>{{ heading() }}</h2>\n }\n @if (subtitle()) {\n <p class=\"subtitle\">{{ subtitle() }}</p>\n }\n </div>\n }\n\n @if (loading()) {\n <div class=\"skeleton-rows\">\n @for (row of placeholders(); track row.index) {\n <div class=\"skeleton-row\">\n <p-skeleton height=\"13px\" [width]=\"row.left\" />\n <p-skeleton height=\"12px\" [width]=\"row.right\" />\n </div>\n }\n </div>\n }\n\n <div class=\"body\" [style.display]=\"loading() ? 'none' : null\">\n <ng-content />\n </div>\n\n <div class=\"actions\">\n <ng-content select=\"[nucleusCardActions]\" />\n </div>\n `,\n})\nexport class NucleusCard {\n readonly heading = input('');\n readonly subtitle = input('');\n readonly size = input<CardSize>('full');\n readonly loading = input(false);\n readonly skeletonRows = input(4);\n\n private static readonly widths: readonly (readonly [string, string])[] = [\n ['46%', '22%'],\n ['62%', '17%'],\n ['38%', '25%'],\n ['54%', '19%'],\n ['44%', '23%'],\n ['58%', '16%'],\n ];\n\n protected readonly placeholders = computed(() =>\n Array.from({ length: Math.max(this.skeletonRows(), 1) }, (_, index) => ({\n index,\n left: NucleusCard.widths[index % NucleusCard.widths.length][0],\n right: NucleusCard.widths[index % NucleusCard.widths.length][1],\n })),\n );\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\n@Component({\n selector: 'nucleus-metrics',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: grid;\n gap: 14px;\n grid-template-columns: repeat(auto-fit, minmax(var(--ns-metric-min, 210px), 1fr));\n }\n `,\n template: '<ng-content />',\n})\nexport class NucleusMetrics {\n readonly loading = input(false);\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { SkeletonModule } from 'primeng/skeleton';\n\nimport { NucleusMetrics } from './nucleus-metrics';\n\nexport type MetricTone = 'plain' | 'accent';\n\n@Component({\n selector: 'nucleus-metric',\n imports: [NgTemplateOutlet, RouterLink, SkeletonModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[attr.data-tone]': \"tone() === 'accent' ? 'accent' : null\" },\n styles: `\n :host {\n display: block;\n }\n\n .track {\n overflow: hidden;\n height: 4px;\n margin-top: 3px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--ac-text) 12%, transparent);\n }\n\n .fill {\n display: block;\n height: 4px;\n border-radius: 999px;\n background: var(--ac-accent);\n }\n\n .tile {\n display: grid;\n align-content: start;\n gap: 5px;\n height: 100%;\n padding: 18px 20px;\n border: 1px solid var(--ac-border);\n border-radius: 12px;\n background: var(--ac-surface);\n color: inherit;\n text-decoration: none;\n transition: border-color 140ms ease;\n }\n\n a.tile:hover {\n border-color: var(--ac-accent);\n }\n\n :host([data-tone='accent']) .tile {\n border-color: var(--ac-accent);\n }\n\n .label {\n color: var(--ac-text-muted);\n font-size: 11px;\n font-weight: var(--ns-weight-heading);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n\n .value {\n font-size: 26px;\n font-variant-numeric: tabular-nums;\n line-height: 1;\n }\n\n .hint {\n color: var(--ac-text-muted);\n font-size: 12px;\n }\n\n .value-skeleton {\n margin: 1px 0 2px;\n }\n\n .hint-skeleton {\n margin: 3px 0;\n }\n `,\n template: `\n @if (link().length) {\n <a class=\"tile\" [routerLink]=\"link()\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </a>\n } @else {\n <div class=\"tile\">\n <ng-container [ngTemplateOutlet]=\"body\" />\n </div>\n }\n\n <ng-template #body>\n <span class=\"label\">{{ label() }}</span>\n\n @if (busy()) {\n <p-skeleton styleClass=\"value-skeleton\" height=\"23px\" width=\"92px\" />\n @if (hint().length) {\n <p-skeleton styleClass=\"hint-skeleton\" height=\"10px\" width=\"132px\" />\n }\n } @else {\n <strong class=\"value\">{{ value() }}</strong>\n @if (bar() !== null) {\n <span class=\"track\"><span class=\"fill\" [style.width.%]=\"bar()\"></span></span>\n }\n @if (hint().length) {\n <small class=\"hint\">{{ hint() }}</small>\n }\n }\n </ng-template>\n `,\n})\nexport class NucleusMetric {\n private readonly group = inject(NucleusMetrics, { optional: true });\n\n readonly label = input('');\n readonly value = input<string | number>('');\n readonly hint = input('');\n readonly link = input<string | unknown[]>('');\n readonly tone = input<MetricTone>('plain');\n readonly progress = input<number | null>(null);\n\n protected readonly bar = computed<number | null>(() => {\n const value = this.progress();\n\n if (value === null || !Number.isFinite(value)) return null;\n\n return Math.min(Math.max(value, 0), 100);\n });\n readonly loading = input<boolean | null>(null);\n\n protected readonly busy = computed(() => this.loading() ?? this.group?.loading() ?? false);\n}\n","import { ChangeDetectionStrategy, Component, input, model } from '@angular/core';\n\nexport interface TabItem {\n readonly id: string;\n readonly label: string;\n readonly icon?: string;\n readonly badge?: number;\n}\n\n@Component({\n selector: 'nucleus-tabs',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n margin-bottom: 12px;\n }\n\n .bar {\n display: flex;\n overflow-x: auto;\n justify-content: flex-start;\n gap: 4px;\n padding: 5px;\n border: 1px solid var(--ac-border);\n border-radius: 12px;\n background: var(--ac-surface);\n box-shadow: var(--ns-shadow-1);\n scrollbar-width: none;\n }\n\n .bar::-webkit-scrollbar {\n display: none;\n }\n\n .tab {\n display: inline-flex;\n flex: none;\n align-items: center;\n gap: 8px;\n padding: 8px 14px;\n border: 0;\n border-radius: 8px;\n background: transparent;\n color: var(--ac-text-muted);\n font: inherit;\n font-size: 13px;\n font-weight: var(--ns-weight-emphasis);\n white-space: nowrap;\n cursor: pointer;\n transition:\n background 120ms ease,\n color 120ms ease;\n }\n\n .tab:hover {\n background: var(--ac-surface-alt);\n color: var(--ac-text);\n }\n\n .tab:focus-visible {\n outline: 2px solid var(--ac-accent);\n outline-offset: 1px;\n }\n\n .tab.is-active {\n background: var(--ac-text);\n color: var(--ac-surface);\n }\n\n .tab i {\n font-size: 13px;\n }\n\n .badge {\n padding: 1px 7px;\n border-radius: var(--ac-radius-pill);\n background: color-mix(in srgb, currentColor 14%, transparent);\n font-size: 11px;\n font-variant-numeric: tabular-nums;\n }\n\n .tab.is-active .badge {\n background: color-mix(in srgb, currentColor 22%, transparent);\n }\n `,\n template: `\n <div class=\"bar\" role=\"tablist\">\n @for (tab of tabs(); track tab.id) {\n <button\n type=\"button\"\n class=\"tab\"\n role=\"tab\"\n [class.is-active]=\"tab.id === active()\"\n [attr.aria-selected]=\"tab.id === active()\"\n (click)=\"active.set(tab.id)\"\n >\n @if (tab.icon) {\n <i [class]=\"tab.icon\" aria-hidden=\"true\"></i>\n }\n {{ tab.label }}\n @if (tab.badge !== undefined) {\n <span class=\"badge\">{{ tab.badge }}</span>\n }\n </button>\n }\n </div>\n `,\n})\nexport class NucleusTabs {\n readonly tabs = input.required<readonly TabItem[]>();\n\n readonly active = model.required<string>();\n}\n","import { Injectable, TemplateRef, signal } from '@angular/core';\n\nexport interface Crumb {\n readonly label: string;\n readonly route?: readonly unknown[];\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusPage {\n readonly heading = signal('');\n\n readonly crumbs = signal<readonly Crumb[]>([]);\n\n readonly actions = signal<TemplateRef<unknown> | null>(null);\n\n set(heading: string, crumbs: readonly Crumb[] = []): void {\n this.heading.set(heading);\n this.crumbs.set(crumbs);\n }\n}\n","import { Directive, OnDestroy, TemplateRef, inject } from '@angular/core';\n\nimport { NucleusPage } from './nucleus-page';\n\n@Directive({\n selector: '[nucleusPageActions]',\n})\nexport class NucleusPageActions implements OnDestroy {\n private readonly page = inject(NucleusPage);\n\n private readonly template: TemplateRef<unknown> = inject(TemplateRef);\n\n constructor() {\n this.page.actions.set(this.template);\n }\n\n ngOnDestroy(): void {\n if (this.page.actions() === this.template) this.page.actions.set(null);\n }\n}\n","import { EnvironmentProviders, Injectable, inject, makeEnvironmentProviders } from '@angular/core';\nimport { ConfirmationService, MessageService } from 'primeng/api';\n\nimport { NUCLEUS_ICONS } from '../lordicon/lordicon';\n\nexport interface ConfirmRequest {\n readonly header: string;\n readonly message: string;\n readonly accept: string;\n readonly reject: string;\n readonly icon?: string;\n readonly tone?: 'accent' | 'danger';\n}\n\nexport function provideNucleusFeedback(): EnvironmentProviders {\n return makeEnvironmentProviders([ConfirmationService, MessageService]);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusFeedback {\n private readonly confirmation = inject(ConfirmationService);\n private readonly messages = inject(MessageService);\n\n ask(request: ConfirmRequest): Promise<boolean> {\n return new Promise((resolve) => {\n this.confirmation.confirm({\n header: request.header,\n message: request.message,\n acceptLabel: request.accept,\n rejectLabel: request.reject,\n icon: request.icon ?? NUCLEUS_ICONS.warning,\n acceptButtonStyleClass: request.tone === 'danger' ? 'p-button-danger' : '',\n accept: () => resolve(true),\n reject: () => resolve(false),\n });\n });\n }\n\n done(summary: string, detail = ''): void {\n this.messages.add({ severity: 'success', summary, detail, life: 3200 });\n }\n\n failed(summary: string, detail = ''): void {\n this.messages.add({ severity: 'error', summary, detail, life: 5000 });\n }\n}\n","export type FieldKind =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'textarea'\n | 'select'\n | 'checkbox'\n | 'switch'\n | 'icon'\n | 'color';\n\nexport type FieldSpan = 1 | 2 | 3 | 4 | 'full';\n\nexport type FieldSize = 'xs' | 'sm' | 'md' | 'lg' | 'full';\n\nexport interface FieldOption {\n readonly label: string;\n readonly value: unknown;\n}\n\nexport interface FormField {\n readonly key: string;\n readonly label: string;\n readonly kind?: FieldKind;\n readonly span?: FieldSpan;\n readonly size?: FieldSize;\n readonly hint?: string;\n readonly placeholder?: string;\n readonly maxlength?: number;\n readonly rows?: number;\n readonly options?: readonly FieldOption[];\n readonly disabled?: boolean;\n readonly clearable?: boolean;\n readonly searchable?: boolean;\n}\n\nexport type FormValue = Record<string, unknown>;\n\nexport function resolveFieldSize(field: FormField): FieldSize {\n if (field.size) return field.size;\n\n if (field.kind === 'textarea' || field.kind === 'color') return 'full';\n\n if (field.kind === 'icon') return 'md';\n\n const max = field.maxlength;\n\n if (max === undefined) return 'md';\n if (max <= 8) return 'xs';\n if (max <= 20) return 'sm';\n if (max <= 40) return 'md';\n if (max <= 80) return 'lg';\n\n return 'full';\n}\n\nexport function isFieldSearchable(field: FormField): boolean {\n return field.searchable !== false;\n}\n","export const NUCLEUS_ICON_CATALOG: readonly string[] = [\n 'address-book', 'align-center', 'align-justify', 'align-left', 'align-right', 'amazon',\n 'android', 'angle-double-down', 'angle-double-left', 'angle-double-right', 'angle-double-up',\n 'angle-down', 'angle-left', 'angle-right', 'angle-up', 'apple', 'arrow-circle-down',\n 'arrow-circle-left', 'arrow-circle-right', 'arrow-circle-up', 'arrow-down', 'arrow-down-left',\n 'arrow-down-left-and-arrow-up-right-to-center', 'arrow-down-right', 'arrow-left',\n 'arrow-right', 'arrow-right-arrow-left', 'arrow-u-turn-up-left', 'arrow-u-turn-up-right',\n 'arrow-up', 'arrow-up-left', 'arrow-up-right',\n 'arrow-up-right-and-arrow-down-left-from-center', 'arrows-alt', 'arrows-h', 'arrows-v',\n 'asterisk', 'at', 'backward', 'ban', 'barcode', 'bars', 'bell', 'bell-slash', 'bitcoin',\n 'block-quote', 'bold', 'bolt', 'book', 'bookmark', 'bookmark-fill', 'box', 'briefcase',\n 'building', 'building-columns', 'bullseye', 'calculator', 'calendar', 'calendar-clock',\n 'calendar-minus', 'calendar-plus', 'calendar-times', 'camera', 'car', 'caret-down',\n 'caret-left', 'caret-right', 'caret-up', 'cart-arrow-down', 'cart-minus', 'cart-plus',\n 'case-sensitive', 'chart-bar', 'chart-line', 'chart-pie', 'chart-scatter', 'check',\n 'check-circle', 'check-square', 'chevron-circle-down', 'chevron-circle-left',\n 'chevron-circle-right', 'chevron-circle-up', 'chevron-down', 'chevron-left', 'chevron-right',\n 'chevron-up', 'circle', 'circle-fill', 'circle-off', 'circle-on', 'clipboard', 'clock',\n 'clone', 'cloud', 'cloud-download', 'cloud-upload', 'code', 'code-branch', 'cog', 'columns-2',\n 'comment', 'comments', 'compass', 'compress', 'copy', 'credit-card', 'crown', 'database',\n 'delete-left', 'desktop', 'directions', 'directions-alt', 'discord', 'dollar', 'dot',\n 'download', 'eject', 'ellipsis-h', 'ellipsis-v', 'envelope', 'equals', 'eraser', 'ethereum',\n 'euro', 'exclamation-circle', 'exclamation-triangle', 'expand', 'external-link', 'eye',\n 'eye-dropper', 'eye-slash', 'face-smile', 'facebook', 'fast-backward', 'fast-forward', 'file',\n 'file-arrow-up', 'file-check', 'file-edit', 'file-excel', 'file-export', 'file-import',\n 'file-o', 'file-pdf', 'file-plus', 'file-word', 'filter', 'filter-fill', 'filter-slash',\n 'flag', 'flag-fill', 'folder', 'folder-open', 'folder-plus', 'forward', 'gauge', 'gift',\n 'github', 'globe', 'google', 'graduation-cap', 'grid-2', 'grip', 'grip-horizontal',\n 'grip-vertical', 'hammer', 'hashtag', 'heading', 'heading-1', 'heading-2', 'heading-3',\n 'heading-4', 'heading-5', 'heading-6', 'headphones', 'heart', 'heart-fill', 'highlighter',\n 'history', 'home', 'horizontal-rule', 'hourglass', 'id-card', 'image', 'images', 'inbox',\n 'indent', 'indian-rupee', 'info', 'info-circle', 'instagram', 'italic', 'key', 'language',\n 'lightbulb', 'link', 'linkedin', 'list', 'list-check', 'list-ol', 'list-tree', 'lock',\n 'lock-open', 'map', 'map-marker', 'mars', 'megaphone', 'microchip', 'microchip-ai',\n 'microphone', 'microsoft', 'minus', 'minus-circle', 'mobile', 'money-bill', 'moon',\n 'note-sticky', 'objects-column', 'outdent', 'palette', 'paperclip', 'paragraph-left',\n 'paragraph-right', 'pause', 'pause-circle', 'paypal', 'pen-line', 'pen-to-square', 'pencil',\n 'percentage', 'phone', 'pinterest', 'play', 'play-circle', 'plus', 'plus-circle', 'pound',\n 'power-off', 'prime', 'print', 'qrcode', 'question', 'question-circle', 'receipt',\n 'rectangle-xmark', 'reddit', 'refresh', 'replay', 'reply', 'rows-2', 'save', 'search',\n 'search-minus', 'search-plus', 'send', 'server', 'share-alt', 'shield', 'shop', 'shopping-bag',\n 'shopping-cart', 'sidebar', 'sign-in', 'sign-out', 'signature', 'sitemap', 'slack', 'slash',\n 'sliders-h', 'sliders-v', 'sort', 'sort-alpha-down', 'sort-alpha-down-alt', 'sort-alpha-up',\n 'sort-alpha-up-alt', 'sort-alt', 'sort-alt-slash', 'sort-amount-down', 'sort-amount-down-alt',\n 'sort-amount-up', 'sort-amount-up-alt', 'sort-down', 'sort-down-fill', 'sort-numeric-down',\n 'sort-numeric-down-alt', 'sort-numeric-up', 'sort-numeric-up-alt', 'sort-up', 'sort-up-fill',\n 'sparkles', 'spinner', 'spinner-dotted', 'square', 'stamp', 'star', 'star-fill', 'star-half',\n 'star-half-fill', 'step-backward', 'step-backward-alt', 'step-forward', 'step-forward-alt',\n 'stop', 'stop-circle', 'stopwatch', 'strikethrough', 'subscript', 'sun', 'superscript', 'sync',\n 'table', 'tablet', 'tag', 'tags', 'telegram', 'text', 'text-color', 'th-large', 'thumbs-down',\n 'thumbs-down-fill', 'thumbs-up', 'thumbs-up-fill', 'thumbtack', 'ticket', 'tiktok', 'times',\n 'times-circle', 'trash', 'trophy', 'truck', 'turkish-lira', 'twitch', 'twitter', 'underline',\n 'undo', 'unlock', 'upload', 'user', 'user-edit', 'user-minus', 'user-plus', 'users', 'venus',\n 'verified', 'video', 'vimeo', 'volume-down', 'volume-off', 'volume-up', 'wallet', 'warehouse',\n 'wave-pulse', 'whatsapp', 'wifi', 'window-maximize', 'window-minimize', 'wrench', 'youtube'\n];\n\nexport function searchIcons(term: string): readonly string[] {\n const needle = term.trim().toLowerCase();\n\n if (!needle) return NUCLEUS_ICON_CATALOG;\n\n return NUCLEUS_ICON_CATALOG.filter((name) => name.includes(needle));\n}\n\nexport function iconClassOf(name: string | null): string {\n return name ? (name.startsWith('pi ') ? name : `pi pi-${name}`) : '';\n}\n\nexport function iconNameOf(value: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/^pi\\s+/, '').replace(/^pi-/, '');\n\n return trimmed || null;\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n inject,\n input,\n model,\n signal,\n viewChild,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { Popover, PopoverModule } from 'primeng/popover';\n\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { iconClassOf, iconNameOf, searchIcons } from './icon-catalog';\n\n@Component({\n selector: 'nucleus-icon-picker',\n imports: [FormsModule, InputTextModule, PopoverModule],\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n .trigger {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n padding: 0 10px;\n height: 38px;\n border: 1px solid var(--ac-border);\n border-radius: 8px;\n background: var(--ac-surface);\n color: var(--ac-text);\n font: inherit;\n font-size: 14px;\n text-align: left;\n cursor: pointer;\n }\n\n .trigger:disabled {\n opacity: 0.6;\n cursor: default;\n }\n\n .trigger:not(:disabled):hover {\n border-color: color-mix(in srgb, var(--ac-accent) 55%, var(--ac-border));\n }\n\n .preview {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 6px;\n background: color-mix(in srgb, var(--ac-accent) 16%, transparent);\n color: var(--ac-accent);\n font-size: 13px;\n }\n\n .preview.is-empty {\n background: color-mix(in srgb, var(--ac-text) 8%, transparent);\n color: var(--ac-text-muted);\n }\n\n .name {\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .name.is-empty {\n color: var(--ac-text-muted);\n }\n\n .caret {\n color: var(--ac-text-muted);\n font-size: 11px;\n }\n\n .panel {\n width: min(21rem, 80vw);\n }\n\n .panel-head {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-bottom: 10px;\n }\n\n .panel-head input {\n flex: 1;\n }\n\n .clear {\n padding: 0 10px;\n height: 34px;\n border: 1px solid var(--ac-border);\n border-radius: 8px;\n background: transparent;\n color: var(--ac-text-muted);\n font: inherit;\n font-size: 12px;\n white-space: nowrap;\n cursor: pointer;\n }\n\n .clear:hover {\n color: var(--ac-text);\n }\n\n .grid {\n display: grid;\n grid-template-columns: repeat(8, 1fr);\n gap: 4px;\n overflow-y: auto;\n max-height: 16rem;\n }\n\n .cell {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n aspect-ratio: 1;\n border: 1px solid transparent;\n border-radius: 8px;\n background: transparent;\n color: var(--ac-text);\n font-size: 15px;\n cursor: pointer;\n }\n\n .cell:hover {\n background: color-mix(in srgb, var(--ac-text) 10%, transparent);\n }\n\n .cell.is-active {\n border-color: var(--ac-accent);\n background: color-mix(in srgb, var(--ac-accent) 18%, transparent);\n color: var(--ac-accent);\n }\n\n .empty {\n padding: 18px 4px;\n color: var(--ac-text-muted);\n font-size: 13px;\n text-align: center;\n }\n\n @media (max-width: 420px) {\n .grid {\n grid-template-columns: repeat(6, 1fr);\n }\n }\n `,\n template: `\n @let copy = labels();\n\n <button\n type=\"button\"\n class=\"trigger\"\n [id]=\"inputId()\"\n [disabled]=\"disabled()\"\n [attr.aria-label]=\"copy.searchIcon\"\n (click)=\"panel().toggle($event)\"\n >\n <span class=\"preview\" [class.is-empty]=\"!name()\">\n <i [class]=\"name() ? iconClass() : 'pi pi-image'\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"name\" [class.is-empty]=\"!name()\">{{ name() ?? copy.noIcon }}</span>\n <i class=\"pi pi-chevron-down caret\" aria-hidden=\"true\"></i>\n </button>\n\n <p-popover #popover appendTo=\"body\" [dismissable]=\"true\" (onShow)=\"onShow()\">\n <div class=\"panel\">\n <div class=\"panel-head\">\n <input\n #searchBox\n pInputText\n type=\"search\"\n autocomplete=\"off\"\n [placeholder]=\"copy.searchIcon\"\n [ngModel]=\"term()\"\n (ngModelChange)=\"term.set($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <button type=\"button\" class=\"clear\" (click)=\"pick(null)\">{{ copy.noIcon }}</button>\n </div>\n\n @if (results().length) {\n <div class=\"grid\">\n @for (icon of results(); track icon) {\n <button\n type=\"button\"\n class=\"cell\"\n [class.is-active]=\"icon === name()\"\n [title]=\"icon\"\n [attr.aria-label]=\"icon\"\n (click)=\"pick(icon)\"\n >\n <i [class]=\"'pi pi-' + icon\" aria-hidden=\"true\"></i>\n </button>\n }\n </div>\n } @else {\n <p class=\"empty\">{{ copy.noMatches }}</p>\n }\n </div>\n </p-popover>\n `,\n})\nexport class NucleusIconPicker {\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<string | null>(null);\n\n readonly disabled = input(false);\n\n readonly inputId = input('');\n\n protected readonly panel = viewChild.required<Popover>('popover');\n\n protected readonly search = viewChild<ElementRef<HTMLInputElement>>('searchBox');\n\n protected readonly term = signal('');\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n protected readonly name = computed(() => iconNameOf(this.value()));\n\n protected readonly iconClass = computed(() => iconClassOf(this.name()));\n\n protected readonly results = computed(() => searchIcons(this.term()));\n\n protected onShow(): void {\n this.term.set('');\n\n setTimeout(() => this.search()?.nativeElement.focus(), 0);\n }\n\n protected pick(icon: string | null): void {\n this.value.set(icon ? `pi pi-${icon}` : null);\n this.panel().hide();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject, input, model } from '@angular/core';\n\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { ACCENTS, AccentId } from '../../theme/theme';\nimport { themeCopyOf } from '../../theme/theme.copy';\n\nexport interface AccentOption {\n readonly id: AccentId;\n readonly light: string;\n readonly dark: string;\n}\n\nexport const NUCLEUS_ACCENTS: readonly AccentOption[] = ACCENTS.map((accent) => ({\n id: accent.id,\n light: accent.light,\n dark: accent.dark,\n}));\n\n@Component({\n selector: 'nucleus-color-picker',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n .row {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n min-height: 38px;\n }\n\n .swatch {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 2px solid transparent;\n border-radius: 50%;\n color: #ffffff;\n cursor: pointer;\n transition: transform 120ms ease;\n }\n\n .swatch:hover:not(:disabled) {\n transform: scale(1.12);\n }\n\n .swatch:disabled {\n cursor: default;\n opacity: 0.6;\n }\n\n .swatch.is-active {\n border-color: var(--ac-text);\n box-shadow: 0 0 0 2px var(--ac-bg) inset;\n }\n\n .swatch i {\n font-size: 11px;\n text-shadow: 0 0 3px rgba(0, 0, 0, 0.5);\n }\n\n .none {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 26px;\n height: 26px;\n padding: 0;\n border: 1px dashed var(--ac-border);\n border-radius: 50%;\n background: transparent;\n color: var(--ac-text-muted);\n cursor: pointer;\n }\n\n .none.is-active {\n border-style: solid;\n border-color: var(--ac-text);\n color: var(--ac-text);\n }\n\n .none i {\n font-size: 11px;\n }\n `,\n template: `\n @let copy = labels();\n\n <div class=\"row\" role=\"radiogroup\" [attr.aria-label]=\"ariaLabel() || copy.choose\">\n <button\n type=\"button\"\n class=\"none\"\n role=\"radio\"\n [class.is-active]=\"!value()\"\n [attr.aria-checked]=\"!value()\"\n [attr.aria-label]=\"copy.noColor\"\n [title]=\"copy.noColor\"\n [disabled]=\"disabled()\"\n (click)=\"pick(null)\"\n >\n <i class=\"pi pi-ban\" aria-hidden=\"true\"></i>\n </button>\n\n @for (option of options(); track option.color) {\n <button\n type=\"button\"\n class=\"swatch\"\n role=\"radio\"\n [class.is-active]=\"option.color === value()\"\n [attr.aria-checked]=\"option.color === value()\"\n [attr.aria-label]=\"option.label\"\n [title]=\"option.label + ' · ' + option.color\"\n [style.background]=\"option.color\"\n [disabled]=\"disabled()\"\n (click)=\"pick(option.color)\"\n >\n @if (option.color === value()) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n `,\n})\nexport class NucleusColorPicker {\n private readonly language = inject(NucleusLanguage);\n\n readonly value = model<string | null>(null);\n\n readonly disabled = input(false);\n\n readonly ariaLabel = input('');\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n protected readonly options = computed(() => {\n const names = themeCopyOf(this.language.lang()).accents;\n\n return NUCLEUS_ACCENTS.map((accent) => ({ color: accent.light, label: names[accent.id] }));\n });\n\n protected pick(color: string | null): void {\n this.value.set(color);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n computed,\n effect,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { CheckboxModule } from 'primeng/checkbox';\nimport { InputTextModule } from 'primeng/inputtext';\nimport { SelectModule } from 'primeng/select';\nimport { TextareaModule } from 'primeng/textarea';\nimport { ToggleSwitchModule } from 'primeng/toggleswitch';\n\nimport { fieldsIn, moveTo } from '../../a11y/focus';\nimport { NucleusEnterAdvance } from '../../a11y/nucleus-enter-advance';\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { FieldOption, FormField, FormValue, isFieldSearchable, resolveFieldSize } from './form.models';\nimport { NucleusColorPicker } from './nucleus-color-picker';\nimport { NucleusIconPicker } from './nucleus-icon-picker';\n\n@Component({\n selector: 'nucleus-form',\n imports: [\n CheckboxModule,\n InputTextModule,\n SelectModule,\n TextareaModule,\n ToggleSwitchModule,\n FormsModule,\n NucleusColorPicker,\n NucleusIconPicker,\n ],\n hostDirectives: [NucleusEnterAdvance],\n templateUrl: './nucleus-form.html',\n styleUrl: './nucleus-form.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusForm {\n private readonly language = inject(NucleusLanguage);\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n\n readonly fields = input.required<readonly FormField[]>();\n readonly value = input.required<FormValue>();\n readonly readonly = input(false);\n readonly columns = input<number | null>(null);\n readonly autofocus = input(false);\n\n readonly valueChange = output<FormValue>();\n\n protected readonly labels = computed(() => commonCopyOf(this.language.lang()));\n\n private landed = false;\n\n constructor() {\n effect(() => {\n const ready = this.autofocus() && !this.readonly() && this.fields().length > 0;\n\n if (!ready || this.landed) return;\n\n this.landed = true;\n\n afterNextRender(\n () => {\n const first = fieldsIn(this.host.nativeElement)[0];\n\n if (first) moveTo(first);\n },\n { injector: this.injector },\n );\n });\n }\n\n protected read(field: FormField): unknown {\n return this.value()[field.key] ?? null;\n }\n\n protected text(field: FormField): string {\n const raw = this.value()[field.key];\n\n return raw === null || raw === undefined ? '' : String(raw);\n }\n\n protected nullableText(field: FormField): string | null {\n const raw = this.value()[field.key];\n\n return raw === null || raw === undefined || raw === '' ? null : String(raw);\n }\n\n protected checked(field: FormField): boolean {\n return this.value()[field.key] === true;\n }\n\n protected write(field: FormField, next: unknown): void {\n this.valueChange.emit({ ...this.value(), [field.key]: next });\n }\n\n protected isDisabled(field: FormField): boolean {\n return this.readonly() || field.disabled === true;\n }\n\n protected isSearchable(field: FormField): boolean {\n return isFieldSearchable(field);\n }\n\n protected fieldClass(field: FormField): string {\n const span = field.span ?? 1;\n\n return `is-span-${span === 'full' ? 'full' : span} is-size-${resolveFieldSize(field)}`;\n }\n\n protected gridClass(): string {\n const columns = this.columns();\n\n return columns ? `is-cap-${Math.min(Math.max(columns, 1), 4)}` : '';\n }\n\n protected optionsOf(field: FormField): FieldOption[] {\n return [...(field.options ?? [])];\n }\n\n protected kindOf(field: FormField): string {\n return field.kind ?? 'text';\n }\n}\n","<div class=\"ns-form-grid\" [class]=\"gridClass()\">\n @for (field of fields(); track field.key) {\n <div class=\"ns-field\" [class]=\"fieldClass(field)\">\n @if (kindOf(field) !== 'checkbox' && kindOf(field) !== 'switch') {\n <label [attr.for]=\"kindOf(field) === 'color' ? null : 'nf-' + field.key\">\n {{ field.label }}\n </label>\n }\n\n @switch (kindOf(field)) {\n @case ('textarea') {\n <textarea\n pTextarea\n [id]=\"'nf-' + field.key\"\n [rows]=\"field.rows ?? 3\"\n [ngModel]=\"text(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [attr.maxlength]=\"field.maxlength ?? null\"\n [attr.placeholder]=\"field.placeholder ?? null\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n ></textarea>\n }\n @case ('select') {\n <p-select\n [inputId]=\"'nf-' + field.key\"\n [options]=\"optionsOf(field)\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [ngModel]=\"read(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [placeholder]=\"field.placeholder ?? labels().choose\"\n [showClear]=\"field.clearable === true\"\n [filter]=\"isSearchable(field)\"\n filterBy=\"label\"\n [filterPlaceholder]=\"labels().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\"\n fluid\n />\n }\n @case ('icon') {\n <nucleus-icon-picker\n [inputId]=\"'nf-' + field.key\"\n [value]=\"nullableText(field)\"\n (valueChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n />\n }\n @case ('color') {\n <nucleus-color-picker\n [value]=\"nullableText(field)\"\n (valueChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ariaLabel]=\"field.label\"\n />\n }\n @case ('checkbox') {\n <div class=\"ns-inline\">\n <p-checkbox\n [inputId]=\"'nf-' + field.key\"\n [binary]=\"true\"\n [ngModel]=\"checked(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <label [attr.for]=\"'nf-' + field.key\" class=\"ns-inline-label\">{{ field.label }}</label>\n </div>\n }\n @case ('switch') {\n <div class=\"ns-inline\">\n <p-toggleswitch\n [inputId]=\"'nf-' + field.key\"\n [ngModel]=\"checked(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n <label [attr.for]=\"'nf-' + field.key\" class=\"ns-inline-label\">{{ field.label }}</label>\n </div>\n }\n @default {\n <input\n pInputText\n [id]=\"'nf-' + field.key\"\n [type]=\"kindOf(field) === 'number' ? 'number' : kindOf(field)\"\n [ngModel]=\"text(field)\"\n (ngModelChange)=\"write(field, $event)\"\n [disabled]=\"isDisabled(field)\"\n [attr.maxlength]=\"field.maxlength ?? null\"\n [attr.placeholder]=\"field.placeholder ?? null\"\n [ngModelOptions]=\"{ standalone: true }\"\n autocomplete=\"off\"\n fluid\n />\n }\n }\n\n @if (field.hint) {\n <p class=\"ns-hint\">{{ field.hint }}</p>\n }\n </div>\n }\n</div>\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { RouterLink } from '@angular/router';\n\nexport interface NucleusLinkTarget {\n readonly route: readonly unknown[];\n readonly queryParams?: Record<string, unknown>;\n}\n\n@Component({\n selector: 'nucleus-link',\n imports: [NgTemplateOutlet, RouterLink],\n templateUrl: './nucleus-link.html',\n styleUrl: './nucleus-link.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusLink {\n readonly route = input<readonly unknown[] | null>(null);\n readonly queryParams = input<Record<string, unknown> | null>(null);\n readonly href = input<string | null>(null);\n readonly hint = input('');\n readonly muted = input(false);\n}\n","<ng-template #body>\n <span class=\"label\"><ng-content /></span>\n <i class=\"pi pi-arrow-up-right\" aria-hidden=\"true\"></i>\n</ng-template>\n\n@if (route(); as target) {\n <a\n class=\"chip\"\n [class.is-muted]=\"muted()\"\n [routerLink]=\"target\"\n [queryParams]=\"queryParams()\"\n [attr.title]=\"hint() || null\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </a>\n} @else {\n <a\n class=\"chip\"\n [class.is-muted]=\"muted()\"\n [href]=\"href() ?? '#'\"\n [attr.title]=\"hint() || null\"\n >\n <ng-container [ngTemplateOutlet]=\"body\" />\n </a>\n}\n","import { Directive, TemplateRef, inject, input } from '@angular/core';\n\n@Directive({\n selector: '[nucleusCell]',\n})\nexport class NucleusCell {\n readonly nucleusCell = input.required<string>();\n\n readonly template = inject(TemplateRef);\n}\n","import { readableOn } from '../../theme/contrast';\n\nexport interface MenuTile {\n readonly label: string;\n\n readonly icon: string | null;\n\n readonly color: string | null;\n\n readonly ink: string | null;\n\n readonly ghost: boolean;\n}\n\nexport interface MenuRow {\n readonly id: string;\n\n readonly name: string;\n\n readonly meta: string | null;\n\n readonly tile: MenuTile | null;\n\n readonly tag: string | null;\n\n readonly current: boolean;\n\n readonly disabled: boolean;\n}\n\nexport interface MenuSection {\n readonly id: string;\n\n readonly label: string | null;\n\n readonly rows: readonly MenuRow[];\n}\n\nexport function menuTile(label: string, icon: string | null, color: string | null): MenuTile {\n return { label, icon, color, ink: color ? readableOn(color) : null, ghost: false };\n}\n\nexport function menuGlyph(icon: string): MenuTile {\n return { label: '', icon, color: null, ink: null, ghost: true };\n}\n\nexport function foldText(value: string): string {\n return value\n .normalize('NFD')\n .replace(/[̀-ͯ]/g, '')\n .toLowerCase();\n}\n\nexport function matchesRow(row: MenuRow, term: string): boolean {\n return foldText(row.name).includes(term) || foldText(row.meta ?? '').includes(term);\n}\n\nexport function selectableRows(sections: readonly MenuSection[]): MenuRow[] {\n return sections.flatMap((section) => section.rows).filter((row) => !row.disabled && !row.current);\n}\n","import { DestroyRef, Injectable, inject, signal } from '@angular/core';\n\nexport const NUCLEUS_NARROW_QUERY = '(max-width: 720px)';\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusViewport {\n private readonly query =\n typeof window !== 'undefined' && typeof window.matchMedia === 'function'\n ? window.matchMedia(NUCLEUS_NARROW_QUERY)\n : null;\n\n private readonly _narrow = signal(this.query?.matches ?? false);\n\n readonly narrow = this._narrow.asReadonly();\n\n constructor() {\n const query = this.query;\n\n if (!query) return;\n\n const onChange = (event: MediaQueryListEvent) => this._narrow.set(event.matches);\n\n query.addEventListener('change', onChange);\n\n inject(DestroyRef).onDestroy(() => query.removeEventListener('change', onChange));\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n TemplateRef,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { CdkDrag, CdkDragDrop, CdkDragHandle, CdkDropList } from '@angular/cdk/drag-drop';\nimport { ButtonModule } from 'primeng/button';\nimport { PaginatorModule } from 'primeng/paginator';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TableModule } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport {\n ListAction,\n ListActionEvent,\n ListColumn,\n ListTag,\n ListToggleEvent,\n} from './list.models';\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { foldText } from '../menu/menu.models';\nimport { NucleusViewport } from '../viewport/nucleus-viewport';\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { NucleusLink, NucleusLinkTarget } from '../link/nucleus-link';\nimport { NucleusCell } from './nucleus-cell';\n\n@Component({\n selector: 'nucleus-list',\n imports: [\n NgTemplateOutlet,\n NucleusLink,\n CdkDrag,\n CdkDragHandle,\n CdkDropList,\n ButtonModule,\n PaginatorModule,\n SkeletonModule,\n TableModule,\n TagModule,\n TooltipModule,\n ],\n templateUrl: './nucleus-list.html',\n styleUrl: './nucleus-list.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusList<T extends object = Record<string, unknown>> {\n readonly rows = input.required<T[]>();\n readonly columns = input.required<readonly ListColumn<T>[]>();\n readonly actions = input<readonly ListAction<T>[]>([]);\n readonly empty = input('');\n readonly loading = input(false);\n readonly minWidth = input('640px');\n readonly skeletonRows = input(5);\n readonly rowClass = input<(row: T) => string>(() => '');\n readonly pageSize = input(5);\n readonly pageSizes = input<number[]>([5, 10, 20, 25]);\n readonly cards = input(true);\n readonly reorderable = input(false);\n readonly searchable = input(true);\n readonly reorderGroup = input<((row: T) => string | null) | null>(null);\n\n readonly action = output<ListActionEvent<T>>();\n readonly reorder = output<T[]>();\n readonly dragStart = output<T>();\n readonly toggle = output<ListToggleEvent<T>>();\n\n private readonly cells = contentChildren(NucleusCell);\n\n private readonly language = inject(NucleusLanguage);\n\n private readonly viewport = inject(NucleusViewport);\n\n protected readonly copy = computed(() => commonCopyOf(this.language.lang()));\n\n protected readonly term = signal('');\n\n private readonly chosenView = signal<'grid' | 'rows'>('rows');\n\n protected readonly canChooseView = computed(() => !this.viewport.narrow());\n\n protected readonly view = computed<'grid' | 'rows'>(() =>\n this.canChooseView() ? this.chosenView() : 'grid',\n );\n\n protected chooseView(value: 'grid' | 'rows'): void {\n this.chosenView.set(value);\n }\n\n protected readonly filtered = computed<T[]>(() => {\n const term = foldText(this.term().trim());\n const all = this.rows();\n\n if (!term) return [...all];\n\n const columns = this.columns();\n\n return all.filter((row) =>\n columns.some((column) => foldText(this.text(column, row)).includes(term)),\n );\n });\n\n protected readonly dragLocked = computed(() => !this.reorderable() || this.term().trim().length > 0);\n\n protected readonly showNoResults = computed(\n () => !this.loading() && this.rows().length > 0 && this.filtered().length === 0,\n );\n\n protected onSearch(event: Event): void {\n this.term.set((event.target as HTMLInputElement).value);\n }\n\n private readonly firstRow = signal(0);\n\n private readonly rowsOverride = signal(0);\n\n protected readonly compact = computed(() => this.cards());\n\n protected readonly rowsPerPage = computed(() => this.rowsOverride() || this.pageSize());\n\n protected readonly identityColumn = computed<ListColumn<T> | null>(() => {\n const columns = this.columns();\n\n return (\n columns.find((column) => column.role === 'identity') ??\n columns.find((column) => !column.role) ??\n columns[0] ??\n null\n );\n });\n\n protected readonly statusColumn = computed<ListColumn<T> | null>(() => {\n const columns = this.columns();\n const explicit = columns.find((column) => column.role === 'status');\n\n if (explicit) return explicit;\n\n const identity = this.identityColumn();\n\n return columns.find((column) => column !== identity && !column.role && !!column.tag) ?? null;\n });\n\n protected readonly attributeColumns = computed<readonly ListColumn<T>[]>(() => {\n const identity = this.identityColumn();\n const status = this.statusColumn();\n\n return this.columns().filter(\n (column) => column !== identity && column !== status && column.role !== 'hidden',\n );\n });\n\n protected readonly pagedRows = computed<T[]>(() => {\n const all = this.filtered();\n\n if (!this.paginate()) return [...all];\n\n const size = this.rowsPerPage();\n const start = this.firstRow() < all.length ? this.firstRow() : 0;\n\n return all.slice(start, start + size);\n });\n\n private readonly resetPage = effect(() => {\n const total = this.filtered().length;\n\n untracked(() => {\n if (this.firstRow() >= total) this.firstRow.set(0);\n });\n });\n\n protected readonly page = this.firstRow.asReadonly();\n\n protected readonly sortAllowed = (index: number, drag: CdkDrag<T>): boolean => {\n const group = this.reorderGroup();\n\n if (!group) return true;\n\n const target = this.pagedRows()[index];\n const dragged = drag.data;\n\n if (!target || !dragged) return true;\n\n return group(target) === group(dragged);\n };\n\n protected onRowReorder(event: { dragIndex?: number; dropIndex?: number }): void {\n this.applyMove(event.dragIndex ?? -1, event.dropIndex ?? -1);\n }\n\n protected onCardDrop(event: CdkDragDrop<unknown>): void {\n const offset = this.firstRow();\n\n this.applyMove(event.previousIndex + offset, event.currentIndex + offset);\n }\n\n private applyMove(from: number, to: number): void {\n const all = this.rows();\n\n if (from < 0 || to < 0 || from === to) return;\n if (from >= all.length || to >= all.length) return;\n\n const next = [...all];\n const [moved] = next.splice(from, 1);\n\n if (!moved) return;\n\n next.splice(to, 0, moved);\n\n this.reorder.emit(next);\n }\n\n protected onPage(event: { first?: number; rows?: number }): void {\n this.firstRow.set(event.first ?? 0);\n\n if (event.rows) this.rowsOverride.set(event.rows);\n }\n\n protected readonly paginate = computed(() => !this.loading());\n\n protected readonly tableStyle = computed(() => ({ 'min-width': this.minWidth() }));\n\n protected readonly showEmpty = computed(() => !this.loading() && this.rows().length === 0);\n\n protected readonly placeholders = computed<object[]>(() =>\n Array.from({ length: Math.max(this.skeletonRows(), 1) }, (_, index) => ({ index })),\n );\n\n protected readonly data = computed<object[]>(() =>\n this.loading() ? this.placeholders() : [...this.rows()],\n );\n\n protected skeletonWidth(column: ListColumn<T>): string {\n if (column.kind === 'switch') return '84px';\n if (column.align === 'right') return '40px';\n if (column.width) return '60%';\n\n return column.strong ? '58%' : '78%';\n }\n\n protected cellTemplate(key: string): TemplateRef<unknown> | null {\n return this.cells().find((cell) => cell.nucleusCell() === key)?.template ?? null;\n }\n\n protected text(column: ListColumn<T>, row: T): string {\n if (column.value) return column.value(row);\n\n const raw = (row as Record<string, unknown>)[column.key];\n\n return raw === null || raw === undefined ? '—' : String(raw);\n }\n\n protected linkOf(column: ListColumn<T>, row: T): NucleusLinkTarget | null {\n return column.link ? column.link(row) : null;\n }\n\n protected tagOf(column: ListColumn<T>, row: T): ListTag | null {\n return column.tag ? column.tag(row) : null;\n }\n\n protected visibleActions(row: T): readonly ListAction<T>[] {\n return this.actions().filter((entry) => !entry.visible || entry.visible(row));\n }\n\n protected isActionLocked(entry: ListAction<T>, row: T): boolean {\n return entry.disabled ? entry.disabled(row) : false;\n }\n\n protected run(entry: ListAction<T>, row: T): void {\n this.action.emit({ id: entry.id, row });\n }\n\n protected isChecked(column: ListColumn<T>, row: T): boolean {\n return column.checked ? column.checked(row) : false;\n }\n\n protected isLocked(column: ListColumn<T>, row: T): boolean {\n return column.disabled ? column.disabled(row) : false;\n }\n\n protected hintOf(column: ListColumn<T>, row: T): string {\n return column.hint ? column.hint(row) : '';\n }\n\n protected flip(column: ListColumn<T>, row: T): void {\n if (this.isLocked(column, row)) return;\n\n this.toggle.emit({ key: column.key, row, value: !this.isChecked(column, row) });\n }\n}\n","<div class=\"head\">\n <ng-content select=\"[nucleusListTitle]\" />\n <div class=\"head-actions\">\n <ng-content select=\"[nucleusListActions]\" />\n </div>\n</div>\n\n@if (showEmpty()) {\n <div class=\"placeholder\">{{ empty() }}</div>\n} @else {\n <div class=\"bar\">\n @if (searchable()) {\n <label class=\"search\">\n <i class=\"pi pi-search\" aria-hidden=\"true\"></i>\n <input\n type=\"search\"\n [value]=\"term()\"\n [placeholder]=\"copy().search\"\n [attr.aria-label]=\"copy().search\"\n (input)=\"onSearch($event)\"\n />\n </label>\n }\n\n <span class=\"bar-spacer\"></span>\n\n @if (canChooseView()) {\n <span class=\"views\">\n <button\n type=\"button\"\n class=\"view\"\n [class.is-on]=\"view() === 'grid'\"\n [attr.aria-pressed]=\"view() === 'grid'\"\n [attr.aria-label]=\"copy().viewGrid\"\n [pTooltip]=\"copy().viewGrid\"\n tooltipPosition=\"bottom\"\n (click)=\"chooseView('grid')\"\n >\n <i class=\"pi pi-th-large\" aria-hidden=\"true\"></i>\n </button>\n <button\n type=\"button\"\n class=\"view\"\n [class.is-on]=\"view() === 'rows'\"\n [attr.aria-pressed]=\"view() === 'rows'\"\n [attr.aria-label]=\"copy().viewRows\"\n [pTooltip]=\"copy().viewRows\"\n tooltipPosition=\"bottom\"\n (click)=\"chooseView('rows')\"\n >\n <i class=\"pi pi-list\" aria-hidden=\"true\"></i>\n </button>\n </span>\n }\n </div>\n\n @if (compact()) {\n @if (showNoResults()) {\n <div class=\"placeholder\">{{ copy().noResults }}</div>\n }\n\n <div\n class=\"cards\"\n [class.is-rows]=\"view() === 'rows'\"\n cdkDropList\n cdkDropListOrientation=\"mixed\"\n [cdkDropListDisabled]=\"dragLocked()\"\n [cdkDropListSortPredicate]=\"sortAllowed\"\n (cdkDropListDropped)=\"onCardDrop($event)\"\n >\n @if (loading()) {\n @for (item of placeholders(); track $index) {\n <div class=\"card\">\n <div class=\"card-top\">\n <p-skeleton height=\"15px\" width=\"52%\" />\n </div>\n <div class=\"card-foot\">\n <p-skeleton height=\"12px\" width=\"30%\" />\n <p-skeleton height=\"12px\" width=\"30%\" />\n </div>\n </div>\n }\n } @else {\n @for (row of pagedRows(); track $index) {\n <article class=\"card\" [class]=\"rowClass()(row)\" cdkDrag\n [cdkDragData]=\"row\"\n [cdkDragDisabled]=\"dragLocked()\"\n (cdkDragStarted)=\"dragStart.emit(row)\">\n <div class=\"card-top\">\n @if (reorderable()) {\n <button\n type=\"button\"\n class=\"grip\"\n cdkDragHandle\n [disabled]=\"dragLocked()\"\n [attr.aria-label]=\"copy().reorderHandle\"\n >\n <i class=\"pi pi-bars\" aria-hidden=\"true\"></i>\n </button>\n }\n @if (identityColumn(); as column) {\n <span class=\"card-name\">\n @if (cellTemplate(column.key); as custom) {\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\n />\n } @else {\n {{ text(column, row) }}\n }\n </span>\n }\n\n @if (statusColumn(); as column) {\n <span class=\"card-status\">\n @if (tagOf(column, row); as tag) {\n <p-tag [value]=\"tag.label\" [severity]=\"tag.severity ?? 'secondary'\" />\n } @else if (cellTemplate(column.key); as custom) {\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\n />\n } @else {\n {{ text(column, row) }}\n }\n </span>\n }\n </div>\n\n @if (attributeColumns().length || visibleActions(row).length) {\n <div class=\"card-foot\">\n <div class=\"card-fields\">\n @for (column of attributeColumns(); track column.key) {\n <div class=\"field\">\n <span class=\"field-label\">{{ column.header }}</span>\n <span class=\"field-value\">\n @if (cellTemplate(column.key); as custom) {\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\n />\n } @else if (linkOf(column, row); as target) {\n <nucleus-link\n [route]=\"target.route\"\n [queryParams]=\"target.queryParams ?? null\"\n [hint]=\"column.header\"\n >\n {{ text(column, row) }}\n </nucleus-link>\n } @else if (column.kind === 'switch') {\n <button\n type=\"button\"\n class=\"ns-switch\"\n role=\"switch\"\n [class.is-on]=\"isChecked(column, row)\"\n [attr.aria-checked]=\"isChecked(column, row)\"\n [attr.aria-label]=\"column.header\"\n [disabled]=\"isLocked(column, row)\"\n (click)=\"flip(column, row)\"\n >\n <span class=\"knob\"></span>\n </button>\n @if (tagOf(column, row); as tag) {\n <p-tag [value]=\"tag.label\" [severity]=\"tag.severity ?? 'secondary'\" />\n } @else {\n <span class=\"switch-label\">{{ text(column, row) }}</span>\n }\n } @else {\n {{ text(column, row) }}\n @if (tagOf(column, row); as tag) {\n <p-tag [value]=\"tag.label\" [severity]=\"tag.severity ?? 'secondary'\" />\n }\n }\n </span>\n </div>\n }\n </div>\n\n @if (visibleActions(row).length) {\n <div class=\"card-actions\">\n @for (entry of visibleActions(row); track entry.id) {\n <p-button\n [icon]=\"entry.icon\"\n [severity]=\"entry.tone === 'danger' ? 'danger' : 'secondary'\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"entry.label\"\n [disabled]=\"isActionLocked(entry, row)\"\n (onClick)=\"run(entry, row)\"\n />\n }\n </div>\n }\n </div>\n }\n </article>\n }\n }\n </div>\n\n @if (paginate()) {\n <div class=\"foot\">\n <p-paginator\n styleClass=\"ns-cards-paginator\"\n [first]=\"page()\"\n [rows]=\"rowsPerPage()\"\n [totalRecords]=\"filtered().length\"\n [rowsPerPageOptions]=\"pageSizes()\"\n (onPageChange)=\"onPage($event)\"\n />\n </div>\n }\n} @else {\n <p-table\n [value]=\"data()\"\n styleClass=\"ns-table\"\n [tableStyle]=\"tableStyle()\"\n [paginator]=\"paginate()\"\n [rows]=\"pageSize()\"\n [rowsPerPageOptions]=\"pageSizes()\"\n [alwaysShowPaginator]=\"true\"\n (onRowReorder)=\"onRowReorder($event)\"\n >\n <ng-template #header>\n <tr>\n @if (reorderable()) {\n <th class=\"grip-head\"></th>\n }\n @for (column of columns(); track column.key) {\n <th [class]=\"'align-' + (column.align ?? 'left')\" [style.width]=\"column.width\">\n {{ column.header }}\n </th>\n }\n @if (actions().length) {\n <th class=\"align-right\"></th>\n }\n </tr>\n </ng-template>\n\n <ng-template #body let-row let-rowIndex=\"rowIndex\">\n @if (loading()) {\n <tr class=\"is-skeleton\">\n @if (reorderable()) {\n <td class=\"grip-cell\"></td>\n }\n @for (column of columns(); track column.key) {\n <td [class]=\"'align-' + (column.align ?? 'left')\">\n <p-skeleton height=\"13px\" [width]=\"skeletonWidth(column)\" />\n </td>\n }\n @if (actions().length) {\n <td class=\"align-right actions\">\n <p-skeleton shape=\"circle\" size=\"26px\" />\n </td>\n }\n </tr>\n } @else {\n <tr\n [class]=\"rowClass()(row)\"\n [pReorderableRow]=\"rowIndex\"\n [pReorderableRowDisabled]=\"dragLocked()\"\n >\n @if (reorderable()) {\n <td class=\"grip-cell\">\n <span class=\"grip\" pReorderableRowHandle [attr.aria-label]=\"copy().reorderHandle\">\n <i class=\"pi pi-bars\" aria-hidden=\"true\"></i>\n </span>\n </td>\n }\n @for (column of columns(); track column.key) {\n <td [class]=\"'align-' + (column.align ?? 'left')\" [class.strong]=\"column.strong\">\n @if (cellTemplate(column.key); as custom) {\n <ng-container\n [ngTemplateOutlet]=\"custom\"\n [ngTemplateOutletContext]=\"{ $implicit: row, column: column }\"\n />\n } @else if (column.kind === 'switch') {\n <span class=\"switch-cell\">\n <button\n type=\"button\"\n class=\"ns-switch\"\n role=\"switch\"\n [class.is-on]=\"isChecked(column, row)\"\n [attr.aria-checked]=\"isChecked(column, row)\"\n [attr.aria-label]=\"text(column, row)\"\n [disabled]=\"isLocked(column, row)\"\n [pTooltip]=\"hintOf(column, row)\"\n tooltipPosition=\"top\"\n (click)=\"flip(column, row)\"\n >\n <span class=\"knob\"></span>\n </button>\n <span class=\"switch-label\">{{ text(column, row) }}</span>\n </span>\n } @else {\n {{ text(column, row) }}\n @if (tagOf(column, row); as tag) {\n <p-tag [value]=\"tag.label\" [severity]=\"tag.severity ?? 'secondary'\" />\n }\n }\n </td>\n }\n\n @if (actions().length) {\n <td class=\"align-right actions\">\n @for (entry of visibleActions(row); track entry.id) {\n <p-button\n [icon]=\"entry.icon\"\n [severity]=\"entry.tone === 'danger' ? 'danger' : 'secondary'\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [pTooltip]=\"entry.label\"\n tooltipPosition=\"left\"\n [ariaLabel]=\"entry.label\"\n [disabled]=\"isActionLocked(entry, row)\"\n (onClick)=\"run(entry, row)\"\n />\n }\n </td>\n }\n </tr>\n }\n </ng-template>\n </p-table>\n}\n}\n","export interface TreeRow {\n readonly id: string;\n readonly parentId: string | null;\n}\n\nexport function toggleCollapsed(collapsed: ReadonlySet<string>, id: string): ReadonlySet<string> {\n const next = new Set(collapsed);\n\n if (!next.delete(id)) next.add(id);\n\n return next;\n}\n\nexport function hasChildren(rows: readonly TreeRow[], id: string): boolean {\n return rows.some((row) => row.parentId === id);\n}\n\nexport function visibleTreeRows<T extends TreeRow>(\n rows: readonly T[],\n collapsed: ReadonlySet<string>,\n): T[] {\n if (collapsed.size === 0) return [...rows];\n\n const parents = new Map(rows.map((row) => [row.id, row.parentId]));\n\n const buried = (row: T): boolean => {\n let parentId = row.parentId;\n\n while (parentId) {\n if (collapsed.has(parentId)) return true;\n\n parentId = parents.get(parentId) ?? null;\n }\n\n return false;\n };\n\n return rows.filter((row) => !buried(row));\n}\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\n\nconst ORBIT = { rx: 78, ry: 196 } as const;\n\n@Component({\n selector: 'nucleus-mark',\n changeDetection: ChangeDetectionStrategy.OnPush,\n styles: `\n :host {\n display: block;\n }\n\n svg {\n display: block;\n }\n `,\n template: `\n <svg\n [attr.width]=\"size()\"\n [attr.height]=\"size()\"\n viewBox=\"-230 -230 460 460\"\n aria-hidden=\"true\"\n >\n @for (r of rotations; track $index) {\n <ellipse\n [attr.rx]=\"orbit.rx\"\n [attr.ry]=\"orbit.ry\"\n [attr.transform]=\"'rotate(' + r + ')'\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"18\"\n />\n }\n <circle r=\"42\" [attr.fill]=\"accent()\" />\n </svg>\n `,\n})\nexport class NucleusMark {\n readonly accent = input('#7C6CF5');\n readonly size = input(28);\n\n protected readonly orbit = ORBIT;\n protected readonly rotations = [0, 60, 120];\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\n\nimport { NucleusLanguage } from '../../i18n/nucleus-language';\nimport { readableOn } from '../../theme/contrast';\nimport {\n ACCENTS,\n AccentPreference,\n CANVASES,\n CanvasPreference,\n DENSITIES,\n DensityId,\n FRAMES,\n Frame,\n accentOn,\n accentById,\n canvasById,\n} from '../../theme/theme';\nimport { themeCopyOf } from '../../theme/theme.copy';\nimport { ThemeService } from '../../theme/theme.service';\n\ninterface FrameChoice {\n readonly id: Frame['id'];\n readonly label: string;\n readonly tokens: Frame['tokens'];\n}\n\ninterface CanvasChoice {\n readonly id: CanvasPreference;\n readonly label: string;\n readonly bg: string;\n readonly surface: string;\n readonly text: string;\n readonly icon: string | null;\n}\n\ninterface AccentChoice {\n readonly id: AccentPreference;\n readonly label: string;\n readonly color: string;\n readonly ink: string;\n}\n\ninterface DensityChoice {\n readonly id: DensityId;\n readonly label: string;\n readonly gap: number;\n}\n\n@Component({\n selector: 'nucleus-appearance',\n templateUrl: './nucleus-appearance.html',\n styleUrl: './nucleus-appearance.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusAppearance {\n private readonly theme = inject(ThemeService);\n private readonly language = inject(NucleusLanguage);\n\n protected readonly copy = computed(() => themeCopyOf(this.language.lang()));\n\n protected readonly appearance = this.theme.appearance;\n\n protected readonly canvasId = this.theme.canvasId;\n\n protected readonly frames = computed<FrameChoice[]>(() => {\n const labels = this.copy().frames;\n\n return FRAMES.map((frame) => ({ id: frame.id, label: labels[frame.id], tokens: frame.tokens }));\n });\n\n protected readonly canvases = computed<CanvasChoice[]>(() => {\n const labels = this.copy().canvases;\n\n const preview = (id: CanvasPreference): CanvasChoice => {\n const resolved = canvasById(id === 'system' ? this.theme.systemCanvasId() : id);\n\n return {\n id,\n label: labels[id],\n bg: resolved.tokens.bg,\n surface: resolved.tokens.surface,\n text: resolved.tokens.text,\n icon: id === 'system' ? 'pi pi-desktop' : null,\n };\n };\n\n return [...CANVASES.map((canvas) => preview(canvas.id)), preview('system')];\n });\n\n protected readonly accents = computed<AccentChoice[]>(() => {\n const labels = this.copy().accents;\n const canvas = this.canvasId();\n const auto = accentOn(accentById(this.theme.frame().accent), canvas);\n\n return [\n { id: 'auto' as AccentPreference, label: labels.auto, color: auto, ink: readableOn(auto) },\n ...ACCENTS.map((accent) => {\n const color = accentOn(accent, canvas);\n\n return { id: accent.id as AccentPreference, label: labels[accent.id], color, ink: readableOn(color) };\n }),\n ];\n });\n\n protected readonly densities = computed<DensityChoice[]>(() => {\n const labels = this.copy().densities;\n\n return DENSITIES.map((density) => ({\n id: density.id,\n label: labels[density.id],\n gap: Math.round(6 * density.scale),\n }));\n });\n\n protected pickFrame(id: Frame['id']): void {\n this.theme.setFrame(id);\n }\n\n protected pickCanvas(id: CanvasPreference): void {\n this.theme.setCanvas(id);\n }\n\n protected pickAccent(id: AccentPreference): void {\n this.theme.setAccent(id);\n }\n\n protected pickDensity(id: DensityId): void {\n this.theme.setDensity(id);\n }\n}\n","@let t = copy();\n@let current = appearance();\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.frameTitle }}</h3>\n <p class=\"group-hint\">{{ t.frameHint }}</p>\n\n <div class=\"frames\" role=\"radiogroup\" [attr.aria-label]=\"t.frameTitle\">\n @for (frame of frames(); track frame.id) {\n <button\n type=\"button\"\n class=\"frame\"\n role=\"radio\"\n [class.is-active]=\"frame.id === current.frame\"\n [attr.aria-checked]=\"frame.id === current.frame\"\n [attr.aria-label]=\"frame.label\"\n [style.--f-bg]=\"frame.tokens.bg\"\n [style.--f-raised]=\"frame.tokens.raised\"\n [style.--f-ink]=\"frame.tokens.ink\"\n [style.--f-muted]=\"frame.tokens.muted\"\n [style.--f-line]=\"frame.tokens.line\"\n [style.--f-glow]=\"frame.tokens.glow\"\n (click)=\"pickFrame(frame.id)\"\n >\n <span class=\"frame-chip\" aria-hidden=\"true\">\n <span class=\"frame-bar\">\n <span class=\"frame-dot\"></span>\n </span>\n <span class=\"frame-lower\">\n <span class=\"frame-rail\">\n <span class=\"frame-pin\"></span>\n <span class=\"frame-row is-on\"></span>\n <span class=\"frame-row\"></span>\n <span class=\"frame-row\"></span>\n </span>\n <span class=\"frame-canvas\"></span>\n </span>\n </span>\n <span class=\"frame-name\">{{ frame.label }}</span>\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.canvasTitle }}</h3>\n <p class=\"group-hint\">{{ t.canvasHint }}</p>\n\n <div class=\"canvases\" role=\"radiogroup\" [attr.aria-label]=\"t.canvasTitle\">\n @for (canvas of canvases(); track canvas.id) {\n <button\n type=\"button\"\n class=\"canvas\"\n role=\"radio\"\n [class.is-active]=\"canvas.id === current.canvas\"\n [attr.aria-checked]=\"canvas.id === current.canvas\"\n (click)=\"pickCanvas(canvas.id)\"\n >\n <span\n class=\"canvas-chip\"\n aria-hidden=\"true\"\n [style.background]=\"canvas.bg\"\n [style.color]=\"canvas.text\"\n >\n @if (canvas.icon) {\n <i [class]=\"canvas.icon\"></i>\n } @else {\n <span class=\"canvas-sheet\" [style.background]=\"canvas.surface\"></span>\n }\n </span>\n <span class=\"canvas-name\">{{ canvas.label }}</span>\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.accentTitle }}</h3>\n <p class=\"group-hint\">{{ t.accentHint }}</p>\n\n <div class=\"accents\" role=\"radiogroup\" [attr.aria-label]=\"t.accentTitle\">\n @for (accent of accents(); track accent.id) {\n <button\n type=\"button\"\n class=\"accent\"\n role=\"radio\"\n [class.is-auto]=\"accent.id === 'auto'\"\n [class.is-active]=\"accent.id === current.accent\"\n [attr.aria-checked]=\"accent.id === current.accent\"\n [attr.aria-label]=\"accent.label\"\n [title]=\"accent.label\"\n [style.background]=\"accent.color\"\n [style.color]=\"accent.ink\"\n (click)=\"pickAccent(accent.id)\"\n >\n @if (accent.id === current.accent) {\n <i class=\"pi pi-check\" aria-hidden=\"true\"></i>\n } @else if (accent.id === 'auto') {\n <i class=\"pi pi-sparkles\" aria-hidden=\"true\"></i>\n }\n </button>\n }\n </div>\n</section>\n\n<section class=\"group\">\n <h3 class=\"group-title\">{{ t.densityTitle }}</h3>\n <p class=\"group-hint\">{{ t.densityHint }}</p>\n\n <div class=\"densities\" role=\"radiogroup\" [attr.aria-label]=\"t.densityTitle\">\n @for (density of densities(); track density.id) {\n <button\n type=\"button\"\n class=\"density\"\n role=\"radio\"\n [class.is-active]=\"density.id === current.density\"\n [attr.aria-checked]=\"density.id === current.density\"\n (click)=\"pickDensity(density.id)\"\n >\n <span class=\"density-chip\" aria-hidden=\"true\" [style.gap.px]=\"density.gap\">\n <span class=\"density-row\"></span>\n <span class=\"density-row\"></span>\n <span class=\"density-row\"></span>\n </span>\n <span class=\"density-name\">{{ density.label }}</span>\n </button>\n }\n </div>\n</section>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n input,\n output,\n signal,\n viewChild,\n} from '@angular/core';\n\nimport {\n MenuLayout,\n MenuRow,\n MenuSection,\n foldText,\n matchesRow,\n selectableRows,\n} from './menu.models';\n\ninterface MenuMove {\n readonly delta: number;\n\n readonly wrap: boolean;\n}\n\n@Component({\n selector: 'nucleus-menu',\n templateUrl: './nucleus-menu.html',\n styleUrl: './nucleus-menu.css',\n host: {\n '[style.width.px]': 'width()',\n '[style.--menu-columns]': 'columns()',\n '(keydown)': 'onKeydown($event)',\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusMenu {\n readonly sections = input<readonly MenuSection[]>([]);\n\n readonly heading = input('');\n\n readonly badge = input<string | null>(null);\n\n readonly searchable = input(false);\n\n readonly searchPlaceholder = input('');\n\n readonly emptyText = input('');\n\n readonly keyboardHint = input('');\n\n readonly width = input(320);\n\n readonly layout = input<MenuLayout>('list');\n\n readonly columns = input(3);\n\n readonly select = output<MenuRow>();\n\n readonly dismiss = output<void>();\n\n protected readonly term = signal('');\n\n protected readonly grid = computed(() => this.layout() === 'grid');\n\n private readonly keyed = signal(false);\n\n private readonly pointed = computed(() => this.searchable() || this.keyed());\n\n private readonly searchBox = viewChild<ElementRef<HTMLInputElement>>('searchBox');\n\n private readonly root = viewChild.required<ElementRef<HTMLElement>>('root');\n\n protected readonly visible = computed<readonly MenuSection[]>(() => {\n const term = foldText(this.term().trim());\n\n if (!term) return this.sections();\n\n const rows = this.sections()\n .flatMap((section) => section.rows)\n .filter((row) => !row.current && matchesRow(row, term));\n\n return [{ id: 'results', label: null, rows }];\n });\n\n protected readonly isEmpty = computed(() => this.visible().every((s) => s.rows.length === 0));\n\n protected readonly showSearch = computed(() => this.searchable());\n\n private readonly reachable = computed(() => selectableRows(this.visible()));\n\n private readonly activeId = signal<string | null>(null);\n\n private readonly syncActive = effect(() => {\n const rows = this.reachable();\n const current = this.activeId();\n\n if (rows.some((row) => row.id === current)) return;\n\n this.activeId.set(rows[0]?.id ?? null);\n });\n\n constructor() {\n queueMicrotask(() => this.focusEntry());\n }\n\n protected isActive(row: MenuRow): boolean {\n return this.pointed() && row.id === this.activeId();\n }\n\n protected onTerm(value: string): void {\n this.term.set(value);\n }\n\n protected choose(row: MenuRow): void {\n if (row.disabled || row.current) return;\n\n this.select.emit(row);\n }\n\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n event.preventDefault();\n this.dismiss.emit();\n\n return;\n }\n\n const move = this.moveOf(event.key);\n\n if (move) {\n event.preventDefault();\n\n if (this.pointed()) this.step(move);\n\n this.keyed.set(true);\n\n return;\n }\n\n if (event.key === 'Enter' && this.pointed()) {\n const row = this.reachable().find((item) => item.id === this.activeId());\n\n if (!row) return;\n\n event.preventDefault();\n this.choose(row);\n }\n }\n\n private moveOf(key: string): MenuMove | null {\n const grid = this.grid();\n const jump = grid ? this.columns() : 1;\n\n if (key === 'ArrowDown') return { delta: jump, wrap: !grid };\n if (key === 'ArrowUp') return { delta: -jump, wrap: !grid };\n\n if (!grid || this.term()) return null;\n\n if (key === 'ArrowRight') return { delta: 1, wrap: true };\n if (key === 'ArrowLeft') return { delta: -1, wrap: true };\n\n return null;\n }\n\n private step(move: MenuMove): void {\n const rows = this.reachable();\n\n if (!rows.length) return;\n\n const index = rows.findIndex((row) => row.id === this.activeId());\n const next = this.landing(index, move, rows.length);\n\n this.activeId.set(rows[next].id);\n this.scrollIntoView(rows[next].id);\n }\n\n private landing(index: number, move: MenuMove, size: number): number {\n const target = index + move.delta;\n\n if (move.wrap) return (target + size) % size;\n if (target < 0) return Math.max(index, 0);\n if (target < size) return target;\n\n const lastRowStart = size - 1 - ((size - 1) % move.delta);\n\n return index < lastRowStart ? size - 1 : index;\n }\n\n private scrollIntoView(id: string): void {\n const target = this.root().nativeElement.querySelector<HTMLElement>(`[data-row=\"${id}\"]`);\n\n target?.scrollIntoView({ block: 'nearest' });\n }\n\n private focusEntry(): void {\n const box = this.searchBox()?.nativeElement;\n\n if (box) {\n box.focus();\n\n return;\n }\n\n this.root().nativeElement.focus();\n }\n}\n","<div class=\"menu\" #root tabindex=\"-1\" [class.is-grid]=\"grid()\">\n @if (heading() && !grid()) {\n <div class=\"menu-head\">\n <h4>{{ heading() }}</h4>\n @if (badge(); as count) {\n <span class=\"menu-badge\">{{ count }}</span>\n }\n </div>\n }\n\n @if (showSearch()) {\n <div class=\"menu-search\">\n <label class=\"menu-field\">\n <i class=\"pi pi-search\" aria-hidden=\"true\"></i>\n <input\n #searchBox\n type=\"text\"\n autocomplete=\"off\"\n [attr.aria-label]=\"searchPlaceholder()\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"term()\"\n (input)=\"onTerm($any($event.target).value)\"\n />\n </label>\n </div>\n }\n\n <div class=\"menu-body\" role=\"listbox\" [attr.aria-label]=\"heading()\">\n @if (isEmpty()) {\n <p class=\"menu-empty\">{{ emptyText() }}</p>\n }\n\n @for (section of visible(); track section.id) {\n @if (section.rows.length) {\n @if (section.label) {\n <p class=\"menu-section\">\n {{ section.label }}\n @if (grid()) {\n <span class=\"menu-count\">{{ section.rows.length }}</span>\n }\n </p>\n }\n\n <div class=\"menu-group\" role=\"group\" [attr.aria-label]=\"section.label\">\n @for (row of section.rows; track row.id) {\n <button\n type=\"button\"\n class=\"menu-row\"\n role=\"option\"\n [attr.data-row]=\"row.id\"\n [attr.title]=\"grid() && row.disabled ? row.tag : null\"\n [class.is-current]=\"row.current\"\n [class.is-locked]=\"row.disabled\"\n [class.is-active]=\"isActive(row)\"\n [attr.aria-selected]=\"isActive(row)\"\n [disabled]=\"row.disabled || row.current\"\n (click)=\"choose(row)\"\n >\n @if (row.tile; as tile) {\n <span\n class=\"menu-tile\"\n [class.is-ghost]=\"tile.ghost\"\n [class.is-outline]=\"grid() && row.disabled\"\n [style.background]=\"tile.ghost || (grid() && row.disabled) ? null : tile.color\"\n [style.color]=\"tile.ghost || (grid() && row.disabled) ? null : tile.ink\"\n aria-hidden=\"true\"\n >\n @if (tile.icon) {\n <i [class]=\"tile.icon\"></i>\n } @else {\n {{ tile.label }}\n }\n </span>\n }\n\n <span class=\"menu-text\">\n <span class=\"menu-name\">{{ row.name }}</span>\n @if (grid() && row.current && row.tag) {\n <span class=\"menu-meta\">{{ row.tag }}</span>\n } @else if (!grid() && row.meta) {\n <span class=\"menu-meta\">{{ row.meta }}</span>\n }\n </span>\n\n @if (grid() && row.current) {\n <span class=\"menu-end\">\n <span class=\"menu-dot\" aria-hidden=\"true\"></span>\n </span>\n } @else if (!grid()) {\n <span class=\"menu-end\">\n @if (row.tag) {\n <span class=\"menu-tag\" [class.is-current]=\"row.current\">{{ row.tag }}</span>\n } @else if (!row.disabled && !row.current) {\n <i class=\"pi pi-chevron-right menu-chevron\" aria-hidden=\"true\"></i>\n }\n </span>\n }\n </button>\n }\n </div>\n }\n }\n </div>\n\n @if (showSearch() && keyboardHint()) {\n <p class=\"menu-foot\">{{ keyboardHint() }}</p>\n }\n</div>\n","import { Injectable, signal } from '@angular/core';\n\nconst STORAGE_KEY = 'nucleus_recent_apps';\n\nconst KEEP = 8;\n\nfunction readIds(): readonly string[] {\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n\n if (!raw) return [];\n\n const parsed = JSON.parse(raw) as unknown;\n\n if (!Array.isArray(parsed)) return [];\n\n return parsed.filter((value): value is string => typeof value === 'string').slice(0, KEEP);\n } catch {\n return [];\n }\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NucleusRecentApps {\n private readonly _ids = signal<readonly string[]>(readIds());\n\n readonly ids = this._ids.asReadonly();\n\n remember(appId: string): void {\n const key = appId.toLowerCase();\n\n this._ids.update((ids) => [key, ...ids.filter((id) => id !== key)].slice(0, KEEP));\n\n try {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this._ids()));\n } catch {}\n }\n\n pick<T extends { readonly id: string }>(source: readonly T[], limit: number): T[] {\n const byId = new Map(source.map((item) => [item.id.toLowerCase(), item]));\n\n return this._ids()\n .map((id) => byId.get(id))\n .filter((item): item is T => item !== undefined)\n .slice(0, limit);\n }\n\n clear(): void {\n this._ids.set([]);\n\n try {\n localStorage.removeItem(STORAGE_KEY);\n } catch {}\n }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\nconst W = 1280;\nconst H = 720;\n\nconst STARS = Array.from({ length: 130 }, (_, i) => {\n const a = i * 2.399963;\n const big = i % 11 === 0;\n const sway = Math.sin(a * 1.7);\n const lift = Math.cos(a * 2.3);\n\n return {\n cx: +((Math.sin(a * 7.13) * 0.5 + 0.5) * W).toFixed(2),\n cy: +((Math.cos(a * 3.77) * 0.5 + 0.5) * H).toFixed(2),\n r: +((big ? 2.4 : 0.9) + (i % 4) * 0.5).toFixed(2),\n opacity: ((big ? 0.85 : 0.42) + (i % 5) * 0.09).toFixed(2),\n dx: `${(sway * 26).toFixed(1)}px`,\n dy: `${(lift * 18).toFixed(1)}px`,\n duration: `${(11 + (i % 9) * 1.7).toFixed(1)}s`,\n delay: `-${((i % 13) * 0.85).toFixed(2)}s`,\n };\n});\n\n@Component({\n selector: 'nucleus-starfield',\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <svg\n [attr.viewBox]=\"'0 0 ' + W + ' ' + H\"\n preserveAspectRatio=\"xMidYMid slice\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <defs>\n <radialGradient id=\"ns-starfield-glow\" cx=\"50%\" cy=\"0%\" r=\"75%\">\n <stop offset=\"0%\" stop-color=\"var(--ac-accent)\" stop-opacity=\"0.18\" />\n <stop offset=\"70%\" stop-color=\"var(--ac-accent)\" stop-opacity=\"0\" />\n </radialGradient>\n </defs>\n\n <rect width=\"100%\" height=\"100%\" fill=\"url(#ns-starfield-glow)\" />\n\n @for (star of stars; track $index) {\n <circle\n [attr.cx]=\"star.cx\"\n [attr.cy]=\"star.cy\"\n [attr.r]=\"star.r\"\n [style.--o]=\"star.opacity\"\n [style.--dx]=\"star.dx\"\n [style.--dy]=\"star.dy\"\n [style.--dur]=\"star.duration\"\n [style.--delay]=\"star.delay\"\n fill=\"#ffffff\"\n />\n }\n </svg>\n `,\n styles: `\n :host {\n position: fixed;\n inset: 0;\n z-index: -1;\n display: block;\n pointer-events: none;\n background: var(--ac-bg);\n }\n\n svg {\n display: block;\n width: 100%;\n height: 100%;\n }\n\n circle {\n opacity: var(--o);\n animation: ns-drift var(--dur) ease-in-out var(--delay) infinite alternate;\n }\n\n @keyframes ns-drift {\n from {\n transform: translate(0, 0);\n opacity: var(--o);\n }\n to {\n transform: translate(var(--dx), var(--dy));\n opacity: calc(var(--o) * 0.3);\n }\n }\n\n @media (prefers-reduced-motion: reduce) {\n circle {\n animation: none;\n }\n }\n `,\n})\nexport class NucleusStarfield {\n protected readonly W = W;\n protected readonly H = H;\n protected readonly stars = STARS;\n}\n","import { NucleusLang } from '../../i18n/nucleus-language';\n\nexport interface ShellCopy {\n readonly navToggle: string;\n readonly appsLauncher: string;\n readonly appsEmpty: string;\n readonly appsSwitch: string;\n readonly appsSearch: string;\n readonly appsNoMatch: string;\n readonly appsAvailable: string;\n readonly appsUpcoming: string;\n readonly appsHere: string;\n readonly keyboardHint: string;\n readonly accountSwitchHint: string;\n readonly signOutHint: string;\n readonly settingsTitle: string;\n readonly signOut: string;\n readonly accountManage: string;\n readonly accountSwitch: string;\n readonly homeLabel: string;\n readonly accessLoading: string;\n readonly accessEmpty: string;\n readonly accountScope: string;\n readonly hintComingSoon: string;\n readonly hintNotDeployed: string;\n readonly roleCaption: string;\n readonly companyLabel: string;\n readonly companyPlaceholder: string;\n readonly siteLabel: string;\n readonly sitePlaceholder: string;\n readonly sitesLoading: string;\n readonly sitesEmpty: string;\n readonly relationOwner: string;\n readonly relationCollaborator: string;\n readonly noCompanyTitle: string;\n readonly noCompanyHint: string;\n}\n\nexport const SHELL_COPY: Readonly<Record<NucleusLang, ShellCopy>> = {\n es: {\n navToggle: 'Mostrar u ocultar el menú',\n appsLauncher: 'Aplicaciones',\n appsEmpty: 'No hay otras aplicaciones',\n appsSwitch: 'Cambiar de aplicación',\n appsSearch: 'Buscar aplicación',\n appsNoMatch: 'Ninguna aplicación coincide con lo que escribiste.',\n appsAvailable: 'Disponibles',\n appsUpcoming: 'En preparación',\n appsHere: 'Estás aquí',\n keyboardHint: '← ↑ ↓ → moverse · ↵ abrir · esc cerrar',\n accountSwitchHint: 'Entrar con otro correo',\n signOutHint: 'Salir de la suite',\n settingsTitle: 'Ajustes',\n signOut: 'Cerrar sesión',\n accountManage: 'Gestionar mi cuenta',\n accountSwitch: 'Cambiar de cuenta',\n homeLabel: 'Inicio',\n accessLoading: 'Cargando accesos...',\n accessEmpty: 'Sin accesos asignados',\n accountScope: 'Mi cuenta',\n hintComingSoon: 'Próximamente',\n hintNotDeployed: 'Sin publicar',\n roleCaption: 'Tu rol',\n companyLabel: 'Compañía',\n companyPlaceholder: 'Selecciona una compañía',\n siteLabel: 'Sede',\n sitePlaceholder: 'Selecciona una sede',\n sitesLoading: 'Cargando sedes...',\n sitesEmpty: 'Esta compañía no tiene sedes a tu alcance',\n relationOwner: 'Propietario',\n relationCollaborator: 'Colaborador',\n noCompanyTitle: 'Te falta una compañía',\n noCompanyHint:\n 'Para trabajar en las aplicaciones necesitas al menos una compañía con una sede, ' +\n 'propia o donde te hayan invitado. Puedes entrar igual, pero el menú saldrá vacío.',\n },\n en: {\n navToggle: 'Show or hide the menu',\n appsLauncher: 'Applications',\n appsEmpty: 'No other applications',\n appsSwitch: 'Switch application',\n appsSearch: 'Search applications',\n appsNoMatch: 'No application matches what you typed.',\n appsAvailable: 'Available',\n appsUpcoming: 'Coming soon',\n appsHere: 'You are here',\n keyboardHint: '← ↑ ↓ → move · ↵ open · esc close',\n accountSwitchHint: 'Sign in with another address',\n signOutHint: 'Leave the suite',\n settingsTitle: 'Settings',\n signOut: 'Sign out',\n accountManage: 'Manage my account',\n accountSwitch: 'Switch account',\n homeLabel: 'Home',\n accessLoading: 'Loading access...',\n accessEmpty: 'No access granted',\n accountScope: 'My account',\n hintComingSoon: 'Coming soon',\n hintNotDeployed: 'Not deployed',\n roleCaption: 'Your role',\n companyLabel: 'Company',\n companyPlaceholder: 'Select a company',\n siteLabel: 'Site',\n sitePlaceholder: 'Select a site',\n sitesLoading: 'Loading sites...',\n sitesEmpty: 'This company has no sites available to you',\n relationOwner: 'Owner',\n relationCollaborator: 'Collaborator',\n noCompanyTitle: 'You need a company',\n noCompanyHint:\n 'To work in the applications you need at least one company with a site, your own or ' +\n 'one you have been invited to. You can still open them, but the menu will be empty.',\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n Injector,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { AvatarModule } from 'primeng/avatar';\nimport { ButtonModule } from 'primeng/button';\nimport { BreadcrumbModule } from 'primeng/breadcrumb';\nimport { ConfirmDialogModule } from 'primeng/confirmdialog';\nimport { ToastModule } from 'primeng/toast';\nimport { MenuItem } from 'primeng/api';\nimport { DrawerModule } from 'primeng/drawer';\nimport { PopoverModule } from 'primeng/popover';\nimport { SelectModule } from 'primeng/select';\nimport { SkeletonModule } from 'primeng/skeleton';\nimport { TagModule } from 'primeng/tag';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { CompanyOption, LauncherApp, MenuNode, Site } from '../../api/api.models';\nimport { SessionService } from '../../api/session.service';\nimport { nucleusLogoutUrl } from '../../auth/logout';\nimport { NucleusAuth } from '../../auth/nucleus-auth';\nimport { NucleusSessionAuth } from '../../auth/session-auth.service';\nimport { NUCLEUS_CONFIG } from '../../config/nucleus-config';\nimport { NUCLEUS_HOME, isHomeRoute, normalizeHomeRoute } from '../../config/nucleus-home';\nimport { commonCopyOf } from '../../i18n/common.copy';\nimport { NucleusLang, NucleusLanguage } from '../../i18n/nucleus-language';\nimport { ThemeService } from '../../theme/theme.service';\nimport { NucleusAppearance } from '../appearance/nucleus-appearance';\nimport { MenuRow, MenuSection, menuGlyph, menuTile } from '../menu/menu.models';\nimport { NucleusMenu } from '../menu/nucleus-menu';\nimport { NucleusRecentApps } from '../menu/recent-apps.service';\nimport { NUCLEUS_ICONS, NucleusLordicon } from '../lordicon/lordicon';\nimport { NucleusPage } from '../page/nucleus-page';\nimport { NucleusMark } from '../nucleus-mark/nucleus-mark';\nimport { NucleusStarfield } from '../starfield/starfield';\nimport { SHELL_COPY } from './shell.copy';\n\nconst LAUNCHER_RICH_THRESHOLD = 6;\n\nconst SUITE_PREFIX = 'Nucleus ';\n\nconst FALLBACK_APP_COLOR = '#64748b';\n\nconst HOME_MENU_ID = 'nucleus-home';\n\nexport interface ShellNavItem {\n readonly id: string;\n readonly icon: string;\n readonly label: string;\n}\n\ninterface CompanyChoice extends CompanyOption {\n readonly tag: string;\n}\n\ninterface ShellIdentity {\n readonly name: string;\n readonly email: string;\n readonly photoUrl: string | null;\n}\n\n@Component({\n selector: 'nucleus-shell',\n imports: [\n NgTemplateOutlet,\n AvatarModule,\n BreadcrumbModule,\n ButtonModule,\n ConfirmDialogModule,\n ToastModule,\n DrawerModule,\n PopoverModule,\n SelectModule,\n SkeletonModule,\n TagModule,\n TooltipModule,\n FormsModule,\n NucleusAppearance,\n NucleusLordicon,\n NucleusMenu,\n NucleusMark,\n NucleusStarfield,\n ],\n templateUrl: './nucleus-shell.html',\n styleUrl: './nucleus-shell.css',\n host: { '[style.--ns-topbar-h]': 'topbarHeight()' },\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NucleusShell {\n private readonly session = inject(SessionService);\n private readonly sessionAuth = inject(NucleusSessionAuth);\n private readonly themes = inject(ThemeService);\n private readonly recents = inject(NucleusRecentApps);\n private readonly language = inject(NucleusLanguage);\n private readonly page = inject(NucleusPage);\n private readonly config = inject(NUCLEUS_CONFIG);\n private readonly injector = inject(Injector);\n private readonly router = inject(Router);\n\n readonly brand = input('SUITE');\n readonly heading = input('');\n readonly navItems = input<readonly ShellNavItem[]>([]);\n readonly activeNavId = input<string | null>(null);\n readonly selectedMenuId = input<string | null>(null);\n\n readonly navSelect = output<string>();\n readonly menuSelect = output<MenuNode>();\n\n protected readonly lang = this.language.lang;\n protected readonly icons = NUCLEUS_ICONS;\n protected readonly menuPlaceholders = ['64%', '80%', '52%', '72%', '58%'];\n\n protected readonly title = computed(() => this.heading() || this.page.heading());\n\n protected readonly pageActions = this.page.actions;\n\n protected readonly home = computed<MenuItem>(() => ({\n icon: 'pi pi-home',\n routerLink: this.homeRoute,\n }));\n\n protected readonly crumbs = computed<MenuItem[]>(() =>\n this.page.crumbs().map((crumb) => ({\n label: crumb.label,\n routerLink: crumb.route ? [...crumb.route] : undefined,\n })),\n );\n protected readonly copy = computed(() => SHELL_COPY[this.lang()]);\n\n protected readonly starfield = this.themes.starfield;\n\n private readonly homeRoute = normalizeHomeRoute(inject(NUCLEUS_HOME));\n\n private readonly currentUrl = signal(this.router.url);\n\n protected readonly menu = computed<readonly MenuNode[]>(() => {\n const nodes = this.session.menu();\n\n if (!nodes.length && !this.session.me()) return nodes;\n if (hasRoute(nodes, this.homeRoute)) return nodes;\n\n return [homeNode(this.homeRoute, this.copy().homeLabel), ...nodes];\n });\n\n private readonly collapsedIds = signal<ReadonlySet<string>>(new Set<string>());\n protected readonly menuLoading = this.session.loading;\n protected readonly menuError = this.session.error;\n protected readonly launcherApps = this.session.apps;\n protected readonly switching = this.session.switching;\n\n private readonly narrowQuery =\n typeof window === 'undefined' ? null : window.matchMedia('(max-width: 720px)');\n\n protected readonly narrow = signal(this.narrowQuery?.matches ?? false);\n\n protected readonly sidebarOpen = signal(!(this.narrowQuery?.matches ?? false));\n\n protected readonly settingsOpen = signal(false);\n\n protected readonly companyChoice = signal<string | null>(null);\n protected readonly siteChoice = signal<string | null>(null);\n protected readonly siteOptions = signal<Site[]>([]);\n protected readonly sitesLoading = signal(false);\n\n private readonly auth = this.injector.get(NucleusAuth, null);\n\n private sitesCompanyId: string | null = null;\n\n protected readonly identity = computed<ShellIdentity | null>(() => {\n const me = this.session.me();\n\n if (me) {\n return {\n name: me.displayName ?? me.userId,\n email: me.userId,\n photoUrl: me.photoUrl,\n };\n }\n\n const user = this.auth?.user() ?? null;\n\n if (!user) return null;\n\n return {\n name: user.displayName ?? user.email ?? user.providerUserId,\n email: user.email ?? user.providerUserId,\n photoUrl: user.photoUrl,\n };\n });\n\n protected readonly initials = computed(() => initialsOf(this.identity()?.name ?? ''));\n\n protected readonly canSwitchAccount = computed(() => this.auth?.switchAccount !== undefined);\n\n protected readonly hasCompany = computed(() => this.session.companies().length > 0);\n\n protected readonly companyChoices = computed<CompanyChoice[]>(() => {\n const t = this.copy();\n\n return this.session.companyOptions().map((company) => ({\n ...company,\n tag: company.relation === 'owner' ? t.relationOwner : t.relationCollaborator,\n }));\n });\n\n protected readonly roleName = this.session.roleName;\n\n protected readonly words = computed(() => commonCopyOf(this.lang()));\n\n protected readonly hasSiteContext = computed(() => this.session.scope() === 'site');\n\n protected readonly launcherRich = computed(\n () => this.launcherApps().length > LAUNCHER_RICH_THRESHOLD,\n );\n\n protected readonly launcherSections = computed<MenuSection[]>(() => {\n const t = this.copy();\n const apps = this.launcherApps();\n const current = this.session.currentApp();\n const open = apps.filter((app) => this.canOpen(app));\n const pending = apps.filter((app) => !this.canOpen(app));\n const sections: MenuSection[] = [];\n\n if (current) {\n sections.push({ id: 'current', label: null, rows: [this.appRow(current, true)] });\n }\n\n if (open.length) {\n sections.push({\n id: 'available',\n label: t.appsAvailable,\n rows: open.map((app) => this.appRow(app, false)),\n });\n }\n\n if (pending.length) {\n sections.push({\n id: 'upcoming',\n label: t.appsUpcoming,\n rows: pending.map((app) => this.appRow(app, false)),\n });\n }\n\n return sections;\n });\n\n protected readonly accountSections = computed<MenuSection[]>(() => {\n const t = this.copy();\n const rows: MenuRow[] = [];\n\n if (this.canSwitchAccount()) {\n rows.push({\n id: 'switch',\n name: t.accountSwitch,\n meta: t.accountSwitchHint,\n tile: menuGlyph('pi pi-users'),\n tag: null,\n current: false,\n disabled: false,\n });\n }\n\n rows.push({\n id: 'signout',\n name: t.signOut,\n meta: t.signOutHint,\n tile: menuGlyph('pi pi-sign-out'),\n tag: null,\n current: false,\n disabled: false,\n });\n\n return [{ id: 'actions', label: null, rows }];\n });\n\n protected readonly accountContext = computed(() => {\n const company = this.companyChoices().find((item) => item.id === this.companyChoice());\n const site = this.session.siteName();\n\n if (company && site) return `${company.name} · ${site}`;\n if (company) return company.name;\n\n return this.copy().accountScope;\n });\n\n protected readonly sitePlaceholder = computed(() => {\n const t = this.copy();\n\n if (this.sitesLoading()) return t.sitesLoading;\n if (!this.siteOptions().length) return t.sitesEmpty;\n\n return t.sitePlaceholder;\n });\n\n protected readonly topbarHeight = computed(() =>\n this.narrow() && this.hasSiteContext() ? '100px' : '56px',\n );\n\n private readonly syncContext = effect(() => {\n const companyId = this.session.companyId();\n const siteId = this.session.siteId();\n\n untracked(() => {\n this.companyChoice.set(companyId);\n this.siteChoice.set(siteId);\n\n if (companyId) void this.loadSites(companyId);\n else this.siteOptions.set([]);\n });\n });\n\n private lastUid: string | null = null;\n\n private readonly watchIdentity = effect(() => {\n const uid = this.auth?.user()?.uid ?? null;\n\n untracked(() => {\n if (!uid) return;\n\n if (this.lastUid === null) {\n this.lastUid = uid;\n\n return;\n }\n\n if (this.lastUid === uid) return;\n\n this.lastUid = uid;\n\n this.goHome();\n });\n });\n\n private readonly loadSession = effect(() => {\n const language = this.lang();\n const user = this.auth?.user() ?? null;\n\n if (this.auth && !user) return;\n\n untracked(() => void this.session.load(language));\n });\n\n constructor() {\n const destroyRef = inject(DestroyRef);\n\n const navigation = this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) this.currentUrl.set(event.urlAfterRedirects);\n });\n\n destroyRef.onDestroy(() => navigation.unsubscribe());\n\n const query = this.narrowQuery;\n\n if (!query) return;\n\n const onChange = (event: MediaQueryListEvent) => {\n this.narrow.set(event.matches);\n this.sidebarOpen.set(!event.matches);\n };\n\n query.addEventListener('change', onChange);\n\n destroyRef.onDestroy(() => query.removeEventListener('change', onChange));\n }\n\n protected setLang(lang: NucleusLang): void {\n this.language.setLang(lang);\n }\n\n protected toggleSidebar(): void {\n this.sidebarOpen.update((open) => !open);\n }\n\n protected selectNav(id: string): void {\n this.navSelect.emit(id);\n this.closeSidebarOnNarrow();\n }\n\n protected isGroup(node: MenuNode): boolean {\n return node.children.length > 0;\n }\n\n protected isExpanded(node: MenuNode): boolean {\n return !this.collapsedIds().has(node.id);\n }\n\n protected selectMenu(node: MenuNode): void {\n if (this.isGroup(node)) {\n this.collapsedIds.update((ids) => {\n const next = new Set(ids);\n\n if (!next.delete(node.id)) next.add(node.id);\n\n return next;\n });\n\n return;\n }\n\n if (!node.route) return;\n\n this.menuSelect.emit(node);\n\n void this.router.navigateByUrl(node.route);\n\n this.closeSidebarOnNarrow();\n }\n\n private closeSidebarOnNarrow(): void {\n if (this.narrow()) this.sidebarOpen.set(false);\n }\n\n protected isSelected(node: MenuNode): boolean {\n if (node.id === HOME_MENU_ID) return isHomeRoute(this.homeRoute, this.currentUrl());\n\n return this.selectedMenuId() === node.id;\n }\n\n protected async onCompanyChange(companyId: string | null): Promise<void> {\n if (!companyId || companyId === this.session.companyId()) return;\n\n this.companyChoice.set(companyId);\n this.siteChoice.set(null);\n\n const sites = await this.loadSites(companyId);\n const first = sites[0]?.id ?? null;\n\n this.siteChoice.set(first);\n\n if (first) {\n await this.session.switchContext(companyId, first);\n\n this.goHome();\n }\n }\n\n protected async onSiteChange(siteId: string | null): Promise<void> {\n const companyId = this.companyChoice();\n\n if (!siteId || !companyId || siteId === this.session.siteId()) return;\n\n this.siteChoice.set(siteId);\n\n await this.session.switchContext(companyId, siteId);\n\n this.goHome();\n }\n\n private goHome(): void {\n if (isHomeRoute(this.homeRoute, this.router.url)) return;\n\n void this.router.navigateByUrl(this.homeRoute);\n }\n\n private appRow(app: LauncherApp, current: boolean): MenuRow {\n const hint = current ? this.copy().appsHere : this.launchHint(app);\n const name = shortAppName(app.name);\n\n return {\n id: app.id,\n name,\n meta: app.description,\n tile: menuTile(initialsOf(name), app.icon, app.color ?? FALLBACK_APP_COLOR),\n tag: hint || null,\n current,\n disabled: !current && !this.canOpen(app),\n };\n }\n\n protected onLauncherSelect(row: MenuRow): void {\n const app = this.launcherApps().find((item) => item.id === row.id);\n\n if (app) this.launch(app);\n }\n\n protected onAccountSelect(row: MenuRow): void {\n if (row.id === 'switch') {\n void this.switchAccount();\n\n return;\n }\n\n void this.signOut();\n }\n\n protected canOpen(app: LauncherApp): boolean {\n return app.status === 1 && !!app.url;\n }\n\n protected launch(app: LauncherApp): void {\n if (!this.canOpen(app)) return;\n\n this.recents.remember(app.id);\n\n const target = new URL(app.url as string, window.location.origin);\n\n if (target.origin === window.location.origin) {\n void this.router.navigateByUrl(target.pathname + target.search);\n\n return;\n }\n\n window.location.href = app.url as string;\n }\n\n protected appInitials(app: LauncherApp): string {\n return initialsOf(app.name);\n }\n\n protected launchHint(app: LauncherApp): string {\n const t = this.copy();\n\n if (app.status !== 1) return t.hintComingSoon;\n if (!app.url) return t.hintNotDeployed;\n\n return '';\n }\n\n protected async switchAccount(): Promise<void> {\n await this.auth?.switchAccount?.();\n }\n\n protected async signOut(): Promise<void> {\n await this.sessionAuth.clear();\n await this.auth?.signOut?.();\n\n const landing = this.config.landingUrl;\n\n if (landing) window.location.href = nucleusLogoutUrl(landing);\n }\n\n private async loadSites(companyId: string): Promise<Site[]> {\n if (this.sitesCompanyId === companyId) return this.siteOptions();\n\n this.sitesCompanyId = companyId;\n this.sitesLoading.set(true);\n\n try {\n const sites = await this.session.accessibleSites(companyId);\n\n this.siteOptions.set(sites);\n\n return sites;\n } catch (error) {\n this.sitesCompanyId = null;\n this.siteOptions.set([]);\n console.error('[shell] no se pudieron cargar las sedes', error);\n\n return [];\n } finally {\n this.sitesLoading.set(false);\n }\n }\n}\n\nfunction shortAppName(name: string): string {\n if (!name.startsWith(SUITE_PREFIX)) return name;\n\n return name.slice(SUITE_PREFIX.length).trim() || name;\n}\n\nfunction initialsOf(source: string): string {\n const parts = source.trim().split(/\\s+/).filter(Boolean);\n\n if (!parts.length) return '?';\n if (parts.length === 1) return parts[0].slice(0, 2).toUpperCase();\n\n return (parts[0][0] + parts[1][0]).toUpperCase();\n}\n\nfunction hasRoute(nodes: readonly MenuNode[], route: string): boolean {\n return nodes.some((node) => node.route === route || hasRoute(node.children, route));\n}\n\nfunction homeNode(route: string, label: string): MenuNode {\n return {\n id: HOME_MENU_ID,\n label,\n icon: 'pi pi-home',\n route,\n sortOrder: -1,\n canView: true,\n canInsert: false,\n canEdit: false,\n canDelete: false,\n canExport: false,\n children: [],\n };\n}\n","@let t = copy();\n@let me = identity();\n\n@if (starfield()) {\n <nucleus-starfield />\n}\n\n<header class=\"topbar ns-frame\">\n <div class=\"side\">\n <p-button\n icon=\"pi pi-bars\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.navToggle\"\n [pTooltip]=\"t.navToggle\"\n tooltipPosition=\"bottom\"\n (onClick)=\"toggleSidebar()\"\n />\n\n <div class=\"brand\">\n <nucleus-mark [size]=\"20\" />\n <div class=\"brand-name\">\n <span class=\"brand-primary\">NUCLEUS</span>\n <span class=\"brand-secondary\">{{ brand() }}</span>\n </div>\n </div>\n\n </div>\n\n @if (hasSiteContext()) {\n <div class=\"context ns-context\">\n <p-select\n styleClass=\"context-select\"\n [options]=\"companyChoices()\"\n optionValue=\"id\"\n optionLabel=\"name\"\n [ngModel]=\"companyChoice()\"\n (ngModelChange)=\"onCompanyChange($event)\"\n [placeholder]=\"t.companyPlaceholder\"\n [disabled]=\"switching()\"\n [filter]=\"companyChoices().length > 8\"\n filterBy=\"name\"\n [filterPlaceholder]=\"words().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ariaLabel]=\"t.companyLabel\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <ng-template #item let-option>\n <span class=\"company-option\">\n <span class=\"company-name\">{{ option.name }}</span>\n <p-tag [value]=\"option.tag\" severity=\"secondary\" />\n </span>\n </ng-template>\n </p-select>\n\n <p-select\n styleClass=\"context-select\"\n [options]=\"siteOptions()\"\n optionValue=\"id\"\n optionLabel=\"name\"\n [ngModel]=\"siteChoice()\"\n (ngModelChange)=\"onSiteChange($event)\"\n [placeholder]=\"sitePlaceholder()\"\n [disabled]=\"switching() || sitesLoading() || !siteOptions().length\"\n [filter]=\"siteOptions().length > 8\"\n filterBy=\"name\"\n [filterPlaceholder]=\"words().search\"\n [autofocusFilter]=\"true\"\n [resetFilterOnHide]=\"true\"\n [ariaLabel]=\"t.siteLabel\"\n [ngModelOptions]=\"{ standalone: true }\"\n />\n </div>\n }\n\n <div class=\"side is-end\">\n <div class=\"lang-switch\" role=\"group\" aria-label=\"Idioma / Language\">\n <button\n type=\"button\"\n class=\"lang-pill\"\n [class.is-active]=\"lang() === 'es'\"\n [attr.aria-pressed]=\"lang() === 'es'\"\n (click)=\"setLang('es')\"\n >\n ES\n </button>\n <button\n type=\"button\"\n class=\"lang-pill\"\n [class.is-active]=\"lang() === 'en'\"\n [attr.aria-pressed]=\"lang() === 'en'\"\n (click)=\"setLang('en')\"\n >\n EN\n </button>\n </div>\n\n <p-button\n icon=\"pi pi-th-large\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.appsLauncher\"\n [pTooltip]=\"t.appsLauncher\"\n tooltipPosition=\"bottom\"\n (onClick)=\"launcher.toggle($event)\"\n />\n\n <p-popover #launcher styleClass=\"ns-flush-popover\">\n @if (!hasCompany()) {\n <div class=\"launcher-notice\">\n <i class=\"pi pi-building\" aria-hidden=\"true\"></i>\n <div>\n <p class=\"launcher-notice-title\">{{ t.noCompanyTitle }}</p>\n <p class=\"launcher-notice-body\">{{ t.noCompanyHint }}</p>\n </div>\n </div>\n }\n\n <nucleus-menu\n layout=\"grid\"\n [heading]=\"t.appsSwitch\"\n [sections]=\"launcherSections()\"\n [searchable]=\"launcherRich()\"\n [searchPlaceholder]=\"t.appsSearch\"\n [emptyText]=\"launcherRich() ? t.appsNoMatch : t.appsEmpty\"\n [keyboardHint]=\"t.keyboardHint\"\n [width]=\"384\"\n (select)=\"onLauncherSelect($event); launcher.hide()\"\n (dismiss)=\"launcher.hide()\"\n />\n </p-popover>\n\n <p-button\n icon=\"pi pi-cog\"\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n [ariaLabel]=\"t.settingsTitle\"\n [pTooltip]=\"t.settingsTitle\"\n tooltipPosition=\"bottom\"\n (onClick)=\"settingsOpen.set(true)\"\n />\n\n @if (me) {\n <p-button\n severity=\"secondary\"\n size=\"small\"\n [text]=\"true\"\n [rounded]=\"true\"\n styleClass=\"avatar-trigger\"\n [ariaLabel]=\"me.name\"\n [pTooltip]=\"me.name\"\n tooltipPosition=\"bottom\"\n (onClick)=\"account.toggle($event)\"\n >\n <p-avatar\n [image]=\"me.photoUrl ?? undefined\"\n [label]=\"me.photoUrl ? undefined : initials()\"\n shape=\"circle\"\n size=\"normal\"\n />\n </p-button>\n }\n </div>\n</header>\n\n<p-popover #account styleClass=\"ns-flush-popover\">\n @if (me) {\n <div class=\"who\">\n @if (me.photoUrl) {\n <img class=\"who-photo\" [src]=\"me.photoUrl\" alt=\"\" width=\"42\" height=\"42\" />\n } @else {\n <span class=\"who-photo who-initials\">{{ initials() }}</span>\n }\n <span class=\"who-text\">\n <span class=\"who-name\">{{ me.name }}</span>\n <span class=\"who-mail\">{{ me.email }}</span>\n </span>\n </div>\n\n <p class=\"who-role\">\n <span class=\"who-dot\" aria-hidden=\"true\"></span>\n @if (roleName(); as role) {\n <b>{{ role }}</b>\n <span class=\"who-sep\">·</span>\n }\n <span class=\"who-context\">{{ accountContext() }}</span>\n </p>\n\n <nucleus-menu\n [sections]=\"accountSections()\"\n [width]=\"304\"\n (select)=\"onAccountSelect($event); account.hide()\"\n (dismiss)=\"account.hide()\"\n />\n }\n</p-popover>\n\n<div class=\"body\">\n @if (narrow() && sidebarOpen()) {\n <button\n type=\"button\"\n class=\"sidebar-scrim\"\n [attr.aria-label]=\"t.navToggle\"\n (click)=\"toggleSidebar()\"\n ></button>\n }\n\n <aside class=\"sidebar ns-frame\" [class.is-collapsed]=\"!sidebarOpen()\">\n @if (roleName(); as role) {\n <div class=\"role-badge\" [pTooltip]=\"sidebarOpen() ? '' : role\" tooltipPosition=\"right\">\n <i class=\"pi pi-key\" aria-hidden=\"true\"></i>\n <span class=\"nav-label role-text\">\n <span class=\"role-name\">{{ role }}</span>\n <span class=\"role-caption\">{{ t.roleCaption }}</span>\n </span>\n </div>\n }\n\n @if (navItems().length) {\n <nav>\n @for (item of navItems(); track item.id) {\n <button\n type=\"button\"\n class=\"nav-item\"\n [class.is-active]=\"activeNavId() === item.id\"\n [attr.aria-current]=\"activeNavId() === item.id ? 'page' : null\"\n [pTooltip]=\"sidebarOpen() ? '' : item.label\"\n tooltipPosition=\"right\"\n (click)=\"selectNav(item.id)\"\n >\n <i [class]=\"item.icon\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ item.label }}</span>\n </button>\n }\n </nav>\n }\n\n <nav class=\"access-menu\">\n @if (menuLoading()) {\n <div class=\"nav-skeleton\" role=\"status\" [attr.aria-label]=\"t.accessLoading\">\n @for (width of menuPlaceholders; track $index) {\n <div class=\"nav-skeleton-item\">\n <p-skeleton shape=\"circle\" size=\"15px\" />\n <p-skeleton height=\"9px\" [width]=\"width\" />\n </div>\n }\n </div>\n } @else if (menuError()) {\n <p class=\"access-state is-error\">{{ menuError() }}</p>\n } @else if (!menu().length) {\n <p class=\"access-state\">{{ t.accessEmpty }}</p>\n } @else {\n @for (node of menu(); track node.id) {\n @let group = isGroup(node);\n @let open = isExpanded(node);\n\n <button\n type=\"button\"\n class=\"nav-item\"\n [class.is-active]=\"!group && isSelected(node)\"\n [class.is-inert]=\"!group && !node.route\"\n [attr.aria-expanded]=\"group ? open : null\"\n [disabled]=\"!group && !node.route\"\n [pTooltip]=\"sidebarOpen() ? '' : node.label\"\n tooltipPosition=\"right\"\n (click)=\"selectMenu(node)\"\n >\n <i [class]=\"node.icon ?? 'pi pi-circle'\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ node.label }}</span>\n @if (group && sidebarOpen()) {\n <i\n class=\"pi nav-caret\"\n [class.pi-chevron-down]=\"open\"\n [class.pi-chevron-right]=\"!open\"\n aria-hidden=\"true\"\n ></i>\n }\n </button>\n\n @if (open) {\n @for (child of node.children; track child.id) {\n <button\n type=\"button\"\n class=\"nav-item is-child\"\n [class.is-active]=\"isSelected(child)\"\n [pTooltip]=\"sidebarOpen() ? '' : child.label\"\n tooltipPosition=\"right\"\n (click)=\"selectMenu(child)\"\n >\n <i [class]=\"child.icon ?? 'pi pi-circle'\" aria-hidden=\"true\"></i>\n <span class=\"nav-label\">{{ child.label }}</span>\n </button>\n }\n }\n }\n }\n </nav>\n </aside>\n\n <main class=\"content\">\n <div class=\"measure\">\n <ng-content select=\"[nucleusTop]\" />\n\n @if (crumbs().length || title() || pageActions()) {\n <header class=\"page-head\">\n <div class=\"page-head-main\">\n @if (crumbs().length) {\n <p-breadcrumb [model]=\"crumbs()\" [home]=\"home()\" styleClass=\"ns-crumbs\" />\n }\n\n @if (title()) {\n <h1>{{ title() }}</h1>\n }\n </div>\n\n @if (pageActions(); as actions) {\n <div class=\"page-head-actions\">\n <ng-container [ngTemplateOutlet]=\"actions\" />\n </div>\n }\n </header>\n }\n\n <ng-content />\n </div>\n </main>\n</div>\n\n<p-drawer\n [visible]=\"settingsOpen()\"\n (visibleChange)=\"settingsOpen.set($event)\"\n position=\"right\"\n [header]=\"t.settingsTitle\"\n [modal]=\"false\"\n [blockScroll]=\"false\"\n styleClass=\"ns-settings-drawer\"\n [style]=\"{ width: '380px' }\"\n>\n <nucleus-appearance />\n</p-drawer>\n\n<p-toast position=\"bottom-right\" styleClass=\"ns-toast\">\n <ng-template #message let-message>\n <nucleus-lordicon\n [src]=\"message.severity === 'success' ? icons.check : icons.warning\"\n [tone]=\"message.severity === 'success' ? 'accent' : 'danger'\"\n [size]=\"34\"\n trigger=\"in\"\n />\n <div class=\"toast-text\">\n <p class=\"toast-summary\">{{ message.summary }}</p>\n @if (message.detail) {\n <p class=\"toast-detail\">{{ message.detail }}</p>\n }\n </div>\n </ng-template>\n</p-toast>\n\n<p-confirmdialog [style]=\"{ width: '420px' }\">\n <ng-template #headless let-message let-onAccept=\"onAccept\" let-onReject=\"onReject\">\n <div class=\"confirm\">\n <nucleus-lordicon\n [src]=\"message.icon\"\n [tone]=\"message.acceptButtonStyleClass ? 'danger' : 'accent'\"\n [size]=\"64\"\n trigger=\"loop\"\n />\n <h2>{{ message.header }}</h2>\n <p>{{ message.message }}</p>\n <div class=\"confirm-actions\">\n <p-button\n [label]=\"message.rejectLabel\"\n severity=\"secondary\"\n [text]=\"true\"\n (onClick)=\"onReject()\"\n />\n <p-button\n [label]=\"message.acceptLabel\"\n [severity]=\"message.acceptButtonStyleClass ? 'danger' : 'primary'\"\n (onClick)=\"onAccept()\"\n />\n </div>\n </div>\n </ng-template>\n</p-confirmdialog>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["STORAGE_KEY","readStored","toNumber","i1.NucleusEnterAdvance","i3","i1","i2","i4","i7","i5","i6","i9","i10","i11","i12"],"mappings":"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"}