@acorex/platform 21.0.0-next.7 → 21.0.0-next.70

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 (126) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +281 -23
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs +163 -0
  4. package/fesm2022/acorex-platform-common-common-settings.provider-Bi1RYif5.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-common.mjs +1370 -276
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1185 -514
  8. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-domain.mjs +557 -826
  10. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs +832 -189
  12. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs +121 -0
  14. package/fesm2022/acorex-platform-layout-components-binding-expression-editor-popup.component-CXEdvDTf.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-layout-components.mjs +6309 -1956
  16. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-designer.mjs +456 -204
  18. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs +371 -0
  20. package/fesm2022/acorex-platform-layout-entity-attachments-page.component-D8iQnT-R.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs +100 -0
  22. package/fesm2022/acorex-platform-layout-entity-file-list-popup.component-_yrP5SQe.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-layout-entity.mjs +22488 -10232
  24. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  25. package/fesm2022/acorex-platform-layout-views.mjs +564 -170
  26. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  27. package/fesm2022/acorex-platform-layout-widget-core.mjs +2084 -481
  28. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  29. package/fesm2022/{acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs → acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs} +10 -10
  30. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  32. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  33. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  34. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs +116 -0
  36. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-J0zcGKBX.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs} +6 -6
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-BcpRkpJp.mjs.map +1 -0
  39. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs} +5 -5
  40. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-DQtK4lxl.mjs.map +1 -0
  41. package/fesm2022/{acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs → acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs} +6 -6
  42. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-layout-widgets.mjs +10326 -7981
  44. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-native.mjs +8 -7
  46. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  48. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  49. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs +160 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-CWLfNqV0.mjs.map +1 -0
  51. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs +120 -0
  52. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-C7cT82K2.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs} +21 -28
  54. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-Br9p5aXT.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  57. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  58. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  60. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  61. package/fesm2022/acorex-platform-themes-default.mjs +2283 -83
  62. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  66. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  67. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs} +52 -33
  68. package/fesm2022/acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  72. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  73. package/fesm2022/acorex-platform-themes-shared.mjs +767 -609
  74. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  75. package/fesm2022/acorex-platform-workflow.mjs +978 -238
  76. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  77. package/fesm2022/acorex-platform.mjs.map +1 -1
  78. package/package.json +40 -38
  79. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  80. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +822 -89
  81. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +658 -133
  82. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  83. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +194 -49
  84. package/types/acorex-platform-layout-components.d.ts +3253 -0
  85. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  86. package/types/acorex-platform-layout-entity.d.ts +4439 -0
  87. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +179 -56
  88. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +398 -127
  89. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1120 -501
  90. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  91. package/types/acorex-platform-runtime.d.ts +571 -0
  92. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +233 -6
  93. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +24 -2
  94. package/{workflow/index.d.ts → types/acorex-platform-workflow.d.ts} +620 -617
  95. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  96. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  97. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  99. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  104. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  106. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs +0 -1542
  108. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DfJEx_bs.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  110. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  113. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  115. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  118. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  121. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  122. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  123. package/layout/components/index.d.ts +0 -1669
  124. package/layout/entity/index.d.ts +0 -2287
  125. package/runtime/index.d.ts +0 -307
  126. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -7,33 +7,29 @@ import { AXDropdownModule } from '@acorex/components/dropdown';
7
7
  import * as i1 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
  import * as i0 from '@angular/core';
10
- import { computed, inject, Component, InjectionToken, Injectable, signal, ChangeDetectionStrategy, effect, Input, Injector, NgModule } from '@angular/core';
10
+ import { computed, inject, ChangeDetectionStrategy, Component, InjectionToken, Injectable, Input, signal, effect, Injector, NgModule } from '@angular/core';
11
11
  import { AXPSettingsService, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';
12
- import * as i1$2 from '@acorex/platform/core';
13
- import { AXPScreenSize, AXPPlatformScope } from '@acorex/platform/core';
12
+ import * as i1$3 from '@acorex/platform/core';
13
+ import { AXPScreenSize, AXPPlatformScope, AXPComponentSlotModule } from '@acorex/platform/core';
14
14
  import { HttpClient } from '@angular/common/http';
15
15
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
16
16
  import { timer, firstValueFrom, filter } from 'rxjs';
17
17
  import * as i5 from '@acorex/core/translation';
18
18
  import { AXTranslationModule } from '@acorex/core/translation';
19
- import * as i3$1 from '@acorex/platform/layout/widget-core';
20
- import { AXPValueWidgetComponent, AXP_WIDGETS_LAYOUT_CATEGORY, AXPWidgetCoreModule } from '@acorex/platform/layout/widget-core';
21
- import * as i2$3 from '@acorex/platform/layout/components';
22
- import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
23
- import * as i2$1 from '@acorex/components/form';
24
- import { AXFormModule } from '@acorex/components/form';
25
- import * as i4$1 from '@acorex/components/search-box';
26
- import { AXSearchBoxModule } from '@acorex/components/search-box';
27
- import * as i1$1 from '@acorex/components/select-box';
28
- import { AXSelectBoxModule } from '@acorex/components/select-box';
29
- import * as i5$1 from '@angular/forms';
30
- import { FormsModule } from '@angular/forms';
31
- import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex/platform/layout/widgets';
32
- import { AXSelectionCdkModule } from '@acorex/cdk/selection';
19
+ import { AXPValueWidgetComponent, AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY, AXP_WIDGETS_LAYOUT_CATEGORY, AXPWidgetCoreModule, AXP_WIDGET_DEFINITION_PROVIDER } from '@acorex/platform/layout/widget-core';
33
20
  import { AXPopupService } from '@acorex/components/popup';
34
- import * as i2$2 from '@acorex/components/button-group';
21
+ import * as i2$1 from '@acorex/components/button-group';
35
22
  import { AXButtonGroupModule } from '@acorex/components/button-group';
36
23
  import { AXBasePageComponent } from '@acorex/components/page';
24
+ import * as i1$1 from '@acorex/components/search-box';
25
+ import { AXSearchBoxModule } from '@acorex/components/search-box';
26
+ import { AXSelectionCdkModule } from '@acorex/cdk/selection';
27
+ import * as i4$1 from '@angular/forms';
28
+ import { FormsModule } from '@angular/forms';
29
+ import * as i2$2 from '@acorex/components/form';
30
+ import { AXFormModule } from '@acorex/components/form';
31
+ import * as i1$2 from '@acorex/components/select-box';
32
+ import { AXSelectBoxModule } from '@acorex/components/select-box';
37
33
 
38
34
  var AXPThemeLayoutSetting;
39
35
  (function (AXPThemeLayoutSetting) {
@@ -45,7 +41,9 @@ var AXPThemeLayoutSetting;
45
41
  AXPThemeLayoutSetting["Mode"] = "Common:Setting:Layout.Mode";
46
42
  AXPThemeLayoutSetting["SideMenuStatus"] = "Common:Setting:Layout.SideMenu.Status";
47
43
  AXPThemeLayoutSetting["SideMenuWidth"] = "Common:Setting:Layout.SideMenu.Width";
44
+ AXPThemeLayoutSetting["SideMenuCompactWidth"] = "Common:Setting:Layout.SideMenu.CompactWidth";
48
45
  AXPThemeLayoutSetting["MenuOrientation"] = "Common:Setting:Layout.RootMenu.Direction";
46
+ AXPThemeLayoutSetting["MenuVerticalMode"] = "Common:Setting:Layout.RootMenu.VerticalMode";
49
47
  AXPThemeLayoutSetting["MenuBadgeVisible"] = "Common:Setting:Layout.RootMenu.Badge";
50
48
  })(AXPThemeLayoutSetting || (AXPThemeLayoutSetting = {}));
51
49
 
@@ -68,7 +66,27 @@ var AXPMenuOrientation;
68
66
  AXPMenuOrientation["Vertical"] = "vertical";
69
67
  AXPMenuOrientation["Horizontal"] = "horizontal";
70
68
  })(AXPMenuOrientation || (AXPMenuOrientation = {}));
69
+ // Vertical side menu display mode
70
+ var AXPMenuVerticalMode;
71
+ (function (AXPMenuVerticalMode) {
72
+ AXPMenuVerticalMode["Compact"] = "compact";
73
+ AXPMenuVerticalMode["Full"] = "full";
74
+ })(AXPMenuVerticalMode || (AXPMenuVerticalMode = {}));
75
+ const AXP_SIDE_MENU_FULL_DEFAULT_WIDTH = 300;
76
+ const AXP_SIDE_MENU_COMPACT_WIDTH = 80;
71
77
 
78
+ function normalizeMenuVerticalMode(value, fallback) {
79
+ if (value === AXPMenuVerticalMode.Compact || value === AXPMenuVerticalMode.Full) {
80
+ return value;
81
+ }
82
+ if (typeof value === 'object' && value !== null && 'id' in value) {
83
+ const id = value.id;
84
+ if (id === AXPMenuVerticalMode.Compact || id === AXPMenuVerticalMode.Full) {
85
+ return id;
86
+ }
87
+ }
88
+ return fallback;
89
+ }
72
90
  // ThemeStore - Manages theme settings, system changes, and loading states
