@acorex/platform 21.0.0-next.5 → 21.0.0-next.51

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 (124) 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 +1047 -263
  6. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-core.mjs +1138 -510
  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 +804 -186
  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 +6208 -2344
  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.mjs +18632 -10286
  20. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-layout-views.mjs +538 -168
  22. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  23. package/fesm2022/acorex-platform-layout-widget-core.mjs +720 -456
  24. package/fesm2022/acorex-platform-layout-widget-core.mjs.map +1 -1
  25. 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
  26. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-Dy7jF-oD.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs +103 -0
  28. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CDYAGBku.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs → acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs} +6 -7
  30. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-C_EPAvCU.mjs.map +1 -0
  31. package/fesm2022/{acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs → acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs} +12 -12
  32. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-D10yO28c.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs +116 -0
  34. package/fesm2022/acorex-platform-layout-widgets-repeater-widget-column.component-BGO75IMz.mjs.map +1 -0
  35. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs → acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs} +6 -6
  36. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-DmzNTYiS.mjs.map +1 -0
  37. package/fesm2022/{acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs → acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs} +5 -5
  38. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-BNG_588B.mjs.map +1 -0
  39. 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
  40. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Vo4fWHtX.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-layout-widgets.mjs +8728 -4269
  42. package/fesm2022/acorex-platform-layout-widgets.mjs.map +1 -1
  43. package/fesm2022/acorex-platform-native.mjs +8 -7
  44. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  45. package/fesm2022/acorex-platform-runtime.mjs +391 -166
  46. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  47. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs +160 -0
  48. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cx1lLUaR.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs +120 -0
  50. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-AOrcgjDF.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs → acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs} +19 -26
  52. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BfCeUU5F.mjs.map +1 -0
  53. package/fesm2022/{acorex-platform-themes-default-error-401.component-cfREo88K.mjs → acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs} +4 -4
  54. package/fesm2022/acorex-platform-themes-default-error-401.component-C7EYJzSr.mjs.map +1 -0
  55. package/fesm2022/{acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs → acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs} +4 -4
  56. package/fesm2022/acorex-platform-themes-default-error-404.component-7MVLMwIa.mjs.map +1 -0
  57. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs +19 -0
  58. package/fesm2022/acorex-platform-themes-default-error-offline.component-DR6G8gPC.mjs.map +1 -0
  59. package/fesm2022/acorex-platform-themes-default.mjs +1836 -67
  60. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  61. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs → acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs} +6 -6
  62. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs.map +1 -0
  63. package/fesm2022/{acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs → acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs} +6 -6
  64. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs.map +1 -0
  65. package/fesm2022/{acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs → acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs} +24 -25
  66. package/fesm2022/acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs.map +1 -0
  67. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs +94 -0
  68. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs.map +1 -0
  69. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs +86 -0
  70. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs.map +1 -0
  71. package/fesm2022/acorex-platform-themes-shared.mjs +674 -573
  72. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  73. package/fesm2022/acorex-platform-workflow.mjs +1715 -535
  74. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  75. package/fesm2022/acorex-platform.mjs.map +1 -1
  76. package/package.json +37 -37
  77. package/{auth/index.d.ts → types/acorex-platform-auth.d.ts} +241 -4
  78. package/{common/index.d.ts → types/acorex-platform-common.d.ts} +598 -80
  79. package/{core/index.d.ts → types/acorex-platform-core.d.ts} +595 -132
  80. package/{domain/index.d.ts → types/acorex-platform-domain.d.ts} +744 -412
  81. package/{layout/builder/index.d.ts → types/acorex-platform-layout-builder.d.ts} +193 -48
  82. package/types/acorex-platform-layout-components.d.ts +2979 -0
  83. package/{layout/designer/index.d.ts → types/acorex-platform-layout-designer.d.ts} +96 -18
  84. package/{layout/entity/index.d.ts → types/acorex-platform-layout-entity.d.ts} +1601 -261
  85. package/{layout/views/index.d.ts → types/acorex-platform-layout-views.d.ts} +116 -55
  86. package/{layout/widget-core/index.d.ts → types/acorex-platform-layout-widget-core.d.ts} +272 -124
  87. package/{layout/widgets/index.d.ts → types/acorex-platform-layout-widgets.d.ts} +1055 -157
  88. package/{native/index.d.ts → types/acorex-platform-native.d.ts} +0 -7
  89. package/types/acorex-platform-runtime.d.ts +571 -0
  90. package/{themes/default/index.d.ts → types/acorex-platform-themes-default.d.ts} +122 -5
  91. package/{themes/shared/index.d.ts → types/acorex-platform-themes-shared.d.ts} +1 -1
  92. package/types/acorex-platform-workflow.d.ts +1884 -0
  93. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs +0 -71
  94. package/fesm2022/acorex-platform-common-common-settings.provider-zhqNP3xb.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-layout-widgets-button-widget-designer.component-C3VoBb_b.mjs.map +0 -1
  96. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs +0 -135
  97. package/fesm2022/acorex-platform-layout-widgets-file-list-popup.component-CxrsI6Hn.mjs.map +0 -1
  98. package/fesm2022/acorex-platform-layout-widgets-image-preview.popup-V31OpYah.mjs.map +0 -1
  99. package/fesm2022/acorex-platform-layout-widgets-page-widget-designer.component-BtZMBxYp.mjs.map +0 -1
  100. package/fesm2022/acorex-platform-layout-widgets-tabular-data-edit-popup.component-Ck7-wpT2.mjs.map +0 -1
  101. package/fesm2022/acorex-platform-layout-widgets-tabular-data-view-popup.component-y8vjUiVs.mjs.map +0 -1
  102. package/fesm2022/acorex-platform-layout-widgets-text-block-widget-designer.component-Df1BFkSa.mjs.map +0 -1
  103. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs +0 -157
  104. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-VIGuU5M4.mjs.map +0 -1
  105. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs +0 -1542
  106. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DyDa_hyd.mjs.map +0 -1
  107. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs +0 -101
  108. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-Ua3ZA5hk.mjs.map +0 -1
  109. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-eMBby9k4.mjs.map +0 -1
  110. package/fesm2022/acorex-platform-themes-default-error-401.component-cfREo88K.mjs.map +0 -1
  111. package/fesm2022/acorex-platform-themes-default-error-404.component-CdCV5ZoA.mjs.map +0 -1
  112. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs +0 -19
  113. package/fesm2022/acorex-platform-themes-default-error-offline.component-E7SzBcAt.mjs.map +0 -1
  114. package/fesm2022/acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs.map +0 -1
  115. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs.map +0 -1
  116. package/fesm2022/acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs.map +0 -1
  117. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs +0 -65
  118. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-column.component-DTnfRy5f.mjs.map +0 -1
  119. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs +0 -64
  120. package/fesm2022/acorex-platform-themes-shared-theme-color-chooser-view.component-DY0JtT1v.mjs.map +0 -1
  121. package/layout/components/index.d.ts +0 -1669
  122. package/runtime/index.d.ts +0 -307
  123. package/workflow/index.d.ts +0 -1808
  124. /package/{index.d.ts → types/acorex-platform.d.ts} +0 -0
