@acorex/platform 19.2.19 → 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 (197) 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/interactive.types.d.ts +44 -0
  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 +243 -415
  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-CGARdU4C.mjs → acorex-platform-themes-default-search-popup.component-BADEuoeJ.mjs} +9 -9
  49. package/fesm2022/{acorex-platform-themes-default-search-popup.component-CGARdU4C.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 +237 -73
  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 +502 -322
  59. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  60. package/fesm2022/acorex-platform-widgets.mjs +4109 -1487
  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 +1 -1
  87. package/themes/default/lib/layouts/base/base-page.component.d.ts +39 -13
  88. package/themes/default/lib/layouts/base/base-page.types.d.ts +15 -3
  89. package/themes/default/lib/layouts/base/index.d.ts +1 -0
  90. package/themes/default/lib/layouts/base/page-layout/index.d.ts +1 -0
  91. package/themes/default/lib/{pages/theme-palette-preview/theme-palette-preview.page.d.ts → layouts/base/page-layout/page-layout.component.d.ts} +13 -26
  92. package/themes/default/lib/layouts/base/simple-page/simple-page.layout.d.ts +2 -2
  93. package/themes/default/lib/layouts/entity-layouts/entity-category/entity-category.component.d.ts +16 -0
  94. package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +2 -2
  95. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +10 -8
  96. package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +12 -4
  97. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/entity-master-toolbar-view.component.d.ts +7 -0
  98. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/filters/entity-filter-toolbar.component.d.ts +48 -0
  99. package/themes/default/lib/layouts/entity-layouts/entity-master-toolbar-view/views/entity-view-toolbar.component.d.ts +12 -0
  100. package/themes/default/lib/layouts/root-layout/components/header/header.component.d.ts +2 -2
  101. package/themes/default/lib/layouts/root-layout/components/horizontal-menu/horizontal-menu.component.d.ts +9 -3
  102. package/themes/default/lib/layouts/root-layout/components/side-menu/side-menu.component.d.ts +7 -1
  103. package/themes/default/lib/layouts/root-layout/horizontal/horizontal-layout.component.d.ts +2 -2
  104. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +2 -2
  105. package/themes/default/lib/layouts/root-layout/vertical/vertical-layout.component.d.ts +2 -2
  106. package/themes/default/lib/layouts/setting-layout/setting-page/setting-page.component.d.ts +61 -5
  107. package/themes/default/lib/layouts/setting-layout/setting-view/setting-view.component.d.ts +68 -6
  108. package/themes/shared/index.d.ts +1 -1
  109. package/themes/shared/lib/components/badge/badge.directive.d.ts +14 -0
  110. package/themes/shared/lib/components/layout-elements/layout-blocks.component.d.ts +4 -1
  111. package/themes/shared/lib/components/layout-elements/layout-side.component.d.ts +2 -2
  112. package/themes/shared/lib/components/slots/theme-slot.component.d.ts +2 -2
  113. package/themes/shared/lib/palette.provider.d.ts +1 -1
  114. package/themes/shared/lib/setting.keys.d.ts +2 -1
  115. package/themes/shared/lib/setting.provider.d.ts +4 -1
  116. package/themes/shared/lib/theme.service.d.ts +2 -2
  117. package/themes/shared/lib/theme.types.d.ts +11 -2
  118. package/themes/shared/lib/widgets/font-size-chooser/font-size-chooser-widget.component.d.ts +10 -0
  119. package/themes/shared/lib/widgets/font-size-chooser/font-size-chooser-widget.config.d.ts +7 -0
  120. package/themes/shared/lib/widgets/font-size-chooser/index.d.ts +2 -0
  121. package/themes/shared/lib/widgets/font-style-chooser/font-style-chooser-widget.component.d.ts +15 -0
  122. package/themes/shared/lib/widgets/font-style-chooser/font-style-chooser-widget.config.d.ts +7 -0
  123. package/themes/shared/lib/widgets/font-style-chooser/index.d.ts +2 -0
  124. package/themes/shared/lib/widgets/menu-orientation-chooser/index.d.ts +2 -0
  125. package/themes/shared/lib/widgets/menu-orientation-chooser/menu-orientation-chooser-widget.component.d.ts +15 -0
  126. package/themes/shared/lib/widgets/menu-orientation-chooser/menu-orientation-chooser-widget.config.d.ts +7 -0
  127. package/themes/shared/lib/widgets/theme-mode-chooser/index.d.ts +2 -0
  128. package/themes/shared/lib/widgets/theme-mode-chooser/theme-mode-chooser-widget.component.d.ts +16 -0
  129. package/themes/shared/lib/widgets/theme-mode-chooser/theme-mode-chooser-widget.config.d.ts +7 -0
  130. package/themes/shared/lib/widgets/theme-palette-chooser/index.d.ts +2 -0
  131. package/themes/shared/lib/widgets/theme-palette-chooser/theme-palette-chooser-widget.component.d.ts +13 -0
  132. 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
  133. package/widgets/lib/properties/groups.d.ts +2 -0
  134. package/widgets/lib/widgets/advance/file/file-box-widget-edit.component.d.ts +5 -5
  135. package/widgets/lib/widgets/charts/bar-chart/bar-chart-widget.component.d.ts +52 -0
  136. package/widgets/lib/widgets/charts/bar-chart/bar-chart.type.d.ts +29 -11
  137. package/widgets/lib/widgets/charts/bar-chart/index.d.ts +1 -1
  138. package/widgets/lib/widgets/charts/chart.type.d.ts +3 -0
  139. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar-widget.component.d.ts +40 -0
  140. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar-widget.config.d.ts +7 -0
  141. package/widgets/lib/widgets/charts/clock-calendar/clock-calendar.types.d.ts +50 -0
  142. package/widgets/lib/widgets/charts/clock-calendar/index.d.ts +3 -0
  143. package/widgets/lib/widgets/charts/donut-chart/donut-chart-widget.component.d.ts +54 -0
  144. package/widgets/lib/widgets/charts/donut-chart/donut-chart.type.d.ts +31 -21
  145. package/widgets/lib/widgets/charts/donut-chart/index.d.ts +1 -1
  146. package/widgets/lib/widgets/charts/gauge-chart/{gauge-chart-widget-edit.component.d.ts → gauge-chart-widget.component.d.ts} +3 -3
  147. package/widgets/lib/widgets/charts/gauge-chart/gauge-chart.type.d.ts +26 -11
  148. package/widgets/lib/widgets/charts/gauge-chart/index.d.ts +2 -1
  149. package/widgets/lib/widgets/charts/shared/chart-base.component.d.ts +44 -0
  150. package/widgets/lib/widgets/charts/shared/chart-base.type.d.ts +37 -0
  151. package/widgets/lib/widgets/charts/sticky-note/index.d.ts +1 -1
  152. package/widgets/lib/widgets/charts/sticky-note/{sticky-note-widget-edit.component.d.ts → sticky-note-widget.component.d.ts} +3 -3
  153. package/widgets/lib/widgets/charts/weather/index.d.ts +4 -0
  154. package/widgets/lib/widgets/charts/weather/weather-services/index.d.ts +3 -0
  155. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.abstract.d.ts +174 -0
  156. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.key.d.ts +2 -0
  157. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.mock.service.d.ts +47 -0
  158. package/widgets/lib/widgets/charts/weather/weather-services/weather-api.service.d.ts +48 -0
  159. package/widgets/lib/widgets/charts/weather/weather-widget.component.d.ts +109 -0
  160. package/widgets/lib/widgets/charts/weather/weather-widget.config.d.ts +14 -0
  161. package/widgets/lib/widgets/charts/weather/weather.module.d.ts +11 -0
  162. package/widgets/lib/widgets/editors/select/select-box-widget-column.component.d.ts +0 -1
  163. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +4 -1
  164. package/widgets/lib/widgets/editors/template-box/index.d.ts +6 -0
  165. package/widgets/lib/widgets/editors/template-box/template-box-widget-column.component.d.ts +10 -0
  166. package/widgets/lib/widgets/editors/template-box/template-box-widget-edit.component.d.ts +29 -0
  167. package/widgets/lib/widgets/editors/template-box/template-box-widget-filter.component.d.ts +6 -0
  168. package/widgets/lib/widgets/editors/template-box/template-box-widget-print.component.d.ts +10 -0
  169. package/widgets/lib/widgets/editors/template-box/template-box-widget-view.component.d.ts +11 -0
  170. package/widgets/lib/widgets/editors/template-box/template-box-widget.config.d.ts +7 -0
  171. package/widgets/lib/widgets/filters/select-filter/select-filter-widget-edit.component.d.ts +2 -5
  172. package/widgets/lib/widgets/index.d.ts +3 -0
  173. package/core/lib/types.d.ts +0 -57
  174. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-LKhN00ob.mjs.map +0 -1
  175. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CdC4eF25.mjs +0 -400
  176. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-CdC4eF25.mjs.map +0 -1
  177. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B9TUh-2S.mjs +0 -91
  178. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B9TUh-2S.mjs.map +0 -1
  179. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-ZfUaIxUa.mjs +0 -135
  180. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-ZfUaIxUa.mjs.map +0 -1
  181. package/fesm2022/acorex-platform-themes-default-setting-page.component-Cd2yaPEZ.mjs +0 -74
  182. package/fesm2022/acorex-platform-themes-default-setting-page.component-Cd2yaPEZ.mjs.map +0 -1
  183. package/fesm2022/acorex-platform-themes-default-setting-view.component-B3Aob67f.mjs +0 -73
  184. package/fesm2022/acorex-platform-themes-default-setting-view.component-B3Aob67f.mjs.map +0 -1
  185. package/fesm2022/acorex-platform-themes-default-theme-palette-preview.page-DqAngWCf.mjs +0 -146
  186. package/fesm2022/acorex-platform-themes-default-theme-palette-preview.page-DqAngWCf.mjs.map +0 -1
  187. package/layout/builder/lib/builder/widget-groups.d.ts +0 -9
  188. package/layout/entity/lib/dexie-storage.service.d.ts +0 -16
  189. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-filter.component.d.ts +0 -6
  190. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-print.component.d.ts +0 -6
  191. package/themes/default/lib/layouts/filters-layout/simple-filter-builder/filters-view.component.d.ts +0 -13
  192. package/themes/shared/lib/components/drawer/drawer.directive.d.ts +0 -22
  193. package/themes/shared/lib/components/drawer/index.d.ts +0 -1
  194. package/themes/shared/lib/widgets/theme-color-selection/index.d.ts +0 -2
  195. package/themes/shared/lib/widgets/theme-color-selection/theme-color-selection-widget-edit.component.d.ts +0 -6
  196. package/widgets/lib/widgets/charts/bar-chart/bar-chart-widget-edit.component.d.ts +0 -40
  197. 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,19 +2168,21 @@ 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]);
