@acorex/platform 19.2.20 → 19.3.0-next.0

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 (193) hide show
  1. package/common/index.d.ts +1 -0
  2. package/common/lib/app/application.types.d.ts +13 -3
  3. package/common/lib/file-storage/file-storage.types.d.ts +20 -12
  4. package/common/lib/filters/filters.types.d.ts +5 -0
  5. package/common/lib/layout/menu/badge-helper.d.ts +7 -0
  6. package/common/lib/layout/menu/index.d.ts +1 -0
  7. package/common/lib/layout/menu/menu.types.d.ts +1 -0
  8. package/common/lib/layout/task-badge/index.d.ts +2 -0
  9. package/common/lib/layout/task-badge/task-badge.service.d.ts +11 -0
  10. package/common/lib/layout/task-badge/task-badge.type.d.ts +6 -0
  11. package/common/lib/settings/setting-definition.provider.d.ts +7 -5
  12. package/common/lib/settings/setting.builder.d.ts +8 -5
  13. package/common/lib/settings/settings.service.d.ts +6 -5
  14. package/common/lib/settings/settings.types.d.ts +6 -10
  15. package/core/lib/data/index.d.ts +1 -0
  16. package/core/lib/data/value-transformer.d.ts +6 -0
  17. package/core/lib/types/core.types.d.ts +18 -0
  18. package/{layout/entity/lib → core/lib/types}/data.types.d.ts +3 -1
  19. package/core/lib/types/element.types.d.ts +6 -0
  20. package/core/lib/types/index.d.ts +6 -0
  21. package/core/lib/{types.d.ts → types/interactive.types.d.ts} +5 -25
  22. package/core/lib/types/scope.types.d.ts +10 -0
  23. package/core/lib/types/validation.types.d.ts +7 -0
  24. package/core/lib/utils/index.d.ts +1 -0
  25. package/core/lib/utils/object-util.d.ts +3 -0
  26. package/fesm2022/acorex-platform-common.mjs +79 -35
  27. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  28. package/fesm2022/acorex-platform-core.mjs +151 -6
  29. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  30. package/fesm2022/acorex-platform-layout-builder.mjs +44 -55
  31. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  32. package/fesm2022/acorex-platform-layout-designer.mjs +77 -35
  33. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  34. package/fesm2022/acorex-platform-layout-entity.mjs +240 -414
  35. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  36. package/fesm2022/acorex-platform-layout-search.mjs +7 -26
  37. package/fesm2022/acorex-platform-layout-search.mjs.map +1 -1
  38. package/fesm2022/acorex-platform-layout-setting.mjs +211 -278
  39. package/fesm2022/acorex-platform-layout-setting.mjs.map +1 -1
  40. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-LKhN00ob.mjs → acorex-platform-themes-default-entity-master-create-view.component-3gmbdeJ_.mjs} +4 -3
  41. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-3gmbdeJ_.mjs.map +1 -0
  42. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DnEL7Ej-.mjs +741 -0
  43. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DnEL7Ej-.mjs.map +1 -0
  44. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-8DdICjNs.mjs +91 -0
  45. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-8DdICjNs.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DadBeY1I.mjs +164 -0
  47. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DadBeY1I.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-themes-default-search-popup.component-BY3oQqbr.mjs → acorex-platform-themes-default-search-popup.component-BADEuoeJ.mjs} +9 -9
  49. package/fesm2022/{acorex-platform-themes-default-search-popup.component-BY3oQqbr.mjs.map → acorex-platform-themes-default-search-popup.component-BADEuoeJ.mjs.map} +1 -1
  50. package/fesm2022/acorex-platform-themes-default-setting-page.component-Cj73brIK.mjs +219 -0
  51. package/fesm2022/acorex-platform-themes-default-setting-page.component-Cj73brIK.mjs.map +1 -0
  52. package/fesm2022/acorex-platform-themes-default-setting-view.component-rrAq6hg2.mjs +103 -0
  53. package/fesm2022/acorex-platform-themes-default-setting-view.component-rrAq6hg2.mjs.map +1 -0
  54. package/fesm2022/acorex-platform-themes-default.mjs +108 -64
  55. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  56. package/fesm2022/acorex-platform-themes-shared-setting.provider-CXiRmniv.mjs +168 -0
  57. package/fesm2022/acorex-platform-themes-shared-setting.provider-CXiRmniv.mjs.map +1 -0
  58. package/fesm2022/acorex-platform-themes-shared.mjs +495 -240
  59. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  60. package/fesm2022/acorex-platform-widgets.mjs +4100 -1480
  61. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  62. package/layout/builder/lib/builder/builder.service.d.ts +1 -1
  63. package/layout/builder/lib/builder/index.d.ts +2 -1
  64. package/layout/builder/lib/builder/widget-categories.d.ts +10 -0
  65. package/layout/builder/lib/builder/widget-group.types.d.ts +10 -0
  66. package/layout/builder/lib/builder/widget-map.d.ts +8 -1
  67. package/layout/builder/lib/builder/widget-status.types.d.ts +2 -0
  68. package/layout/builder/lib/builder/widget.types.d.ts +11 -27
  69. package/layout/designer/lib/designer/components/widget-picker/widget-picker.component.d.ts +7 -3
  70. package/layout/designer/lib/designer/components/widget-picker/widget-picker.service.d.ts +12 -0
  71. package/layout/designer/lib/designer/index.d.ts +1 -0
  72. package/layout/designer/lib/designer/shared/designer.service.d.ts +1 -0
  73. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +2 -1
  74. package/layout/entity/lib/entity-data-seeder.d.ts +2 -2
  75. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +4 -7
  76. package/layout/entity/lib/entity-storage-service.d.ts +39 -55
  77. package/layout/entity/lib/entity.types.d.ts +21 -0
  78. package/layout/entity/lib/index.d.ts +1 -2
  79. package/layout/entity/lib/widgets/lookup-widget/index.d.ts +0 -2
  80. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.d.ts +4 -0
  81. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +7 -9
  82. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.component.d.ts +5 -2
  83. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.d.ts +11 -3
  84. package/layout/search/lib/search.viewmodel.d.ts +0 -2
  85. package/layout/setting/lib/setting.viewmodel.d.ts +45 -111
  86. package/package.json +5 -5
  87. package/themes/default/lib/layouts/base/base-page.component.d.ts +14 -5
  88. package/themes/default/lib/layouts/base/base-page.types.d.ts +6 -1
  89. package/themes/default/lib/layouts/base/page-layout/page-layout.component.d.ts +5 -4
  90. package/themes/default/lib/layouts/base/simple-page/simple-page.layout.d.ts +2 -2
  91. package/themes/default/lib/layouts/entity-layouts/entity-category/entity-category.component.d.ts +16 -0
  92. package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +2 -2
  93. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +10 -8
  94. package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +12 -4
  95. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/entity-master-toolbar-view.component.d.ts +7 -0
  96. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/filters/entity-filter-toolbar.component.d.ts +48 -0
  97. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/views/entity-view-toolbar.component.d.ts +12 -0
  98. package/themes/default/lib/layouts/root-layout/components/header/header.component.d.ts +2 -2
  99. package/themes/default/lib/layouts/root-layout/components/horizontal-menu/horizontal-menu.component.d.ts +9 -3
  100. package/themes/default/lib/layouts/root-layout/components/side-menu/side-menu.component.d.ts +7 -1
  101. package/themes/default/lib/layouts/root-layout/horizontal/horizontal-layout.component.d.ts +2 -2
  102. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +2 -2
  103. package/themes/default/lib/layouts/root-layout/vertical/vertical-layout.component.d.ts +2 -2
  104. package/themes/default/lib/layouts/setting-layout/setting-page/setting-page.component.d.ts +61 -5
  105. package/themes/default/lib/layouts/setting-layout/setting-view/setting-view.component.d.ts +68 -6
  106. package/themes/shared/index.d.ts +1 -0
  107. package/themes/shared/lib/components/badge/badge.directive.d.ts +14 -0
  108. package/themes/shared/lib/components/layout-elements/layout-blocks.component.d.ts +4 -1
  109. package/themes/shared/lib/components/layout-elements/layout-side.component.d.ts +2 -2
  110. package/themes/shared/lib/components/slots/theme-slot.component.d.ts +2 -2
  111. package/themes/shared/lib/palette.provider.d.ts +1 -1
  112. package/themes/shared/lib/setting.keys.d.ts +2 -1
  113. package/themes/shared/lib/setting.provider.d.ts +4 -1
  114. package/themes/shared/lib/theme.service.d.ts +2 -2
  115. package/themes/shared/lib/theme.types.d.ts +11 -2
  116. package/themes/shared/lib/widgets/font-size-chooser/font-size-chooser-widget.component.d.ts +10 -0
  117. package/themes/shared/lib/widgets/font-size-chooser/font-size-chooser-widget.config.d.ts +7 -0
  118. package/themes/shared/lib/widgets/font-size-chooser/index.d.ts +2 -0
  119. package/themes/shared/lib/widgets/font-style-chooser/font-style-chooser-widget.component.d.ts +15 -0
  120. package/themes/shared/lib/widgets/font-style-chooser/font-style-chooser-widget.config.d.ts +7 -0
  121. package/themes/shared/lib/widgets/font-style-chooser/index.d.ts +2 -0
  122. package/themes/shared/lib/widgets/menu-orientation-chooser/index.d.ts +2 -0
  123. package/themes/shared/lib/widgets/menu-orientation-chooser/menu-orientation-chooser-widget.component.d.ts +15 -0
  124. package/themes/shared/lib/widgets/menu-orientation-chooser/menu-orientation-chooser-widget.config.d.ts +7 -0
  125. package/themes/shared/lib/widgets/theme-mode-chooser/index.d.ts +2 -0
  126. package/themes/shared/lib/widgets/theme-mode-chooser/theme-mode-chooser-widget.component.d.ts +16 -0
  127. package/themes/shared/lib/widgets/theme-mode-chooser/theme-mode-chooser-widget.config.d.ts +7 -0
  128. package/themes/shared/lib/widgets/theme-palette-chooser/index.d.ts +2 -0
  129. package/themes/shared/lib/widgets/theme-palette-chooser/theme-palette-chooser-widget.component.d.ts +13 -0
  130. package/themes/shared/lib/widgets/{theme-color-selection/theme-color-selection-widget.config.d.ts → theme-palette-chooser/theme-palette-chooser-widget.config.d.ts} +2 -2
  131. package/widgets/lib/properties/groups.d.ts +2 -0
  132. package/widgets/lib/widgets/advance/file/file-box-widget-edit.component.d.ts +5 -5
  133. package/widgets/lib/widgets/charts/bar-chart/bar-chart-widget.component.d.ts +52 -0
  134. package/widgets/lib/widgets/charts/bar-chart/bar-chart.type.d.ts +29 -11
  135. package/widgets/lib/widgets/charts/bar-chart/index.d.ts +1 -1
  136. package/widgets/lib/widgets/charts/chart.type.d.ts +3 -0
  137. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar-widget.component.d.ts +40 -0
  138. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar-widget.config.d.ts +7 -0
  139. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar.types.d.ts +50 -0
  140. package/widgets/lib/widgets/charts/clock-calendar/index.d.ts +3 -0
  141. package/widgets/lib/widgets/charts/donut-chart/donut-chart-widget.component.d.ts +54 -0
  142. package/widgets/lib/widgets/charts/donut-chart/donut-chart.type.d.ts +31 -21
  143. package/widgets/lib/widgets/charts/donut-chart/index.d.ts +1 -1
  144. package/widgets/lib/widgets/charts/gauge-chart/{gauge-chart-widget-edit.component.d.ts → gauge-chart-widget.component.d.ts} +3 -3
  145. package/widgets/lib/widgets/charts/gauge-chart/gauge-chart.type.d.ts +26 -11
  146. package/widgets/lib/widgets/charts/gauge-chart/index.d.ts +2 -1
  147. package/widgets/lib/widgets/charts/shared/chart-base.component.d.ts +44 -0
  148. package/widgets/lib/widgets/charts/shared/chart-base.type.d.ts +37 -0
  149. package/widgets/lib/widgets/charts/sticky-note/index.d.ts +1 -1
  150. package/widgets/lib/widgets/charts/sticky-note/{sticky-note-widget-edit.component.d.ts → sticky-note-widget.component.d.ts} +3 -3
  151. package/widgets/lib/widgets/charts/weather/index.d.ts +4 -0
  152. package/widgets/lib/widgets/charts/weather/weather-services/index.d.ts +3 -0
  153. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.abstract.d.ts +174 -0
  154. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.key.d.ts +2 -0
  155. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.mock.service.d.ts +47 -0
  156. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.service.d.ts +48 -0
  157. package/widgets/lib/widgets/charts/weather/weather-widget.component.d.ts +109 -0
  158. package/widgets/lib/widgets/charts/weather/weather-widget.config.d.ts +14 -0
  159. package/widgets/lib/widgets/charts/weather/weather.module.d.ts +11 -0
  160. package/widgets/lib/widgets/editors/select/select-box-widget-column.component.d.ts +0 -1
  161. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +4 -1
  162. package/widgets/lib/widgets/editors/template-box/index.d.ts +6 -0
  163. package/widgets/lib/widgets/editors/template-box/template-box-widget-column.component.d.ts +10 -0
  164. package/widgets/lib/widgets/editors/template-box/template-box-widget-edit.component.d.ts +29 -0
  165. package/widgets/lib/widgets/editors/template-box/template-box-widget-filter.component.d.ts +6 -0
  166. package/widgets/lib/widgets/editors/template-box/template-box-widget-print.component.d.ts +10 -0
  167. package/widgets/lib/widgets/editors/template-box/template-box-widget-view.component.d.ts +11 -0
  168. package/widgets/lib/widgets/editors/template-box/template-box-widget.config.d.ts +7 -0
  169. package/widgets/lib/widgets/filters/select-filter/select-filter-widget-edit.component.d.ts +2 -5
  170. package/widgets/lib/widgets/index.d.ts +3 -0
  171. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-LKhN00ob.mjs.map +0 -1
  172. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BYUOmONk.mjs +0 -400
  173. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BYUOmONk.mjs.map +0 -1
  174. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B9TUh-2S.mjs +0 -91
  175. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B9TUh-2S.mjs.map +0 -1
  176. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-9U774Tr7.mjs +0 -135
  177. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-9U774Tr7.mjs.map +0 -1
  178. package/fesm2022/acorex-platform-themes-default-setting-page.component-_IStMWcu.mjs +0 -74
  179. package/fesm2022/acorex-platform-themes-default-setting-page.component-_IStMWcu.mjs.map +0 -1
  180. package/fesm2022/acorex-platform-themes-default-setting-view.component-CeHpcfsc.mjs +0 -73
  181. package/fesm2022/acorex-platform-themes-default-setting-view.component-CeHpcfsc.mjs.map +0 -1
  182. package/fesm2022/acorex-platform-themes-default-theme-palette-preview.page-D_EkB2k8.mjs +0 -146
  183. package/fesm2022/acorex-platform-themes-default-theme-palette-preview.page-D_EkB2k8.mjs.map +0 -1
  184. package/layout/builder/lib/builder/widget-groups.d.ts +0 -9
  185. package/layout/entity/lib/dexie-storage.service.d.ts +0 -16
  186. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-filter.component.d.ts +0 -6
  187. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-print.component.d.ts +0 -6
  188. package/themes/default/lib/layouts/filters-layout/simple-filter-builder/filters-view.component.d.ts +0 -13
  189. package/themes/default/lib/pages/theme-palette-preview/theme-palette-preview.page.d.ts +0 -85
  190. package/themes/shared/lib/widgets/theme-color-selection/index.d.ts +0 -2
  191. package/themes/shared/lib/widgets/theme-color-selection/theme-color-selection-widget-edit.component.d.ts +0 -6
  192. package/widgets/lib/widgets/charts/bar-chart/bar-chart-widget-edit.component.d.ts +0 -40
  193. package/widgets/lib/widgets/charts/donut-chart/donut-chart-widget-edit.component.d.ts +0 -44