@@ -7,33 +7,30 @@ 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_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 { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex/platform/layout/widgets';
27
+ import { AXSelectionCdkModule } from '@acorex/cdk/selection';
28
+ import * as i4$1 from '@angular/forms';
29
+ import { FormsModule } from '@angular/forms';
30
+ import * as i2$2 from '@acorex/components/form';
31
+ import { AXFormModule } from '@acorex/components/form';
32
+ import * as i1$2 from '@acorex/components/select-box';
33
+ import { AXSelectBoxModule } from '@acorex/components/select-box';
37
34
 
38
35
  var AXPThemeLayoutSetting;
39
36
  (function (AXPThemeLayoutSetting) {
@@ -341,8 +338,8 @@ class AXPThemeSlotComponent {
341
338
  this.store = inject(AXPLayoutThemeService);
342
339
  this.variants = AXPThemeMode;
343
340
  }
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: `
341
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
342
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.9", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
346
343
  <ax-button color="primary">
347
344
  <ax-icon
348
345
  class="fa-regular "
@@ -385,9 +382,9 @@ class AXPThemeSlotComponent {
385
382
  </ax-button-item-list>
386
383
  </ax-dropdown-panel>
387
384
  </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" }] }); }
385
+ `, 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
386
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
391
388
  type: Component,
392
389
  args: [{
393
390
  template: `
@@ -434,7 +431,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
434
431
  </ax-dropdown-panel>
435
432
  </ax-button>
436
433
  `,
437
- imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule]
434
+ imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXDropdownModule, AXTranslationModule],
435
+ changeDetection: ChangeDetectionStrategy.OnPush,
438
436
  }]
439
437
  }] });
440
438
 
@@ -467,505 +465,131 @@ class AXPThemePaletteProviderDefault {
467
465
  }
468
466
  }
469
467
 
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;
468
+ //#region ---- Injection Tokens ----
469
+ /**
470
+ * Injection token for icon providers.
471
+ * Use multi: true to register multiple providers.
472
+ */
473
+ const AXP_ICON_PROVIDER = new InjectionToken('AXP_ICON_PROVIDER');
474
+ /**
475
+ * Injection token for icon style providers.
476
+ * Use multi: true to register multiple providers.
477
+ */
478
+ const AXP_ICON_STYLE_PROVIDER = new InjectionToken('AXP_ICON_STYLE_PROVIDER');
479
+ //#endregion
480
+
481
+ //#endregion
482
+ //#region ---- Abstract Providers ----
483
+ class AXPIconProvider {
509
484
  }