73
91
  const AXPLayoutThemeService = signalStore({ providedIn: 'root' },
74
92
  // Initial State
@@ -98,7 +116,9 @@ withState(() => {
98
116
  sideMenuState: (getInitialScreenSize() === AXPScreenSize.Large
99
117
  ? AXPSideMenuState.Opened
100
118
  : AXPSideMenuState.Closed),
101
- sideMenuWidth: 288,
119
+ sideMenuWidth: AXP_SIDE_MENU_FULL_DEFAULT_WIDTH,
120
+ sideMenuCompactWidth: AXP_SIDE_MENU_COMPACT_WIDTH,
121
+ menuVerticalMode: AXPMenuVerticalMode.Full,
102
122
  menuOrientation: 'vertical',
103
123
  _listener: null,
104
124
  isPrinting: false,
@@ -106,7 +126,7 @@ withState(() => {
106
126
  return state;
107
127
  }),
108
128
  // Computed Signals
109
- withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMenuState, overlayLoading, navigationLoading, menuOrientation, isPrinting, }) => ({
129
+ withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMenuState, overlayLoading, navigationLoading, menuOrientation, menuVerticalMode, sideMenuWidth, sideMenuCompactWidth, isPrinting, }) => ({
110
130
  isDarkMode: computed(() => {
111
131
  if (isPrinting()) {
112
132
  return false;
@@ -121,6 +141,9 @@ withComputed(({ currentMode: currentTheme, systemThemeMode: systemTheme, sideMen
121
141
  isOverlayLoading: computed(() => overlayLoading()),
122
142
  isNavigationLoading: computed(() => navigationLoading()),
123
143
  isMenuHorizontal: computed(() => menuOrientation() === AXPMenuOrientation.Horizontal),
144
+ sideMenuDrawerWidth: computed(() => normalizeMenuVerticalMode(menuVerticalMode(), AXPMenuVerticalMode.Full) === AXPMenuVerticalMode.Compact
145
+ ? sideMenuCompactWidth()
146
+ : sideMenuWidth()),
124
147
  })),
125
148
  // Methods for State Management
126
149
  withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSettingsService)) => {
@@ -139,12 +162,19 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
139
162
  store.menuOrientation();
140
163
  patchState(store, { menuOrientation: settingMenuOrientation });
141
164
  //
165
+ const settingMenuVerticalMode = normalizeMenuVerticalMode(await settingsService.get(AXPThemeLayoutSetting.MenuVerticalMode), store.menuVerticalMode());
166
+ patchState(store, { menuVerticalMode: settingMenuVerticalMode });
167
+ //
142
168
  const fontFamily = await settingsService.get(AXPThemeLayoutSetting.Font);
143
169
  const fontSize = await settingsService.get(AXPThemeLayoutSetting.FontSize);
144
170
  patchState(store, { font: { family: fontFamily, size: fontSize } });
145
171
  //
146
- const sideMenuWidth = await settingsService.get(AXPThemeLayoutSetting.SideMenuWidth);
172
+ const sideMenuWidth = (await settingsService.get(AXPThemeLayoutSetting.SideMenuWidth)) ?? store.sideMenuWidth();
147
173
  patchState(store, { sideMenuWidth });
174
+ //
175
+ const sideMenuCompactWidth = (await settingsService.get(AXPThemeLayoutSetting.SideMenuCompactWidth)) ??
176
+ store.sideMenuCompactWidth();
177
+ patchState(store, { sideMenuCompactWidth });
148
178
  await _updateHtmlClass();
149
179
  };
150
180
  // Update HTML class based on theme
@@ -260,11 +290,27 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
260
290
  patchState(store, { sideMenuState: AXPSideMenuState.Closed });
261
291
  settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuStatus, AXPSideMenuState.Closed);
262
292
  },
263
- // Set side menu width
293
+ // Set side menu width in full vertical mode
264
294
  setSideMenuWidth(width) {
265
295
  patchState(store, { sideMenuWidth: width });
266
296
  settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuWidth, width);
267
297
  },
298
+ // Set side menu width in compact vertical mode
299
+ setSideMenuCompactWidth(width) {
300
+ patchState(store, { sideMenuCompactWidth: width });
301
+ settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuCompactWidth, width);
302
+ },
303
+ // Persist drawer width for the active vertical menu mode
304
+ setSideMenuDrawerWidth(width) {
305
+ if (normalizeMenuVerticalMode(store.menuVerticalMode(), AXPMenuVerticalMode.Full) === AXPMenuVerticalMode.Compact) {
306
+ patchState(store, { sideMenuCompactWidth: width });
307
+ settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuCompactWidth, width);
308
+ }
309
+ else {
310
+ patchState(store, { sideMenuWidth: width });
311
+ settingsService.scope(AXPPlatformScope.User).set(AXPThemeLayoutSetting.SideMenuWidth, width);
312
+ }
313
+ },
268
314
  // Toggle side menu state
