@acorex/core 22.1.0-next.31 → 22.1.0-next.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/constants/README.md +7 -1
  2. package/fesm2022/acorex-core-components.mjs +3 -3
  3. package/fesm2022/acorex-core-config.mjs +3 -3
  4. package/fesm2022/acorex-core-constants.mjs +27809 -1
  5. package/fesm2022/acorex-core-constants.mjs.map +1 -1
  6. package/fesm2022/acorex-core-date-time.mjs +55 -41
  7. package/fesm2022/acorex-core-date-time.mjs.map +1 -1
  8. package/fesm2022/acorex-core-events.mjs +3 -3
  9. package/fesm2022/acorex-core-file.mjs +53 -46
  10. package/fesm2022/acorex-core-file.mjs.map +1 -1
  11. package/fesm2022/acorex-core-format.mjs +19 -19
  12. package/fesm2022/acorex-core-full-screen.mjs +232 -59
  13. package/fesm2022/acorex-core-full-screen.mjs.map +1 -1
  14. package/fesm2022/acorex-core-icon.mjs +3 -3
  15. package/fesm2022/acorex-core-image.mjs +3 -3
  16. package/fesm2022/acorex-core-locale.mjs +13 -10
  17. package/fesm2022/acorex-core-locale.mjs.map +1 -1
  18. package/fesm2022/acorex-core-network.mjs +3 -3
  19. package/fesm2022/acorex-core-pipes.mjs +3 -3
  20. package/fesm2022/acorex-core-platform.mjs +4 -3
  21. package/fesm2022/acorex-core-platform.mjs.map +1 -1
  22. package/fesm2022/acorex-core-storage.mjs +9 -9
  23. package/fesm2022/acorex-core-theme-builder.mjs +1329 -0
  24. package/fesm2022/acorex-core-theme-builder.mjs.map +1 -0
  25. package/fesm2022/acorex-core-translation.mjs +36 -24
  26. package/fesm2022/acorex-core-translation.mjs.map +1 -1
  27. package/fesm2022/acorex-core-utils.mjs +256 -80
  28. package/fesm2022/acorex-core-utils.mjs.map +1 -1
  29. package/fesm2022/acorex-core-validation.mjs +40 -40
  30. package/fesm2022/acorex-core-z-index.mjs +3 -3
  31. package/i18n/en-AU/acorex.json +1101 -0
  32. package/i18n/en-AU/common.json +290 -0
  33. package/i18n/en-US/acorex.json +1101 -0
  34. package/i18n/en-US/common.json +285 -0
  35. package/i18n/fa-IR/acorex.json +1101 -0
  36. package/i18n/fa-IR/common.json +284 -0
  37. package/package.json +8 -2
  38. package/theme-builder/README.md +53 -0
  39. package/types/acorex-core-components.d.ts +1 -1
  40. package/types/acorex-core-config.d.ts +1 -1
  41. package/types/acorex-core-constants.d.ts +58 -2
  42. package/types/acorex-core-date-time.d.ts +9 -4
  43. package/types/acorex-core-events.d.ts +1 -1
  44. package/types/acorex-core-file.d.ts +12 -11
  45. package/types/acorex-core-format.d.ts +3 -3
  46. package/types/acorex-core-full-screen.d.ts +67 -18
  47. package/types/acorex-core-icon.d.ts +1 -1
  48. package/types/acorex-core-image.d.ts +1 -1
  49. package/types/acorex-core-locale.d.ts +4 -2
  50. package/types/acorex-core-network.d.ts +1 -1
  51. package/types/acorex-core-platform.d.ts +1 -1
  52. package/types/acorex-core-storage.d.ts +3 -3
  53. package/types/acorex-core-theme-builder.d.ts +42 -0
  54. package/types/acorex-core-translation.d.ts +12 -6
  55. package/types/acorex-core-utils.d.ts +54 -16
  56. package/types/acorex-core-validation.d.ts +12 -12
  57. package/types/acorex-core-z-index.d.ts +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-core-theme-builder.mjs","sources":["../../../../packages/core/theme-builder/src/lib/theme-builder-export-roles.ts","../../../../packages/core/theme-builder/src/lib/theme-builder-export-tail.ts","../../../../packages/core/theme-builder/src/lib/theme-builder.ts","../../../../packages/core/theme-builder/src/lib/create-theme.ts","../../../../packages/core/theme-builder/src/acorex-core-theme-builder.ts"],"sourcesContent":["/**\n * Canonical role order for full-theme CSS export (must stay in sync with theme tail + `:root` generation).\n */\n\n/** Roles that produce `--ax-sys-color-{role}-*` tokens under `:root` / `.ax-dark`. */\nexport const EXPORT_ROOT_ROLE_ORDER = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'surface',\n 'accent',\n 'accent1',\n 'accent2',\n 'accent3',\n 'accent4',\n 'accent5',\n 'accent6',\n] as const;\n\nexport type ExportRootRole = (typeof EXPORT_ROOT_ROLE_ORDER)[number];\n\n/**\n * Roles mirrored in `@theme` and compound `@utility` blocks.\n * Omits grayscale `surface` (handled via neutral tokens + `--ax-sys-color-surface-*` scale only).\n */\nexport const EXPORT_TAIL_THEME_PALETTE_ORDER = [\n 'primary',\n 'secondary',\n 'success',\n 'warning',\n 'danger',\n 'accent',\n 'accent1',\n 'accent2',\n 'accent3',\n 'accent4',\n 'accent5',\n 'accent6',\n] as const;\n\nexport type ExportTailPaletteRole = (typeof EXPORT_TAIL_THEME_PALETTE_ORDER)[number];\n","/**\n * Mirrors `packages/styles/themes/default.css` from `@theme inline {` through the end:\n * `@theme inline`, `.ax-dark .ax-light` subtree overrides, `.ax-dark` color-alias re-declaration,\n * role utilities, typography, headings, spacing.\n * Only `--ax-sys-*` RGB triplets in `:root` / `.ax-dark` vary (handled in ThemeBuilderService).\n * Extends the package theme with `accent1`…`accent6` after `accent` (seven accent palettes total).\n */\n\nimport { EXPORT_TAIL_THEME_PALETTE_ORDER, type ExportTailPaletteRole } from './theme-builder-export-roles';\n\nconst SEMANTIC_LEVELS = ['lightest', 'lighter', 'light', 'surface', 'dark', 'darker', 'darkest'] as const;\n\n/**\n * Default Tailwind scale (matches `ax-md`) wired to `--ax-sys-*-base` tokens.\n * Mirrors `packages/styles/themes/default.css` `:root` and `@theme inline` blocks.\n */\nexport function buildDefaultTailwindScaleBlock(scope: 'root' | 'theme' = 'root'): string {\n const comment =\n scope === 'theme'\n ? ' /* Standard Tailwind scale (matches ax-md) — wired to base tokens so all utilities respond to theme changes */\\n'\n : ' /* Standard Tailwind type scale (matches ax-md) — used when no ax-* size class is applied */\\n';\n\n return (\n comment +\n ` --spacing: var(--ax-sys-spacing-base);\n --text-xs: var(--ax-sys-text-xs-base);\n --text-sm: var(--ax-sys-text-sm-base);\n --text-base: var(--ax-sys-body-font-size);\n --text-lg: var(--ax-sys-text-lg-base);\n --text-xl: var(--ax-sys-text-xl-base);\n --leading-3: var(--ax-sys-leading-3-base);\n --leading-4: var(--ax-sys-leading-4-base);\n --leading-5: var(--ax-sys-leading-5-base);\n --leading-6: var(--ax-sys-leading-6-base);\n\n`\n );\n}\n\n/** Verbatim Tailwind utilities after `ax-accent`; matches default.css § max-w-8xl … ax-xl */\nconst THEME_TAIL_VERBATIM_FOOTER = `\n@utility max-w-8xl {\n max-width: 90rem;\n}\n\n@utility ax-state-disabled {\n @apply cursor-not-allowed opacity-50 *:cursor-not-allowed;\n}\n\n@utility ax-state-readonly {\n @apply cursor-text opacity-70 *:cursor-text;\n}\n\n@utility ax-fill {\n &.ax-default {\n @apply light-surface dark:dark-surface;\n }\n &.ax-editor-container {\n @apply focus-within:ring-primary/30 focus-within:border-primary focus-within:ring-3;\n }\n}\n\n@utility ax-flat {\n @apply rounded-none;\n &.ax-default {\n @apply border-border-lightest dark:border-border-darkest border-b bg-transparent;\n }\n &.ax-editor-container {\n @apply focus-within:border-primary!;\n }\n}\n\n@utility ax-solid {\n @apply bg-(--ax-comp-bg,var(--color-lightest)) text-(--ax-comp-text,var(--color-on-lightest)) dark:bg-(--ax-comp-bg,var(--color-darkest)) dark:text-(--ax-comp-text,var(--color-on-darkest));\n &.ax-default {\n @apply lightest-surface dark:darkest-surface border;\n }\n &.ax-state-selected {\n @apply bg-(--ax-comp-bg-darker,var(--color-light)) text-(--ax-comp-text-darker,var(--color-on-light)) dark:bg-(--ax-comp-bg-darker,var(--color-dark)) dark:text-(--ax-comp-text-darker,var(--color-on-dark));\n }\n &.ax-editor-container {\n @apply focus-within:ring-primary/30 focus-within:border-primary focus-within:ring-3;\n }\n}\n\n@utility ax-solid-interactive {\n @supports (color: color-mix(in lab, red, red)) {\n --ax-comp-ripple-color: color-mix(in oklab, var(--ax-comp-bg-lightest, var(--color-on-lightest)) 25%, transparent);\n }\n @apply ax-solid transition-colors;\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected) {\n &:hover,\n &:focus,\n &:focus-within,\n &:focus-visible {\n @apply bg-(--ax-comp-bg-dark,var(--color-lighter)) text-(--ax-comp-text-dark,var(--color-on-lighter)) dark:bg-(--ax-comp-bg-dark,var(--color-darker)) dark:text-(--ax-comp-text-dark,var(--color-on-darker));\n }\n }\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected):active {\n @apply bg-(--ax-comp-bg-darker,var(--color-light)) text-(--ax-comp-text-darker,var(--color-on-light)) ring-1 ring-(--ax-comp-bg-dark) ring-offset-1 dark:bg-(--ax-comp-bg-darker,var(--color-dark)) dark:text-(--ax-comp-text-darker,var(--color-on-dark));\n }\n}\n\n@utility ax-outline {\n @apply border bg-transparent;\n border-color: var(--ax-comp-edge, var(--ax-comp-bg, var(--color-border-lightest)));\n color: var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-lightest)));\n &.ax-default {\n @apply border-border-lightest dark:border-border-darkest border;\n }\n &.ax-state-selected {\n border-color: var(--ax-comp-edge-darker, var(--ax-comp-bg-darker, var(--color-border-light)));\n color: var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-light)));\n }\n &.ax-editor-container {\n @apply focus-within:ring-primary/30 focus-within:border-primary focus-within:ring-3;\n }\n}\n\n@utility ax-outline-interactive {\n @supports (color: color-mix(in lab, red, red)) {\n --ax-comp-ripple-color: color-mix(in oklab, var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-lightest))) 25%, transparent);\n }\n @apply ax-outline transition-colors;\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected) {\n &:hover,\n &:focus,\n &:focus-within,\n &:focus-visible {\n border-color: var(--ax-comp-edge-dark, var(--ax-comp-bg-dark, var(--color-border-lighter)));\n color: var(--ax-comp-ink-dark, var(--ax-comp-bg-dark, var(--color-on-lighter)));\n }\n }\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected):active {\n border-color: var(--ax-comp-edge-darker, var(--ax-comp-bg-darker, var(--color-border-light)));\n color: var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-light)));\n }\n}\n\n@utility ax-twotone {\n @apply bg-(--ax-comp-bg-lightest,var(--color-lighter)) text-(--ax-comp-text-lightest,var(--color-on-lighter)) dark:bg-(--ax-comp-bg-lightest,var(--color-darker)) dark:text-(--ax-comp-text-lightest,var(--color-on-darker));\n &.ax-state-selected {\n @apply bg-(--ax-comp-bg-light,var(--color-surface)) text-(--ax-comp-text-light,var(--color-on-surface));\n }\n}\n\n@utility ax-twotone-interactive {\n @supports (color: color-mix(in lab, red, red)) {\n --ax-comp-ripple-color: color-mix(in oklab, var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-lightest))) 25%, transparent);\n }\n @apply ax-twotone transition-colors;\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected) {\n &:hover,\n &:focus,\n &:focus-within,\n &:focus-visible {\n @apply bg-(--ax-comp-bg-lighter,var(--color-light)) text-(--ax-comp-text-lighter,var(--color-on-light)) dark:bg-(--ax-comp-bg-lighter,var(--color-dark)) dark:text-(--ax-comp-text-lighter,var(--color-on-dark));\n }\n }\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected):active {\n @apply bg-(--ax-comp-bg-light,var(--color-surface)) text-(--ax-comp-text-light,var(--color-on-surface));\n }\n}\n\n@utility ax-blank {\n @apply bg-transparent;\n color: var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-surface)));\n &.ax-state-selected {\n @apply bg-(--ax-comp-bg-lighter,var(--color-surface)) text-(--ax-comp-text-lighter,var(--color-on-surface));\n }\n}\n\n@utility ax-blank-interactive {\n @supports (color: color-mix(in lab, red, red)) {\n --ax-comp-ripple-color: color-mix(in oklab, var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-lightest))) 25%, transparent);\n }\n @apply ax-blank transition-colors;\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected) {\n &:hover,\n &:focus,\n &:focus-within,\n &:focus-visible {\n @apply bg-(--ax-comp-bg-lightest,var(--color-lighter)) text-(--ax-comp-text-lightest,var(--color-on-lighter)) dark:bg-(--ax-comp-bg-lightest,var(--color-darker)) dark:text-(--ax-comp-text-lightest,var(--color-on-darker));\n }\n }\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected):active {\n @apply bg-(--ax-comp-bg-lighter,var(--color-surface)) text-(--ax-comp-text-lighter,var(--color-on-surface));\n }\n}\n\n@utility links {\n @apply bg-transparent;\n color: var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-surface)));\n &.ax-state-selected {\n color: var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-surface)));\n }\n}\n\n@utility links-interactive {\n @supports (color: color-mix(in lab, red, red)) {\n --ax-comp-ripple-color: color-mix(in oklab, var(--ax-comp-ink, var(--ax-comp-bg, var(--color-on-lightest))) 25%, transparent);\n }\n @apply links transition-colors;\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected) {\n &:hover,\n &:focus,\n &:focus-within,\n &:focus-visible {\n color: var(--ax-comp-ink-dark, var(--ax-comp-bg-dark, var(--color-on-surface)));\n }\n }\n &:not(.ax-state-disabled, .ax-state-loading, .ax-state-selected):active {\n color: var(--ax-comp-ink-darker, var(--ax-comp-bg-darker, var(--color-on-surface)));\n }\n}\n@utility h1 {\n font-size: 2.5rem;\n font-weight: 500;\n line-height: 2.5rem;\n}\n@utility h2 {\n font-size: 2rem;\n font-weight: 500;\n line-height: 2rem;\n}\n@utility h3 {\n font-size: 1.75rem;\n font-weight: 500;\n line-height: 1.75rem;\n}\n@utility h4 {\n font-size: 1.5rem;\n font-weight: 500;\n line-height: 1.5rem;\n}\n@utility h5 {\n font-size: 1.125rem;\n font-weight: 500;\n line-height: 1.125rem;\n}\n@utility h6 {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1rem;\n}\n@utility heading {\n width: 100%;\n border-bottom: 1px solid;\n border-color: rgba(var(--ax-sys-color-border-lightest-surface));\n line-height: 0.1em;\n margin: 1rem auto;\n}\n@utility heading-start {\n text-align: start;\n}\n@utility heading-center {\n text-align: center;\n}\n@utility heading-end {\n text-align: end;\n}\n@utility subtitle {\n opacity: 74%;\n display: block;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.625rem;\n}\n@utility tabs-fit {\n width: 100%;\n}\n@utility ax-xs {\n /* Spacing */\n --spacing: calc(var(--ax-sys-spacing-base) * 0.5);\n --ax-sys-border-radius: calc(var(--ax-sys-border-radius-base) * 0.5);\n\n /* Typography */\n --text-xs: calc(var(--ax-sys-text-xs-base) * 5 / 6);\n --text-sm: calc(var(--ax-sys-text-sm-base) * 11 / 14);\n --text-base: calc(var(--ax-sys-body-font-size) * 0.75);\n --text-lg: calc(var(--ax-sys-text-lg-base) * 7 / 9);\n --text-xl: calc(var(--ax-sys-text-xl-base) * 0.8);\n\n /* Line Heights */\n --leading-3: var(--ax-sys-leading-3-base);\n --leading-4: calc(var(--ax-sys-leading-4-base) * 0.875);\n --leading-5: calc(var(--ax-sys-leading-5-base) * 0.8);\n --leading-6: calc(var(--ax-sys-leading-6-base) * 5 / 6);\n}\n\n@utility ax-sm {\n /* Spacing */\n --spacing: calc(var(--ax-sys-spacing-base) * 0.75);\n --ax-sys-border-radius: calc(var(--ax-sys-border-radius-base) * 0.75);\n\n /* Typography */\n --text-xs: calc(var(--ax-sys-text-xs-base) * 11 / 12);\n --text-sm: calc(var(--ax-sys-text-sm-base) * 6 / 7);\n --text-base: calc(var(--ax-sys-body-font-size) * 0.875);\n --text-lg: calc(var(--ax-sys-text-lg-base) * 8 / 9);\n --text-xl: calc(var(--ax-sys-text-xl-base) * 0.9);\n\n /* Line Heights */\n --leading-3: calc(var(--ax-sys-leading-3-base) * 7 / 6);\n --leading-4: var(--ax-sys-leading-4-base);\n --leading-5: calc(var(--ax-sys-leading-5-base) * 0.9);\n --leading-6: calc(var(--ax-sys-leading-6-base) * 11 / 12);\n}\n\n@utility ax-md {\n /* Tailwind Default Scale */\n --spacing: var(--ax-sys-spacing-base);\n --ax-sys-border-radius: var(--ax-sys-border-radius-base);\n\n /* Typography */\n --text-xs: var(--ax-sys-text-xs-base);\n --text-sm: var(--ax-sys-text-sm-base);\n --text-base: var(--ax-sys-body-font-size);\n --text-lg: var(--ax-sys-text-lg-base);\n --text-xl: var(--ax-sys-text-xl-base);\n\n /* Line Heights */\n --leading-3: var(--ax-sys-leading-3-base);\n --leading-4: var(--ax-sys-leading-4-base);\n --leading-5: var(--ax-sys-leading-5-base);\n --leading-6: var(--ax-sys-leading-6-base);\n}\n\n@utility ax-lg {\n /* Spacing */\n --spacing: calc(var(--ax-sys-spacing-base) * 1.25);\n --ax-sys-border-radius: calc(var(--ax-sys-border-radius-base) * 1.25);\n\n /* Typography */\n --text-xs: calc(var(--ax-sys-text-xs-base) * 13 / 12);\n --text-sm: calc(var(--ax-sys-text-sm-base) * 15 / 14);\n --text-base: calc(var(--ax-sys-body-font-size) * 17 / 16);\n --text-lg: calc(var(--ax-sys-text-lg-base) * 10 / 9);\n --text-xl: calc(var(--ax-sys-text-xl-base) * 1.1);\n\n /* Line Heights */\n --leading-3: calc(var(--ax-sys-leading-3-base) * 4 / 3);\n --leading-4: calc(var(--ax-sys-leading-4-base) * 1.125);\n --leading-5: calc(var(--ax-sys-leading-5-base) * 1.1);\n --leading-6: calc(var(--ax-sys-leading-6-base) * 13 / 12);\n}\n\n@utility ax-xl {\n /* Spacing */\n --spacing: calc(var(--ax-sys-spacing-base) * 1.5);\n --ax-sys-border-radius: calc(var(--ax-sys-border-radius-base) * 1.5);\n\n /* Typography */\n --text-xs: calc(var(--ax-sys-text-xs-base) * 7 / 6);\n --text-sm: calc(var(--ax-sys-text-sm-base) * 8 / 7);\n --text-base: calc(var(--ax-sys-body-font-size) * 1.125);\n --text-lg: calc(var(--ax-sys-text-lg-base) * 11 / 9);\n --text-xl: calc(var(--ax-sys-text-xl-base) * 1.2);\n\n /* Line Heights */\n --leading-3: calc(var(--ax-sys-leading-3-base) * 1.5);\n --leading-4: calc(var(--ax-sys-leading-4-base) * 1.25);\n --leading-5: calc(var(--ax-sys-leading-5-base) * 1.2);\n --leading-6: calc(var(--ax-sys-leading-6-base) * 7 / 6);\n}\n`;\n\nconst SHADE_KEYS = ['50', '100', '200', '300', '400', '500', '600', '700', '800', '900', '950'] as const;\n\nfunction roleSectionTitle(role: string): string {\n if (role === 'accent') return 'Accent Surfaces';\n const accentN = /^accent(\\d+)$/.exec(role);\n if (accentN?.[1]) return `Accent ${accentN[1]} Surfaces`;\n return `${role.charAt(0).toUpperCase()}${role.slice(1)} Surfaces`;\n}\n\n/** @theme semantic lines for neutral UI surfaces (matches default.css) */\nfunction neutralThemeSemanticBlock(options?: { omitDuplicateSurfaceLine?: boolean }): string {\n let css = `\\n`;\n css += ` --color-lightest: rgba(var(--ax-sys-color-lightest-surface));\\n`;\n css += ` --color-on-lightest: rgba(var(--ax-sys-color-on-lightest-surface));\\n`;\n css += ` --color-border-lightest: rgba(var(--ax-sys-color-border-lightest-surface));\\n`;\n css += ` --color-lighter: rgba(var(--ax-sys-color-lighter-surface));\\n`;\n css += ` --color-on-lighter: rgba(var(--ax-sys-color-on-lighter-surface));\\n`;\n css += ` --color-border-lighter: rgba(var(--ax-sys-color-border-lighter-surface));\\n`;\n css += ` --color-light: rgba(var(--ax-sys-color-light-surface));\\n`;\n css += ` --color-on-light: rgba(var(--ax-sys-color-on-light-surface));\\n`;\n css += ` --color-border-light: rgba(var(--ax-sys-color-border-light-surface));\\n`;\n if (!options?.omitDuplicateSurfaceLine) {\n css += ` --color-surface: rgba(var(--ax-sys-color-surface));\\n`;\n }\n css += ` --color-on-surface: rgba(var(--ax-sys-color-on-surface));\\n`;\n css += ` --color-border-surface: rgba(var(--ax-sys-color-border-surface));\\n`;\n css += ` --color-dark: rgba(var(--ax-sys-color-dark-surface));\\n`;\n css += ` --color-on-dark: rgba(var(--ax-sys-color-on-dark-surface));\\n`;\n css += ` --color-border-dark: rgba(var(--ax-sys-color-border-dark-surface));\\n`;\n css += ` --color-darker: rgba(var(--ax-sys-color-darker-surface));\\n`;\n css += ` --color-on-darker: rgba(var(--ax-sys-color-on-darker-surface));\\n`;\n css += ` --color-border-darker: rgba(var(--ax-sys-color-border-darker-surface));\\n`;\n css += ` --color-darkest: rgba(var(--ax-sys-color-darkest-surface));\\n`;\n css += ` --color-on-darkest: rgba(var(--ax-sys-color-on-darkest-surface));\\n`;\n css += ` --color-border-darkest: rgba(var(--ax-sys-color-border-darkest-surface));\\n`;\n return css;\n}\n\n/** Matches default.css `@theme inline` block per palette role (ordering and duplicate `--color-{role}` lines). */\nfunction themeNumericAndSemanticForRole(\n role: ExportTailPaletteRole,\n options?: { omitMiddleRoleSurfaceColorDup?: boolean },\n): string {\n let css = ` /* ${roleSectionTitle(role)} */\\n`;\n css += ` --color-${role}: rgba(var(--ax-sys-color-${role}-surface));\\n`;\n for (const shade of SHADE_KEYS) {\n css += ` --color-${role}-${shade}: rgba(var(--ax-sys-color-${role}-${shade}));\\n`;\n }\n css += `\\n`;\n\n const emitTriplet = (level: 'lightest' | 'lighter' | 'light' | 'dark' | 'darker' | 'darkest'): void => {\n css += ` --color-${role}-${level}: rgba(var(--ax-sys-color-${role}-${level}-surface));\\n`;\n css += ` --color-on-${role}-${level}: rgba(var(--ax-sys-color-on-${role}-${level}-surface));\\n`;\n css += ` --color-border-${role}-${level}: rgba(var(--ax-sys-color-border-${role}-${level}-surface));\\n`;\n };\n\n emitTriplet('lightest');\n emitTriplet('lighter');\n emitTriplet('light');\n\n if (!options?.omitMiddleRoleSurfaceColorDup) {\n css += ` --color-${role}: rgba(var(--ax-sys-color-${role}-surface));\\n`;\n }\n css += ` --color-on-${role}: rgba(var(--ax-sys-color-on-${role}-surface));\\n`;\n css += ` --color-border-${role}: rgba(var(--ax-sys-color-border-${role}-surface));\\n`;\n\n emitTriplet('dark');\n emitTriplet('darker');\n emitTriplet('darkest');\n\n const last = EXPORT_TAIL_THEME_PALETTE_ORDER[EXPORT_TAIL_THEME_PALETTE_ORDER.length - 1];\n if (role !== last) css += `\\n`;\n return css;\n}\n\n/** Surface scale (--color-surface-50…) at top of @theme */\nfunction themeSurfaceScaleBlock(): string {\n let css = ` /* Surface Surfaces */\\n`;\n css += ` --color-surface: rgba(var(--ax-sys-color-surface));\\n`;\n for (const shade of SHADE_KEYS) {\n css += ` --color-surface-${shade}: rgba(var(--ax-sys-color-surface-${shade}));\\n`;\n }\n css += `\\n`;\n return css;\n}\n\nfunction utilitiesPrefixBlock(): string {\n return `@utility bg-default {\n background-color: var(--color-bg-default);\n}\n\n@utility text-default {\n color: var(--color-text-default);\n}\n\n@utility border-default {\n border-color: var(--color-border-default);\n}\n\n@utility text {\n color: var(--color-text-default);\n}\n\n@utility border-s-default {\n border-inline-start-width: 1px;\n}\n\n@utility border-e-default {\n border-inline-end-width: 1px;\n}\n\n@utility border-t-default {\n border-top-width: 1px;\n}\n\n@utility border-b-default {\n border-bottom-width: 1px;\n}\n\n@utility border-x-default {\n border-left-width: 1px;\n border-right-width: 1px;\n}\n\n@utility border-y-default {\n border-top-width: 1px;\n border-bottom-width: 1px;\n}\n\n`;\n}\n\nfunction utilityClassName(role: string, level: (typeof SEMANTIC_LEVELS)[number]): string {\n return level === 'surface' ? `${role}-surface` : `${role}-${level}-surface`;\n}\n\n/** Background / foreground / border for one semantic level */\nfunction cssTripletVars(role: string, level: (typeof SEMANTIC_LEVELS)[number]): { bg: string; fg: string; bd: string } {\n if (level === 'surface') {\n return {\n bg: `var(--color-${role})`,\n fg: `var(--color-on-${role})`,\n bd: `var(--color-border-${role})`,\n };\n }\n return {\n bg: `var(--color-${role}-${level})`,\n fg: `var(--color-on-${role}-${level})`,\n bd: `var(--color-border-${role}-${level})`,\n };\n}\n\nconst AX_DARK_THEME_ALIAS_COMMENT = `/*\n * Re-declare every Tailwind theme color alias for the \\`.ax-dark\\` subtree.\n * \\`@theme inline\\` resolves inner \\`var(--ax-sys-*)\\` at :root; this block recomputes \\`--color-*\\`\n * on \\`.ax-dark\\` so localized dark regions track updated primitives.\n * Static tokens (\\`--radius-default\\`, breakpoints) are omitted — same rationale as default.css.\n */\n\n`;\n\nconst AX_LIGHT_SUBTREE_COMMENT = `/*\n * Re-declare light theme primitives and Tailwind color aliases for the \\`.ax-light\\` subtree.\n * Mirrors the \\`.ax-dark\\` override pattern so localized light zones work inside a dark page.\n */\n\n`;\n\n/** Shared \\`--color-*\\` alias body for \\`@theme inline\\`, \\`.ax-dark .ax-light\\`, and \\`.ax-dark\\` alias blocks. */\nfunction buildThemeColorAliasesBody(options?: {\n omitMiddleRoleSurfaceColorDup?: boolean;\n omitDuplicateSurfaceLine?: boolean;\n}): string {\n let css = ` --color-bg-default: rgba(var(--ax-sys-color-bg-default));\\n`;\n css += ` --color-text-default: rgba(var(--ax-sys-color-text-default));\\n`;\n css += ` --color-border-default: rgba(var(--ax-sys-color-border-default));\\n\\n`;\n css += themeSurfaceScaleBlock();\n css += neutralThemeSemanticBlock({ omitDuplicateSurfaceLine: options?.omitDuplicateSurfaceLine });\n for (const role of EXPORT_TAIL_THEME_PALETTE_ORDER) {\n css += themeNumericAndSemanticForRole(role, {\n omitMiddleRoleSurfaceColorDup: options?.omitMiddleRoleSurfaceColorDup,\n });\n }\n return css;\n}\n\nfunction buildAxDarkThemeColorAliases(): string {\n let css = AX_DARK_THEME_ALIAS_COMMENT;\n css += `.ax-dark {\\n`;\n css += ` --ax-sys-theme-isDark: 1;\\n`;\n css += buildThemeColorAliasesBody({\n omitMiddleRoleSurfaceColorDup: true,\n omitDuplicateSurfaceLine: true,\n });\n css += `}\\n\\n`;\n return css;\n}\n\n/** Light subtree inside a dark page — primitives are generated from the light palette in ThemeBuilderService. */\nexport function buildAxLightSubtreeBlock(primitivesCss: string): string {\n let css = AX_LIGHT_SUBTREE_COMMENT;\n css += `.ax-dark .ax-light {\\n`;\n css += ` --ax-sys-theme-isDark: 0;\\n`;\n css += ` --ax-sys-scroller-track-color: rgba(var(--ax-sys-color-light-surface));\\n`;\n css += ` --ax-sys-scroller-thumb-color: rgba(var(--ax-sys-color-darkest-surface));\\n\\n`;\n css += primitivesCss;\n css += buildThemeColorAliasesBody({\n omitMiddleRoleSurfaceColorDup: true,\n omitDuplicateSurfaceLine: true,\n });\n css += `}\\n\\n`;\n return css;\n}\n\nfunction compoundSurfaceUtilities(role: ExportTailPaletteRole): string {\n let css = `/* ${roleSectionTitle(role)} */\\n\\n`;\n for (const level of SEMANTIC_LEVELS) {\n const name = utilityClassName(role, level);\n const { bg, fg, bd } = cssTripletVars(role, level);\n css += `@utility ${name} {\n background-color: ${bg};\n color: ${fg};\n border-color: ${bd};\n}\n\n`;\n }\n css += `@utility ax-${role} {\\n`;\n for (const level of SEMANTIC_LEVELS) {\n const suf = level === 'surface' ? '' : `-${level}`;\n const refs = cssTripletVars(role, level);\n css += ` --ax-comp-bg${suf}: ${refs.bg};\\n`;\n css += ` --ax-comp-text${suf}: ${refs.fg};\\n`;\n css += ` --ax-comp-border${suf}: ${refs.bd};\\n`;\n }\n css += ` --ax-comp-ink: var(--color-${role});\\n`;\n css += ` --ax-comp-ink-dark: var(--color-${role}-dark);\\n`;\n css += ` --ax-comp-ink-darker: var(--color-${role}-darker);\\n`;\n css += ` --ax-comp-edge: var(--color-${role});\\n`;\n css += ` --ax-comp-edge-dark: var(--color-${role}-dark);\\n`;\n css += ` --ax-comp-edge-darker: var(--color-${role}-darker);\\n`;\n css += `}\n\n`;\n return css;\n}\n\n/** Neutral lightest … darkest utilities (between Danger and Accent in default.css) */\nfunction neutralCompoundSurfaceUtilities(): string {\n return `/* Surface Surfaces */\n\n@utility lightest-surface {\n background-color: var(--color-lightest);\n color: var(--color-on-lightest);\n border-color: var(--color-border-lightest);\n}\n\n@utility lighter-surface {\n background-color: var(--color-lighter);\n color: var(--color-on-lighter);\n border-color: var(--color-border-lighter);\n}\n\n@utility light-surface {\n background-color: var(--color-light);\n color: var(--color-on-light);\n border-color: var(--color-border-light);\n}\n\n@utility surface {\n background-color: var(--color-surface);\n color: var(--color-on-surface);\n border-color: var(--color-border-surface);\n}\n\n@utility dark-surface {\n background-color: var(--color-dark);\n color: var(--color-on-dark);\n border-color: var(--color-border-dark);\n}\n\n@utility darker-surface {\n background-color: var(--color-darker);\n color: var(--color-on-darker);\n border-color: var(--color-border-darker);\n}\n\n@utility darkest-surface {\n background-color: var(--color-darkest);\n color: var(--color-on-darkest);\n border-color: var(--color-border-darkest);\n}\n\n@utility ax-surface {\n --ax-comp-bg-lightest: var(--color-light);\n --ax-comp-text-lightest: var(--color-on-light);\n --ax-comp-border-lightest: var(--color-border-light);\n --ax-comp-bg-lighter: var(--color-surface);\n --ax-comp-text-lighter: var(--color-on-surface);\n --ax-comp-border-lighter: var(--color-border-surface);\n --ax-comp-bg-light: var(--color-dark);\n --ax-comp-text-light: var(--color-on-dark);\n --ax-comp-border-light: var(--color-border-dark);\n --ax-comp-bg: var(--color-surface);\n --ax-comp-text: var(--color-on-surface);\n --ax-comp-border: var(--color-border-surface);\n --ax-comp-bg-dark: var(--color-dark);\n --ax-comp-text-dark: var(--color-on-dark);\n --ax-comp-border-dark: var(--color-border-dark);\n --ax-comp-bg-darker: var(--color-darker);\n --ax-comp-text-darker: var(--color-on-darker);\n --ax-comp-border-darker: var(--color-border-darker);\n --ax-comp-bg-darkest: var(--color-darkest);\n --ax-comp-text-darkest: var(--color-on-darkest);\n --ax-comp-border-darkest: var(--color-border-darkest);\n --ax-comp-ink: var(--color-on-surface);\n --ax-comp-ink-dark: var(--color-on-dark);\n --ax-comp-ink-darker: var(--color-on-darker);\n --ax-comp-edge: var(--color-border-surface);\n --ax-comp-edge-dark: var(--color-border-dark);\n --ax-comp-edge-darker: var(--color-border-darker);\n}\n\n`;\n}\n\n/**\n * Tailwind \\`--color-*\\` aliases for theme-builder live preview.\n * Recomputes against container-scoped \\`--ax-sys-color-*\\` (same roles as default.css \\`@theme inline\\`).\n */\nexport function buildPreviewThemeColorAliases(): string {\n let css = ` --color-bg-default: rgba(var(--ax-sys-color-bg-default));\\n`;\n css += ` --color-text-default: rgba(var(--ax-sys-color-text-default));\\n`;\n css += ` --color-border-default: rgba(var(--ax-sys-color-border-default));\\n`;\n css += neutralThemeSemanticBlock();\n for (const role of EXPORT_TAIL_THEME_PALETTE_ORDER) {\n css += ` --color-${role}: rgba(var(--ax-sys-color-${role}-surface));\\n`;\n css += ` --color-on-${role}: rgba(var(--ax-sys-color-on-${role}-surface));\\n`;\n css += ` --color-border-${role}: rgba(var(--ax-sys-color-border-${role}-surface));\\n`;\n }\n return css;\n}\n\nexport function buildDefaultThemeCssTailLikePackage(axLightPrimitives?: string): string {\n let css = `@theme inline {\n --color-bg-default: rgba(var(--ax-sys-color-bg-default));\n --color-text-default: rgba(var(--ax-sys-color-text-default));\n --color-border-default: rgba(var(--ax-sys-color-border-default));\n --radius-default: var(--ax-sys-border-radius);\n --breakpoint-3xl: 1920px;\n --breakpoint-4xl: 2560px;\n`;\n css += themeSurfaceScaleBlock();\n css += neutralThemeSemanticBlock();\n for (const role of EXPORT_TAIL_THEME_PALETTE_ORDER) {\n css += themeNumericAndSemanticForRole(role);\n }\n css += buildDefaultTailwindScaleBlock('theme');\n css += `}\n\n`;\n\n if (axLightPrimitives) {\n css += buildAxLightSubtreeBlock(axLightPrimitives);\n }\n\n css += buildAxDarkThemeColorAliases();\n\n css += utilitiesPrefixBlock();\n\n for (const role of EXPORT_TAIL_THEME_PALETTE_ORDER) {\n if (role.startsWith('accent')) continue;\n css += compoundSurfaceUtilities(role);\n }\n css += neutralCompoundSurfaceUtilities();\n for (const role of EXPORT_TAIL_THEME_PALETTE_ORDER) {\n if (role.startsWith('accent')) {\n css += compoundSurfaceUtilities(role);\n }\n }\n css += THEME_TAIL_VERBATIM_FOOTER;\n return css;\n}\n","import * as culori from 'culori';\nimport { EXPORT_ROOT_ROLE_ORDER, type ExportRootRole } from './theme-builder-export-roles';\nimport {\n buildDefaultTailwindScaleBlock,\n buildDefaultThemeCssTailLikePackage,\n buildPreviewThemeColorAliases,\n} from './theme-builder-export-tail';\nimport {\n AXThemeBuilderColorVariants,\n AXThemeBuilderColors,\n AXThemeBuilderFullPalette,\n AXThemeBuilderPalette,\n} from './theme-builder.class';\n\ntype AXOklchColor = { l: number; c: number; h: number; mode: 'oklch'; alpha?: number };\ntype AXRgbColor = { r: number; g: number; b: number; mode: 'rgb'; alpha?: number };\n\ntype AXThemeBuilderColorScale = Record<AXThemeBuilderColorVariants, string>;\n\nconst AX_THEME_SHADES = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950] as const;\n\nconst ROLE_SURFACE_SHADE_MAP = {\n 'lightest-surface': 100,\n 'lighter-surface': 200,\n 'light-surface': 300,\n surface: 500,\n 'dark-surface': 600,\n 'darker-surface': 700,\n 'darkest-surface': 800,\n} as const;\n\nconst toOklch = culori.converter('oklch');\nconst toRgb = culori.converter('rgb');\nconst toHsl = culori.converter('hsl');\nconst toGamut = culori.toGamut('rgb');\n\nconst lightSurfaceColors = {\n 'lightest-surface': { bg: '255, 255, 255', on: '10, 10, 10', border: '233, 233, 233' },\n 'lighter-surface': { bg: '250, 250, 250', on: '10, 10, 10', border: '228, 228, 228' },\n 'light-surface': { bg: '245, 245, 245', on: '10, 10, 10', border: '223, 223, 223' },\n surface: { bg: '240, 240, 241', on: '10, 10, 10', border: '218, 218, 218' },\n 'dark-surface': { bg: '235, 235, 236', on: '10, 10, 10', border: '213, 213, 213' },\n 'darker-surface': { bg: '230, 230, 231', on: '10, 10, 10', border: '208, 208, 208' },\n 'darkest-surface': { bg: '224, 224, 225', on: '10, 10, 10', border: '202, 202, 202' },\n};\nconst darkSurfaceColors = {\n 'lightest-surface': { bg: '56, 56, 56', on: '245, 245, 245', border: '64, 64, 64' },\n 'lighter-surface': { bg: '49, 49, 49', on: '245, 245, 245', border: '56, 56, 56' },\n 'light-surface': { bg: '42, 42, 42', on: '245, 245, 245', border: '50, 50, 50' },\n surface: { bg: '33, 33, 33', on: '245, 245, 245', border: '44, 44, 44' },\n 'dark-surface': { bg: '27, 27, 27', on: '245, 245, 245', border: '38, 38, 38' },\n 'darker-surface': { bg: '20, 20, 20', on: '245, 245, 245', border: '32, 32, 32' },\n 'darkest-surface': { bg: '10, 10, 10', on: '245, 245, 245', border: '28, 28, 28' },\n};\n\n/** Mirrors packaged default theme (+ `accent1`…`accent6`). Only palette RGB triplets differ from static defaults. */\n\ntype ExportSeedMap = Record<ExportRootRole, string>;\n\nconst DEFAULT_EXPORT_SEEDS_LIGHT: ExportSeedMap = {\n primary: 'rgb(43, 127, 255)',\n secondary: 'rgb(106, 114, 130)',\n success: 'rgb(0, 188, 125)',\n warning: 'rgb(253, 154, 0)',\n danger: 'rgb(255, 32, 86)',\n surface: 'rgb(194, 194, 194)',\n accent: 'rgb(6, 182, 212)',\n accent1: 'rgb(217, 70, 239)',\n accent2: 'rgb(249, 115, 22)',\n accent3: 'rgb(20, 184, 166)',\n accent4: 'rgb(99, 102, 241)',\n accent5: 'rgb(236, 72, 153)',\n accent6: 'rgb(120, 113, 108)',\n};\n\nconst DEFAULT_EXPORT_SEEDS_DARK: ExportSeedMap = {\n primary: 'rgb(43, 127, 255)',\n secondary: 'rgb(153, 161, 175)',\n success: 'rgb(0, 188, 125)',\n warning: 'rgb(253, 154, 0)',\n danger: 'rgb(255, 99, 126)',\n surface: 'rgb(33, 33, 33)',\n accent: 'rgb(6, 182, 212)',\n accent1: 'rgb(217, 70, 239)',\n accent2: 'rgb(249, 115, 22)',\n accent3: 'rgb(20, 184, 166)',\n accent4: 'rgb(99, 102, 241)',\n accent5: 'rgb(236, 72, 153)',\n accent6: 'rgb(120, 113, 108)',\n};\n\nconst THEME_CSS_PREAMBLE = `@import 'tailwindcss';\n@import 'tw-animate';\n\n@custom-variant dark (&:where(.ax-dark, .ax-dark *):not(:where(.ax-light, .ax-light *)));\n@custom-variant hover (&:hover);\n\ninput:-webkit-autofill,\ninput:-webkit-autofill:hover,\ninput:-webkit-autofill:focus,\ntextarea:-webkit-autofill,\nselect:-webkit-autofill {\n -webkit-box-shadow: 0 0 0 1000px transparent inset !important;\n -webkit-text-fill-color: inherit !important;\n transition: background-color 9999s ease-in-out 0s;\n}\n\n@layer base {\n * {\n border-color: var(--color-border-default);\n scrollbar-width: thin;\n scrollbar-color: var(--ax-sys-scroller-thumb-color) var(--ax-sys-scroller-track-color);\n\n ::-webkit-scrollbar {\n width: var(--ax-sys-scroller-size);\n height: var(--ax-sys-scroller-size);\n }\n\n ::-webkit-scrollbar-track {\n background: var(--ax-sys-scroller-track-color);\n border-radius: var(--ax-sys-scroller-size-radius);\n }\n\n ::-webkit-scrollbar-thumb {\n background: var(--ax-sys-scroller-thumb-color);\n border-radius: var(--ax-sys-scroller-size-radius);\n }\n }\n}\n\nhtml {\n background-color: rgba(var(--ax-sys-color-lightest-surface));\n color: rgba(var(--ax-sys-color-on-lightest-surface));\n}\n\nhtml.ax-dark {\n background-color: rgba(var(--ax-sys-color-darkest-surface));\n color: rgba(var(--ax-sys-color-on-darkest-surface));\n}\n\n`;\n\n/** Size scope classes before \\`:root\\` (matches default.css). */\nconst THEME_SIZE_SCOPE_CLASSES = `.ax-xs {\n --ax-sys-size: ax-xs;\n}\n.ax-sm {\n --ax-sys-size: ax-sm;\n}\n.ax-md {\n --ax-sys-size: ax-md;\n}\n.ax-lg {\n --ax-sys-size: ax-lg;\n}\n.ax-xl {\n --ax-sys-size: ax-xl;\n}\n\n`;\n\nconst THEME_EXPORT_ROOT_METADATA = `:root {\n --ax-sys-theme-isDark: 0;\n --ax-sys-icon-size: 100%;\n --ax-sys-icon-weight: 400;\n --ax-sys-size-base: 2.5rem;\n --ax-overlay-full-width: 93;\n --ax-sys-icon-width: inherit;\n --ax-sys-icon-height: inherit;\n --ax-sys-body-font-size: 1rem;\n --ax-sys-border-radius-base: 0.5rem;\n --ax-sys-spacing-base: 0.25rem;\n --ax-sys-text-xs-base: 0.75rem;\n --ax-sys-text-sm-base: 0.875rem;\n --ax-sys-text-lg-base: 1.125rem;\n --ax-sys-text-xl-base: 1.25rem;\n --ax-sys-leading-3-base: 0.75rem;\n --ax-sys-leading-4-base: 1rem;\n --ax-sys-leading-5-base: 1.25rem;\n --ax-sys-leading-6-base: 1.5rem;\n\n${buildDefaultTailwindScaleBlock('root')} --ax-sys-border-radius: var(--ax-sys-border-radius-base);\n --ax-sys-transition-duration: 150ms;\n --ax-sys-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n\n --ax-sys-scroller-size: 5px;\n --ax-sys-scroller-size-radius: 3px;\n --ax-sys-scroller-track-color: rgba(var(--ax-sys-color-light-surface));\n --ax-sys-scroller-thumb-color: rgba(var(--ax-sys-color-darkest-surface));\n\n`;\n\nfunction generateLightPalette(seedHex: string): AXThemeBuilderColorScale {\n const shadeValueMap: Record<number, number> = {\n 50: 40,\n 100: 90,\n 200: 160,\n 300: 270,\n 400: 410,\n 500: 500,\n 600: 590,\n 700: 700,\n 800: 790,\n 900: 860,\n 950: 1060,\n };\n\n const initialColor = toOklch(normalizeCssColor(seedHex));\n if (!initialColor) return {} as AXThemeBuilderColorScale;\n\n const { l: initialLightness, c: initialChroma, h: initialHue } = initialColor;\n const lightModeTones: { [key: number]: number } = {};\n\n AX_THEME_SHADES.forEach((shadeKey) => {\n const shadeValue = shadeValueMap[shadeKey];\n if (shadeValue <= 500) {\n lightModeTones[shadeKey] = (-shadeValue + shadeValue * initialLightness + 500) / 500;\n } else {\n lightModeTones[shadeKey] = (1 - (shadeValue - 500) / 500) * (initialLightness - 0.3) + 0.3;\n }\n });\n\n const lightMode: AXThemeBuilderColorScale = {} as AXThemeBuilderColorScale;\n\n AX_THEME_SHADES.forEach((shade) => {\n const oklchColor: AXOklchColor = {\n l: lightModeTones[shade],\n c: initialChroma,\n h: initialHue ?? 0,\n mode: 'oklch',\n };\n\n let gamutMappedColor = toGamut(oklchColor) || oklchColor;\n\n if (shade === 950 || shade === 900 || shade === 800) {\n const oklchGamutMapped = toOklch(gamutMappedColor) as AXOklchColor;\n if (oklchGamutMapped) {\n if (shade === 950) {\n oklchGamutMapped.c *= 1 - 0.5;\n } else if (shade === 900) {\n oklchGamutMapped.c *= 1 - 0.33;\n } else if (shade === 800) {\n oklchGamutMapped.c *= 1 - 0.08;\n }\n gamutMappedColor = oklchGamutMapped;\n }\n }\n\n const rgbColor = toRgb(gamutMappedColor);\n\n if (rgbColor) {\n lightMode[String(shade) as keyof AXThemeBuilderColorScale] = formatRgbTriplet(rgbColor as AXRgbColor);\n }\n });\n\n const color500 = parseRgbTriplet(lightMode['500']);\n if (color500) {\n lightMode['on'] = contrastText(color500, false);\n }\n lightMode['on-contrast'] = lightMode['900'];\n\n return lightMode;\n}\n\nfunction generateDarkPalette(seedHex: string): AXThemeBuilderColorScale {\n const initialColor = toOklch(normalizeCssColor(seedHex));\n if (!initialColor) return {} as AXThemeBuilderColorScale;\n\n const { l: initialLightness, c: initialChroma, h: initialHue } = initialColor;\n const darkModeTones: { [key: number]: number } = {};\n\n AX_THEME_SHADES.forEach((shade) => {\n if (shade <= 700) {\n darkModeTones[shade] = (-shade + shade * initialLightness + 700) / 700;\n } else {\n darkModeTones[shade] = (1 - (shade - 700) / 700) * (initialLightness - 0.3) + 0.3;\n }\n });\n\n const darkMode: AXThemeBuilderColorScale = {} as AXThemeBuilderColorScale;\n\n AX_THEME_SHADES.forEach((shade) => {\n const oklchColor: AXOklchColor = {\n l: darkModeTones[shade],\n c: initialChroma,\n h: initialHue ?? 0,\n mode: 'oklch',\n };\n\n const gamutMapped = toGamut(oklchColor) || oklchColor;\n const rgbColor = toRgb(gamutMapped);\n\n if (rgbColor) {\n darkMode[String(shade) as keyof AXThemeBuilderColorScale] = formatRgbTriplet(rgbColor as AXRgbColor);\n }\n });\n\n const color500 = parseRgbTriplet(darkMode['500']);\n const color200 = parseRgbTriplet(darkMode['200']);\n if (color500) {\n darkMode['on'] = contrastText(color500, true);\n }\n if (color200) {\n darkMode['on-contrast'] = contrastText(color200, true);\n }\n\n return darkMode;\n}\n\nfunction lightnessCalc(hue: number): number {\n if (hue <= 80) return 0.06 * hue + 75;\n if (hue < 270) return -0.07 * hue + 85.82;\n return 0.09 * hue + 42.6;\n}\n\nfunction isDarkOnSurface(lightness: number, hue: number, isDark: boolean): boolean {\n const threshold = lightnessCalc(hue);\n if (isDark) {\n return lightness >= (threshold - 15) / 100;\n }\n return lightness >= threshold / 100;\n}\n\nfunction contrastText(color: AXRgbColor, isDark: boolean): string {\n const oklchColor = toOklch(color) as AXOklchColor;\n if (!oklchColor) return '0, 0, 0';\n\n const { l: oklchLightness, c: chroma, h: hue } = oklchColor;\n let newLightness: number;\n\n if (isDark) {\n newLightness = isDarkOnSurface(oklchLightness, hue ?? 0, true) ? 0.2 : 0.995;\n } else {\n newLightness = isDarkOnSurface(oklchLightness, hue ?? 0, false) ? 0.3 : 0.995;\n }\n\n const contrastOklch: AXOklchColor = { l: newLightness, c: chroma, h: hue, mode: 'oklch' };\n\n const gamutMapped = toGamut(contrastOklch) || contrastOklch;\n const finalRgb = toRgb(gamutMapped);\n return formatRgbTriplet(finalRgb as AXRgbColor);\n}\n\nfunction borderColor(color: AXRgbColor, isDark: boolean): string {\n const hslColor = toHsl(color);\n if (!hslColor) return '0, 0, 0';\n\n if (isDark) {\n hslColor.l += 0.09;\n } else {\n hslColor.l -= 0.07;\n }\n\n hslColor.l = Math.max(0, Math.min(1, hslColor.l));\n\n const finalRgb = toRgb(hslColor);\n return formatRgbTriplet(finalRgb as AXRgbColor);\n}\n\nfunction parseRgbTriplet(rgbStr: string): AXRgbColor | undefined {\n if (!rgbStr) return undefined;\n const [r, g, b] = rgbStr.split(',').map(Number);\n return { mode: 'rgb', r: r / 255, g: g / 255, b: b / 255 };\n}\n\nexport function formatRgbTriplet(color: AXRgbColor): string {\n const r = Math.min(255, Math.max(0, Math.round(color.r * 255)));\n const g = Math.min(255, Math.max(0, Math.round(color.g * 255)));\n const b = Math.min(255, Math.max(0, Math.round(color.b * 255)));\n return `${r}, ${g}, ${b}`;\n}\n\n/** Accepts `#hex`, `rgb()`, `rgba()`, named colors … for culori. */\nfunction normalizeCssColor(css: string): string {\n const t = css.trim();\n const parsed = culori.parse(t);\n if (!parsed) return t;\n const hex = culori.formatHex(parsed);\n return hex ?? t;\n}\n\n/** Neutral UI surfaces for live preview (static values from default.css \\`:root\\`). */\nfunction buildPreviewNeutralSurfaces(isDark: boolean): string {\n return buildNeutralRgbVariables(isDark ? darkSurfaceColors : lightSurfaceColors);\n}\n\n/** Default bg/text/border primitives for live preview. */\nfunction buildPreviewSemanticDefaults(isDark: boolean): string {\n if (isDark) {\n return (\n ` --ax-sys-color-bg-default: var(--ax-sys-color-darkest-surface);\\n` +\n ` --ax-sys-color-text-default: var(--ax-sys-color-on-darkest-surface);\\n` +\n ` --ax-sys-color-border-default: var(--ax-sys-color-border-darkest-surface);\\n`\n );\n }\n return (\n ` --ax-sys-color-bg-default: var(--ax-sys-color-lightest-surface);\\n` +\n ` --ax-sys-color-text-default: var(--ax-sys-color-on-lightest-surface);\\n` +\n ` --ax-sys-color-border-default: var(--ax-sys-color-border-lightest-surface);\\n`\n );\n}\n\nfunction generateCSSForRoles(palette: AXThemeBuilderColorScale, role: string): string {\n let css = '\\n';\n Object.entries(palette).forEach(([shade, rgbColor]) => {\n if (shade === 'on') {\n css += ` --ax-sys-color-on-${role}: ${rgbColor};\\n`;\n } else if (shade === 'on-contrast') {\n css += ` --ax-sys-color-on-contrast-${role}: ${rgbColor};\\n`;\n } else {\n css += ` --ax-sys-color-${role}-${shade}: ${rgbColor};\\n`;\n }\n });\n return css;\n}\n\n/**\n * Produces CSS aligned with `packages/styles/themes/default.css`: same sections, directives,\n * `@theme inline`, `.ax-dark .ax-light` / `.ax-dark` color-alias re-declaration, and utility layout.\n * Only `--ax-sys-color-*` RGB triplets (and thus derived contrasts/borders) differ from the packaged default theme.\n * Includes all roles in {@link EXPORT_ROOT_ROLE_ORDER}: `accent` plus `accent1`–`accent6`.\n */\nexport function generateFullThemeCSS(seeds: {\n light: { [role: string]: string };\n dark: { [role: string]: string };\n}): string {\n const merged = mergeExportSeeds(seeds);\n const allPalettes: {\n light: Record<string, AXThemeBuilderColorScale>;\n dark: Record<string, AXThemeBuilderColorScale>;\n } = {\n light: {},\n dark: {},\n };\n\n for (const role of EXPORT_ROOT_ROLE_ORDER) {\n allPalettes.light[role] = generateLightPalette(merged.light[role]);\n allPalettes.dark[role] = generateDarkPalette(merged.dark[role]);\n }\n\n let css = THEME_CSS_PREAMBLE;\n css += THEME_SIZE_SCOPE_CLASSES;\n css += THEME_EXPORT_ROOT_METADATA;\n css += buildNeutralRgbVariables(lightSurfaceColors);\n css += buildRoleRgbScales(allPalettes.light);\n css += buildSemanticSurfaceRgbTuples(allPalettes.light, false);\n css += ` --ax-sys-color-bg-default: var(--ax-sys-color-lightest-surface);\\n`;\n css += ` --ax-sys-color-text-default: var(--ax-sys-color-on-lightest-surface);\\n`;\n css += ` --ax-sys-color-border-default: var(--ax-sys-color-border-lightest-surface);\\n`;\n css += `}\\n\\n`;\n\n css += `.ax-dark {\n --ax-sys-theme-isDark: 1;\n --ax-sys-scroller-track-color: rgba(var(--ax-sys-color-darker-surface));\n --ax-sys-scroller-thumb-color: rgba(var(--ax-sys-color-lightest-surface));\n\n`;\n css += buildNeutralRgbVariables(darkSurfaceColors);\n css += buildRoleRgbScales(allPalettes.dark);\n css += buildSemanticSurfaceRgbTuples(allPalettes.dark, true);\n css += ` --ax-sys-color-bg-default: var(--ax-sys-color-darkest-surface);\\n`;\n css += ` --ax-sys-color-text-default: var(--ax-sys-color-on-darkest-surface);\\n`;\n css += ` --ax-sys-color-border-default: var(--ax-sys-color-border-darkest-surface);\\n`;\n css += `}\\n\\n`;\n\n css += buildDefaultThemeCssTailLikePackage(buildAxLightPrimitivesBlock(allPalettes.light));\n\n return css;\n}\n\nfunction buildAxLightPrimitivesBlock(palettes: Record<string, AXThemeBuilderColorScale>): string {\n let css = buildNeutralRgbVariables(lightSurfaceColors);\n css += buildRoleRgbScales(palettes);\n css += buildSemanticSurfaceRgbTuples(palettes, false);\n css += ` --ax-sys-color-bg-default: var(--ax-sys-color-lightest-surface);\\n`;\n css += ` --ax-sys-color-text-default: var(--ax-sys-color-on-lightest-surface);\\n`;\n css += ` --ax-sys-color-border-default: var(--ax-sys-color-border-lightest-surface);\\n\\n`;\n return css;\n}\n\nfunction mergeExportSeeds(seeds: { light: { [role: string]: string }; dark: { [role: string]: string } }): {\n light: ExportSeedMap;\n dark: ExportSeedMap;\n} {\n const out: { light: ExportSeedMap; dark: ExportSeedMap } = {\n light: { ...DEFAULT_EXPORT_SEEDS_LIGHT },\n dark: { ...DEFAULT_EXPORT_SEEDS_DARK },\n };\n for (const role of EXPORT_ROOT_ROLE_ORDER) {\n const l = seeds.light[role]?.trim();\n const d = seeds.dark[role]?.trim();\n if (l) out.light[role] = l;\n if (d) out.dark[role] = d;\n }\n return out;\n}\n\nfunction buildNeutralRgbVariables(surfaceColors: Record<string, { bg: string; on: string; border: string }>): string {\n let css = '';\n for (const [name, colors] of Object.entries(surfaceColors)) {\n css += ` --ax-sys-color-${name}: ${colors.bg};\\n`;\n css += ` --ax-sys-color-on-${name}: ${colors.on};\\n`;\n css += ` --ax-sys-color-border-${name}: ${colors.border};\\n\\n`;\n }\n return css;\n}\n\nfunction buildRoleRgbScales(palettes: Record<string, AXThemeBuilderColorScale>): string {\n let css = '';\n for (const role of EXPORT_ROOT_ROLE_ORDER) {\n for (const shade of AX_THEME_SHADES) {\n const v = palettes[role]?.[String(shade) as keyof AXThemeBuilderColorScale];\n if (v) {\n css += ` --ax-sys-color-${role}-${shade}: ${v};\\n`;\n }\n }\n css += `\\n`;\n }\n return css;\n}\n\n/** Semantic layering (`*-lightest-surface`, …): omitted for grayscale `surface` role (matches default.css). */\nfunction buildSemanticSurfaceRgbTuples(palettes: Record<string, AXThemeBuilderColorScale>, isDark: boolean): string {\n const surfaceMap = {\n 'lightest-surface': '100',\n 'lighter-surface': '200',\n 'light-surface': '300',\n surface: '500',\n 'dark-surface': '600',\n 'darker-surface': '700',\n 'darkest-surface': '800',\n } as const satisfies Record<\n string,\n '50' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900' | '950'\n >;\n\n let css = '';\n for (const role of EXPORT_ROOT_ROLE_ORDER) {\n if (role === 'surface') continue;\n\n for (const [surfName, shadeKey] of Object.entries(surfaceMap)) {\n const surfaceColorStr = palettes[role]?.[shadeKey];\n const surfaceRgb = surfaceColorStr ? parseRgbTriplet(surfaceColorStr) : undefined;\n\n if (surfaceRgb) {\n const suffix = surfName === 'surface' ? 'surface' : surfName;\n\n css += ` --ax-sys-color-${role}-${suffix}: ${surfaceColorStr};\\n`;\n css += ` --ax-sys-color-on-${role}-${suffix}: ${contrastText(surfaceRgb, isDark)};\\n`;\n css += ` --ax-sys-color-border-${role}-${suffix}: ${borderColor(surfaceRgb, isDark)};\\n\\n`;\n }\n }\n }\n return css;\n}\n\n/** Resolves a flat color map into per-mode seed maps, applying user values to both modes. */\nexport function resolveSeedsFromFlat(colors?: Partial<Record<AXThemeBuilderColors, string>>): {\n light: ExportSeedMap;\n dark: ExportSeedMap;\n} {\n const out: { light: ExportSeedMap; dark: ExportSeedMap } = {\n light: { ...DEFAULT_EXPORT_SEEDS_LIGHT },\n dark: { ...DEFAULT_EXPORT_SEEDS_DARK },\n };\n\n if (!colors) {\n return out;\n }\n\n for (const role of EXPORT_ROOT_ROLE_ORDER) {\n const value = colors[role]?.trim();\n if (value) {\n out.light[role] = value;\n out.dark[role] = value;\n }\n }\n\n return out;\n}\n\n/** Builds full light/dark palettes from resolved per-mode seeds. */\nexport function buildFullPalette(\n seeds: { light: ExportSeedMap; dark: ExportSeedMap },\n roles?: AXThemeBuilderColors[],\n): AXThemeBuilderFullPalette {\n const roleList = roles ?? [...EXPORT_ROOT_ROLE_ORDER];\n const palette = {\n light: {} as AXThemeBuilderFullPalette['light'],\n dark: {} as AXThemeBuilderFullPalette['dark'],\n };\n\n for (const role of roleList) {\n palette.light[role] = generateLightPalette(seeds.light[role]);\n palette.dark[role] = generateDarkPalette(seeds.dark[role]);\n }\n\n return palette;\n}\n\nfunction buildThemeVariableBlock(\n mode: 'light' | 'dark',\n variants: AXThemeBuilderPalette,\n roles: AXThemeBuilderColors[],\n): string {\n const isDark = mode === 'dark';\n let css = buildPreviewNeutralSurfaces(isDark);\n\n for (const colorName of roles) {\n const roleVariants = variants[colorName];\n if (roleVariants) {\n css += generateCSSForRoles(roleVariants, colorName);\n }\n }\n\n css += buildSemanticSurfaceColorsForRoles(variants, roles, isDark);\n css += buildPreviewSemanticDefaults(isDark);\n css += buildPreviewThemeColorAliases();\n\n return css;\n}\n\nfunction buildSemanticSurfaceColorsForRoles(\n variants: AXThemeBuilderPalette,\n roles: AXThemeBuilderColors[],\n isDark: boolean,\n): string {\n let css = '';\n\n for (const role of roles) {\n if (role === 'surface') continue;\n\n const roleVariants = variants[role];\n\n for (const [surfaceName, shade] of Object.entries(ROLE_SURFACE_SHADE_MAP)) {\n const surfaceColorStr = roleVariants?.[String(shade) as keyof typeof roleVariants];\n const surfaceRgb = surfaceColorStr ? parseRgbTriplet(surfaceColorStr) : undefined;\n\n if (surfaceRgb) {\n css += ` --ax-sys-color-${role}-${surfaceName}: ${surfaceColorStr};\\n`;\n css += ` --ax-sys-color-on-${role}-${surfaceName}: ${contrastText(surfaceRgb, isDark)};\\n`;\n css += ` --ax-sys-color-border-${role}-${surfaceName}: ${borderColor(surfaceRgb, isDark)};\\n\\n`;\n }\n }\n }\n\n return css;\n}\n\n/** Scoped CSS for live theme preview (variables only, no Tailwind layer). */\nexport function buildPreviewThemeCSS(\n palette: AXThemeBuilderFullPalette,\n scope?: { light: string; dark: string },\n roles?: AXThemeBuilderColors[],\n): string {\n const roleList = roles ?? [...EXPORT_ROOT_ROLE_ORDER];\n const lightScope = scope?.light ?? ':root';\n const darkScope = scope?.dark ?? '.ax-dark';\n\n let css = `${lightScope} {\\n`;\n css += buildThemeVariableBlock('light', palette.light, roleList);\n css += '}\\n\\n';\n\n css += `${darkScope} {\\n`;\n css += buildThemeVariableBlock('dark', palette.dark, roleList);\n css += '}\\n\\n';\n\n return css;\n}\n","import {\n AXThemeBuilderColors,\n AXThemeBuilderFullPalette,\n} from './theme-builder.class';\nimport {\n buildFullPalette,\n buildPreviewThemeCSS,\n generateFullThemeCSS,\n resolveSeedsFromFlat,\n} from './theme-builder';\n\nexport type AXThemeColors = Partial<Record<AXThemeBuilderColors, string>>;\n\nexport interface AXCreateThemeOptions {\n /** 'file' (default) emits a complete stylesheet with :root/.ax-dark plus the Tailwind layer.\n * 'preview' emits variables only, scoped to `scope`, for injecting into a live page. */\n target?: 'file' | 'preview';\n /** Selectors used when target is 'preview'. */\n scope?: { light: string; dark: string };\n /** Roles to emit when target is 'preview'. Defaults to all roles. */\n roles?: AXThemeBuilderColors[];\n}\n\nexport interface AXTheme {\n /** The generated CSS. */\n css: string;\n /** Generated shade scales per role, for both modes. */\n palette: AXThemeBuilderFullPalette;\n}\n\n/**\n * Creates an ACoreX theme from a flat map of role seed colors.\n *\n * Each provided color is applied to both light and dark modes; dark shades are\n * derived via the dark-palette tone mapping. Omitted roles fall back to the\n * packaged default seeds (which may differ per mode for `secondary`, `danger`, and `surface`).\n */\nexport function createTheme(colors?: AXThemeColors, options?: AXCreateThemeOptions): AXTheme {\n const target = options?.target ?? 'file';\n const seeds = resolveSeedsFromFlat(colors);\n const roles = options?.roles;\n const palette = buildFullPalette(seeds, roles);\n\n const css =\n target === 'preview'\n ? buildPreviewThemeCSS(palette, options?.scope, roles)\n : generateFullThemeCSS({ light: seeds.light, dark: seeds.dark });\n\n return { css, palette };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { InjectionToken, inject, Injectable, TemplateRef, ViewContainerRef, Directive, Pipe, provideAppInitializer, NgModule } from '@angular/core';