@@ -1,17 +1,16 @@
1
- import { applySortArray, applyFilterArray, AXPExpressionEvaluatorService } from '@acorex/platform/core';
2
- import Dexie from 'dexie';
3
- import * as i1$4 from '@acorex/platform/common';
4
- import { AXPDataGenerator, resolveActionLook, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPSettingScope, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
5
1
  import * as i0 from '@angular/core';
6
- import { InjectionToken, inject, Injectable, computed, signal, Injector, effect, HostBinding, ChangeDetectionStrategy, Component, DestroyRef, ViewChild, NgModule } from '@angular/core';
2
+ import { InjectionToken, inject, Injectable, computed, signal, Injector, effect, HostBinding, ChangeDetectionStrategy, Component, viewChild, ViewChild, NgModule } from '@angular/core';
3
+ import { castArray, get, cloneDeep, set, merge, isNil, sortBy } from 'lodash-es';
7
4
  import * as i2 from '@acorex/components/common';
8
5
  import { AXDataSource, AXCommonModule } from '@acorex/components/common';
9
6
  import { AXFormatService } from '@acorex/core/format';
7
+ import * as i1$4 from '@acorex/platform/common';
8
+ import { resolveActionLook, AXPFilterOperatorMiddlewareService, AXPEntityCommandScope, getEntityInfo, AXPSettingService, AXPRefreshEvent, AXPCleanNestedFilters, AXPWorkflowNavigateAction, AXPToastAction, AXP_SEARCH_DEFINITION_PROVIDER } from '@acorex/platform/common';
10
9
  import * as i2$2 from '@acorex/platform/workflow';
11
10
  import { AXPWorkflowService, ofType, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
12
- import { get, cloneDeep, set, merge, isNil, sortBy } from 'lodash-es';
11
+ import { AXPExpressionEvaluatorService, AXPPlatformScope } from '@acorex/platform/core';
13
12
  import * as i7 from '@acorex/platform/layout/builder';
14
- import { AXPPageStatus, AXPWidgetRegistryService, AXPWidgetComponent, AXPLayoutBuilderModule, AXPColumnWidgetComponent, AXPWidgetsCatalog, AXP_WIDGETS_EDITOR_GROUP } from '@acorex/platform/layout/builder';
13
+ import { AXPPageStatus, AXPWidgetRegistryService, AXPWidgetComponent, AXPLayoutBuilderModule, AXPColumnWidgetComponent, AXPWidgetsCatalog, AXP_WIDGETS_EDITOR_CATEGORY } from '@acorex/platform/layout/builder';
15
14
  import { AXPLayoutThemeService } from '@acorex/platform/themes/shared';
16
15
  import { AXPSessionService, AXPAuthGuard } from '@acorex/platform/auth';
17
16
  import { Subject, takeUntil } from 'rxjs';
@@ -32,12 +31,8 @@ import * as i3 from '@acorex/components/button';
32
31
  import { AXButtonModule } from '@acorex/components/button';
33
32
  import * as i4 from '@acorex/components/decorators';
34
33
  import { AXDecoratorModule } from '@acorex/components/decorators';
35
- import * as i6$1 from '@acorex/components/form';
34
+ import * as i4$1 from '@acorex/components/form';
36
35
  import { AXFormModule } from '@acorex/components/form';
37
- import * as i5$1 from '@acorex/components/select-box';
38
- import { AXSelectBoxModule } from '@acorex/components/select-box';
39
- import * as i2$1 from '@acorex/components/text-box';
40
- import { AXTextBoxModule, AXTextBoxComponent } from '@acorex/components/text-box';
41
36
  import { AXValidationModule } from '@acorex/core/validation';
42
37
  import * as i1$3 from '@angular/forms';
43
38
  import { FormsModule } from '@angular/forms';
@@ -47,150 +42,23 @@ import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
47
42
  import { AXBasePageComponent } from '@acorex/components/page';
48
43
  import * as i6 from '@acorex/components/search-box';
49
44
  import { AXSearchBoxModule } from '@acorex/components/search-box';
50
- import { AXP_DISABLED_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_NAME_PROPERTY } from '@acorex/platform/widgets';
45
+ import * as i5$1 from '@acorex/components/tag-box';
46
+ import { AXTagBoxComponent, AXTagBoxModule } from '@acorex/components/tag-box';
47
+ import { AXP_DISABLED_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_NAME_PROPERTY } from '@acorex/platform/widgets';
48
+ import * as i5$2 from '@acorex/components/select-box';
49
+ import { AXSelectBoxModule } from '@acorex/components/select-box';
50
+ import * as i2$1 from '@acorex/components/text-box';
51
+ import { AXTextBoxModule, AXTextBoxComponent } from '@acorex/components/text-box';
51
52
  import { AXPWidgetPropertyViewerComponent } from '@acorex/platform/layout/designer';
52
53
 
53
- class AXPDexieEntityStorageService extends Dexie {
54
- constructor() {
55
- super('ACoreXPlatform');
56
- this.version(1).stores({
57
- 'entity-store': '++id, entityName, [entityName+id]',
58
- });
59
- }
60
- get dbName() {
61
- return 'ACoreXPlatform';
62
- }
63
- async initial(entityName, collection) {
64
- const exists = await this.table('entity-store').where({ entityName }).count();
65
- if (exists === 0) {
66
- await this.table('entity-store').bulkAdd(collection.map((item) => ({ ...item, entityName })));
67
- }
68
- return collection;
69
- }
70
- async getOne(entityName, id) {
71
- return await this.table('entity-store').where({ entityName, id: id }).first();
72
- }
73
- async updateOne(entityName, id, keyValue) {
74
- await this.table('entity-store').where({ entityName, id: id }).modify(keyValue);
75
- return await this.getOne(entityName, id);
76
- }
77
- async deleteOne(entityName, id) {
78
- await this.table('entity-store').where({ entityName, id: id }).delete();
79
- }
80
- async insertOne(entityName, entity) {
81
- const uuid = AXPDataGenerator.uuid();
82
- await this.table('entity-store').add({ ...entity, id: uuid, entityName });
83
- return uuid;
84
- }
85
- async getAll(entityName) {
86
- return await this.table('entity-store').where({ entityName }).toArray();
87
- }
88
- async query(entityName, request) {
89
- let result = await this.table('entity-store').where({ entityName }).toArray();
90
- if (request.sort && request.sort.length) {
91
- result = applySortArray(result, request.sort);
92
- }
93
- result = applyFilterArray(result, request.filter ? [request.filter] : []);
94
- return Promise.resolve({
95
- total: result.length,
96
- items: result.slice(request.skip, (request.skip ?? 0) + (request.take ?? 0)),
97
- });
98
- }
99
- }
100
- // export class AXPDexieTableStorageService extends Dexie implements AXPEntityStorageService {
101
- // private schemaUpdateLock: Promise<void> = Promise.resolve();
102
- // constructor() {
103
- // super('ACoreXPlatform');
104
- // // Initial empty version
105
- // //this.version(1).stores({});
106
- // }
107
- // // Function to change the schema dynamically
108
- // private async changeSchema(schemaChanges: { [tableName: string]: string | null }): Promise<void> {
109
- // // Acquire schema update lock to ensure no other operations are performed while schema is changing
110
- // this.schemaUpdateLock = this.schemaUpdateLock.then(async () => {
111
- // console.log('Attempting schema change with:', schemaChanges);
112
- // try {
113
- // this.close();
114
- // const newDb = new Dexie(this.name);
115
- // // Extract current schema in Dexie format
116
- // const currentSchema = this.tables.reduce((result, { name, schema }) => {
117
- // result[name] = [schema.primKey.src, ...schema.indexes.map((idx) => idx.src)].join(',');
118
- // return result;
119
- // }, {} as { [tableName: string]: string });
120
- // console.log('Current Schema:', currentSchema);
121
- // // Define current schema version
122
- // newDb.version(this.verno + 10).stores(currentSchema);
123
- // // Define new schema version with schema changes
124
- // const nextVersion = this.verno + 1;
125
- // newDb.version(nextVersion).stores(schemaChanges);
126
- // await newDb.open();
127
- // // Reassign updated db instance
128
- // Object.assign(this, newDb);
129
- // console.log(`Schema updated. Current version: ${this.verno}`);
130
- // } catch (error) {
131
- // console.error('Error during schema change:', error);
132
- // throw error;
133
- // }
134
- // });
135
- // // Wait for schema change lock to complete
136
- // await this.schemaUpdateLock;
137
- // }
138
- // private async ensureInitialized(entityName: string): Promise<void> {
139
- // if (this.tables.findIndex((table) => table.name === entityName) == -1) {
140
- // const schemaChanges: { [tableName: string]: string } = {};
141
- // schemaChanges[entityName] = '++id';
142
- // await this.changeSchema(schemaChanges);
143
- // }
144
- // }
145
- // get dbName(): string {
146
- // return 'ACoreXPlatform';
147
- // }
148
- // private async getTable<T>(entityName: string) {
149
- // await this.ensureInitialized(entityName);
150
- // return this.table<T, number>(entityName);
151
- // }
152
- // async initial<T = any>(entityName: string, collection: T[]): Promise<void> {
153
- // const table = await this.getTable<T>(entityName);
154
- // const exists = await table.count();
155
- // if (exists === 0) {
156
- // await table.bulkAdd(collection);
157
- // }
158
- // }
159
- // async getOne<T = any>(entityName: string, id: string): Promise<T> {
160
- // const table = await this.getTable<T>(entityName);
161
- // return (await table.where({ id: parseInt(id) }).first()) as T;
162
- // }
163
- // async updateOne(entityName: string, id: string, keyValue: { [key: string]: any }): Promise<void> {
164
- // const table = await this.getTable(entityName);
165
- // await table.update(parseInt(id), keyValue);
166
- // }
167
- // async deleteOne(entityName: string, id: string): Promise<void> {
168
- // const table = await this.getTable(entityName);
169
- // await table.delete(parseInt(id));
170
- // }
171
- // async insertOne<T = any>(entityName: string, entity: T): Promise<void> {
172
- // const table = await this.getTable<T>(entityName);
173
- // await table.add(entity);
174
- // }
175
- // async getAll<T = any>(entityName: string): Promise<T[]> {
176
- // const table = await this.getTable<T>(entityName);
177
- // return await table.toArray();
178
- // }
179
- // }
180
-
181
54
  const AXP_DATA_SEEDER_TOKEN = new InjectionToken('AXP_DATA_SEEDER_TOKEN');
182
55
  class AXPDataSeederService {
183
56
  constructor() {
184
- this.loader = inject(AXP_DATA_SEEDER_TOKEN, { optional: true });
57
+ this.loaders = inject(AXP_DATA_SEEDER_TOKEN, { optional: true });
185
58
  }
186
59
  async seed() {
187
- if (Array.isArray(this.loader)) {
188
- for (const loader of this.loader) {
189
- await loader.seed();
190
- }
191
- }
192
- else {
193
- await this.loader?.seed();
60
+ for (const loader of castArray(this.loaders)) {
61
+ await loader?.seed();
194
62
  }
195
63
  }
196
64
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDataSeederService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
@@ -645,6 +513,7 @@ class AXPEntityCreateViewElementViewModel {
645
513
  type: widget.type,
646
514
  mode: this.editable() ? 'edit' : 'view',
647
515
  path: this.name(),
516
+ name: this.name(),
648
517
  children: widget.children,
649
518
  formula: widget.formula,
650
519
  triggers: widget.triggers,
@@ -694,7 +563,7 @@ class AXPEntityMasterCreateViewModel {
694
563
  if (typeof value == 'function') {
695
564
  return value();
696
565
  }
697
- else if (typeof value == 'string' && value.startsWith("{{")) {
566
+ else if (typeof value == 'string' && value.startsWith('{{')) {
698
567
  return await this.expressionEvaluator.evaluate(value, scope);
699
568
  }
700
569
  return value;
@@ -719,8 +588,13 @@ class AXPEntityMasterCreateViewModel {
719
588
  this.builder.setStatus(AXPPageStatus.Submitting);
720
589
  const exec = this.entityDef.commands?.create?.execute;
721
590
  const result = await exec(this.context());
722
- this.builder.setStatus(AXPPageStatus.Submitted);
723
- return result;
591
+ this.context.update((c) => ({ ...c, ...result }));
592
+ return new Promise((resolve) => {
593
+ setTimeout(() => {
594
+ this.builder.setStatus(AXPPageStatus.Submitted);
595
+ resolve(result);
596
+ });
597
+ });
724
598
  }
725
599
  catch (error) {
726
600
  this.builder.setStatus(AXPPageStatus.Error);
@@ -883,23 +757,7 @@ class AXPEntityMasterListViewModel {
883
757
  });
884
758
  this.primaryRowActions = computed(() => this.allActions().filter((a) => a.scope == AXPEntityCommandScope.Individual && a.priority === 'primary'));
885
759
  //****************** Filter ******************//
886
- this.simpleFilters = signal({
887
- field: null,
888
- logic: 'and',
889
- operator: null,
890
- filters: this.view().conditions.map((f) => ({
891
- field: f.name,
892
- operator: f.operator,
893
- value: f.value,
894
- })),
895
- });
896
- this.lastFiltersApplied = signal(this.simpleFilters());
897
- this.inlineFilters = {
898
- field: null,
899
- logic: 'or',
900
- operator: null,
901
- filters: [],
902
- };
760
+ this.filterQueries = signal([]);
903
761
  //****************** Columns ******************//
904
762
  this.allAvailableColumns = () => {
905
763
  const { columns = [], properties } = this.entityDef;
@@ -972,7 +830,7 @@ class AXPEntityMasterListViewModel {
972
830
  }
973
831
  async saveSettings(changesType, data) {
974
832
  const updateSettings = (updateFn) => {
975
- this.settings.scope(AXPSettingScope.User).update(this.settingEntityKey, updateFn);
833
+ this.settings.scope(AXPPlatformScope.User).update(this.settingEntityKey, updateFn);
976
834
  };
977
835
  switch (changesType) {
978
836
  case 'columnSizes':
@@ -1048,8 +906,11 @@ class AXPEntityMasterListViewModel {
1048
906
  }));
1049
907
  return actions.filter(Boolean);
1050
908
  }
909
+ get properties() {
910
+ return this.entityDef.properties;
911
+ }
1051
912
  get filtersDef() {
1052
- const props = this.entityDef.properties.filter((c) => c.options?.filter?.advance?.enabled);
913
+ const props = this.entityDef.properties.filter((c) => c.options?.filter?.advance?.enabled || c.options?.filter?.inline?.enabled);
1053
914
  return props.map((e) => {
1054
915
  const widgetConfig = this.widgetResolver.resolve(e.schema.interface?.type);
1055
916
  const type = (e.options?.filter?.advance?.widgetType ||
@@ -1059,11 +920,16 @@ class AXPEntityMasterListViewModel {
1059
920
  title: e.title,
1060
921
  field: e.name,
1061
922
  operator: {
1062
- type: 'equal',
923
+ type: 'contains',
1063
924
  },
1064
925
  widget: { ...e.schema.interface, path: e.name, type },
1065
926
  filters: [],
1066
927
  isParametric: false,
928
+ icon: widgetConfig?.icon,
929
+ filterType: {
930
+ advance: e.options?.filter?.advance?.enabled ?? false,
931
+ inline: e.options?.filter?.inline?.enabled ?? false,
932
+ },
1067
933
  };
1068
934
  });
1069
935
  }
@@ -1078,66 +944,21 @@ class AXPEntityMasterListViewModel {
1078
944
  operator: f.operator,
1079
945
  value: f.value,
1080
946
  }));
1081
- // console.log('this.view().conditions: ', this.view().conditions);
1082
- // console.log('this.filtersDef: ', this.filtersDef);
1083
- // let viewFilters: AXPFilterQuery[] = [];
1084
- // await this.filtersDef.forEach((filter) => {
1085
- // viewFilters.push({
1086
- // field: filter.field,
1087
- // operator: filter.operator,
1088
- // value: filter.value,
1089
- // });
1090
- // });
1091
- // await this.view().conditions.map((f) => {
1092
- // let viewFilter = viewFilters.find((el) => el.field === f.name) as AXPFilterQuery;
1093
- // viewFilter = {
1094
- // ...viewFilter,
1095
- // value: f.value,
1096
- // operator: f.operator,
1097
- // };
1098
- // });
1099
- // console.log('viewFilters: ', viewFilters);
1100
- this.simpleFilters.update((prev) => ({ ...prev, filters: viewFilters }));
1101
- // console.log('this.simpleFilters(): ', this.simpleFilters());
947
+ this.filterQueries.update((prev) => ({ ...prev, filters: viewFilters }));
1102
948
  }
1103
949
  resetFilters() {
1104
950
  this.applyViewFilters();
1105
951
  }
1106
- discardFilters() {
1107
- this.simpleFilters.set(this.lastFiltersApplied());
1108
- }
1109
- applyInlineFilter(value) {
1110
- const props = this.entityDef.properties.filter((c) => c.options?.filter?.inline?.enabled);
1111
- this.inlineFilters.filters = [];
1112
- if (value) {
1113
- props.forEach((p) => {
1114
- this.inlineFilters.filters?.push({
1115
- field: p.name,
1116
- operator: {
1117
- type: 'contains',
1118
- },
1119
- value,
1120
- });
1121
- });
1122
- }
1123
- this.applyFilterAndSort();
1124
- }
1125
952
  async applyFilterAndSort() {
1126
953
  this.dataSource.clearFilter();
1127
954
  this.dataSource.sort(...this.sortedFields()
1128
955
  .filter((sf) => sf.dir)
1129
956
  .map((s) => ({ dir: s.dir, field: s.name })));
1130
- const allFilters = [
1131
- this.inlineFilters.filters?.length && this.inlineFilters,
1132
- this.simpleFilters().filters?.length && this.simpleFilters(),
1133
- ].filter(Boolean);
1134
- const cleanedAllFilters = AXPCleanNestedFilters(allFilters);
1135
- this.lastFiltersApplied.set(this.simpleFilters());
1136
957
  this.dataSource.filter(this.filterOperatorMiddleware.transformFilter({
1137
958
  field: null,
1138
959
  logic: 'and',
1139
960
  operator: null,
1140
- filters: cleanedAllFilters,
961
+ filters: this.filterQueries(),
1141
962
  }));
1142
963
  this.dataSource.refresh();
1143
964
  }
@@ -1430,6 +1251,7 @@ class AXPEntityMasterUpdateElementViewModel {
1430
1251
  type: widget.type,
1431
1252
  mode: this.editable() ? 'edit' : 'view',
1432
1253
  path: this.name(),
1254
+ name: this.name(),
1433
1255
  children: widget.children,
1434
1256
  formula: widget.formula,
1435
1257
  triggers: widget.triggers,
@@ -1848,8 +1670,8 @@ class AXPEntityDataProviderImpl {
1848
1670
  query(request) {
1849
1671
  return this.storageService.query(this.entityName, request);
1850
1672
  }
1851
- updateOne(id, keyValue) {
1852
- return this.storageService.updateOne(this.entityName, id, keyValue);
1673
+ updateOne(id, keyValues) {
1674
+ return this.storageService.updateOne(this.entityName, id, keyValues);
1853
1675
  }
1854
1676
  deleteOne(id) {
1855
1677
  return this.storageService.deleteOne(this.entityName, id);
@@ -1970,14 +1792,13 @@ class AXPLookupWidgetViewComponent extends AXPWidgetComponent {
1970
1792
  this.displayItems.set([]);
1971
1793
  }
1972
1794
  else {
1973
- const items = Array.isArray(value)
1974
- ? value.map(async (item) => await this.extractItem(item))
1975
- : [await this.extractItem(value)];
1976
- this.displayItems.set(items);
1795
+ const items = castArray(value).map(async (item) => await this.extractItem(item));
1796
+ this.displayItems.set(await Promise.all(items));
1977
1797
  }
1978
1798
  });
1979
1799
  }
1980
1800
  async extractItem(item) {
1801
+ debugger;
1981
1802
  if (typeof item == 'object') {
1982
1803
  return {
1983
1804
  id: item[this.valueField()],
@@ -1985,14 +1806,15 @@ class AXPLookupWidgetViewComponent extends AXPWidgetComponent {
1985
1806
  };
1986
1807
  }
1987
1808
  else {
1988
- const byKey = this.entityDef()?.queries.byKey?.execute;
1809
+ const def = this.entityDef();
1810
+ const byKey = def?.queries.byKey?.execute;
1989
1811
  if (byKey) {
1990
1812
  this.loading.set(true);
1991
- const item = await byKey(this.getValue());
1813
+ const fetchedItem = await byKey(item);
1992
1814
  this.loading.set(false);
1993
1815
  return {
1994
- id: item[this.valueField()],
1995
- text: this.formatService.format(this.textField(), 'string', item),
1816
+ id: fetchedItem[this.valueField()],
1817
+ text: this.formatService.format(this.displayField(), 'string', fetchedItem),
1996
1818
  };
1997
1819
  }
1998
1820
  return {
@@ -2049,7 +1871,17 @@ var lookupWidgetView_component = /*#__PURE__*/Object.freeze({
2049
1871
  });
2050
1872
 
2051
1873
  class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
1874
+ constructor() {
1875
+ super(...arguments);
1876
+ this.grid = viewChild('grid');
1877
+ this.initialSelectedItems = [];
1878
+ this.selectedItems = signal([]);
1879
+ this.allowSelect = computed(() => this.selectedItems().length > 0);
1880
+ }
2052
1881
  ngAfterViewInit() {
1882
+ if (this.initialSelectedItems.length > 0 && this.grid()) {
1883
+ this.grid()?.selectRows(...this.initialSelectedItems);
1884
+ }
2053
1885
  if (this.searchTerm) {
2054
1886
  this.vm.applyInlineFilter(this.searchTerm);
2055
1887
  }
@@ -2061,10 +1893,28 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
2061
1893
  this.close({ items: [e.data] });
2062
1894
  }
2063
1895
  handleRowClick(e) {
2064
- this.focusedRow = e.data;
1896
+ if (this.vm.allowMultiple()) {
1897
+ this.selectedItems.set([...this.selectedItems(), e.data]);
1898
+ }
1899
+ else if (this.selectedItems().length > 0) {
1900
+ const selected = this.selectedItems().find((item) => item.id === e.data.id);
1901
+ if (selected) {
1902
+ this.selectedItems.set(this.selectedItems().filter((item) => item.id !== selected.id));
1903
+ }
1904
+ else {
1905
+ this.selectedItems.set([e.data]);
1906
+ }
1907
+ }
1908
+ else if (this.selectedItems().length === 0) {
1909
+ this.selectedItems.set([e.data]);
1910
+ }
1911
+ else {
1912
+ this.selectedItems.set([e.data]);
1913
+ }
2065
1914
  }
2066
1915
  async handleSelectedRowsChange(rows) {
2067
- //this.vm.selectedItems.set(rows);
1916
+ debugger;
1917
+ this.selectedItems.set(rows);
2068
1918
  }
2069
1919
  handleChangeSearchValue(e) {
2070
1920
  if (e.isUserInteraction) {
@@ -2079,12 +1929,10 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
2079
1929
  this.close();
2080
1930
  }
2081
1931
  handleSelectClick() {
2082
- if (this.focusedRow) {
2083
- this.close({ items: [this.focusedRow] });
2084
- }
1932
+ this.close({ items: this.selectedItems() });
2085
1933
  }
2086
1934
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2087
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLookupWidgetSelectorComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: `
1935
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLookupWidgetSelectorComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "grid", first: true, predicate: ["grid"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
2088
1936
  <div class="ax-p-4 ax-flex ax-flex-col ax-gap-4 ax-overflow-hidden">
2089
1937
  @if(vm.hasInlineFilters()) {
2090
1938
  <div class="ax-w-full">
@@ -2110,8 +1958,9 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
2110
1958
  (onRowClick)="handleRowClick($event)"
2111
1959
  (onRowDbClick)="handleRowDbClick($event)"
2112
1960
  >
2113
- <!-- <ax-select-column fixed="start" [width]="'50px'"></ax-select-column> -->
2114
- @for(col of vm.columns();track col.name) { @if(col.visible) {
1961
+ @if(vm.allowMultiple()) {
1962
+ <ax-select-column fixed="start" [width]="'50px'"></ax-select-column>
1963
+ } @for(col of vm.columns();track col.name) { @if(col.visible) {
2115
1964
  <axp-widget-column-renderer
2116
1965
  [expandHandler]="$index === 0 && vm.parentKey() ? true : false"
2117
1966
  [caption]="col.title | translate | async"
@@ -2122,19 +1971,13 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
2122
1971
  </div>
2123
1972
  <ax-footer>
2124
1973
  <ax-suffix>
2125
- <ax-button
2126
- look="solid"
2127
- color="ghost"
2128
- [text]="('close' | translate | async) ?? 'Close...'"
2129
- (onClick)="handleCloseClick()"
2130
- >
2131
- </ax-button>
1974
+ <ax-button look="solid" [text]="('close' | translate | async)!" (onClick)="handleCloseClick()"> </ax-button>
2132
1975
  <ax-button
2133
1976
  look="solid"
2134
1977
  color="primary"
2135
- [text]="('select' | translate | async) ?? 'Select...'"
1978
+ [text]="('select' | translate | async)!"
2136
1979
  (onClick)="handleSelectClick()"
2137
- [disabled]="focusedRow == null"
1980
+ [disabled]="allowSelect() === false"
2138
1981
  >
2139
1982
  </ax-button>
2140
1983
  @if(!vm.canCreate()) {
@@ -2151,7 +1994,7 @@ class AXPLookupWidgetSelectorComponent extends AXBasePageComponent {
2151
1994
  }
2152
1995
  </ax-suffix>
2153
1996
  </ax-footer>
2154
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i5.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.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: AXPLayoutBuilderModule }, { kind: "component", type: i7.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1997
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXFormModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXDropdownButtonModule }, { kind: "ngmodule", type: AXDataTableModule }, { kind: "component", type: i5.AXDataTableComponent, selector: "ax-data-table", inputs: ["dataSource", "parentField", "rowTemplate", "emptyTemplate", "alternative", "showHeader", "fixedHeader", "showFooter", "fixedFooter", "itemHeight", "allowReordering", "paging", "fetchDataMode", "loading", "focusedRow"], outputs: ["selectedRowsChange", "focusedRowChange", "onRowClick", "onRowDbClick", "onColumnsOrderChanged", "onColumnSizeChanged", "onPageChanged"] }, { kind: "component", type: i5.AXRowSelectColumnComponent, selector: "ax-select-column", inputs: ["width", "caption", "fixed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.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: AXPLayoutBuilderModule }, { kind: "component", type: i7.AXPWidgetColumnRendererComponent, selector: "axp-widget-column-renderer", inputs: ["caption", "customExpandIcon", "customCollapseIcon", "customWidth", "node", "footerTemplate", "expandHandler", "cellTemplate", "headerTemplate"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i8.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2155
1998
  }
2156
1999
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetSelectorComponent, decorators: [{
2157
2000
  type: Component,
@@ -2182,8 +2025,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2182
2025
  (onRowClick)="handleRowClick($event)"
2183
2026
  (onRowDbClick)="handleRowDbClick($event)"
2184
2027
  >
2185
- <!-- <ax-select-column fixed="start" [width]="'50px'"></ax-select-column> -->
2186
- @for(col of vm.columns();track col.name) { @if(col.visible) {
2028
+ @if(vm.allowMultiple()) {
2029
+ <ax-select-column fixed="start" [width]="'50px'"></ax-select-column>
2030
+ } @for(col of vm.columns();track col.name) { @if(col.visible) {
2187
2031
  <axp-widget-column-renderer
2188
2032
  [expandHandler]="$index === 0 && vm.parentKey() ? true : false"
2189
2033
  [caption]="col.title | translate | async"
@@ -2194,19 +2038,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2194
2038
  </div>
2195
2039
  <ax-footer>
2196
2040
  <ax-suffix>
2197
- <ax-button
2198
- look="solid"
2199
- color="ghost"
2200
- [text]="('close' | translate | async) ?? 'Close...'"
2201
- (onClick)="handleCloseClick()"
2202
- >
2203
- </ax-button>
2041
+ <ax-button look="solid" [text]="('close' | translate | async)!" (onClick)="handleCloseClick()"> </ax-button>
2204
2042
  <ax-button
2205
2043
  look="solid"
2206
2044
  color="primary"
2207
- [text]="('select' | translate | async) ?? 'Select...'"
2045
+ [text]="('select' | translate | async)!"
2208
2046
  (onClick)="handleSelectClick()"
2209
- [disabled]="focusedRow == null"
2047
+ [disabled]="allowSelect() === false"
2210
2048
  >
2211
2049
  </ax-button>
2212
2050
  @if(!vm.canCreate()) {
@@ -2242,11 +2080,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2242
2080
  }] });
2243
2081
 
2244
2082
  class AXPLookupWidgetSelectorViewModel {
2245
- constructor(injector, entityDef, parentFilters = null, customFilter = null) {
2083
+ constructor(injector, entityDef, options = {
2084
+ parentFilters: null,
2085
+ customFilter: null,
2086
+ sortedFields: [],
2087
+ }) {
2246
2088
  this.injector = injector;
2247
2089
  this.entityDef = entityDef;
2248
- this.parentFilters = parentFilters;
2249
- this.customFilter = customFilter;
2090
+ this.options = options;
2250
2091
  this.workflow = this.injector.get(AXPWorkflowService);
2251
2092
  this.filterOperatorMiddleware = this.injector.get(AXPFilterOperatorMiddlewareService);
2252
2093
  this.dataSource = new AXDataSource({
@@ -2267,6 +2108,9 @@ class AXPLookupWidgetSelectorViewModel {
2267
2108
  this.parentKey = computed(() => {
2268
2109
  return this.entityDef.parentKey;
2269
2110
  });
2111
+ this.allowMultiple = computed(() => {
2112
+ return this.options.allowMultiple ?? false;
2113
+ });
2270
2114
  this.inlineFiltersPlaceholders = computed(() => {
2271
2115
  return (this.entityDef?.properties.filter((p) => p.options?.filter?.inline?.enabled).map((c) => c.title ?? c.name) ?? []);
2272
2116
  });
@@ -2324,12 +2168,12 @@ class AXPLookupWidgetSelectorViewModel {
2324
2168
  //
2325
2169
  // Check if inlineFilters or parentFilters have any filters
2326
2170
  const hasInlineFilters = (this.inlineFilters?.filters?.length ?? 0) > 0;
2327
- const hasParentFilters = (this.parentFilters?.filters?.length ?? 0) > 0;
2171
+ const hasParentFilters = (this.options.parentFilters?.filters?.length ?? 0) > 0;
2328
2172
  // Construct the filters array based on the presence of filters
2329
2173
  const filters = [];
2330
- console.log(this.customFilter);
2331
- if (this.customFilter) {
2332
- const cleanedFilters = AXPCleanNestedFilters([this.customFilter]);
2174
+ console.log(this.options.customFilter);
2175
+ if (this.options.customFilter) {
2176
+ const cleanedFilters = AXPCleanNestedFilters([this.options.customFilter]);
2333
2177
  if (cleanedFilters.length > 0) {
2334
2178
  filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));
2335
2179
  }
@@ -2337,8 +2181,8 @@ class AXPLookupWidgetSelectorViewModel {
2337
2181
  if (hasInlineFilters) {
2338
2182
  filters.push(this.inlineFilters);
2339
2183
  }
2340
- if (hasParentFilters && this.parentFilters) {
2341
- filters.push(this.parentFilters);
2184
+ if (hasParentFilters && this.options.parentFilters) {
2185
+ filters.push(this.options.parentFilters);
2342
2186
  }
2343
2187
  // Apply the filters to the dataSource
2344
2188
  this.dataSource.filter({
@@ -2364,59 +2208,53 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2364
2208
  this.entityResolver = inject(AXPEntityResolver);
2365
2209
  this.formatService = inject(AXFormatService);
2366
2210
  this.popupService = inject(AXPopupService);
2367
- this.destroyRef = inject(DestroyRef);
2368
2211
  this.translateService = inject(AXTranslationService);
2369
2212
  this.expose = computed(() => this.options()['expose']);
2370
2213
  this.entity = computed(() => this.options()['entity']);
2371
2214
  this.customFilter = computed(() => this.options()['filter']);
2215
+ this.multiple = computed(() => (this.options()['multiple'] ?? false));
2372
2216
  this.textField = computed(() => {
2373
2217
  return (this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title');
2374
2218
  });
2219
+ this.valueField = computed(() => this.entityDef()?.properties.find((c) => c.name == 'id')?.name ?? 'id');
2375
2220
  this.entityDef = signal(null);
2376
2221
  this.searchTerm = signal(null);
2377
- this.displayText = signal('');
2378
- this.selectedItem = signal(null);
2222
+ this.selectedItems = signal([]);
2223
+ this.textbox = viewChild(AXTagBoxComponent);
2379
2224
  this.isLoading = signal(false);
2380
2225
  this.isOpen = signal(false);
2381
2226
  this.vm = signal(null);
2382
2227
  this.placeholder = computed(() => {
2383
- return (this.translateService.translateSync('widget.lookup.search') + this.vm()?.inlineFiltersPlaceholders().join(', '));
2228
+ return (this.selectedItems().length ? null : this.translateService.translateSync('widget.lookup.search') + this.vm()?.inlineFiltersPlaceholders().join(', '));
2384
2229
  });
2385
- this.efDisplay = effect(async () => {
2386
- const value = this.getValue();
2387
- if (isNil(value)) {
2388
- this.displayText.set('');
2389
- }
2390
- else if (typeof value == 'object' && !Array.isArray(value)) {
2391
- this.displayText.set(this.formatService.format(this.textField(), 'string', value));
2392
- }
2393
- else if (value != null) {
2394
- await this.findByValue();
2395
- }
2396
- });
2397
- this.efEntity = effect(async () => {
2230
+ this.#efEntity = effect(async () => {
2398
2231
  const [module, entity] = this.entity().split('.');
2399
2232
  this.entityDef.set(await this.entityResolver.get(module, entity));
2400
- this.vm.set(new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), this.filter));
2233
+ this.vm.set(new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), { parentFilters: this.filter, allowMultiple: this.multiple() }));
2234
+ });
2235
+ this.#efValue = effect(() => {
2236
+ if (this.getValue()) {
2237
+ this.findByValue();
2238
+ }
2401
2239
  });
2402
2240
  }
2403
- ngOnInit() {
2404
- super.ngOnInit();
2405
- //
2406
- // this.builderService.onContextChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (c) => {
2407
- // if (c.path == this.path) {
2408
- // if (this.getValue()) {
2409
- // await this.findByValue();
2410
- // }
2411
- // }
2412
- // });
2413
- }
2241
+ #efEntity;
2242
+ #efValue;
2414
2243
  async findByValue() {
2415
2244
  this.isLoading.set(true);
2416
2245
  const byKey = this.entityDef()?.queries.byKey?.execute;
2417
2246
  if (byKey) {
2418
- const item = await byKey(this.getValue());
2419
- this.setItems(item);
2247
+ const rawValue = this.getValue();
2248
+ const values = castArray(rawValue);
2249
+ if (this.multiple()) {
2250
+ console.log(values);
2251
+ const items = await Promise.all(values.map(value => byKey(value)));
2252
+ this.setItems(items);
2253
+ }
2254
+ else {
2255
+ const item = await byKey(values[0]);
2256
+ this.setItems(item);
2257
+ }
2420
2258
  }
2421
2259
  this.isLoading.set(false);
2422
2260
  }
@@ -2430,33 +2268,35 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2430
2268
  title: `${this.translateService.translateSync('widget.lookup.search')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`,
2431
2269
  size: (this.vm()?.columns().length ?? 0) > 3 ? 'lg' : 'md',
2432
2270
  data: {
2433
- vm: new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), this.filter, this.customFilter()),
2434
- searchTerm: this.searchTerm() == this.displayText() ? null : this.searchTerm(),
2271
+ vm: new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), {
2272
+ customFilter: this.customFilter(),
2273
+ parentFilters: this.filter,
2274
+ allowMultiple: this.multiple()
2275
+ }),
2276
+ searchTerm: this.searchTerm(),
2277
+ initialSelectedItems: this.selectedItems(),
2435
2278
  },
2436
2279
  })
2437
2280
  .then((e) => {
2438
2281
  this.isOpen.set(false);
2439
- this.textbox.focus();
2282
+ this.textbox()?.focus();
2440
2283
  if (e.data?.items) {
2441
- this.setItems(e.data?.items[0]);
2284
+ this.setItems(e.data?.items);
2442
2285
  }
2443
2286
  });
2444
2287
  }
2445
2288
  handleValueChange(e) {
2446
- this.searchTerm.set(e.value);
2289
+ if (e.isUserInteraction) {
2290
+ this.setValue(e.value);
2291
+ }
2447
2292
  }
2448
2293
  handleOnBlur(e) {
2449
2294
  const com = e.component;
2450
- const input = com['input'].nativeElement;
2295
+ const input = e.htmlElement.querySelector('input');
2451
2296
  setTimeout(() => {
2452
- if (this.selectedItem()) {
2453
- input.value = this.displayText();
2454
- }
2455
- else {
2456
- if (!this.isOpen()) {
2457
- input.value = '';
2458
- this.searchTerm.set(null);
2459
- }
2297
+ if (!this.isOpen()) {
2298
+ input.value = '';
2299
+ this.searchTerm.set(null);
2460
2300
  }
2461
2301
  }, 100);
2462
2302
  }
@@ -2475,37 +2315,34 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2475
2315
  this.isLoading.set(false);
2476
2316
  }
2477
2317
  }
2478
- setItems(item) {
2318
+ setItems(items) {
2319
+ if (!items) {
2320
+ return;
2321
+ }
2322
+ //
2323
+ items = castArray(items);
2479
2324
  this.searchTerm.set(null);
2480
- this.displayText.set('');
2481
- this.selectedItem.set(item);
2482
- const text = this.formatService.format(this.textField(), 'string', item);
2483
- this.displayText.set(text);
2484
- this.setValue(item.id);
2325
+ this.selectedItems.set(items);
2326
+ //
2327
+ const values = items.map(item => get(item, this.valueField()));
2328
+ //
2329
+ this.setValue(values);
2330
+ //
2485
2331
  // extract data from valueField and set context by expose path
2486
2332
  if (this.expose()) {
2487
- if (typeof this.expose() == 'string') {
2488
- this.contextService.update(this.expose(), item);
2489
- }
2490
- // support multiple expose items
2491
- else if (Array.isArray(this.expose())) {
2492
- this.expose().forEach((i) => {
2493
- if (typeof i == 'string') {
2494
- this.contextService.update(i, item);
2495
- }
2496
- else {
2497
- // extract data from item by source path and set context by target path
2498
- const key = get(item, i.source);
2499
- this.contextService.update(i.target, key);
2500
- }
2501
- });
2502
- }
2503
- // extract data from item by source path and set context by target path
2504
- else if (typeof this.expose() == 'object') {
2505
- const i = this.expose();
2506
- const key = get(item, i.source);
2507
- this.contextService.update(i.target, key);
2508
- }
2333
+ const exposeValue = castArray(this.expose());
2334
+ exposeValue.forEach((i) => {
2335
+ if (typeof i == 'string') {
2336
+ //const values = items.map(item => get(item, this.expose()));
2337
+ const values = items.map(item => set({}, this.expose(), get(item, this.expose())));
2338
+ this.contextService.update(i, values);
2339
+ }
2340
+ else {
2341
+ // extract data from item by source path and set context by target path
2342
+ const values = items.map(item => set({}, i.source, get(item, i.source)));
2343
+ this.contextService.update(i.target, values);
2344
+ }
2345
+ });
2509
2346
  }
2510
2347
  }
2511
2348
  handleClearClick() {
@@ -2514,14 +2351,17 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2514
2351
  clear() {
2515
2352
  this.setValue(null);
2516
2353
  this.searchTerm.set('');
2517
- this.selectedItem.set(null);
2354
+ this.selectedItems.set([]);
2518
2355
  }
2519
2356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2520
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", viewQueries: [{ propertyName: "textbox", first: true, predicate: AXTextBoxComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: `
2521
- <ax-text-box
2522
- [ngModel]="displayText()"
2357
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLookupWidgetEditComponent, isStandalone: true, selector: "axp-lookup-widget-edit", viewQueries: [{ propertyName: "textbox", first: true, predicate: AXTagBoxComponent, descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: `
2358
+ <ax-tag-box
2359
+ [tags]="selectedItems()"
2360
+ [textField]="textField()"
2361
+ [valueField]="valueField()"
2523
2362
  (onValueChanged)="handleValueChange($event)"
2524
2363
  [placeholder]="placeholder()"
2364
+ [addOnEnter]="false"
2525
2365
  (onKeyUp)="handleKeyDown($event)"
2526
2366
  (onBlur)="handleOnBlur($event)"
2527
2367
  >
@@ -2532,7 +2372,9 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2532
2372
  [options]="validation.options"
2533
2373
  ></ax-validation-rule>
2534
2374
  }
2375
+ @if(selectedItems().length > 1) {
2535
2376
  <ax-clear-button (click)="handleClearClick()"></ax-clear-button>
2377
+ }
2536
2378
 
2537
2379
  <ax-suffix>
2538
2380
  <ax-button color="ghost" look="blank" [disabled]="isLoading()" (onClick)="handleOnClick($event)">
@@ -2543,18 +2385,23 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2543
2385
  }
2544
2386
  </ax-button>
2545
2387
  </ax-suffix>
2546
- </ax-text-box>
2547
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i6$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2388
+ </ax-tag-box>
2389
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type:
2390
+ //
2391
+ AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXLoadingModule }, { kind: "component", type: i1.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i4$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "ngmodule", type: AXTagBoxModule }, { kind: "component", type: i5$1.AXTagBoxComponent, selector: "ax-tag-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "allowNull", "type", "look", "addOnComma", "addOnEnter", "valueField", "textField", "showRemoveButton", "readonlyField", "allowDuplicateValues", "tags", "inputValue"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress", "tagsChange", "inputValueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2548
2392
  }
2549
2393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
2550
2394
  type: Component,
2551
2395
  args: [{
2552
2396
  selector: 'axp-lookup-widget-edit',
2553
2397
  template: `
2554
- <ax-text-box
2555
- [ngModel]="displayText()"
2398
+ <ax-tag-box
2399
+ [tags]="selectedItems()"
2400
+ [textField]="textField()"
2401
+ [valueField]="valueField()"
2556
2402
  (onValueChanged)="handleValueChange($event)"
2557
2403
  [placeholder]="placeholder()"
2404
+ [addOnEnter]="false"
2558
2405
  (onKeyUp)="handleKeyDown($event)"
2559
2406
  (onBlur)="handleOnBlur($event)"
2560
2407
  >
@@ -2565,7 +2412,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2565
2412
  [options]="validation.options"
2566
2413
  ></ax-validation-rule>
2567
2414
  }
2415
+ @if(selectedItems().length > 1) {
2568
2416
  <ax-clear-button (click)="handleClearClick()"></ax-clear-button>
2417
+ }
2569
2418
 
2570
2419
  <ax-suffix>
2571
2420
  <ax-button color="ghost" look="blank" [disabled]="isLoading()" (onClick)="handleOnClick($event)">
@@ -2576,61 +2425,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2576
2425
  }
2577
2426
  </ax-button>
2578
2427
  </ax-suffix>
2579
- </ax-text-box>
2428
+ </ax-tag-box>
2580
2429
  `,
2581
2430
  changeDetection: ChangeDetectionStrategy.OnPush,
2582
2431
  imports: [
2583
2432
  CommonModule,
2584
2433
  FormsModule,
2585
- AXSelectBoxModule,
2586
- AXTextBoxModule,
2434
+ //
2587
2435
  AXButtonModule,
2588
2436
  AXDecoratorModule,
2589
2437
  AXLoadingModule,
2590
2438
  AXValidationModule,
2591
2439
  AXFormModule,
2440
+ AXTagBoxModule
2592
2441
  ],
2593
2442
  }]
2594
- }], propDecorators: { textbox: [{
2595
- type: ViewChild,
2596
- args: [AXTextBoxComponent]
2597
- }] } });
2443
+ }] });
2598
2444
 
2599
2445
  var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
2600
2446
  __proto__: null,
2601
2447
  AXPLookupWidgetEditComponent: AXPLookupWidgetEditComponent
2602
2448
  });
2603
2449
 
2604
- class AXPLookupWidgetFilterComponent extends AXPWidgetComponent {
2605
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2606
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPLookupWidgetFilterComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2607
- }
2608
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetFilterComponent, decorators: [{
2609
- type: Component,
2610
- args: [{
2611
- template: ``,
2612
- changeDetection: ChangeDetectionStrategy.OnPush,
2613
- imports: [CommonModule, FormsModule],
2614
- inputs: []
2615
- }]
2616
- }] });
2617
-
2618
- var lookupWidgetFilter_component = /*#__PURE__*/Object.freeze({
2619
- __proto__: null,
2620
- AXPLookupWidgetFilterComponent: AXPLookupWidgetFilterComponent
2621
- });
2622
-
2623
2450
  class AXPLookupWidgetColumnComponent extends AXPColumnWidgetComponent {
2451
+ constructor() {
2452
+ super(...arguments);
2453
+ this.valueField = this.options['valueField'] ?? 'id';
2454
+ this.textField = this.options['textField'] ?? 'title';
2455
+ this.internalValue = computed(() => castArray(this.rawValue).map((item) => this.extractItem(item)));
2456
+ }
2457
+ extractItem(item) {
2458
+ return typeof item == 'object'
2459
+ ? {
2460
+ [this.valueField]: item?.[this.valueField],
2461
+ [this.textField]: item?.[this.textField],
2462
+ }
2463
+ : {
2464
+ [this.valueField]: item,
2465
+ [this.textField]: item,
2466
+ };
2467
+ }
2624
2468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2625
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue" }, usesInheritance: true, ngImport: i0, template: `
2626
- <ax-badge [look]="'twotone'" [text]="rawValue" color="primary"></ax-badge>
2469
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLookupWidgetColumnComponent, isStandalone: true, selector: "ng-component", inputs: { rawValue: "rawValue" }, usesInheritance: true, ngImport: i0, template: `
2470
+ <div class="ax-flex ax-gap-1">
2471
+ @for (item of internalValue(); track $index) {
2472
+ <ax-badge [text]="item[this.textField]" color="primary"></ax-badge>
2473
+ }
2474
+ </div>
2627
2475
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXBadgeModule }, { kind: "component", type: i1$1.AXBadgeComponent, selector: "ax-badge", inputs: ["color", "look", "text"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2628
2476
  }
2629
2477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
2630
2478
  type: Component,
2631
2479
  args: [{
2632
2480
  template: `
2633
- <ax-badge [look]="'twotone'" [text]="rawValue" color="primary"></ax-badge>
2481
+ <div class="ax-flex ax-gap-1">
2482
+ @for (item of internalValue(); track $index) {
2483
+ <ax-badge [text]="item[this.textField]" color="primary"></ax-badge>
2484
+ }
2485
+ </div>
2634
2486
  `,
2635
2487
  changeDetection: ChangeDetectionStrategy.OnPush,
2636
2488
  imports: [CommonModule, AXBadgeModule],
@@ -2643,30 +2495,10 @@ var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
2643
2495
  AXPLookupWidgetColumnComponent: AXPLookupWidgetColumnComponent
2644
2496
  });
2645
2497
 
2646
- class AXPLookupWidgetPrintComponent extends AXPWidgetComponent {
2647
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetPrintComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2648
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPLookupWidgetPrintComponent, isStandalone: true, selector: "ng-component", usesInheritance: true, ngImport: i0, template: ``, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2649
- }
2650
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetPrintComponent, decorators: [{
2651
- type: Component,
2652
- args: [{
2653
- template: ``,
2654
- changeDetection: ChangeDetectionStrategy.OnPush,
2655
- imports: [CommonModule],
2656
- inputs: []
2657
- }]
2658
- }] });
2659
-
2660
- var lookupWidgetPrint_component = /*#__PURE__*/Object.freeze({
2661
- __proto__: null,
2662
- AXPLookupWidgetPrintComponent: AXPLookupWidgetPrintComponent
2663
- });
2664
-
2665
2498
  const AXPLookupWidget = {
2666
2499
  name: 'lookup-editor',
2667
2500
  title: 'Lookup',
2668
- visible: false,
2669
- group: AXP_WIDGETS_EDITOR_GROUP,
2501
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
2670
2502
  defaultFilterWidgetName: 'lookup-filter',
2671
2503
  type: 'editor',
2672
2504
  properties: [
@@ -2700,6 +2532,7 @@ const AXPLookupWidget = {
2700
2532
  },
2701
2533
  visible: true,
2702
2534
  },
2535
+ AXP_ALLOW_MULTIPLE_PROPERTY
2703
2536
  ],
2704
2537
  components: {
2705
2538
  view: {
@@ -2708,15 +2541,9 @@ const AXPLookupWidget = {
2708
2541
  edit: {
2709
2542
  component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
2710
2543
  },
2711
- filter: {
2712
- component: () => Promise.resolve().then(function () { return lookupWidgetFilter_component; }).then((c) => c.AXPLookupWidgetFilterComponent),
2713
- },
2714
2544
  column: {
2715
2545
  component: () => Promise.resolve().then(function () { return lookupWidgetColumn_component; }).then((c) => c.AXPLookupWidgetColumnComponent),
2716
2546
  },
2717
- print: {
2718
- component: () => Promise.resolve().then(function () { return lookupWidgetPrint_component; }).then((c) => c.AXPLookupWidgetPrintComponent),
2719
- },
2720
2547
  designer: {
2721
2548
  component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
2722
2549
  },
@@ -2857,9 +2684,9 @@ class AXPTagableBoxWidgetEditComponent extends AXPWidgetComponent {
2857
2684
  </ax-prefix>
2858
2685
  </ax-button>
2859
2686
  </div>
2860
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i6$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type:
2687
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i4$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i4.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: AXValidationModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type:
2861
2688
  // AXTagBoxModule,
2862
- AXSelectBoxModule }, { kind: "component", type: i5$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: AXSearchBoxModule }, { kind: "component", type: i6.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2689
+ AXSelectBoxModule }, { kind: "component", type: i5$2.AXSelectBoxComponent, selector: "ax-select-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "multiple", "valueField", "textField", "disabledField", "textTemplate", "selectedItems", "dataSource", "minRecordsForSearch", "caption", "itemTemplate", "selectedTemplate", "emptyTemplate", "loadingTemplate", "dropdownWidth", "searchBoxAutoFocus"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onOpened", "onClosed"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i6.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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2863
2690
  }
2864
2691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
2865
2692
  type: Component,
@@ -3063,9 +2890,9 @@ var tagableBoxWidgetView_component = /*#__PURE__*/Object.freeze({
3063
2890
  const AXPTagableBoxWidget = {
3064
2891
  name: 'tagable-editor',
3065
2892
  title: 'Tagable Box',
3066
- icon: 'fa-solid fa-tags',
2893
+ icon: 'fa-light fa-tags',
3067
2894
  description: 'Inputs text with tags',
3068
- group: AXP_WIDGETS_EDITOR_GROUP,
2895
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
3069
2896
  type: 'editor',
3070
2897
  defaultFilterWidgetName: 'string-filter',
3071
2898
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],
@@ -3117,7 +2944,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPWidgetComponent {
3117
2944
  size: 'md',
3118
2945
  closeButton: true,
3119
2946
  data: {
3120
- widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
2947
+ widgets: sortBy(this.widgetRegisteryService.all(), (c) => c.title),
3121
2948
  },
3122
2949
  });
3123
2950
  if ((result.data?.widgets ?? []).length) {
@@ -3155,7 +2982,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPWidgetComponent {
3155
2982
  <axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
3156
2983
  </axp-widget-property-viewer>
3157
2984
  }
3158
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.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: AXLoadingModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i6$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2985
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXSelectBoxModule }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "component", type: i2$1.AXTextBoxComponent, selector: "ax-text-box", inputs: ["disabled", "tabIndex", "readonly", "value", "state", "name", "id", "placeholder", "maxLength", "allowNull", "type", "autoComplete", "look", "mask-options", "class"], outputs: ["onBlur", "onFocus", "valueChange", "stateChange", "onValueChanged", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.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: AXLoadingModule }, { kind: "ngmodule", type: AXValidationModule }, { kind: "ngmodule", type: AXFormModule }, { kind: "directive", type: i4$1.AXValidationRuleDirective, selector: "ax-validation-rule", inputs: ["rule", "options", "message"] }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget", "mode"], outputs: ["onChanged"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3159
2986
  }
3160
2987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
3161
2988
  type: Component,
@@ -3225,10 +3052,9 @@ var widgetSelectorWidgetView_component = /*#__PURE__*/Object.freeze({
3225
3052
  const AXPWidgetSelectorWidget = {
3226
3053
  name: 'widget-selector',
3227
3054
  title: 'Widget Selector',
3228
- group: AXP_WIDGETS_EDITOR_GROUP,
3055
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
3229
3056
  type: 'editor',
3230
- visible: false,
3231
- icon: 'fa-solid fa-square',
3057
+ icon: 'fa-light fa-square',
3232
3058
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
3233
3059
  components: {
3234
3060
  view: {
@@ -3688,5 +3514,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
3688
3514
  * Generated bundle index. Do not edit.
3689
3515
  */
3690
3516
 
3691
- export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPDexieEntityStorageService, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityMiddlewareDefault, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPModifyEntitySectionWorkflow, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER };
3517
+ export { AXMEntityCrudService, AXMEntityCrudServiceImpl, AXPCreateEntityWorkflow, AXPDataSeederService, AXPDeleteEntityWorkflow, AXPEntityCommandTriggerViewModel, AXPEntityCreateEvent, AXPEntityCreatePopupAction, AXPEntityCreateSubmittedAction, AXPEntityCreateViewElementViewModel, AXPEntityCreateViewModelFactory, AXPEntityCreateViewSectionViewModel, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityDefinitionRegistryService, AXPEntityDeletedEvent, AXPEntityDetailListViewModel, AXPEntityDetailViewModelFactory, AXPEntityDetailViewModelResolver, AXPEntityListViewColumnViewModel, AXPEntityListViewModelFactory, AXPEntityListViewModelResolver, AXPEntityMasterCreateViewModel, AXPEntityMasterListViewModel, AXPEntityMasterListViewQueryViewModel, AXPEntityMasterSingleElementViewModel, AXPEntityMasterSingleViewGroupViewModel, AXPEntityMasterSingleViewModel, AXPEntityMasterUpdateElementViewModel, AXPEntityMasterUpdateViewModel, AXPEntityMasterUpdateViewModelFactory, AXPEntityMiddleware, AXPEntityMiddlewareDefault, AXPEntityModifyConfirmedAction, AXPEntityModifyEvent, AXPEntityModifySectionPopupAction, AXPEntityModule, AXPEntityPerformDeleteAction, AXPEntityResolver, AXPEntityService, AXPEntityStorageService, AXPModifyEntitySectionWorkflow, AXPQuickEntityModifyPopupAction, AXPQuickModifyEntityWorkflow, AXPShowDetailViewAction, AXPShowDetailsViewWorkflow, AXPShowListViewAction, AXPShowListViewWorkflow, AXP_DATA_SEEDER_TOKEN, AXP_ENTITY_CONFIG_TOKEN, AXP_ENTITY_DEFINITION_LOADER };
3692
3518
  //# sourceMappingURL=acorex-platform-layout-entity.mjs.map