@acorex/platform 20.0.8 → 20.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/fesm2022/acorex-platform-auth.mjs +19 -19
  2. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  3. package/fesm2022/acorex-platform-common.mjs +92 -92
  4. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  5. package/fesm2022/acorex-platform-core.mjs +36 -36
  6. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-domain.mjs +16 -16
  8. package/fesm2022/acorex-platform-domain.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-layout-builder.mjs +44 -40
  10. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  11. package/fesm2022/acorex-platform-layout-components.mjs +82 -82
  12. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  13. package/fesm2022/acorex-platform-layout-designer.mjs +72 -72
  14. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  15. package/fesm2022/acorex-platform-layout-entity.mjs +98 -97
  16. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  17. package/fesm2022/acorex-platform-layout-views.mjs +15 -15
  18. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -1
  19. package/fesm2022/acorex-platform-native.mjs +7 -7
  20. package/fesm2022/acorex-platform-native.mjs.map +1 -1
  21. package/fesm2022/acorex-platform-runtime.mjs +40 -40
  22. package/fesm2022/acorex-platform-runtime.mjs.map +1 -1
  23. package/fesm2022/{acorex-platform-themes-default-create-entity-view.component-DyVB3PZT.mjs → acorex-platform-themes-default-create-entity-view.component-B1cyUyXJ.mjs} +4 -4
  24. package/fesm2022/{acorex-platform-themes-default-create-entity-view.component-DyVB3PZT.mjs.map → acorex-platform-themes-default-create-entity-view.component-B1cyUyXJ.mjs.map} +1 -1
  25. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-CsWVOu-r.mjs → acorex-platform-themes-default-entity-master-create-view.component-DJ_0-SyR.mjs} +4 -4
  26. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-CsWVOu-r.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-DJ_0-SyR.mjs.map} +1 -1
  27. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DgyzWR29.mjs → acorex-platform-themes-default-entity-master-list-view.component-CElBGzRM.mjs} +20 -20
  28. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CElBGzRM.mjs.map +1 -0
  29. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-gJap_TBH.mjs → acorex-platform-themes-default-entity-master-modify-view.component-QQ4bFuiN.mjs} +4 -4
  30. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-gJap_TBH.mjs.map → acorex-platform-themes-default-entity-master-modify-view.component-QQ4bFuiN.mjs.map} +1 -1
  31. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BUNm9JV5.mjs → acorex-platform-themes-default-entity-master-single-view.component-CEfSqV8l.mjs} +7 -7
  32. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BUNm9JV5.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-CEfSqV8l.mjs.map} +1 -1
  33. package/fesm2022/{acorex-platform-themes-default-error-401.component-DP3msj3d.mjs → acorex-platform-themes-default-error-401.component-CA41DcvL.mjs} +4 -4
  34. package/fesm2022/{acorex-platform-themes-default-error-401.component-DP3msj3d.mjs.map → acorex-platform-themes-default-error-401.component-CA41DcvL.mjs.map} +1 -1
  35. package/fesm2022/{acorex-platform-themes-default-error-404.component-uvBHGbHY.mjs → acorex-platform-themes-default-error-404.component-DHMnI_Ew.mjs} +4 -4
  36. package/fesm2022/{acorex-platform-themes-default-error-404.component-uvBHGbHY.mjs.map → acorex-platform-themes-default-error-404.component-DHMnI_Ew.mjs.map} +1 -1
  37. package/fesm2022/{acorex-platform-themes-default-error-offline.component-CdXIik4U.mjs → acorex-platform-themes-default-error-offline.component-BmPuSWfS.mjs} +4 -4
  38. package/fesm2022/{acorex-platform-themes-default-error-offline.component-CdXIik4U.mjs.map → acorex-platform-themes-default-error-offline.component-BmPuSWfS.mjs.map} +1 -1
  39. package/fesm2022/acorex-platform-themes-default.mjs +39 -39
  40. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  41. package/fesm2022/acorex-platform-themes-shared-color-chooser-view.component-CUtKW-cD.mjs +51 -0
  42. package/fesm2022/acorex-platform-themes-shared-color-chooser-view.component-CUtKW-cD.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-Dc3LQQOa.mjs +48 -0
  44. package/fesm2022/acorex-platform-themes-shared-icon-chooser-view.component-Dc3LQQOa.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs.map +1 -1
  46. package/fesm2022/acorex-platform-themes-shared.mjs +801 -163
  47. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  48. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-CgUkYMwV.mjs → acorex-platform-widgets-button-widget-designer.component-dBuOCox2.mjs} +4 -4
  49. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-CgUkYMwV.mjs.map → acorex-platform-widgets-button-widget-designer.component-dBuOCox2.mjs.map} +1 -1
  50. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-Dn0U56O7.mjs → acorex-platform-widgets-checkbox-widget-column.component-DAGnRXR6.mjs} +4 -4
  51. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-Dn0U56O7.mjs.map → acorex-platform-widgets-checkbox-widget-column.component-DAGnRXR6.mjs.map} +1 -1
  52. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-BD0-kCi0.mjs → acorex-platform-widgets-checkbox-widget-designer.component-BSGnyPBn.mjs} +4 -4
  53. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-BD0-kCi0.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-BSGnyPBn.mjs.map} +1 -1
  54. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CzCWGDil.mjs → acorex-platform-widgets-checkbox-widget-view.component-C5V7UVN5.mjs} +4 -4
  55. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CzCWGDil.mjs.map → acorex-platform-widgets-checkbox-widget-view.component-C5V7UVN5.mjs.map} +1 -1
  56. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-BSRAHIPQ.mjs → acorex-platform-widgets-color-box-widget-designer.component-BB3ylFBu.mjs} +4 -4
  57. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-BSRAHIPQ.mjs.map → acorex-platform-widgets-color-box-widget-designer.component-BB3ylFBu.mjs.map} +1 -1
  58. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-hyJf0xT2.mjs → acorex-platform-widgets-file-list-popup.component-B58wkY7i.mjs} +4 -4
  59. package/fesm2022/{acorex-platform-widgets-file-list-popup.component-hyJf0xT2.mjs.map → acorex-platform-widgets-file-list-popup.component-B58wkY7i.mjs.map} +1 -1
  60. package/fesm2022/{acorex-platform-widgets-file-rename-popup.component-BSm6Qew2.mjs → acorex-platform-widgets-file-rename-popup.component-BKkGU_y0.mjs} +7 -7
  61. package/fesm2022/{acorex-platform-widgets-file-rename-popup.component-BSm6Qew2.mjs.map → acorex-platform-widgets-file-rename-popup.component-BKkGU_y0.mjs.map} +1 -1
  62. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-Dlu4Tkou.mjs → acorex-platform-widgets-page-widget-designer.component-DFyDAEzN.mjs} +4 -4
  63. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-Dlu4Tkou.mjs.map → acorex-platform-widgets-page-widget-designer.component-DFyDAEzN.mjs.map} +1 -1
  64. package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-DB2IMaLw.mjs → acorex-platform-widgets-rich-text-popup.component-C1QnFtzt.mjs} +4 -4
  65. package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-DB2IMaLw.mjs.map → acorex-platform-widgets-rich-text-popup.component-C1QnFtzt.mjs.map} +1 -1
  66. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-CBOUSkL4.mjs → acorex-platform-widgets-tabular-data-edit-popup.component--QOiFzPo.mjs} +4 -4
  67. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-CBOUSkL4.mjs.map → acorex-platform-widgets-tabular-data-edit-popup.component--QOiFzPo.mjs.map} +1 -1
  68. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-Dl5U2HFR.mjs → acorex-platform-widgets-tabular-data-view-popup.component-D-uJJ-tH.mjs} +4 -4
  69. package/fesm2022/{acorex-platform-widgets-tabular-data-view-popup.component-Dl5U2HFR.mjs.map → acorex-platform-widgets-tabular-data-view-popup.component-D-uJJ-tH.mjs.map} +1 -1
  70. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-CG_2APU3.mjs → acorex-platform-widgets-text-block-widget-designer.component-7C66MAeP.mjs} +4 -4
  71. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-CG_2APU3.mjs.map → acorex-platform-widgets-text-block-widget-designer.component-7C66MAeP.mjs.map} +1 -1
  72. package/fesm2022/acorex-platform-widgets.mjs +1489 -1114
  73. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  74. package/fesm2022/acorex-platform-workflow.mjs +25 -25
  75. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  76. package/layout/builder/index.d.ts +4 -0
  77. package/package.json +1 -1
  78. package/widgets/index.d.ts +131 -42
  79. package/workflow/index.d.ts +5 -1
  80. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DgyzWR29.mjs.map +0 -1
  81. package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-CtCAgeH9.mjs +0 -21
  82. package/fesm2022/acorex-platform-widgets-contact-widget-filter.component-CtCAgeH9.mjs.map +0 -1