3
- import { get } from 'lodash-es';
3
+ import { toSignal, toObservable } from '@angular/core/rxjs-interop';
4
4
  import { of, tap, shareReplay, firstValueFrom, BehaviorSubject, distinctUntilChanged, switchMap, from } from 'rxjs';
5
5
  import { AXEventService, AXSystemEvents } from '@acorex/core/events';
6
6
  import { AXLocaleService } from '@acorex/core/locale';
7
7
  import { waitFor } from '@acorex/core/utils';
8
+ import { get } from 'lodash-es';
8
9
 
9
10
  const AX_TRANSLATION_CONFIG = new InjectionToken('AX_TRANSLATION_CONFIG', {
10
11
  providedIn: 'root',
@@ -22,6 +23,10 @@ const AXTranslationDefaultConfig = {
22
23
  'en-AU': ['en-US'],
23
24
  },
24
25
  },
26
+ available: {
27
+ langs: ['en-US', 'fa-IR', 'en-AU'],
28
+ scopes: ['acorex', 'common'],
29
+ },
25
30
  preload: {
26
31
  langs: ['en-US'],
27
32
  scopes: ['acorex'],
@@ -164,10 +169,10 @@ class AXTranslationLoaderService {
164
169
  getFallbackScopes(scope) {
165
170
  return this.config.fallbacks?.scopes?.[scope] ?? [];
166
171
  }
167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
168
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationLoaderService, providedIn: 'root' }); }
172
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationLoaderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
173
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationLoaderService, providedIn: 'root' }); }
169
174
  }
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationLoaderService, decorators: [{
175
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationLoaderService, decorators: [{
171
176
  type: Injectable,
172
177
  args: [{ providedIn: 'root' }]
173
178
  }] });