2333
- filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));
2174
+ console.log(this.options.customFilter);
2175
+ if (this.options.customFilter) {
2176
+ const cleanedFilters = AXPCleanNestedFilters([this.options.customFilter]);
2177
+ if (cleanedFilters.length > 0) {
2178
+ filters.push(this.filterOperatorMiddleware.transformFilter(cleanedFilters[0]));
2179
+ }
2334
2180
  }
2335
2181
  if (hasInlineFilters) {
2336
2182
  filters.push(this.inlineFilters);
2337
2183
  }
2338
- if (hasParentFilters && this.parentFilters) {
2339
- filters.push(this.parentFilters);
2184
+ if (hasParentFilters && this.options.parentFilters) {
2185
+ filters.push(this.options.parentFilters);
2340
2186
  }
2341
2187
  // Apply the filters to the dataSource
2342
2188
  this.dataSource.filter({
@@ -2362,59 +2208,53 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2362
2208
  this.entityResolver = inject(AXPEntityResolver);
2363
2209
  this.formatService = inject(AXFormatService);
2364
2210
  this.popupService = inject(AXPopupService);
2365
- this.destroyRef = inject(DestroyRef);
2366
2211
  this.translateService = inject(AXTranslationService);
2367
2212
  this.expose = computed(() => this.options()['expose']);
2368
2213
  this.entity = computed(() => this.options()['entity']);
2369
2214
  this.customFilter = computed(() => this.options()['filter']);
2215
+ this.multiple = computed(() => (this.options()['multiple'] ?? false));
2370
2216
  this.textField = computed(() => {
2371
2217
  return (this.entityDef()?.formats.lookup ?? this.entityDef()?.properties.find((c) => c.name != 'id')?.name ?? 'title');
2372
2218
  });
2219
+ this.valueField = computed(() => this.entityDef()?.properties.find((c) => c.name == 'id')?.name ?? 'id');
2373
2220
  this.entityDef = signal(null);
2374
2221
  this.searchTerm = signal(null);
2375
- this.displayText = signal('');
2376
- this.selectedItem = signal(null);
2222
+ this.selectedItems = signal([]);
2223
+ this.textbox = viewChild(AXTagBoxComponent);
2377
2224
  this.isLoading = signal(false);
2378
2225
  this.isOpen = signal(false);
2379
2226
  this.vm = signal(null);
2380
2227
  this.placeholder = computed(() => {
2381
- 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(', '));
2382
2229
  });
2383
- this.efDisplay = effect(async () => {
2384
- const value = this.getValue();
2385
- if (isNil(value)) {
2386
- this.displayText.set('');
2387
- }
2388
- else if (typeof value == 'object' && !Array.isArray(value)) {
2389
- this.displayText.set(this.formatService.format(this.textField(), 'string', value));
2390
- }
2391
- else if (value != null) {
2392
- await this.findByValue();
2393
- }
2394
- });
2395
- this.efEntity = effect(async () => {
2230
+ this.#efEntity = effect(async () => {
2396
2231
  const [module, entity] = this.entity().split('.');
2397
2232
  this.entityDef.set(await this.entityResolver.get(module, entity));
2398
- 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
+ }
2399
2239
  });
2400
2240
  }