@@ -7,23 +7,34 @@ 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, signal, effect, ChangeDetectionStrategy, Injector, NgModule } from '@angular/core';
10
+ import { computed, inject, Component, InjectionToken, Injectable, signal, ChangeDetectionStrategy, effect, Input, Injector, NgModule } from '@angular/core';
11
11
  import { AXPSettingService, AXP_SETTING_DEFINITION_PROVIDER } from '@acorex/platform/common';
12
12
  import { signalStore, withState, withComputed, withMethods, patchState, withHooks } from '@ngrx/signals';
13
13
  import { timer, firstValueFrom, fromEvent, Subscription, filter } from 'rxjs';
14
14
  import { debounceTime } from 'rxjs/operators';
15
15
  import { HttpClient } from '@angular/common/http';
16
- import * as i1$1 from '@acorex/platform/core';
16
+ import * as i1$2 from '@acorex/platform/core';
17
17
  import { AXPPlatformScope } from '@acorex/platform/core';
18
18
  import * as i2$1 from '@acorex/core/translation';
19
19
  import { AXTranslationModule } from '@acorex/core/translation';
20
20
  import * as i3$1 from '@acorex/platform/layout/builder';
21
- import { AXPValueWidgetComponent, AXP_WIDGETS_LAYOUT_CATEGORY, AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
22
- import { AXSelectionCdkModule } from '@acorex/cdk/selection';
21
+ import { AXPValueWidgetComponent, AXPWidgetGroupEnum, AXP_WIDGETS_LAYOUT_CATEGORY, AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
22
+ import * as i2$4 from '@acorex/platform/layout/components';
23
+ import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
24
+ import * as i2$2 from '@acorex/components/form';
25
+ import { AXFormModule } from '@acorex/components/form';
26
+ import * as i4$1 from '@acorex/components/search-box';
27
+ import { AXSearchBoxModule } from '@acorex/components/search-box';
28
+ import * as i1$1 from '@acorex/components/select-box';
29
+ import { AXSelectBoxModule } from '@acorex/components/select-box';
30
+ import * as i5 from '@angular/forms';
23
31
  import { FormsModule } from '@angular/forms';
24
32
  import { AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY } from '@acorex/platform/widgets';
25
- import * as i2$2 from '@acorex/platform/layout/components';
26
- import { AXPComponentSlotModule } from '@acorex/platform/layout/components';
33
+ import { AXSelectionCdkModule } from '@acorex/cdk/selection';
34
+ import { AXPopupService } from '@acorex/components/popup';
35
+ import * as i2$3 from '@acorex/components/button-group';
36
+ import { AXButtonGroupModule } from '@acorex/components/button-group';
37
+ import { AXBasePageComponent } from '@acorex/components/page';
27
38
 
28
39
  var AXPThemeLayoutSetting;
29
40
  (function (AXPThemeLayoutSetting) {
@@ -396,8 +407,8 @@ class AXPThemeSlotComponent {
396
407
  this.store = inject(AXPLayoutThemeService);
397
408
  this.variants = AXPThemeMode;
398
409
  }
399
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
400
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.6", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
410
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemeSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
411
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.7", type: AXPThemeSlotComponent, isStandalone: true, selector: "ng-component", ngImport: i0, template: `
401
412
  <ax-button color="primary">
402
413
  <ax-icon
403
414
  class="fa-regular "
@@ -442,7 +453,7 @@ class AXPThemeSlotComponent {
442
453
  </ax-button>
443
454
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { 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"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i3.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i2$1.AXTranslatorDirective, selector: "[translate]" }] }); }
444
455
  }
445
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
456
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemeSlotComponent, decorators: [{
446
457
  type: Component,
447
458
  args: [{
448
459
  template: `
@@ -522,68 +533,254 @@ class AXPThemePaletteProviderDefault {
522
533
  }
523
534
  }
524
535
 
525
- class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
536
+ class AXPColorProvider {
537
+ }
538
+ function titleCase(str) {
539
+ return str.replace(/-/g, ' ').replace(/\w\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());
540
+ }
541
+ function generateDefaultColors() {
542
+ const colors = [];
543
+ const styles = ['primary', 'secondary', 'success', 'warning', 'danger'];
544
+ const variants = [
545
+ 'lightest',
546
+ 'lighter',
547
+ 'light',
548
+ 'surface',
549
+ 'dark',
550
+ 'darker',
551
+ 'darkest',
552
+ // ,'default'
553
+ ];
554
+ for (const style of styles) {
555
+ for (const variant of variants) {
556
+ let name;
557
+ let colorClass;
558
+ // if (variant === 'default') {
559
+ // name = `${style}-${variant}`;
560
+ // colorClass = `ax-text-${style}-${variant}`;
561
+ // } else {
562
+ name = `${style}-${variant}`;
563
+ colorClass = `ax-text-${style}-on-${variant}`;
564
+ // }
565
+ colors.push({
566
+ title: titleCase(variant === 'surface' ? style : titleCase(name)),
567
+ name: name,
568
+ color: colorClass,
569
+ background: `ax-bg-${name}`,
570
+ border: `ax-border-${name}`,
571
+ });
572
+ }
573
+ }
574
+ return colors;
575
+ }
576
+ const DEFAULT_COLORS = generateDefaultColors();
577
+ class AXPColorProviderDefault extends AXPColorProvider {
578
+ async provide() {
579
+ return DEFAULT_COLORS;
580
+ }
581
+ }
582
+ const AXP_COLOR_PROVIDER = new InjectionToken('AXP_COLOR_PROVIDER');
583
+ class AXPColorChooserService {
584
+ constructor() {
585
+ this.defaultProvider = new AXPColorProviderDefault();
586
+ this.providers = (() => {
587
+ const injected = inject(AXP_COLOR_PROVIDER, { optional: true });
588
+ if (!injected) {
589
+ return [this.defaultProvider];
590
+ }
591
+ const providers = Array.isArray(injected) ? injected : [injected];
592
+ return [...providers, this.defaultProvider];
593
+ })();
594
+ this.cache = null;
595
+ }
596
+ async getColors() {
597
+ if (this.cache) {
598
+ return this.cache;
599
+ }
600
+ const allColors = [];
601
+ for (const resolver of this.providers) {
602
+ const result = await resolver.provide();
603
+ allColors.push(...result);
604
+ }
605
+ const uniqueColors = allColors.filter((color, index, self) => index === self.findIndex((c) => c.title === color.title));
606
+ this.cache = uniqueColors;
607
+ return uniqueColors;
608
+ }
609
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPColorChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
610
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPColorChooserService, providedIn: 'root' }); }
611
+ }
612
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPColorChooserService, decorators: [{
613
+ type: Injectable,
614
+ args: [{
615
+ providedIn: 'root',
616
+ }]
617
+ }] });
618
+
619
+ class AXPColorChooserWidgetComponent extends AXPValueWidgetComponent {
526
620
  constructor() {
527
621
  super(...arguments);
528
- this.paletteService = inject(AXP_THEME_PALETTE_PROVIDER);
529
- this.palettes = signal([]);
530
- this.selectedPalette = signal(null);
622
+ this.colors = signal([]);
623
+ this.colorService = inject(AXPColorChooserService);
624
+ }
625
+ async ngOnInit() {
626
+ this.colors.set(await this.colorService.getColors());
627
+ }
628
+ handleValueChange(name) {
629
+ if (!name) {
630
+ this.setValue(undefined);
631
+ return;
632
+ }
633
+ const color = this.colors().find((c) => c.name === name);
634
+ this.setValue(color);
635
+ }
636
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPColorChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
637
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.7", type: AXPColorChooserWidgetComponent, isStandalone: true, selector: "ax-color-chooser-widget", usesInheritance: true, ngImport: i0, template: `
638
+ <div class="ax-p-4">
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]="options()?.placeholder || 'Select a color...'"
646
+ [itemTemplate]="customItemTemplate"
647
+ [ngModel]="getValue()?.name"
648
+ (ngModelChange)="handleValueChange($event)"
649
+ >
650
+ <ng-template #customItemTemplate let-item>
651
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
652
+ <div
653
+ class="ax-w-6 ax-h-6 ax-rounded-md ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
654
+ [ngClass]="item.data.background"
655
+ >
656
+ <span [ngClass]="item.data.color">Aa</span>
657
+ </div>
658
+ <span>{{ item.data.title }}</span>
659
+ </div>
660
+ </ng-template>
661
+ <ax-search-box look="fill"></ax-search-box>
662
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
663
+ </ax-select-box>
664
+ </ax-form-field>
665
+ </ax-form>
666
+ </div>
667
+ `, 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", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed"] }, { 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: ["labelMode", "look", "messageStyle", "updateOn"], outputs: ["onValidate", "updateOnChange"] }, { kind: "directive", type: i2$2.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"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
668
+ }
669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPColorChooserWidgetComponent, decorators: [{
670
+ type: Component,
671
+ args: [{
672
+ selector: 'ax-color-chooser-widget',
673
+ template: `
674
+ <div class="ax-p-4">
675
+ <ax-form [messageStyle]="'float'" [updateOn]="'change'">
676
+ <ax-form-field>
677
+ <ax-select-box
678
+ [dataSource]="colors()"
679
+ textField="title"
680
+ valueField="name"
681
+ [placeholder]="options()?.placeholder || 'Select a color...'"
682
+ [itemTemplate]="customItemTemplate"
683
+ [ngModel]="getValue()?.name"
684
+ (ngModelChange)="handleValueChange($event)"
685
+ >
686
+ <ng-template #customItemTemplate let-item>
687
+ <div class="ax-flex ax-items-center ax-gap-2 ax-p-2">
688
+ <div
689
+ class="ax-w-6 ax-h-6 ax-rounded-md ax-flex ax-items-center ax-justify-center ax-border ax-border-dashed ax-border-black dark:ax-border-white"
690
+ [ngClass]="item.data.background"
691
+ >
692
+ <span [ngClass]="item.data.color">Aa</span>
693
+ </div>
694
+ <span>{{ item.data.title }}</span>
695
+ </div>
696
+ </ng-template>
697
+ <ax-search-box look="fill"></ax-search-box>
698
+ <ax-validation-rule message="field can't be empty" rule="required"></ax-validation-rule>
699
+ </ax-select-box>
700
+ </ax-form-field>
701
+ </ax-form>
702
+ </div>
703
+ `,
704
+ standalone: true,
705
+ imports: [AXSelectBoxModule, AXFormModule, CommonModule, AXSearchBoxModule, AXButtonModule, FormsModule],
706
+ changeDetection: ChangeDetectionStrategy.OnPush,
707
+ }]
708
+ }] });
709
+
710
+ var colorChooserWidget_component = /*#__PURE__*/Object.freeze({
711
+ __proto__: null,
712
+ AXPColorChooserWidgetComponent: AXPColorChooserWidgetComponent
713
+ });
714
+
715
+ const AXPColorChooserWidgetConfig = {
716
+ name: 'color-chooser',
717
+ title: 'Color Chooser',
718
+ icon: 'fa-solid fa-palette',
719
+ type: 'editor',
720
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
721
+ groups: [AXPWidgetGroupEnum.FormElement],
722
+ properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
723
+ components: {
724
+ edit: {
725
+ component: () => Promise.resolve().then(function () { return colorChooserWidget_component; }).then((c) => c.AXPColorChooserWidgetComponent),
726
+ },
727
+ column: {
728
+ component: () => import('./acorex-platform-themes-shared-color-chooser-view.component-CUtKW-cD.mjs').then((c) => c.AXPColorChooserViewComponent),
729
+ },
730
+ view: {
731
+ component: () => import('./acorex-platform-themes-shared-color-chooser-view.component-CUtKW-cD.mjs').then((c) => c.AXPColorChooserViewComponent),
732
+ },
733
+ },
734
+ };
735
+
736
+ class AXPFontSizeChooserWidgetComponent extends AXPValueWidgetComponent {
737
+ constructor() {
738
+ super(...arguments);
739
+ this.sizes = signal(['small', 'medium', 'large', 'x-large']);
740
+ this.selectedSize = signal(null);
531
741
  this.#eff = effect(() => {
532
742
  if (this.getValue()) {
533
- this.selectedPalette.set(this.palettes().find((p) => p.name === this.getValue()) ??
534
- this.palettes().find((p) => p.name === 'default') ??
535
- this.palettes()[0]);
743
+ this.selectedSize.set(this.sizes().find((s) => s === this.getValue()) ?? this.sizes()[0]);
536
744
  }
537
745
  });
538
746
  }
539
747
  #eff;
540
- async ngOnInit() {
541
- super.ngOnInit();
542
- const palletsProviderInstance = await this.paletteService;
543
- this.palettes.set(await palletsProviderInstance.getList());
544
- }
545
- onPaletteClick(palette) {
546
- this.setValue(palette.name);
748
+ onSizeClick(size) {
749
+ this.setValue(size);
547
750
  }
548
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
549
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: AXPThemePaletteChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
550
- @for (palette of palettes(); track palette.name) {
551
- <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
552
- <span>{{ palette.title }}</span>
751
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
752
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPFontSizeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
753
+ @for (size of sizes(); track size) {
754
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
553
755
  <div>
554
- <div [style.background-color]="palette.colors.primary" class="ax-end-7 ax-z-[2]"></div>
555
- <div [style.background-color]="palette.colors.secondary" class="ax-end-3.5 ax-z-[1]"></div>
556
- <div [style.background-color]="palette.colors.accents[0]" class="ax-end-0 ax-z-0"></div>
756
+ <span>{{ 'font-sizes.' + size | translate: { scope: 'layout' } | async }}</span>
557
757
  </div>
558
758
  </div>
559
759
  }
560
- `, 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:rgba(255,255,255,.5);--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 }); }
760
+ `, 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: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
561
761
  }
562
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
762
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, decorators: [{
563
763
  type: Component,
564
764
  args: [{ template: `
565
- @for (palette of palettes(); track palette.name) {
566
- <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
567
- <span>{{ palette.title }}</span>
765
+ @for (size of sizes(); track size) {
766
+ <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
568
767
  <div>
569
- <div [style.background-color]="palette.colors.primary" class="ax-end-7 ax-z-[2]"></div>
570
- <div [style.background-color]="palette.colors.secondary" class="ax-end-3.5 ax-z-[1]"></div>
571
- <div [style.background-color]="palette.colors.accents[0]" class="ax-end-0 ax-z-0"></div>
768
+ <span>{{ 'font-sizes.' + size | translate: { scope: 'layout' } | async }}</span>
572
769
  </div>
573
770
  </div>
574
771
  }
575
- `, 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:rgba(255,255,255,.5);--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"] }]
772
+ `, 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"] }]
576
773
  }] });
577
774
 
578
- var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
775
+ var fontSizeChooserWidget_component = /*#__PURE__*/Object.freeze({
579
776
  __proto__: null,
580
- AXPThemePaletteChooserWidgetComponent: AXPThemePaletteChooserWidgetComponent
777
+ AXPFontSizeChooserWidgetComponent: AXPFontSizeChooserWidgetComponent
581
778
  });
582
779
 
583
- const AXPThemePaletteChooserWidget = {
584
- name: "theme-palette-chooser",
585
- title: "Theme Palette Chooser",
586
- icon: "fa-solid fa-square",
780
+ const AXPFontSizeChooserWidget = {
781
+ name: "font-size-chooser",
782
+ title: "Font Size Chooser",
783
+ icon: "fa-light fa-text-size",
587
784
  type: 'editor',
588
785
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
589
786
  properties: [
@@ -593,65 +790,81 @@ const AXPThemePaletteChooserWidget = {
593
790
  ],
594
791
  components: {
595
792
  edit: {
596
- component: () => Promise.resolve().then(function () { return themePaletteChooserWidget_component; }).then((c) => c.AXPThemePaletteChooserWidgetComponent),
793
+ component: () => Promise.resolve().then(function () { return fontSizeChooserWidget_component; }).then((c) => c.AXPFontSizeChooserWidgetComponent),
597
794
  },
598
795
  }
599
796
  };
600
797
 
601
- class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
798
+ class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
602
799
  constructor() {
603
800
  super(...arguments);
604
- this.modes = signal([
605
- { id: AXPThemeMode.Light, icon: 'fa-light fa-brightness' },
606
- { id: AXPThemeMode.Dark, icon: 'fa-light fa-moon' },
607
- { id: AXPThemeMode.System, icon: 'fa-light fa-desktop' },
801
+ this.fonts = signal([
802
+ { id: 'system-ui', title: 'Default' },
803
+ { id: 'serif', title: 'Serif' },
804
+ { id: 'sans-serif', title: 'Sans-serif' },
805
+ { id: 'monospace', title: 'Monospace' },
806
+ { id: 'arial', title: 'Arial' },
807
+ { id: 'verdana', title: 'Verdana' },
808
+ { id: 'tahoma', title: 'Tahoma' },
809
+ { id: 'times-new-roman', title: 'Times New Roman' },
810
+ { id: 'georgia', title: 'Georgia' },
811
+ { id: 'helvetica', title: 'Helvetica' },
812
+ { id: 'calibri', title: 'Calibri' },
813
+ { id: 'cursive', title: 'Cursive' },
814
+ { id: 'vazirmatn', title: 'Vazir وزیر' },
608
815
  ]);
609
- this.selectedMode = signal(null);
816
+ this.selectedFont = signal(null);
610
817
  this.#eff = effect(() => {
611
818
  if (this.getValue()) {
612
- this.selectedMode.set(this.modes().find((m) => m.id === this.getValue()) ?? this.modes()[0]);
819
+ this.selectedFont.set(this.fonts().find((f) => f.id === this.getValue()) ?? this.fonts()[0]);
613
820
  }
614
821
  });
615
822
  }
616
823
  #eff;
617
- onModeClick(mode) {
618
- this.setValue(mode.id);
824
+ onFontClick(font) {
825
+ this.setValue(font.id);
619
826
  }
620
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
621
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: AXPThemeModeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
622
- @for (mode of modes(); track mode.id) {
623
- <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
827
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
828
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
829
+ @for (font of fonts(); track font.id) {
830
+ <div
831
+ (click)="onFontClick(font)"
832
+ [class.--selected]="font.id === selectedFont()?.id"
833
+ [style.font-family]="font.id"
834
+ >
624
835
  <div>
625
- <i [class]="mode.icon"></i>
836
+ <span>{{ font.title }}</span>
626
837
  </div>
627
- <span>{{ 'theme-modes.' + mode.id | translate: { scope: 'layout' } | async }}</span>
628
838
  </div>
629
839
  }
630
- `, 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: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
840
+ `, 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 }); }
631
841
  }
632
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
842
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
633
843
  type: Component,
634
844
  args: [{ template: `
635
- @for (mode of modes(); track mode.id) {
636
- <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
845
+ @for (font of fonts(); track font.id) {
846
+ <div
847
+ (click)="onFontClick(font)"
848
+ [class.--selected]="font.id === selectedFont()?.id"
849
+ [style.font-family]="font.id"
850
+ >
637
851
  <div>
638
- <i [class]="mode.icon"></i>
852
+ <span>{{ font.title }}</span>
639
853
  </div>
640
- <span>{{ 'theme-modes.' + mode.id | translate: { scope: 'layout' } | async }}</span>
641
854
  </div>
642
855
  }
643
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"] }]
856
+ `, 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"] }]
644
857
  }] });