@@ -175,17 +180,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
175
180
  class TranslationParserService {
176
181
  constructor() {
177
182
  this.legacyRegex = /t\(["']([^"']+)["']\s*(?:,\s*(\{.*?\}))?\)/g;
178
- /**
179
- * Matches inline refs: `@scope:key` or `@lang:scope:key`
180
- * Key segments are dot-separated (`common.form.title`) so a trailing `.`
181
- * or HTML boundary (`</li>`) is not consumed as part of the key.
182
- */
183
- this.inlineRegex = /@([a-zA-Z-]+:)?([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*)/g;
183
+ this.inlineRegex = /@([a-zA-Z\-]+:)?([a-zA-Z0-9_-]+):([a-zA-Z0-9_][a-zA-Z0-9_.-]*)/g;
184
184
  }
185
185
  isExpression(value) {
186
186
  return typeof value === 'string' && (value.includes('t(') || value.includes('@'));
187
187
  }
188
188
  parse(expression, currentLang, currentScope) {
189
+ this.inlineRegex.lastIndex = 0;
190
+ this.legacyRegex.lastIndex = 0;
189
191
  const tokens = [];
190
192
  // Extract inline references like @lang:scope:key or @scope:key
191
193
  let inlineMatch;
@@ -509,16 +511,26 @@ class AXTranslationService {
509
511
  }
510
512
  return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');
511
513
  }
512
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
513
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationService, providedIn: 'root' }); }
514
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
515
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationService, providedIn: 'root' }); }
514
516
  }
