@acorex-platform/framework-client 0.0.38 → 0.0.46

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 (103) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +212 -44
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs → acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs} +31 -1
  4. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +824 -72
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +212 -94
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs +292 -11
  10. package/fesm2022/acorex-platform-framework-client-layout-builder.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs → acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs} +10 -6
  12. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-BqPaHKPM.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs +66 -0
  14. package/fesm2022/acorex-platform-framework-client-layout-components-property-viewer-inline-code-editor.component-CcpUTEVQ.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs +195 -0
  16. package/fesm2022/acorex-platform-framework-client-layout-components-resource-appointment-board.component-DCkpgsFH.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +3987 -1020
  18. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs +1179 -304
  20. package/fesm2022/acorex-platform-framework-client-layout-designer.mjs.map +1 -1
  21. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CvaOWbJx.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs} +1619 -246
  22. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-Dc_NpBx6.mjs.map +1 -0
  23. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-Ds63Rt2n.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs} +2 -2
  24. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-Ds63Rt2n.mjs.map → acorex-platform-framework-client-layout-entity-attachments-page.component-Cx-n7ZuA.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-C0pohwdo.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs} +2 -2
  26. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-C0pohwdo.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-BONV249y.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-o2HuZrDN.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs} +2 -2
  28. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-o2HuZrDN.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-uTG2nFly.mjs.map} +1 -1
  29. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  30. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +3 -3
  31. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +3854 -3278
  33. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs +33191 -0
  35. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-CDpzvn6z.mjs.map +1 -0
  36. package/fesm2022/{acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs → acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs} +8 -5
  37. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BkrPu1wO.mjs.map +1 -0
  38. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs +45 -0
  39. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-value.util-Cb7R1qLO.mjs.map +1 -0
  40. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs +68 -0
  41. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-column.component-BL621E1r.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs +88 -0
  43. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-edit.component-CVsPKhNl.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs +71 -0
  45. package/fesm2022/acorex-platform-framework-client-layout-widgets-code-editor-widget-view.component-BEq4O4al.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs +81 -0
  47. package/fesm2022/acorex-platform-framework-client-layout-widgets-condition-builder-edit-popup.component-WpiEHusZ.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs → acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs} +41 -23
  49. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-Cadl6guA.mjs.map +1 -0
  50. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs} +3 -3
  51. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-4mX8aYzA.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-Cw3NhWL8.mjs.map} +1 -1
  52. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs +71 -0
  53. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-column.component-Clb27Loe.mjs.map +1 -0
  54. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs +111 -0
  55. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-edit.component-l7q8A-D3.mjs.map +1 -0
  56. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs +77 -0
  57. package/fesm2022/acorex-platform-framework-client-layout-widgets-scheduler-picker-widget-view.component-Cc1AH09b.mjs.map +1 -0
  58. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs} +3 -3
  59. package/fesm2022/{acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-TWxthl21.mjs.map → acorex-platform-framework-client-layout-widgets-tabular-data-edit-popup.component-BCLxS3rS.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs} +21 -8
  61. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-BEa-vD6O.mjs.map +1 -0
  62. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs +124 -0
  63. package/fesm2022/acorex-platform-framework-client-layout-widgets-trigger-expression-editor-popup.component-C2PGoC7r.mjs.map +1 -0
  64. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs +345 -0
  65. package/fesm2022/acorex-platform-framework-client-layout-widgets-triggers-widget-editor.component-DDDoPoQa.mjs.map +1 -0
  66. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -31985
  67. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs.map +1 -1
  68. package/fesm2022/acorex-platform-framework-client-realtime.mjs +2 -1
  69. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  70. package/fesm2022/acorex-platform-framework-client-runtime.mjs +2 -2
  71. package/fesm2022/acorex-platform-framework-client-runtime.mjs.map +1 -1
  72. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs} +2 -2
  73. package/fesm2022/{acorex-platform-framework-client-themes-default-entity-master-single-view.component-DBUwSzvg.mjs.map → acorex-platform-framework-client-themes-default-entity-master-single-view.component-CHLsBvBE.mjs.map} +1 -1
  74. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +373 -70
  75. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  76. package/fesm2022/{acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs → acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs} +102 -1
  77. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs.map +1 -0
  78. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +174 -22
  79. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  80. package/package.json +2 -2
  81. package/realtime/README.md +1 -1
  82. package/types/acorex-platform-framework-client-auth.d.ts +18 -1
  83. package/types/acorex-platform-framework-client-common.d.ts +204 -8
  84. package/types/acorex-platform-framework-client-core.d.ts +149 -114
  85. package/types/acorex-platform-framework-client-layout-builder.d.ts +29 -0
  86. package/types/acorex-platform-framework-client-layout-components.d.ts +699 -146
  87. package/types/acorex-platform-framework-client-layout-designer.d.ts +192 -14
  88. package/types/acorex-platform-framework-client-layout-entity.d.ts +155 -91
  89. package/types/acorex-platform-framework-client-layout-views.d.ts +16 -0
  90. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +140 -37
  91. package/types/acorex-platform-framework-client-layout-widgets.d.ts +235 -117
  92. package/types/acorex-platform-framework-client-realtime.d.ts +16 -3
  93. package/types/acorex-platform-framework-client-themes-default.d.ts +62 -11
  94. package/types/acorex-platform-framework-client-themes-shared.d.ts +25 -2
  95. package/fesm2022/acorex-platform-framework-client-common-common-settings.provider-CzBr0cRi.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-framework-client-layout-components-binding-expression-editor-popup.component-Bp2cNCPO.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs +0 -77
  98. package/fesm2022/acorex-platform-framework-client-layout-components-file-provider-picker.popup.component-BtLEUWAA.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-CvaOWbJx.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-framework-client-layout-widgets-button-widget-designer.component-BDOdcoyN.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-framework-client-layout-widgets-page-widget-designer.component-WzIiwnGC.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-D6HFPmGC.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs.map +0 -1