510
- const DEFAULT_COLORS = generateDefaultColors();
511
- class AXPColorProviderDefault extends AXPColorProvider {
512
- async provide() {
513
- return DEFAULT_COLORS;
514
- }
485
+ class AXPIconStyleProvider {
515
486
  }
516
- const AXP_COLOR_PROVIDER = new InjectionToken('AXP_COLOR_PROVIDER');
517
- class AXPColorChooserService {
487
+ //#endregion
488
+ //#region ---- Service ----
489
+ class AXPIconChooserService {
518
490
  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;
491
+ //#region ---- Properties ----
492
+ this.iconProviders = inject(AXP_ICON_PROVIDER, { optional: true }) ?? [];
493
+ this.styleProviders = inject(AXP_ICON_STYLE_PROVIDER, { optional: true }) ?? [];
494
+ this.iconsCache = null;
495
+ this.stylesCache = null;
529
496
  }
530
- async getColors() {
531
- if (this.cache) {
532
- return this.cache;
497
+ //#endregion
498
+ //#region ---- Public Methods ----
499
+ /**
500
+ * Get all available icon styles from registered providers.
501
+ * Results are cached after first call.
502
+ */
503
+ async getStyles() {
504
+ if (this.stylesCache) {
505
+ return this.stylesCache;
506
+ }
507
+ const allStyles = [];
508
+ for (const provider of this.styleProviders) {
509
+ const result = await provider.provide();
510
+ allStyles.push(...result);
511
+ }
512
+ // Remove duplicates based on style name
513
+ const uniqueStyles = allStyles.filter((style, index, self) => index === self.findIndex((s) => s.name === style.name));
514
+ this.stylesCache = uniqueStyles;
515
+ return uniqueStyles;
516
+ }
517
+ /**
518
+ * Get all available icons from registered providers.
519
+ * Icons from multiple providers are merged, with duplicates removed.
520
+ * Results are cached after first call.
521
+ */
522
+ async getIcons() {
523
+ if (this.iconsCache) {
524
+ return this.iconsCache;
533
525
  }
534
- const allColors = [];
535
- for (const resolver of this.providers) {
536
- const result = await resolver.provide();
537
- allColors.push(...result);
526
+ const allIcons = [];
527
+ for (const provider of this.iconProviders) {
528
+ const result = await provider.provide();
529
+ allIcons.push(...result);
538
530
  }
539
- const uniqueColors = allColors.filter((color, index, self) => index === self.findIndex((c) => c.title === color.title));
540
- this.cache = uniqueColors;
541
- return uniqueColors;
531
+ // Remove duplicates based on icon name, keeping first occurrence
532
+ const uniqueIcons = allIcons.filter((icon, index, self) => index === self.findIndex((i) => i.name === icon.name));
533
+ this.iconsCache = uniqueIcons;
534
+ return uniqueIcons;
542
535
  }
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' }); }
536
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
537
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, providedIn: 'root' }); }
545
538
  }
546
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPColorChooserService, decorators: [{
539
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserService, decorators: [{
547
540
  type: Injectable,
548
- args: [{
549
- providedIn: 'root',
550
- }]
541
+ args: [{ providedIn: 'root' }]
551
542
  }] });
552
543
 
553
- class AXPColorChooserWidgetEditComponent extends AXPValueWidgetComponent {
544
+ class AXPIconChooserPopupComponent extends AXBasePageComponent {
554
545
  constructor() {
555
546
  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" }] : []));
547
+ this.icons = [];
548
+ this.filteredIcons = [];
549
+ this.searchQuery = '';
550
+ this.viewModes = [
551
+ { value: 'square', text: '@general:widgets.icon-chooser.view-mode.square', icon: 'fa-solid fa-border-all' },
552
+ {
553
+ value: 'rectangle',
554
+ text: '@general:widgets.icon-chooser.view-mode.rectangle',
555
+ icon: 'fa-solid fa-list',
556
+ },
557
+ ];
558
+ this.selectedViewMode = 'square';
559
+ this.iconTypes = [];
560
+ this.selectedIconType = 'fa-solid';
561
+ this.popupService = inject(AXPIconChooserService);
575
562
  }
576
563
  async ngOnInit() {
577
- const allColors = await this.colorService.getColors();
578
- this.colors.set(allColors);
579
- super.ngOnInit();
564
+ this.iconTypes = await this.popupService.getStyles();
565
+ this.icons = await this.popupService.getIcons();
566
+ this.applyFilters();
567
+ this.cdr.detectChanges();
580
568
  }
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
- }
569
+ handleSearch(event) {
570
+ this.searchQuery = event.value?.toLowerCase();
571
+ this.applyFilters();
592
572
  }
593
- parseStringValue(value) {
594
- const parts = value.trim().split(/\s+/);
595
- if (parts.length !== 3) {
596
- return null;
597
- }
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;
573
+ handleViewModeChange(mode) {
574
+ this.selectedViewMode = mode.value;
601
575
  }
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" }] : []));
576
+ handleIconTypeChange(type) {
577
+ this.selectedIconType = type.name;
578
+ this.applyFilters();
708
579
  }
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;
580
+ applyFilters() {
581
+ let result = this.icons;
582
+ if (this.searchQuery) {
583
+ result = result.filter((icon) => icon.label.toLowerCase().includes(this.searchQuery) ||
584
+ icon.tags?.some((tag) => tag.toLowerCase().includes(this.searchQuery)));
585
+ }
586
+ result = result.filter((icon) => {
587
+ if (!icon.supportedStyle || icon.supportedStyle.length === 0) {
588
+ return true;
589
+ }
590
+ return icon.supportedStyle.includes(this.selectedIconType);
591
+ });
592
+ this.filteredIcons = result;
969
593
  }
970
594
  selectIcon(icon) {
971
595
  this.close({
@@ -977,8 +601,8 @@ class AXPIconChooserPopupComponent extends AXBasePageComponent {
977
601
  getIconClass(icon) {
978
602
  return `${this.selectedIconType} fa-${icon.name}`;
979
603
  }
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: `
604
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
605
+ 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: `
982
606
  <div class="ax-flex ax-flex-col ax-h-full ax-bg-lightest">
983
607
  <!-- Fixed Header Section -->
984
608
  <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">
@@ -1053,9 +677,9 @@ class AXPIconChooserPopupComponent extends AXBasePageComponent {
1053
677
  </div>
1054
678
  </div>
1055
679
  </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 }); }
680
+ `, 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
681
  }
1058
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserPopupComponent, decorators: [{
682
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserPopupComponent, decorators: [{
1059
683
  type: Component,
1060
684
  args: [{
1061
685
  template: `
@@ -1160,7 +784,7 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1160
784
  }
1161
785
  }
1162
786
  return value;
1163
- }, ...(ngDevMode ? [{ debugName: "computedValue" }] : []));
787
+ }, ...(ngDevMode ? [{ debugName: "computedValue" }] : /* istanbul ignore next */ []));
1164
788
  }
