@acorex/platform 19.3.2 → 19.3.3-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 (103) hide show
  1. package/common/lib/layout/menu/menu.types.d.ts +0 -1
  2. package/core/lib/expression-evaluator/expression-evaluator.service.d.ts +2 -0
  3. package/core/lib/types/interactive.types.d.ts +21 -0
  4. package/core/lib/types/layout.types.d.ts +4 -4
  5. package/core/lib/utils/object-util.d.ts +1 -0
  6. package/fesm2022/acorex-platform-common.mjs +2 -1
  7. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  8. package/fesm2022/acorex-platform-core.mjs +64 -11
  9. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  10. package/fesm2022/acorex-platform-layout-builder.mjs +2 -1
  11. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  12. package/fesm2022/acorex-platform-layout-components.mjs +0 -1
  13. package/fesm2022/acorex-platform-layout-components.mjs.map +1 -1
  14. package/fesm2022/acorex-platform-layout-designer.mjs +2 -2
  15. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  16. package/fesm2022/acorex-platform-layout-entity.mjs +0 -2
  17. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  18. package/fesm2022/acorex-platform-layout-views.mjs +287 -0
  19. package/fesm2022/acorex-platform-layout-views.mjs.map +1 -0
  20. package/fesm2022/acorex-platform-themes-default-details-view.component-CAa99Vts.mjs +107 -0
  21. package/fesm2022/acorex-platform-themes-default-details-view.component-CAa99Vts.mjs.map +1 -0
  22. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs → acorex-platform-themes-default-entity-master-list-view.component-BgE6rxsd.mjs} +5 -6
  23. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BgE6rxsd.mjs.map +1 -0
  24. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BBJ7Aapd.mjs → acorex-platform-themes-default-entity-master-single-view.component-CnrccLHY.mjs} +9 -9
  25. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BBJ7Aapd.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-CnrccLHY.mjs.map} +1 -1
  26. package/fesm2022/acorex-platform-themes-default.mjs +45 -298
  27. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  28. package/fesm2022/acorex-platform-widgets.mjs +543 -63
  29. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  30. package/layout/builder/lib/builder/index.d.ts +0 -1
  31. package/layout/builder/lib/builder/widget-map.d.ts +1 -0
  32. package/layout/builder/lib/builder/widget.types.d.ts +1 -0
  33. package/layout/{setting → views}/README.md +1 -1
  34. package/layout/views/index.d.ts +2 -0
  35. package/layout/views/lib/details-view/details-view-route.resolver.d.ts +3 -0
  36. package/layout/views/lib/details-view/details-view.adapter.d.ts +13 -0
  37. package/layout/views/lib/details-view/details-view.viewmodel.d.ts +30 -0
  38. package/layout/views/lib/details-view/index.d.ts +3 -0
  39. package/layout/views/lib/details-view/sample.d.ts +2 -0
  40. package/layout/views/lib/shared/index.d.ts +1 -0
  41. package/layout/views/lib/shared/layout.types.d.ts +7 -0
  42. package/package.json +4 -8
  43. package/themes/default/index.d.ts +0 -1
  44. package/themes/default/lib/layouts/base/base-page.component.d.ts +1 -4
  45. package/themes/default/lib/layouts/base/index.d.ts +0 -1
  46. package/themes/default/lib/layouts/base/page-layout/page-layout.component.d.ts +1 -0
  47. package/themes/default/lib/layouts/details-view/details-view.component.d.ts +45 -0
  48. package/widgets/lib/properties/layout.props.d.ts +1 -0
  49. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-designer.component.d.ts +1 -0
  50. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.d.ts +1 -0
  51. package/widgets/lib/widgets/editors/time-duration/index.d.ts +6 -0
  52. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-column.component.d.ts +6 -0
  53. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-edit.component.d.ts +12 -0
  54. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-filter.component.d.ts +6 -0
  55. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-print.component.d.ts +6 -0
  56. package/widgets/lib/widgets/editors/time-duration/time-duration-widget-view.component.d.ts +7 -0
  57. package/widgets/lib/widgets/editors/time-duration/time-duration-widget.config.d.ts +11 -0
  58. package/widgets/lib/widgets/filters/select-filter/select-filter-widget-edit.component.d.ts +4 -1
  59. package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +2 -2
  60. package/widgets/lib/widgets/layout/tabset/index.d.ts +3 -0
  61. package/widgets/lib/widgets/layout/tabset/tabset-widget-designer.component.d.ts +6 -0
  62. package/widgets/lib/widgets/layout/tabset/tabset-widget-view.component.d.ts +19 -0
  63. package/widgets/lib/widgets/layout/tabset/tabset-widget.config.d.ts +2 -0
  64. package/widgets/lib/widgets/layout/tabset/tabset-widget.types.d.ts +2 -0
  65. package/widgets/lib/widgets/layout/tabset-item/index.d.ts +3 -0
  66. package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget-designer.component.d.ts +6 -0
  67. package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget-view.component.d.ts +10 -0
  68. package/widgets/lib/widgets/layout/tabset-item/tabset-item-widget.config.d.ts +2 -0
  69. package/widgets/lib/widgets/property-editors/flex-options/flex-options-widget-editor.component.d.ts +3 -3
  70. package/widgets/lib/widgets/property-editors/flex-options/flex-options-widget.type.d.ts +2 -2
  71. package/fesm2022/acorex-platform-layout-search.mjs +0 -279
  72. package/fesm2022/acorex-platform-layout-search.mjs.map +0 -1
  73. package/fesm2022/acorex-platform-layout-setting.mjs +0 -406
  74. package/fesm2022/acorex-platform-layout-setting.mjs.map +0 -1
  75. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-Ol8haGqF.mjs.map +0 -1
  76. package/fesm2022/acorex-platform-themes-default-search-popup.component-ChJiJ12h.mjs +0 -128
  77. package/fesm2022/acorex-platform-themes-default-search-popup.component-ChJiJ12h.mjs.map +0 -1
  78. package/fesm2022/acorex-platform-themes-default-setting-page.component-BxGzaKws.mjs +0 -219
  79. package/fesm2022/acorex-platform-themes-default-setting-page.component-BxGzaKws.mjs.map +0 -1
  80. package/fesm2022/acorex-platform-themes-default-setting-view.component-CjmlI9Jb.mjs +0 -103
  81. package/fesm2022/acorex-platform-themes-default-setting-view.component-CjmlI9Jb.mjs.map +0 -1
  82. package/layout/builder/lib/builder/view.types.d.ts +0 -94
  83. package/layout/search/README.md +0 -3
  84. package/layout/search/index.d.ts +0 -1
  85. package/layout/search/lib/index.d.ts +0 -3
  86. package/layout/search/lib/search-slot.component.d.ts +0 -9
  87. package/layout/search/lib/search.config.d.ts +0 -5
  88. package/layout/search/lib/search.module.d.ts +0 -11
  89. package/layout/search/lib/search.viewmodel.d.ts +0 -34
  90. package/layout/search/lib/workflows/search.workflow.d.ts +0 -11
  91. package/layout/setting/index.d.ts +0 -2
  92. package/layout/setting/lib/convert-setting-data.d.ts +0 -2
  93. package/layout/setting/lib/search-definition.provider.d.ts +0 -4
  94. package/layout/setting/lib/search.provider.d.ts +0 -9
  95. package/layout/setting/lib/setting.viewmodel.d.ts +0 -46
  96. package/layout/setting/lib/settings.module.d.ts +0 -9
  97. package/themes/default/lib/layouts/base/simple-page/index.d.ts +0 -1
  98. package/themes/default/lib/layouts/base/simple-page/simple-page.layout.d.ts +0 -78
  99. package/themes/default/lib/layouts/search-layout/search-popup.component.d.ts +0 -22
  100. package/themes/default/lib/layouts/setting-layout/setting-page/setting-page.component.d.ts +0 -65
  101. package/themes/default/lib/layouts/setting-layout/setting-view/setting-view.component.d.ts +0 -135
  102. package/themes/default/lib/layouts/view-layouts/index.d.ts +0 -1
  103. package/themes/default/lib/layouts/view-layouts/layout-detail-view/layout-detail-view.component.d.ts +0 -19