645
858
 
646
- var themeModeChooserWidget_component = /*#__PURE__*/Object.freeze({
859
+ var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
647
860
  __proto__: null,
648
- AXPThemeModeChooserWidgetComponent: AXPThemeModeChooserWidgetComponent
861
+ AXPFontStyleChooserWidgetComponent: AXPFontStyleChooserWidgetComponent
649
862
  });
650
863
 
651
- const AXPThemeModeChooserWidget = {
652
- name: "theme-mode-chooser",
653
- title: "Theme Mode Chooser",
654
- icon: "fa-solid fa-square",
864
+ const AXPFontStyleChooserWidget = {
865
+ name: "font-style-chooser",
866
+ title: "Font Style Chooser",
867
+ icon: "fa-light fa-font",
655
868
  type: 'editor',
656
869
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
657
870
  properties: [
@@ -661,11 +874,434 @@ const AXPThemeModeChooserWidget = {
661
874
  ],
662
875
  components: {
663
876
  edit: {
664
- component: () => Promise.resolve().then(function () { return themeModeChooserWidget_component; }).then((c) => c.AXPThemeModeChooserWidgetComponent),
877
+ component: () => Promise.resolve().then(function () { return fontStyleChooserWidget_component; }).then((c) => c.AXPFontStyleChooserWidgetComponent),
665
878
  },
666
879
  }
667
880
  };
668
881
 
882
+ class AXPIconProvider {
883
+ }
884
+ class AXPIconStyleProvider {
885
+ }
886
+ const DEFAULT_ICON_STYLES = [
887
+ { name: 'fa-solid', label: 'Solid' },
888
+ { name: 'fa-regular', label: 'Regular' },
889
+ ];
890
+ const DEFAULT_ICONS = [
891
+ { name: 'house', label: 'House', tags: ['home', 'building'], supportedStyle: ['fa-regular'] },
892
+ { name: 'magnifying-glass', label: 'Search', tags: ['find', 'zoom'], supportedStyle: ['fa-solid'] },
893
+ { name: 'user', label: 'User', tags: ['person', 'account'] },
894
+ { name: 'check', label: 'Check', tags: ['confirm', 'done'] },
895
+ { name: 'xmark', label: 'Close', tags: ['cancel', 'exit'] },
896
+ { name: 'star', label: 'Star', tags: ['favorite', 'rate'] },
897
+ { name: 'heart', label: 'Heart', tags: ['love', 'like'] },
898
+ { name: 'cloud', label: 'Cloud', tags: ['weather', 'sky'] },
899
+ { name: 'envelope', label: 'Envelope', tags: ['mail', 'message'] },
900
+ { name: 'folder', label: 'Folder', tags: ['directory', 'files'] },
901
+ { name: 'gear', label: 'Gear', tags: ['settings', 'options'] },
902
+ { name: 'camera', label: 'Camera', tags: ['photo', 'image'] },
903
+ { name: 'video', label: 'Video', tags: ['film', 'movie'] },
904
+ { name: 'music', label: 'Music', tags: ['sound', 'audio'] },
905
+ { name: 'file-lines', label: 'File', tags: ['document', 'text'] },
906
+ ];
907
+ class AXPIconProviderDefault extends AXPIconProvider {
908
+ async provide() {
909
+ return DEFAULT_ICONS;
910
+ }
911
+ }
912
+ class AXPIconStyleProviderDefault extends AXPIconStyleProvider {
913
+ async provide() {
914
+ return DEFAULT_ICON_STYLES;
915
+ }
916
+ }
917
+ const AXP_ICON_PROVIDER = new InjectionToken('AXP_ICON_PROVIDER');
918
+ const AXP_ICON_STYLE_PROVIDER = new InjectionToken('AXP_ICON_STYLE_PROVIDER');
919
+ class AXPIconChooserService {
920
+ constructor() {
921
+ this.defaultIconProvider = new AXPIconProviderDefault();
922
+ this.iconProviders = (() => {
923
+ const injected = inject(AXP_ICON_PROVIDER, { optional: true });
924
+ if (!injected) {
925
+ return [this.defaultIconProvider];
926
+ }
927
+ const providers = Array.isArray(injected) ? injected : [injected];
928
+ return [...providers, this.defaultIconProvider];
929
+ })();
930
+ this.defaultStyleProvider = new AXPIconStyleProviderDefault();
931
+ this.styleProviders = (() => {
932
+ const injected = inject(AXP_ICON_STYLE_PROVIDER, { optional: true });
933
+ if (!injected) {
934
+ return [this.defaultStyleProvider];
935
+ }
936
+ const providers = Array.isArray(injected) ? injected : [injected];
937
+ return [...providers, this.defaultStyleProvider];
938
+ })();
939
+ this.iconsCache = null;
940
+ this.stylesCache = null;
941
+ }
942
+ async getStyles() {
943
+ if (this.stylesCache) {
944
+ return this.stylesCache;
945
+ }
946
+ const allStyles = [];
947
+ for (const resolver of this.styleProviders) {
948
+ const result = await resolver.provide();
949
+ allStyles.push(...result);
950
+ }
951
+ const uniqueStyles = allStyles.filter((style, index, self) => index === self.findIndex((s) => s.name === style.name));
952
+ this.stylesCache = uniqueStyles;
953
+ return uniqueStyles;
954
+ }
955
+ async getIcons() {
956
+ if (this.iconsCache) {
957
+ return this.iconsCache;
958
+ }
959
+ const allIcons = [];
960
+ for (const resolver of this.iconProviders) {
961
+ const result = await resolver.provide();
962
+ allIcons.push(...result);
963
+ }
964
+ const uniqueIcons = allIcons.filter((icon, index, self) => index === self.findIndex((i) => i.name === icon.name));
965
+ this.iconsCache = uniqueIcons;
966
+ return uniqueIcons;
967
+ }
968
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
969
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserService }); }
970
+ }
971
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserService, decorators: [{
972
+ type: Injectable
973
+ }] });
974
+
975
+ class AXPIconChooserPopupComponent extends AXBasePageComponent {
976
+ constructor() {
977
+ super(...arguments);
978
+ this.icons = [];
979
+ this.filteredIcons = [];
980
+ this.searchQuery = '';
981
+ this.viewModes = [
982
+ { value: 'square', text: 'Square View', icon: 'fa-solid fa-border-all' },
983
+ {
984
+ value: 'rectangle',
985
+ text: 'Rectangle View',
986
+ icon: 'fa-solid fa-list',
987
+ },
988
+ ];
989
+ this.selectedViewMode = 'square';
990
+ this.iconTypes = [];
991
+ this.selectedIconType = 'fa-solid';
992
+ this.popupService = inject(AXPIconChooserService);
993
+ }
994
+ async ngOnInit() {
995
+ this.iconTypes = await this.popupService.getStyles();
996
+ this.icons = await this.popupService.getIcons();
997
+ this.applyFilters();
998
+ this.cdr.detectChanges();
999
+ }
1000
+ handleSearch(event) {
1001
+ this.searchQuery = event.value?.toLowerCase();
1002
+ this.applyFilters();
1003
+ }
1004
+ handleViewModeChange(mode) {
1005
+ this.selectedViewMode = mode.value;
1006
+ }
1007
+ handleIconTypeChange(type) {
1008
+ this.selectedIconType = type.name;
1009
+ this.applyFilters();
1010
+ }
1011
+ applyFilters() {
1012
+ let result = this.icons;
1013
+ if (this.searchQuery) {
1014
+ result = result.filter((icon) => icon.label.toLowerCase().includes(this.searchQuery) ||
1015
+ icon.tags?.some((tag) => tag.toLowerCase().includes(this.searchQuery)));
1016
+ }
1017
+ result = result.filter((icon) => {
1018
+ if (!icon.supportedStyle || icon.supportedStyle.length === 0) {
1019
+ return true;
1020
+ }
1021
+ return icon.supportedStyle.includes(this.selectedIconType);
1022
+ });
1023
+ this.filteredIcons = result;
1024
+ }
1025
+ selectIcon(icon) {
1026
+ this.close({
1027
+ label: icon.label,
1028
+ styleClass: this.selectedIconType,
1029
+ iconClass: `fa-${icon.name}`,
1030
+ });
1031
+ }
1032
+ getIconClass(icon) {
1033
+ return `${this.selectedIconType} fa-${icon.name}`;
1034
+ }
1035
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserPopupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1036
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPIconChooserPopupComponent, isStandalone: true, selector: "ng-component", inputs: { value: "value" }, providers: [AXPIconChooserService], usesInheritance: true, ngImport: i0, template: `
1037
+ <div class="ax-flex ax-flex-col ax-h-full ax-p-4 ax-gap-4 ax-bg-lightest">
1038
+ <div class="ax-flex ax-justify-center">
1039
+ <ax-search-box
1040
+ class="ax-w-full md:ax-w-1/2"
1041
+ (onValueChanged)="handleSearch($event)"
1042
+ placeholder="Search for icons..."
1043
+ ></ax-search-box>
1044
+ </div>
1045
+
1046
+ <div class="ax-flex ax-justify-between ax-items-center ax-flex-wrap ax-gap-2">
1047
+ <ax-button-group selection="single" look="outline">
1048
+ @for (item of iconTypes; track item.name) {
1049
+ <ax-button-group-item
1050
+ [text]="item.label"
1051
+ [selected]="item.name === selectedIconType"
1052
+ (onClick)="handleIconTypeChange(item)"
1053
+ >
1054
+ </ax-button-group-item>
1055
+ }
1056
+ </ax-button-group>
1057
+
1058
+ <ax-button-group selection="single" look="outline">
1059
+ @for (item of viewModes; track item.value) {
1060
+ <ax-button-group-item
1061
+ [title]="item.text"
1062
+ [selected]="item.value === selectedViewMode"
1063
+ (onClick)="handleViewModeChange(item)"
1064
+ >
1065
+ <ax-icon [class]="item.icon"></ax-icon>
1066
+ </ax-button-group-item>
1067
+ }
1068
+ </ax-button-group>
1069
+ </div>
1070
+
1071
+ <div class="ax-flex-1 ax-overflow-y-auto ax-pr-2">
1072
+ <div
1073
+ class="ax-grid ax-gap-1"
1074
+ [ngClass]="
1075
+ selectedViewMode === 'square'
1076
+ ? 'ax-grid-cols-[repeat(auto-fill,minmax(6rem,1fr))]'
1077
+ : 'ax-grid-cols-1 md:ax-grid-cols-2'
1078
+ "
1079
+ >
1080
+ @for (icon of filteredIcons; track icon) {
1081
+ <div
1082
+ class="ax-p-4 ax-border ax-border-transparent ax-rounded-lg ax-flex ax-items-center ax-justify-center ax-gap-2 ax-cursor-pointer ax-transition-all ax-duration-200 ax-ease-in-out hover:ax-border-primary hover:ax-shadow-md"
1083
+ [ngClass]="{
1084
+ 'ax-flex-col': selectedViewMode === 'square',
1085
+ 'ax-flex-row ax-justify-start': selectedViewMode === 'rectangle',
1086
+ }"
1087
+ (click)="selectIcon(icon)"
1088
+ >
1089
+ <i [class]="getIconClass(icon) + ' ax-text-3xl'"></i>
1090
+ <span
1091
+ class="ax-text-xs ax-w-full ax-overflow-hidden ax-text-ellipsis ax-whitespace-nowrap"
1092
+ [ngClass]="{
1093
+ 'ax-text-center': selectedViewMode === 'square',
1094
+ 'ax-text-left': selectedViewMode === 'rectangle',
1095
+ }"
1096
+ >{{ icon.label }}</span
1097
+ >
1098
+ </div>
1099
+ }
1100
+ </div>
1101
+ </div>
1102
+ </div>
1103
+ `, 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"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i2$3.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "onClick", "selectionChange", "selectedButtonChange"] }, { kind: "component", type: i2$3.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1104
+ }
1105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserPopupComponent, decorators: [{
1106
+ type: Component,
1107
+ args: [{
1108
+ standalone: true,
1109
+ template: `
1110
+ <div class="ax-flex ax-flex-col ax-h-full ax-p-4 ax-gap-4 ax-bg-lightest">
1111
+ <div class="ax-flex ax-justify-center">
1112
+ <ax-search-box
1113
+ class="ax-w-full md:ax-w-1/2"
1114
+ (onValueChanged)="handleSearch($event)"
1115
+ placeholder="Search for icons..."
1116
+ ></ax-search-box>
1117
+ </div>
1118
+
1119
+ <div class="ax-flex ax-justify-between ax-items-center ax-flex-wrap ax-gap-2">
1120
+ <ax-button-group selection="single" look="outline">
1121
+ @for (item of iconTypes; track item.name) {
1122
+ <ax-button-group-item
1123
+ [text]="item.label"
1124
+ [selected]="item.name === selectedIconType"
1125
+ (onClick)="handleIconTypeChange(item)"
1126
+ >
1127
+ </ax-button-group-item>
1128
+ }
1129
+ </ax-button-group>
1130
+
1131
+ <ax-button-group selection="single" look="outline">
1132
+ @for (item of viewModes; track item.value) {
1133
+ <ax-button-group-item
1134
+ [title]="item.text"
1135
+ [selected]="item.value === selectedViewMode"
1136
+ (onClick)="handleViewModeChange(item)"
1137
+ >
1138
+ <ax-icon [class]="item.icon"></ax-icon>
1139
+ </ax-button-group-item>
1140
+ }
1141
+ </ax-button-group>
1142
+ </div>
1143
+
1144
+ <div class="ax-flex-1 ax-overflow-y-auto ax-pr-2">
1145
+ <div
1146
+ class="ax-grid ax-gap-1"
1147
+ [ngClass]="
1148
+ selectedViewMode === 'square'
1149
+ ? 'ax-grid-cols-[repeat(auto-fill,minmax(6rem,1fr))]'
1150
+ : 'ax-grid-cols-1 md:ax-grid-cols-2'
1151
+ "
1152
+ >
1153
+ @for (icon of filteredIcons; track icon) {
1154
+ <div
1155
+ class="ax-p-4 ax-border ax-border-transparent ax-rounded-lg ax-flex ax-items-center ax-justify-center ax-gap-2 ax-cursor-pointer ax-transition-all ax-duration-200 ax-ease-in-out hover:ax-border-primary hover:ax-shadow-md"
1156
+ [ngClass]="{
1157
+ 'ax-flex-col': selectedViewMode === 'square',
1158
+ 'ax-flex-row ax-justify-start': selectedViewMode === 'rectangle',
1159
+ }"
1160
+ (click)="selectIcon(icon)"
1161
+ >
1162
+ <i [class]="getIconClass(icon) + ' ax-text-3xl'"></i>
1163
+ <span
1164
+ class="ax-text-xs ax-w-full ax-overflow-hidden ax-text-ellipsis ax-whitespace-nowrap"
1165
+ [ngClass]="{
1166
+ 'ax-text-center': selectedViewMode === 'square',
1167
+ 'ax-text-left': selectedViewMode === 'rectangle',
1168
+ }"
1169
+ >{{ icon.label }}</span
1170
+ >
1171
+ </div>
1172
+ }
1173
+ </div>
1174
+ </div>
1175
+ </div>
1176
+ `,
1177
+ imports: [AXSearchBoxModule, AXButtonGroupModule, CommonModule, AXDecoratorModule],
1178
+ providers: [AXPIconChooserService],
1179
+ changeDetection: ChangeDetectionStrategy.OnPush,
1180
+ }]
1181
+ }], propDecorators: { value: [{
1182
+ type: Input
1183
+ }] } });
1184
+
1185
+ class AXPIconChooserWidgetComponent extends AXPValueWidgetComponent {
1186
+ constructor() {
1187
+ super(...arguments);
1188
+ this.popupService = inject(AXPopupService);
1189
+ }
1190
+ async openPopup() {
1191
+ const result = await this.popupService.open(AXPIconChooserPopupComponent, {
1192
+ title: 'Choose Icon',
1193
+ size: 'md',
1194
+ data: {
1195
+ value: this.getValue(),
1196
+ },
1197
+ });
1198
+ if (result?.data) {
1199
+ this.setValue(result.data);
1200
+ }
1201
+ }
1202
+ addIcon() {
1203
+ if (!this.getValue()) {
1204
+ this.openPopup();
1205
+ }
1206
+ }
1207
+ deleteIcon() {
1208
+ this.setValue(undefined);
1209
+ }
1210
+ editIcon() {
1211
+ this.openPopup();
1212
+ }
1213
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1214
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPIconChooserWidgetComponent, isStandalone: true, selector: "ax-icon-chooser-widget", usesInheritance: true, ngImport: i0, template: `<div class="ax-p-4 ax-w-fit">
1215
+ <div
1216
+ class="ax-grid ax-grid-cols-[6rem_auto] ax-items-center ax-rounded-md ax-text-3xl ax-w-fit"
1217
+ [class.ax-border]="getValue()"
1218
+ >
1219
+ <!-- Left: Add or Selected Icon -->
1220
+ <div
1221
+ class="ax-grid ax-place-items-center ax-w-24 ax-h-24 "
1222
+ [class]="getValue() ? 'ax-border-e ax-cursor-default' : 'icon-container ax-cursor-pointer'"
1223
+ (click)="addIcon()"
1224
+ >
1225
+ <i [class]="getValue() ? getValue().styleClass + ' ' + getValue().iconClass : 'fa-solid fa-plus'"></i>
1226
+ </div>
1227
+
1228
+ <!-- Right: Edit & Delete (only if value exists) -->
1229
+ @if (getValue()) {
1230
+ <div class="ax-flex ax-flex-col ax-w-16 ax-text-2xl">
1231
+ <div class="ax-h-12 ax-grid ax-place-items-center ax-cursor-pointer hover:ax-bg-surface" (click)="editIcon()">
1232
+ <i class="fa-light fa-edit ax-text-primary-400"></i>
1233
+ </div>
1234
+ <div
1235
+ class="ax-h-12 ax-grid ax-place-items-center ax-cursor-pointer ax-border-t hover:ax-bg-surface"
1236
+ (click)="deleteIcon()"
1237
+ >
1238
+ <i class="fa-light fa-trash-can ax-text-danger-400"></i>
1239
+ </div>
1240
+ </div>
1241
+ }
1242
+ </div>
1243
+ </div> `, 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 }); }
1244
+ }
1245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPIconChooserWidgetComponent, decorators: [{
1246
+ type: Component,
1247
+ args: [{ selector: 'ax-icon-chooser-widget', template: `<div class="ax-p-4 ax-w-fit">
1248
+ <div
1249
+ class="ax-grid ax-grid-cols-[6rem_auto] ax-items-center ax-rounded-md ax-text-3xl ax-w-fit"
1250
+ [class.ax-border]="getValue()"
1251
+ >
1252
+ <!-- Left: Add or Selected Icon -->
1253
+ <div
1254
+ class="ax-grid ax-place-items-center ax-w-24 ax-h-24 "
1255
+ [class]="getValue() ? 'ax-border-e ax-cursor-default' : 'icon-container ax-cursor-pointer'"
1256
+ (click)="addIcon()"
1257
+ >
1258
+ <i [class]="getValue() ? getValue().styleClass + ' ' + getValue().iconClass : 'fa-solid fa-plus'"></i>
1259
+ </div>
1260
+
1261
+ <!-- Right: Edit & Delete (only if value exists) -->
1262
+ @if (getValue()) {
1263
+ <div class="ax-flex ax-flex-col ax-w-16 ax-text-2xl">
1264
+ <div class="ax-h-12 ax-grid ax-place-items-center ax-cursor-pointer hover:ax-bg-surface" (click)="editIcon()">
1265
+ <i class="fa-light fa-edit ax-text-primary-400"></i>
1266
+ </div>
1267
+ <div
1268
+ class="ax-h-12 ax-grid ax-place-items-center ax-cursor-pointer ax-border-t hover:ax-bg-surface"
1269
+ (click)="deleteIcon()"
1270
+ >
1271
+ <i class="fa-light fa-trash-can ax-text-danger-400"></i>
1272
+ </div>
1273
+ </div>
1274
+ }
1275
+ </div>
1276
+ </div> `, changeDetection: ChangeDetectionStrategy.OnPush, standalone: 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"] }]
1277
+ }] });
1278
+
1279
+ var iconChooserWidget_component = /*#__PURE__*/Object.freeze({
1280
+ __proto__: null,
1281
+ AXPIconChooserWidgetComponent: AXPIconChooserWidgetComponent
1282
+ });
1283
+
1284
+ const AXPIconChooserWidget = {
1285
+ name: 'icon-chooser',
1286
+ title: 'Icon Chooser',
1287
+ icon: 'fa-solid fa-icons',
1288
+ type: 'editor',
1289
+ categories: AXP_WIDGETS_LAYOUT_CATEGORY,
1290
+ groups: [AXPWidgetGroupEnum.FormElement],
1291
+ properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
1292
+ components: {
1293
+ edit: {
1294
+ component: () => Promise.resolve().then(function () { return iconChooserWidget_component; }).then((c) => c.AXPIconChooserWidgetComponent),
1295
+ },
1296
+ column: {
1297
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-Dc3LQQOa.mjs').then((c) => c.AXPIconChooserViewComponent),
1298
+ },
1299
+ view: {
1300
+ component: () => import('./acorex-platform-themes-shared-icon-chooser-view.component-Dc3LQQOa.mjs').then((c) => c.AXPIconChooserViewComponent),
1301
+ },
1302
+ },
1303
+ };
1304
+
669
1305
  class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