515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationService, decorators: [{
517
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationService, decorators: [{
516
518
  type: Injectable,
517
519
  args: [{
518
520
  providedIn: 'root',
519
521
  }]
520
522
  }], ctorParameters: () => [] });
521
523
 
524
+ /**
525
+ * Creates a signal that mirrors a string source signal, translating its value whenever
526
+ * the source or active language changes.
527
+ */
528
+ function toTranslatedSignal(source, options) {
529
+ const translation = inject(AXTranslationService);
530
+ const staticOptions = options ? { ...options } : undefined;
531
+ return toSignal(toObservable(source).pipe(switchMap((value) => translation.translate$(value ?? '', staticOptions))), { initialValue: '' });
532
+ }
533
+
522
534
  const loadTranslationScope = (route, state) => {
523
535
  const translationLoaderService = inject(AXTranslationLoaderService);
524
536
  const translationService = inject(AXTranslationService);
@@ -546,10 +558,10 @@ class AXTranslatorDirective {
546
558
  this.vc.clear();
547
559
  this.vc.createEmbeddedView(this.templateRef, { $implicit: t });
548
560
  }
549
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
550
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AXTranslatorDirective, isStandalone: true, selector: "[translate]", ngImport: i0 }); }
561
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslatorDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
562
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.1.6", type: AXTranslatorDirective, isStandalone: true, selector: "[translate]", ngImport: i0 }); }
551
563
  }