2401
- ngOnInit() {
2402
- super.ngOnInit();
2403
- //
2404
- // this.builderService.onContextChanged.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(async (c) => {
2405
- // if (c.path == this.path) {
2406
- // if (this.getValue()) {
2407
- // await this.findByValue();
2408
- // }
2409
- // }
2410
- // });
2411
- }
2241
+ #efEntity;
2242
+ #efValue;
2412
2243
  async findByValue() {
2413
2244
  this.isLoading.set(true);
2414
2245
  const byKey = this.entityDef()?.queries.byKey?.execute;
2415
2246
  if (byKey) {
2416
- const item = await byKey(this.getValue());
2417
- 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
+ }
2418
2258
  }
2419
2259
  this.isLoading.set(false);
2420
2260
  }
@@ -2428,33 +2268,35 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2428
2268
  title: `${this.translateService.translateSync('widget.lookup.search')} ${this.translateService.translateSync(this.entityDef()?.formats.plural ?? '')}`,
2429
2269
  size: (this.vm()?.columns().length ?? 0) > 3 ? 'lg' : 'md',
2430
2270
  data: {
2431
- vm: new AXPLookupWidgetSelectorViewModel(this.injector, this.entityDef(), this.filter, this.customFilter()),
2432
- 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(),
2433
2278
  },