@@ -1,3 +1,5 @@
1
+ import * as i1$3 from '@acorex-platform/framework-client/core';
2
+ import { AXPScreenSize, AXPDeviceService, AXPDebugService, OVERLAY_LAYOUT_TRACE_NS, AXP_APP_STARTUP_PRIORITY, AXPComponentSlotModule, AXP_LOGO_THEME_RESOLVER } from '@acorex-platform/framework-client/core';
1
3
  import * as i2 from '@acorex/components/button';
2
4
  import { AXButtonModule } from '@acorex/components/button';
3
5
  import * as i3 from '@acorex/components/decorators';
@@ -9,9 +11,7 @@ import { CommonModule } from '@angular/common';
9
11
  import * as i0 from '@angular/core';
10
12
  import { Injectable, computed, inject, Injector, effect, ChangeDetectionStrategy, Component, InjectionToken, Input, signal, input, ElementRef, Directive, DestroyRef, NgModule } from '@angular/core';
11
13
  import { primaryLanguageSubtag, resolveEffectiveAvailableLanguageCodes, AXPSettingsService, AXP_LOCALE_MANAGEMENT_PORT, AXPPlatformSettingsLoadState, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex-platform/framework-client/common';
12
- import { AXPRegionalSetting, AXPPlatformScope } from '@acorex-platform/framework-shared/core';
13
- import * as i1$3 from '@acorex-platform/framework-client/core';
14
- import { AXPScreenSize, AXPDeviceService, AXPDebugService, OVERLAY_LAYOUT_TRACE_NS, AXP_APP_STARTUP_PRIORITY, AXPComponentSlotModule, AXP_LOGO_THEME_RESOLVER } from '@acorex-platform/framework-client/core';
14
+ import { coerceUnknownToBoolean, AXPRegionalSetting, AXPPlatformScope } from '@acorex-platform/framework-shared/core';
15
15
  import { HttpClient } from '@angular/common/http';
16
16
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
17
17
  import { timer, firstValueFrom, timeout, filter } from 'rxjs';
@@ -47,7 +47,11 @@ var AXPThemeLayoutSetting;
47
47
  AXPThemeLayoutSetting["SideMenuCompactWidth"] = "Common:Setting:Layout.SideMenu.CompactWidth";
48
48
  AXPThemeLayoutSetting["MenuOrientation"] = "Common:Setting:Layout.RootMenu.Direction";
49
49
  AXPThemeLayoutSetting["MenuVerticalMode"] = "Common:Setting:Layout.RootMenu.VerticalMode";
50
+ AXPThemeLayoutSetting["MenuToggleCyclesStyle"] = "Common:Setting:Layout.RootMenu.ToggleCyclesStyle";
50
51
  AXPThemeLayoutSetting["MenuBadgeVisible"] = "Common:Setting:Layout.RootMenu.Badge";
52
+ AXPThemeLayoutSetting["MenuLookWithLine"] = "Common:Setting:Layout.RootMenu.LookWithLine";
53
+ AXPThemeLayoutSetting["MenuChildBackgroundDarker"] = "Common:Setting:Layout.RootMenu.ChildBackgroundDarker";
54
+ AXPThemeLayoutSetting["MenuDensity"] = "Common:Setting:Layout.RootMenu.Density";
51
55
  AXPThemeLayoutSetting["MenuDark"] = "Common:Setting:Layout.RootMenu.Dark";
52
56
  AXPThemeLayoutSetting["MenuFooterFullWidth"] = "Common:Setting:Layout.RootMenu.Footer.FullWidth";
53
57
  AXPThemeLayoutSetting["HeaderAppearance"] = "Common:Setting:Layout.Header.Appearance";
@@ -66,6 +70,24 @@ var AXPSideMenuState;
66
70
  AXPSideMenuState["Opened"] = "opened";
67
71
  AXPSideMenuState["Closed"] = "closed";
68
72
  })(AXPSideMenuState || (AXPSideMenuState = {}));
73
+ function normalizeSideMenuState(value, fallback) {
74
+ if (value === AXPSideMenuState.Opened || value === AXPSideMenuState.Closed) {
75
+ return value;
76
+ }
77
+ if (typeof value === 'string') {
78
+ const normalized = value.trim().toLowerCase();
79
+ if (normalized === 'opened' || normalized === 'open') {
80
+ return AXPSideMenuState.Opened;
81
+ }
82
+ if (normalized === 'closed' || normalized === 'close') {
83
+ return AXPSideMenuState.Closed;
84
+ }
85
+ }
86
+ if (typeof value === 'object' && value !== null && 'id' in value) {
87
+ return normalizeSideMenuState(value.id, fallback);
88
+ }
89
+ return fallback;
90
+ }
69
91
  // Menu Orientation Enum