1165
789
  async openPopup() {
1166
790
  const result = await this.popupService.open(AXPIconChooserPopupComponent, {
@@ -1185,8 +809,8 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1185
809
  editIcon() {
1186
810
  this.openPopup();
1187
811
  }
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: `
812
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
813
+ 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
814
  <div
1191
815
  class="ax-grid ax-grid-cols-[6rem_auto] ax-items-center ax-rounded-md ax-text-3xl ax-w-fit"
1192
816
  [class.ax-border]="getValue()"
@@ -1217,7 +841,7 @@ class AXPIconChooserWidgetEditComponent extends AXPValueWidgetComponent {
1217
841
  </div>
1218
842
  `, 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
843
  }
1220
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPIconChooserWidgetEditComponent, decorators: [{
844
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPIconChooserWidgetEditComponent, decorators: [{
1221
845
  type: Component,
1222
846
  args: [{ selector: 'ax-icon-chooser-edit', template: `
1223
847
  <div
@@ -1259,7 +883,7 @@ var iconChooserEdit_component = /*#__PURE__*/Object.freeze({
1259
883
  const AXPIconChooserWidget = {
1260
884
  name: 'icon-chooser',
1261
885
  title: 'Icon Chooser',
1262
- icon: 'fa-solid fa-icons',
886
+ icon: 'fa-light fa-icons',
1263
887
  type: 'editor',
1264
888
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1265
889
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
@@ -1268,10 +892,10 @@ const AXPIconChooserWidget = {
1268
892
  component: () => Promise.resolve().then(function () { return iconChooserEdit_component; }).then((c) => c.AXPIconChooserWidgetEditComponent),
1269
893
  },
1270
894
  column: {
1271
- component: () => import('./acorex-platform-themes-shared-icon-chooser-column.component-C0EpfU2k.mjs').then((c) => c.AXPIconChooserWidgetColumnComponent),
895
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-column.component-CqkWJYdv.mjs').then((c) => c.AXPIconChooserWidgetColumnComponent),
1272
896
  },
1273
897
  view: {
1274
- component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-9W52W6Nu.mjs').then((c) => c.AXPIconChooserWidgetViewComponent),
898
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-BOTuLdWN.mjs').then((c) => c.AXPIconChooserWidgetViewComponent),
1275
899
  },
1276
900
  },
1277
901
  };
@@ -1816,27 +1440,173 @@ function provideCustomIconStyleProvider(providerClass) {
1816
1440
  }
1817
1441
  //#endregion
1818
1442
 
1819
- class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
1443
+ class AXPFontSizeChooserWidgetComponent extends AXPValueWidgetComponent {
1820
1444
  constructor() {
1821
1445
  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" }] : []));
1446
+ this.sizes = signal(['small', 'medium', 'large', 'x-large'], ...(ngDevMode ? [{ debugName: "sizes" }] : /* istanbul ignore next */ []));
1447
+ this.selectedSize = signal(null, ...(ngDevMode ? [{ debugName: "selectedSize" }] : /* istanbul ignore next */ []));
1827
1448
  this.#eff = effect(() => {
1828
1449
  if (this.getValue()) {
1829
- this.selectedOrientation.set(this.orientations().find((o) => o.id === this.getValue()) ?? this.orientations()[0]);
1450
+ this.selectedSize.set(this.sizes().find((s) => s === this.getValue()) ?? this.sizes()[0]);
1830
1451
  }
1831
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
1452
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1832
1453
  }
1833
1454
  #eff;
1834
- onOrientationClick(orientation) {
1835
- this.setValue(orientation.id);
1455
+ onSizeClick(size) {
1456
+ this.setValue(size);
1836
1457
  }
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: `
1839
- @for (orientation of orientations(); track orientation.id) {
1458
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1459
+ 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: `
1460
+ @for (size of sizes(); track size) {
1461
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1462
+ <div>
1463
+ <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
1464
+ </div>
1465
+ </div>
1466
+ }
1467
+ `, 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 }); }
1468
+ }
1469
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, decorators: [{
1470
+ type: Component,
1471
+ args: [{ template: `
1472
+ @for (size of sizes(); track size) {
1473
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1474
+ <div>
1475
+ <span>{{ '@layout:terms.font-sizes.' + size | translate | async }}</span>
1476
+ </div>
1477
+ </div>
1478
+ }
1479
+ `, 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"] }]
1480
+ }] });
1481
+
1482
+ var fontSizeChooserWidget_component = /*#__PURE__*/Object.freeze({
1483
+ __proto__: null,
1484
+ AXPFontSizeChooserWidgetComponent: AXPFontSizeChooserWidgetComponent
1485
+ });
1486
+
1487
+ const AXPFontSizeChooserWidget = {
1488
+ name: "font-size-chooser",
1489
+ title: "Font Size Chooser",
1490
+ icon: "fa-light fa-text-size",
1491
+ type: 'editor',
1492
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1493
+ properties: [
1494
+ AXP_NAME_PROPERTY,
1495
+ AXP_DATA_PATH_PROPERTY,
1496
+ AXP_DISABLED_PROPERTY,
1497
+ ],
1498
+ components: {
1499
+ edit: {
1500
+ component: () => Promise.resolve().then(function () { return fontSizeChooserWidget_component; }).then((c) => c.AXPFontSizeChooserWidgetComponent),
1501
+ },
1502
+ }
1503
+ };
1504
+
1505
+ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
1506
+ constructor() {
1507
+ super(...arguments);
1508
+ this.fonts = signal([
1509
+ { id: 'system-ui', title: 'Default' },
1510
+ { id: 'serif', title: 'Serif' },
1511
+ { id: 'sans-serif', title: 'Sans-serif' },
1512
+ { id: 'monospace', title: 'Monospace' },
1513
+ { id: 'arial', title: 'Arial' },
1514
+ { id: 'verdana', title: 'Verdana' },
1515
+ { id: 'tahoma', title: 'Tahoma' },
1516
+ { id: 'times-new-roman', title: 'Times New Roman' },
1517
+ { id: 'georgia', title: 'Georgia' },
1518
+ { id: 'helvetica', title: 'Helvetica' },
1519
+ { id: 'calibri', title: 'Calibri' },
1520
+ { id: 'cursive', title: 'Cursive' },
1521
+ { id: 'vazirmatn', title: 'Vazir وزیر' },
1522
+ ], ...(ngDevMode ? [{ debugName: "fonts" }] : /* istanbul ignore next */ []));
1523
+ this.selectedFont = signal(null, ...(ngDevMode ? [{ debugName: "selectedFont" }] : /* istanbul ignore next */ []));
1524
+ this.#eff = effect(() => {
1525
+ if (this.getValue()) {
1526
+ this.selectedFont.set(this.fonts().find((f) => f.id === this.getValue()) ?? this.fonts()[0]);
1527
+ }
1528
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1529
+ }
1530
+ #eff;
1531
+ onFontClick(font) {
1532
+ this.setValue(font.id);
1533
+ }
1534
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1535
+ 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: `
1536
+ @for (font of fonts(); track font.id) {
1537
+ <div
1538
+ (click)="onFontClick(font)"
1539
+ [class.--selected]="font.id === selectedFont()?.id"
1540
+ [style.font-family]="font.id"
1541
+ >
1542
+ <div>
1543
+ <span>{{ font.title }}</span>
1544
+ </div>
1545
+ </div>
1546
+ }
1547
+ `, 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 }); }
1548
+ }
1549
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
1550
+ type: Component,
1551
+ args: [{ template: `
1552
+ @for (font of fonts(); track font.id) {
1553
+ <div
1554
+ (click)="onFontClick(font)"
1555
+ [class.--selected]="font.id === selectedFont()?.id"
1556
+ [style.font-family]="font.id"
1557
+ >
1558
+ <div>
1559
+ <span>{{ font.title }}</span>
1560
+ </div>
1561
+ </div>
1562
+ }
1563
+ `, 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"] }]
1564
+ }] });
1565
+
1566
+ var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
1567
+ __proto__: null,
1568
+ AXPFontStyleChooserWidgetComponent: AXPFontStyleChooserWidgetComponent
1569
+ });
1570
+
1571
+ const AXPFontStyleChooserWidget = {
1572
+ name: "font-style-chooser",
1573
+ title: "Font Style Chooser",
1574
+ icon: "fa-light fa-font",
1575
+ type: 'editor',
1576
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1577
+ properties: [
1578
+ AXP_NAME_PROPERTY,
1579
+ AXP_DATA_PATH_PROPERTY,
1580
+ AXP_DISABLED_PROPERTY,
1581
+ ],
1582
+ components: {
1583
+ edit: {
1584
+ component: () => Promise.resolve().then(function () { return fontStyleChooserWidget_component; }).then((c) => c.AXPFontStyleChooserWidgetComponent),
1585
+ },
1586
+ }
1587
+ };
1588
+
1589
+ class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
1590
+ constructor() {
1591
+ super(...arguments);
1592
+ this.orientations = signal([
1593
+ { id: 'vertical', icon: 'fa-regular fa-square-ellipsis-vertical' },
1594
+ { id: 'horizontal', icon: 'fa-regular fa-square-ellipsis' },
1595
+ ], ...(ngDevMode ? [{ debugName: "orientations" }] : /* istanbul ignore next */ []));
1596
+ this.selectedOrientation = signal(null, ...(ngDevMode ? [{ debugName: "selectedOrientation" }] : /* istanbul ignore next */ []));
1597
+ this.#eff = effect(() => {
1598
+ if (this.getValue()) {
1599
+ this.selectedOrientation.set(this.orientations().find((o) => o.id === this.getValue()) ?? this.orientations()[0]);
1600
+ }
1601
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1602
+ }
1603
+ #eff;
1604
+ onOrientationClick(orientation) {
1605
+ this.setValue(orientation.id);
1606
+ }
1607
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1608
+ 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: `
1609
+ @for (orientation of orientations(); track orientation.id) {
1840
1610
  <div (click)="onOrientationClick(orientation)" [class.--selected]="orientation.id === selectedOrientation()?.id">
1841
1611
  <div>
1842
1612
  <i [class]="orientation.icon"></i>
@@ -1846,7 +1616,7 @@ class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
1846
1616
  }
1847
1617
  `, 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 }); }