2434
2279
  })
2435
2280
  .then((e) => {
2436
2281
  this.isOpen.set(false);
2437
- this.textbox.focus();
2282
+ this.textbox()?.focus();
2438
2283
  if (e.data?.items) {
2439
- this.setItems(e.data?.items[0]);
2284
+ this.setItems(e.data?.items);
2440
2285
  }
2441
2286
  });
2442
2287
  }
2443
2288
  handleValueChange(e) {
2444
- this.searchTerm.set(e.value);
2289
+ if (e.isUserInteraction) {
2290
+ this.setValue(e.value);
2291
+ }
2445
2292
  }
2446
2293
  handleOnBlur(e) {
2447
2294
  const com = e.component;
2448
- const input = com['input'].nativeElement;
2295
+ const input = e.htmlElement.querySelector('input');
2449
2296
  setTimeout(() => {
2450
- if (this.selectedItem()) {
2451
- input.value = this.displayText();
2452
- }
2453
- else {
2454
- if (!this.isOpen()) {
2455
- input.value = '';
2456
- this.searchTerm.set(null);
2457
- }
2297
+ if (!this.isOpen()) {
2298
+ input.value = '';
2299
+ this.searchTerm.set(null);
2458
2300
  }
2459
2301
  }, 100);
2460
2302
  }
@@ -2473,37 +2315,34 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2473
2315
  this.isLoading.set(false);
2474
2316
  }