70
92
  var AXPMenuOrientation;
71
93
  (function (AXPMenuOrientation) {
@@ -103,6 +125,51 @@ function normalizeHeaderAppearance(value, fallback = 'brand') {
103
125
  return fallback;
104
126
  }
105
127
 
128
+ //#region ----- Theme boot cache (first paint) -----
129
+ /** localStorage key for last applied layout mode (`light` | `dark` | `system`). */
130
+ const AXP_THEME_BOOT_MODE_KEY = 'axp-boot-theme-mode';
131
+ /** localStorage key for last applied palette name. */
132
+ const AXP_THEME_BOOT_PALETTE_KEY = 'axp-boot-theme-palette';
133
+ function coerceThemeMode(value, fallback) {
134
+ if (value === AXPThemeMode.Light || value === AXPThemeMode.Dark || value === AXPThemeMode.System) {
135
+ return value;
136
+ }
137
+ if (typeof value === 'object' && value !== null && 'id' in value) {
138
+ return coerceThemeMode(value.id, fallback);
139
+ }
140
+ return fallback;
141
+ }
142
+ function readBootThemeMode() {
143
+ try {
144
+ return coerceThemeMode(localStorage.getItem(AXP_THEME_BOOT_MODE_KEY), AXPThemeMode.Light);
145
+ }
146
+ catch {
147
+ return AXPThemeMode.Light;
148
+ }
149
+ }
150
+ function readBootThemePalette() {
151
+ try {
152
+ const name = localStorage.getItem(AXP_THEME_BOOT_PALETTE_KEY)?.trim();
153
+ return name && name.length > 0 ? name : 'default';
154
+ }
155
+ catch {
156
+ return 'default';
157
+ }
158
+ }
159
+ function persistThemeBootCache(mode, palette) {
160
+ try {
161
+ localStorage.setItem(AXP_THEME_BOOT_MODE_KEY, mode);
162
+ const name = palette.trim();
163
+ if (name.length > 0) {
164
+ localStorage.setItem(AXP_THEME_BOOT_PALETTE_KEY, name);
165
+ }
166
+ }
167
+ catch {
168
+ /* private mode / quota */
169
+ }
170
+ }
171
+ //#endregion
172
+
106
173
  //#endregion
107
174
  //#region ----- Constants -----
108
175
  const FONT_FALLBACK = 'Tahoma, system-ui, sans-serif';
@@ -414,8 +481,8 @@ withState(() => {
414
481
  return AXPScreenSize.Large;
415
482
  };
416
483
  const state = {
417
- currentMode: AXPThemeMode.System,
418
- currentPalette: 'default',
484
+ currentMode: readBootThemeMode(),
485
+ currentPalette: readBootThemePalette(),
419
486
  systemThemeMode: (isSystemDark ? AXPThemeMode.Dark : AXPThemeMode.Light),
420
487
  font: {
421
488
  family: 'system-ui',
@@ -433,8 +500,9 @@ withState(() => {
433
500
  sideMenuWidth: AXP_SIDE_MENU_FULL_DEFAULT_WIDTH,
434
501
  sideMenuCompactWidth: AXP_SIDE_MENU_COMPACT_WIDTH,
435
502
  menuVerticalMode: AXPMenuVerticalMode.Full,
503
+ menuToggleCyclesStyle: false,
436
504
  menuOrientation: 'vertical',
437
- menuAppearance: 'dark',
505
+ menuAppearance: 'light',
438
506
  headerAppearance: 'brand',
439
507
  mainFooterFullWidth: false,
440
508
  _listener: null,
@@ -443,7 +511,7 @@ withState(() => {
443
511
  return state;
444
512
  }),
445
513
  // Computed Signals
446
- withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMenuState, overlaySideMenuOpen, overlayLoading, navigationLoading, overlayLoadingTaskCount, menuOrientation, menuVerticalMode, menuAppearance, headerAppearance, mainFooterFullWidth, sideMenuWidth, sideMenuCompactWidth, isPrinting, }, deviceService = inject(AXPDeviceService)) => {
514
+ withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMenuState, overlaySideMenuOpen, overlayLoading, navigationLoading, overlayLoadingTaskCount, menuOrientation, menuVerticalMode, menuAppearance, headerAppearance, mainFooterFullWidth, sideMenuWidth, sideMenuCompactWidth, isPrinting, menuToggleCyclesStyle, }, deviceService = inject(AXPDeviceService)) => {
447
515
  const effectiveMenuVerticalMode = computed(() => {
448
516
  if (!deviceService.isLarge()) {
449
517
  return AXPMenuVerticalMode.Full;
@@ -469,6 +537,7 @@ withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMen
469
537
  overlayTaskCount: computed(() => overlayLoadingTaskCount()),
470
538
  isNavigationLoading: computed(() => navigationLoading()),
471
539
  isMenuHorizontal: computed(() => menuOrientation() === AXPMenuOrientation.Horizontal),
540
+ menuToggleCyclesStyleEnabled: computed(() => coerceUnknownToBoolean(menuToggleCyclesStyle())),
472
541
  effectiveMenuVerticalMode,
473
542
  sideMenuDrawerWidth: computed(() => effectiveMenuVerticalMode() === AXPMenuVerticalMode.Compact ? sideMenuCompactWidth() : sideMenuWidth()),
474
543
  menuDarkEnabled: computed(() => {
@@ -490,13 +559,15 @@ withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMen
490
559
  withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSettingsService), deviceService = inject(AXPDeviceService), injector = inject(Injector)) => {
491
560
  const _applySettings = async () => {
492
561
  // Initialize theme and side menu setting from storage
493
- const settingThemeMode = (await settingsService.get(AXPThemeLayoutSetting.Mode)) ?? AXPThemeMode.Light;
562
+ const settingThemeMode = coerceThemeMode(await settingsService.get(AXPThemeLayoutSetting.Mode), AXPThemeMode.Light);
494
563
  patchState(store, { currentMode: settingThemeMode });
495
- //
496
- const settingThemePallete = (await settingsService.get(AXPThemeLayoutSetting.Palette)) ?? 'default';
564
+ const settingThemePaletteRaw = await settingsService.get(AXPThemeLayoutSetting.Palette);
565
+ const settingThemePallete = typeof settingThemePaletteRaw === 'string' && settingThemePaletteRaw.trim().length > 0
566
+ ? settingThemePaletteRaw.trim()
567
+ : 'default';
497
568
  patchState(store, { currentPalette: settingThemePallete });
498
569
  //
499
- const settingSideMenu = (await settingsService.get(AXPThemeLayoutSetting.SideMenuStatus)) ?? store.sideMenuState();
570
+ const settingSideMenu = normalizeSideMenuState(await settingsService.get(AXPThemeLayoutSetting.SideMenuStatus), store.sideMenuState());
500
571
  patchState(store, { sideMenuState: settingSideMenu });
501
572
  //
502
573
  const settingMenuOrientation = (await settingsService.get(AXPThemeLayoutSetting.MenuOrientation)) ??
@@ -506,6 +577,15 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
506
577
  const settingMenuVerticalMode = normalizeMenuVerticalMode(await settingsService.get(AXPThemeLayoutSetting.MenuVerticalMode), store.menuVerticalMode());
507
578
  patchState(store, { menuVerticalMode: settingMenuVerticalMode });
508
579
  //
580
+ let menuToggleCyclesStyle = false;
581
+ try {
582
+ menuToggleCyclesStyle = coerceUnknownToBoolean(await settingsService.get(AXPThemeLayoutSetting.MenuToggleCyclesStyle));
583
+ }
584
+ catch {
585
+ menuToggleCyclesStyle = false;
586
+ }
587
+ patchState(store, { menuToggleCyclesStyle });
588
+ //
509
589
  let rawMenuAppearance;
510
590
  try {
511
591
  rawMenuAppearance = await settingsService.get(AXPThemeLayoutSetting.MenuDark);
@@ -557,7 +637,10 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
557
637
  const _updateHtmlClass = async () => {
558
638
  const html = document.getElementsByTagName('html')[0];
559
639
  //
560
- store.isDarkMode() ? html.classList.add('ax-dark') : html.classList.remove('ax-dark');
640
+ const isDark = store.isDarkMode();
641
+ html.classList.toggle('ax-dark', isDark);
642
+ html.style.colorScheme = isDark ? 'dark' : 'light';
643
+ persistThemeBootCache(store.currentMode(), store.currentPalette());
561
644
  //
562
645
  html.style.fontFamily = resolveFontCssFamily(store.font().family);
563
646
  const fontVariation = resolveFontVariationSettings(store.font().family);
@@ -682,6 +765,11 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
682
765
  patchState(store, { sideMenuState });
683
766
  settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuStatus, sideMenuState);
684
767
  };
768
+ const setMenuVerticalMode = (mode) => {
769
+ const next = normalizeMenuVerticalMode(mode, store.menuVerticalMode());
770
+ patchState(store, { menuVerticalMode: next });
771
+ settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.MenuVerticalMode, next);
772
+ };
685
773
  return {
686
774
  // Change theme and update HTML class
687
775
  changeThemeMode(theme) {
@@ -718,8 +806,26 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
718
806
  settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuWidth, width);
719
807
  }
720
808
  },
721
- // Toggle side menu state
809
+ // Persist vertical rail mode (full labels vs compact icons)
810
+ setMenuVerticalMode,
811
+ // Large screens with the setting on: cycle full ↔ compact without hiding.
812
+ // Otherwise: hide/show the drawer (overlay on smaller screens).
722
813
  toggleSideMenu() {
814
+ if (!deviceService.isLarge()) {
815
+ setSideMenuOpen(!store.isSideMenuOpen());
816
+ return;
817
+ }
818
+ if (store.menuToggleCyclesStyleEnabled()) {
819
+ if (!store.isSideMenuOpen()) {
820
+ setSideMenuOpen(true);
821
+ return;
822
+ }
823
+ const current = normalizeMenuVerticalMode(store.menuVerticalMode(), AXPMenuVerticalMode.Full);
824
+ setMenuVerticalMode(current === AXPMenuVerticalMode.Compact
825
+ ? AXPMenuVerticalMode.Full
826
+ : AXPMenuVerticalMode.Compact);
827
+ return;
828
+ }
723
829
  setSideMenuOpen(!store.isSideMenuOpen());
724
830
  },
725
831
  // Set navigation loading state with a task counter
@@ -759,6 +865,7 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
759
865
  // Lifecycle Hooks
760
866
  withHooks((store, settingsService = inject(AXPSettingsService), deviceService = inject(AXPDeviceService)) => ({
761
867
  onInit() {
868
+ void store['_internal_updateHtmlClass']();
762
869
  effect(() => {
763
870
  if (!deviceService.isLarge()) {
764
871
  patchState(store, { overlaySideMenuOpen: false });
@@ -782,6 +889,11 @@ withHooks((store, settingsService = inject(AXPSettingsService), deviceService =
782
889
  menuVerticalMode: normalizeMenuVerticalMode(changes.values[AXPThemeLayoutSetting.MenuVerticalMode], store.menuVerticalMode()),
783
890
  });
784
891
  }
892
+ if (changes.keys.includes(AXPThemeLayoutSetting.MenuToggleCyclesStyle)) {
893
+ patchState(store, {
894
+ menuToggleCyclesStyle: coerceUnknownToBoolean(changes.values[AXPThemeLayoutSetting.MenuToggleCyclesStyle]),
895
+ });
896
+ }
785
897
  if (changes.keys.includes(AXPThemeLayoutSetting.MenuDark)) {
786
898
  const rawMenuAppearance = changes.values[AXPThemeLayoutSetting.MenuDark];
787
899
  patchState(store, {
@@ -799,11 +911,32 @@ withHooks((store, settingsService = inject(AXPSettingsService), deviceService =
799
911
  mainFooterFullWidth: changes.values[AXPThemeLayoutSetting.MenuFooterFullWidth] ?? false,
800
912
  });
801
913
  }
914
+ if (changes.keys.includes(AXPThemeLayoutSetting.SideMenuStatus)) {
915
+ patchState(store, {
916
+ sideMenuState: normalizeSideMenuState(changes.values[AXPThemeLayoutSetting.SideMenuStatus], store.sideMenuState()),
917
+ });
918
+ }
919
+ if (changes.keys.includes(AXPThemeLayoutSetting.SideMenuWidth)) {
920
+ const width = changes.values[AXPThemeLayoutSetting.SideMenuWidth];
921
+ if (typeof width === 'number' && Number.isFinite(width)) {
922
+ patchState(store, { sideMenuWidth: width });
923
+ }
924
+ }
925
+ if (changes.keys.includes(AXPThemeLayoutSetting.SideMenuCompactWidth)) {
926
+ const width = changes.values[AXPThemeLayoutSetting.SideMenuCompactWidth];
927
+ if (typeof width === 'number' && Number.isFinite(width)) {
928
+ patchState(store, { sideMenuCompactWidth: width });
929
+ }
930
+ }
802
931
  const shouldReloadSettings = changes.keys.some((key) => keys.includes(key) &&
803
932
  key !== AXPThemeLayoutSetting.MenuVerticalMode &&
933
+ key !== AXPThemeLayoutSetting.MenuToggleCyclesStyle &&
804
934
  key !== AXPThemeLayoutSetting.MenuDark &&
805
935
  key !== AXPThemeLayoutSetting.HeaderAppearance &&
806
- key !== AXPThemeLayoutSetting.MenuFooterFullWidth);
936
+ key !== AXPThemeLayoutSetting.MenuFooterFullWidth &&
937
+ key !== AXPThemeLayoutSetting.SideMenuStatus &&
938
+ key !== AXPThemeLayoutSetting.SideMenuWidth &&
939
+ key !== AXPThemeLayoutSetting.SideMenuCompactWidth);
807
940
  if (shouldReloadSettings) {
808
941
  await store['loadSettings']();
809
942
  }
@@ -836,10 +969,12 @@ withHooks((store, settingsService = inject(AXPSettingsService), deviceService =
836
969
  class AXPThemeSlotComponent {
837
970
  constructor() {
838
971
  this.store = inject(AXPLayoutThemeService);
972
+ this.deviceService = inject(AXPDeviceService);
839
973
  this.variants = AXPThemeMode;
840
974
  }
841
975
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
842
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
976
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
977
+ @if (!deviceService.isSmall()) {
843
978
  <ax-button [iconOnly]="true" [color]="store.headerButtonColor()" [look]="store.headerButtonLook()">
844
979
  <ax-icon>
845
980
  <i
@@ -883,12 +1018,14 @@ class AXPThemeSlotComponent {
883
1018
  </ax-button-item-list>
884
1019
  </ax-dropdown-panel>
885
1020
  </ax-button>
1021
+ }
886
1022
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i2$1.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
887
1023
  }
888
1024
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
889
1025
  type: Component,
890
1026
  args: [{
891
1027
  template: `
1028
+ @if (!deviceService.isSmall()) {
892
1029
  <ax-button [iconOnly]="true" [color]="store.headerButtonColor()" [look]="store.headerButtonLook()">
893
1030
  <ax-icon>
894
1031
  <i
@@ -932,6 +1069,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
932
1069
  </ax-button-item-list>
933
1070
  </ax-dropdown-panel>
934
1071
  </ax-button>
1072
+ }
935
1073
  `,
936
1074
  imports: [
937
1075
  CommonModule,
@@ -2077,11 +2215,11 @@ class AXPFontStyleChooserPopupComponent extends AXBasePageComponent {
2077
2215
  this.close({ fontId: font.id });
2078
2216
  }
2079
2217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFontStyleChooserPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2080
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFontStyleChooserPopupComponent, isStandalone: true, selector: "ng-component", inputs: { fonts: "fonts", selectedFontId: "selectedFontId" }, usesInheritance: true, ngImport: i0, template: "<div class=\"axp-font-style-chooser-popup flex h-full flex-col bg-lightest\">\n <!-- ----- Scrollable font list filtered by regional language settings ----- -->\n <div class=\"flex-1 overflow-y-auto p-2\">\n <div class=\"flex flex-col gap-1\">\n @for (font of fonts; track font.id) {\n <button\n type=\"button\"\n class=\"axp-font-style-chooser-popup__item\"\n [class.--selected]=\"font.id === selectedFontId\"\n [axpFontStyleLazyLoad]=\"font.id\"\n (click)=\"selectFont(font)\"\n >\n <div class=\"axp-font-style-option\">\n <span\n class=\"axp-font-style-option__sample\"\n [style.font-family]=\"font.cssFamily\"\n [style.font-variation-settings]=\"fontVariation(font.id)\"\n >\n {{ font.title }}\n </span>\n </div>\n </button>\n }\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;width:100%}.axp-font-style-chooser__input{width:100%;cursor:pointer}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXPFontStyleLazyLoadDirective, selector: "[axpFontStyleLazyLoad]", inputs: ["axpFontStyleLazyLoad"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2218
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPFontStyleChooserPopupComponent, isStandalone: true, selector: "ng-component", inputs: { fonts: "fonts", selectedFontId: "selectedFontId" }, usesInheritance: true, ngImport: i0, template: "<div class=\"axp-font-style-chooser-popup flex h-full flex-col bg-lightest\">\n <!-- ----- Scrollable font list filtered by regional language settings ----- -->\n <div class=\"flex-1 overflow-y-auto p-2\">\n <div class=\"flex flex-col gap-1\">\n @for (font of fonts; track font.id) {\n <button\n type=\"button\"\n class=\"axp-font-style-chooser-popup__item\"\n [class.--selected]=\"font.id === selectedFontId\"\n [axpFontStyleLazyLoad]=\"font.id\"\n (click)=\"selectFont(font)\"\n >\n <div class=\"axp-font-style-option\">\n <span\n class=\"axp-font-style-option__sample\"\n [style.font-family]=\"font.cssFamily\"\n [style.font-variation-settings]=\"fontVariation(font.id)\"\n >\n {{ font.title }}\n </span>\n </div>\n </button>\n }\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .axp-font-style-chooser__input{width:100%;cursor:pointer;border-width:1px;border-style:solid;border-color:var(--color-border-default)}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: AXPFontStyleLazyLoadDirective, selector: "[axpFontStyleLazyLoad]", inputs: ["axpFontStyleLazyLoad"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2081
2219
  }
2082
2220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFontStyleChooserPopupComponent, decorators: [{
2083
2221
  type: Component,
2084
- args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPFontStyleLazyLoadDirective], template: "<div class=\"axp-font-style-chooser-popup flex h-full flex-col bg-lightest\">\n <!-- ----- Scrollable font list filtered by regional language settings ----- -->\n <div class=\"flex-1 overflow-y-auto p-2\">\n <div class=\"flex flex-col gap-1\">\n @for (font of fonts; track font.id) {\n <button\n type=\"button\"\n class=\"axp-font-style-chooser-popup__item\"\n [class.--selected]=\"font.id === selectedFontId\"\n [axpFontStyleLazyLoad]=\"font.id\"\n (click)=\"selectFont(font)\"\n >\n <div class=\"axp-font-style-option\">\n <span\n class=\"axp-font-style-option__sample\"\n [style.font-family]=\"font.cssFamily\"\n [style.font-variation-settings]=\"fontVariation(font.id)\"\n >\n {{ font.title }}\n </span>\n </div>\n </button>\n }\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;width:100%}.axp-font-style-chooser__input{width:100%;cursor:pointer}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
2222
+ args: [{ standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXPFontStyleLazyLoadDirective], template: "<div class=\"axp-font-style-chooser-popup flex h-full flex-col bg-lightest\">\n <!-- ----- Scrollable font list filtered by regional language settings ----- -->\n <div class=\"flex-1 overflow-y-auto p-2\">\n <div class=\"flex flex-col gap-1\">\n @for (font of fonts; track font.id) {\n <button\n type=\"button\"\n class=\"axp-font-style-chooser-popup__item\"\n [class.--selected]=\"font.id === selectedFontId\"\n [axpFontStyleLazyLoad]=\"font.id\"\n (click)=\"selectFont(font)\"\n >\n <div class=\"axp-font-style-option\">\n <span\n class=\"axp-font-style-option__sample\"\n [style.font-family]=\"font.cssFamily\"\n [style.font-variation-settings]=\"fontVariation(font.id)\"\n >\n {{ font.title }}\n </span>\n </div>\n </button>\n }\n </div>\n </div>\n</div>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .axp-font-style-chooser__input{width:100%;cursor:pointer;border-width:1px;border-style:solid;border-color:var(--color-border-default)}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
2085
2223
  }], propDecorators: { fonts: [{
2086
2224
  type: Input
2087
2225
  }], selectedFontId: [{
@@ -2176,13 +2314,13 @@ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
2176
2314
  }
2177
2315
  }
2178
2316
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2179
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "axp-font-style-chooser block w-full" }, usesInheritance: true, ngImport: i0, template: "<ax-text-box\n class=\"axp-font-style-chooser__input\"\n look=\"fill\"\n [ngModel]=\"selectedFontLabel()\"\n [readonly]=\"true\"\n [disabled]=\"isInteractionDisabled()\"\n [style.font-family]=\"selectedFontFamily()\"\n [style.font-variation-settings]=\"selectedFontVariation()\"\n (click)=\"openPopup()\"\n>\n <ax-suffix>\n <ax-button\n look=\"none\"\n class=\"axp-font-style-chooser__suffix-btn\"\n [disabled]=\"isInteractionDisabled()\"\n >\n <ax-icon icon=\"fa-light fa-up-right-from-square\"></ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-text-box>\n", styles: ["@layer properties;:host{display:block;width:100%}.axp-font-style-chooser__input{width:100%;cursor:pointer}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i3$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "axp-font-style-chooser block w-full" }, usesInheritance: true, ngImport: i0, template: "<ax-text-box\n class=\"axp-font-style-chooser__input\"\n look=\"fill\"\n [ngModel]=\"selectedFontLabel()\"\n [readonly]=\"true\"\n [disabled]=\"isInteractionDisabled()\"\n [style.font-family]=\"selectedFontFamily()\"\n [style.font-variation-settings]=\"selectedFontVariation()\"\n (click)=\"openPopup()\"\n>\n <ax-suffix>\n <ax-button\n look=\"none\"\n class=\"axp-font-style-chooser__suffix-btn\"\n [disabled]=\"isInteractionDisabled()\"\n >\n <ax-icon icon=\"fa-light fa-up-right-from-square\"></ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-text-box>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .axp-font-style-chooser__input{width:100%;cursor:pointer;border-width:1px;border-style:solid;border-color:var(--color-border-default)}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i3$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "maskPattern", "customTokens", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "onMaskChanged"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2180
2318
  }
2181
2319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
2182
2320
  type: Component,
2183
2321
  args: [{ host: {
2184
2322
  class: 'axp-font-style-chooser block w-full',
2185
- }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXTextBoxModule, FormsModule], template: "<ax-text-box\n class=\"axp-font-style-chooser__input\"\n look=\"fill\"\n [ngModel]=\"selectedFontLabel()\"\n [readonly]=\"true\"\n [disabled]=\"isInteractionDisabled()\"\n [style.font-family]=\"selectedFontFamily()\"\n [style.font-variation-settings]=\"selectedFontVariation()\"\n (click)=\"openPopup()\"\n>\n <ax-suffix>\n <ax-button\n look=\"none\"\n class=\"axp-font-style-chooser__suffix-btn\"\n [disabled]=\"isInteractionDisabled()\"\n >\n <ax-icon icon=\"fa-light fa-up-right-from-square\"></ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-text-box>\n", styles: ["@layer properties;:host{display:block;width:100%}.axp-font-style-chooser__input{width:100%;cursor:pointer}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
2323
+ }, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule, AXTextBoxModule, FormsModule], template: "<ax-text-box\n class=\"axp-font-style-chooser__input\"\n look=\"fill\"\n [ngModel]=\"selectedFontLabel()\"\n [readonly]=\"true\"\n [disabled]=\"isInteractionDisabled()\"\n [style.font-family]=\"selectedFontFamily()\"\n [style.font-variation-settings]=\"selectedFontVariation()\"\n (click)=\"openPopup()\"\n>\n <ax-suffix>\n <ax-button\n look=\"none\"\n class=\"axp-font-style-chooser__suffix-btn\"\n [disabled]=\"isInteractionDisabled()\"\n >\n <ax-icon icon=\"fa-light fa-up-right-from-square\"></ax-icon>\n </ax-button>\n </ax-suffix>\n</ax-text-box>\n", styles: ["@layer properties;:host{display:block;width:100%}:host .axp-font-style-chooser__input{width:100%;cursor:pointer;border-width:1px;border-style:solid;border-color:var(--color-border-default)}.axp-font-style-chooser__suffix-btn{pointer-events:none;padding-inline:var(--spacing, .25rem);color:var(--color-neutral-500, oklch(55.6% 0 none))}.axp-font-style-option{display:flex;width:100%;align-items:center;padding-inline:calc(var(--spacing, .25rem) * 2);padding-block:calc(var(--spacing, .25rem) * 2.5)}.axp-font-style-option__sample{width:100%;font-size:var(--text-xl, 1.25rem);line-height:var(--tw-leading, var(--text-xl--line-height, calc(1.75 / 1.25)));--tw-leading: var(--leading-snug, 1.375);line-height:var(--leading-snug, 1.375);--tw-font-weight: var(--font-weight-semibold, 600);font-weight:var(--font-weight-semibold, 600);color:var(--color-neutral-700, oklch(37.1% 0 none))}.axp-font-style-option__sample:where(.ax-dark,.ax-dark *):not(:where(.ax-light,.ax-light *)){color:var(--color-neutral-200, oklch(92.2% 0 none))}.axp-font-style-chooser-popup__item{width:100%;cursor:pointer;border-radius:var(--radius-md, .375rem);border-style:var(--tw-border-style);border-width:1px;border-color:transparent;background-color:transparent;text-align:start;transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease, var(--default-transition-timing-function, cubic-bezier(.4, 0, .2, 1)));transition-duration:var(--tw-duration, var(--default-transition-duration, .15s))}.axp-font-style-chooser-popup__item:hover{background-color:rgb(var(--ax-sys-color-primary-lighter-surface) / .55);border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected{background-color:var(--color-primary-lighter);color:var(--color-on-primary-lighter);border-color:var(--color-border-primary-lighter);border-color:rgb(var(--ax-sys-color-primary-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface))}.axp-font-style-chooser-popup__item.--selected .axp-font-style-option__sample{color:inherit}@property --tw-leading{syntax: \"*\"; inherits: false;}@property --tw-font-weight{syntax: \"*\"; inherits: false;}@property --tw-border-style{syntax: \"*\"; inherits: false; initial-value: solid;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-leading: initial;--tw-font-weight: initial;--tw-border-style: solid}}}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
2186
2324
  }] });
2187
2325
 
2188
2326
  var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
@@ -2241,6 +2379,20 @@ class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
2241
2379
  },
2242
2380
  ];
2243
2381
  }
2382
+ if (chooser === 'density') {
2383
+ return [
2384
+ {
2385
+ id: 'normal',
2386
+ icon: 'fa-light fa-distribute-spacing-vertical',
2387
+ labelKey: '@layout:settings.appearance.items.root-menu.density.options.normal',
2388
+ },
2389
+ {
2390
+ id: 'compact',
2391
+ icon: 'fa-light fa-compress',
2392
+ labelKey: '@layout:settings.appearance.items.root-menu.density.options.compact',
2393
+ },
2394
+ ];
2395
+ }
2244
2396
  return [
2245
2397
  {
2246
2398
  id: 'vertical',
@@ -3029,7 +3181,7 @@ class AXPThemesSharedModule {
3029
3181
  provide: AXP_SETTING_DEFINITION_PROVIDER,
3030
3182
  useFactory: async () => {
3031
3183
  const injector = inject(Injector);
3032
- const provider = (await import('./acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs')).AXPThemeSettingProvider;
3184
+ const provider = (await import('./acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs')).AXPThemeSettingProvider;
3033
3185
  return new provider(injector);
3034
3186
  },
3035
3187
  multi: true,
@@ -3073,7 +3225,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
3073
3225
  provide: AXP_SETTING_DEFINITION_PROVIDER,
3074
3226
  useFactory: async () => {
3075
3227
  const injector = inject(Injector);
3076
- const provider = (await import('./acorex-platform-framework-client-themes-shared-settings.provider-CpsAIsxj.mjs')).AXPThemeSettingProvider;
3228
+ const provider = (await import('./acorex-platform-framework-client-themes-shared-settings.provider-DIkjSTU7.mjs')).AXPThemeSettingProvider;
3077
3229
  return new provider(injector);
3078
3230
  },
3079
3231
  multi: true,
@@ -3087,5 +3239,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
3087
3239
  * Generated bundle index. Do not edit.
3088
3240
  */
3089
3241
 
3090
- export { AXPLayoutThemeService, AXPMenuOrientation, AXPMenuVerticalMode, AXPSideMenuState, AXPThemeLayoutSetting, AXPThemeMode, AXPThemePaletteProviderDefault, AXPThemeSlotComponent, AXPThemesSharedModule, AXP_SIDE_MENU_COMPACT_WIDTH, AXP_SIDE_MENU_FULL_DEFAULT_WIDTH, AXP_THEME_PALETTE_PROVIDER, configureRegionalFontStylesheets, getRegionalFontStylesheet, normalizeHeaderAppearance, normalizeMenuAppearance };
3242
+ export { AXPLayoutThemeService, AXPMenuOrientation, AXPMenuVerticalMode, AXPSideMenuState, AXPThemeLayoutSetting, AXPThemeMode, AXPThemePaletteProviderDefault, AXPThemeSlotComponent, AXPThemesSharedModule, AXP_SIDE_MENU_COMPACT_WIDTH, AXP_SIDE_MENU_FULL_DEFAULT_WIDTH, AXP_THEME_BOOT_MODE_KEY, AXP_THEME_BOOT_PALETTE_KEY, AXP_THEME_PALETTE_PROVIDER, coerceThemeMode, configureRegionalFontStylesheets, getRegionalFontStylesheet, normalizeHeaderAppearance, normalizeMenuAppearance, normalizeSideMenuState, persistThemeBootCache, readBootThemeMode, readBootThemePalette };
3091
3243
  //# sourceMappingURL=acorex-platform-framework-client-themes-shared.mjs.map