1848
1618
  }
1849
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
1619
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
1850
1620
  type: Component,
1851
1621
  args: [{ template: `
1852
1622
  @for (orientation of orientations(); track orientation.id) {
@@ -1883,6 +1653,333 @@ const AXPMenuOrientationChooserWidget = {
1883
1653
  }
1884
1654
  };
1885
1655
 
1656
+ //#endregion
1657
+ //#region ---- Color utilities ----
1658
+ function hexToRgb(hex) {
1659
+ const normalized = hex.trim().replace(/^#/, '');
1660
+ const full = normalized.length === 3
1661
+ ? normalized
1662
+ .split('')
1663
+ .map((c) => c + c)
1664
+ .join('')
1665
+ : normalized;
1666
+ return [
1667
+ parseInt(full.slice(0, 2), 16),
1668
+ parseInt(full.slice(2, 4), 16),
1669
+ parseInt(full.slice(4, 6), 16),
1670
+ ];
1671
+ }
1672
+ function rgbToHex(r, g, b) {
1673
+ const clamp = (n) => Math.max(0, Math.min(255, Math.round(n)));
1674
+ return `#${[clamp(r), clamp(g), clamp(b)]
1675
+ .map((c) => c.toString(16).padStart(2, '0'))
1676
+ .join('')}`;
1677
+ }
1678
+ /**
1679
+ * Linear RGB mix: ratio 0 → `from`, ratio 1 → `to`.
1680
+ */
1681
+ function mixHex(from, to, ratio) {
1682
+ const t = Math.max(0, Math.min(1, ratio));
1683
+ const [r0, g0, b0] = hexToRgb(from);
1684
+ const [r1, g1, b1] = hexToRgb(to);
1685
+ return rgbToHex(r0 + (r1 - r0) * t, g0 + (g1 - g0) * t, b0 + (b1 - b0) * t);
1686
+ }
1687
+ function relativeLuminance(hex) {
1688
+ const [r, g, b] = hexToRgb(hex).map((c) => {
1689
+ const s = c / 255;
1690
+ return s <= 0.03928 ? s / 12.92 : Math.pow((s + 0.055) / 1.055, 2.4);
1691
+ });
1692
+ return 0.2126 * r + 0.7152 * g + 0.0722 * b;
1693
+ }
1694
+ function contrastForeground(backgroundHex) {
1695
+ return relativeLuminance(backgroundHex) > 0.55 ? '#171717' : '#ffffff';
1696
+ }
1697
+ function titleCase(str) {
1698
+ return str.replace(/-/g, ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.slice(1).toLowerCase());
1699
+ }
1700
+ //#endregion
1701
+ //#region ---- Surface variants (palette-synchronized) ----
1702
+ /**
1703
+ * Seven tonal steps per semantic color. Backgrounds are mixed in RGB using the **same palette’s**
1704
+ * canvas `light` and `dark` as poles so swatches stay aligned with `AXPThemePaletteProvider` data.
1705
+ */
1706
+ const SURFACE_VARIANTS = ['lightest', 'lighter', 'light', 'surface', 'dark', 'darker', 'darkest'];
1707
+ function tonalBackgroundHex(base, variant, canvas) {
1708
+ switch (variant) {
1709
+ case 'lightest':
1710
+ return mixHex(base, canvas.light, 0.85);
1711
+ case 'lighter':
1712
+ return mixHex(base, canvas.light, 0.62);
1713
+ case 'light':
1714
+ return mixHex(base, canvas.light, 0.38);
1715
+ case 'surface':
1716
+ return base;
1717
+ case 'dark':
1718
+ return mixHex(base, canvas.dark, 0.35);
1719
+ case 'darker':
1720
+ return mixHex(base, canvas.dark, 0.58);
1721
+ case 'darkest':
1722
+ return mixHex(base, canvas.dark, 0.8);
1723
+ default: {
1724
+ const _exhaustive = variant;
1725
+ return _exhaustive;
1726
+ }
1727
+ }
1728
+ }
1729
+ function styleTitlePrefix(style) {
1730
+ const accentMatch = /^accent(\d+)$/.exec(style);
1731
+ if (accentMatch) {
1732
+ return `Accent ${accentMatch[1]}`;
1733
+ }
1734
+ return titleCase(style);
1735
+ }
1736
+ function surfaceVariantTitle(style, variant) {
1737
+ if (variant === 'surface') {
1738
+ return styleTitlePrefix(style);
1739
+ }
1740
+ return `${styleTitlePrefix(style)} ${titleCase(variant)}`;
1741
+ }
1742
+ function pushVariantScale(entries, styleKey, baseHex, canvas) {
1743
+ for (const variant of SURFACE_VARIANTS) {
1744
+ const background = tonalBackgroundHex(baseHex, variant, canvas);
1745
+ const color = contrastForeground(background);
1746
+ const name = `${styleKey}-${variant}`;
1747
+ entries.push({
1748
+ title: surfaceVariantTitle(styleKey, variant),
1749
+ name,
1750
+ color,
1751
+ background,
1752
+ border: background,
1753
+ });
1754
+ }
1755
+ }
1756
+ function pushFlatSwatch(entries, title, name, hex) {
1757
+ const color = contrastForeground(hex);
1758
+ entries.push({ title, name, color, background: hex, border: hex });
1759
+ }
1760
+ /**
1761
+ * Builds the full chooser list from a single `AXPThemePalette` (colors object only).
1762
+ */
1763
+ function buildColorsFromThemePalette(palette) {
1764
+ const colors = palette.colors;
1765
+ const canvas = { light: colors.light, dark: colors.dark };
1766
+ const entries = [];
1767
+ const core = ['primary', 'secondary', 'success', 'warning', 'danger'];
1768
+ for (const key of core) {
1769
+ pushVariantScale(entries, key, colors[key], canvas);
1770
+ }
1771
+ const neutral = colors.neutral;
1772
+ if (neutral) {
1773
+ pushVariantScale(entries, 'neutral', neutral, canvas);
1774
+ }
1775
+ colors.accents.forEach((hex, index) => {
1776
+ pushVariantScale(entries, `accent${index + 1}`, hex, canvas);
1777
+ });
1778
+ pushFlatSwatch(entries, 'Canvas Light', 'canvas-light', colors.light);
1779
+ pushFlatSwatch(entries, 'Canvas Dark', 'canvas-dark', colors.dark);
1780
+ return entries;
1781
+ }
1782
+ //#endregion
1783
+ //#region ---- Service ----
1784
+ class AXPColorChooserService {
1785
+ constructor() {
1786
+ this.themeStore = inject(AXPLayoutThemeService);
1787
+ this.palettePromise = inject(AXP_THEME_PALETTE_PROVIDER);
1788
+ this.cacheKey = null;
1789
+ this.cache = null;
1790
+ }
1791
+ async getColors() {
1792
+ const paletteName = this.themeStore.currentPalette();
1793
+ if (this.cache && this.cacheKey === paletteName) {
1794
+ return this.cache;
1795
+ }
1796
+ const provider = await this.palettePromise;
1797
+ const list = await provider.getList();
1798
+ const palette = list.find((p) => p.name === paletteName) ?? list.find((p) => p.name === 'default') ?? list[0] ?? null;
1799
+ const colors = palette ? buildColorsFromThemePalette(palette) : [];
1800
+ this.cacheKey = paletteName;
1801
+ this.cache = colors;
1802
+ return colors;
1803
+ }
1804
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1805
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, providedIn: 'root' }); }
1806
+ }
1807
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserService, decorators: [{
1808
+ type: Injectable,
1809
+ args: [{
1810
+ providedIn: 'root',
1811
+ }]
1812
+ }] });
1813
+
1814
+ class AXPColorChooserWidgetEditComponent extends AXPValueWidgetComponent {
1815
+ constructor() {
1816
+ super(...arguments);
1817
+ this.colorService = inject(AXPColorChooserService);
1818
+ this.colors = signal([], ...(ngDevMode ? [{ debugName: "colors" }] : /* istanbul ignore next */ []));
1819
+ this.placeholder = computed(() => this.options()['placeholder'] ?? '', ...(ngDevMode ? [{ debugName: "placeholder" }] : /* istanbul ignore next */ []));
1820
+ this.selectedColor = computed(() => {
1821
+ const value = this.getValue();
1822
+ const fallbackName = () => this.colors()[0]?.name;
1823
+ if (!value) {
1824
+ return fallbackName();
1825
+ }
1826
+ if (typeof value === 'string') {
1827
+ const parsed = this.parseStringValue(value);
1828
+ if (parsed) {
1829
+ return parsed;
1830
+ }
1831
+ return fallbackName();
1832
+ }
1833
+ return value.name;
1834
+ }, ...(ngDevMode ? [{ debugName: "selectedColor" }] : /* istanbul ignore next */ []));
1835
+ }
1836
+ async ngOnInit() {
1837
+ const allColors = await this.colorService.getColors();
1838
+ this.colors.set(allColors);
1839
+ super.ngOnInit();
1840
+ }
1841
+ handleValueChange(event) {
1842
+ if (event.isUserInteraction) {
1843
+ if (!event.value) {
1844
+ this.setValue(undefined);
1845
+ return;
1846
+ }
1847
+ const color = event.component.selectedItems[0];
1848
+ // Always store as ordered string: "color background border"
1849
+ const stringValue = `${color.color} ${color.background} ${color.border}`;
1850
+ this.setValue(stringValue);
1851
+ }
1852
+ }
1853
+ isHexSwatch(color) {
1854
+ return color.background.startsWith('#');
1855
+ }
1856
+ parseStringValue(value) {
1857
+ const parts = value.trim().split(/\s+/);
1858
+ if (parts.length !== 3) {
1859
+ return null;
1860
+ }
1861
+ const [color, background, border] = parts;
1862
+ const match = this.colors().find((c) => c.color === color && c.background === background && c.border === border);
1863
+ return match?.name ?? null;
1864
+ }
1865
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1866
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: AXPColorChooserWidgetEditComponent, isStandalone: true, selector: "ax-color-chooser-widget", usesInheritance: true, ngImport: i0, template: `
1867
+ <ax-form [messageStyle]="'float'" [updateOn]="'change'">
1868
+ <ax-form-field>
1869
+ <ax-select-box
1870
+ [dataSource]="colors()"
1871
+ textField="title"
1872
+ valueField="name"
1873
+ [placeholder]="placeholder()"
1874
+ [itemTemplate]="customItemTemplate"
1875
+ [ngModel]="selectedColor()"
1876
+ (onValueChanged)="handleValueChange($event)"
1877
+ [selectedTemplate]="customItemTemplate"
1878
+ >
1879
+ <ng-template #customItemTemplate let-item>
1880
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
1881
+ @if (isHexSwatch(item.data)) {
1882
+ <div
1883
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-solid"
1884
+ [style.background-color]="item.data.background"
1885
+ [style.border-color]="item.data.border"
1886
+ [style.color]="item.data.color"
1887
+ >
1888
+ <span>Aa</span>
1889
+ </div>
1890
+ } @else {
1891
+ <div
1892
+ 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"
1893
+ [class]="item.data.background"
1894
+ >
1895
+ <span [class]="item.data.color">Aa</span>
1896
+ </div>
1897
+ }
1898
+ <span>{{ item.data.title }}</span>
1899
+ </div>
1900
+ </ng-template>
1901
+ <ax-search-box look="fill"></ax-search-box>
1902
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
1903
+ </ax-select-box>
1904
+ </ax-form-field>
1905
+ </ax-form>
1906
+ `, 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 }); }
1907
+ }
1908
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPColorChooserWidgetEditComponent, decorators: [{
1909
+ type: Component,
1910
+ args: [{
1911
+ selector: 'ax-color-chooser-widget',
1912
+ template: `
1913
+ <ax-form [messageStyle]="'float'" [updateOn]="'change'">
1914
+ <ax-form-field>
1915
+ <ax-select-box
1916
+ [dataSource]="colors()"
1917
+ textField="title"
1918
+ valueField="name"
1919
+ [placeholder]="placeholder()"
1920
+ [itemTemplate]="customItemTemplate"
1921
+ [ngModel]="selectedColor()"
1922
+ (onValueChanged)="handleValueChange($event)"
1923
+ [selectedTemplate]="customItemTemplate"
1924
+ >
1925
+ <ng-template #customItemTemplate let-item>
1926
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
1927
+ @if (isHexSwatch(item.data)) {
1928
+ <div
1929
+ class="ax-w-6 ax-h-6 ax-rounded ax-flex ax-items-center ax-justify-center ax-border ax-border-solid"
1930
+ [style.background-color]="item.data.background"
1931
+ [style.border-color]="item.data.border"
1932
+ [style.color]="item.data.color"
1933
+ >
1934
+ <span>Aa</span>
1935
+ </div>
1936
+ } @else {
1937
+ <div
1938
+ 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"
1939
+ [class]="item.data.background"
1940
+ >
1941
+ <span [class]="item.data.color">Aa</span>
1942
+ </div>
1943
+ }
1944
+ <span>{{ item.data.title }}</span>
1945
+ </div>
1946
+ </ng-template>
1947
+ <ax-search-box look="fill"></ax-search-box>
1948
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
1949
+ </ax-select-box>
1950
+ </ax-form-field>
1951
+ </ax-form>
1952
+ `,
1953
+ imports: [AXSelectBoxModule, AXFormModule, CommonModule, AXSearchBoxModule, AXButtonModule, FormsModule],
1954
+ changeDetection: ChangeDetectionStrategy.OnPush,
1955
+ }]
1956
+ }] });
1957
+
1958
+ var themeColorChooserEdit_component = /*#__PURE__*/Object.freeze({
1959
+ __proto__: null,
1960
+ AXPColorChooserWidgetEditComponent: AXPColorChooserWidgetEditComponent
1961
+ });
1962
+
1963
+ const AXPThemeColorChooserWidgetConfig = {
1964
+ name: 'theme-color-chooser',
1965
+ title: 'Theme Color Chooser',
1966
+ icon: 'fa-light fa-palette',
1967
+ type: 'editor',
1968
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1969
+ properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
1970
+ components: {
1971
+ edit: {
1972
+ component: () => Promise.resolve().then(function () { return themeColorChooserEdit_component; }).then((c) => c.AXPColorChooserWidgetEditComponent),
1973
+ },
1974
+ column: {
1975
+ component: () => import('./acorex-platform-themes-shared-theme-color-chooser-column.component-D566Kdvy.mjs').then((c) => c.AXPColorChooserWidgetColumnComponent),
1976
+ },
1977
+ view: {
1978
+ component: () => import('./acorex-platform-themes-shared-theme-color-chooser-view.component-D7-rCGl7.mjs').then((c) => c.AXPColorChooserWidgetViewComponent),
1979
+ },
1980
+ },
1981
+ };
1982
+
1886
1983
  class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1887
1984
  constructor() {
1888
1985
  super(...arguments);
@@ -1890,20 +1987,20 @@ class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1890
1987
  { id: AXPThemeMode.Light, icon: 'fa-light fa-brightness' },
1891
1988
  { id: AXPThemeMode.Dark, icon: 'fa-light fa-moon' },
1892
1989
  { id: AXPThemeMode.System, icon: 'fa-light fa-desktop' },
1893
- ], ...(ngDevMode ? [{ debugName: "modes" }] : []));
1894
- this.selectedMode = signal(null, ...(ngDevMode ? [{ debugName: "selectedMode" }] : []));
1990
+ ], ...(ngDevMode ? [{ debugName: "modes" }] : /* istanbul ignore next */ []));
1991
+ this.selectedMode = signal(null, ...(ngDevMode ? [{ debugName: "selectedMode" }] : /* istanbul ignore next */ []));
1895
1992
  this.#eff = effect(() => {
1896
1993
  if (this.getValue()) {
1897
1994
  this.selectedMode.set(this.modes().find((m) => m.id === this.getValue()) ?? this.modes()[0]);
1898
1995
  }
1899
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
1996
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1900
1997
  }
1901
1998
  #eff;
1902
1999
  onModeClick(mode) {
1903
2000
  this.setValue(mode.id);
1904
2001
  }
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: `
2002
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2003
+ 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
2004
  @for (mode of modes(); track mode.id) {
1908
2005
  <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
1909
2006
  <div>
@@ -1914,7 +2011,7 @@ class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
1914
2011
  }
1915
2012
  `, 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
2013
  }
1917
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
2014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
1918
2015
  type: Component,
1919
2016
  args: [{ template: `
1920
2017
  @for (mode of modes(); track mode.id) {
@@ -1936,7 +2033,7 @@ var themeModeChooserWidget_component = /*#__PURE__*/Object.freeze({
1936
2033
  const AXPThemeModeChooserWidget = {
1937
2034
  name: "theme-mode-chooser",
1938
2035
  title: "Theme Mode Chooser",
1939
- icon: "fa-solid fa-square",
2036
+ icon: "fa-light fa-square",
1940
2037
  type: 'editor',
1941
2038
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1942
2039
  properties: [
@@ -1955,15 +2052,15 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1955
2052
  constructor() {
1956
2053
  super(...arguments);
1957
2054
  this.paletteService = inject(AXP_THEME_PALETTE_PROVIDER);
1958
- this.palettes = signal([], ...(ngDevMode ? [{ debugName: "palettes" }] : []));
1959
- this.selectedPalette = signal(null, ...(ngDevMode ? [{ debugName: "selectedPalette" }] : []));
2055
+ this.palettes = signal([], ...(ngDevMode ? [{ debugName: "palettes" }] : /* istanbul ignore next */ []));
2056
+ this.selectedPalette = signal(null, ...(ngDevMode ? [{ debugName: "selectedPalette" }] : /* istanbul ignore next */ []));
1960
2057
  this.#eff = effect(() => {
1961
2058
  if (this.getValue()) {
1962
2059
  this.selectedPalette.set(this.palettes().find((p) => p.name === this.getValue()) ??
1963
2060
  this.palettes().find((p) => p.name === 'default') ??
1964
2061
  this.palettes()[0]);
1965
2062
  }
1966
- }, ...(ngDevMode ? [{ debugName: "#eff" }] : []));
2063
+ }, ...(ngDevMode ? [{ debugName: "#eff" }] : /* istanbul ignore next */ []));
1967
2064
  }
1968
2065
  #eff;
1969
2066
  async ngOnInit() {
@@ -1974,8 +2071,8 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1974
2071
  onPaletteClick(palette) {
1975
2072
  this.setValue(palette.name);
1976
2073
  }
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: `
2074
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2075
+ 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
2076
  @for (palette of palettes(); track palette.name) {
1980
2077
  <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
1981
2078
  <span>{{ palette.title }}</span>
@@ -1986,9 +2083,9 @@ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
1986
2083
  </div>
1987
2084
  </div>
1988
2085
  }
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 }); }
2086
+ `, 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 }); }
1990
2087
  }