269
315
  toggleSideMenu() {
270
316
  const newSideMenuState = store.sideMenuState() === AXPSideMenuState.Opened ? AXPSideMenuState.Closed : AXPSideMenuState.Opened;
@@ -305,9 +351,21 @@ withMethods((store, http = inject(HttpClient), settingsService = inject(AXPSetti
305
351
  withHooks((store, settingsService = inject(AXPSettingsService)) => ({
306
352
  onInit() {
307
353
  //
308
- settingsService.onChanged.pipe(filter((c) => c.scope == AXPPlatformScope.User)).subscribe(async (changes) => {
354
+ settingsService.onChanged
355
+ .pipe(filter((c) => [AXPPlatformScope.Platform, AXPPlatformScope.Tenant, AXPPlatformScope.User].includes(c.scope)))
356
+ .subscribe(async (changes) => {
309
357
  const keys = Object.values(AXPThemeLayoutSetting);
310
- if (changes.keys.some((key) => keys.includes(key))) {
358
+ if (!changes.keys.some((key) => keys.includes(key))) {
359
+ return;
360
+ }
361
+ if (changes.keys.includes(AXPThemeLayoutSetting.MenuVerticalMode)) {
362
+ patchState(store, {
363
+ menuVerticalMode: normalizeMenuVerticalMode(changes.values[AXPThemeLayoutSetting.MenuVerticalMode], store.menuVerticalMode()),
364
+ });
365
+ }
366
+ const shouldReloadSettings = changes.keys.some((key) => keys.includes(key) &&
367
+ key !== AXPThemeLayoutSetting.MenuVerticalMode);
368
+ if (shouldReloadSettings) {
311
369
  await store['loadSettings']();
312
370
  }
313
371
  });
@@ -341,8 +399,8 @@ class AXPThemeSlotComponent {
341
399
  this.store = inject(AXPLayoutThemeService);
342
400
  this.variants = AXPThemeMode;
343
401
  }
344
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
345
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.12", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
402
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
403
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
346
404
  <ax-button color="primary">
347
405
  <ax-icon
348
406
  class="fa-regular "
@@ -385,9 +443,9 @@ class AXPThemeSlotComponent {
385
443
  </ax-button-item-list>
386
444
  </ax-dropdown-panel>
387
445
  </ax-button>
388
- `, 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", "size", "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: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }] }); }
446
+ `, 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", "size", "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: i5.AXTranslatorDirective, selector: "[translate]" }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
389
447
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
391
449
  type: Component,
392
450
  args: [{
393
451
  template: `
@@ -434,7 +492,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
434
492
  </ax-dropdown-panel>
435
493
  </ax-button>
436
494
  `,
437
- imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule]
495
+ imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule],
496
+ changeDetection: ChangeDetectionStrategy.OnPush,
438
497
  }]
439
498
  }] });
440
499
 
@@ -467,529 +526,155 @@ class AXPThemePaletteProviderDefault {
467
526
  }
468
527
  }
469
528
 
470
- class AXPColorProvider {
471
- }
472
- function titleCase(str) {
473
- return str.replace(/-/g, ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
474
- }
475
- function generateDefaultColors() {
476
- const colors = [];
477
- const styles = ['primary', 'secondary', 'success', 'warning', 'danger'];
478
- const variants = [
479
- 'lightest',
480
- 'lighter',
481
- 'light',
482
- 'surface',
483
- 'dark',
484
- 'darker',
485
- 'darkest',
486
- // ,'default'
487
- ];
488
- for (const style of styles) {
489
- for (const variant of variants) {
490
- let name;
491
- let colorClass;
492
- // if (variant === 'default') {
493
- // name = `${style}-${variant}`;
494
- // colorClass = `ax-text-${style}-${variant}`;
495
- // } else {
496
- name = `${style}-${variant}`;
497
- colorClass = `ax-text-${style}-on-${variant}`;
498
- // }
499
- colors.push({
500
- title: titleCase(variant === 'surface' ? style : titleCase(name)),
501
- name: name,
502
- color: colorClass,
503
- background: `ax-bg-${name}`,
504
- border: `ax-border-${name}`,
505
- });
506
- }
507
- }
508
- return colors;
529
+ //#region ---- Injection Tokens ----
530
+ /**
531
+ * Injection token for icon providers.
532
+ * Use multi: true to register multiple providers.
533
+ */
534
+ const AXP_ICON_PROVIDER = new InjectionToken('AXP_ICON_PROVIDER');
535
+ /**
536
+ * Injection token for icon style providers.
537
+ * Use multi: true to register multiple providers.
538
+ */
539
+ const AXP_ICON_STYLE_PROVIDER = new InjectionToken('AXP_ICON_STYLE_PROVIDER');
540
+ //#endregion
541
+
542
+ //#endregion
543
+ //#region ---- Abstract Providers ----
544
+ class AXPIconProvider {
509
545
  }
510
- const DEFAULT_COLORS = generateDefaultColors();
511
- class AXPColorProviderDefault extends AXPColorProvider {
512
- async provide() {
513
- return DEFAULT_COLORS;
514
- }
546
+ class AXPIconStyleProvider {
515
547
  }
516
- const AXP_COLOR_PROVIDER = new InjectionToken('AXP_COLOR_PROVIDER');
517
- class AXPColorChooserService {
548
+ //#endregion
549
+ //#region ---- Service ----
550
+ class AXPIconChooserService {
518
551
  constructor() {
519
- this.defaultProvider = new AXPColorProviderDefault();
520
- this.providers = (() => {
521
- const injected = inject(AXP_COLOR_PROVIDER, { optional: true });
522
- if (!injected) {
523
- return [this.defaultProvider];
524
- }
525
- const providers = Array.isArray(injected) ? injected : [injected];
526
- return [...providers, this.defaultProvider];
527
- })();
528
- this.cache = null;
552
+ //#region ---- Properties ----
553
+ this.iconProviders = inject(AXP_ICON_PROVIDER, { optional: true }) ?? [];
554
+ this.styleProviders = inject(AXP_ICON_STYLE_PROVIDER, { optional: true }) ?? [];
555
+ this.iconsCache = null;
556
+ this.stylesCache = null;
529
557
  }
530
- async getColors() {
531
- if (this.cache) {
532
- return this.cache;
558
+ //#endregion
559
+ //#region ---- Public Methods ----
560
+ /**
561
+ * Get all available icon styles from registered providers.
562
+ * Results are cached after first call.
563
+ */
564
+ async getStyles() {
565
+ if (this.stylesCache) {
566
+ return this.stylesCache;
567
+ }
568
+ const allStyles = [];
569
+ for (const provider of this.styleProviders) {
570
+ const result = await provider.provide();
571
+ allStyles.push(...result);
572
+ }
573
+ // Remove duplicates based on style name
574
+ const uniqueStyles = allStyles.filter((style, index, self) => index === self.findIndex((s) => s.name === style.name));
575
+ this.stylesCache = uniqueStyles;
576
+ return uniqueStyles;
577
+ }
578
+ /**
579
+ * Get all available icons from registered providers.
580
+ * Icons from multiple providers are merged, with duplicates removed.
581
+ * Results are cached after first call.
582
+ */
583
+ async getIcons() {
584
+ if (this.iconsCache) {
585
+ return this.iconsCache;
533
586
  }
534
- const allColors = [];
535
- for (const resolver of this.providers) {
536
- const result = await resolver.provide();
537
- allColors.push(...result);
587
+ const allIcons = [];
588
+ for (const provider of this.iconProviders) {
589
+ const result = await provider.provide();
590
+ allIcons.push(...result);
538
591
  }
539
- const uniqueColors = allColors.filter((color, index, self) => index === self.findIndex((c) => c.title === color.title));
540
- this.cache = uniqueColors;
541
- return uniqueColors;
592
+ // Remove duplicates based on icon name, keeping first occurrence
593
+ const uniqueIcons = allIcons.filter((icon, index, self) => index === self.findIndex((i) => i.name === icon.name));
594
+ this.iconsCache = uniqueIcons;
595
+ return uniqueIcons;
542
596
  }
543
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
544
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserService, providedIn: 'root' }); }
597
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
598
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, providedIn: 'root' }); }
545
599
  }
546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserService, decorators: [{
600
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, decorators: [{
547
601
  type: Injectable,
548
- args: [{
549
- providedIn: 'root',
550
- }]
602
+ args: [{ providedIn: 'root' }]
551
603
  }] });
552
604
 
553
- class AXPColorChooserWidgetEditComponent extends AXPValueWidgetComponent {
605
+ class AXPIconChooserPopupComponent extends AXBasePageComponent {
554
606
  constructor() {
555
607
  super(...arguments);
556
- this.colorService = inject(AXPColorChooserService);
557
- this.colors = signal([], ...(ngDevMode ? [{ debugName: "colors" }] : []));
558
- this.placeholder = computed(() => this.options()['placeholder'] ?? '', ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
559
- this.selectedColor = computed(() => {
560
- const value = this.getValue();
561
- if (!value) {
562
- return this.colors()[0];
563
- }
564
- // If value is a string in the format: "ax-text-* ax-bg-* ax-border-*"
565
- if (typeof value === 'string') {
566
- const parsed = this.parseStringValue(value);
567
- if (parsed) {
568
- return parsed;
569
- }
570
- return this.colors()[0];
571
- }
572
- // Otherwise value is an object
573
- return value.name;
574
- }, ...(ngDevMode ? [{ debugName: "selectedColor" }] : []));
608
+ this.icons = [];
609
+ this.filteredIcons = [];
610
+ this.searchQuery = '';
611
+ this.viewModes = [
612
+ { value: 'square', text: '@general:widgets.icon-chooser.view-mode.square', icon: 'fa-solid fa-border-all' },
613
+ {
614
+ value: 'rectangle',
615
+ text: '@general:widgets.icon-chooser.view-mode.rectangle',
616
+ icon: 'fa-solid fa-list',
617
+ },
618
+ ];
619
+ this.selectedViewMode = 'square';
620
+ this.iconTypes = [];
621
+ this.selectedIconType = 'fa-solid';
622
+ this.popupService = inject(AXPIconChooserService);
575
623
  }
576
624
  async ngOnInit() {
577
- const allColors = await this.colorService.getColors();
578
- this.colors.set(allColors);
579
- super.ngOnInit();
625
+ this.iconTypes = await this.popupService.getStyles();
626
+ this.icons = await this.popupService.getIcons();
627
+ this.applyFilters();
628
+ this.cdr.detectChanges();
580
629
  }
581
- handleValueChange(event) {
582
- if (event.isUserInteraction) {
583
- if (!event.value) {
584
- this.setValue(undefined);
585
- return;
586
- }
587
- const color = event.component.selectedItems[0];
588
- // Always store as ordered string: "color background border"
589
- const stringValue = `${color.color} ${color.background} ${color.border}`;
590
- this.setValue(stringValue);
591
- }
630
+ handleSearch(event) {
631
+ this.searchQuery = event.value?.toLowerCase();
632
+ this.applyFilters();
592
633
  }
593
- parseStringValue(value) {
594
- const parts = value.trim().split(/\s+/);
595
- if (parts.length !== 3) {
596
- return null;
634
+ handleViewModeChange(mode) {
635
+ this.selectedViewMode = mode.value;
636
+ }
637
+ handleIconTypeChange(type) {
638
+ this.selectedIconType = type.name;
639
+ this.applyFilters();
640
+ }
641
+ applyFilters() {
642
+ let result = this.icons;
643
+ if (this.searchQuery) {
644
+ result = result.filter((icon) => icon.label.toLowerCase().includes(this.searchQuery) ||
645
+ icon.tags?.some((tag) => tag.toLowerCase().includes(this.searchQuery)));
597
646
  }
598
- const [color, background, border] = parts;
599
- const match = this.colors().find((c) => c.color === color && c.background === background && c.border === border);
600
- return match?.name ?? null;
647
+ result = result.filter((icon) => {
648
+ if (!icon.supportedStyle || icon.supportedStyle.length === 0) {
649
+ return true;
650
+ }
651
+ return icon.supportedStyle.includes(this.selectedIconType);
652
+ });
653
+ this.filteredIcons = result;
601
654
  }
602
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.12", type: AXPColorChooserWidgetEditComponent, isStandalone: true, selector: "ax-color-chooser-widget", usesInheritance: true, ngImport: i0, template: `
604
- <ax-form [messageStyle]="'float'" [updateOn]="'change'">
605
- <ax-form-field>
606
- <ax-select-box
607
- [dataSource]="colors()"
608
- textField="title"
609
- valueField="name"
610
- [placeholder]="placeholder()"
611
- [itemTemplate]="customItemTemplate"
612
- [ngModel]="selectedColor()"
613
- (onValueChanged)="handleValueChange($event)"
614
- [selectedTemplate]="customItemTemplate"
615
- >
616
- <ng-template #customItemTemplate let-item>
617
- <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
618
- <div
619
- class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
620
- [ngClass]="item.data.background"
621
- >
622
- <span [ngClass]="item.data.color">Aa</span>
623
- </div>
624
- <span>{{ item.data.title }}</span>
625
- </div>
626
- </ng-template>
627
- <ax-search-box look="fill"></ax-search-box>
628
- <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
629
- </ax-select-box>
630
- </ax-form-field>
631
- </ax-form>
632
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i1$1.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i2$1.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i2$1.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i2$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4$1.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
633
- }
634
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserWidgetEditComponent, decorators: [{
635
- type: Component,
636
- args: [{
637
- selector: 'ax-color-chooser-widget',
638
- template: `
639
- <ax-form [messageStyle]="'float'" [updateOn]="'change'">
640
- <ax-form-field>
641
- <ax-select-box
642
- [dataSource]="colors()"
643
- textField="title"
644
- valueField="name"
645
- [placeholder]="placeholder()"
646
- [itemTemplate]="customItemTemplate"
647
- [ngModel]="selectedColor()"
648
- (onValueChanged)="handleValueChange($event)"
649
- [selectedTemplate]="customItemTemplate"
650
- >
651
- <ng-template #customItemTemplate let-item>
652
- <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
653
- <div
654
- class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
655
- [ngClass]="item.data.background"
656
- >
657
- <span [ngClass]="item.data.color">Aa</span>
658
- </div>
659
- <span>{{ item.data.title }}</span>
660
- </div>
661
- </ng-template>
662
- <ax-search-box look="fill"></ax-search-box>
663
- <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
664
- </ax-select-box>
665
- </ax-form-field>
666
- </ax-form>
667
- `,
668
- imports: [AXSelectBoxModule, AXFormModule, CommonModule, AXSearchBoxModule, AXButtonModule, FormsModule],
669
- changeDetection: ChangeDetectionStrategy.OnPush,
670
- }]
671
- }] });
672
-
673
- var themeColorChooserEdit_component = /*#__PURE__*/Object.freeze({
674
- __proto__: null,
675
- AXPColorChooserWidgetEditComponent: AXPColorChooserWidgetEditComponent
676
- });
677
-
678
- const AXPThemeColorChooserWidgetConfig = {
679
- name: 'theme-color-chooser',
680
- title: 'Theme Color Chooser',
681
- icon: 'fa-solid fa-palette',
682
- type: 'editor',
683
- categories: AXP_WIDGETS_LAYOUT_CATEGORY,
684
- properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
685
- components: {
686
- edit: {
687
- component: () => Promise.resolve().then(function () { return themeColorChooserEdit_component; }).then((c) => c.AXPColorChooserWidgetEditComponent),
688
- },
689
- column: {
690
- component: () => import('./acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs').then((c) => c.AXPColorChooserWidgetColumnComponent),
691
- },
692
- view: {
693
- component: () => import('./acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs').then((c) => c.AXPColorChooserWidgetViewComponent),
694
- },
695
- },
696
- };
697
-
698
- class AXPFontSizeChooserWidgetComponent extends AXPValueWidgetComponent {
699
- constructor() {
700
- super(...arguments);
701
- this.sizes = signal(['small', 'medium', 'large', 'x-large'], ...(ngDevMode ? [{ debugName: "sizes" }] : []));
702
- this.selectedSize = signal(null, ...(ngDevMode ? [{ debugName: "selectedSize" }] : []));
703
- this.#eff = effect(() => {
704
- if (this.getValue()) {
705
- this.selectedSize.set(this.sizes().find((s) => s === this.getValue()) ?? this.sizes()[0]);
706
- }
707
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
708
- }
709
- #eff;
710
- onSizeClick(size) {
711
- this.setValue(size);
712
- }
713
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
714
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPFontSizeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
715
- @for (size of sizes(); track size) {
716
- <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
717
- <div>
718
- <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
719
- </div>
720
- </div>
721
- }
722
- `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
723
- }
724
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, decorators: [{
725
- type: Component,
726
- args: [{ template: `
727
- @for (size of sizes(); track size) {
728
- <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
729
- <div>
730
- <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
731
- </div>
732
- </div>
733
- }
734
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"] }]
735
- }] });
736
-
737
- var fontSizeChooserWidget_component = /*#__PURE__*/Object.freeze({
738
- __proto__: null,
739
- AXPFontSizeChooserWidgetComponent: AXPFontSizeChooserWidgetComponent
740
- });
741
-
742
- const AXPFontSizeChooserWidget = {
743
- name: "font-size-chooser",
744
- title: "Font Size Chooser",
745
- icon: "fa-light fa-text-size",
746
- type: 'editor',
747
- categories: AXP_WIDGETS_LAYOUT_CATEGORY,
748
- properties: [
749
- AXP_NAME_PROPERTY,
750
- AXP_DATA_PATH_PROPERTY,
751
- AXP_DISABLED_PROPERTY,
752
- ],
753
- components: {
754
- edit: {
755
- component: () => Promise.resolve().then(function () { return fontSizeChooserWidget_component; }).then((c) => c.AXPFontSizeChooserWidgetComponent),
756
- },
757
- }
758
- };
759
-
760
- class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
761
- constructor() {
762
- super(...arguments);
763
- this.fonts = signal([
764
- { id: 'system-ui', title: 'Default' },
765
- { id: 'serif', title: 'Serif' },
766
- { id: 'sans-serif', title: 'Sans-serif' },
767
- { id: 'monospace', title: 'Monospace' },
768
- { id: 'arial', title: 'Arial' },
769
- { id: 'verdana', title: 'Verdana' },
770
- { id: 'tahoma', title: 'Tahoma' },
771
- { id: 'times-new-roman', title: 'Times New Roman' },
772
- { id: 'georgia', title: 'Georgia' },
773
- { id: 'helvetica', title: 'Helvetica' },
774
- { id: 'calibri', title: 'Calibri' },
775
- { id: 'cursive', title: 'Cursive' },
776
- { id: 'vazirmatn', title: 'Vazir وزیر' },
777
- ], ...(ngDevMode ? [{ debugName: "fonts" }] : []));
778
- this.selectedFont = signal(null, ...(ngDevMode ? [{ debugName: "selectedFont" }] : []));
779
- this.#eff = effect(() => {
780
- if (this.getValue()) {
781
- this.selectedFont.set(this.fonts().find((f) => f.id === this.getValue()) ?? this.fonts()[0]);
782
- }
783
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
784
- }
785
- #eff;
786
- onFontClick(font) {
787
- this.setValue(font.id);
788
- }
789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
790
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
791
- @for (font of fonts(); track font.id) {
792
- <div
793
- (click)="onFontClick(font)"
794
- [class.--selected]="font.id === selectedFont()?.id"
795
- [style.font-family]="font.id"
796
- >
797
- <div>
798
- <span>{{ font.title }}</span>
799
- </div>
800
- </div>
801
- }
802
- `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
803
- }
804
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
805
- type: Component,
806
- args: [{ template: `
807
- @for (font of fonts(); track font.id) {
808
- <div
809
- (click)="onFontClick(font)"
810
- [class.--selected]="font.id === selectedFont()?.id"
811
- [style.font-family]="font.id"
812
- >
813
- <div>
814
- <span>{{ font.title }}</span>
815
- </div>
816
- </div>
817
- }
818
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, AXSelectionCdkModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"] }]
819
- }] });
820
-
821
- var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
822
- __proto__: null,
823
- AXPFontStyleChooserWidgetComponent: AXPFontStyleChooserWidgetComponent
824
- });
825
-
826
- const AXPFontStyleChooserWidget = {
827
- name: "font-style-chooser",
828
- title: "Font Style Chooser",
829
- icon: "fa-light fa-font",
830
- type: 'editor',
831
- categories: AXP_WIDGETS_LAYOUT_CATEGORY,
832
- properties: [
833
- AXP_NAME_PROPERTY,
834
- AXP_DATA_PATH_PROPERTY,
835
- AXP_DISABLED_PROPERTY,
836
- ],
837
- components: {
838
- edit: {
839
- component: () => Promise.resolve().then(function () { return fontStyleChooserWidget_component; }).then((c) => c.AXPFontStyleChooserWidgetComponent),
840
- },
841
- }
842
- };
843
-
844
- //#region ---- Injection Tokens ----
845
- /**
846
- * Injection token for icon providers.
847
- * Use multi: true to register multiple providers.
848
- */
849
- const AXP_ICON_PROVIDER = new InjectionToken('AXP_ICON_PROVIDER');
850
- /**
851
- * Injection token for icon style providers.
852
- * Use multi: true to register multiple providers.
853
- */
854
- const AXP_ICON_STYLE_PROVIDER = new InjectionToken('AXP_ICON_STYLE_PROVIDER');
855
- //#endregion
856
-
857
- //#endregion
858
- //#region ---- Abstract Providers ----
859
- class AXPIconProvider {
860
- }
861
- class AXPIconStyleProvider {
862
- }
863
- //#endregion
864
- //#region ---- Service ----
865
- class AXPIconChooserService {
866
- constructor() {
867
- //#region ---- Properties ----
868
- this.iconProviders = inject(AXP_ICON_PROVIDER, { optional: true }) ?? [];
869
- this.styleProviders = inject(AXP_ICON_STYLE_PROVIDER, { optional: true }) ?? [];
870
- this.iconsCache = null;
871
- this.stylesCache = null;
872
- }
873
- //#endregion
874
- //#region ---- Public Methods ----
875
- /**
876
- * Get all available icon styles from registered providers.
877
- * Results are cached after first call.
878
- */
879
- async getStyles() {
880
- if (this.stylesCache) {
881
- return this.stylesCache;
882
- }
883
- const allStyles = [];
884
- for (const provider of this.styleProviders) {
885
- const result = await provider.provide();
886
- allStyles.push(...result);
887
- }
888
- // Remove duplicates based on style name
889
- const uniqueStyles = allStyles.filter((style, index, self) => index === self.findIndex((s) => s.name === style.name));
890
- this.stylesCache = uniqueStyles;
891
- return uniqueStyles;
892
- }
893
- /**
894
- * Get all available icons from registered providers.
895
- * Icons from multiple providers are merged, with duplicates removed.
896
- * Results are cached after first call.
897
- */
898
- async getIcons() {
899
- if (this.iconsCache) {
900
- return this.iconsCache;
901
- }
902
- const allIcons = [];
903
- for (const provider of this.iconProviders) {
904
- const result = await provider.provide();
905
- allIcons.push(...result);
906
- }
907
- // Remove duplicates based on icon name, keeping first occurrence
908
- const uniqueIcons = allIcons.filter((icon, index, self) => index === self.findIndex((i) => i.name === icon.name));
909
- this.iconsCache = uniqueIcons;
910
- return uniqueIcons;
911
- }
912
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
913
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserService, providedIn: 'root' }); }
914
- }
915
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserService, decorators: [{
916
- type: Injectable,
917
- args: [{ providedIn: 'root' }]
918
- }] });
919
-
920
- class AXPIconChooserPopupComponent extends AXBasePageComponent {
921
- constructor() {
922
- super(...arguments);
923
- this.icons = [];
924
- this.filteredIcons = [];
925
- this.searchQuery = '';
926
- this.viewModes = [
927
- { value: 'square', text: '@general:widgets.icon-chooser.view-mode.square', icon: 'fa-solid fa-border-all' },
928
- {
929
- value: 'rectangle',
930
- text: '@general:widgets.icon-chooser.view-mode.rectangle',
931
- icon: 'fa-solid fa-list',
932
- },
933
- ];
934
- this.selectedViewMode = 'square';
935
- this.iconTypes = [];
936
- this.selectedIconType = 'fa-solid';
937
- this.popupService = inject(AXPIconChooserService);
938
- }
939
- async ngOnInit() {
940
- this.iconTypes = await this.popupService.getStyles();
941
- this.icons = await this.popupService.getIcons();
942
- this.applyFilters();
943
- this.cdr.detectChanges();
944
- }
945
- handleSearch(event) {
946
- this.searchQuery = event.value?.toLowerCase();
947
- this.applyFilters();
948
- }
949
- handleViewModeChange(mode) {
950
- this.selectedViewMode = mode.value;
951
- }
952
- handleIconTypeChange(type) {
953
- this.selectedIconType = type.name;
954
- this.applyFilters();
955
- }
956
- applyFilters() {
957
- let result = this.icons;
958
- if (this.searchQuery) {
959
- result = result.filter((icon) => icon.label.toLowerCase().includes(this.searchQuery) ||
960
- icon.tags?.some((tag) => tag.toLowerCase().includes(this.searchQuery)));
961
- }
962
- result = result.filter((icon) => {
963
- if (!icon.supportedStyle || icon.supportedStyle.length === 0) {
964
- return true;
965
- }
966
- return icon.supportedStyle.includes(this.selectedIconType);
967
- });
968
- this.filteredIcons = result;
969
- }
970
- selectIcon(icon) {
971
- this.close({
972
- label: icon.label,
973
- styleClass: this.selectedIconType,
974
- iconClass: `fa-${icon.name}`,
975
- });
976
- }
977
- getIconClass(icon) {
978
- return `${this.selectedIconType} fa-${icon.name}`;
979
- }
980
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
981
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPIconChooserPopupComponent, isStandalone: true, selector: "ng-component", inputs: { value: "value" }, usesInheritance: true, ngImport: i0, template: `
982
- <div class="ax-flex ax-flex-col ax-h-full ax-bg-lightest">
983
- <!-- Fixed Header Section -->
984
- <div class="ax-sticky ax-top-0 ax-z-10 ax-bg-lightest ax-border-b ax-p-4 ax-gap-4 ax-flex ax-flex-col">
985
- <!-- Search Bar -->
986
- <div class="ax-flex ax-justify-center">
987
- <ax-search-box
988
- class="ax-w-full"
989
- (onValueChanged)="handleSearch($event)"
990
- [placeholder]="'@general:widgets.icon-chooser.search-placeholder' | translate | async"
991
- ></ax-search-box>
992
- </div>
655
+ selectIcon(icon) {
656
+ this.close({
657
+ label: icon.label,
658
+ styleClass: this.selectedIconType,
659
+ iconClass: `fa-${icon.name}`,
660
+ });
661
+ }
662
+ getIconClass(icon) {
663
+ return `${this.selectedIconType} fa-${icon.name}`;
664
+ }
665
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
666
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPIconChooserPopupComponent, isStandalone: true, selector: "ng-component", inputs: { value: "value" }, usesInheritance: true, ngImport: i0, template: `
667
+ <div class="ax-flex ax-flex-col ax-h-full ax-bg-lightest">
668
+ <!-- Fixed Header Section -->
669
+ <div class="ax-sticky ax-top-0 ax-z-10 ax-bg-lightest ax-border-b ax-p-4 ax-gap-4 ax-flex ax-flex-col">
670
+ <!-- Search Bar -->
671
+ <div class="ax-flex ax-justify-center">
672
+ <ax-search-box
673
+ class="ax-w-full"
674
+ (onValueChanged)="handleSearch($event)"
675
+ [placeholder]="'@general:widgets.icon-chooser.search-placeholder' | translate | async"
676
+ ></ax-search-box>
677
+ </div>
993
678
 
994
679
  <!-- Controls Row -->
995
680
  <div class="ax-flex ax-justify-between ax-items-center ax-flex-wrap ax-gap-2">
@@ -1053,9 +738,9 @@ class AXPIconChooserPopupComponent extends AXBasePageComponent {
1053
738
  </div>
1054
739
  </div>
1055
740
  </div>
1056
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4$1.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i2$2.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "fitParent", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "onClick", "selectionChange", "selectedButtonChange"] }, { kind: "component", type: i2$2.AXButtonGroupItemComponent, selector: "ax-button-group-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
741
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i1$1.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i2$1.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "fitParent", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "onClick", "selectionChange", "selectedButtonChange"] }, { kind: "component", type: i2$1.AXButtonGroupItemComponent, selector: "ax-button-group-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1057
742
  }