552
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslatorDirective, decorators: [{
564
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslatorDirective, decorators: [{
553
565
  type: Directive,
554
566
  args: [{ selector: '[translate]' }]
555
567
  }] });
@@ -564,10 +576,10 @@ class AXTranslatorPipe {
564
576
  }
565
577
  return this.service.translate$(value, options);
566
578
  }
567
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
568
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXTranslatorPipe, isStandalone: true, name: "translate" }); }
579
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslatorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
580
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "22.1.6", ngImport: i0, type: AXTranslatorPipe, isStandalone: true, name: "translate" }); }
569
581
  }
570
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslatorPipe, decorators: [{
582
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslatorPipe, decorators: [{
571
583
  type: Pipe,
572
584
  args: [{
573
585
  name: 'translate',
@@ -581,16 +593,16 @@ function initializeApp(translatorService) {
581
593
  };
582
594
  }
583
595
  class AXTranslationModule {
584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
585
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationModule, imports: [AXTranslatorPipe, AXTranslatorDirective], exports: [AXTranslatorPipe, AXTranslatorDirective] }); }
586
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationModule, providers: [
596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
597
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationModule, imports: [AXTranslatorPipe, AXTranslatorDirective], exports: [AXTranslatorPipe, AXTranslatorDirective] }); }
598
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationModule, providers: [
587
599
  provideAppInitializer(() => {
588
600
  const initializerFn = initializeApp(inject(AXTranslationLoaderService));
589
601
  return initializerFn();
590
602
  }),
591
603
  ] }); }
592
604
  }