1991
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
2088
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
1992
2089
  type: Component,
1993
2090
  args: [{ template: `
1994
2091
  @for (palette of palettes(); track palette.name) {
@@ -2001,7 +2098,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2001
2098
  </div>
2002
2099
  </div>
2003
2100
  }
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"] }]
2101
+ `, 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"] }]
2005
2102
  }] });
2006
2103
 
2007
2104
  var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
@@ -2012,7 +2109,7 @@ var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
2012
2109
  const AXPThemePaletteChooserWidget = {
2013
2110
  name: "theme-palette-chooser",
2014
2111
  title: "Theme Palette Chooser",
2015
- icon: "fa-solid fa-square",
2112
+ icon: "fa-light fa-square",
2016
2113
  type: 'editor',
2017
2114
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
2018
2115
  properties: [
@@ -2027,6 +2124,28 @@ const AXPThemePaletteChooserWidget = {
2027
2124
  }
2028
2125
  };
2029
2126
 
2127
+ //#endregion
2128
+ //#region ---- Theme Widgets Provider ----
2129
+ const WIDGETS = [
2130
+ AXPThemePaletteChooserWidget,
2131
+ AXPThemeModeChooserWidget,
2132
+ AXPMenuOrientationChooserWidget,
2133
+ AXPFontSizeChooserWidget,
2134
+ AXPFontStyleChooserWidget,
2135
+ AXPIconChooserWidget,
2136
+ AXPThemeColorChooserWidgetConfig,
2137
+ ];
2138
+ class AXPThemesSharedWidgetsProvider {
2139
+ getWidgets() {
2140
+ return WIDGETS;
2141
+ }
2142
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2143
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider }); }
2144
+ }
2145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedWidgetsProvider, decorators: [{
2146
+ type: Injectable
2147
+ }] });
2148
+
2030
2149
  class AXPThemesSharedModule {
2031
2150
  constructor(appInitService, injector) {
2032
2151
  const service = injector.get(AXPLayoutThemeService);
@@ -2039,14 +2158,15 @@ class AXPThemesSharedModule {
2039
2158
  },
2040
2159
  });