1058
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserPopupComponent, decorators: [{
743
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserPopupComponent, decorators: [{
1059
744
  type: Component,
1060
745
  args: [{
1061
746
  template: `
@@ -1160,7 +845,7 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1160
845
  }
1161
846
  }
1162
847
  return value;
1163
- }, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
848
+ }, ...(ngDevMode ? [{ debugName: "computedValue" }] : /* istanbul ignore next */ []));
1164
849
  }
1165
850
  async openPopup() {
1166
851
  const result = await this.popupService.open(AXPIconChooserPopupComponent, {
@@ -1185,8 +870,8 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1185
870
  editIcon() {
1186
871
  this.openPopup();
1187
872
  }
1188
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1189
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPIconChooserWidgetEditComponent, isStandalone: true, selector: "ax-icon-chooser-edit", usesInheritance: true, ngImport: i0, template: `
873
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
874
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPIconChooserWidgetEditComponent, isStandalone: true, selector: "ax-icon-chooser-edit", usesInheritance: true, ngImport: i0, template: `
1190
875
  <div
1191
876
  class="ax-grid ax-grid-cols-[6rem_auto] ax-items-center ax-rounded-md ax-text-3xl ax-w-fit"
1192
877
  [class.ax-border]="getValue()"
@@ -1217,7 +902,7 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1217
902
  </div>
1218
903
  `, isInline: true, styles: [".icon-container{background-color:rgba(var(--ax-sys-color-primary-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-sys-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-sys-color-primary-300),50%) 0,rgba(var(--ax-sys-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1219
904
  }
1220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserWidgetEditComponent, decorators: [{
905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserWidgetEditComponent, decorators: [{
1221
906
  type: Component,
1222
907
  args: [{ selector: 'ax-icon-chooser-edit', template: `
1223
908
  <div
@@ -1259,7 +944,7 @@ var iconChooserEdit_component = /*#__PURE__*/Object.freeze({
1259
944
  const AXPIconChooserWidget = {
1260
945
  name: 'icon-chooser',
1261
946
  title: 'Icon Chooser',
1262
- icon: 'fa-solid fa-icons',
947
+ icon: 'fa-light fa-icons',
1263
948
  type: 'editor',
1264
949
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1265
950
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
@@ -1268,10 +953,10 @@ const AXPIconChooserWidget = {
1268
953
  component: () => Promise.resolve().then(function () { return iconChooserEdit_component; }).then((c) => c.AXPIconChooserWidgetEditComponent),
1269
954
  },
1270
955
  column: {
1271
- component: () => import('./acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs').then((c) => c.AXPIconChooserWidgetColumnComponent),
956
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs').then((c) => c.AXPIconChooserWidgetColumnComponent),
1272
957
  },
1273
958
  view: {
1274
- component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs').then((c) => c.AXPIconChooserWidgetViewComponent),
959
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs').then((c) => c.AXPIconChooserWidgetViewComponent),
1275
960
  },
1276
961
  },
1277
962
  };
@@ -1814,50 +1499,207 @@ function provideCustomIconStyleProvider(providerClass) {
1814
1499
  multi: true,
1815
1500
  };
1816
1501
  }
1817
- //#endregion
1502
+ //#endregion
1503
+
1504
+ class AXPFontSizeChooserWidgetComponent extends AXPValueWidgetComponent {
1505
+ constructor() {
1506
+ super(...arguments);
1507
+ this.sizes = signal(['small', 'medium', 'large', 'x-large'], ...(ngDevMode ? [{ debugName: "sizes" }] : /* istanbul ignore next */ []));
1508
+ this.selectedSize = signal(null, ...(ngDevMode ? [{ debugName: "selectedSize" }] : /* istanbul ignore next */ []));
1509
+ this.#eff = effect(() => {
1510
+ if (this.getValue()) {
1511
+ this.selectedSize.set(this.sizes().find((s) => s === this.getValue()) ?? this.sizes()[0]);
1512
+ }
1513
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1514
+ }
1515
+ #eff;
1516
+ onSizeClick(size) {
1517
+ this.setValue(size);
1518
+ }
1519
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1520
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPFontSizeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1521
+ @for (size of sizes(); track size) {
1522
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1523
+ <div>
1524
+ <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
1525
+ </div>
1526
+ </div>
1527
+ }
1528
+ `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1529
+ }
1530
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, decorators: [{
1531
+ type: Component,
1532
+ args: [{ template: `
1533
+ @for (size of sizes(); track size) {
1534
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1535
+ <div>
1536
+ <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
1537
+ </div>
1538
+ </div>
1539
+ }
1540
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"] }]
1541
+ }] });
1542
+
1543
+ var fontSizeChooserWidget_component = /*#__PURE__*/Object.freeze({
1544
+ __proto__: null,
1545
+ AXPFontSizeChooserWidgetComponent: AXPFontSizeChooserWidgetComponent
1546
+ });
1547
+
1548
+ const AXPFontSizeChooserWidget = {
1549
+ name: "font-size-chooser",
1550
+ title: "Font Size Chooser",
1551
+ icon: "fa-light fa-text-size",
1552
+ type: 'editor',
1553
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1554
+ properties: [
1555
+ AXP_NAME_PROPERTY,
1556
+ AXP_DATA_PATH_PROPERTY,
1557
+ AXP_DISABLED_PROPERTY,
1558
+ ],
1559
+ components: {
1560
+ edit: {
1561
+ component: () => Promise.resolve().then(function () { return fontSizeChooserWidget_component; }).then((c) => c.AXPFontSizeChooserWidgetComponent),
1562
+ },
1563
+ }
1564
+ };
1565
+
1566
+ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
1567
+ constructor() {
1568
+ super(...arguments);
1569
+ this.fonts = signal([
1570
+ { id: 'system-ui', title: 'Default' },
1571
+ { id: 'serif', title: 'Serif' },
1572
+ { id: 'sans-serif', title: 'Sans-serif' },
1573
+ { id: 'monospace', title: 'Monospace' },
1574
+ { id: 'arial', title: 'Arial' },
1575
+ { id: 'verdana', title: 'Verdana' },
1576
+ { id: 'tahoma', title: 'Tahoma' },
1577
+ { id: 'times-new-roman', title: 'Times New Roman' },
1578
+ { id: 'georgia', title: 'Georgia' },
1579
+ { id: 'helvetica', title: 'Helvetica' },
1580
+ { id: 'calibri', title: 'Calibri' },
1581
+ { id: 'cursive', title: 'Cursive' },
1582
+ { id: 'vazirmatn', title: 'Vazir وزیر' },
1583
+ ], ...(ngDevMode ? [{ debugName: "fonts" }] : /* istanbul ignore next */ []));
1584
+ this.selectedFont = signal(null, ...(ngDevMode ? [{ debugName: "selectedFont" }] : /* istanbul ignore next */ []));
1585
+ this.#eff = effect(() => {
1586
+ if (this.getValue()) {
1587
+ this.selectedFont.set(this.fonts().find((f) => f.id === this.getValue()) ?? this.fonts()[0]);
1588
+ }
1589
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1590
+ }
1591
+ #eff;
1592
+ onFontClick(font) {
1593
+ this.setValue(font.id);
1594
+ }
1595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1596
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1597
+ @for (font of fonts(); track font.id) {
1598
+ <div
1599
+ (click)="onFontClick(font)"
1600
+ [class.--selected]="font.id === selectedFont()?.id"
1601
+ [style.font-family]="font.id"
1602
+ >
1603
+ <div>
1604
+ <span>{{ font.title }}</span>
1605
+ </div>
1606
+ </div>
1607
+ }
1608
+ `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1609
+ }
1610
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
1611
+ type: Component,
1612
+ args: [{ template: `
1613
+ @for (font of fonts(); track font.id) {
1614
+ <div
1615
+ (click)="onFontClick(font)"
1616
+ [class.--selected]="font.id === selectedFont()?.id"
1617
+ [style.font-family]="font.id"
1618
+ >
1619
+ <div>
1620
+ <span>{{ font.title }}</span>
1621
+ </div>
1622
+ </div>
1623
+ }
1624
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, AXSelectionCdkModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}\n"] }]
1625
+ }] });
1626
+
1627
+ var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
1628
+ __proto__: null,
1629
+ AXPFontStyleChooserWidgetComponent: AXPFontStyleChooserWidgetComponent
1630
+ });
1631
+
1632
+ const AXPFontStyleChooserWidget = {
1633
+ name: "font-style-chooser",
1634
+ title: "Font Style Chooser",
1635
+ icon: "fa-light fa-font",
1636
+ type: 'editor',
1637
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1638
+ properties: [
1639
+ AXP_NAME_PROPERTY,
1640
+ AXP_DATA_PATH_PROPERTY,
1641
+ AXP_DISABLED_PROPERTY,
1642
+ ],
1643
+ components: {
1644
+ edit: {
1645
+ component: () => Promise.resolve().then(function () { return fontStyleChooserWidget_component; }).then((c) => c.AXPFontStyleChooserWidgetComponent),
1646
+ },
1647
+ }
1648
+ };
1818
1649
 
1819
1650
  class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
1820
1651
  constructor() {
1821
1652
  super(...arguments);
1822
- this.orientations = signal([
1823
- { id: 'vertical', icon: 'fa-regular fa-square-ellipsis-vertical' },
1824
- { id: 'horizontal', icon: 'fa-regular fa-square-ellipsis' },
1825
- ], ...(ngDevMode ? [{ debugName: "orientations" }] : []));
1826
- this.selectedOrientation = signal(null, ...(ngDevMode ? [{ debugName: "selectedOrientation" }] : []));
1653
+ this.orientations = computed(() => this.options()['chooser'] === 'vertical-mode'
1654
+ ? [
1655
+ { id: 'compact', image: '/assets/images/menu-mode/compact.svg' },
1656
+ { id: 'full', image: '/assets/images/menu-mode/full.svg' },
1657
+ ]
1658
+ : [
1659
+ { id: 'vertical', icon: 'fa-regular fa-square-ellipsis-vertical' },
1660
+ { id: 'horizontal', icon: 'fa-regular fa-square-ellipsis' },
1661
+ ], ...(ngDevMode ? [{ debugName: "orientations" }] : /* istanbul ignore next */ []));
1662
+ this.selectedOrientation = signal(null, ...(ngDevMode ? [{ debugName: "selectedOrientation" }] : /* istanbul ignore next */ []));
1827
1663
  this.#eff = effect(() => {
1828
- if (this.getValue()) {
1829
- this.selectedOrientation.set(this.orientations().find((o) => o.id === this.getValue()) ?? this.orientations()[0]);
1664
+ const options = this.orientations();
1665
+ const value = this.getValue();
1666
+ if (value) {
1667
+ this.selectedOrientation.set(options.find((o) => o.id === value) ?? options[0]);
1830
1668
  }
1831
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
1669
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1832
1670
  }
1833
1671
  #eff;
1834
1672
  onOrientationClick(orientation) {
1835
1673
  this.setValue(orientation.id);
1836
1674
  }
1837
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1838
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPMenuOrientationChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1675
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1676
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPMenuOrientationChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1839
1677
  @for (orientation of orientations(); track orientation.id) {
1840
1678
  <div (click)="onOrientationClick(orientation)" [class.--selected]="orientation.id === selectedOrientation()?.id">
1841
- <div>
1679
+ @if (orientation.image) {
1680
+ <img [src]="orientation.image" alt="" />
1681
+ } @else {
1842
1682
  <i [class]="orientation.icon"></i>
1843
- </div>
1844
- <span>{{ '@layout:terms.menu-modes.' + orientation.id | translate | async }}</span>
1683
+ <span>{{ '@layout:terms.menu-modes.' + orientation.id | translate | async }}</span>
1684
+ }
1845
1685
  </div>
1846
1686
  }
1847
- `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1687
+ `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>div img{height:2rem;width:auto}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1848
1688
  }
1849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
1689
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
1850
1690
  type: Component,
1851
1691
  args: [{ template: `
1852
1692
  @for (orientation of orientations(); track orientation.id) {
1853
1693
  <div (click)="onOrientationClick(orientation)" [class.--selected]="orientation.id === selectedOrientation()?.id">
1854
- <div>
1694
+ @if (orientation.image) {
1695
+ <img [src]="orientation.image" alt="" />
1696
+ } @else {
1855
1697
  <i [class]="orientation.icon"></i>
1856
- </div>
1857
- <span>{{ '@layout:terms.menu-modes.' + orientation.id | translate | async }}</span>
1698
+ <span>{{ '@layout:terms.menu-modes.' + orientation.id | translate | async }}</span>
1699
+ }
1858
1700
  </div>
1859
1701
  }
1860
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"] }]
1702
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>div img{height:2rem;width:auto}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"] }]
1861
1703
  }] });
1862
1704
 
1863
1705
  var menuOrientationChooserWidget_component = /*#__PURE__*/Object.freeze({
@@ -1883,6 +1725,318 @@ const AXPMenuOrientationChooserWidget = {
1883
1725
  }
1884
1726
  };
1885
1727
 
1728
+ //#endregion
1729
+ //#region ---- Color utilities ----
1730
+ function hexToRgb(hex) {
1731
+ const normalized = hex.trim().replace(/^#/, '');
1732
+ const full = normalized.length === 3
1733
+ ? normalized
1734
+ .split('')
1735
+ .map((c) => c + c)
1736
+ .join('')
1737
+ : normalized;
1738
+ return [
1739
+ parseInt(full.slice(0, 2), 16),
1740
+ parseInt(full.slice(2, 4), 16),
1741
+ parseInt(full.slice(4, 6), 16),
1742
+ ];
1743
+ }
1744
+ function relativeLuminance(hex) {
1745
+ const [r, g, b] = hexToRgb(hex).map((c) => {
1746
+ const s = c / 255;
1747
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
1748
+ });
1749
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
1750
+ }
1751
+ function contrastForeground(backgroundHex) {
1752
+ return relativeLuminance(backgroundHex) > 0.55 ? '#171717' : '#ffffff';
1753
+ }
1754
+ function titleCase(str) {
1755
+ return str.replace(/-/g, ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase());
1756
+ }
1757
+ //#endregion
1758
+ //#region ---- Surface variants (palette-synchronized) ----
1759
+ /**
1760
+ * Seven tonal steps per semantic color. Backgrounds are mixed in RGB using the **same palette’s**
1761
+ * canvas `light` and `dark` as poles so swatches stay aligned with `AXPThemePaletteProvider` data.
1762
+ */
1763
+ const SURFACE_VARIANTS = ['lightest', 'lighter', 'light', 'surface', 'dark', 'darker', 'darkest'];
1764
+ function styleTitlePrefix(style) {
1765
+ const accentMatch = /^accent(\d+)$/.exec(style);
1766
+ if (accentMatch) {
1767
+ return `Accent ${accentMatch[1]}`;
1768
+ }
1769
+ return titleCase(style);
1770
+ }
1771
+ function surfaceVariantTitle(style, variant) {
1772
+ if (variant === 'surface') {
1773
+ return styleTitlePrefix(style);
1774
+ }
1775
+ return `${styleTitlePrefix(style)} ${titleCase(variant)}`;
1776
+ }
1777
+ /** Tailwind utility triplet stored by theme-color-chooser and outcome display rules. */
1778
+ function buildThemeSurfaceColorTriplet(styleKey, variant) {
1779
+ return {
1780
+ color: `ax-text-${styleKey}-on-${variant}`,
1781
+ background: `ax-bg-${styleKey}-${variant}`,
1782
+ border: `ax-border-${styleKey}-${variant}`,
1783
+ };
1784
+ }
1785
+ /** Ordered `"foreground background border"` string for theme-color-chooser values. */
1786
+ function buildThemeSurfaceColorValue(styleKey, variant = 'lightest') {
1787
+ const triplet = buildThemeSurfaceColorTriplet(styleKey, variant);
1788
+ return `${triplet.color} ${triplet.background} ${triplet.border}`;
1789
+ }
1790
+ function pushVariantScale(entries, styleKey, _baseHex, _canvas) {
1791
+ for (const variant of SURFACE_VARIANTS) {
1792
+ const name = `${styleKey}-${variant}`;
1793
+ entries.push({
1794
+ title: surfaceVariantTitle(styleKey, variant),
1795
+ name,
1796
+ ...buildThemeSurfaceColorTriplet(styleKey, variant),
1797
+ });
1798
+ }
1799
+ }
1800
+ function pushFlatSwatch(entries, title, name, hex) {
1801
+ const color = contrastForeground(hex);
1802
+ entries.push({ title, name, color, background: hex, border: hex });
1803
+ }
1804
+ /**
1805
+ * Builds the full chooser list from a single `AXPThemePalette` (colors object only).
1806
+ */
1807
+ function buildColorsFromThemePalette(palette) {
1808
+ const colors = palette.colors;
1809
+ const canvas = { light: colors.light, dark: colors.dark };
1810
+ const entries = [];
1811
+ const core = ['primary', 'secondary', 'success', 'warning', 'danger'];
1812
+ for (const key of core) {
1813
+ pushVariantScale(entries, key, colors[key], canvas);
1814
+ }
1815
+ const neutral = colors.neutral;
1816
+ if (neutral) {
1817
+ pushVariantScale(entries, 'neutral', neutral, canvas);
1818
+ }
1819
+ colors.accents.forEach((hex, index) => {
1820
+ pushVariantScale(entries, `accent${index + 1}`, hex, canvas);
1821
+ });
1822
+ pushFlatSwatch(entries, 'Canvas Light', 'canvas-light', colors.light);
1823
+ pushFlatSwatch(entries, 'Canvas Dark', 'canvas-dark', colors.dark);
1824
+ return entries;
1825
+ }
1826
+ //#endregion
1827
+ //#region ---- Service ----
1828
+ class AXPColorChooserService {
1829
+ constructor() {
1830
+ this.themeStore = inject(AXPLayoutThemeService);
1831
+ this.palettePromise = inject(AXP_THEME_PALETTE_PROVIDER);
1832
+ this.cacheKey = null;
1833
+ this.cache = null;
1834
+ }
1835
+ async getColors() {
1836
+ const paletteName = this.themeStore.currentPalette();
1837
+ if (this.cache && this.cacheKey === paletteName) {
1838
+ return this.cache;
1839
+ }
1840
+ const provider = await this.palettePromise;
1841
+ const list = await provider.getList();
1842
+ const palette = list.find((p) => p.name === paletteName) ?? list.find((p) => p.name === 'default') ?? list[0] ?? null;
1843
+ const colors = palette ? buildColorsFromThemePalette(palette) : [];
1844
+ this.cacheKey = paletteName;
1845
+ this.cache = colors;
1846
+ return colors;
1847
+ }
1848
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1849
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, providedIn: 'root' }); }
1850
+ }
1851
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, decorators: [{
1852
+ type: Injectable,
1853
+ args: [{
1854
+ providedIn: 'root',
1855
+ }]
1856
+ }] });
1857
+
1858
+ class AXPColorChooserWidgetEditComponent extends AXPValueWidgetComponent {
1859
+ constructor() {
1860
+ super(...arguments);
1861
+ this.colorService = inject(AXPColorChooserService);
1862
+ this.colors = signal([], ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
1863
+ this.placeholder = computed(() => this.options()['placeholder'] ?? '', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1864
+ this.selectedColor = computed(() => {
1865
+ const value = this.getValue();
1866
+ const fallbackName = () => this.colors()[0]?.name;
1867
+ if (!value) {
1868
+ return fallbackName();
1869
+ }
1870
+ if (typeof value === 'string') {
1871
+ const parsed = this.parseStringValue(value);
1872
+ if (parsed) {
1873
+ return parsed;
1874
+ }
1875
+ return fallbackName();
1876
+ }
1877
+ return value.name;
1878
+ }, ...(ngDevMode ? [{ debugName: "selectedColor" }] : /* istanbul ignore next */ []));
1879
+ }
1880
+ async ngOnInit() {
1881
+ const allColors = await this.colorService.getColors();
1882
+ this.colors.set(allColors);
1883
+ super.ngOnInit();
1884
+ }
1885
+ handleValueChange(event) {
1886
+ if (event.isUserInteraction) {
1887
+ if (!event.value) {
1888
+ this.setValue(undefined);
1889
+ return;
1890
+ }
1891
+ const color = event.component.selectedItems[0];
1892
+ // Always store as ordered string: "color background border"
1893
+ const stringValue = `${color.color} ${color.background} ${color.border}`;
1894
+ this.setValue(stringValue);
1895
+ }
1896
+ }
1897
+ isHexSwatch(color) {
1898
+ return color.background.startsWith('#');
1899
+ }
1900
+ parseStringValue(value) {
1901
+ const parts = value.trim().split(/\s+/);
1902
+ if (parts.length !== 3) {
1903
+ return null;
1904
+ }
1905
+ const [color, background, border] = parts;
1906
+ const exactMatch = this.colors().find((entry) => entry.color === color && entry.background === background && entry.border === border);
1907
+ if (exactMatch) {
1908
+ return exactMatch.name;
1909
+ }
1910
+ const backgroundMatch = /^ax-bg-(.+)-(.+)$/.exec(background);
1911
+ if (backgroundMatch) {
1912
+ const name = `${backgroundMatch[1]}-${backgroundMatch[2]}`;
1913
+ if (this.colors().some((entry) => entry.name === name)) {
1914
+ return name;
1915
+ }
1916
+ }
1917
+ return null;
1918
+ }
1919
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1920
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPColorChooserWidgetEditComponent, isStandalone: true, selector: "ax-color-chooser-widget", host: { classAttribute: "ax-block ax-flex-1 ax-w-full" }, usesInheritance: true, ngImport: i0, template: `
1921
+ <ax-form [messageStyle]="'float'" [updateOn]="'change'">
1922
+ <ax-form-field>
1923
+ <ax-select-box
1924
+ [dataSource]="colors()"
1925
+ textField="title"
1926
+ valueField="name"
1927
+ [placeholder]="placeholder()"
1928
+ [itemTemplate]="customItemTemplate"
1929
+ [ngModel]="selectedColor()"
1930
+ (onValueChanged)="handleValueChange($event)"
1931
+ [selectedTemplate]="customItemTemplate"
1932
+ >
1933
+ <ng-template #customItemTemplate let-item>
1934
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
1935
+ @if (isHexSwatch(item.data)) {
1936
+ <div
1937
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-solid"
1938
+ [style.background-color]="item.data.background"
1939
+ [style.border-color]="item.data.border"
1940
+ [style.color]="item.data.color"
1941
+ >
1942
+ <span>Aa</span>
1943
+ </div>
1944
+ } @else {
1945
+ <div
1946
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
1947
+ [class]="item.data.background"
1948
+ >
1949
+ <span [class]="item.data.color">Aa</span>
1950
+ </div>
1951
+ }
1952
+ <span>{{ item.data.title }}</span>
1953
+ </div>
1954
+ </ng-template>
1955
+ <ax-search-box look="fill"></ax-search-box>
1956
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
1957
+ </ax-select-box>
1958
+ </ax-form-field>
1959
+ </ax-form>
1960
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXSelectBoxModule }, { kind: "component", type: i1$2.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "isItemTruncated", "showItemTooltip", "itemHeight", "maxVisibleItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed", "onItemSelected", "onItemClick"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "component", type: i2$2.AXFormFieldComponent, selector: "ax-form-field", inputs: ["labelMode"] }, { kind: "component", type: i2$2.AXFormComponent, selector: "ax-form", inputs: ["disabled", "readonly", "labelMode", "look", "messageStyle", "updateOn", "inUserInteractionActive"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i2$2.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message", "disabled"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i1$1.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { 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 }); }
1961
+ }
1962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserWidgetEditComponent, decorators: [{
1963
+ type: Component,
1964
+ args: [{
1965
+ selector: 'ax-color-chooser-widget',
1966
+ template: `
1967
+ <ax-form [messageStyle]="'float'" [updateOn]="'change'">
1968
+ <ax-form-field>
1969
+ <ax-select-box
1970
+ [dataSource]="colors()"
1971
+ textField="title"
1972
+ valueField="name"
1973
+ [placeholder]="placeholder()"
1974
+ [itemTemplate]="customItemTemplate"
1975
+ [ngModel]="selectedColor()"
1976
+ (onValueChanged)="handleValueChange($event)"
1977
+ [selectedTemplate]="customItemTemplate"
1978
+ >
1979
+ <ng-template #customItemTemplate let-item>
1980
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
1981
+ @if (isHexSwatch(item.data)) {
1982
+ <div
1983
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-solid"
1984
+ [style.background-color]="item.data.background"
1985
+ [style.border-color]="item.data.border"
1986
+ [style.color]="item.data.color"
1987
+ >
1988
+ <span>Aa</span>
1989
+ </div>
1990
+ } @else {
1991
+ <div
1992
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
1993
+ [class]="item.data.background"
1994
+ >
1995
+ <span [class]="item.data.color">Aa</span>
1996
+ </div>
1997
+ }
1998
+ <span>{{ item.data.title }}</span>
1999
+ </div>
2000
+ </ng-template>
2001
+ <ax-search-box look="fill"></ax-search-box>
2002
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
2003
+ </ax-select-box>
2004
+ </ax-form-field>
2005
+ </ax-form>
2006
+ `,
2007
+ host: {
2008
+ class: 'ax-block ax-flex-1 ax-w-full',
2009
+ },
2010
+ imports: [AXSelectBoxModule, AXFormModule, CommonModule, AXSearchBoxModule, AXButtonModule, FormsModule],
2011
+ changeDetection: ChangeDetectionStrategy.OnPush,
2012
+ }]
2013
+ }] });
2014
+
2015
+ var themeColorChooserEdit_component = /*#__PURE__*/Object.freeze({
2016
+ __proto__: null,
2017
+ AXPColorChooserWidgetEditComponent: AXPColorChooserWidgetEditComponent
2018
+ });
2019
+
2020
+ const AXPThemeColorChooserWidgetConfig = {
2021
+ name: 'theme-color-chooser',
2022
+ title: 'Theme Color Chooser',
2023
+ icon: 'fa-light fa-palette',
2024
+ type: 'editor',
2025
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
2026
+ properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
2027
+ components: {
2028
+ edit: {
2029
+ component: () => Promise.resolve().then(function () { return themeColorChooserEdit_component; }).then((c) => c.AXPColorChooserWidgetEditComponent),
2030
+ },
2031
+ column: {
2032
+ component: () => import('./acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs').then((c) => c.AXPColorChooserWidgetColumnComponent),
2033
+ },
2034
+ view: {
2035
+ component: () => import('./acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs').then((c) => c.AXPColorChooserWidgetViewComponent),
2036
+ },
2037
+ },
2038
+ };
2039
+
1886
2040
  class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1887
2041
  constructor() {
1888
2042
  super(...arguments);
@@ -1890,20 +2044,20 @@ class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1890
2044
  { id: AXPThemeMode.Light, icon: 'fa-light fa-brightness' },
1891
2045
  { id: AXPThemeMode.Dark, icon: 'fa-light fa-moon' },
1892
2046
  { id: AXPThemeMode.System, icon: 'fa-light fa-desktop' },
1893
- ], ...(ngDevMode ? [{ debugName: "modes" }] : []));
1894
- this.selectedMode = signal(null, ...(ngDevMode ? [{ debugName: "selectedMode" }] : []));
2047
+ ], ...(ngDevMode ? [{ debugName: "modes" }] : /* istanbul ignore next */ []));
2048
+ this.selectedMode = signal(null, ...(ngDevMode ? [{ debugName: "selectedMode" }] : /* istanbul ignore next */ []));
1895
2049
  this.#eff = effect(() => {
1896
2050
  if (this.getValue()) {
1897
2051
  this.selectedMode.set(this.modes().find((m) => m.id === this.getValue()) ?? this.modes()[0]);
1898
2052
  }
1899
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
2053
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1900
2054
  }
1901
2055
  #eff;
1902
2056
  onModeClick(mode) {
1903
2057
  this.setValue(mode.id);
1904
2058
  }
1905
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1906
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPThemeModeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2059
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2060
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPThemeModeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1907
2061
  @for (mode of modes(); track mode.id) {
1908
2062
  <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
1909
2063
  <div>
@@ -1914,7 +2068,7 @@ class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1914
2068
  }
1915
2069
  `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1916
2070
  }
1917
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
2071
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
1918
2072
  type: Component,
1919
2073
  args: [{ template: `
1920
2074
  @for (mode of modes(); track mode.id) {
@@ -1936,7 +2090,7 @@ var themeModeChooserWidget_component = /*#__PURE__*/Object.freeze({
1936
2090
  const AXPThemeModeChooserWidget = {
1937
2091
  name: "theme-mode-chooser",
1938
2092
  title: "Theme Mode Chooser",
1939
- icon: "fa-solid fa-square",
2093
+ icon: "fa-light fa-square",
1940
2094
  type: 'editor',
1941
2095
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1942
2096
  properties: [
@@ -1955,15 +2109,15 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1955
2109
  constructor() {
1956
2110
  super(...arguments);
1957
2111
  this.paletteService = inject(AXP_THEME_PALETTE_PROVIDER);
1958
- this.palettes = signal([], ...(ngDevMode ? [{ debugName: "palettes" }] : []));
1959
- this.selectedPalette = signal(null, ...(ngDevMode ? [{ debugName: "selectedPalette" }] : []));
2112
+ this.palettes = signal([], ...(ngDevMode ? [{ debugName: "palettes" }] : /* istanbul ignore next */ []));
2113
+ this.selectedPalette = signal(null, ...(ngDevMode ? [{ debugName: "selectedPalette" }] : /* istanbul ignore next */ []));
1960
2114
  this.#eff = effect(() => {
1961
2115
  if (this.getValue()) {
1962
2116
  this.selectedPalette.set(this.palettes().find((p) => p.name === this.getValue()) ??
1963
2117
  this.palettes().find((p) => p.name === 'default') ??
1964
2118
  this.palettes()[0]);
1965
2119
  }
1966
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
2120
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1967
2121
  }
1968
2122
  #eff;
1969
2123
  async ngOnInit() {
@@ -1974,8 +2128,8 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1974
2128
  onPaletteClick(palette) {
1975
2129
  this.setValue(palette.name);
1976
2130
  }
1977
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1978
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.12", type: AXPThemePaletteChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
2131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPThemePaletteChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1979
2133
  @for (palette of palettes(); track palette.name) {
1980
2134
  <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
1981
2135
  <span>{{ palette.title }}</span>
@@ -1986,9 +2140,9 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1986
2140
  </div>
1987
2141
  </div>
1988
2142
  }
1989
- `, isInline: true, styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{height:3rem;min-width:100%}@media (min-width: 768px){:host>div{min-width:16rem}}:host>div>div{position:relative;height:100%;width:fit-content}:host>div>div div{position:absolute;height:2rem;width:2rem;border-radius:9999px;border-width:1px;border-color:#ffffff80;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2143
+ `, isInline: true, styles: [":host{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{height:3rem;min-width:100%}@media(min-width:768px){:host>div{min-width:16rem}}:host>div>div{position:relative;height:100%;width:fit-content}:host>div>div div{position:absolute;height:2rem;width:2rem;border-radius:9999px;border-width:1px;border-color:#ffffff80;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1990
2144
  }
1991
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
2145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
1992
2146
  type: Component,
1993
2147
  args: [{ template: `
1994
2148
  @for (palette of palettes(); track palette.name) {
@@ -2001,7 +2155,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2001
2155
  </div>
2002
2156
  </div>
2003
2157
  }
2004
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, AXSelectionCdkModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{height:3rem;min-width:100%}@media (min-width: 768px){:host>div{min-width:16rem}}:host>div>div{position:relative;height:100%;width:fit-content}:host>div>div div{position:absolute;height:2rem;width:2rem;border-radius:9999px;border-width:1px;border-color:#ffffff80;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"] }]
2158
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FormsModule, AXSelectionCdkModule], styles: [":host{display:flex;width:100%;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{height:3rem;min-width:100%}@media(min-width:768px){:host>div{min-width:16rem}}:host>div>div{position:relative;height:100%;width:fit-content}:host>div>div div{position:absolute;height:2rem;width:2rem;border-radius:9999px;border-width:1px;border-color:#ffffff80;--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}\n"] }]
2005
2159
  }] });
2006
2160
 
2007
2161
  var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
@@ -2012,7 +2166,7 @@ var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
2012
2166
  const AXPThemePaletteChooserWidget = {
2013
2167
  name: "theme-palette-chooser",
2014
2168
  title: "Theme Palette Chooser",
2015
- icon: "fa-solid fa-square",
2169
+ icon: "fa-light fa-square",
2016
2170
  type: 'editor',
2017
2171
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
2018
2172
  properties: [
@@ -2027,26 +2181,49 @@ const AXPThemePaletteChooserWidget = {
2027
2181
  }
2028
2182
  };
2029
2183
 
2184
+ //#endregion
2185
+ //#region ---- Theme Widgets Provider ----
2186
+ const WIDGETS = [
2187
+ AXPThemePaletteChooserWidget,
2188
+ AXPThemeModeChooserWidget,
2189
+ AXPMenuOrientationChooserWidget,
2190
+ AXPFontSizeChooserWidget,
2191
+ AXPFontStyleChooserWidget,
2192
+ AXPIconChooserWidget,
2193
+ AXPThemeColorChooserWidgetConfig,
2194
+ ];
2195
+ class AXPThemesSharedWidgetsProvider {
2196
+ getWidgets() {
2197
+ return WIDGETS;
2198
+ }
2199
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2200
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider }); }
2201
+ }
2202
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider, decorators: [{
2203
+ type: Injectable
2204
+ }] });
2205
+
2030
2206
  class AXPThemesSharedModule {
2031
2207
  constructor(appInitService, injector) {
2032
2208
  const service = injector.get(AXPLayoutThemeService);
2033
2209
  appInitService.registerTask({
2034
2210
  name: 'layout-theme',
2035
- statusText: 'Applying layout theme settings ...',
2211
+ statusText: '@layout:app-startup.applying-theme-settings',
2036
2212
  priority: 100,
2037
2213
  run: async () => {
2038
2214
  await service.loadSettings();
2039
2215
  },
2040
2216
  });
2041
2217
  }
2042
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemesSharedModule, deps: [{ token: i1$2.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
2043
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.12", ngImport: i0, type: AXPThemesSharedModule, imports: [i2$3.AXPComponentSlotModule, i3$1.AXPWidgetCoreModule] }); }
2044
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemesSharedModule, providers: [
2218
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, deps: [{ token: i1$3.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
2219
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, imports: [i1$3.AXPComponentSlotModule, AXPWidgetCoreModule] }); }
2220
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, providers: [
2221
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
2045
2222
  {
2046
2223
  provide: AXP_SETTING_DEFINITION_PROVIDER,
2047
2224
  useFactory: async () => {
2048
2225
  const injector = inject(Injector);
2049
- const provider = (await import('./acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs')).AXPThemeSettingProvider;
2226
+ const provider = (await import('./acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs')).AXPThemeSettingProvider;
2050
2227
  return new provider(injector);
2051
2228
  },
2052
2229
  multi: true,
@@ -2061,19 +2238,9 @@ class AXPThemesSharedModule {
2061
2238
  },
2062
2239
  ],
2063
2240
  }),
2064
- AXPWidgetCoreModule.forChild({
2065
- widgets: [
2066
- AXPThemePaletteChooserWidget,
2067
- AXPThemeModeChooserWidget,
2068
- AXPMenuOrientationChooserWidget,
2069
- AXPFontSizeChooserWidget,
2070
- AXPFontStyleChooserWidget,
2071
- AXPIconChooserWidget,
2072
- AXPThemeColorChooserWidgetConfig,
2073
- ],
2074
- })] }); }
2241
+ AXPWidgetCoreModule] }); }
2075
2242
  }