@@ -1,279 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { InjectionToken, inject, HostListener, Component, Injectable, NgModule, signal, computed } from '@angular/core';
3
- import * as i2$1 from '@acorex/platform/common';
4
- import { AXPComponentSlotModule, AXPSearchService, AXPSettingService } from '@acorex/platform/common';
5
- import * as i3$1 from '@acorex/platform/workflow';
6
- import { AXPWorkflowService, AXPWorkflowAction, AXPWorkflowModule } from '@acorex/platform/workflow';
7
- import * as i2 from '@acorex/components/button';
8
- import { AXButtonModule } from '@acorex/components/button';
9
- import * as i3 from '@acorex/components/decorators';
10
- import { AXDecoratorModule } from '@acorex/components/decorators';
11
- import * as i1 from '@angular/common';
12
- import { CommonModule } from '@angular/common';
13
- import * as i4 from '@acorex/core/translation';
14
- import { AXTranslationModule } from '@acorex/core/translation';
15
- import { AXTextBoxModule } from '@acorex/components/text-box';
16
- import { AXPopupService } from '@acorex/components/popup';
17
- import * as i1$1 from '@acorex/platform/core';
18
- import { AXPPlatformScope } from '@acorex/platform/core';
19
- import { Subject } from 'rxjs';
20
-
21
- const AXP_GLOBAL_SEARCH_CONFIG_TOKEN = new InjectionToken('AXP_GLOBAL_SEARCH_CONFIG_TOKEN');
22
-
23
- class AXPGlobalSearchSlotComponent {
24
- constructor() {
25
- this.workflow = inject(AXPWorkflowService);
26
- }
27
- async startSearch() {
28
- await this.workflow.execute('global-search');
29
- }
30
- async handleKeyboardEvent(event) {
31
- if (event.ctrlKey) {
32
- switch (event.code) {
33
- case 'KeyK':
34
- event.preventDefault();
35
- event.stopPropagation();
36
- await this.startSearch();
37
- break;
38
- }
39
- }
40
- }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPGlobalSearchSlotComponent, isStandalone: true, selector: "ng-component", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: `
43
- <ax-button color="primary" class="ax-flex md:ax-hidden" (onClick)="startSearch()">
44
- <ax-icon class="fa-regular fa-search">
45
- </ax-icon>
46
- </ax-button>
47
- <div class="ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text" (click)="startSearch()" *translate="let t">
48
- <div class="ax-flex ax-items-center ax-gap-2">
49
- <i class="fa-light fa-search ax-text-xl"></i>
50
- <span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>
51
- </div>
52
- <kbd class="ax-text-sm">Ctrl+K</kbd>
53
- </div>
54
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i3.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "directive", type: i4.AXTranslatorDirective, selector: "[translate]" }, { kind: "ngmodule", type: AXTextBoxModule }] }); }
55
- }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchSlotComponent, decorators: [{
57
- type: Component,
58
- args: [{
59
- template: `
60
- <ax-button color="primary" class="ax-flex md:ax-hidden" (onClick)="startSearch()">
61
- <ax-icon class="fa-regular fa-search">
62
- </ax-icon>
63
- </ax-button>
64
- <div class="ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text" (click)="startSearch()" *translate="let t">
65
- <div class="ax-flex ax-items-center ax-gap-2">
66
- <i class="fa-light fa-search ax-text-xl"></i>
67
- <span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>
68
- </div>
69
- <kbd class="ax-text-sm">Ctrl+K</kbd>
70
- </div>
71
- `,
72
- imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXTextBoxModule]
73
- }]
74
- }], propDecorators: { handleKeyboardEvent: [{
75
- type: HostListener,
76
- args: ['document:keydown', ['$event']]
77
- }] } });
78
-
79
- class AXPGlobalSearchStartAction extends AXPWorkflowAction {
80
- constructor() {
81
- super(...arguments);
82
- this.popupService = inject(AXPopupService);
83
- this.workflow = inject(AXPWorkflowService);
84
- this.config = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);
85
- }
86
- async execute(context) {
87
- const component = await this.config.window();
88
- const popup = await this.popupService.open(component, {
89
- title: 'Search...',
90
- size: 'fit',
91
- closeOnBackdropClick: true,
92
- data: {
93
- text: context.getVariable('text'),
94
- },
95
- header: false,
96
- });
97
- if (popup.data) {
98
- const result = popup.data;
99
- if (result && result.command) {
100
- this.workflow.execute(result.command?.name, result.command?.options);
101
- }
102
- }
103
- }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
105
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction }); }
106
- }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchStartAction, decorators: [{
108
- type: Injectable
109
- }] });
110
- const AXPGlobalSearchWorkflow = {
111
- startStepId: 'start',
112
- steps: {
113
- start: {
114
- action: 'AXPGlobalSearchStartAction',
115
- },
116
- },
117
- };
118
-
119
- class AXPGlobalSearchModule {
120
- constructor(appInitService, injector) {
121
- }
122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, deps: [{ token: i1$1.AXPAppStartUpService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
123
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, imports: [i2$1.AXPComponentSlotModule, i3$1.AXPWorkflowModule] }); }
124
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, imports: [AXPComponentSlotModule.forChild({
125
- 'header-start': [
126
- {
127
- priority: 0,
128
- name: 'search',
129
- component: AXPGlobalSearchSlotComponent,
130
- },
131
- ],
132
- }),
133
- //
134
- AXPWorkflowModule.forChild({
135
- actions: {
136
- AXPGlobalSearchStartAction
137
- },
138
- workflows: {
139
- 'global-search': AXPGlobalSearchWorkflow,
140
- },
141
- })] }); }
142
- }
143
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalSearchModule, decorators: [{
144
- type: NgModule,
145
- args: [{
146
- imports: [
147
- AXPComponentSlotModule.forChild({
148
- 'header-start': [
149
- {
150
- priority: 0,
151
- name: 'search',
152
- component: AXPGlobalSearchSlotComponent,
153
- },
154
- ],
155
- }),
156
- //
157
- AXPWorkflowModule.forChild({
158
- actions: {
159
- AXPGlobalSearchStartAction
160
- },
161
- workflows: {
162
- 'global-search': AXPGlobalSearchWorkflow,
163
- },
164
- })
165
- ],
166
- exports: [],
167
- declarations: [],
168
- providers: []
169
- }]
170
- }], ctorParameters: () => [{ type: i1$1.AXPAppStartUpService }, { type: i0.Injector }] });
171
-
172
- class AXPGlobalSearchViewModel {
173
- constructor() {
174
- this.settingKeys = {
175
- recent: "global-search:recents:items",
176
- pinned: "global-search:pinned:items"
177
- };
178
- this.searchService = inject(AXPSearchService);
179
- this.settingService = inject(AXPSettingService);
180
- this._text = signal(null);
181
- this.text = this._text.asReadonly();
182
- this._results = signal([]);
183
- this.results = this._results.asReadonly();
184
- this._isBusy = signal(false);
185
- this.isBusy = this._isBusy.asReadonly();
186
- this.isEmpty = computed(() => this.text() && this.results().length == 0);
187
- this.isValid = computed(() => (this.text()?.length ?? 0) > 2);
188
- this.isStart = computed(() => !this.isEmpty() && this.results().length == 0);
189
- this.isWelcome = computed(() => this.isStart() && this.pinnedItems().length == 0 && this.recentItems().length == 0);
190
- this._recentItems = signal([]);
191
- this._pinnedItems = signal([]);
192
- this.pinnedItems = this._pinnedItems.asReadonly();
193
- this.recentItems = computed(() => this.getTopRecentItems());
194
- this.onItemSelected = new Subject();
195
- this.loadSettings();
196
- }
197
- async search(text) {
198
- this._isBusy.set(true);
199
- this._text.set(text);
200
- if (!this.isValid()) {
201
- this._results.set([]);
202
- }
203
- else {
204
- await new Promise((resolve) => setTimeout(resolve, 250));
205
- const results = await this.searchService.search(text);
206
- this._results.set(results);
207
- }
208
- this._isBusy.set(false);
209
- }
210
- async execute(item) {
211
- this.onItemSelected.next(item);
212
- await this.updateSelectionHistory(item);
213
- }
214
- async pin(item) {
215
- const currentPinned = this._pinnedItems();
216
- if (!currentPinned.some(i => i.id === item.id)) {
217
- this._pinnedItems.set([item, ...currentPinned].slice(0, 5));
218
- await this.saveSettings();
219
- }
220
- }
221
- async unpin(item) {
222
- const currentPinned = this._pinnedItems();
223
- this._pinnedItems.set(currentPinned.filter(i => i.id !== item.id));
224
- await this.saveSettings();
225
- }
226
- async togglePin(item) {
227
- if (this.isPinned(item)) {
228
- await this.unpin(item);
229
- }
230
- else {
231
- await this.pin(item);
232
- }
233
- }
234
- isPinned(item) {
235
- const currentPinned = this._pinnedItems();
236
- return currentPinned.some(i => i.id === item.id);
237
- }
238
- async updateSelectionHistory(item) {
239
- // Update recent selections
240
- const currentHistory = this._recentItems();
241
- const updatedHistory = [item, ...currentHistory.filter(i => i.id !== item.id)].slice(0, 5);
242
- this._recentItems.set(updatedHistory);
243
- // Save updated settings
244
- await this.saveSettings();
245
- }
246
- getTopRecentItems() {
247
- const pinnedIds = new Set(this._pinnedItems().map(item => item.id));
248
- return this._recentItems().filter(item => !pinnedIds.has(item.id)).slice(0, 5);
249
- }
250
- async clearRecentItems() {
251
- this._recentItems.set([]);
252
- await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, []);
253
- }
254
- async loadSettings() {
255
- // Load recent selections
256
- const recent = await this.settingService.get(this.settingKeys.recent);
257
- if (recent) {
258
- this._recentItems.set(recent.slice(0, 5));
259
- }
260
- // Load pinned items
261
- const pinned = await this.settingService.get(this.settingKeys.pinned);
262
- if (pinned) {
263
- this._pinnedItems.set(pinned.slice(0, 5));
264
- }
265
- }
266
- async saveSettings() {
267
- // Save recent selections
268
- await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, this._recentItems().slice(0, 5));
269
- // Save pinned items
270
- await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.pinned, this._pinnedItems().slice(0, 5));
271
- }
272
- }
273
-
274
- /**
275
- * Generated bundle index. Do not edit.
276
- */
277
-
278
- export { AXPGlobalSearchModule, AXPGlobalSearchViewModel, AXP_GLOBAL_SEARCH_CONFIG_TOKEN };
279
- //# sourceMappingURL=acorex-platform-layout-search.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acorex-platform-layout-search.mjs","sources":["../../../../libs/platform/layout/search/src/lib/search.config.ts","../../../../libs/platform/layout/search/src/lib/search-slot.component.ts","../../../../libs/platform/layout/search/src/lib/workflows/search.workflow.ts","../../../../libs/platform/layout/search/src/lib/search.module.ts","../../../../libs/platform/layout/search/src/lib/search.viewmodel.ts","../../../../libs/platform/layout/search/src/acorex-platform-layout-search.ts"],"sourcesContent":["import { InjectionToken, Type } from \"@angular/core\";\n\nexport interface AXPGlobalSearchConfigs {\n window: () => Type<any>;\n}\n\nexport const AXP_GLOBAL_SEARCH_CONFIG_TOKEN = new InjectionToken<AXPGlobalSearchConfigs>('AXP_GLOBAL_SEARCH_CONFIG_TOKEN');","import { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { CommonModule } from '@angular/common';\nimport { Component, HostListener, inject } from '@angular/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWorkflowService } from '@acorex/platform/workflow';\nimport { AXTextBoxModule } from '@acorex/components/text-box';\n\n@Component({\n template: `\n <ax-button color=\"primary\" class=\"ax-flex md:ax-hidden\" (onClick)=\"startSearch()\">\n <ax-icon class=\"fa-regular fa-search\">\n </ax-icon>\n </ax-button>\n <div class=\"ax-bg-primary-200/15 ax-h-10 ax-w-72 ax-rounded-default ax-cursor-pointer ax-justify-between ax-hidden md:ax-flex ax-items-center ax-px-3 hover:ax-bg-primary-200/30 ax-text-primary-text\" (click)=\"startSearch()\" *translate=\"let t\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <i class=\"fa-light fa-search ax-text-xl\"></i>\n <span>{{ t('search-placeholder',{scope:'global-search'}) | async}}</span>\n </div>\n <kbd class=\"ax-text-sm\">Ctrl+K</kbd>\n </div>\n `,\n imports: [CommonModule, AXButtonModule, AXDecoratorModule, AXTranslationModule, AXTextBoxModule]\n})\nexport class AXPGlobalSearchSlotComponent {\n\n protected workflow = inject(AXPWorkflowService);\n\n protected async startSearch() {\n await this.workflow.execute('global-search')\n }\n\n @HostListener('document:keydown', ['$event'])\n private async handleKeyboardEvent(event: KeyboardEvent) {\n if (event.ctrlKey) {\n switch (event.code) {\n case 'KeyK':\n event.preventDefault();\n event.stopPropagation();\n await this.startSearch();\n break;\n }\n }\n\n }\n}\n","import { AXPopupService } from '@acorex/components/popup';\nimport { AXPWorkflow, AXPWorkflowAction, AXPWorkflowContext, AXPWorkflowService } from '@acorex/platform/workflow';\nimport { inject, Injectable } from '@angular/core';\nimport { AXP_GLOBAL_SEARCH_CONFIG_TOKEN } from '../search.config';\nimport { AXPSearchDisplayResult } from '@acorex/platform/common';\n\n@Injectable()\nexport class AXPGlobalSearchStartAction extends AXPWorkflowAction {\n private popupService = inject(AXPopupService);\n private workflow = inject(AXPWorkflowService);\n private config = inject(AXP_GLOBAL_SEARCH_CONFIG_TOKEN);\n\n override async execute(context: AXPWorkflowContext): Promise<void> {\n const component = await this.config.window();\n const popup = await this.popupService.open(component, {\n title: 'Search...',\n size: 'fit',\n closeOnBackdropClick: true,\n data: {\n text: context.getVariable('text'),\n },\n header: false,\n });\n if (popup.data) {\n const result = popup.data as AXPSearchDisplayResult;\n if (result && result.command) {\n this.workflow.execute(result.command?.name, result.command?.options);\n }\n }\n }\n}\n\nexport const AXPGlobalSearchWorkflow: AXPWorkflow = {\n startStepId: 'start',\n steps: {\n start: {\n action: 'AXPGlobalSearchStartAction',\n },\n },\n};\n","import { AXPComponentSlotModule } from '@acorex/platform/common';\nimport { Injector, NgModule } from '@angular/core';\nimport { AXPWorkflowModule } from '@acorex/platform/workflow';\nimport { AXPGlobalSearchSlotComponent } from './search-slot.component';\nimport { AXPGlobalSearchStartAction, AXPGlobalSearchWorkflow } from './workflows/search.workflow';\nimport { AXPAppStartUpService } from '@acorex/platform/core';\n\n@NgModule({\n imports: [\n AXPComponentSlotModule.forChild({\n 'header-start': [\n {\n priority: 0,\n name: 'search',\n component: AXPGlobalSearchSlotComponent,\n },\n ],\n }),\n //\n AXPWorkflowModule.forChild({\n actions: {\n AXPGlobalSearchStartAction\n },\n workflows: {\n 'global-search': AXPGlobalSearchWorkflow,\n },\n })\n ],\n exports: [],\n declarations: [],\n providers: []\n})\nexport class AXPGlobalSearchModule {\n constructor(\n appInitService: AXPAppStartUpService,\n injector: Injector\n ) {\n\n }\n}\n","import { AXPSearchDisplayGroupResult, AXPSearchDisplayResult, AXPSearchService, AXPSettingService } from \"@acorex/platform/common\";\nimport { AXPPlatformScope } from \"@acorex/platform/core\";\nimport { computed, inject, signal } from \"@angular/core\";\nimport { Subject } from \"rxjs\";\n\nexport class AXPGlobalSearchViewModel {\n\n private settingKeys = {\n recent: \"global-search:recents:items\",\n pinned: \"global-search:pinned:items\"\n }\n\n private searchService = inject(AXPSearchService);\n private settingService = inject(AXPSettingService);\n\n private _text = signal<string | null>(null);\n public text = this._text.asReadonly();\n\n private _results = signal<AXPSearchDisplayGroupResult[]>([]);\n public results = this._results.asReadonly();\n\n private _isBusy = signal(false);\n public isBusy = this._isBusy.asReadonly();\n\n public isEmpty = computed(() => this.text() && this.results().length == 0);\n\n public isValid = computed(() => (this.text()?.length ?? 0) > 2);\n\n public isStart = computed(() => !this.isEmpty() && this.results().length == 0);\n\n public isWelcome = computed(() => this.isStart() && this.pinnedItems().length == 0 && this.recentItems().length == 0);\n\n private _recentItems = signal<AXPSearchDisplayResult[]>([]);\n private _pinnedItems = signal<AXPSearchDisplayResult[]>([]);\n public pinnedItems = this._pinnedItems.asReadonly();\n public recentItems = computed(() => this.getTopRecentItems());\n\n public readonly onItemSelected = new Subject<AXPSearchDisplayResult>();\n\n constructor() {\n this.loadSettings();\n }\n\n public async search(text: string): Promise<void> {\n this._isBusy.set(true);\n this._text.set(text);\n\n if (!this.isValid()) {\n this._results.set([]);\n } else {\n await new Promise((resolve) => setTimeout(resolve, 250));\n\n const results = await this.searchService.search(text);\n this._results.set(results);\n }\n\n this._isBusy.set(false);\n }\n\n public async execute(item: AXPSearchDisplayResult): Promise<void> {\n this.onItemSelected.next(item);\n await this.updateSelectionHistory(item);\n }\n\n public async pin(item: AXPSearchDisplayResult): Promise<void> {\n const currentPinned = this._pinnedItems();\n if (!currentPinned.some(i => i.id === item.id)) {\n this._pinnedItems.set([item, ...currentPinned].slice(0, 5));\n await this.saveSettings();\n }\n }\n\n public async unpin(item: AXPSearchDisplayResult): Promise<void> {\n const currentPinned = this._pinnedItems();\n this._pinnedItems.set(currentPinned.filter(i => i.id !== item.id));\n await this.saveSettings();\n }\n\n public async togglePin(item: AXPSearchDisplayResult): Promise<void> {\n if (this.isPinned(item)) {\n await this.unpin(item);\n } else {\n await this.pin(item);\n }\n }\n\n public isPinned(item: AXPSearchDisplayResult): boolean {\n const currentPinned = this._pinnedItems();\n return currentPinned.some(i => i.id === item.id);\n }\n\n private async updateSelectionHistory(item: AXPSearchDisplayResult): Promise<void> {\n // Update recent selections\n const currentHistory = this._recentItems();\n const updatedHistory = [item, ...currentHistory.filter(i => i.id !== item.id)].slice(0, 5);\n this._recentItems.set(updatedHistory);\n\n // Save updated settings\n await this.saveSettings();\n }\n\n private getTopRecentItems(): AXPSearchDisplayResult[] {\n const pinnedIds = new Set(this._pinnedItems().map(item => item.id));\n return this._recentItems().filter(item => !pinnedIds.has(item.id)).slice(0, 5);\n }\n\n public async clearRecentItems() {\n this._recentItems.set([]);\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, []);\n }\n\n private async loadSettings(): Promise<void> {\n // Load recent selections\n const recent = await this.settingService.get<AXPSearchDisplayResult[]>(this.settingKeys.recent);\n if (recent) {\n this._recentItems.set(recent.slice(0, 5));\n }\n\n // Load pinned items\n const pinned = await this.settingService.get<AXPSearchDisplayResult[]>(this.settingKeys.pinned);\n if (pinned) {\n this._pinnedItems.set(pinned.slice(0, 5));\n }\n }\n\n private async saveSettings(): Promise<void> {\n // Save recent selections\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.recent, this._recentItems().slice(0, 5));\n\n // Save pinned items\n await this.settingService.scope(AXPPlatformScope.User).set(this.settingKeys.pinned, this._pinnedItems().slice(0, 5));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3"],"mappings":"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"}