2041
2160
  }
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: [
2161
+ 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 }); }
2162
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, imports: [i1$3.AXPComponentSlotModule, AXPWidgetCoreModule] }); }
2163
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, providers: [
2164
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
2045
2165
  {
2046
2166
  provide: AXP_SETTING_DEFINITION_PROVIDER,
2047
2167
  useFactory: async () => {
2048
2168
  const injector = inject(Injector);
2049
- const provider = (await import('./acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs')).AXPThemeSettingProvider;
2169
+ const provider = (await import('./acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs')).AXPThemeSettingProvider;
2050
2170
  return new provider(injector);
2051
2171
  },
2052
2172
  multi: true,
@@ -2061,19 +2181,9 @@ class AXPThemesSharedModule {
2061
2181
  },
2062
2182
  ],
2063
2183
  }),
2064
- AXPWidgetCoreModule.forChild({
2065
- widgets: [
2066
- AXPThemePaletteChooserWidget,
2067
- AXPThemeModeChooserWidget,
2068
- AXPMenuOrientationChooserWidget,
2069
- AXPFontSizeChooserWidget,
2070
- AXPFontStyleChooserWidget,
2071
- AXPIconChooserWidget,
2072
- AXPThemeColorChooserWidgetConfig,
2073
- ],
2074
- })] }); }
2184
+ AXPWidgetCoreModule] }); }
2075
2185
  }