2076
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
2243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
2077
2244
  type: NgModule,
2078
2245
  args: [{
2079
2246
  imports: [
@@ -2086,26 +2253,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2086
2253
  },
2087
2254
  ],
2088
2255
  }),
2089
- AXPWidgetCoreModule.forChild({
2090
- widgets: [
2091
- AXPThemePaletteChooserWidget,
2092
- AXPThemeModeChooserWidget,
2093
- AXPMenuOrientationChooserWidget,
2094
- AXPFontSizeChooserWidget,
2095
- AXPFontStyleChooserWidget,
2096
- AXPIconChooserWidget,
2097
- AXPThemeColorChooserWidgetConfig,
2098
- ],
2099
- }),
2256
+ AXPWidgetCoreModule,
2100
2257
  ],
2101
2258
  exports: [],
2102
2259
  declarations: [],
2103
2260
  providers: [
2261
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
2104
2262
  {
2105
2263
  provide: AXP_SETTING_DEFINITION_PROVIDER,
2106
2264
  useFactory: async () => {
2107
2265
  const injector = inject(Injector);
2108
- const provider = (await import('./acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs')).AXPThemeSettingProvider;
2266
+ const provider = (await import('./acorex-platform-themes-shared-settings.provider-BjuzSe0T.mjs')).AXPThemeSettingProvider;
2109
2267
  return new provider(injector);
2110
2268
  },
2111
2269
  multi: true,
@@ -2113,11 +2271,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2113
2271
  ...provideDefaultIconChooser(),
2114
2272
  ],
2115
2273
  }]
2116
- }], ctorParameters: () => [{ type: i1$2.AXPAppStartUpService }, { type: i0.Injector }] });
2274
+ }], ctorParameters: () => [{ type: i1$3.AXPAppStartUpService }, { type: i0.Injector }] });
2117
2275
 
2118
2276
  /**
2119
2277
  * Generated bundle index. Do not edit.
2120
2278
  */
2121
2279
 
2122
- export { AXPLayoutThemeService, AXPMenuOrientation, AXPSideMenuState, AXPThemeLayoutSetting, AXPThemeMode, AXPThemePaletteProviderDefault, AXPThemeSlotComponent, AXPThemesSharedModule, AXP_THEME_PALETTE_PROVIDER };
2280
+ 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 };
2123
2281
  //# sourceMappingURL=acorex-platform-themes-shared.mjs.map