593
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXTranslationModule, decorators: [{
605
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AXTranslationModule, decorators: [{
594
606
  type: NgModule,
595
607
  args: [{
596
608
  imports: [AXTranslatorPipe, AXTranslatorDirective],
@@ -608,5 +620,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
608
620
  * Generated bundle index. Do not edit.
609
621
  */
610
622
 
611
- export { AXTranslationDefaultConfig, AXTranslationLoaderDefault, AXTranslationModule, AXTranslationService, AXTranslatorDirective, AXTranslatorPipe, AX_TRANSLATION_CONFIG, AX_TRANSLATION_LOADER, LOCALE_KEY_REGEX, createMultiLanguageString, isEffectivelyEmptyLocalizedValue, isValidMultiLanguageObject, loadTranslationScope, resolveMultiLanguageString, resolveMultiLanguageValue, translateSync, translationConfig };
623
+ export { AXTranslationDefaultConfig, AXTranslationLoaderDefault, AXTranslationModule, AXTranslationService, AXTranslatorDirective, AXTranslatorPipe, AX_TRANSLATION_CONFIG, AX_TRANSLATION_LOADER, LOCALE_KEY_REGEX, createMultiLanguageString, isEffectivelyEmptyLocalizedValue, isValidMultiLanguageObject, loadTranslationScope, resolveMultiLanguageString, resolveMultiLanguageValue, toTranslatedSignal, translateSync, translationConfig };
612
624
  //# sourceMappingURL=acorex-core-translation.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../packages/core/translation/src/lib/translation.config.ts","../../../../packages/core/translation/src/lib/translation.loader.ts","../../../../packages/core/translation/src/lib/translation-loader.service.ts","../../../../packages/core/translation/src/lib/translation.parser.ts","../../../../packages/core/translation/src/lib/translation.resolver.ts","../../../../packages/core/translation/src/lib/translation.types.ts","../../../../packages/core/translation/src/lib/translation.service.ts","../../../../packages/core/translation/src/lib/translation-scope.resolver.ts","../../../../packages/core/translation/src/lib/translator.directive.ts","../../../../packages/core/translation/src/lib/translator.pipe.ts","../../../../packages/core/translation/src/lib/translation.module.ts","../../../../packages/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXTranslateLang, AXTranslateScope } from './translation.types';\n\nexport interface AXTranslationConfig {\n defaults: {\n lang: AXTranslateLang;\n scope: AXTranslateScope;\n };\n preload?: {\n langs: AXTranslateLang[];\n scopes: AXTranslateScope[];\n };\n fallbacks?: {\n langs?: Record<AXTranslateLang, AXTranslateLang[]>;\n scopes?: Record<AXTranslateScope, AXTranslateScope[]>;\n };\n available?: {\n langs?: AXTranslateLang[];\n scopes?: AXTranslateScope[];\n };\n resolver?: {\n scopeKey: string; // used to extract scope from params, e.g. `scope: 'common'`\n };\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaults: {\n lang: 'en-US',\n scope: 'acorex',\n },\n fallbacks: {\n langs: {\n 'en-AU': ['en-US'],\n },\n },\n preload: {\n langs: ['en-US'],\n scopes: ['acorex'],\n },\n resolver: {\n scopeKey: 'scope',\n },\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang;\n scope?: AXTranslateScope;\n}\n\nexport interface AXTranslationLoader {\n load(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n load(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});\n","import { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { Observable, firstValueFrom, of, shareReplay, tap } from 'rxjs';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\nimport { AXEventService, AXSystemEvents } from '@acorex/core/events';\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationLoaderService {\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n private eventService = inject(AXEventService);\n\n private cache = new Map<string, AXTranslation>();\n private inflight = new Map<string, Observable<AXTranslation>>();\n\n public load(lang: AXTranslateLang, scope: AXTranslateScope): Observable<AXTranslation> {\n const key = `${lang}:${scope}`;\n\n // 1. Check cache first\n if (this.cache.has(key)) {\n return of(this.cache.get(key)!);\n }\n\n // 2. Check if it's already in-flight\n if (this.inflight.has(key)) {\n return this.inflight.get(key)!;\n }\n\n // 3. Not in cache, not in-flight: Make the request\n const newObs = this.loader.load({ lang, scope }).pipe(\n tap({\n next: (data) => {\n this.cache.set(key, data);\n // No need to delete from inflight here, finalize will handle it\n // or delete it only after caching. If you delete here, and shareReplay\n // source completes, subsequent subscribers might re-trigger if not careful.\n // It's better to remove from inflight in finalize or after shareReplay has replayed.\n // For simplicity and common patterns, removing after caching within tap (before shareReplay)\n // can work if shareReplay handles the source completion correctly.\n // A safer bet is to remove it in finalize *after* shareReplay.\n\n // Emit event to notify other components that the language has been loaded\n this.eventService.emitEvent({\n type: AXSystemEvents.AXLanguageLoaded,\n payload: data,\n });\n },\n error: (err) => {\n console.error(`Error loading ${key}:`, err);\n // Remove from inflight on error so subsequent calls can retry\n this.inflight.delete(key);\n },\n // finalize is tricky with shareReplay if you want to keep the replayed value\n // but still clear inflight. For this pattern, deleting on next/error\n // *before* shareReplay often means that shareReplay will re-trigger the source\n // if the inflight observable is requested again after being deleted.\n // The current structure of deleting in `tap` and then `shareReplay`\n // might need `this.inflight.delete(key)` to be moved after `shareReplay` effect.\n // Let's try a common pattern:\n }),\n shareReplay(1), // Replay the last emitted value for subsequent subscribers\n tap({\n // This tap runs *after* shareReplay has done its work for the first subscriber\n // and for subsequent subscribers that get the replayed value.\n next: () => {\n // Once data is successfully loaded and cached (by the first tap),\n // and shareReplay ensures it's available, we can remove from inflight.\n // This means subsequent calls for the same key during the \"inflight\" period\n // get the shared observable, and after it resolves and is cached,\n // inflight is cleared.\n this.inflight.delete(key);\n },\n // Error is handled by the first tap, or catchError if you want to provide a fallback\n }),\n );\n\n this.inflight.set(key, newObs); // Store the observable that includes caching and cleanup logic\n return newObs;\n }\n\n public peek(lang: AXTranslateLang, scope: AXTranslateScope, key: string): string | null {\n const cacheKey = `${lang}:${scope}`;\n const data = this.cache.get(cacheKey);\n const value = get(data, key, null);\n // Nested JSON nodes (objects/arrays) are not valid translations\n return typeof value === 'string' ? value : null;\n }\n\n public async preload(options?: { langs?: AXTranslateLang[]; scopes?: AXTranslateScope[] }): Promise<void> {\n const langsToLoad = [...new Set(options?.langs ?? this.config.preload?.langs ?? [this.config.defaults.lang])];\n const scopesToLoad = [...new Set(options?.scopes ?? this.config.preload?.scopes ?? [this.config.defaults.scope])];\n\n const loadPromises: Promise<\n | { lang: AXTranslateLang; scope: AXTranslateScope; status: 'fulfilled'; value: AXTranslation } // Changed any to AXTranslation\n | { lang: AXTranslateLang; scope: AXTranslateScope; status: 'rejected'; reason: any }\n >[] = [];\n\n langsToLoad.forEach((lang) => {\n scopesToLoad.forEach((scope) => {\n const loadPromise = firstValueFrom(this.load(lang, scope)) // This should now always get a valid Observable\n .then((value) => ({ lang, scope, status: 'fulfilled' as const, value }))\n .catch((reason) => ({ lang, scope, status: 'rejected' as const, reason }));\n loadPromises.push(loadPromise);\n });\n });\n\n const results = await Promise.all(loadPromises);\n\n let allSucceeded = true;\n results.forEach((result) => {\n if (result.status === 'rejected') {\n allSucceeded = false;\n console.error(\n `Failed to preload translations for lang: ${result.lang}, scope: ${result.scope}. Reason:`,\n result.reason,\n );\n } else {\n // console.log(`Successfully preloaded lang: ${result.lang}, scope: ${result.scope}`); // Optionally uncomment for success logs\n }\n // else {\n // console.log(`Successfully preloaded lang: ${result.lang}, scope: ${result.scope}`); // Optionally uncomment for success logs\n // }\n });\n\n if (!allSucceeded) {\n console.error('One or more translation preloads failed. See console for details.');\n // throw new Error(\"One or more translation preloads failed. See console for details.\");\n }\n // The second results.forEach loop in your original code was redundant, I've removed it.\n // If it was for a different purpose, you can add it back.\n }\n\n public clear(): void {\n this.cache.clear();\n this.inflight.clear();\n }\n\n public getFallbackLangs(lang: AXTranslateLang): AXTranslateLang[] {\n return this.config.fallbacks?.langs?.[lang] ?? [];\n }\n\n public getFallbackScopes(scope: AXTranslateScope): AXTranslateScope[] {\n return this.config.fallbacks?.scopes?.[scope] ?? [];\n }\n}\n","import { AXParsedToken } from './translation.types';\n\nexport class TranslationParserService {\n private readonly legacyRegex = /t\\([\"']([^\"']+)[\"']\\s*(?:,\\s*(\\{.*?\\}))?\\)/g;\n /**\n * Matches inline refs: `@scope:key` or `@lang:scope:key`\n * Key segments are dot-separated (`common.form.title`) so a trailing `.`\n * or HTML boundary (`</li>`) is not consumed as part of the key.\n */\n private readonly inlineRegex = /@([a-zA-Z-]+:)?([a-zA-Z0-9_-]+):([a-zA-Z0-9_-]+(?:\\.[a-zA-Z0-9_-]+)*)/g;\n\n public isExpression(value: string): boolean {\n return typeof value === 'string' && (value.includes('t(') || value.includes('@'));\n }\n\n public parse(expression: string, currentLang: string, currentScope: string): AXParsedToken[] {\n const tokens: AXParsedToken[] = [];\n\n // Extract inline references like @lang:scope:key or @scope:key\n let inlineMatch;\n while ((inlineMatch = this.inlineRegex.exec(expression)) !== null) {\n const langPart = inlineMatch[1]?.replace(':', '') ?? null;\n const scope = inlineMatch[2] ?? currentScope;\n const key = inlineMatch[3];\n const fullMatch = inlineMatch[0];\n\n tokens.push({ lang: langPart || currentLang, scope, key, fullMatch });\n }\n\n // Extract legacy expressions\n let legacyMatch;\n while ((legacyMatch = this.legacyRegex.exec(expression)) !== null) {\n const key = legacyMatch[1];\n const rawOptions = legacyMatch[2];\n let scope = currentScope;\n let lang = currentLang;\n\n if (rawOptions) {\n try {\n const jsonString = rawOptions.replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?\\s*:/g, '\"$2\":').replace(/'/g, '\"');\n const options = JSON.parse(jsonString);\n scope = options.scope || scope;\n lang = options.lang || lang;\n } catch (err) {\n console.error('Invalid translation expression options:', err);\n }\n }\n\n tokens.push({ key, scope, lang, fullMatch: legacyMatch[0] });\n }\n\n return tokens;\n }\n}\n","import { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { TranslationParserService } from './translation.parser';\nimport { AXTranslateLang, AXTranslateParams, AXTranslateScope } from './translation.types';\n\n// Helper function to escape special characters for use in a regular expression\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport class TranslationResolverService {\n private loaderService = inject(AXTranslationLoaderService);\n private parser = new TranslationParserService();\n\n async resolve(\n lang: AXTranslateLang,\n scope: AXTranslateScope,\n key: string,\n params?: AXTranslateParams,\n ): Promise<string> {\n let result = this.loaderService.peek(lang, scope, key);\n\n if (result == null) {\n await firstValueFrom(this.loaderService.load(lang, scope));\n result = this.loaderService.peek(lang, scope, key);\n }\n\n if (result == null || typeof result !== 'string') {\n const unresolvedResult = key;\n return this.format(unresolvedResult, params);\n }\n\n // Recursively resolve references\n if (this.parser.isExpression(result)) {\n const tokens = this.parser.parse(result, lang, scope);\n if (tokens.length > 0) {\n const first = tokens[0];\n result = await this.resolve(first.lang || lang, first.scope || scope, first.key, params);\n }\n }\n\n return this.format(result, params);\n }\n\n public format(text: string, params?: AXTranslateParams): string {\n if (!params || typeof text !== 'string' || Object.keys(params).length === 0) {\n return text;\n }\n\n return Object.keys(params).reduce((currentText, paramKey) => {\n // paramKey is the key from the params object, e.g., \"title\" or \" title \"\n const valueToInsert = params[paramKey];\n\n // 1. Trim the key from the params object to handle potential leading/trailing spaces.\n // e.g., if paramKey is \" title \", keyForPattern becomes \"title\".\n const keyForPattern = paramKey.trim();\n\n // If trimming results in an empty string, it's not a valid placeholder to replace.\n if (keyForPattern === '') {\n return currentText;\n }\n\n // 2. Escape the trimmed key to safely use it in a regular expression.\n // This handles cases where the key might contain special regex characters (e.g., \"user.name\", \"item[0]\").\n const escapedKey = escapeRegExp(keyForPattern);\n\n // 3. Construct the RegExp. This will match:\n // - {{KEY}}\n // - {{ KEY }}\n // - {{ KEY }}\n // etc., where KEY is the (trimmed and escaped) paramKey.\n const re = new RegExp(`{{\\\\s*${escapedKey}\\\\s*}}`, 'g');\n\n // 4. Replace occurrences, ensuring the value is a string.\n return currentText.replace(re, String(valueToInsert));\n }, text);\n }\n}\n","export type AXTranslateHashMap<T = unknown> = Record<string, T>;\n\nexport type AXTranslateLang = string;\nexport type AXTranslateScope = string;\nexport type AXTranslateParams<T = unknown> = Record<string, T>;\nexport type AXTranslation = Record<string, string>;\n\nexport interface AXTranslateOptions {\n lang?: AXTranslateLang;\n scope?: AXTranslateScope;\n params?: AXTranslateParams;\n}\n\nexport interface AXParsedToken {\n key: string;\n scope?: AXTranslateScope;\n lang?: AXTranslateLang;\n fullMatch: string;\n}\n\nexport const LOCALE_KEY_REGEX = /^(\\*-\\*|[a-z]{2}-[A-Z]{2})$/;\n\nexport type AXMultiLanguageMap = Record<string, string>;\n\nexport type AXMultiLanguageString = string | AXMultiLanguageMap;\n\nexport function resolveMultiLanguageValue(value: AXMultiLanguageMap, locale: string): string {\n return value[locale] ?? value['en-US'] ?? Object.values(value).find((item) => item != null) ?? '';\n}\n\nexport function isValidMultiLanguageObject(value: unknown): value is AXMultiLanguageMap {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n\n const entries = Object.entries(value);\n if (!entries.length) {\n return false;\n }\n\n return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');\n}\n\n/**\n * Resolves {@link AXMultiLanguageString} to a single string for the given locale.\n * Fallback order: `currentLocale` → `en-US` → first map value.\n */\nexport function resolveMultiLanguageString(\n content: AXMultiLanguageString | null | undefined,\n currentLocale: string,\n): string {\n if (content == null || content === '') {\n return '';\n }\n if (typeof content === 'string') {\n return content;\n }\n if (!isValidMultiLanguageObject(content)) {\n return String(content);\n }\n\n return resolveMultiLanguageValue(content, currentLocale);\n}\n\n/**\n * Creates an {@link AXMultiLanguageMap} with `en-US` and `fa-IR` entries.\n * Use for seed data, tests, and demos that supply English and Persian copy explicitly.\n */\nexport function createMultiLanguageString(enUs: string, faIr: string): AXMultiLanguageMap {\n return { 'en-US': enUs, 'fa-IR': faIr };\n}\n\n/**\n * True when there is no displayable text in any locale (plain string or ML map).\n */\nexport function isEffectivelyEmptyLocalizedValue(value: unknown): boolean {\n if (value == null) return true;\n if (typeof value === 'string') return value.trim() === '';\n if (typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return Object.values(record).every((v) => v == null || String(v).trim() === '');\n}\n","import { AXEventService, AXSystemEvents } from '@acorex/core/events';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { waitFor } from '@acorex/core/utils';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, distinctUntilChanged, from, Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { TranslationParserService } from './translation.parser';\nimport { TranslationResolverService } from './translation.resolver';\nimport {\n AXMultiLanguageMap,\n AXTranslateLang,\n AXTranslateOptions,\n isValidMultiLanguageObject,\n LOCALE_KEY_REGEX,\n resolveMultiLanguageValue,\n} from './translation.types';\n\nlet singletonInstance: AXTranslationService;\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return singletonInstance.translateSync(key, options);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXTranslationService {\n private localeService = inject(AXLocaleService);\n private config = inject(AX_TRANSLATION_CONFIG);\n private loader = inject(AXTranslationLoaderService);\n private parser = new TranslationParserService();\n private eventService = inject(AXEventService);\n private resolver = new TranslationResolverService();\n private activeLang = new BehaviorSubject<AXTranslateLang>(this.config.defaults.lang);\n public readonly langChanges$ = this.activeLang.asObservable();\n public readonly currentLocale$ = this.langChanges$.pipe(distinctUntilChanged());\n\n constructor() {\n singletonInstance = this;\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.localeInfo?.code) {\n this.setActiveLang(locale.localeInfo.code);\n this.preloadLocaleTranslations(locale.localeInfo.code, locale.i18nMeta?.fallbackLocales);\n }\n });\n }\n\n private preloadLocaleTranslations(lang: AXTranslateLang, fallbackLocales?: AXTranslateLang[]): void {\n const scope = this.config.defaults.scope;\n this.loader.load(lang, scope).subscribe();\n for (const fallback of fallbackLocales ?? this.loader.getFallbackLangs(lang)) {\n this.loader.load(fallback, scope).subscribe();\n }\n }\n\n private peekTranslation(lang: AXTranslateLang, scope: string, key: string): string | null {\n let translation = this.loader.peek(lang, scope, key);\n if (translation != null) {\n return translation;\n }\n\n for (const fallbackLang of this.loader.getFallbackLangs(lang)) {\n translation = this.loader.peek(fallbackLang, scope, key);\n if (translation != null) {\n return translation;\n }\n }\n\n return null;\n }\n\n public setActiveLang(lang: AXTranslateLang): void {\n if (lang && lang !== this.activeLang.getValue()) {\n this.activeLang.next(lang);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXLanguageChanged,\n payload: lang,\n });\n }\n }\n\n public getActiveLang(): AXTranslateLang {\n return this.activeLang.getValue();\n }\n\n public getDefaultLang(): AXTranslateLang {\n return this.config.defaults.lang;\n }\n\n /**\n * @deprecated Use {@link translateAsync} instead. `translateAsync` now accepts\n * `string | AXMultiLanguageMap | null | undefined` and performs the same\n * multi-language resolution in addition to translation.\n */\n public resolve(value: string | AXMultiLanguageMap | null | undefined, locale?: string): string {\n if (value == null) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (!isValidMultiLanguageObject(value)) {\n return '';\n }\n\n return resolveMultiLanguageValue(value, locale ?? this.getActiveLang());\n }\n\n public toLocaleMap(\n value: string | AXMultiLanguageMap | null | undefined,\n activeLocale: string = this.getActiveLang(),\n ): AXMultiLanguageMap {\n if (isValidMultiLanguageObject(value)) {\n return { ...value };\n }\n\n return {\n [activeLocale]: typeof value === 'string' ? value : '',\n };\n }\n\n public translate$(\n value: string | AXMultiLanguageMap | null | undefined,\n options?: AXTranslateOptions,\n ): Observable<string> {\n if (isValidMultiLanguageObject(value)) {\n return this.langChanges$.pipe(\n switchMap((activeLang) => {\n const targetLang = options?.lang ?? activeLang;\n const selectedValue = resolveMultiLanguageValue(value, targetLang);\n const scope = options?.scope ?? this.config.defaults.scope;\n\n return from(\n this.translateAsync(selectedValue, {\n ...options,\n lang: targetLang,\n scope,\n }),\n );\n }),\n );\n }\n return this.translateValue$(value, options);\n }\n\n async translateAsync(\n text: string | AXMultiLanguageMap | null | undefined,\n options?: AXTranslateOptions,\n ): Promise<string> {\n if (text == null) {\n return '';\n }\n\n const { lang, scope } = this.resolveContext(options);\n const params = options?.params;\n\n let resolvedText: string;\n if (typeof text === 'string') {\n resolvedText = text;\n } else if (isValidMultiLanguageObject(text)) {\n resolvedText = resolveMultiLanguageValue(text, lang);\n } else {\n return '';\n }\n\n if (!this.parser.isExpression(resolvedText)) {\n return this.resolver.resolve(lang, scope, resolvedText, params);\n }\n\n const tokens = this.parser.parse(resolvedText, lang, scope);\n\n const results = await Promise.all(\n tokens.map((token) =>\n this.resolver\n .resolve(token.lang ?? lang, token.scope ?? scope, token.key, params)\n .then((translated) => [token.fullMatch, translated]),\n ),\n );\n\n return results.reduce((output, [match, translated]) => output.replace(match, translated), resolvedText);\n }\n\n public translateSync(\n text: string,\n options?: AXTranslateOptions & { waitForLoad?: boolean; timeoutMs?: number },\n ): string {\n const { lang, scope } = this.resolveContext(options);\n const params = options?.params;\n const waitForLoad = options?.waitForLoad ?? false;\n const timeoutMs = options?.timeoutMs ?? 100;\n\n if (!this.parser.isExpression(text)) {\n let translated = this.peekTranslation(lang, scope, text);\n\n if (!translated && waitForLoad) {\n translated = waitFor(\n () => this.peekTranslation(lang, scope, text),\n () => this.loader.load(lang, scope).subscribe(),\n timeoutMs,\n );\n }\n\n return this.resolver.format(translated ?? text, params);\n }\n\n const tokens = this.parser.parse(text, lang, scope);\n let result = text;\n\n for (const token of tokens) {\n const targetLang = token.lang ?? lang;\n const targetScope = token.scope ?? scope;\n const key = token.key;\n\n let translation = this.peekTranslation(targetLang, targetScope, key);\n\n if (!translation) {\n translation =\n waitFor(\n () => this.peekTranslation(targetLang, targetScope, key),\n () => this.loader.load(targetLang, targetScope).subscribe(),\n waitForLoad ? timeoutMs : 0,\n ) ?? key;\n }\n\n result = result.replace(token.fullMatch, this.resolver.format(translation, params));\n }\n\n return result;\n }\n\n private translateValue$(text: string, options?: AXTranslateOptions): Observable<string> {\n if (!text) {\n return of('');\n }\n\n const staticOptions = { ...options };\n const staticScope = staticOptions.scope ?? this.config.defaults.scope;\n\n return this.langChanges$.pipe(\n switchMap((lang) => {\n return from(\n this.translateAsync(text, {\n ...staticOptions,\n lang: staticOptions.lang ?? lang,\n scope: staticScope,\n }),\n );\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n private resolveContext(options?: AXTranslateOptions): { lang: AXTranslateLang; scope: string } {\n return {\n lang: options?.lang ?? this.getActiveLang() ?? this.config.defaults.lang,\n scope: options?.scope ?? this.config.defaults.scope,\n };\n }\n\n public isValidMultiLanguageObject(value: unknown): value is AXMultiLanguageMap {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n\n const entries = Object.entries(value);\n if (!entries.length) {\n return false;\n }\n\n return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');\n }\n}\n","import { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translationLoaderService = inject(AXTranslationLoaderService);\n const translationService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.resolver?.scopeKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translationLoaderService.preload({ langs: [translationService.getActiveLang()], scopes });\n};\n","import { Directive, OnInit, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n@Directive({ selector: '[translate]' })\nexport class AXTranslatorDirective implements OnInit {\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\n private vc = inject(ViewContainerRef);\n private translationService = inject(AXTranslationService);\n\n ngOnInit() {\n const cache = new Map<string, Observable<string>>();\n\n const t = (key: string, opts?: AXTranslateOptions) => {\n const id = `${key}|${opts?.lang ?? this.translationService.getActiveLang()}|${opts?.scope ?? 'common'}`;\n if (!cache.has(id)) {\n cache.set(\n id,\n this.translationService.translate$(key, opts).pipe(shareReplay({ bufferSize: 1, refCount: true })),\n );\n }\n return cache.get(id)!;\n };\n\n this.vc.clear();\n this.vc.createEmbeddedView(this.templateRef, { $implicit: t });\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Pipe({\n name: 'translate',\n pure: true,\n}) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n private service = inject(AXTranslationService);\n\n transform(\n value: string | Record<string, string> | null | undefined,\n options?: AXTranslateOptions,\n ): Observable<string> {\n if (!value) {\n return of('');\n }\n return this.service.translate$(value, options);\n }\n}\n","import { NgModule, inject, provideAppInitializer } from '@angular/core';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslatorPipe } from './translator.pipe';\n\nfunction initializeApp(translatorService: AXTranslationLoaderService) {\n return (): Promise<void> => {\n return translatorService.preload();\n };\n}\n\n@NgModule({\n imports: [AXTranslatorPipe, AXTranslatorDirective],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeApp(inject(AXTranslationLoaderService));\n return initializerFn();\n }),\n ],\n})\nexport class AXTranslationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acorex-core-translation.mjs","sources":["../../../../packages/core/translation/src/lib/translation.config.ts","../../../../packages/core/translation/src/lib/translation.loader.ts","../../../../packages/core/translation/src/lib/translation-loader.service.ts","../../../../packages/core/translation/src/lib/translation.parser.ts","../../../../packages/core/translation/src/lib/translation.resolver.ts","../../../../packages/core/translation/src/lib/translation.types.ts","../../../../packages/core/translation/src/lib/translation.service.ts","../../../../packages/core/translation/src/lib/translation-signal.util.ts","../../../../packages/core/translation/src/lib/translation-scope.resolver.ts","../../../../packages/core/translation/src/lib/translator.directive.ts","../../../../packages/core/translation/src/lib/translator.pipe.ts","../../../../packages/core/translation/src/lib/translation.module.ts","../../../../packages/core/translation/src/acorex-core-translation.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { AXTranslateLang, AXTranslateScope } from './translation.types';\n\nexport interface AXTranslationConfig {\n defaults: {\n lang: AXTranslateLang;\n scope: AXTranslateScope;\n };\n preload?: {\n langs: AXTranslateLang[];\n scopes: AXTranslateScope[];\n };\n fallbacks?: {\n langs?: Record<AXTranslateLang, AXTranslateLang[]>;\n scopes?: Record<AXTranslateScope, AXTranslateScope[]>;\n };\n available?: {\n langs?: AXTranslateLang[];\n scopes?: AXTranslateScope[];\n };\n resolver?: {\n scopeKey: string; // used to extract scope from params, e.g. `scope: 'common'`\n };\n}\n\nexport const AX_TRANSLATION_CONFIG = new InjectionToken<AXTranslationConfig>('AX_TRANSLATION_CONFIG', {\n providedIn: 'root',\n factory: () => {\n return AXTranslationDefaultConfig;\n },\n});\n\nexport const AXTranslationDefaultConfig: AXTranslationConfig = {\n defaults: {\n lang: 'en-US',\n scope: 'acorex',\n },\n fallbacks: {\n langs: {\n 'en-AU': ['en-US'],\n },\n },\n available: {\n langs: ['en-US', 'fa-IR', 'en-AU'],\n scopes: ['acorex', 'common'],\n },\n preload: {\n langs: ['en-US'],\n scopes: ['acorex'],\n },\n resolver: {\n scopeKey: 'scope',\n },\n};\n\nexport type AXPartialTranslationConfig = Partial<AXTranslationConfig>;\n\nexport function translationConfig(config: AXPartialTranslationConfig = {}): AXTranslationConfig {\n const result = {\n ...AXTranslationDefaultConfig,\n ...config,\n };\n return result;\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\n\nexport interface AXTranslationLoaderOptions {\n lang: AXTranslateLang;\n scope?: AXTranslateScope;\n}\n\nexport interface AXTranslationLoader {\n load(options: AXTranslationLoaderOptions): Observable<AXTranslation>;\n}\n\nexport class AXTranslationLoaderDefault implements AXTranslationLoader {\n load(options: AXTranslationLoaderOptions): Observable<AXTranslation> {\n return of({});\n }\n}\n\nexport const AX_TRANSLATION_LOADER = new InjectionToken<AXTranslationLoader>('AX_TRANSLATION_LOADER', {\n providedIn: 'root',\n factory: () => {\n return new AXTranslationLoaderDefault();\n },\n});\n","import { Injectable, inject } from '@angular/core';\nimport { get } from 'lodash-es';\nimport { Observable, firstValueFrom, of, shareReplay, tap } from 'rxjs';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AX_TRANSLATION_LOADER } from './translation.loader';\nimport { AXTranslateLang, AXTranslateScope, AXTranslation } from './translation.types';\nimport { AXEventService, AXSystemEvents } from '@acorex/core/events';\n\n@Injectable({ providedIn: 'root' })\nexport class AXTranslationLoaderService {\n private loader = inject(AX_TRANSLATION_LOADER);\n private config = inject(AX_TRANSLATION_CONFIG);\n private eventService = inject(AXEventService);\n\n private cache = new Map<string, AXTranslation>();\n private inflight = new Map<string, Observable<AXTranslation>>();\n\n public load(lang: AXTranslateLang, scope: AXTranslateScope): Observable<AXTranslation> {\n const key = `${lang}:${scope}`;\n\n // 1. Check cache first\n if (this.cache.has(key)) {\n return of(this.cache.get(key)!);\n }\n\n // 2. Check if it's already in-flight\n if (this.inflight.has(key)) {\n return this.inflight.get(key)!;\n }\n\n // 3. Not in cache, not in-flight: Make the request\n const newObs = this.loader.load({ lang, scope }).pipe(\n tap({\n next: (data) => {\n this.cache.set(key, data);\n // No need to delete from inflight here, finalize will handle it\n // or delete it only after caching. If you delete here, and shareReplay\n // source completes, subsequent subscribers might re-trigger if not careful.\n // It's better to remove from inflight in finalize or after shareReplay has replayed.\n // For simplicity and common patterns, removing after caching within tap (before shareReplay)\n // can work if shareReplay handles the source completion correctly.\n // A safer bet is to remove it in finalize *after* shareReplay.\n\n // Emit event to notify other components that the language has been loaded\n this.eventService.emitEvent({\n type: AXSystemEvents.AXLanguageLoaded,\n payload: data,\n });\n },\n error: (err) => {\n console.error(`Error loading ${key}:`, err);\n // Remove from inflight on error so subsequent calls can retry\n this.inflight.delete(key);\n },\n // finalize is tricky with shareReplay if you want to keep the replayed value\n // but still clear inflight. For this pattern, deleting on next/error\n // *before* shareReplay often means that shareReplay will re-trigger the source\n // if the inflight observable is requested again after being deleted.\n // The current structure of deleting in `tap` and then `shareReplay`\n // might need `this.inflight.delete(key)` to be moved after `shareReplay` effect.\n // Let's try a common pattern:\n }),\n shareReplay(1), // Replay the last emitted value for subsequent subscribers\n tap({\n // This tap runs *after* shareReplay has done its work for the first subscriber\n // and for subsequent subscribers that get the replayed value.\n next: () => {\n // Once data is successfully loaded and cached (by the first tap),\n // and shareReplay ensures it's available, we can remove from inflight.\n // This means subsequent calls for the same key during the \"inflight\" period\n // get the shared observable, and after it resolves and is cached,\n // inflight is cleared.\n this.inflight.delete(key);\n },\n // Error is handled by the first tap, or catchError if you want to provide a fallback\n }),\n );\n\n this.inflight.set(key, newObs); // Store the observable that includes caching and cleanup logic\n return newObs;\n }\n\n public peek(lang: AXTranslateLang, scope: AXTranslateScope, key: string): string | null {\n const cacheKey = `${lang}:${scope}`;\n const data = this.cache.get(cacheKey);\n const value = get(data, key, null);\n // Nested JSON nodes (objects/arrays) are not valid translations\n return typeof value === 'string' ? value : null;\n }\n\n public async preload(options?: { langs?: AXTranslateLang[]; scopes?: AXTranslateScope[] }): Promise<void> {\n const langsToLoad = [...new Set(options?.langs ?? this.config.preload?.langs ?? [this.config.defaults.lang])];\n const scopesToLoad = [...new Set(options?.scopes ?? this.config.preload?.scopes ?? [this.config.defaults.scope])];\n\n const loadPromises: Promise<\n | { lang: AXTranslateLang; scope: AXTranslateScope; status: 'fulfilled'; value: AXTranslation } // Changed any to AXTranslation\n | { lang: AXTranslateLang; scope: AXTranslateScope; status: 'rejected'; reason: any }\n >[] = [];\n\n langsToLoad.forEach((lang) => {\n scopesToLoad.forEach((scope) => {\n const loadPromise = firstValueFrom(this.load(lang, scope)) // This should now always get a valid Observable\n .then((value) => ({ lang, scope, status: 'fulfilled' as const, value }))\n .catch((reason) => ({ lang, scope, status: 'rejected' as const, reason }));\n loadPromises.push(loadPromise);\n });\n });\n\n const results = await Promise.all(loadPromises);\n\n let allSucceeded = true;\n results.forEach((result) => {\n if (result.status === 'rejected') {\n allSucceeded = false;\n console.error(\n `Failed to preload translations for lang: ${result.lang}, scope: ${result.scope}. Reason:`,\n result.reason,\n );\n } else {\n // console.log(`Successfully preloaded lang: ${result.lang}, scope: ${result.scope}`); // Optionally uncomment for success logs\n }\n // else {\n // console.log(`Successfully preloaded lang: ${result.lang}, scope: ${result.scope}`); // Optionally uncomment for success logs\n // }\n });\n\n if (!allSucceeded) {\n console.error('One or more translation preloads failed. See console for details.');\n // throw new Error(\"One or more translation preloads failed. See console for details.\");\n }\n // The second results.forEach loop in your original code was redundant, I've removed it.\n // If it was for a different purpose, you can add it back.\n }\n\n public clear(): void {\n this.cache.clear();\n this.inflight.clear();\n }\n\n public getFallbackLangs(lang: AXTranslateLang): AXTranslateLang[] {\n return this.config.fallbacks?.langs?.[lang] ?? [];\n }\n\n public getFallbackScopes(scope: AXTranslateScope): AXTranslateScope[] {\n return this.config.fallbacks?.scopes?.[scope] ?? [];\n }\n}\n","import { AXParsedToken } from './translation.types';\n\nexport class TranslationParserService {\n private readonly legacyRegex = /t\\([\"']([^\"']+)[\"']\\s*(?:,\\s*(\\{.*?\\}))?\\)/g;\n private readonly inlineRegex = /@([a-zA-Z\\-]+:)?([a-zA-Z0-9_-]+):([a-zA-Z0-9_][a-zA-Z0-9_.-]*)/g;\n\n public isExpression(value: string): boolean {\n return typeof value === 'string' && (value.includes('t(') || value.includes('@'));\n }\n\n public parse(expression: string, currentLang: string, currentScope: string): AXParsedToken[] {\n this.inlineRegex.lastIndex = 0;\n this.legacyRegex.lastIndex = 0;\n const tokens: AXParsedToken[] = [];\n\n // Extract inline references like @lang:scope:key or @scope:key\n let inlineMatch;\n while ((inlineMatch = this.inlineRegex.exec(expression)) !== null) {\n const langPart = inlineMatch[1]?.replace(':', '') ?? null;\n const scope = inlineMatch[2] ?? currentScope;\n const key = inlineMatch[3];\n const fullMatch = inlineMatch[0];\n\n tokens.push({ lang: langPart || currentLang, scope, key, fullMatch });\n }\n\n // Extract legacy expressions\n let legacyMatch;\n while ((legacyMatch = this.legacyRegex.exec(expression)) !== null) {\n const key = legacyMatch[1];\n const rawOptions = legacyMatch[2];\n let scope = currentScope;\n let lang = currentLang;\n\n if (rawOptions) {\n try {\n const jsonString = rawOptions.replace(/(['\"])?([a-zA-Z0-9_]+)(['\"])?\\s*:/g, '\"$2\":').replace(/'/g, '\"');\n const options = JSON.parse(jsonString);\n scope = options.scope || scope;\n lang = options.lang || lang;\n } catch (err) {\n console.error('Invalid translation expression options:', err);\n }\n }\n\n tokens.push({ key, scope, lang, fullMatch: legacyMatch[0] });\n }\n\n return tokens;\n }\n}\n","import { inject } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { TranslationParserService } from './translation.parser';\nimport { AXTranslateLang, AXTranslateParams, AXTranslateScope } from './translation.types';\n\n// Helper function to escape special characters for use in a regular expression\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport class TranslationResolverService {\n private loaderService = inject(AXTranslationLoaderService);\n private parser = new TranslationParserService();\n\n async resolve(\n lang: AXTranslateLang,\n scope: AXTranslateScope,\n key: string,\n params?: AXTranslateParams,\n ): Promise<string> {\n let result = this.loaderService.peek(lang, scope, key);\n\n if (result == null) {\n await firstValueFrom(this.loaderService.load(lang, scope));\n result = this.loaderService.peek(lang, scope, key);\n }\n\n if (result == null || typeof result !== 'string') {\n const unresolvedResult = key;\n return this.format(unresolvedResult, params);\n }\n\n // Recursively resolve references\n if (this.parser.isExpression(result)) {\n const tokens = this.parser.parse(result, lang, scope);\n if (tokens.length > 0) {\n const first = tokens[0];\n result = await this.resolve(first.lang || lang, first.scope || scope, first.key, params);\n }\n }\n\n return this.format(result, params);\n }\n\n public format(text: string, params?: AXTranslateParams): string {\n if (!params || typeof text !== 'string' || Object.keys(params).length === 0) {\n return text;\n }\n\n return Object.keys(params).reduce((currentText, paramKey) => {\n // paramKey is the key from the params object, e.g., \"title\" or \" title \"\n const valueToInsert = params[paramKey];\n\n // 1. Trim the key from the params object to handle potential leading/trailing spaces.\n // e.g., if paramKey is \" title \", keyForPattern becomes \"title\".\n const keyForPattern = paramKey.trim();\n\n // If trimming results in an empty string, it's not a valid placeholder to replace.\n if (keyForPattern === '') {\n return currentText;\n }\n\n // 2. Escape the trimmed key to safely use it in a regular expression.\n // This handles cases where the key might contain special regex characters (e.g., \"user.name\", \"item[0]\").\n const escapedKey = escapeRegExp(keyForPattern);\n\n // 3. Construct the RegExp. This will match:\n // - {{KEY}}\n // - {{ KEY }}\n // - {{ KEY }}\n // etc., where KEY is the (trimmed and escaped) paramKey.\n const re = new RegExp(`{{\\\\s*${escapedKey}\\\\s*}}`, 'g');\n\n // 4. Replace occurrences, ensuring the value is a string.\n return currentText.replace(re, String(valueToInsert));\n }, text);\n }\n}\n","export type AXTranslateHashMap<T = unknown> = Record<string, T>;\n\nexport type AXTranslateLang = string;\nexport type AXTranslateScope = string;\nexport type AXTranslateParams<T = unknown> = Record<string, T>;\nexport type AXTranslation = Record<string, string>;\n\nexport interface AXTranslateOptions {\n lang?: AXTranslateLang;\n scope?: AXTranslateScope;\n params?: AXTranslateParams;\n}\n\nexport interface AXParsedToken {\n key: string;\n scope?: AXTranslateScope;\n lang?: AXTranslateLang;\n fullMatch: string;\n}\n\nexport const LOCALE_KEY_REGEX = /^(\\*-\\*|[a-z]{2}-[A-Z]{2})$/;\n\nexport type AXMultiLanguageMap = Record<string, string>;\n\nexport type AXMultiLanguageString = string | AXMultiLanguageMap;\n\nexport function resolveMultiLanguageValue(value: AXMultiLanguageMap, locale: string): string {\n return value[locale] ?? value['en-US'] ?? Object.values(value).find((item) => item != null) ?? '';\n}\n\nexport function isValidMultiLanguageObject(value: unknown): value is AXMultiLanguageMap {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n\n const entries = Object.entries(value);\n if (!entries.length) {\n return false;\n }\n\n return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');\n}\n\n/**\n * Resolves {@link AXMultiLanguageString} to a single string for the given locale.\n * Fallback order: `currentLocale` → `en-US` → first map value.\n */\nexport function resolveMultiLanguageString(\n content: AXMultiLanguageString | null | undefined,\n currentLocale: string,\n): string {\n if (content == null || content === '') {\n return '';\n }\n if (typeof content === 'string') {\n return content;\n }\n if (!isValidMultiLanguageObject(content)) {\n return String(content);\n }\n\n return resolveMultiLanguageValue(content, currentLocale);\n}\n\n/**\n * Creates an {@link AXMultiLanguageMap} with `en-US` and `fa-IR` entries.\n * Use for seed data, tests, and demos that supply English and Persian copy explicitly.\n */\nexport function createMultiLanguageString(enUs: string, faIr: string): AXMultiLanguageMap {\n return { 'en-US': enUs, 'fa-IR': faIr };\n}\n\n/**\n * True when there is no displayable text in any locale (plain string or ML map).\n */\nexport function isEffectivelyEmptyLocalizedValue(value: unknown): boolean {\n if (value == null) return true;\n if (typeof value === 'string') return value.trim() === '';\n if (typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n return Object.values(record).every((v) => v == null || String(v).trim() === '');\n}\n","import { AXEventService, AXSystemEvents } from '@acorex/core/events';\nimport { AXLocaleService } from '@acorex/core/locale';\nimport { waitFor } from '@acorex/core/utils';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, distinctUntilChanged, from, Observable, of, shareReplay, switchMap } from 'rxjs';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { TranslationParserService } from './translation.parser';\nimport { TranslationResolverService } from './translation.resolver';\nimport {\n AXMultiLanguageMap,\n AXTranslateLang,\n AXTranslateOptions,\n isValidMultiLanguageObject,\n LOCALE_KEY_REGEX,\n resolveMultiLanguageValue,\n} from './translation.types';\n\nlet singletonInstance: AXTranslationService;\n\nexport function translateSync(key: string, options?: AXTranslateOptions): string {\n return singletonInstance.translateSync(key, options);\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AXTranslationService {\n private localeService = inject(AXLocaleService);\n private config = inject(AX_TRANSLATION_CONFIG);\n private loader = inject(AXTranslationLoaderService);\n private parser = new TranslationParserService();\n private eventService = inject(AXEventService);\n private resolver = new TranslationResolverService();\n private activeLang = new BehaviorSubject<AXTranslateLang>(this.config.defaults.lang);\n public readonly langChanges$ = this.activeLang.asObservable();\n public readonly currentLocale$ = this.langChanges$.pipe(distinctUntilChanged());\n\n constructor() {\n singletonInstance = this;\n this.localeService.profileChanged$.subscribe((locale) => {\n if (locale?.localeInfo?.code) {\n this.setActiveLang(locale.localeInfo.code);\n this.preloadLocaleTranslations(locale.localeInfo.code, locale.i18nMeta?.fallbackLocales);\n }\n });\n }\n\n private preloadLocaleTranslations(lang: AXTranslateLang, fallbackLocales?: AXTranslateLang[]): void {\n const scope = this.config.defaults.scope;\n this.loader.load(lang, scope).subscribe();\n for (const fallback of fallbackLocales ?? this.loader.getFallbackLangs(lang)) {\n this.loader.load(fallback, scope).subscribe();\n }\n }\n\n private peekTranslation(lang: AXTranslateLang, scope: string, key: string): string | null {\n let translation = this.loader.peek(lang, scope, key);\n if (translation != null) {\n return translation;\n }\n\n for (const fallbackLang of this.loader.getFallbackLangs(lang)) {\n translation = this.loader.peek(fallbackLang, scope, key);\n if (translation != null) {\n return translation;\n }\n }\n\n return null;\n }\n\n public setActiveLang(lang: AXTranslateLang): void {\n if (lang && lang !== this.activeLang.getValue()) {\n this.activeLang.next(lang);\n this.eventService.emitEvent({\n type: AXSystemEvents.AXLanguageChanged,\n payload: lang,\n });\n }\n }\n\n public getActiveLang(): AXTranslateLang {\n return this.activeLang.getValue();\n }\n\n public getDefaultLang(): AXTranslateLang {\n return this.config.defaults.lang;\n }\n\n /**\n * @deprecated Use {@link translateAsync} instead. `translateAsync` now accepts\n * `string | AXMultiLanguageMap | null | undefined` and performs the same\n * multi-language resolution in addition to translation.\n */\n public resolve(value: string | AXMultiLanguageMap | null | undefined, locale?: string): string {\n if (value == null) {\n return '';\n }\n\n if (typeof value === 'string') {\n return value;\n }\n\n if (!isValidMultiLanguageObject(value)) {\n return '';\n }\n\n return resolveMultiLanguageValue(value, locale ?? this.getActiveLang());\n }\n\n public toLocaleMap(\n value: string | AXMultiLanguageMap | null | undefined,\n activeLocale: string = this.getActiveLang(),\n ): AXMultiLanguageMap {\n if (isValidMultiLanguageObject(value)) {\n return { ...value };\n }\n\n return {\n [activeLocale]: typeof value === 'string' ? value : '',\n };\n }\n\n public translate$(\n value: string | AXMultiLanguageMap | null | undefined,\n options?: AXTranslateOptions,\n ): Observable<string> {\n if (isValidMultiLanguageObject(value)) {\n return this.langChanges$.pipe(\n switchMap((activeLang) => {\n const targetLang = options?.lang ?? activeLang;\n const selectedValue = resolveMultiLanguageValue(value, targetLang);\n const scope = options?.scope ?? this.config.defaults.scope;\n\n return from(\n this.translateAsync(selectedValue, {\n ...options,\n lang: targetLang,\n scope,\n }),\n );\n }),\n );\n }\n return this.translateValue$(value, options);\n }\n\n async translateAsync(\n text: string | AXMultiLanguageMap | null | undefined,\n options?: AXTranslateOptions,\n ): Promise<string> {\n if (text == null) {\n return '';\n }\n\n const { lang, scope } = this.resolveContext(options);\n const params = options?.params;\n\n let resolvedText: string;\n if (typeof text === 'string') {\n resolvedText = text;\n } else if (isValidMultiLanguageObject(text)) {\n resolvedText = resolveMultiLanguageValue(text, lang);\n } else {\n return '';\n }\n\n if (!this.parser.isExpression(resolvedText)) {\n return this.resolver.resolve(lang, scope, resolvedText, params);\n }\n\n const tokens = this.parser.parse(resolvedText, lang, scope);\n\n const results = await Promise.all(\n tokens.map((token) =>\n this.resolver\n .resolve(token.lang ?? lang, token.scope ?? scope, token.key, params)\n .then((translated) => [token.fullMatch, translated]),\n ),\n );\n\n return results.reduce((output, [match, translated]) => output.replace(match, translated), resolvedText);\n }\n\n public translateSync(\n text: string,\n options?: AXTranslateOptions & { waitForLoad?: boolean; timeoutMs?: number },\n ): string {\n const { lang, scope } = this.resolveContext(options);\n const params = options?.params;\n const waitForLoad = options?.waitForLoad ?? false;\n const timeoutMs = options?.timeoutMs ?? 100;\n\n if (!this.parser.isExpression(text)) {\n let translated = this.peekTranslation(lang, scope, text);\n\n if (!translated && waitForLoad) {\n translated = waitFor(\n () => this.peekTranslation(lang, scope, text),\n () => this.loader.load(lang, scope).subscribe(),\n timeoutMs,\n );\n }\n\n return this.resolver.format(translated ?? text, params);\n }\n\n const tokens = this.parser.parse(text, lang, scope);\n let result = text;\n\n for (const token of tokens) {\n const targetLang = token.lang ?? lang;\n const targetScope = token.scope ?? scope;\n const key = token.key;\n\n let translation = this.peekTranslation(targetLang, targetScope, key);\n\n if (!translation) {\n translation =\n waitFor(\n () => this.peekTranslation(targetLang, targetScope, key),\n () => this.loader.load(targetLang, targetScope).subscribe(),\n waitForLoad ? timeoutMs : 0,\n ) ?? key;\n }\n\n result = result.replace(token.fullMatch, this.resolver.format(translation, params));\n }\n\n return result;\n }\n\n private translateValue$(text: string, options?: AXTranslateOptions): Observable<string> {\n if (!text) {\n return of('');\n }\n\n const staticOptions = { ...options };\n const staticScope = staticOptions.scope ?? this.config.defaults.scope;\n\n return this.langChanges$.pipe(\n switchMap((lang) => {\n return from(\n this.translateAsync(text, {\n ...staticOptions,\n lang: staticOptions.lang ?? lang,\n scope: staticScope,\n }),\n );\n }),\n shareReplay({ bufferSize: 1, refCount: true }),\n );\n }\n\n private resolveContext(options?: AXTranslateOptions): { lang: AXTranslateLang; scope: string } {\n return {\n lang: options?.lang ?? this.getActiveLang() ?? this.config.defaults.lang,\n scope: options?.scope ?? this.config.defaults.scope,\n };\n }\n\n public isValidMultiLanguageObject(value: unknown): value is AXMultiLanguageMap {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return false;\n }\n\n const entries = Object.entries(value);\n if (!entries.length) {\n return false;\n }\n\n return entries.every(([key, entryValue]) => LOCALE_KEY_REGEX.test(key) && typeof entryValue === 'string');\n }\n}\n","import { Signal, inject } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { switchMap } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n/**\n * Creates a signal that mirrors a string source signal, translating its value whenever\n * the source or active language changes.\n */\nexport function toTranslatedSignal(\n source: Signal<string | null | undefined>,\n options?: AXTranslateOptions,\n): Signal<string> {\n const translation = inject(AXTranslationService);\n const staticOptions = options ? { ...options } : undefined;\n\n return toSignal(\n toObservable(source).pipe(\n switchMap((value) => translation.translate$(value ?? '', staticOptions)),\n ),\n { initialValue: '' },\n );\n}\n","import { inject } from '@angular/core';\nimport { ResolveFn } from '@angular/router';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AX_TRANSLATION_CONFIG } from './translation.config';\nimport { AXTranslationService } from './translation.service';\n\nexport const loadTranslationScope: ResolveFn<unknown> = (route, state) => {\n const translationLoaderService = inject(AXTranslationLoaderService);\n const translationService = inject(AXTranslationService);\n const config = inject(AX_TRANSLATION_CONFIG);\n const scopeValue = route.data[config.resolver?.scopeKey];\n const scopes = Array.isArray(scopeValue) ? scopeValue : [scopeValue];\n return translationLoaderService.preload({ langs: [translationService.getActiveLang()], scopes });\n};\n","import { Directive, OnInit, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { Observable, shareReplay } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n@Directive({ selector: '[translate]' })\nexport class AXTranslatorDirective implements OnInit {\n private templateRef = inject<TemplateRef<any>>(TemplateRef);\n private vc = inject(ViewContainerRef);\n private translationService = inject(AXTranslationService);\n\n ngOnInit() {\n const cache = new Map<string, Observable<string>>();\n\n const t = (key: string, opts?: AXTranslateOptions) => {\n const id = `${key}|${opts?.lang ?? this.translationService.getActiveLang()}|${opts?.scope ?? 'common'}`;\n if (!cache.has(id)) {\n cache.set(\n id,\n this.translationService.translate$(key, opts).pipe(shareReplay({ bufferSize: 1, refCount: true })),\n );\n }\n return cache.get(id)!;\n };\n\n this.vc.clear();\n this.vc.createEmbeddedView(this.templateRef, { $implicit: t });\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { AXTranslationService } from './translation.service';\nimport { AXTranslateOptions } from './translation.types';\n\n@Pipe({\n name: 'translate',\n pure: true,\n}) // The pipe can now be pure\nexport class AXTranslatorPipe implements PipeTransform {\n private service = inject(AXTranslationService);\n\n transform(\n value: string | Record<string, string> | null | undefined,\n options?: AXTranslateOptions,\n ): Observable<string> {\n if (!value) {\n return of('');\n }\n return this.service.translate$(value, options);\n }\n}\n","import { NgModule, inject, provideAppInitializer } from '@angular/core';\nimport { AXTranslationLoaderService } from './translation-loader.service';\nimport { AXTranslatorDirective } from './translator.directive';\nimport { AXTranslatorPipe } from './translator.pipe';\n\nfunction initializeApp(translatorService: AXTranslationLoaderService) {\n return (): Promise<void> => {\n return translatorService.preload();\n };\n}\n\n@NgModule({\n imports: [AXTranslatorPipe, AXTranslatorDirective],\n exports: [AXTranslatorPipe, AXTranslatorDirective],\n providers: [\n provideAppInitializer(() => {\n const initializerFn = initializeApp(inject(AXTranslationLoaderService));\n return initializerFn();\n }),\n ],\n})\nexport class AXTranslationModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}