2076
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
2186
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
2077
2187
  type: NgModule,
2078
2188
  args: [{
2079
2189
  imports: [
@@ -2086,26 +2196,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2086
2196
  },
2087
2197
  ],
2088
2198
  }),
2089
- AXPWidgetCoreModule.forChild({
2090
- widgets: [
2091
- AXPThemePaletteChooserWidget,
2092
- AXPThemeModeChooserWidget,
2093
- AXPMenuOrientationChooserWidget,
2094
- AXPFontSizeChooserWidget,
2095
- AXPFontStyleChooserWidget,
2096
- AXPIconChooserWidget,
2097
- AXPThemeColorChooserWidgetConfig,
2098
- ],
2099
- }),
2199
+ AXPWidgetCoreModule,
2100
2200
  ],
2101
2201
  exports: [],
2102
2202
  declarations: [],
2103
2203
  providers: [
2204
+ { provide: AXP_WIDGET_DEFINITION_PROVIDER, useClass: AXPThemesSharedWidgetsProvider, multi: true },
2104
2205
  {
2105
2206
  provide: AXP_SETTING_DEFINITION_PROVIDER,
2106
2207
  useFactory: async () => {
2107
2208
  const injector = inject(Injector);
2108
- const provider = (await import('./acorex-platform-themes-shared-settings.provider-DSs1o1M6.mjs')).AXPThemeSettingProvider;
2209
+ const provider = (await import('./acorex-platform-themes-shared-settings.provider-DK6R87Lf.mjs')).AXPThemeSettingProvider;
2109
2210
  return new provider(injector);
2110
2211
  },
2111
2212
  multi: true,
@@ -2113,7 +2214,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.12", ngImpo
2113
2214
  ...provideDefaultIconChooser(),
2114
2215
  ],
2115
2216
  }]
2116
- }], ctorParameters: () => [{ type: i1$2.AXPAppStartUpService }, { type: i0.Injector }] });
2217
+ }], ctorParameters: () => [{ type: i1$3.AXPAppStartUpService }, { type: i0.Injector }] });
2117
2218
 
2118
2219
  /**
2119
2220
  * Generated bundle index. Do not edit.