2475
2317
  }
2476
- setItems(item) {
2318
+ setItems(items) {
2319
+ if (!items) {
2320
+ return;
2321
+ }
2322
+ //
2323
+ items = castArray(items);
2477
2324
  this.searchTerm.set(null);
2478
- this.displayText.set('');
2479
- this.selectedItem.set(item);
2480
- const text = this.formatService.format(this.textField(), 'string', item);
2481
- this.displayText.set(text);
2482
- 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
+ //
2483
2331
  // extract data from valueField and set context by expose path
2484
2332
  if (this.expose()) {
2485
- if (typeof this.expose() == 'string') {
2486
- this.contextService.update(this.expose(), item);
2487
- }
2488
- // support multiple expose items
2489
- else if (Array.isArray(this.expose())) {
2490
- this.expose().forEach((i) => {
2491
- if (typeof i == 'string') {
2492
- this.contextService.update(i, item);
2493
- }
2494
- else {
2495
- // extract data from item by source path and set context by target path
2496
- const key = get(item, i.source);
2497
- this.contextService.update(i.target, key);
2498
- }
2499
- });
2500
- }
2501
- // extract data from item by source path and set context by target path
2502
- else if (typeof this.expose() == 'object') {
2503
- const i = this.expose();
2504
- const key = get(item, i.source);
2505
- this.contextService.update(i.target, key);
2506
- }
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
+ });
2507
2346
  }
2508
2347
  }
2509
2348
  handleClearClick() {
@@ -2512,14 +2351,17 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2512
2351
  clear() {
2513
2352
  this.setValue(null);
2514
2353
  this.searchTerm.set('');
2515
- this.selectedItem.set(null);
2354
+ this.selectedItems.set([]);
2516
2355
  }
2517
2356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetEditComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2518
- 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: `
2519
- <ax-text-box
2520
- [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()"
2521
2362
  (onValueChanged)="handleValueChange($event)"
2522
2363
  [placeholder]="placeholder()"
2364
+ [addOnEnter]="false"
2523
2365
  (onKeyUp)="handleKeyDown($event)"
2524
2366
  (onBlur)="handleOnBlur($event)"
2525
2367
  >
@@ -2530,7 +2372,9 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2530
2372
  [options]="validation.options"
2531
2373
  ></ax-validation-rule>
2532
2374
  }
2375
+ @if(selectedItems().length > 1) {
2533
2376
  <ax-clear-button (click)="handleClearClick()"></ax-clear-button>
2377
+ }
2534
2378
 
2535
2379
  <ax-suffix>
2536
2380
  <ax-button color="ghost" look="blank" [disabled]="isLoading()" (onClick)="handleOnClick($event)">
@@ -2541,18 +2385,23 @@ class AXPLookupWidgetEditComponent extends AXPWidgetComponent {
2541
2385
  }
2542
2386
  </ax-button>
2543
2387
  </ax-suffix>
2544
- </ax-text-box>
2545
- `, 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 }); }
2546
2392
  }
