@elasticias/core 1.0.9 → 1.0.10

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":"elasticias-core.mjs","sources":["../../../../libs/core/src/lib/services/loader.service.ts","../../../../libs/core/src/lib/services/cache.service.ts","../../../../libs/core/src/lib/services/toast.service.ts","../../../../libs/core/src/lib/services/confirm-dialog.service.ts","../../../../libs/core/src/lib/guards/screen.guard.ts","../../../../libs/core/src/lib/theme/app-state.ts","../../../../libs/core/src/lib/theme/ef-theme-config.service.ts","../../../../libs/core/src/lib/theme/ef-theme.ts","../../../../libs/core/src/lib/theme/locales/primeng-en.ts","../../../../libs/core/src/lib/theme/locales/primeng-fr.ts","../../../../libs/core/src/lib/theme/locales/primeng-ar.ts","../../../../libs/core/src/lib/modules/ef-module-registry.ts","../../../../libs/core/src/lib/modules/ef-active-module.service.ts","../../../../libs/core/src/lib/responsive/ef-viewport.service.ts","../../../../libs/core/src/lib/auth/ef-permission.service.ts","../../../../libs/core/src/lib/auth/ef-session.token.ts","../../../../libs/core/src/lib/build/ef-build-info.token.ts","../../../../libs/core/src/elasticias-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class LoaderService {\n private loadingSubject = new BehaviorSubject<boolean>(false);\n isLoading$ = this.loadingSubject.asObservable();\n\n show(): void {\n this.loadingSubject.next(true);\n }\n\n hide(): void {\n this.loadingSubject.next(false);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StorageUtils } from '@elasticias/utils';\n\n@Injectable({ providedIn: 'root' })\nexport class CacheService {\n private cache: Record<string, unknown> = {};\n private useLocalStorage = false;\n\n configure(useLocalStorage = false): void {\n this.useLocalStorage = useLocalStorage;\n }\n\n getCache<T>(key: string): T | null {\n return this.useLocalStorage ? StorageUtils.getLocal<T>(key) : (this.cache[key] as T) ?? null;\n }\n\n setCache(key: string, value: unknown): void {\n if (this.useLocalStorage) {\n StorageUtils.setLocal(key, value);\n } else {\n this.cache[key] = value;\n }\n }\n\n updateCache(key: string, newValue: unknown): void {\n if (this.useLocalStorage) {\n const current = StorageUtils.getLocal(key);\n if (current && typeof current === 'object' && typeof newValue === 'object') {\n StorageUtils.setLocal(key, { ...(current as object), ...(newValue as object) });\n } else {\n StorageUtils.setLocal(key, newValue);\n }\n } else {\n const current = this.cache[key];\n if (current && typeof current === 'object' && typeof newValue === 'object') {\n this.cache[key] = { ...(current as object), ...(newValue as object) };\n } else {\n this.cache[key] = newValue;\n }\n }\n }\n\n removeCache(key: string): void {\n if (this.useLocalStorage) {\n StorageUtils.removeLocal(key);\n } else {\n delete this.cache[key];\n }\n }\n\n clearAllCache(): void {\n if (this.useLocalStorage) {\n StorageUtils.clearLocal();\n } else {\n this.cache = {};\n }\n }\n\n hasCache(key: string): boolean {\n return this.useLocalStorage ? StorageUtils.existsLocal(key) : key in this.cache;\n }\n}\n","import { Injectable, Injector, inject, signal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\n\n/**\n * Toast severities — mapped 1:1 to the Comptoir status spectrum:\n * `info` → processing, `success` → delivered, `warn` → pending,\n * `error` → cancelled.\n */\nexport type EfToastSeverity = 'info' | 'success' | 'warn' | 'error';\n\n/** Optional inline action button rendered at the end of a toast. */\nexport interface EfToastAction {\n /** Translation key for the button label — preferred. */\n labelKey?: string;\n /** Direct label fallback when `labelKey` is empty. */\n label?: string;\n\n /** Visual tone — `'ghost'` (default) or `'primary'` for the\n * destructive / confirm action. */\n severity?: 'ghost' | 'primary';\n\n /** Click handler. */\n command?: () => void;\n\n /** Auto-close the toast after the click runs (default `true`). */\n dismissOnClick?: boolean;\n}\n\n/**\n * Toast options accepted by `EfToastService.show()`. Either a literal\n * `title` / `text` or their `*Key` translation variants — keys win\n * unless empty.\n */\nexport interface EfToastOptions {\n severity?: EfToastSeverity;\n title?: string;\n titleKey?: string;\n text?: string;\n textKey?: string;\n /** Auto-dismiss in ms; `0` = sticky (no auto-dismiss). */\n life?: number;\n actions?: EfToastAction[];\n}\n\n/** Active toast — instance held in `EfToastService.toasts`. */\nexport interface EfToast {\n id: number;\n severity: EfToastSeverity;\n title: string;\n text: string;\n life: number;\n actions?: EfToastAction[];\n}\n\n/**\n * Comptoir toast service — V2 successor to the legacy `ToastService`.\n *\n * Owns a signal-based queue (`toasts`) consumed by\n * `<ef-toast-region>`, AND forwards every toast to PrimeNG's\n * `MessageService` for back-compat with `<p-toast>` (still used by\n * ClientApp v1). Either renderer picks the toasts up; both work.\n *\n * Default i18n keys (override per-call via `titleKey` / `textKey`):\n * - `ef_toast_info_title`, `ef_toast_info_default`\n * - `ef_toast_success_title`, `ef_toast_success_default`\n * - `ef_toast_warn_title`, `ef_toast_warn_default`\n * - `ef_toast_error_title`, `ef_toast_error_default`\n *\n * Default lifespans: info 5s, success 4s, warn 6s, error 8s.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfToastService {\n private static readonly LIFE_INFO = 5000;\n private static readonly LIFE_SUCCESS = 4000;\n private static readonly LIFE_WARN = 6000;\n private static readonly LIFE_ERROR = 8000;\n\n /**\n * Lazy holders. Resolving TranslateService eagerly at construction\n * time pulls in HttpClient → HTTP_INTERCEPTORS → AuthorizeInterceptor\n * → AuthorizeService → ToastService → cycle. We defer to the first\n * actual translate / message-publish call.\n */\n private readonly injector = inject(Injector);\n private _translate?: TranslateService;\n private _messageService?: MessageService | null;\n private _messageServiceResolved = false;\n\n private nextId = 1;\n\n /** Live queue — `<ef-toast-region>` renders this. */\n readonly toasts = signal<ReadonlyArray<EfToast>>([]);\n\n /* ── Convenience methods (back-compat with the legacy\n ToastService signature: `(message?, title?, life?)`). ── */\n\n showInfo(message?: string, title?: string, life: number = EfToastService.LIFE_INFO): void {\n this.show({\n severity: 'info',\n title: title ?? this.t('ef_toast_info_title'),\n text: message ?? this.t('ef_toast_info_default'),\n life,\n });\n }\n\n showSuccess(message?: string, title?: string, life: number = EfToastService.LIFE_SUCCESS): void {\n this.show({\n severity: 'success',\n title: title ?? this.t('ef_toast_success_title'),\n text: message ?? this.t('ef_toast_success_default'),\n life,\n });\n }\n\n showWarn(message?: string, title?: string, life: number = EfToastService.LIFE_WARN): void {\n this.show({\n severity: 'warn',\n title: title ?? this.t('ef_toast_warn_title'),\n text: message ?? this.t('ef_toast_warn_default'),\n life,\n });\n }\n\n showError(message?: string, title?: string, life: number = EfToastService.LIFE_ERROR): void {\n this.show({\n severity: 'error',\n title: title ?? this.t('ef_toast_error_title'),\n text: message ?? this.t('ef_toast_error_default'),\n life,\n });\n }\n\n /** Generic show — opts can mix `title`/`titleKey`, `text`/`textKey`. */\n show(opts: EfToastOptions): EfToast {\n const severity = opts.severity ?? 'info';\n const toast: EfToast = {\n id: this.nextId++,\n severity,\n title: this.resolve(opts.title, opts.titleKey, this.defaultTitleKey(severity)),\n text: this.resolve(opts.text, opts.textKey, undefined),\n life: opts.life ?? this.defaultLife(severity),\n actions: opts.actions,\n };\n\n // Collapse a burst of identical toasts into one. A dashboard fans\n // out to many independent queries, so one rejected filter used to\n // stack the same message once per widget -- seven copies of \"a\n // validation error occurred\", burying the screen. Only toasts that\n // are still on screen dedupe, so the same message shown again later\n // still appears.\n const duplicate = this.toasts().find(\n t =>\n t.severity === toast.severity &&\n t.title === toast.title &&\n t.text === toast.text,\n );\n if (duplicate) return duplicate;\n\n this.toasts.update(list => [...list, toast]);\n\n // Forward to PrimeNG MessageService so v1's <p-toast> still\n // catches the toast. Sticky in PrimeNG is `life: 0`.\n this.messageService?.add({\n severity: toast.severity,\n summary: toast.title,\n detail: toast.text,\n life: toast.life || undefined,\n sticky: toast.life === 0,\n });\n\n return toast;\n }\n\n private get messageService(): MessageService | null {\n if (!this._messageServiceResolved) {\n this._messageServiceResolved = true;\n this._messageService = this.injector.get(MessageService, null, { optional: true });\n }\n return this._messageService ?? null;\n }\n\n dismiss(id: number): void {\n this.toasts.update(list => list.filter(t => t.id !== id));\n }\n\n clear(): void {\n this.toasts.set([]);\n this.messageService?.clear();\n }\n\n /* (messageService getter is defined just below `show` to keep it\n close to where it's consumed.) */\n\n /* ── Internals ─────────────────────────────────────────────── */\n\n private resolve(\n literal: string | undefined,\n key: string | undefined,\n fallbackKey: string | undefined,\n ): string {\n if (literal != null) return literal;\n if (key) return this.t(key);\n if (fallbackKey) return this.t(fallbackKey);\n return '';\n }\n\n private t(key: string): string {\n // Lazy-resolve TranslateService — see the field comment above\n // for the AuthorizeService cycle this avoids.\n this._translate ??= this.injector.get(TranslateService);\n const value = this._translate.instant(key);\n // `instant()` returns the key when no translation is loaded;\n // fall through to empty string so untranslated toasts don't\n // surface internal keys to end users.\n return value === key ? '' : value;\n }\n\n private defaultLife(severity: EfToastSeverity): number {\n switch (severity) {\n case 'info': return EfToastService.LIFE_INFO;\n case 'success': return EfToastService.LIFE_SUCCESS;\n case 'warn': return EfToastService.LIFE_WARN;\n case 'error': return EfToastService.LIFE_ERROR;\n }\n }\n\n private defaultTitleKey(severity: EfToastSeverity): string {\n return `ef_toast_${severity}_title`;\n }\n}\n\n/**\n * @deprecated Use `EfToastService` — same instance, new name. The\n * alias keeps existing imports compiling during the v1 → V2\n * migration.\n */\nexport { EfToastService as ToastService };\n","import { inject, Injectable } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\n\n@Injectable({ providedIn: 'root' })\nexport class ConfirmDialogService {\n private readonly confirmationService = inject(ConfirmationService);\n\n confirm(\n message: string,\n acceptCallback?: () => void,\n rejectCallback?: () => void,\n event?: Event\n ): void {\n this.confirmationService.confirm({\n target: event ? (event.target as EventTarget) : undefined,\n message,\n header: 'Confirmation',\n closable: true,\n closeOnEscape: true,\n icon: 'pi pi-exclamation-triangle',\n rejectButtonProps: {\n label: 'Annuler',\n severity: 'secondary',\n outlined: true,\n },\n acceptButtonProps: {\n label: 'Confirmer',\n },\n accept: () => acceptCallback?.(),\n reject: () => rejectCallback?.(),\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { StorageUtils } from '@elasticias/utils';\nimport { Permissions } from '@elasticias/types';\n\n/**\n * Configuration for the screen guard factory.\n */\nexport interface ScreenGuardConfig {\n /** Storage key where screen grants are stored (default: 'CURRENT_USER_GRANTS') */\n grantsStorageKey?: string;\n /** Route to redirect to when access is denied (default: '/') */\n deniedRedirect?: string;\n /** Minimum required permission to access the screen (default: Permissions.Read) */\n requiredPermission?: Permissions;\n /** Storage type to read grants from (default: 'session') */\n storageType?: 'local' | 'session';\n}\n\n/**\n * Creates a reusable Angular route guard that checks screen-level permissions.\n *\n * Usage in route definitions:\n * ```typescript\n * {\n * path: 'countries',\n * data: { screenCode: 'Countries' },\n * canActivate: [screenGuard()],\n * children: [\n * { path: '', component: CountriesComponent },\n * { path: 'details/:id', component: CountriesDetailsComponent },\n * ]\n * }\n * ```\n *\n * The guard reads the `screenCode` from route data (traversing parent routes)\n * and checks if the current user has at least the required permission (default: Read).\n */\nexport function screenGuard(config?: ScreenGuardConfig): CanActivateFn {\n return (route: ActivatedRouteSnapshot) => {\n const router = inject(Router);\n const grantsKey = config?.grantsStorageKey ?? 'CURRENT_USER_GRANTS';\n const deniedRedirect = config?.deniedRedirect ?? '/';\n const requiredPermission = config?.requiredPermission ?? Permissions.Read;\n const storageType = config?.storageType ?? 'local';\n\n const screenCode = getScreenCode(route);\n\n // If no screenCode found on this route or any parent, allow access\n if (!screenCode) {\n return true;\n }\n\n const screenGrants = storageType === 'session'\n ? StorageUtils.getSession<Record<string, { permissions?: string[] }>>(grantsKey)\n : StorageUtils.getLocal<Record<string, { permissions?: string[] }>>(grantsKey);\n\n if (!screenGrants) {\n router.navigate([deniedRedirect]);\n return false;\n }\n\n const grant = screenGrants[screenCode];\n if (!grant?.permissions?.includes(requiredPermission)) {\n router.navigate([deniedRedirect]);\n return false;\n }\n\n return true;\n };\n}\n\n/**\n * Walks up the route tree to find the nearest screenCode in route data.\n */\nfunction getScreenCode(route: ActivatedRouteSnapshot): string | undefined {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const code = current.data?.['screenCode'] as string | undefined;\n if (code) return code;\n current = current.parent;\n }\n return undefined;\n}\n\n/**\n * Utility function to check if the current user has a specific permission on a screen.\n * Can be used in components/services outside of route guards.\n */\nexport function hasScreenPermission(\n screenCode: string,\n permission: Permissions,\n grantsStorageKey = 'CURRENT_USER_GRANTS',\n storageType: 'local' | 'session' = 'local'\n): boolean {\n const screenGrants = storageType === 'session'\n ? StorageUtils.getSession<Record<string, { permissions?: string[] }>>(grantsStorageKey)\n : StorageUtils.getLocal<Record<string, { permissions?: string[] }>>(grantsStorageKey);\n if (!screenGrants) return false;\n\n const grant = screenGrants[screenCode];\n return grant?.permissions?.includes(permission) ?? false;\n}\n","export interface AppState {\n preset?: string;\n primary?: string;\n surface?: string;\n darkTheme?: boolean;\n menuActive?: boolean;\n mobileMenuVisible?: boolean;\n designerKey?: string;\n RTL?: boolean;\n}\n\nexport const DEFAULT_APP_STATE: AppState = {\n preset: 'Lara',\n primary: 'noir',\n surface: null as any,\n darkTheme: false,\n menuActive: true,\n mobileMenuVisible: false,\n designerKey: 'primeng-designer-theme',\n RTL: false\n};\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { computed, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { palette, updatePrimaryPalette } from '@primeng/themes';\nimport { StorageUtils } from '@elasticias/utils';\nimport { AppState, DEFAULT_APP_STATE } from './app-state';\n\n/**\n * Service that manages theme state: preset, primary color, surface, dark mode, RTL.\n * State is persisted to localStorage so user preferences survive page reloads.\n *\n * Apps can extend this service or use it directly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EfThemeConfigService {\n private readonly STORAGE_KEY = 'APP_CONFIG_STATE';\n\n appState = signal<AppState>(null as any);\n\n designerActive = signal(false);\n\n newsActive = signal(false);\n\n document = inject(DOCUMENT);\n\n platformId = inject(PLATFORM_ID);\n\n theme = computed(() => (this.appState()?.darkTheme ? 'dark' : 'light'));\n\n transitionComplete = signal<boolean>(false);\n\n constructor() {\n const initialState = this.loadAppState();\n this.appState.set({ ...initialState });\n\n // Apply preset class + RTL synchronously so the first paint has\n // the right theme — the effect below picks up subsequent changes\n // (including any subclass `appState.update()` issued before its\n // first run).\n this.updatePresetClass(initialState);\n if (isPlatformBrowser(this.platformId) && initialState?.RTL) {\n this.document.documentElement.setAttribute('dir', 'rtl');\n }\n\n effect(() => {\n const state = this.appState();\n if (!state) return;\n this.saveAppState(state);\n this.updatePresetClass(state);\n this.handleDarkModeTransition(state);\n this.applyRTL(state);\n });\n }\n\n private static readonly PRESET_CLASS_MAP: Record<string, string> = {\n Aura: 'theme-compact',\n Lara: 'theme-modern',\n Material: 'theme-material',\n Nora: 'theme-classic',\n Comptoir: 'theme-comptoir',\n };\n\n private static readonly TENANT_RAMP_STOPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n\n private static readonly ALL_THEME_CLASSES = Object.values(EfThemeConfigService.PRESET_CLASS_MAP);\n\n private updatePresetClass(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n const body = this.document.body;\n body.classList.remove(...EfThemeConfigService.ALL_THEME_CLASSES);\n if (state.preset) {\n const cls = EfThemeConfigService.PRESET_CLASS_MAP[state.preset];\n if (cls) {\n body.classList.add(cls);\n }\n }\n }\n }\n\n private handleDarkModeTransition(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n if ((document as any).startViewTransition) {\n this.startViewTransition(state);\n } else {\n this.toggleDarkMode(state);\n this.onTransitionEnd();\n }\n }\n }\n\n private startViewTransition(state: AppState): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(state);\n });\n\n transition.ready\n .then(() => this.onTransitionEnd())\n .catch(() => { /* view transition aborted */ });\n }\n\n private toggleDarkMode(state: AppState): void {\n if (state.darkTheme) {\n this.document.documentElement.classList.add('p-dark');\n } else {\n this.document.documentElement.classList.remove('p-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n private applyRTL(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n const setDir = () => {\n if (state.RTL) {\n this.document.documentElement.setAttribute('dir', 'rtl');\n } else {\n this.document.documentElement.removeAttribute('dir');\n }\n };\n\n if ((document as any).startViewTransition) {\n const t = (document as any).startViewTransition(() => setDir());\n t.ready.catch(() => { /* view transition aborted */ });\n } else {\n setDir();\n }\n }\n }\n\n hideMenu() {\n this.appState.update((state) => ({ ...state, menuActive: false }));\n }\n\n showMenu() {\n this.appState.update((state) => ({ ...state, menuActive: true }));\n }\n\n toggleMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: !state.mobileMenuVisible\n }));\n }\n\n closeMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: false\n }));\n }\n\n openMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: true\n }));\n }\n\n hideNews() {\n this.newsActive.set(false);\n }\n\n showNews() {\n this.newsActive.set(true);\n }\n\n showDesigner() {\n this.designerActive.set(true);\n }\n\n hideDesigner() {\n this.designerActive.set(false);\n }\n\n private loadAppState(): AppState {\n if (isPlatformBrowser(this.platformId)) {\n const storedState = StorageUtils.getLocal<AppState>(this.STORAGE_KEY);\n if (storedState) {\n return storedState;\n }\n }\n return { ...DEFAULT_APP_STATE };\n }\n\n private saveAppState(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n StorageUtils.setLocal(this.STORAGE_KEY, state);\n }\n }\n\n /**\n * Applies a tenant's brand color across both PrimeNG's primary palette\n * and the Comptoir `--tenant-*` CSS variables.\n *\n * Generates a 50–950 ramp from the input hex via PrimeNG's `palette()`\n * helper, hands the full ramp to `updatePrimaryPalette()`, and writes\n * stops 50–900 onto `documentElement.style` so the SCSS layer's\n * `var(--tenant-*)` references resolve to the tenant's color.\n *\n * Call this whenever the active tenant changes (e.g., from an effect\n * watching `tenantService.storeConfig().primaryColor`).\n */\n setTenantAccent(hex: string): void {\n if (!hex) return;\n\n const ramp = palette(hex) as Record<string, string>;\n if (!ramp) return;\n\n updatePrimaryPalette(ramp);\n\n if (isPlatformBrowser(this.platformId)) {\n const root = this.document.documentElement;\n for (const stop of EfThemeConfigService.TENANT_RAMP_STOPS) {\n const value = ramp[String(stop)];\n if (value) {\n root.style.setProperty(`--tenant-${stop}`, value);\n }\n }\n }\n }\n}\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\n\n/* ──────────────────────────────────────────────────────────────────\n * LEGACY: Noir preset (Aura base, monochrome surface palette).\n * Kept for backward-compat with apps that haven't migrated to\n * Comptoir. Phase 5 of the design-system plan retrofits consumers\n * to EfComptoirTheme; once that lands, Noir + EfTheme can be\n * deleted.\n * ────────────────────────────────────────────────────────────── */\n\nconst Noir = definePreset(Aura, {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n});\n\n/**\n * Default Elasticias theme configuration for PrimeNG.\n * Uses the Noir preset (surface-based primary colors) with dark mode support.\n *\n * @deprecated Migrate to {@link EfComptoirTheme} as part of Phase 5 of the\n * design-system plan. Will be removed once all consumers have moved.\n */\nexport const EfTheme = {\n preset: Noir,\n options: {\n darkModeSelector: '.p-dark',\n }\n};\n\nexport default EfTheme;\n\n/* ──────────────────────────────────────────────────────────────────\n * COMPTOIR: ink surface + tenant primary (Lara base).\n * Surface palette is the ink ramp from libs/tokens/colors.json.\n * Primary palette defaults to the parfumerie sample tenant; it is\n * runtime-replaced by EfThemeConfigService.setTenantAccent(hex)\n * via PrimeNG's updatePrimaryPalette() API.\n * ────────────────────────────────────────────────────────────── */\n\nconst ComptoirPreset = definePreset(Lara, {\n semantic: {\n primary: {\n 50: '#f7f0f4',\n 100: '#ecdce5',\n 200: '#d8b4c5',\n 300: '#b87a99',\n 400: '#934e74',\n 500: '#6f3257',\n 600: '#54243f',\n 700: '#401a30',\n 800: '#2c1221',\n 900: '#1a0913',\n 950: '#0d040a'\n },\n /* ──────────────────────────────────────────────────────────────\n * Control sizing (ADR-009). The native \"comptoir\" variant is the\n * default render path and is pinned to --hit-base (40px) in CSS;\n * these tokens align the OPT-IN PrimeNG variant (p-select filter,\n * p-multiselect, p-inputnumber stepper, etc.) to the same canonical\n * heights so the two paths agree:\n * base → 40px (--hit-base) sm → 32px (--hit) lg → 48px (--hit-touch, POS/mobile)\n * Lara form-field height ≈ paddingY*2 + lineHeight(1.5)*fontSize(14px) + 2px border.\n * base: 8px*2 + 21 + 2 ≈ 40px · sm: 5px*2 + ~18 + 2 ≈ 32px · lg: 12px*2 + 21 + 2 ≈ 48px\n * NOTE: exact pixel height depends on the app's root font-size; the\n * native default path is the verified one — confirm the PrimeNG\n * opt-in controls visually in the running app and nudge paddingY if\n * they read 1-2px off. Border radius matches --r-md (12px). */\n formField: {\n paddingX: '0.75rem',\n paddingY: '0.5rem',\n borderRadius: '12px',\n sm: {\n fontSize: '0.78rem',\n paddingX: '0.625rem',\n paddingY: '0.3125rem'\n },\n lg: {\n fontSize: '0.9375rem',\n paddingX: '0.875rem',\n paddingY: '0.75rem'\n }\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n surface: {\n 0: '#ffffff',\n 50: '#f8f9fb',\n 100: '#f1f3f6',\n 200: '#e4e8ee',\n 300: '#cdd3dd',\n 400: '#9ca5b3',\n 500: '#6c7280',\n 600: '#4a4f5a',\n 700: '#2f3239',\n 800: '#1d1f24',\n 900: '#0f1115',\n 950: '#06070a'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.600}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n surface: {\n 0: '#000000',\n 50: '#06070a',\n 100: '#0f1115',\n 200: '#1d1f24',\n 300: '#2f3239',\n 400: '#4a4f5a',\n 500: '#6c7280',\n 600: '#9ca5b3',\n 700: '#cdd3dd',\n 800: '#e4e8ee',\n 900: '#f1f3f6',\n 950: '#f8f9fb'\n },\n highlight: {\n background: '{primary.400}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n});\n\n/**\n * Comptoir theme configuration for PrimeNG (Phase 1 / design-system v0.2).\n * Surface palette = ink ramp; primary palette = tenant accent\n * (runtime-driven via `EfThemeConfigService.setTenantAccent(hex)`).\n *\n * Usage with providePrimeNG:\n * ```ts\n * providePrimeNG({ theme: EfComptoirTheme, ripple: true })\n * ```\n *\n * Pair with `state.preset = 'Comptoir'` so the body class becomes\n * `theme-comptoir` (avoids legacy `theme-modern` radius overrides).\n */\nexport const EfComptoirTheme = {\n preset: ComptoirPreset,\n options: {\n darkModeSelector: '.p-dark',\n }\n};\n","import { Translation } from 'primeng/api';\n\n/**\n * English locale for PrimeNG components.\n *\n * Usage:\n * ```ts\n * import { PRIMENG_EN_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_EN_LOCALE;\n * ```\n */\nexport const PRIMENG_EN_LOCALE: Translation = {\n startsWith: 'Starts with',\n contains: 'Contains',\n notContains: 'Not contains',\n endsWith: 'Ends with',\n equals: 'Equals',\n notEquals: 'Not equals',\n noFilter: 'No Filter',\n lt: 'Less than',\n lte: 'Less than or equal to',\n gt: 'Greater than',\n gte: 'Greater than or equal to',\n dateIs: 'Date is',\n dateIsNot: 'Date is not',\n dateBefore: 'Date is before',\n dateAfter: 'Date is after',\n clear: 'Clear',\n apply: 'Apply',\n matchAll: 'Match All',\n matchAny: 'Match Any',\n addRule: 'Add Rule',\n removeRule: 'Remove Rule',\n accept: 'Yes',\n reject: 'No',\n choose: 'Choose',\n upload: 'Upload',\n cancel: 'Cancel',\n completed: 'Completed',\n pending: 'Pending',\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n chooseYear: 'Choose Year',\n chooseMonth: 'Choose Month',\n chooseDate: 'Choose Date',\n prevDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n prevYear: 'Previous Year',\n nextYear: 'Next Year',\n prevMonth: 'Previous Month',\n nextMonth: 'Next Month',\n prevHour: 'Previous Hour',\n nextHour: 'Next Hour',\n prevMinute: 'Previous Minute',\n nextMinute: 'Next Minute',\n prevSecond: 'Previous Second',\n nextSecond: 'Next Second',\n am: 'AM',\n pm: 'PM',\n today: 'Today',\n weekHeader: 'Wk',\n firstDayOfWeek: 0,\n showMonthAfterYear: false,\n dateFormat: 'mm/dd/yy',\n weak: 'Weak',\n medium: 'Medium',\n strong: 'Strong',\n passwordPrompt: 'Enter a password',\n emptyFilterMessage: 'No results found',\n searchMessage: '{0} results are available',\n selectionMessage: '{0} items selected',\n emptySelectionMessage: 'No selected item',\n emptySearchMessage: 'No results found',\n emptyMessage: 'No available options',\n aria: {\n trueLabel: 'True',\n falseLabel: 'False',\n nullLabel: 'Not Selected',\n star: '1 star',\n stars: '{star} stars',\n selectAll: 'All items selected',\n unselectAll: 'All items unselected',\n close: 'Close',\n previous: 'Previous',\n next: 'Next',\n navigation: 'Navigation',\n scrollTop: 'Scroll Top',\n moveTop: 'Move Top',\n moveUp: 'Move Up',\n moveDown: 'Move Down',\n moveBottom: 'Move Bottom',\n moveToTarget: 'Move to Target',\n moveToSource: 'Move to Source',\n moveAllToTarget: 'Move All to Target',\n moveAllToSource: 'Move All to Source',\n pageLabel: 'Page {page}',\n firstPageLabel: 'First Page',\n lastPageLabel: 'Last Page',\n nextPageLabel: 'Next Page',\n prevPageLabel: 'Previous Page',\n rowsPerPageLabel: 'Rows per page',\n jumpToPageDropdownLabel: 'Jump to Page Dropdown',\n jumpToPageInputLabel: 'Jump to Page Input',\n selectRow: 'Row Selected',\n unselectRow: 'Row Unselected',\n expandRow: 'Row Expanded',\n collapseRow: 'Row Collapsed',\n showFilterMenu: 'Show Filter Menu',\n hideFilterMenu: 'Hide Filter Menu',\n filterOperator: 'Filter Operator',\n filterConstraint: 'Filter Constraint',\n editRow: 'Row Edit',\n saveEdit: 'Save Edit',\n cancelEdit: 'Cancel Edit',\n listView: 'List View',\n gridView: 'Grid View',\n slide: 'Slide',\n slideNumber: '{slideNumber}',\n zoomImage: 'Zoom Image',\n zoomIn: 'Zoom In',\n zoomOut: 'Zoom Out',\n rotateRight: 'Rotate Right',\n rotateLeft: 'Rotate Left',\n listLabel: 'Option List',\n },\n} as Translation;\n","import { Translation } from 'primeng/api';\n\n/**\n * French locale for PrimeNG components.\n *\n * Usage:\n * ```ts\n * import { PRIMENG_FR_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_FR_LOCALE;\n * ```\n */\nexport const PRIMENG_FR_LOCALE: Translation = {\n startsWith: 'Commence par',\n contains: 'Contient',\n notContains: 'Ne contient pas',\n endsWith: 'Se termine par',\n equals: 'Égal à',\n notEquals: 'Différent de',\n noFilter: 'Aucun filtre',\n lt: 'Inférieur à',\n lte: 'Inférieur ou égal à',\n gt: 'Supérieur à',\n gte: 'Supérieur ou égal à',\n dateIs: 'La date est',\n dateIsNot: \"La date n'est pas\",\n dateBefore: 'La date est avant',\n dateAfter: 'La date est après',\n clear: 'Effacer',\n apply: 'Appliquer',\n matchAll: 'Correspond à tous',\n matchAny: \"Correspond à n'importe quel\",\n addRule: 'Ajouter une règle',\n removeRule: 'Supprimer la règle',\n accept: 'Oui',\n reject: 'Non',\n choose: 'Choisir',\n upload: 'Télécharger',\n cancel: 'Annuler',\n completed: 'Terminé',\n pending: 'En attente',\n fileSizeTypes: ['o', 'Ko', 'Mo', 'Go', 'To', 'Po', 'Eo', 'Zo', 'Yo'],\n dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],\n monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n monthNamesShort: ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'],\n chooseYear: \"Choisir l'année\",\n chooseMonth: 'Choisir le mois',\n chooseDate: 'Choisir la date',\n prevDecade: 'Décennie précédente',\n nextDecade: 'Décennie suivante',\n prevYear: 'Année précédente',\n nextYear: 'Année suivante',\n prevMonth: 'Mois précédent',\n nextMonth: 'Mois suivant',\n prevHour: 'Heure précédente',\n nextHour: 'Heure suivante',\n prevMinute: 'Minute précédente',\n nextMinute: 'Minute suivante',\n prevSecond: 'Seconde précédente',\n nextSecond: 'Seconde suivante',\n am: 'AM',\n pm: 'PM',\n today: \"Aujourd'hui\",\n weekHeader: 'Sem',\n firstDayOfWeek: 1,\n showMonthAfterYear: false,\n dateFormat: 'dd/mm/yy',\n weak: 'Faible',\n medium: 'Moyen',\n strong: 'Fort',\n passwordPrompt: 'Entrez un mot de passe',\n emptyFilterMessage: 'Aucun résultat trouvé',\n searchMessage: '{0} résultats sont disponibles',\n selectionMessage: '{0} éléments sélectionnés',\n emptySelectionMessage: 'Aucun élément sélectionné',\n emptySearchMessage: 'Aucun résultat trouvé',\n emptyMessage: 'Aucune option disponible',\n aria: {\n trueLabel: 'Vrai',\n falseLabel: 'Faux',\n nullLabel: 'Non sélectionné',\n star: '1 étoile',\n stars: '{star} étoiles',\n selectAll: 'Tous les éléments sélectionnés',\n unselectAll: 'Tous les éléments désélectionnés',\n close: 'Fermer',\n previous: 'Précédent',\n next: 'Suivant',\n navigation: 'Navigation',\n scrollTop: 'Défiler vers le haut',\n moveTop: 'Déplacer vers le haut',\n moveUp: 'Déplacer vers le haut',\n moveDown: 'Déplacer vers le bas',\n moveBottom: 'Déplacer vers le bas',\n moveToTarget: 'Déplacer vers la cible',\n moveToSource: 'Déplacer vers la source',\n moveAllToTarget: 'Tout déplacer vers la cible',\n moveAllToSource: 'Tout déplacer vers la source',\n pageLabel: 'Page {page}',\n firstPageLabel: 'Première page',\n lastPageLabel: 'Dernière page',\n nextPageLabel: 'Page suivante',\n prevPageLabel: 'Page précédente',\n rowsPerPageLabel: 'Lignes par page',\n jumpToPageDropdownLabel: 'Aller à la page',\n jumpToPageInputLabel: 'Aller à la page',\n selectRow: 'Ligne sélectionnée',\n unselectRow: 'Ligne désélectionnée',\n expandRow: 'Ligne développée',\n collapseRow: 'Ligne réduite',\n showFilterMenu: 'Afficher le menu de filtrage',\n hideFilterMenu: 'Masquer le menu de filtrage',\n filterOperator: 'Opérateur de filtrage',\n filterConstraint: 'Contrainte de filtrage',\n editRow: 'Modifier la ligne',\n saveEdit: 'Enregistrer la modification',\n cancelEdit: 'Annuler la modification',\n listView: 'Vue en liste',\n gridView: 'Vue en grille',\n slide: 'Glisser',\n slideNumber: '{slideNumber}',\n zoomImage: \"Agrandir l'image\",\n zoomIn: 'Zoomer',\n zoomOut: 'Dézoomer',\n rotateRight: 'Faire pivoter à droite',\n rotateLeft: 'Faire pivoter à gauche',\n listLabel: 'Liste',\n },\n} as Translation;\n","import { Translation } from 'primeng/api';\n\n/**\n * Arabic locale for PrimeNG components (Moroccan month names).\n *\n * Usage:\n * ```ts\n * import { PRIMENG_AR_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_AR_LOCALE;\n * ```\n */\nexport const PRIMENG_AR_LOCALE: Translation = {\n startsWith: 'يبدأ بـ',\n contains: 'يحتوي على',\n notContains: 'لا يحتوي على',\n endsWith: 'ينتهي بـ',\n equals: 'يساوي',\n notEquals: 'لا يساوي',\n noFilter: 'بدون فلتر',\n lt: 'أقل من',\n lte: 'أقل من أو يساوي',\n gt: 'أكبر من',\n gte: 'أكبر من أو يساوي',\n dateIs: 'التاريخ هو',\n dateIsNot: 'التاريخ ليس',\n dateBefore: 'التاريخ قبل',\n dateAfter: 'التاريخ بعد',\n clear: 'مسح',\n apply: 'تطبيق',\n matchAll: 'تطابق الكل',\n matchAny: 'تطابق أي',\n addRule: 'إضافة قاعدة',\n removeRule: 'حذف القاعدة',\n accept: 'نعم',\n reject: 'لا',\n choose: 'اختيار',\n upload: 'رفع',\n cancel: 'إلغاء',\n completed: 'مكتمل',\n pending: 'قيد الانتظار',\n fileSizeTypes: ['بايت', 'ك.ب', 'م.ب', 'ج.ب', 'ت.ب', 'ب.ب', 'إ.ب', 'ز.ب', 'ي.ب'],\n dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n dayNamesShort: ['أحد', 'اثن', 'ثلا', 'أرب', 'خمي', 'جمع', 'سبت'],\n dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n monthNames: ['يناير', 'فبراير', 'مارس', 'أبريل', 'ماي', 'يونيو', 'يوليوز', 'غشت', 'شتنبر', 'أكتوبر', 'نونبر', 'دجنبر'],\n monthNamesShort: ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'غشت', 'شتن', 'أكت', 'نون', 'دجن'],\n chooseYear: 'اختر السنة',\n chooseMonth: 'اختر الشهر',\n chooseDate: 'اختر التاريخ',\n prevDecade: 'العقد السابق',\n nextDecade: 'العقد التالي',\n prevYear: 'السنة السابقة',\n nextYear: 'السنة التالية',\n prevMonth: 'الشهر السابق',\n nextMonth: 'الشهر التالي',\n prevHour: 'الساعة السابقة',\n nextHour: 'الساعة التالية',\n prevMinute: 'الدقيقة السابقة',\n nextMinute: 'الدقيقة التالية',\n prevSecond: 'الثانية السابقة',\n nextSecond: 'الثانية التالية',\n am: 'ص',\n pm: 'م',\n today: 'اليوم',\n weekHeader: 'أس',\n firstDayOfWeek: 1,\n showMonthAfterYear: false,\n dateFormat: 'dd/mm/yy',\n weak: 'ضعيف',\n medium: 'متوسط',\n strong: 'قوي',\n passwordPrompt: 'أدخل كلمة المرور',\n emptyFilterMessage: 'لم يتم العثور على نتائج',\n searchMessage: '{0} نتائج متاحة',\n selectionMessage: '{0} عناصر محددة',\n emptySelectionMessage: 'لا يوجد عنصر محدد',\n emptySearchMessage: 'لم يتم العثور على نتائج',\n emptyMessage: 'لا توجد خيارات متاحة',\n aria: {\n trueLabel: 'صحيح',\n falseLabel: 'خاطئ',\n nullLabel: 'غير محدد',\n star: 'نجمة واحدة',\n stars: '{star} نجوم',\n selectAll: 'تم تحديد جميع العناصر',\n unselectAll: 'تم إلغاء تحديد جميع العناصر',\n close: 'إغلاق',\n previous: 'السابق',\n next: 'التالي',\n navigation: 'التنقل',\n scrollTop: 'التمرير للأعلى',\n moveTop: 'نقل للأعلى',\n moveUp: 'نقل للأعلى',\n moveDown: 'نقل للأسفل',\n moveBottom: 'نقل للأسفل',\n moveToTarget: 'نقل إلى الهدف',\n moveToSource: 'نقل إلى المصدر',\n moveAllToTarget: 'نقل الكل إلى الهدف',\n moveAllToSource: 'نقل الكل إلى المصدر',\n pageLabel: 'صفحة {page}',\n firstPageLabel: 'الصفحة الأولى',\n lastPageLabel: 'الصفحة الأخيرة',\n nextPageLabel: 'الصفحة التالية',\n prevPageLabel: 'الصفحة السابقة',\n rowsPerPageLabel: 'سطور في الصفحة',\n jumpToPageDropdownLabel: 'الانتقال إلى الصفحة',\n jumpToPageInputLabel: 'الانتقال إلى الصفحة',\n selectRow: 'تم تحديد السطر',\n unselectRow: 'تم إلغاء تحديد السطر',\n expandRow: 'تم توسيع السطر',\n collapseRow: 'تم طي السطر',\n showFilterMenu: 'إظهار قائمة الفلتر',\n hideFilterMenu: 'إخفاء قائمة الفلتر',\n filterOperator: 'عامل الفلتر',\n filterConstraint: 'قيد الفلتر',\n editRow: 'تعديل السطر',\n saveEdit: 'حفظ التعديل',\n cancelEdit: 'إلغاء التعديل',\n listView: 'عرض قائمة',\n gridView: 'عرض شبكة',\n slide: 'تمرير',\n slideNumber: '{slideNumber}',\n zoomImage: 'تكبير الصورة',\n zoomIn: 'تكبير',\n zoomOut: 'تصغير',\n rotateRight: 'تدوير لليمين',\n rotateLeft: 'تدوير لليسار',\n listLabel: 'قائمة',\n },\n} as Translation;\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The eight ERP modules surfaced by Comptoir. New modules require\n * a matching `--m-{id}` token in the SCSS layer (libs/ui/src/lib/_comptoir.scss)\n * and a labelKey in the consuming app's i18n bundles.\n */\nexport type EfModuleId =\n | 'sales'\n | 'purchase'\n | 'stock'\n | 'pos'\n | 'marketing'\n | 'store'\n | 'finance'\n | 'admin';\n\nexport type EfNavAction = 'read' | 'write' | 'admin';\n\nexport interface EfNavItem {\n /** Stable identifier — usually matches the screen code (e.g. `Users`, `SalesOrders`). */\n id: string;\n labelKey: string;\n icon?: string;\n route: string;\n /** Minimum permission level required to render this item. Defaults to `read`. */\n requiredAction?: EfNavAction;\n /**\n * Optional count chip rendered after the label (e.g. `Commandes ⟨14⟩`).\n * Apps typically derive this from a service signal and patch the\n * registry — it can be number, string, or anything stringifiable.\n */\n badge?: string | number;\n}\n\nexport interface EfNavSection {\n id: string;\n labelKey?: string;\n items: EfNavItem[];\n}\n\nexport interface EfModule {\n id: EfModuleId;\n labelKey: string;\n /** PrimeNG icon class used by `ef-module-rail`, e.g. `pi pi-shopping-bag`. */\n icon: string;\n /**\n * CSS custom-property name (without the leading `--`) that the rail\n * applies to the module-current accent. Always `m-{id}` and resolves\n * via the SCSS layer's `[data-module]` selectors at runtime.\n */\n accent: `m-${EfModuleId}`;\n defaultRoute: string;\n navSections: EfNavSection[];\n /**\n * Logical grouping for rail divider placement. `ef-module-rail` renders\n * a 1px divider between two consecutive visible modules whose `group`\n * differs. Free string — `'operations' | 'commerce' | 'admin'` is the\n * conventional set but apps can use anything stable.\n */\n group?: string;\n}\n\n/**\n * Default skeleton for the eight ERP modules. Apps either consume this\n * directly via `EF_MODULES_TOKEN` or extend it with their own `navSections`.\n *\n * Phase 1 ships the metadata only — `ef-module-rail` (Phase 2) uses\n * `id` / `labelKey` / `icon` / `accent` / `defaultRoute`. `navSections`\n * are populated per-app as each module's screens land in Phase 4-5.\n */\nexport const EF_MODULES: ReadonlyArray<EfModule> = [\n {\n id: 'sales',\n labelKey: 'modules.sales',\n icon: 'pi pi-shopping-bag',\n accent: 'm-sales',\n defaultRoute: '/operations/sales',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'purchase',\n labelKey: 'modules.purchase',\n icon: 'pi pi-truck',\n accent: 'm-purchase',\n defaultRoute: '/operations/purchase',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'stock',\n labelKey: 'modules.stock',\n icon: 'pi pi-warehouse',\n accent: 'm-stock',\n defaultRoute: '/operations/stock',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'pos',\n labelKey: 'modules.pos',\n icon: 'pi pi-shop',\n accent: 'm-pos',\n defaultRoute: '/pos',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'marketing',\n labelKey: 'modules.marketing',\n icon: 'pi pi-megaphone',\n accent: 'm-marketing',\n defaultRoute: '/marketing',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'store',\n labelKey: 'modules.store',\n icon: 'pi pi-globe',\n accent: 'm-store',\n defaultRoute: '/store',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'finance',\n labelKey: 'modules.finance',\n icon: 'pi pi-chart-line',\n accent: 'm-finance',\n defaultRoute: '/finance',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'admin',\n labelKey: 'modules.admin',\n icon: 'pi pi-shield',\n accent: 'm-admin',\n defaultRoute: '/admin',\n navSections: [],\n group: 'admin',\n },\n];\n\n/**\n * DI token that the shell components (`ef-module-rail`, `ef-module-side`)\n * read from. Apps provide their own definition (typically extending\n * `EF_MODULES` with populated `navSections`):\n *\n * ```ts\n * providers: [\n * { provide: EF_MODULES_TOKEN, useValue: APP_MODULES }\n * ]\n * ```\n */\nexport const EF_MODULES_TOKEN = new InjectionToken<ReadonlyArray<EfModule>>(\n 'EF_MODULES',\n { providedIn: 'root', factory: () => EF_MODULES }\n);\n","import { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { EF_MODULES_TOKEN, EfModule, EfModuleId, EfNavItem } from './ef-module-registry';\n\n/**\n * Single source of truth for \"which ERP module is active right now.\"\n *\n * Watches the Router and matches the current URL against each module's\n * `defaultRoute`. The longest matching prefix wins, so `/operations/sales`\n * resolves to `sales` even though `/operations` could in theory match\n * something shorter.\n *\n * Consumers — `ef-module-rail`, `ef-module-side`, `ef-app-main`,\n * `ef-page-head` — read `activeModule()` and derive their state from it.\n *\n * Apps that navigate programmatically without a URL change (rare) can\n * call `setActiveModule(id)` to override.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfActiveModuleService {\n private readonly router = inject(Router);\n private readonly modules = inject(EF_MODULES_TOKEN);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _activeModule = signal<EfModule | null>(null);\n private readonly _activeNavItem = signal<EfNavItem | null>(null);\n\n readonly activeModule = this._activeModule.asReadonly();\n readonly activeModuleId = computed(() => this._activeModule()?.id ?? null);\n readonly activeNavItem = this._activeNavItem.asReadonly();\n\n constructor() {\n this.resolveFromUrl(this.router.url);\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(e => this.resolveFromUrl(e.urlAfterRedirects));\n }\n\n /**\n * Force the active module. Most apps don't need this — the router\n * subscription keeps `activeModule()` in sync automatically.\n */\n setActiveModule(id: EfModuleId | null): void {\n if (id === null) {\n this._activeModule.set(null);\n return;\n }\n const match = this.modules.find(m => m.id === id);\n if (match) this._activeModule.set(match);\n }\n\n private resolveFromUrl(url: string): void {\n const path = url.split('?')[0].split('#')[0];\n\n let bestModule: EfModule | null = null;\n let bestNavItem: EfNavItem | null = null;\n let bestLen = 0;\n for (const m of this.modules) {\n for (const route of this.routesFor(m)) {\n if (path === route || path.startsWith(route + '/')) {\n if (route.length > bestLen) {\n bestModule = m;\n bestNavItem = this.findNavItem(m, route);\n bestLen = route.length;\n }\n }\n }\n }\n this._activeModule.set(bestModule);\n this._activeNavItem.set(bestNavItem);\n }\n\n private findNavItem(m: EfModule, route: string): EfNavItem | null {\n for (const section of m.navSections) {\n for (const item of section.items) {\n if (item.route === route) return item;\n }\n }\n return null;\n }\n\n /**\n * Every URL prefix that should resolve back to this module: the\n * `defaultRoute` plus every nav item route. Modules whose nav items\n * span multiple URL prefixes (e.g. sales spread across `/operations/sales`\n * and `/parameters/sales`) need this to stay active across all of them.\n */\n private routesFor(m: EfModule): string[] {\n const routes: string[] = [m.defaultRoute];\n for (const section of m.navSections) {\n for (const item of section.items) {\n routes.push(item.route);\n }\n }\n return routes;\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { computed, DestroyRef, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\nexport type EfViewport = 'mobile' | 'tablet' | 'desktop';\n\ninterface ViewportQuery {\n viewport: EfViewport;\n query: string;\n}\n\nconst QUERIES: ViewportQuery[] = [\n { viewport: 'mobile', query: '(max-width: 767px)' },\n { viewport: 'tablet', query: '(min-width: 768px) and (max-width: 1279px)' },\n { viewport: 'desktop', query: '(min-width: 1280px)' },\n];\n\n/**\n * Emits the current viewport tier based on `window.matchMedia` breakpoints.\n *\n * Breakpoints come from `libs/tokens/targets.json`:\n * - mobile: ≤ 767px\n * - tablet: 768 – 1279px\n * - desktop: ≥ 1280px\n *\n * SSR-safe: returns `'desktop'` when `window` is unavailable.\n *\n * Usage:\n * ```ts\n * private viewport = inject(EfViewportService);\n *\n * isMobile = computed(() => this.viewport.current() === 'mobile');\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class EfViewportService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _current = signal<EfViewport>('desktop');\n\n readonly current = this._current.asReadonly();\n readonly isMobile = computed(() => this._current() === 'mobile');\n readonly isTablet = computed(() => this._current() === 'tablet');\n readonly isDesktop = computed(() => this._current() === 'desktop');\n\n constructor() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const win = this.document.defaultView;\n if (!win || typeof win.matchMedia !== 'function') return;\n\n const lists = QUERIES.map(({ viewport, query }) => {\n const mql = win.matchMedia(query);\n const handler = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) this._current.set(viewport);\n };\n handler(mql);\n mql.addEventListener('change', handler as (e: MediaQueryListEvent) => void);\n return { mql, handler };\n });\n\n this.destroyRef.onDestroy(() => {\n for (const { mql, handler } of lists) {\n mql.removeEventListener('change', handler as (e: MediaQueryListEvent) => void);\n }\n });\n }\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { EF_MODULES_TOKEN, EfModule, EfModuleId } from '../modules/ef-module-registry';\n\nexport type EfPermissionLevel = 'none' | 'read' | 'write' | 'admin';\n\nexport interface EfModulePermission {\n module: EfModuleId;\n level: EfPermissionLevel;\n}\n\nconst LEVEL_ORDER: Record<EfPermissionLevel, number> = {\n none: 0,\n read: 1,\n write: 2,\n admin: 3,\n};\n\nconst ACTION_REQUIRED: Record<Exclude<EfPermissionLevel, 'none'>, EfPermissionLevel> = {\n read: 'read',\n write: 'write',\n admin: 'admin',\n};\n\n/**\n * Module-scoped permission service.\n *\n * Apps populate it from their auth bootstrap once the user's profile is\n * loaded — typically via `setPermissions()` or by providing a custom\n * source signal:\n *\n * ```ts\n * // bootstrap.ts\n * const perms = inject(EfPermissionService);\n * perms.setPermissions(profile.permissions);\n * ```\n *\n * The service is the single source of truth for shell components\n * (`ef-module-rail`, `ef-module-side`, `*efCan` directive) and routing\n * defaults. Once the screens/menus → Mongo migration lands, the\n * permissions list will be served denormalized on the user/profile\n * document and consumed here without a join.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfPermissionService {\n private readonly modules = inject(EF_MODULES_TOKEN);\n\n private readonly _permissions = signal<ReadonlyArray<EfModulePermission>>([]);\n\n readonly permissions = this._permissions.asReadonly();\n\n /**\n * Replace the current permission set. Pass `[]` to clear (e.g., on logout).\n */\n setPermissions(perms: ReadonlyArray<EfModulePermission>): void {\n this._permissions.set(perms);\n }\n\n /**\n * The level granted to the current user for a given module.\n * Returns `'none'` if the module is not in the permission set.\n */\n level(module: EfModuleId): EfPermissionLevel {\n return this._permissions().find(p => p.module === module)?.level ?? 'none';\n }\n\n /**\n * Whether the current user can perform `action` on `module`.\n * Levels are hierarchical: `admin` > `write` > `read` > `none`.\n */\n can(module: EfModuleId, action: Exclude<EfPermissionLevel, 'none'> = 'read'): boolean {\n return LEVEL_ORDER[this.level(module)] >= LEVEL_ORDER[ACTION_REQUIRED[action]];\n }\n\n /**\n * The list of modules the user can read, in registry order.\n * Used by `ef-module-rail` to decide which icons render.\n */\n readonly visibleModules: Signal<ReadonlyArray<EfModule>> = computed(() => {\n const perms = this._permissions();\n const granted = new Set(\n perms.filter(p => p.level !== 'none').map(p => p.module)\n );\n return this.modules.filter(m => granted.has(m.id));\n });\n\n /**\n * The first visible module — the default landing module after login.\n * Returns `null` when the user has no modules.\n */\n readonly defaultModule: Signal<EfModule | null> = computed(() => {\n return this.visibleModules()[0] ?? null;\n });\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The bit of an app's session that shared chrome needs to act on.\n *\n * Signing out belongs to the app — it owns the auth client, the grant\n * refresh timer and where to land afterwards — but the control that\n * triggers it belongs to the shell. This token is the seam between them,\n * the same shape as `SCREEN_REF_DATA_SERVICE`.\n *\n * Components inject it optionally and hide their affordance when nothing\n * provides it, so an app that has not opted in shows no dead button.\n *\n * ```ts\n * // app.config.ts\n * { provide: EF_SESSION, useExisting: AuthorizeService }\n * ```\n */\nexport interface EfSession {\n /** End the session and send the user wherever the app decides. */\n logout(): void;\n}\n\nexport const EF_SESSION = new InjectionToken<EfSession>('EF_SESSION');\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Which build of the app is running.\n *\n * Apps generate this at build time — the framework cannot know it — and\n * provide it here so shared chrome can show it without importing anything\n * app-specific. `EfBuildStampComponent` is the intended consumer.\n *\n * ```ts\n * // app.config.ts\n * { provide: EF_BUILD_INFO, useValue: BUILD_INFO }\n * ```\n */\nexport interface EfBuildInfo {\n /** Release version. Empty when the app maintains none — consumers should\n * omit it rather than print a placeholder. */\n version: string;\n\n /** Short commit hash the build came from. */\n commit: string;\n\n /** Commit date as `YYYY-MM-DD` — what a reader actually recognises. */\n date: string;\n\n /** Branch the build came from, useful for telling develop from a release. */\n branch: string;\n\n /**\n * Which deployment this build was made for: `production`, `staging`,\n * `develop`, or `local`. Decided at build time from the ref, because a\n * production build is made from a tag rather than a branch.\n */\n environment: string;\n}\n\nexport const EF_BUILD_INFO = new InjectionToken<EfBuildInfo>('EF_BUILD_INFO');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"elasticias-core.mjs","sources":["../../../../libs/core/src/lib/services/loader.service.ts","../../../../libs/core/src/lib/services/cache.service.ts","../../../../libs/core/src/lib/services/toast.service.ts","../../../../libs/core/src/lib/services/confirm-dialog.service.ts","../../../../libs/core/src/lib/guards/screen.guard.ts","../../../../libs/core/src/lib/theme/app-state.ts","../../../../libs/core/src/lib/theme/ef-theme-config.service.ts","../../../../libs/core/src/lib/theme/ef-theme.ts","../../../../libs/core/src/lib/theme/locales/primeng-en.ts","../../../../libs/core/src/lib/theme/locales/primeng-fr.ts","../../../../libs/core/src/lib/theme/locales/primeng-ar.ts","../../../../libs/core/src/lib/modules/ef-module-registry.ts","../../../../libs/core/src/lib/modules/ef-active-module.service.ts","../../../../libs/core/src/lib/responsive/ef-viewport.service.ts","../../../../libs/core/src/lib/auth/ef-permission.service.ts","../../../../libs/core/src/lib/auth/ef-session.token.ts","../../../../libs/core/src/lib/build/ef-build-info.token.ts","../../../../libs/core/src/elasticias-core.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class LoaderService {\n private loadingSubject = new BehaviorSubject<boolean>(false);\n isLoading$ = this.loadingSubject.asObservable();\n\n show(): void {\n this.loadingSubject.next(true);\n }\n\n hide(): void {\n this.loadingSubject.next(false);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { StorageUtils } from '@elasticias/utils';\n\n@Injectable({ providedIn: 'root' })\nexport class CacheService {\n private cache: Record<string, unknown> = {};\n private useLocalStorage = false;\n\n configure(useLocalStorage = false): void {\n this.useLocalStorage = useLocalStorage;\n }\n\n getCache<T>(key: string): T | null {\n return this.useLocalStorage ? StorageUtils.getLocal<T>(key) : (this.cache[key] as T) ?? null;\n }\n\n setCache(key: string, value: unknown): void {\n if (this.useLocalStorage) {\n StorageUtils.setLocal(key, value);\n } else {\n this.cache[key] = value;\n }\n }\n\n updateCache(key: string, newValue: unknown): void {\n if (this.useLocalStorage) {\n const current = StorageUtils.getLocal(key);\n if (current && typeof current === 'object' && typeof newValue === 'object') {\n StorageUtils.setLocal(key, { ...(current as object), ...(newValue as object) });\n } else {\n StorageUtils.setLocal(key, newValue);\n }\n } else {\n const current = this.cache[key];\n if (current && typeof current === 'object' && typeof newValue === 'object') {\n this.cache[key] = { ...(current as object), ...(newValue as object) };\n } else {\n this.cache[key] = newValue;\n }\n }\n }\n\n removeCache(key: string): void {\n if (this.useLocalStorage) {\n StorageUtils.removeLocal(key);\n } else {\n delete this.cache[key];\n }\n }\n\n clearAllCache(): void {\n if (this.useLocalStorage) {\n StorageUtils.clearLocal();\n } else {\n this.cache = {};\n }\n }\n\n hasCache(key: string): boolean {\n return this.useLocalStorage ? StorageUtils.existsLocal(key) : key in this.cache;\n }\n}\n","import { Injectable, Injector, inject, signal } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\n\n/**\n * Toast severities — mapped 1:1 to the Comptoir status spectrum:\n * `info` → processing, `success` → delivered, `warn` → pending,\n * `error` → cancelled.\n */\nexport type EfToastSeverity = 'info' | 'success' | 'warn' | 'error';\n\n/** Optional inline action button rendered at the end of a toast. */\nexport interface EfToastAction {\n /** Translation key for the button label — preferred. */\n labelKey?: string;\n /** Direct label fallback when `labelKey` is empty. */\n label?: string;\n\n /** Visual tone — `'ghost'` (default) or `'primary'` for the\n * destructive / confirm action. */\n severity?: 'ghost' | 'primary';\n\n /** Click handler. */\n command?: () => void;\n\n /** Auto-close the toast after the click runs (default `true`). */\n dismissOnClick?: boolean;\n}\n\n/**\n * Toast options accepted by `EfToastService.show()`. Either a literal\n * `title` / `text` or their `*Key` translation variants — keys win\n * unless empty.\n */\nexport interface EfToastOptions {\n severity?: EfToastSeverity;\n title?: string;\n titleKey?: string;\n text?: string;\n textKey?: string;\n /** Auto-dismiss in ms; `0` = sticky (no auto-dismiss). */\n life?: number;\n actions?: EfToastAction[];\n}\n\n/** Active toast — instance held in `EfToastService.toasts`. */\nexport interface EfToast {\n id: number;\n severity: EfToastSeverity;\n title: string;\n text: string;\n life: number;\n actions?: EfToastAction[];\n}\n\n/**\n * Comptoir toast service — V2 successor to the legacy `ToastService`.\n *\n * Owns a signal-based queue (`toasts`) consumed by\n * `<ef-toast-region>`, AND forwards every toast to PrimeNG's\n * `MessageService` for back-compat with `<p-toast>` (still used by\n * ClientApp v1). Either renderer picks the toasts up; both work.\n *\n * Default i18n keys (override per-call via `titleKey` / `textKey`):\n * - `ef_toast_info_title`, `ef_toast_info_default`\n * - `ef_toast_success_title`, `ef_toast_success_default`\n * - `ef_toast_warn_title`, `ef_toast_warn_default`\n * - `ef_toast_error_title`, `ef_toast_error_default`\n *\n * Default lifespans: info 5s, success 4s, warn 6s, error 8s.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfToastService {\n private static readonly LIFE_INFO = 5000;\n private static readonly LIFE_SUCCESS = 4000;\n private static readonly LIFE_WARN = 6000;\n private static readonly LIFE_ERROR = 8000;\n\n /**\n * Lazy holders. Resolving TranslateService eagerly at construction\n * time pulls in HttpClient → HTTP_INTERCEPTORS → AuthorizeInterceptor\n * → AuthorizeService → ToastService → cycle. We defer to the first\n * actual translate / message-publish call.\n */\n private readonly injector = inject(Injector);\n private _translate?: TranslateService;\n private _messageService?: MessageService | null;\n private _messageServiceResolved = false;\n\n private nextId = 1;\n\n /** Live queue — `<ef-toast-region>` renders this. */\n readonly toasts = signal<ReadonlyArray<EfToast>>([]);\n\n /* ── Convenience methods (back-compat with the legacy\n ToastService signature: `(message?, title?, life?)`). ── */\n\n showInfo(message?: string, title?: string, life: number = EfToastService.LIFE_INFO): void {\n this.show({\n severity: 'info',\n title: title ?? this.t('ef_toast_info_title'),\n text: message ?? this.t('ef_toast_info_default'),\n life,\n });\n }\n\n showSuccess(message?: string, title?: string, life: number = EfToastService.LIFE_SUCCESS): void {\n this.show({\n severity: 'success',\n title: title ?? this.t('ef_toast_success_title'),\n text: message ?? this.t('ef_toast_success_default'),\n life,\n });\n }\n\n showWarn(message?: string, title?: string, life: number = EfToastService.LIFE_WARN): void {\n this.show({\n severity: 'warn',\n title: title ?? this.t('ef_toast_warn_title'),\n text: message ?? this.t('ef_toast_warn_default'),\n life,\n });\n }\n\n showError(message?: string, title?: string, life: number = EfToastService.LIFE_ERROR): void {\n this.show({\n severity: 'error',\n title: title ?? this.t('ef_toast_error_title'),\n text: message ?? this.t('ef_toast_error_default'),\n life,\n });\n }\n\n /** Generic show — opts can mix `title`/`titleKey`, `text`/`textKey`. */\n show(opts: EfToastOptions): EfToast {\n const severity = opts.severity ?? 'info';\n const toast: EfToast = {\n id: this.nextId++,\n severity,\n title: this.resolve(opts.title, opts.titleKey, this.defaultTitleKey(severity)),\n text: this.resolve(opts.text, opts.textKey, undefined),\n life: opts.life ?? this.defaultLife(severity),\n actions: opts.actions,\n };\n\n // Collapse a burst of identical toasts into one. A dashboard fans\n // out to many independent queries, so one rejected filter used to\n // stack the same message once per widget -- seven copies of \"a\n // validation error occurred\", burying the screen. Only toasts that\n // are still on screen dedupe, so the same message shown again later\n // still appears.\n const duplicate = this.toasts().find(\n t =>\n t.severity === toast.severity &&\n t.title === toast.title &&\n t.text === toast.text,\n );\n if (duplicate) return duplicate;\n\n this.toasts.update(list => [...list, toast]);\n\n // Forward to PrimeNG MessageService so v1's <p-toast> still\n // catches the toast. Sticky in PrimeNG is `life: 0`.\n this.messageService?.add({\n severity: toast.severity,\n summary: toast.title,\n detail: toast.text,\n life: toast.life || undefined,\n sticky: toast.life === 0,\n });\n\n return toast;\n }\n\n private get messageService(): MessageService | null {\n if (!this._messageServiceResolved) {\n this._messageServiceResolved = true;\n this._messageService = this.injector.get(MessageService, null, { optional: true });\n }\n return this._messageService ?? null;\n }\n\n dismiss(id: number): void {\n this.toasts.update(list => list.filter(t => t.id !== id));\n }\n\n clear(): void {\n this.toasts.set([]);\n this.messageService?.clear();\n }\n\n /* (messageService getter is defined just below `show` to keep it\n close to where it's consumed.) */\n\n /* ── Internals ─────────────────────────────────────────────── */\n\n private resolve(\n literal: string | undefined,\n key: string | undefined,\n fallbackKey: string | undefined,\n ): string {\n if (literal != null) return literal;\n if (key) return this.t(key);\n if (fallbackKey) return this.t(fallbackKey);\n return '';\n }\n\n private t(key: string): string {\n // Lazy-resolve TranslateService — see the field comment above\n // for the AuthorizeService cycle this avoids.\n this._translate ??= this.injector.get(TranslateService);\n const value = this._translate.instant(key);\n // `instant()` returns the key when no translation is loaded;\n // fall through to empty string so untranslated toasts don't\n // surface internal keys to end users.\n return value === key ? '' : value;\n }\n\n private defaultLife(severity: EfToastSeverity): number {\n switch (severity) {\n case 'info': return EfToastService.LIFE_INFO;\n case 'success': return EfToastService.LIFE_SUCCESS;\n case 'warn': return EfToastService.LIFE_WARN;\n case 'error': return EfToastService.LIFE_ERROR;\n }\n }\n\n private defaultTitleKey(severity: EfToastSeverity): string {\n return `ef_toast_${severity}_title`;\n }\n}\n\n/**\n * @deprecated Use `EfToastService` — same instance, new name. The\n * alias keeps existing imports compiling during the v1 → V2\n * migration.\n */\nexport { EfToastService as ToastService };\n","import { inject, Injectable } from '@angular/core';\nimport { ConfirmationService } from 'primeng/api';\n\n@Injectable({ providedIn: 'root' })\nexport class ConfirmDialogService {\n private readonly confirmationService = inject(ConfirmationService);\n\n confirm(\n message: string,\n acceptCallback?: () => void,\n rejectCallback?: () => void,\n event?: Event\n ): void {\n this.confirmationService.confirm({\n target: event ? (event.target as EventTarget) : undefined,\n message,\n header: 'Confirmation',\n closable: true,\n closeOnEscape: true,\n icon: 'pi pi-exclamation-triangle',\n rejectButtonProps: {\n label: 'Annuler',\n severity: 'secondary',\n outlined: true,\n },\n acceptButtonProps: {\n label: 'Confirmer',\n },\n accept: () => acceptCallback?.(),\n reject: () => rejectCallback?.(),\n });\n }\n}\n","import { inject } from '@angular/core';\nimport { CanActivateFn, ActivatedRouteSnapshot, Router } from '@angular/router';\nimport { StorageUtils } from '@elasticias/utils';\nimport { Permissions } from '@elasticias/types';\n\n/**\n * Configuration for the screen guard factory.\n */\nexport interface ScreenGuardConfig {\n /** Storage key where screen grants are stored (default: 'CURRENT_USER_GRANTS') */\n grantsStorageKey?: string;\n /** Route to redirect to when access is denied (default: '/') */\n deniedRedirect?: string;\n /** Minimum required permission to access the screen (default: Permissions.Read) */\n requiredPermission?: Permissions;\n /** Storage type to read grants from (default: 'session') */\n storageType?: 'local' | 'session';\n}\n\n/**\n * Creates a reusable Angular route guard that checks screen-level permissions.\n *\n * Usage in route definitions:\n * ```typescript\n * {\n * path: 'countries',\n * data: { screenCode: 'Countries' },\n * canActivate: [screenGuard()],\n * children: [\n * { path: '', component: CountriesComponent },\n * { path: 'details/:id', component: CountriesDetailsComponent },\n * ]\n * }\n * ```\n *\n * The guard reads the `screenCode` from route data (traversing parent routes)\n * and checks if the current user has at least the required permission (default: Read).\n */\nexport function screenGuard(config?: ScreenGuardConfig): CanActivateFn {\n return (route: ActivatedRouteSnapshot) => {\n const router = inject(Router);\n const grantsKey = config?.grantsStorageKey ?? 'CURRENT_USER_GRANTS';\n const deniedRedirect = config?.deniedRedirect ?? '/';\n const requiredPermission = config?.requiredPermission ?? Permissions.Read;\n const storageType = config?.storageType ?? 'local';\n\n const screenCode = getScreenCode(route);\n\n // If no screenCode found on this route or any parent, allow access\n if (!screenCode) {\n return true;\n }\n\n const screenGrants = storageType === 'session'\n ? StorageUtils.getSession<Record<string, { permissions?: string[] }>>(grantsKey)\n : StorageUtils.getLocal<Record<string, { permissions?: string[] }>>(grantsKey);\n\n if (!screenGrants) {\n router.navigate([deniedRedirect]);\n return false;\n }\n\n const grant = screenGrants[screenCode];\n if (!grant?.permissions?.includes(requiredPermission)) {\n router.navigate([deniedRedirect]);\n return false;\n }\n\n return true;\n };\n}\n\n/**\n * Walks up the route tree to find the nearest screenCode in route data.\n */\nfunction getScreenCode(route: ActivatedRouteSnapshot): string | undefined {\n let current: ActivatedRouteSnapshot | null = route;\n while (current) {\n const code = current.data?.['screenCode'] as string | undefined;\n if (code) return code;\n current = current.parent;\n }\n return undefined;\n}\n\n/**\n * Utility function to check if the current user has a specific permission on a screen.\n * Can be used in components/services outside of route guards.\n */\nexport function hasScreenPermission(\n screenCode: string,\n permission: Permissions,\n grantsStorageKey = 'CURRENT_USER_GRANTS',\n storageType: 'local' | 'session' = 'local'\n): boolean {\n const screenGrants = storageType === 'session'\n ? StorageUtils.getSession<Record<string, { permissions?: string[] }>>(grantsStorageKey)\n : StorageUtils.getLocal<Record<string, { permissions?: string[] }>>(grantsStorageKey);\n if (!screenGrants) return false;\n\n const grant = screenGrants[screenCode];\n return grant?.permissions?.includes(permission) ?? false;\n}\n","export interface AppState {\n preset?: string;\n primary?: string;\n surface?: string;\n darkTheme?: boolean;\n menuActive?: boolean;\n mobileMenuVisible?: boolean;\n designerKey?: string;\n RTL?: boolean;\n}\n\nexport const DEFAULT_APP_STATE: AppState = {\n preset: 'Lara',\n primary: 'noir',\n surface: null as any,\n darkTheme: false,\n menuActive: true,\n mobileMenuVisible: false,\n designerKey: 'primeng-designer-theme',\n RTL: false\n};\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { computed, effect, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\nimport { palette, updatePrimaryPalette } from '@primeng/themes';\nimport { StorageUtils } from '@elasticias/utils';\nimport { AppState, DEFAULT_APP_STATE } from './app-state';\n\n/**\n * Service that manages theme state: preset, primary color, surface, dark mode, RTL.\n * State is persisted to localStorage so user preferences survive page reloads.\n *\n * Apps can extend this service or use it directly.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class EfThemeConfigService {\n private readonly STORAGE_KEY = 'APP_CONFIG_STATE';\n\n appState = signal<AppState>(null as any);\n\n designerActive = signal(false);\n\n newsActive = signal(false);\n\n document = inject(DOCUMENT);\n\n platformId = inject(PLATFORM_ID);\n\n theme = computed(() => (this.appState()?.darkTheme ? 'dark' : 'light'));\n\n transitionComplete = signal<boolean>(false);\n\n constructor() {\n const initialState = this.loadAppState();\n this.appState.set({ ...initialState });\n\n // Apply preset class + RTL synchronously so the first paint has\n // the right theme — the effect below picks up subsequent changes\n // (including any subclass `appState.update()` issued before its\n // first run).\n this.updatePresetClass(initialState);\n if (isPlatformBrowser(this.platformId) && initialState?.RTL) {\n this.document.documentElement.setAttribute('dir', 'rtl');\n }\n\n effect(() => {\n const state = this.appState();\n if (!state) return;\n this.saveAppState(state);\n this.updatePresetClass(state);\n this.handleDarkModeTransition(state);\n this.applyRTL(state);\n });\n }\n\n private static readonly PRESET_CLASS_MAP: Record<string, string> = {\n Aura: 'theme-compact',\n Lara: 'theme-modern',\n Material: 'theme-material',\n Nora: 'theme-classic',\n Comptoir: 'theme-comptoir',\n };\n\n private static readonly TENANT_RAMP_STOPS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900] as const;\n\n private static readonly ALL_THEME_CLASSES = Object.values(EfThemeConfigService.PRESET_CLASS_MAP);\n\n private updatePresetClass(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n const body = this.document.body;\n body.classList.remove(...EfThemeConfigService.ALL_THEME_CLASSES);\n if (state.preset) {\n const cls = EfThemeConfigService.PRESET_CLASS_MAP[state.preset];\n if (cls) {\n body.classList.add(cls);\n }\n }\n }\n }\n\n private handleDarkModeTransition(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n if ((document as any).startViewTransition) {\n this.startViewTransition(state);\n } else {\n this.toggleDarkMode(state);\n this.onTransitionEnd();\n }\n }\n }\n\n private startViewTransition(state: AppState): void {\n const transition = (document as any).startViewTransition(() => {\n this.toggleDarkMode(state);\n });\n\n transition.ready\n .then(() => this.onTransitionEnd())\n .catch(() => { /* view transition aborted */ });\n }\n\n private toggleDarkMode(state: AppState): void {\n if (state.darkTheme) {\n this.document.documentElement.classList.add('p-dark');\n } else {\n this.document.documentElement.classList.remove('p-dark');\n }\n }\n\n private onTransitionEnd() {\n this.transitionComplete.set(true);\n setTimeout(() => {\n this.transitionComplete.set(false);\n });\n }\n\n private applyRTL(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n const setDir = () => {\n if (state.RTL) {\n this.document.documentElement.setAttribute('dir', 'rtl');\n } else {\n this.document.documentElement.removeAttribute('dir');\n }\n };\n\n if ((document as any).startViewTransition) {\n const t = (document as any).startViewTransition(() => setDir());\n t.ready.catch(() => { /* view transition aborted */ });\n } else {\n setDir();\n }\n }\n }\n\n hideMenu() {\n this.appState.update((state) => ({ ...state, menuActive: false }));\n }\n\n showMenu() {\n this.appState.update((state) => ({ ...state, menuActive: true }));\n }\n\n toggleMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: !state.mobileMenuVisible\n }));\n }\n\n closeMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: false\n }));\n }\n\n openMobileMenu() {\n this.appState.update((state) => ({\n ...state,\n mobileMenuVisible: true\n }));\n }\n\n hideNews() {\n this.newsActive.set(false);\n }\n\n showNews() {\n this.newsActive.set(true);\n }\n\n showDesigner() {\n this.designerActive.set(true);\n }\n\n hideDesigner() {\n this.designerActive.set(false);\n }\n\n private loadAppState(): AppState {\n if (isPlatformBrowser(this.platformId)) {\n const storedState = StorageUtils.getLocal<AppState>(this.STORAGE_KEY);\n if (storedState) {\n return storedState;\n }\n }\n return { ...DEFAULT_APP_STATE };\n }\n\n private saveAppState(state: AppState): void {\n if (isPlatformBrowser(this.platformId)) {\n StorageUtils.setLocal(this.STORAGE_KEY, state);\n }\n }\n\n /**\n * Applies a tenant's brand color across both PrimeNG's primary palette\n * and the Comptoir `--tenant-*` CSS variables.\n *\n * Generates a 50–950 ramp from the input hex via PrimeNG's `palette()`\n * helper, hands the full ramp to `updatePrimaryPalette()`, and writes\n * stops 50–900 onto `documentElement.style` so the SCSS layer's\n * `var(--tenant-*)` references resolve to the tenant's color.\n *\n * Call this whenever the active tenant changes (e.g., from an effect\n * watching `tenantService.storeConfig().primaryColor`).\n */\n setTenantAccent(hex: string): void {\n if (!hex) return;\n\n const ramp = palette(hex) as Record<string, string>;\n if (!ramp) return;\n\n updatePrimaryPalette(ramp);\n\n if (isPlatformBrowser(this.platformId)) {\n const root = this.document.documentElement;\n for (const stop of EfThemeConfigService.TENANT_RAMP_STOPS) {\n const value = ramp[String(stop)];\n if (value) {\n root.style.setProperty(`--tenant-${stop}`, value);\n }\n }\n }\n }\n}\n","import { definePreset } from '@primeng/themes';\nimport Aura from '@primeng/themes/aura';\nimport Lara from '@primeng/themes/lara';\n\n/* ──────────────────────────────────────────────────────────────────\n * LEGACY: Noir preset (Aura base, monochrome surface palette).\n * Kept for backward-compat with apps that haven't migrated to\n * Comptoir. Phase 5 of the design-system plan retrofits consumers\n * to EfComptoirTheme; once that lands, Noir + EfTheme can be\n * deleted.\n * ────────────────────────────────────────────────────────────── */\n\nconst Noir = definePreset(Aura, {\n semantic: {\n primary: {\n 50: '{surface.50}',\n 100: '{surface.100}',\n 200: '{surface.200}',\n 300: '{surface.300}',\n 400: '{surface.400}',\n 500: '{surface.500}',\n 600: '{surface.600}',\n 700: '{surface.700}',\n 800: '{surface.800}',\n 900: '{surface.900}',\n 950: '{surface.950}'\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.950}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.800}',\n activeColor: '{primary.700}'\n },\n highlight: {\n background: '{primary.950}',\n focusBackground: '{primary.700}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.50}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.200}',\n activeColor: '{primary.300}'\n },\n highlight: {\n background: '{primary.50}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n});\n\n/**\n * Default Elasticias theme configuration for PrimeNG.\n * Uses the Noir preset (surface-based primary colors) with dark mode support.\n *\n * @deprecated Migrate to {@link EfComptoirTheme} as part of Phase 5 of the\n * design-system plan. Will be removed once all consumers have moved.\n */\nexport const EfTheme = {\n preset: Noir,\n options: {\n darkModeSelector: '.p-dark',\n }\n};\n\nexport default EfTheme;\n\n/* ──────────────────────────────────────────────────────────────────\n * COMPTOIR: ink surface + tenant primary (Lara base).\n * Surface palette is the ink ramp from libs/tokens/colors.json.\n * Primary palette defaults to the parfumerie sample tenant; it is\n * runtime-replaced by EfThemeConfigService.setTenantAccent(hex)\n * via PrimeNG's updatePrimaryPalette() API.\n * ────────────────────────────────────────────────────────────── */\n\nconst ComptoirPreset = definePreset(Lara, {\n semantic: {\n primary: {\n 50: '#f7f0f4',\n 100: '#ecdce5',\n 200: '#d8b4c5',\n 300: '#b87a99',\n 400: '#934e74',\n 500: '#6f3257',\n 600: '#54243f',\n 700: '#401a30',\n 800: '#2c1221',\n 900: '#1a0913',\n 950: '#0d040a'\n },\n /* ──────────────────────────────────────────────────────────────\n * Control sizing (ADR-009). The native \"comptoir\" variant is the\n * default render path and is pinned to --hit-base (40px) in CSS;\n * these tokens align the OPT-IN PrimeNG variant (p-select filter,\n * p-multiselect, p-inputnumber stepper, etc.) to the same canonical\n * heights so the two paths agree:\n * base → 40px (--hit-base) sm → 32px (--hit) lg → 48px (--hit-touch, POS/mobile)\n * Lara form-field height ≈ paddingY*2 + lineHeight(1.5)*fontSize(14px) + 2px border.\n * base: 8px*2 + 21 + 2 ≈ 40px · sm: 5px*2 + ~18 + 2 ≈ 32px · lg: 12px*2 + 21 + 2 ≈ 48px\n * NOTE: exact pixel height depends on the app's root font-size; the\n * native default path is the verified one — confirm the PrimeNG\n * opt-in controls visually in the running app and nudge paddingY if\n * they read 1-2px off. Border radius matches --r-md (12px). */\n formField: {\n paddingX: '0.75rem',\n paddingY: '0.5rem',\n borderRadius: '12px',\n sm: {\n fontSize: '0.78rem',\n paddingX: '0.625rem',\n paddingY: '0.3125rem'\n },\n lg: {\n fontSize: '0.9375rem',\n paddingX: '0.875rem',\n paddingY: '0.75rem'\n }\n },\n colorScheme: {\n light: {\n primary: {\n color: '{primary.500}',\n contrastColor: '#ffffff',\n hoverColor: '{primary.600}',\n activeColor: '{primary.700}'\n },\n surface: {\n 0: '#ffffff',\n 50: '#f8f9fb',\n 100: '#f1f3f6',\n 200: '#e4e8ee',\n 300: '#cdd3dd',\n 400: '#9ca5b3',\n 500: '#6c7280',\n 600: '#4a4f5a',\n 700: '#2f3239',\n 800: '#1d1f24',\n 900: '#0f1115',\n 950: '#06070a'\n },\n highlight: {\n background: '{primary.500}',\n focusBackground: '{primary.600}',\n color: '#ffffff',\n focusColor: '#ffffff'\n }\n },\n dark: {\n primary: {\n color: '{primary.400}',\n contrastColor: '{primary.950}',\n hoverColor: '{primary.300}',\n activeColor: '{primary.200}'\n },\n surface: {\n 0: '#000000',\n 50: '#06070a',\n 100: '#0f1115',\n 200: '#1d1f24',\n 300: '#2f3239',\n 400: '#4a4f5a',\n 500: '#6c7280',\n 600: '#9ca5b3',\n 700: '#cdd3dd',\n 800: '#e4e8ee',\n 900: '#f1f3f6',\n 950: '#f8f9fb'\n },\n highlight: {\n background: '{primary.400}',\n focusBackground: '{primary.300}',\n color: '{primary.950}',\n focusColor: '{primary.950}'\n }\n }\n }\n }\n});\n\n/**\n * Comptoir theme configuration for PrimeNG (Phase 1 / design-system v0.2).\n * Surface palette = ink ramp; primary palette = tenant accent\n * (runtime-driven via `EfThemeConfigService.setTenantAccent(hex)`).\n *\n * Usage with providePrimeNG:\n * ```ts\n * providePrimeNG({ theme: EfComptoirTheme, ripple: true })\n * ```\n *\n * Pair with `state.preset = 'Comptoir'` so the body class becomes\n * `theme-comptoir` (avoids legacy `theme-modern` radius overrides).\n */\nexport const EfComptoirTheme = {\n preset: ComptoirPreset,\n options: {\n darkModeSelector: '.p-dark',\n }\n};\n","import { Translation } from 'primeng/api';\n\n/**\n * English locale for PrimeNG components.\n *\n * Usage:\n * ```ts\n * import { PRIMENG_EN_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_EN_LOCALE;\n * ```\n */\nexport const PRIMENG_EN_LOCALE: Translation = {\n startsWith: 'Starts with',\n contains: 'Contains',\n notContains: 'Not contains',\n endsWith: 'Ends with',\n equals: 'Equals',\n notEquals: 'Not equals',\n noFilter: 'No Filter',\n lt: 'Less than',\n lte: 'Less than or equal to',\n gt: 'Greater than',\n gte: 'Greater than or equal to',\n dateIs: 'Date is',\n dateIsNot: 'Date is not',\n dateBefore: 'Date is before',\n dateAfter: 'Date is after',\n clear: 'Clear',\n apply: 'Apply',\n matchAll: 'Match All',\n matchAny: 'Match Any',\n addRule: 'Add Rule',\n removeRule: 'Remove Rule',\n accept: 'Yes',\n reject: 'No',\n choose: 'Choose',\n upload: 'Upload',\n cancel: 'Cancel',\n completed: 'Completed',\n pending: 'Pending',\n fileSizeTypes: ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],\n dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n chooseYear: 'Choose Year',\n chooseMonth: 'Choose Month',\n chooseDate: 'Choose Date',\n prevDecade: 'Previous Decade',\n nextDecade: 'Next Decade',\n prevYear: 'Previous Year',\n nextYear: 'Next Year',\n prevMonth: 'Previous Month',\n nextMonth: 'Next Month',\n prevHour: 'Previous Hour',\n nextHour: 'Next Hour',\n prevMinute: 'Previous Minute',\n nextMinute: 'Next Minute',\n prevSecond: 'Previous Second',\n nextSecond: 'Next Second',\n am: 'AM',\n pm: 'PM',\n today: 'Today',\n weekHeader: 'Wk',\n firstDayOfWeek: 0,\n showMonthAfterYear: false,\n dateFormat: 'mm/dd/yy',\n weak: 'Weak',\n medium: 'Medium',\n strong: 'Strong',\n passwordPrompt: 'Enter a password',\n emptyFilterMessage: 'No results found',\n searchMessage: '{0} results are available',\n selectionMessage: '{0} items selected',\n emptySelectionMessage: 'No selected item',\n emptySearchMessage: 'No results found',\n emptyMessage: 'No available options',\n aria: {\n trueLabel: 'True',\n falseLabel: 'False',\n nullLabel: 'Not Selected',\n star: '1 star',\n stars: '{star} stars',\n selectAll: 'All items selected',\n unselectAll: 'All items unselected',\n close: 'Close',\n previous: 'Previous',\n next: 'Next',\n navigation: 'Navigation',\n scrollTop: 'Scroll Top',\n moveTop: 'Move Top',\n moveUp: 'Move Up',\n moveDown: 'Move Down',\n moveBottom: 'Move Bottom',\n moveToTarget: 'Move to Target',\n moveToSource: 'Move to Source',\n moveAllToTarget: 'Move All to Target',\n moveAllToSource: 'Move All to Source',\n pageLabel: 'Page {page}',\n firstPageLabel: 'First Page',\n lastPageLabel: 'Last Page',\n nextPageLabel: 'Next Page',\n prevPageLabel: 'Previous Page',\n rowsPerPageLabel: 'Rows per page',\n jumpToPageDropdownLabel: 'Jump to Page Dropdown',\n jumpToPageInputLabel: 'Jump to Page Input',\n selectRow: 'Row Selected',\n unselectRow: 'Row Unselected',\n expandRow: 'Row Expanded',\n collapseRow: 'Row Collapsed',\n showFilterMenu: 'Show Filter Menu',\n hideFilterMenu: 'Hide Filter Menu',\n filterOperator: 'Filter Operator',\n filterConstraint: 'Filter Constraint',\n editRow: 'Row Edit',\n saveEdit: 'Save Edit',\n cancelEdit: 'Cancel Edit',\n listView: 'List View',\n gridView: 'Grid View',\n slide: 'Slide',\n slideNumber: '{slideNumber}',\n zoomImage: 'Zoom Image',\n zoomIn: 'Zoom In',\n zoomOut: 'Zoom Out',\n rotateRight: 'Rotate Right',\n rotateLeft: 'Rotate Left',\n listLabel: 'Option List',\n },\n} as Translation;\n","import { Translation } from 'primeng/api';\n\n/**\n * French locale for PrimeNG components.\n *\n * Usage:\n * ```ts\n * import { PRIMENG_FR_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_FR_LOCALE;\n * ```\n */\nexport const PRIMENG_FR_LOCALE: Translation = {\n startsWith: 'Commence par',\n contains: 'Contient',\n notContains: 'Ne contient pas',\n endsWith: 'Se termine par',\n equals: 'Égal à',\n notEquals: 'Différent de',\n noFilter: 'Aucun filtre',\n lt: 'Inférieur à',\n lte: 'Inférieur ou égal à',\n gt: 'Supérieur à',\n gte: 'Supérieur ou égal à',\n dateIs: 'La date est',\n dateIsNot: \"La date n'est pas\",\n dateBefore: 'La date est avant',\n dateAfter: 'La date est après',\n clear: 'Effacer',\n apply: 'Appliquer',\n matchAll: 'Correspond à tous',\n matchAny: \"Correspond à n'importe quel\",\n addRule: 'Ajouter une règle',\n removeRule: 'Supprimer la règle',\n accept: 'Oui',\n reject: 'Non',\n choose: 'Choisir',\n upload: 'Télécharger',\n cancel: 'Annuler',\n completed: 'Terminé',\n pending: 'En attente',\n fileSizeTypes: ['o', 'Ko', 'Mo', 'Go', 'To', 'Po', 'Eo', 'Zo', 'Yo'],\n dayNames: ['Dimanche', 'Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\n dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\n dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],\n monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\n monthNamesShort: ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun', 'Jul', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc'],\n chooseYear: \"Choisir l'année\",\n chooseMonth: 'Choisir le mois',\n chooseDate: 'Choisir la date',\n prevDecade: 'Décennie précédente',\n nextDecade: 'Décennie suivante',\n prevYear: 'Année précédente',\n nextYear: 'Année suivante',\n prevMonth: 'Mois précédent',\n nextMonth: 'Mois suivant',\n prevHour: 'Heure précédente',\n nextHour: 'Heure suivante',\n prevMinute: 'Minute précédente',\n nextMinute: 'Minute suivante',\n prevSecond: 'Seconde précédente',\n nextSecond: 'Seconde suivante',\n am: 'AM',\n pm: 'PM',\n today: \"Aujourd'hui\",\n weekHeader: 'Sem',\n firstDayOfWeek: 1,\n showMonthAfterYear: false,\n dateFormat: 'dd/mm/yy',\n weak: 'Faible',\n medium: 'Moyen',\n strong: 'Fort',\n passwordPrompt: 'Entrez un mot de passe',\n emptyFilterMessage: 'Aucun résultat trouvé',\n searchMessage: '{0} résultats sont disponibles',\n selectionMessage: '{0} éléments sélectionnés',\n emptySelectionMessage: 'Aucun élément sélectionné',\n emptySearchMessage: 'Aucun résultat trouvé',\n emptyMessage: 'Aucune option disponible',\n aria: {\n trueLabel: 'Vrai',\n falseLabel: 'Faux',\n nullLabel: 'Non sélectionné',\n star: '1 étoile',\n stars: '{star} étoiles',\n selectAll: 'Tous les éléments sélectionnés',\n unselectAll: 'Tous les éléments désélectionnés',\n close: 'Fermer',\n previous: 'Précédent',\n next: 'Suivant',\n navigation: 'Navigation',\n scrollTop: 'Défiler vers le haut',\n moveTop: 'Déplacer vers le haut',\n moveUp: 'Déplacer vers le haut',\n moveDown: 'Déplacer vers le bas',\n moveBottom: 'Déplacer vers le bas',\n moveToTarget: 'Déplacer vers la cible',\n moveToSource: 'Déplacer vers la source',\n moveAllToTarget: 'Tout déplacer vers la cible',\n moveAllToSource: 'Tout déplacer vers la source',\n pageLabel: 'Page {page}',\n firstPageLabel: 'Première page',\n lastPageLabel: 'Dernière page',\n nextPageLabel: 'Page suivante',\n prevPageLabel: 'Page précédente',\n rowsPerPageLabel: 'Lignes par page',\n jumpToPageDropdownLabel: 'Aller à la page',\n jumpToPageInputLabel: 'Aller à la page',\n selectRow: 'Ligne sélectionnée',\n unselectRow: 'Ligne désélectionnée',\n expandRow: 'Ligne développée',\n collapseRow: 'Ligne réduite',\n showFilterMenu: 'Afficher le menu de filtrage',\n hideFilterMenu: 'Masquer le menu de filtrage',\n filterOperator: 'Opérateur de filtrage',\n filterConstraint: 'Contrainte de filtrage',\n editRow: 'Modifier la ligne',\n saveEdit: 'Enregistrer la modification',\n cancelEdit: 'Annuler la modification',\n listView: 'Vue en liste',\n gridView: 'Vue en grille',\n slide: 'Glisser',\n slideNumber: '{slideNumber}',\n zoomImage: \"Agrandir l'image\",\n zoomIn: 'Zoomer',\n zoomOut: 'Dézoomer',\n rotateRight: 'Faire pivoter à droite',\n rotateLeft: 'Faire pivoter à gauche',\n listLabel: 'Liste',\n },\n} as Translation;\n","import { Translation } from 'primeng/api';\n\n/**\n * Arabic locale for PrimeNG components (Moroccan month names).\n *\n * Usage:\n * ```ts\n * import { PRIMENG_AR_LOCALE } from '@elasticias/core';\n * this.primeng.translation = PRIMENG_AR_LOCALE;\n * ```\n */\nexport const PRIMENG_AR_LOCALE: Translation = {\n startsWith: 'يبدأ بـ',\n contains: 'يحتوي على',\n notContains: 'لا يحتوي على',\n endsWith: 'ينتهي بـ',\n equals: 'يساوي',\n notEquals: 'لا يساوي',\n noFilter: 'بدون فلتر',\n lt: 'أقل من',\n lte: 'أقل من أو يساوي',\n gt: 'أكبر من',\n gte: 'أكبر من أو يساوي',\n dateIs: 'التاريخ هو',\n dateIsNot: 'التاريخ ليس',\n dateBefore: 'التاريخ قبل',\n dateAfter: 'التاريخ بعد',\n clear: 'مسح',\n apply: 'تطبيق',\n matchAll: 'تطابق الكل',\n matchAny: 'تطابق أي',\n addRule: 'إضافة قاعدة',\n removeRule: 'حذف القاعدة',\n accept: 'نعم',\n reject: 'لا',\n choose: 'اختيار',\n upload: 'رفع',\n cancel: 'إلغاء',\n completed: 'مكتمل',\n pending: 'قيد الانتظار',\n fileSizeTypes: ['بايت', 'ك.ب', 'م.ب', 'ج.ب', 'ت.ب', 'ب.ب', 'إ.ب', 'ز.ب', 'ي.ب'],\n dayNames: ['الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة', 'السبت'],\n dayNamesShort: ['أحد', 'اثن', 'ثلا', 'أرب', 'خمي', 'جمع', 'سبت'],\n dayNamesMin: ['ح', 'ن', 'ث', 'ر', 'خ', 'ج', 'س'],\n monthNames: ['يناير', 'فبراير', 'مارس', 'أبريل', 'ماي', 'يونيو', 'يوليوز', 'غشت', 'شتنبر', 'أكتوبر', 'نونبر', 'دجنبر'],\n monthNamesShort: ['ينا', 'فبر', 'مار', 'أبر', 'ماي', 'يون', 'يول', 'غشت', 'شتن', 'أكت', 'نون', 'دجن'],\n chooseYear: 'اختر السنة',\n chooseMonth: 'اختر الشهر',\n chooseDate: 'اختر التاريخ',\n prevDecade: 'العقد السابق',\n nextDecade: 'العقد التالي',\n prevYear: 'السنة السابقة',\n nextYear: 'السنة التالية',\n prevMonth: 'الشهر السابق',\n nextMonth: 'الشهر التالي',\n prevHour: 'الساعة السابقة',\n nextHour: 'الساعة التالية',\n prevMinute: 'الدقيقة السابقة',\n nextMinute: 'الدقيقة التالية',\n prevSecond: 'الثانية السابقة',\n nextSecond: 'الثانية التالية',\n am: 'ص',\n pm: 'م',\n today: 'اليوم',\n weekHeader: 'أس',\n firstDayOfWeek: 1,\n showMonthAfterYear: false,\n dateFormat: 'dd/mm/yy',\n weak: 'ضعيف',\n medium: 'متوسط',\n strong: 'قوي',\n passwordPrompt: 'أدخل كلمة المرور',\n emptyFilterMessage: 'لم يتم العثور على نتائج',\n searchMessage: '{0} نتائج متاحة',\n selectionMessage: '{0} عناصر محددة',\n emptySelectionMessage: 'لا يوجد عنصر محدد',\n emptySearchMessage: 'لم يتم العثور على نتائج',\n emptyMessage: 'لا توجد خيارات متاحة',\n aria: {\n trueLabel: 'صحيح',\n falseLabel: 'خاطئ',\n nullLabel: 'غير محدد',\n star: 'نجمة واحدة',\n stars: '{star} نجوم',\n selectAll: 'تم تحديد جميع العناصر',\n unselectAll: 'تم إلغاء تحديد جميع العناصر',\n close: 'إغلاق',\n previous: 'السابق',\n next: 'التالي',\n navigation: 'التنقل',\n scrollTop: 'التمرير للأعلى',\n moveTop: 'نقل للأعلى',\n moveUp: 'نقل للأعلى',\n moveDown: 'نقل للأسفل',\n moveBottom: 'نقل للأسفل',\n moveToTarget: 'نقل إلى الهدف',\n moveToSource: 'نقل إلى المصدر',\n moveAllToTarget: 'نقل الكل إلى الهدف',\n moveAllToSource: 'نقل الكل إلى المصدر',\n pageLabel: 'صفحة {page}',\n firstPageLabel: 'الصفحة الأولى',\n lastPageLabel: 'الصفحة الأخيرة',\n nextPageLabel: 'الصفحة التالية',\n prevPageLabel: 'الصفحة السابقة',\n rowsPerPageLabel: 'سطور في الصفحة',\n jumpToPageDropdownLabel: 'الانتقال إلى الصفحة',\n jumpToPageInputLabel: 'الانتقال إلى الصفحة',\n selectRow: 'تم تحديد السطر',\n unselectRow: 'تم إلغاء تحديد السطر',\n expandRow: 'تم توسيع السطر',\n collapseRow: 'تم طي السطر',\n showFilterMenu: 'إظهار قائمة الفلتر',\n hideFilterMenu: 'إخفاء قائمة الفلتر',\n filterOperator: 'عامل الفلتر',\n filterConstraint: 'قيد الفلتر',\n editRow: 'تعديل السطر',\n saveEdit: 'حفظ التعديل',\n cancelEdit: 'إلغاء التعديل',\n listView: 'عرض قائمة',\n gridView: 'عرض شبكة',\n slide: 'تمرير',\n slideNumber: '{slideNumber}',\n zoomImage: 'تكبير الصورة',\n zoomIn: 'تكبير',\n zoomOut: 'تصغير',\n rotateRight: 'تدوير لليمين',\n rotateLeft: 'تدوير لليسار',\n listLabel: 'قائمة',\n },\n} as Translation;\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The eight ERP modules surfaced by Comptoir. New modules require\n * a matching `--m-{id}` token in the SCSS layer (libs/ui/src/lib/_comptoir.scss)\n * and a labelKey in the consuming app's i18n bundles.\n */\nexport type EfModuleId =\n | 'sales'\n | 'purchase'\n | 'stock'\n | 'pos'\n | 'marketing'\n | 'store'\n | 'finance'\n | 'admin';\n\nexport type EfNavAction = 'read' | 'write' | 'admin';\n\nexport interface EfNavItem {\n /** Stable identifier — usually matches the screen code (e.g. `Users`, `SalesOrders`). */\n id: string;\n labelKey: string;\n icon?: string;\n route: string;\n /** Minimum permission level required to render this item. Defaults to `read`. */\n requiredAction?: EfNavAction;\n /**\n * Optional count chip rendered after the label (e.g. `Commandes ⟨14⟩`).\n * Apps typically derive this from a service signal and patch the\n * registry — it can be number, string, or anything stringifiable.\n */\n badge?: string | number;\n}\n\nexport interface EfNavSection {\n id: string;\n labelKey?: string;\n items: EfNavItem[];\n}\n\nexport interface EfModule {\n id: EfModuleId;\n labelKey: string;\n /** PrimeNG icon class used by `ef-module-rail`, e.g. `pi pi-shopping-bag`. */\n icon: string;\n /**\n * CSS custom-property name (without the leading `--`) that the rail\n * applies to the module-current accent. Always `m-{id}` and resolves\n * via the SCSS layer's `[data-module]` selectors at runtime.\n */\n accent: `m-${EfModuleId}`;\n defaultRoute: string;\n navSections: EfNavSection[];\n /**\n * Logical grouping for rail divider placement. `ef-module-rail` renders\n * a 1px divider between two consecutive visible modules whose `group`\n * differs. Free string — `'operations' | 'commerce' | 'admin'` is the\n * conventional set but apps can use anything stable.\n */\n group?: string;\n}\n\n/**\n * Default skeleton for the eight ERP modules. Apps either consume this\n * directly via `EF_MODULES_TOKEN` or extend it with their own `navSections`.\n *\n * Phase 1 ships the metadata only — `ef-module-rail` (Phase 2) uses\n * `id` / `labelKey` / `icon` / `accent` / `defaultRoute`. `navSections`\n * are populated per-app as each module's screens land in Phase 4-5.\n */\nexport const EF_MODULES: ReadonlyArray<EfModule> = [\n {\n id: 'sales',\n labelKey: 'modules.sales',\n icon: 'pi pi-shopping-bag',\n accent: 'm-sales',\n defaultRoute: '/operations/sales',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'purchase',\n labelKey: 'modules.purchase',\n icon: 'pi pi-truck',\n accent: 'm-purchase',\n defaultRoute: '/operations/purchase',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'stock',\n labelKey: 'modules.stock',\n icon: 'pi pi-warehouse',\n accent: 'm-stock',\n defaultRoute: '/operations/stock',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'pos',\n labelKey: 'modules.pos',\n icon: 'pi pi-shop',\n accent: 'm-pos',\n defaultRoute: '/pos',\n navSections: [],\n group: 'operations',\n },\n {\n id: 'marketing',\n labelKey: 'modules.marketing',\n icon: 'pi pi-megaphone',\n accent: 'm-marketing',\n defaultRoute: '/marketing',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'store',\n labelKey: 'modules.store',\n icon: 'pi pi-globe',\n accent: 'm-store',\n defaultRoute: '/store',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'finance',\n labelKey: 'modules.finance',\n icon: 'pi pi-chart-line',\n accent: 'm-finance',\n defaultRoute: '/finance',\n navSections: [],\n group: 'commerce',\n },\n {\n id: 'admin',\n labelKey: 'modules.admin',\n icon: 'pi pi-shield',\n accent: 'm-admin',\n defaultRoute: '/admin',\n navSections: [],\n group: 'admin',\n },\n];\n\n/**\n * DI token that the shell components (`ef-module-rail`, `ef-module-side`)\n * read from. Apps provide their own definition (typically extending\n * `EF_MODULES` with populated `navSections`):\n *\n * ```ts\n * providers: [\n * { provide: EF_MODULES_TOKEN, useValue: APP_MODULES }\n * ]\n * ```\n */\nexport const EF_MODULES_TOKEN = new InjectionToken<ReadonlyArray<EfModule>>(\n 'EF_MODULES',\n { providedIn: 'root', factory: () => EF_MODULES }\n);\n","import { computed, DestroyRef, inject, Injectable, signal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { filter } from 'rxjs/operators';\nimport { EF_MODULES_TOKEN, EfModule, EfModuleId, EfNavItem } from './ef-module-registry';\n\n/**\n * Single source of truth for \"which ERP module is active right now.\"\n *\n * Watches the Router and matches the current URL against each module's\n * `defaultRoute`. The longest matching prefix wins, so `/operations/sales`\n * resolves to `sales` even though `/operations` could in theory match\n * something shorter.\n *\n * Consumers — `ef-module-rail`, `ef-module-side`, `ef-app-main`,\n * `ef-page-head` — read `activeModule()` and derive their state from it.\n *\n * Apps that navigate programmatically without a URL change (rare) can\n * call `setActiveModule(id)` to override.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfActiveModuleService {\n private readonly router = inject(Router);\n private readonly modules = inject(EF_MODULES_TOKEN);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _activeModule = signal<EfModule | null>(null);\n private readonly _activeNavItem = signal<EfNavItem | null>(null);\n\n readonly activeModule = this._activeModule.asReadonly();\n readonly activeModuleId = computed(() => this._activeModule()?.id ?? null);\n readonly activeNavItem = this._activeNavItem.asReadonly();\n\n constructor() {\n this.resolveFromUrl(this.router.url);\n\n this.router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n takeUntilDestroyed(this.destroyRef),\n )\n .subscribe(e => this.resolveFromUrl(e.urlAfterRedirects));\n }\n\n /**\n * Force the active module. Most apps don't need this — the router\n * subscription keeps `activeModule()` in sync automatically.\n */\n setActiveModule(id: EfModuleId | null): void {\n if (id === null) {\n this._activeModule.set(null);\n return;\n }\n const match = this.modules.find(m => m.id === id);\n if (match) this._activeModule.set(match);\n }\n\n private resolveFromUrl(url: string): void {\n const path = url.split('?')[0].split('#')[0];\n\n let bestModule: EfModule | null = null;\n let bestNavItem: EfNavItem | null = null;\n let bestLen = 0;\n for (const m of this.modules) {\n for (const route of this.routesFor(m)) {\n if (path === route || path.startsWith(route + '/')) {\n if (route.length > bestLen) {\n bestModule = m;\n bestNavItem = this.findNavItem(m, route);\n bestLen = route.length;\n }\n }\n }\n }\n this._activeModule.set(bestModule);\n this._activeNavItem.set(bestNavItem);\n }\n\n private findNavItem(m: EfModule, route: string): EfNavItem | null {\n for (const section of m.navSections) {\n for (const item of section.items) {\n if (item.route === route) return item;\n }\n }\n return null;\n }\n\n /**\n * Every URL prefix that should resolve back to this module: the\n * `defaultRoute` plus every nav item route. Modules whose nav items\n * span multiple URL prefixes (e.g. sales spread across `/operations/sales`\n * and `/parameters/sales`) need this to stay active across all of them.\n */\n private routesFor(m: EfModule): string[] {\n const routes: string[] = [m.defaultRoute];\n for (const section of m.navSections) {\n for (const item of section.items) {\n routes.push(item.route);\n }\n }\n return routes;\n }\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport { computed, DestroyRef, inject, Injectable, PLATFORM_ID, signal } from '@angular/core';\n\nexport type EfViewport = 'mobile' | 'tablet' | 'desktop';\n\ninterface ViewportQuery {\n viewport: EfViewport;\n query: string;\n}\n\nconst QUERIES: ViewportQuery[] = [\n { viewport: 'mobile', query: '(max-width: 767px)' },\n { viewport: 'tablet', query: '(min-width: 768px) and (max-width: 1279px)' },\n { viewport: 'desktop', query: '(min-width: 1280px)' },\n];\n\n/**\n * Emits the current viewport tier based on `window.matchMedia` breakpoints.\n *\n * Breakpoints come from `libs/tokens/targets.json`:\n * - mobile: ≤ 767px\n * - tablet: 768 – 1279px\n * - desktop: ≥ 1280px\n *\n * SSR-safe: returns `'desktop'` when `window` is unavailable.\n *\n * Usage:\n * ```ts\n * private viewport = inject(EfViewportService);\n *\n * isMobile = computed(() => this.viewport.current() === 'mobile');\n * ```\n */\n@Injectable({ providedIn: 'root' })\nexport class EfViewportService {\n private readonly document = inject(DOCUMENT);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly destroyRef = inject(DestroyRef);\n\n private readonly _current = signal<EfViewport>('desktop');\n\n readonly current = this._current.asReadonly();\n readonly isMobile = computed(() => this._current() === 'mobile');\n readonly isTablet = computed(() => this._current() === 'tablet');\n readonly isDesktop = computed(() => this._current() === 'desktop');\n\n constructor() {\n if (!isPlatformBrowser(this.platformId)) return;\n\n const win = this.document.defaultView;\n if (!win || typeof win.matchMedia !== 'function') return;\n\n const lists = QUERIES.map(({ viewport, query }) => {\n const mql = win.matchMedia(query);\n const handler = (e: MediaQueryListEvent | MediaQueryList) => {\n if (e.matches) this._current.set(viewport);\n };\n handler(mql);\n mql.addEventListener('change', handler as (e: MediaQueryListEvent) => void);\n return { mql, handler };\n });\n\n this.destroyRef.onDestroy(() => {\n for (const { mql, handler } of lists) {\n mql.removeEventListener('change', handler as (e: MediaQueryListEvent) => void);\n }\n });\n }\n}\n","import { computed, inject, Injectable, Signal, signal } from '@angular/core';\nimport { EF_MODULES_TOKEN, EfModule, EfModuleId } from '../modules/ef-module-registry';\n\nexport type EfPermissionLevel = 'none' | 'read' | 'write' | 'admin';\n\nexport interface EfModulePermission {\n module: EfModuleId;\n level: EfPermissionLevel;\n}\n\nconst LEVEL_ORDER: Record<EfPermissionLevel, number> = {\n none: 0,\n read: 1,\n write: 2,\n admin: 3,\n};\n\nconst ACTION_REQUIRED: Record<Exclude<EfPermissionLevel, 'none'>, EfPermissionLevel> = {\n read: 'read',\n write: 'write',\n admin: 'admin',\n};\n\n/**\n * Module-scoped permission service.\n *\n * Apps populate it from their auth bootstrap once the user's profile is\n * loaded — typically via `setPermissions()` or by providing a custom\n * source signal:\n *\n * ```ts\n * // bootstrap.ts\n * const perms = inject(EfPermissionService);\n * perms.setPermissions(profile.permissions);\n * ```\n *\n * The service is the single source of truth for shell components\n * (`ef-module-rail`, `ef-module-side`, `*efCan` directive) and routing\n * defaults. Once the screens/menus → Mongo migration lands, the\n * permissions list will be served denormalized on the user/profile\n * document and consumed here without a join.\n */\n@Injectable({ providedIn: 'root' })\nexport class EfPermissionService {\n private readonly modules = inject(EF_MODULES_TOKEN);\n\n private readonly _permissions = signal<ReadonlyArray<EfModulePermission>>([]);\n\n readonly permissions = this._permissions.asReadonly();\n\n /**\n * Replace the current permission set. Pass `[]` to clear (e.g., on logout).\n */\n setPermissions(perms: ReadonlyArray<EfModulePermission>): void {\n this._permissions.set(perms);\n }\n\n /**\n * The level granted to the current user for a given module.\n * Returns `'none'` if the module is not in the permission set.\n */\n level(module: EfModuleId): EfPermissionLevel {\n return this._permissions().find(p => p.module === module)?.level ?? 'none';\n }\n\n /**\n * Whether the current user can perform `action` on `module`.\n * Levels are hierarchical: `admin` > `write` > `read` > `none`.\n */\n can(module: EfModuleId, action: Exclude<EfPermissionLevel, 'none'> = 'read'): boolean {\n return LEVEL_ORDER[this.level(module)] >= LEVEL_ORDER[ACTION_REQUIRED[action]];\n }\n\n /**\n * The list of modules the user can read, in registry order.\n * Used by `ef-module-rail` to decide which icons render.\n */\n readonly visibleModules: Signal<ReadonlyArray<EfModule>> = computed(() => {\n const perms = this._permissions();\n const granted = new Set(\n perms.filter(p => p.level !== 'none').map(p => p.module)\n );\n return this.modules.filter(m => granted.has(m.id));\n });\n\n /**\n * The first visible module — the default landing module after login.\n * Returns `null` when the user has no modules.\n */\n readonly defaultModule: Signal<EfModule | null> = computed(() => {\n return this.visibleModules()[0] ?? null;\n });\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * The bit of an app's session that shared chrome needs to act on.\n *\n * Signing out belongs to the app — it owns the auth client, the grant\n * refresh timer and where to land afterwards — but the control that\n * triggers it belongs to the shell. This token is the seam between them,\n * the same shape as `SCREEN_REF_DATA_SERVICE`.\n *\n * Components inject it optionally and hide their affordance when nothing\n * provides it, so an app that has not opted in shows no dead button.\n *\n * ```ts\n * // app.config.ts\n * { provide: EF_SESSION, useExisting: AuthorizeService }\n * ```\n */\nexport interface EfSession {\n /** End the session and send the user wherever the app decides. */\n logout(): void;\n}\n\nexport const EF_SESSION = new InjectionToken<EfSession>('EF_SESSION');\n","import { InjectionToken } from '@angular/core';\n\n/**\n * Which build of the app is running.\n *\n * Apps generate this at build time — the framework cannot know it — and\n * provide it here so shared chrome can show it without importing anything\n * app-specific. `EfBuildStampComponent` is the intended consumer.\n *\n * ```ts\n * // app.config.ts\n * { provide: EF_BUILD_INFO, useValue: BUILD_INFO }\n * ```\n */\nexport interface EfBuildInfo {\n /** Release version. Empty when the app maintains none — consumers should\n * omit it rather than print a placeholder. */\n version: string;\n\n /** Short commit hash the build came from. */\n commit: string;\n\n /** Commit date as `YYYY-MM-DD` — what a reader actually recognises. */\n date: string;\n\n /** Branch the build came from, useful for telling develop from a release. */\n branch: string;\n\n /**\n * Which deployment this build was made for: `production`, `staging`,\n * `develop`, or `local`. Decided at build time from the ref, because a\n * production build is made from a tag rather than a branch.\n */\n environment: string;\n\n /**\n * The shared `@elasticias/*` packages this build was compiled against,\n * in the order the app wants them listed.\n *\n * Optional: an app that ships no shared packages, or generates its stamp\n * without resolving them, simply omits the key and consumers render\n * nothing rather than an empty group.\n */\n packages?: EfBuildPackage[];\n}\n\n/** One shared package and the version that went into the build. */\nexport interface EfBuildPackage {\n /** Package name as it appears in `package.json`, e.g. `@elasticias/ui`. */\n name: string;\n\n /** The version actually installed, not the range the app declared. */\n version: string;\n}\n\nexport const EF_BUILD_INFO = new InjectionToken<EfBuildInfo>('EF_BUILD_INFO');\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elasticias/core",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^21.0.0",
6
6
  "@angular/core": "^21.0.0",
@@ -554,8 +554,24 @@ interface EfBuildInfo {
554
554
  * production build is made from a tag rather than a branch.
555
555
  */
556
556
  environment: string;
557
+ /**
558
+ * The shared `@elasticias/*` packages this build was compiled against,
559
+ * in the order the app wants them listed.
560
+ *
561
+ * Optional: an app that ships no shared packages, or generates its stamp
562
+ * without resolving them, simply omits the key and consumers render
563
+ * nothing rather than an empty group.
564
+ */
565
+ packages?: EfBuildPackage[];
566
+ }
567
+ /** One shared package and the version that went into the build. */
568
+ interface EfBuildPackage {
569
+ /** Package name as it appears in `package.json`, e.g. `@elasticias/ui`. */
570
+ name: string;
571
+ /** The version actually installed, not the range the app declared. */
572
+ version: string;
557
573
  }
558
574
  declare const EF_BUILD_INFO: InjectionToken<EfBuildInfo>;
559
575
 
560
576
  export { CacheService, ConfirmDialogService, DEFAULT_APP_STATE, EF_BUILD_INFO, EF_MODULES, EF_MODULES_TOKEN, EF_SESSION, EfActiveModuleService, EfComptoirTheme, EfPermissionService, EfTheme, EfThemeConfigService, EfToastService, EfViewportService, LoaderService, PRIMENG_AR_LOCALE, PRIMENG_EN_LOCALE, PRIMENG_FR_LOCALE, EfToastService as ToastService, hasScreenPermission, screenGuard };
561
- export type { AppState, EfBuildInfo, EfModule, EfModuleId, EfModulePermission, EfNavAction, EfNavItem, EfNavSection, EfPermissionLevel, EfSession, EfToast, EfToastAction, EfToastOptions, EfToastSeverity, EfViewport, ScreenGuardConfig };
577
+ export type { AppState, EfBuildInfo, EfBuildPackage, EfModule, EfModuleId, EfModulePermission, EfNavAction, EfNavItem, EfNavSection, EfPermissionLevel, EfSession, EfToast, EfToastAction, EfToastOptions, EfToastSeverity, EfViewport, ScreenGuardConfig };