670
1306
  constructor() {
671
1307
  super(...arguments);
@@ -684,8 +1320,8 @@ class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
684
1320
  onOrientationClick(orientation) {
685
1321
  this.setValue(orientation.id);
686
1322
  }
687
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
688
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: AXPMenuOrientationChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1323
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPMenuOrientationChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
689
1325
  @for (orientation of orientations(); track orientation.id) {
690
1326
  <div (click)="onOrientationClick(orientation)" [class.--selected]="orientation.id === selectedOrientation()?.id">
691
1327
  <div>
@@ -696,7 +1332,7 @@ class AXPMenuOrientationChooserWidgetComponent extends AXPValueWidgetComponent {
696
1332
  }
697
1333
  `, 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: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
698
1334
  }
699
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
1335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPMenuOrientationChooserWidgetComponent, decorators: [{
700
1336
  type: Component,
701
1337
  args: [{ template: `
702
1338
  @for (orientation of orientations(); track orientation.id) {
@@ -733,76 +1369,60 @@ const AXPMenuOrientationChooserWidget = {
733
1369
  }
734
1370
  };
735
1371
 
736
- class AXPFontStyleChooserWidgetComponent extends AXPValueWidgetComponent {
1372
+ class AXPThemeModeChooserWidgetComponent extends AXPValueWidgetComponent {
737
1373
  constructor() {
738
1374
  super(...arguments);
739
- this.fonts = signal([
740
- { id: 'system-ui', title: 'Default' },
741
- { id: 'serif', title: 'Serif' },
742
- { id: 'sans-serif', title: 'Sans-serif' },
743
- { id: 'monospace', title: 'Monospace' },
744
- { id: 'arial', title: 'Arial' },
745
- { id: 'verdana', title: 'Verdana' },
746
- { id: 'tahoma', title: 'Tahoma' },
747
- { id: 'times-new-roman', title: 'Times New Roman' },
748
- { id: 'georgia', title: 'Georgia' },
749
- { id: 'helvetica', title: 'Helvetica' },
750
- { id: 'calibri', title: 'Calibri' },
751
- { id: 'cursive', title: 'Cursive' },
752
- { id: 'vazirmatn', title: 'Vazir وزیر' },
1375
+ this.modes = signal([
1376
+ { id: AXPThemeMode.Light, icon: 'fa-light fa-brightness' },
1377
+ { id: AXPThemeMode.Dark, icon: 'fa-light fa-moon' },
1378
+ { id: AXPThemeMode.System, icon: 'fa-light fa-desktop' },
753
1379
  ]);
754
- this.selectedFont = signal(null);
1380
+ this.selectedMode = signal(null);
755
1381
  this.#eff = effect(() => {
756
1382
  if (this.getValue()) {
757
- this.selectedFont.set(this.fonts().find((f) => f.id === this.getValue()) ?? this.fonts()[0]);
1383
+ this.selectedMode.set(this.modes().find((m) => m.id === this.getValue()) ?? this.modes()[0]);
758
1384
  }
759
1385
  });
760
1386
  }
761
1387
  #eff;
762
- onFontClick(font) {
763
- this.setValue(font.id);
1388
+ onModeClick(mode) {
1389
+ this.setValue(mode.id);
764
1390
  }
765
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
766
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: AXPFontStyleChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
767
- @for (font of fonts(); track font.id) {
768
- <div
769
- (click)="onFontClick(font)"
770
- [class.--selected]="font.id === selectedFont()?.id"
771
- [style.font-family]="font.id"
772
- >
1391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPThemeModeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1393
+ @for (mode of modes(); track mode.id) {
1394
+ <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
773
1395
  <div>
774
- <span>{{ font.title }}</span>
1396
+ <i [class]="mode.icon"></i>
775
1397
  </div>
1398
+ <span>{{ 'theme-modes.' + mode.id | translate: { scope: 'layout' } | async }}</span>
776
1399
  </div>
777
1400
  }
778
- `, 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 }); }
1401
+ `, 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: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
779
1402
  }
780
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPFontStyleChooserWidgetComponent, decorators: [{
1403
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemeModeChooserWidgetComponent, decorators: [{
781
1404
  type: Component,
782
1405
  args: [{ template: `
783
- @for (font of fonts(); track font.id) {
784
- <div
785
- (click)="onFontClick(font)"
786
- [class.--selected]="font.id === selectedFont()?.id"
787
- [style.font-family]="font.id"
788
- >
1406
+ @for (mode of modes(); track mode.id) {
1407
+ <div (click)="onModeClick(mode)" [class.--selected]="mode.id === selectedMode()?.id">
789
1408
  <div>
790
- <span>{{ font.title }}</span>
1409
+ <i [class]="mode.icon"></i>
791
1410
  </div>
1411
+ <span>{{ 'theme-modes.' + mode.id | translate: { scope: 'layout' } | async }}</span>
792
1412
  </div>
793
1413
  }
794
- `, 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"] }]
1414
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, FormsModule, AXSelectionCdkModule, AXTranslationModule], styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;gap:.5rem}:host>div{display:flex;cursor:pointer;flex-direction:row;align-items:center;justify-content:space-between;gap:.5rem;border-radius:.5rem;padding:.5rem 1rem;background-color:rgb(var(--ax-sys-color-light-surface));color:rgb(var(--ax-sys-color-on-light-surface));border-color:rgb(var(--ax-sys-color-border-light-surface))}:host>div:is(.ax-dark *){background-color:rgb(var(--ax-sys-color-surface));color:rgb(var(--ax-sys-color-on-surface));border-color:rgb(var(--ax-sys-color-border-surface))}:host>div{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;animation-duration:.2s}:host>div:hover{background-color:rgb(var(--ax-sys-color-dark-surface));color:rgb(var(--ax-sys-color-on-dark-surface));border-color:rgb(var(--ax-sys-color-border-dark-surface))}:host>div.--selected{background-color:rgb(var(--ax-sys-color-primary-lighter-surface));color:rgb(var(--ax-sys-color-on-primary-lighter-surface));border-color:rgb(var(--ax-sys-color-border-primary-lighter-surface))}:host>div>div{display:flex;align-items:center;justify-content:center}:host>div>div i{font-size:1.25rem;line-height:1.75rem}:host>div>span{font-size:.875rem;line-height:1.25rem;font-weight:600;line-height:1.625}:host>div{padding-top:.25rem!important;padding-bottom:.25rem!important}\n"] }]
795
1415
  }] });
796
1416
 
797
- var fontStyleChooserWidget_component = /*#__PURE__*/Object.freeze({
1417
+ var themeModeChooserWidget_component = /*#__PURE__*/Object.freeze({
798
1418
  __proto__: null,
799
- AXPFontStyleChooserWidgetComponent: AXPFontStyleChooserWidgetComponent
1419
+ AXPThemeModeChooserWidgetComponent: AXPThemeModeChooserWidgetComponent
800
1420
  });
801
1421
 
802
- const AXPFontStyleChooserWidget = {
803
- name: "font-style-chooser",
804
- title: "Font Style Chooser",
805
- icon: "fa-light fa-font",
1422
+ const AXPThemeModeChooserWidget = {
1423
+ name: "theme-mode-chooser",
1424
+ title: "Theme Mode Chooser",
1425
+ icon: "fa-solid fa-square",
806
1426
  type: 'editor',
807
1427
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
808
1428
  properties: [
@@ -812,59 +1432,73 @@ const AXPFontStyleChooserWidget = {
812
1432
  ],
813
1433
  components: {
814
1434
  edit: {
815
- component: () => Promise.resolve().then(function () { return fontStyleChooserWidget_component; }).then((c) => c.AXPFontStyleChooserWidgetComponent),
1435
+ component: () => Promise.resolve().then(function () { return themeModeChooserWidget_component; }).then((c) => c.AXPThemeModeChooserWidgetComponent),
816
1436
  },
817
1437
  }
818
1438
  };
819
1439
 
820
- class AXPFontSizeChooserWidgetComponent extends AXPValueWidgetComponent {
1440
+ class AXPThemePaletteChooserWidgetComponent extends AXPValueWidgetComponent {
821
1441
  constructor() {
822
1442
  super(...arguments);
823
- this.sizes = signal(['small', 'medium', 'large', 'x-large']);
824
- this.selectedSize = signal(null);
1443
+ this.paletteService = inject(AXP_THEME_PALETTE_PROVIDER);
1444
+ this.palettes = signal([]);
1445
+ this.selectedPalette = signal(null);
825
1446
  this.#eff = effect(() => {
826
1447
  if (this.getValue()) {
827
- this.selectedSize.set(this.sizes().find((s) => s === this.getValue()) ?? this.sizes()[0]);
1448
+ this.selectedPalette.set(this.palettes().find((p) => p.name === this.getValue()) ??
1449
+ this.palettes().find((p) => p.name === 'default') ??
1450
+ this.palettes()[0]);
828
1451
  }
829
1452
  });
830
1453
  }
831
1454
  #eff;
832
- onSizeClick(size) {
833
- this.setValue(size);
1455
+ async ngOnInit() {
1456
+ super.ngOnInit();
1457
+ const palletsProviderInstance = await this.paletteService;
1458
+ this.palettes.set(await palletsProviderInstance.getList());
834
1459
  }
835
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
836
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: AXPFontSizeChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
837
- @for (size of sizes(); track size) {
838
- <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1460
+ onPaletteClick(palette) {
1461
+ this.setValue(palette.name);
1462
+ }
1463
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1464
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.7", type: AXPThemePaletteChooserWidgetComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1465
+ @for (palette of palettes(); track palette.name) {
1466
+ <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
1467
+ <span>{{ palette.title }}</span>
839
1468
  <div>
840
- <span>{{ 'font-sizes.' + size | translate: { scope: 'layout' } | async }}</span>
1469
+ <div [style.background-color]="palette.colors.primary" class="ax-end-7 ax-z-[2]"></div>
1470
+ <div [style.background-color]="palette.colors.secondary" class="ax-end-3.5 ax-z-[1]"></div>
1471
+ <div [style.background-color]="palette.colors.accents[0]" class="ax-end-0 ax-z-0"></div>
841
1472
  </div>
842
1473
  </div>
843
1474
  }
844
- `, 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: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: AXSelectionCdkModule }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i2$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1475
+ `, 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:rgba(255,255,255,.5);--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 }); }
845
1476
  }
846
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPFontSizeChooserWidgetComponent, decorators: [{
1477
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemePaletteChooserWidgetComponent, decorators: [{
847
1478
  type: Component,
848
1479
  args: [{ template: `
849
- @for (size of sizes(); track size) {
850
- <div (click)="onSizeClick(size)" [style.font-size]="size" [class.--selected]="size === selectedSize()">
1480
+ @for (palette of palettes(); track palette.name) {
1481
+ <div (click)="onPaletteClick(palette)" [class.--selected]="palette.name === selectedPalette()?.name">
1482
+ <span>{{ palette.title }}</span>
851
1483
  <div>
852
- <span>{{ 'font-sizes.' + size | translate: { scope: 'layout' } | async }}</span>
1484
+ <div [style.background-color]="palette.colors.primary" class="ax-end-7 ax-z-[2]"></div>
1485
+ <div [style.background-color]="palette.colors.secondary" class="ax-end-3.5 ax-z-[1]"></div>
1486
+ <div [style.background-color]="palette.colors.accents[0]" class="ax-end-0 ax-z-0"></div>
853
1487
  </div>
854
1488
  </div>
855
1489
  }
856
- `, 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"] }]
1490
+ `, 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:rgba(255,255,255,.5);--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"] }]
857
1491
  }] });
858
1492
 
859
- var fontSizeChooserWidget_component = /*#__PURE__*/Object.freeze({
1493
+ var themePaletteChooserWidget_component = /*#__PURE__*/Object.freeze({
860
1494
  __proto__: null,
861
- AXPFontSizeChooserWidgetComponent: AXPFontSizeChooserWidgetComponent
1495
+ AXPThemePaletteChooserWidgetComponent: AXPThemePaletteChooserWidgetComponent
862
1496
  });
863
1497
 
864
- const AXPFontSizeChooserWidget = {
865
- name: "font-size-chooser",
866
- title: "Font Size Chooser",
867
- icon: "fa-light fa-text-size",
1498
+ const AXPThemePaletteChooserWidget = {
1499
+ name: "theme-palette-chooser",
1500
+ title: "Theme Palette Chooser",
1501
+ icon: "fa-solid fa-square",
868
1502
  type: 'editor',
869
1503
  categories: AXP_WIDGETS_LAYOUT_CATEGORY,
870
1504
  properties: [
@@ -874,7 +1508,7 @@ const AXPFontSizeChooserWidget = {
874
1508
  ],
875
1509
  components: {
876
1510
  edit: {
877
- component: () => Promise.resolve().then(function () { return fontSizeChooserWidget_component; }).then((c) => c.AXPFontSizeChooserWidgetComponent),
1511
+ component: () => Promise.resolve().then(function () { return themePaletteChooserWidget_component; }).then((c) => c.AXPThemePaletteChooserWidgetComponent),
878
1512
  },
879
1513
  }
880
1514
  };
@@ -888,12 +1522,12 @@ class AXPThemesSharedModule {
888
1522
  priority: 100,
889
1523
  run: async () => {
890
1524
  await service.loadSettings();
891
- }
1525
+ },
892
1526
  });
893
1527
  }
894
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemesSharedModule, deps: [{ token: i1$1.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
895
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.6", ngImport: i0, type: AXPThemesSharedModule, imports: [i2$2.AXPComponentSlotModule, i3$1.AXPLayoutBuilderModule] }); }
896
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemesSharedModule, providers: [
1528
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemesSharedModule, deps: [{ token: i1$2.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
1529
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.7", ngImport: i0, type: AXPThemesSharedModule, imports: [i2$4.AXPComponentSlotModule, i3$1.AXPLayoutBuilderModule] }); }
1530
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemesSharedModule, providers: [
897
1531
  {
898
1532
  provide: AXP_SETTING_DEFINITION_PROVIDER,
899
1533
  useFactory: async () => {
@@ -901,8 +1535,8 @@ class AXPThemesSharedModule {
901
1535
  const provider = (await import('./acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs')).AXPThemeSettingProvider;
902
1536
  return new provider(injector);
903
1537
  },
904
- multi: true
905
- }
1538
+ multi: true,
1539
+ },
906
1540
  ], imports: [AXPComponentSlotModule.forRoot({
907
1541
  'root-header-end': [
908
1542
  {
@@ -918,11 +1552,13 @@ class AXPThemesSharedModule {
918
1552
  AXPThemeModeChooserWidget,
919
1553
  AXPMenuOrientationChooserWidget,
920
1554
  AXPFontSizeChooserWidget,
921
- AXPFontStyleChooserWidget
922
- ]
1555
+ AXPFontStyleChooserWidget,
1556
+ AXPIconChooserWidget,
1557
+ AXPColorChooserWidgetConfig,
1558
+ ],
923
1559
  })] }); }
924
1560
  }
925
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
1561
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.7", ngImport: i0, type: AXPThemesSharedModule, decorators: [{
926
1562
  type: NgModule,
927
1563
  args: [{
928
1564
  imports: [
@@ -941,9 +1577,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
941
1577
  AXPThemeModeChooserWidget,
942
1578
  AXPMenuOrientationChooserWidget,
943
1579
  AXPFontSizeChooserWidget,
944
- AXPFontStyleChooserWidget
945
- ]
946
- })
1580
+ AXPFontStyleChooserWidget,
1581
+ AXPIconChooserWidget,
1582
+ AXPColorChooserWidgetConfig,
1583
+ ],
1584
+ }),
947
1585
  ],
948
1586
  exports: [],
949
1587
  declarations: [],
@@ -955,11 +1593,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
955
1593
  const provider = (await import('./acorex-platform-themes-shared-settings.provider-CXiRmniv.mjs')).AXPThemeSettingProvider;
956
1594
  return new provider(injector);
957
1595
  },
958
- multi: true
959
- }
1596
+ multi: true,
1597
+ },
960
1598
  ],
961
1599
  }]
962
- }], ctorParameters: () => [{ type: i1$1.AXPAppStartUpService }, { type: i0.Injector }] });
1600
+ }], ctorParameters: () => [{ type: i1$2.AXPAppStartUpService }, { type: i0.Injector }] });
963
1601
 
964
1602
  /**
965
1603
  * Generated bundle index. Do not edit.