2547
2393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetEditComponent, decorators: [{
2548
2394
  type: Component,
2549
2395
  args: [{
2550
2396
  selector: 'axp-lookup-widget-edit',
2551
2397
  template: `
2552
- <ax-text-box
2553
- [ngModel]="displayText()"
2398
+ <ax-tag-box
2399
+ [tags]="selectedItems()"
2400
+ [textField]="textField()"
2401
+ [valueField]="valueField()"
2554
2402
  (onValueChanged)="handleValueChange($event)"
2555
2403
  [placeholder]="placeholder()"
2404
+ [addOnEnter]="false"
2556
2405
  (onKeyUp)="handleKeyDown($event)"
2557
2406
  (onBlur)="handleOnBlur($event)"
2558
2407
  >
@@ -2563,7 +2412,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2563
2412
  [options]="validation.options"
2564
2413
  ></ax-validation-rule>
2565
2414
  }
2415
+ @if(selectedItems().length > 1) {
2566
2416
  <ax-clear-button (click)="handleClearClick()"></ax-clear-button>
2417
+ }
2567
2418
 
2568
2419
  <ax-suffix>
2569
2420
  <ax-button color="ghost" look="blank" [disabled]="isLoading()" (onClick)="handleOnClick($event)">
@@ -2574,61 +2425,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2574
2425
  }
2575
2426
  </ax-button>
2576
2427
  </ax-suffix>
2577
- </ax-text-box>
2428
+ </ax-tag-box>
2578
2429
  `,
2579
2430
  changeDetection: ChangeDetectionStrategy.OnPush,
2580
2431
  imports: [
2581
2432
  CommonModule,
2582
2433
  FormsModule,
2583
- AXSelectBoxModule,
2584
- AXTextBoxModule,
2434
+ //
2585
2435
  AXButtonModule,
2586
2436
  AXDecoratorModule,
2587
2437
  AXLoadingModule,
2588
2438
  AXValidationModule,
2589
2439
  AXFormModule,
2440
+ AXTagBoxModule
2590
2441
  ],
2591
2442
  }]
2592
- }], propDecorators: { textbox: [{
2593
- type: ViewChild,
2594
- args: [AXTextBoxComponent]
2595
- }] } });
2443
+ }] });
2596
2444
 
2597
2445
  var lookupWidgetEdit_component = /*#__PURE__*/Object.freeze({
2598
2446
  __proto__: null,
2599
2447
  AXPLookupWidgetEditComponent: AXPLookupWidgetEditComponent
2600
2448
  });
2601
2449
 
2602
- class AXPLookupWidgetFilterComponent extends AXPWidgetComponent {
2603
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetFilterComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2604
- 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 }); }
2605
- }
2606
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetFilterComponent, decorators: [{
2607
- type: Component,
2608
- args: [{
2609
- template: ``,
2610
- changeDetection: ChangeDetectionStrategy.OnPush,
2611
- imports: [CommonModule, FormsModule],
2612
- inputs: []
2613
- }]
2614
- }] });
2615
-
2616
- var lookupWidgetFilter_component = /*#__PURE__*/Object.freeze({
2617
- __proto__: null,
2618
- AXPLookupWidgetFilterComponent: AXPLookupWidgetFilterComponent
2619
- });
2620
-
2621
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
+ }
2622
2468
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2623
- 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: `
2624
- <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>
2625
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 }); }
2626
2476
  }
2627
2477
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetColumnComponent, decorators: [{
2628
2478
  type: Component,
2629
2479
  args: [{
2630
2480
  template: `
2631
- <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>
2632
2486
  `,
2633
2487
  changeDetection: ChangeDetectionStrategy.OnPush,
2634
2488
  imports: [CommonModule, AXBadgeModule],
@@ -2641,30 +2495,10 @@ var lookupWidgetColumn_component = /*#__PURE__*/Object.freeze({
2641
2495
  AXPLookupWidgetColumnComponent: AXPLookupWidgetColumnComponent
2642
2496
  });
2643
2497
 
2644
- class AXPLookupWidgetPrintComponent extends AXPWidgetComponent {
2645
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetPrintComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2646
- 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 }); }
2647
- }
2648
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLookupWidgetPrintComponent, decorators: [{
2649
- type: Component,
2650
- args: [{
2651
- template: ``,
2652
- changeDetection: ChangeDetectionStrategy.OnPush,
2653
- imports: [CommonModule],
2654
- inputs: []
2655
- }]
2656
- }] });
2657
-
2658
- var lookupWidgetPrint_component = /*#__PURE__*/Object.freeze({
2659
- __proto__: null,
2660
- AXPLookupWidgetPrintComponent: AXPLookupWidgetPrintComponent
2661
- });
2662
-
2663
2498
  const AXPLookupWidget = {
2664
2499
  name: 'lookup-editor',
2665
2500
  title: 'Lookup',
2666
- visible: false,
2667
- group: AXP_WIDGETS_EDITOR_GROUP,
2501
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
2668
2502
  defaultFilterWidgetName: 'lookup-filter',
2669
2503
  type: 'editor',
2670
2504
  properties: [
@@ -2698,6 +2532,7 @@ const AXPLookupWidget = {
2698
2532
  },
2699
2533
  visible: true,
2700
2534
  },
2535
+ AXP_ALLOW_MULTIPLE_PROPERTY
2701
2536
  ],
2702
2537
  components: {
2703
2538
  view: {
@@ -2706,15 +2541,9 @@ const AXPLookupWidget = {
2706
2541
  edit: {
2707
2542
  component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
2708
2543
  },
2709
- filter: {
2710
- component: () => Promise.resolve().then(function () { return lookupWidgetFilter_component; }).then((c) => c.AXPLookupWidgetFilterComponent),
2711
- },
2712
2544
  column: {
2713
2545
  component: () => Promise.resolve().then(function () { return lookupWidgetColumn_component; }).then((c) => c.AXPLookupWidgetColumnComponent),
2714
2546
  },
2715
- print: {
2716
- component: () => Promise.resolve().then(function () { return lookupWidgetPrint_component; }).then((c) => c.AXPLookupWidgetPrintComponent),
2717
- },
2718
2547
  designer: {
2719
2548
  component: () => Promise.resolve().then(function () { return lookupWidgetEdit_component; }).then((c) => c.AXPLookupWidgetEditComponent),
2720
2549
  },
@@ -2855,9 +2684,9 @@ class AXPTagableBoxWidgetEditComponent extends AXPWidgetComponent {
2855
2684
  </ax-prefix>
2856
2685
  </ax-button>
2857
2686
  </div>
2858
- `, 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:
2859
2688
  // AXTagBoxModule,
2860
- 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 }); }
2861
2690
  }
2862
2691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPTagableBoxWidgetEditComponent, decorators: [{
2863
2692
  type: Component,
@@ -3061,9 +2890,9 @@ var tagableBoxWidgetView_component = /*#__PURE__*/Object.freeze({
3061
2890
  const AXPTagableBoxWidget = {
3062
2891
  name: 'tagable-editor',
3063
2892
  title: 'Tagable Box',
3064
- icon: 'fa-solid fa-tags',
2893
+ icon: 'fa-light fa-tags',
3065
2894
  description: 'Inputs text with tags',
3066
- group: AXP_WIDGETS_EDITOR_GROUP,
2895
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
3067
2896
  type: 'editor',
3068
2897
  defaultFilterWidgetName: 'string-filter',
3069
2898
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY],
@@ -3115,7 +2944,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPWidgetComponent {
3115
2944
  size: 'md',
3116
2945
  closeButton: true,
3117
2946
  data: {
3118
- widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
2947
+ widgets: sortBy(this.widgetRegisteryService.all(), (c) => c.title),
3119
2948
  },
3120
2949
  });
3121
2950
  if ((result.data?.widgets ?? []).length) {
@@ -3153,7 +2982,7 @@ class AXPWidgetSelectorWidgetEditComponent extends AXPWidgetComponent {
3153
2982
  <axp-widget-property-viewer [widget]="selectedWidgetNode()!" (onChanged)="handleChangeWidget($event)">
3154
2983
  </axp-widget-property-viewer>
3155
2984
  }
3156
- `, 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 }); }
3157
2986
  }
3158
2987
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPWidgetSelectorWidgetEditComponent, decorators: [{
3159
2988
  type: Component,
@@ -3223,10 +3052,9 @@ var widgetSelectorWidgetView_component = /*#__PURE__*/Object.freeze({
3223
3052
  const AXPWidgetSelectorWidget = {
3224
3053
  name: 'widget-selector',
3225
3054
  title: 'Widget Selector',
3226
- group: AXP_WIDGETS_EDITOR_GROUP,
3055
+ categories: AXP_WIDGETS_EDITOR_CATEGORY,
3227
3056
  type: 'editor',
3228
- visible: false,
3229
- icon: 'fa-solid fa-square',
3057
+ icon: 'fa-light fa-square',
3230
3058
  properties: [AXP_NAME_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DISABLED_PROPERTY],
3231
3059
  components: {
3232
3060
  view: {
@@ -3686,5 +3514,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
3686
3514
  * Generated bundle index. Do not edit.
3687
3515
  */
3688
3516
 
3689
- 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 };
3690
3518
  //# sourceMappingURL=acorex-platform-layout-entity.mjs.map