@acorex/platform 19.2.12 → 19.2.16

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 (130) hide show
  1. package/auth/lib/session.service.d.ts +1 -1
  2. package/common/index.d.ts +0 -1
  3. package/common/lib/app/application.types.d.ts +2 -2
  4. package/common/lib/common.module.d.ts +1 -2
  5. package/common/lib/data/index.d.ts +0 -4
  6. package/common/lib/file-type/file-type.provider.d.ts +3 -3
  7. package/common/lib/file-type/file-type.types.d.ts +12 -0
  8. package/common/lib/layout/menu/menu.types.d.ts +3 -2
  9. package/common/lib/layout/theme/components/slots/navbar-slot.component.d.ts +2 -4
  10. package/common/lib/search/search.types.d.ts +3 -5
  11. package/common/lib/settings/settings.service.d.ts +1 -1
  12. package/common/lib/utils/index.d.ts +0 -1
  13. package/common/lib/utils/regional-util.service.d.ts +2 -2
  14. package/core/index.d.ts +1 -5
  15. package/core/lib/data/data-generator.d.ts +26 -0
  16. package/core/lib/data/index.d.ts +1 -0
  17. package/core/lib/directives/element-data.directive.d.ts +20 -0
  18. package/core/lib/directives/index.d.ts +1 -0
  19. package/core/lib/event-service/event.service.d.ts +43 -0
  20. package/core/lib/event-service/index.d.ts +1 -0
  21. package/{common/lib/utils → core/lib/expression-evaluator}/expression-evaluator.service.d.ts +1 -1
  22. package/core/lib/expression-evaluator/index.d.ts +1 -0
  23. package/core/lib/index.d.ts +6 -0
  24. package/core/lib/types.d.ts +17 -0
  25. package/core/lib/utils/data-conditioner.d.ts +5 -0
  26. package/core/lib/utils/index.d.ts +4 -0
  27. package/fesm2022/acorex-platform-auth.mjs +4 -5
  28. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  29. package/fesm2022/acorex-platform-common.mjs +606 -869
  30. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  31. package/fesm2022/acorex-platform-core.mjs +364 -12
  32. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  33. package/fesm2022/acorex-platform-layout-builder.mjs +15 -3
  34. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  35. package/fesm2022/acorex-platform-layout-designer.mjs +99 -52
  36. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  37. package/fesm2022/acorex-platform-layout-entity.mjs +673 -34
  38. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  39. package/fesm2022/acorex-platform-layout-search.mjs +4 -3
  40. package/fesm2022/acorex-platform-layout-search.mjs.map +1 -1
  41. package/fesm2022/acorex-platform-layout-setting.mjs +4 -3
  42. package/fesm2022/acorex-platform-layout-setting.mjs.map +1 -1
  43. package/fesm2022/{acorex-platform-themes-default-entity-master-list-view.component-DrHsaotw.mjs → acorex-platform-themes-default-entity-master-list-view.component-ewOei4ta.mjs} +11 -3
  44. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-ewOei4ta.mjs.map +1 -0
  45. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BGUrwL2P.mjs → acorex-platform-themes-default-entity-master-single-view.component-DcSk0ia4.mjs} +2 -2
  46. package/fesm2022/{acorex-platform-themes-default-entity-master-single-view.component-BGUrwL2P.mjs.map → acorex-platform-themes-default-entity-master-single-view.component-DcSk0ia4.mjs.map} +1 -1
  47. package/fesm2022/{acorex-platform-themes-default-search-popup.component-Ccouaqp4.mjs → acorex-platform-themes-default-search-popup.component-DfeNmpS9.mjs} +4 -4
  48. package/fesm2022/{acorex-platform-themes-default-search-popup.component-Ccouaqp4.mjs.map → acorex-platform-themes-default-search-popup.component-DfeNmpS9.mjs.map} +1 -1
  49. package/fesm2022/{acorex-platform-themes-default-setting-page.component-CJoBVXTl.mjs → acorex-platform-themes-default-setting-page.component-DtJmPSFo.mjs} +5 -4
  50. package/fesm2022/acorex-platform-themes-default-setting-page.component-DtJmPSFo.mjs.map +1 -0
  51. package/fesm2022/{acorex-platform-themes-default-setting-view.component-CsCug3Vu.mjs → acorex-platform-themes-default-setting-view.component-fuHM7W6Y.mjs} +2 -2
  52. package/fesm2022/{acorex-platform-themes-default-setting-view.component-CsCug3Vu.mjs.map → acorex-platform-themes-default-setting-view.component-fuHM7W6Y.mjs.map} +1 -1
  53. package/fesm2022/{acorex-platform-themes-default-theme-palette-preview.page-D-yzbISw.mjs → acorex-platform-themes-default-theme-palette-preview.page-DkjAgWLn.mjs} +2 -2
  54. package/fesm2022/{acorex-platform-themes-default-theme-palette-preview.page-D-yzbISw.mjs.map → acorex-platform-themes-default-theme-palette-preview.page-DkjAgWLn.mjs.map} +1 -1
  55. package/fesm2022/acorex-platform-themes-default.mjs +36 -24
  56. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  57. package/fesm2022/acorex-platform-themes-shared.mjs +27 -4
  58. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  59. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-Ba_DdBAl.mjs → acorex-platform-widgets-tabular-data-edit-popup.component-Emh145xN.mjs} +3 -3
  60. package/fesm2022/{acorex-platform-widgets-tabular-data-edit-popup.component-Ba_DdBAl.mjs.map → acorex-platform-widgets-tabular-data-edit-popup.component-Emh145xN.mjs.map} +1 -1
  61. package/fesm2022/acorex-platform-widgets.mjs +1202 -157
  62. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  63. package/fesm2022/acorex-platform-workflow.mjs +17 -8
  64. package/fesm2022/acorex-platform-workflow.mjs.map +1 -1
  65. package/layout/builder/lib/builder/datasource-provider.service.d.ts +2 -2
  66. package/layout/builder/lib/builder/metadata/metadata.types.d.ts +2 -1
  67. package/layout/builder/lib/builder/widget-map.d.ts +6 -0
  68. package/layout/builder/lib/builder/widget.types.d.ts +1 -1
  69. package/layout/designer/lib/designer/designer.component.d.ts +2 -1
  70. package/layout/designer/lib/designer/shared/designer.service.d.ts +8 -4
  71. package/layout/designer/lib/designer/shared/designer.types.d.ts +24 -0
  72. package/layout/designer/lib/preview/preview-viewer.component.d.ts +5 -1
  73. package/layout/designer/lib/preview/preview.component.d.ts +2 -1
  74. package/layout/entity/lib/entity-master-create.viewmodel.d.ts +1 -0
  75. package/{common/lib/data → layout/entity/lib}/entity-storage-service.d.ts +1 -0
  76. package/layout/entity/lib/index.d.ts +4 -0
  77. package/layout/entity/lib/widgets/tagable-box/index.d.ts +6 -0
  78. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget-column.component.d.ts +11 -0
  79. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget-edit.component.d.ts +19 -0
  80. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget-filter.component.d.ts +6 -0
  81. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget-print.component.d.ts +11 -0
  82. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget-view.component.d.ts +11 -0
  83. package/layout/entity/lib/widgets/tagable-box/tagable-box-widget.config.d.ts +7 -0
  84. package/package.json +1 -1
  85. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +2 -0
  86. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +5 -0
  87. package/themes/shared/lib/components/layout-elements/index.d.ts +1 -0
  88. package/themes/shared/lib/components/layout-elements/layout-blocks.component.d.ts +1 -1
  89. package/themes/shared/lib/components/layout-elements/layout-tool-bar.component.d.ts +5 -0
  90. package/widgets/lib/widgets/advance/file/file-box-widget-edit.component.d.ts +2 -1
  91. package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +4 -2
  92. package/widgets/lib/widgets/charts/sticky-note/sticky-note-widget-edit.component.d.ts +8 -0
  93. package/widgets/lib/widgets/editors/meta-data/index.d.ts +6 -0
  94. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-column.component.d.ts +6 -0
  95. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-edit.component.d.ts +13 -0
  96. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-filter.component.d.ts +6 -0
  97. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-print.component.d.ts +6 -0
  98. package/widgets/lib/widgets/editors/meta-data/meta-data-widget-view.component.d.ts +8 -0
  99. package/widgets/lib/widgets/editors/meta-data/meta-data-widget.config.d.ts +7 -0
  100. package/widgets/lib/widgets/editors/number-unit/index.d.ts +6 -0
  101. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-column.component.d.ts +9 -0
  102. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-edit.component.d.ts +24 -0
  103. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-filter.component.d.ts +6 -0
  104. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-print.component.d.ts +6 -0
  105. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget-view.component.d.ts +12 -0
  106. package/widgets/lib/widgets/editors/number-unit/number-unit-box-widget.config.d.ts +7 -0
  107. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +1 -0
  108. package/widgets/lib/widgets/editors/single-file-box/index.d.ts +6 -0
  109. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-column.component.d.ts +6 -0
  110. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-edit.component.d.ts +19 -0
  111. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-filter.component.d.ts +6 -0
  112. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-print.component.d.ts +6 -0
  113. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget-view.component.d.ts +8 -0
  114. package/widgets/lib/widgets/editors/single-file-box/single-file-box-widget.config.d.ts +7 -0
  115. package/widgets/lib/widgets/index.d.ts +1 -0
  116. package/widgets/lib/widgets/layout/advanced-grid/advanced-grid-widget-view.component.d.ts +1 -3
  117. package/workflow/lib/actions/decide.action.d.ts +7 -0
  118. package/workflow/lib/workflow.service.d.ts +0 -1
  119. package/common/lib/store/common.actions.d.ts +0 -2
  120. package/common/lib/store/index.d.ts +0 -1
  121. package/core/utils/data-conditioner.d.ts +0 -3
  122. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-DrHsaotw.mjs.map +0 -1
  123. package/fesm2022/acorex-platform-themes-default-setting-page.component-CJoBVXTl.mjs.map +0 -1
  124. package/widgets/lib/widgets/layout/advanced-grid/advanced-grid-widget-types.component.d.ts +0 -10
  125. /package/core/{utils → lib/utils}/countdown-timer.d.ts +0 -0
  126. /package/core/{utils → lib/utils}/highlighter.d.ts +0 -0
  127. /package/core/{utils → lib/utils}/html-utils.d.ts +0 -0
  128. /package/{common/lib/data → layout/entity/lib}/data.types.d.ts +0 -0
  129. /package/{common/lib/data → layout/entity/lib}/dexie-storage.service.d.ts +0 -0
  130. /package/{common/lib/data → layout/entity/lib}/entity-data-seeder.d.ts +0 -0
@@ -1,39 +1,37 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, provideAppInitializer, inject, InjectionToken, signal, model, linkedSignal, afterNextRender, Component, Injector, ErrorHandler, Directive, Input, EventEmitter, Output, runInInjectionContext, NgModule, Optional, Inject, ViewEncapsulation } from '@angular/core';
2
+ import { Injectable, provideAppInitializer, inject, InjectionToken, Injector, ErrorHandler, Directive, Input, EventEmitter, Output, runInInjectionContext, NgModule, Optional, Inject, Component, ViewEncapsulation, signal, model, linkedSignal, afterNextRender } from '@angular/core';
3
3
  import { kebabCase, sortBy, omit, merge, cloneDeep, get } from 'lodash-es';
4
- import { AXPopupService, AXPopupModule } from '@acorex/components/popup';
4
+ import { AXPopupModule, AXPopupService } from '@acorex/components/popup';
5
5
  import { AXToastService, AXToastModule } from '@acorex/components/toast';
6
6
  import { AXDateTimeModule } from '@acorex/core/date-time';
7
- import * as i4$1 from '@acorex/platform/workflow';
7
+ import * as i3 from '@acorex/platform/workflow';
8
8
  import { AXPWorkflowService, createWorkFlowEvent, AXPWorkflowAction, AXPWorkflowError, AXPWorkflowModule } from '@acorex/platform/workflow';
9
9
  import { Router, RouterModule } from '@angular/router';
10
- import { applySortArray, applyFilterArray } from '@acorex/platform/core';
11
- import Dexie from 'dexie';
10
+ import * as i4 from '@acorex/components/decorators';
11
+ import { AXDecoratorModule } from '@acorex/components/decorators';
12
+ import * as i2 from '@acorex/components/image';
13
+ import { AXImageModule } from '@acorex/components/image';
14
+ import * as i1 from '@angular/common';
15
+ import { CommonModule } from '@angular/common';
16
+ import { signalStore, withState, withMethods, patchState, withHooks } from '@ngrx/signals';
17
+ import { AXTranslationService } from '@acorex/core/translation';
18
+ import { AXFormatService } from '@acorex/core/format';
19
+ import { Subject } from 'rxjs';
20
+ import { AXPBroadcastEventService } from '@acorex/platform/core';
21
+ import { AXDialogService } from '@acorex/components/dialog';
12
22
  import * as i5 from '@acorex/components/button';
13
23
  import { AXButtonModule } from '@acorex/components/button';
14
24
  import { AXCheckBoxModule } from '@acorex/components/check-box';
15
25
  import * as i6 from '@acorex/components/color-box';
16
26
  import { AXColorBoxModule } from '@acorex/components/color-box';
17
- import * as i4 from '@acorex/components/decorators';
18
- import { AXDecoratorModule } from '@acorex/components/decorators';
19
- import * as i3 from '@acorex/components/label';
27
+ import * as i3$1 from '@acorex/components/label';
20
28
  import { AXLabelModule } from '@acorex/components/label';
21
- import * as i2 from '@acorex/components/number-box';
29
+ import * as i2$1 from '@acorex/components/number-box';
22
30
  import { AXNumberBoxModule } from '@acorex/components/number-box';
23
31
  import { AXBasePageComponent } from '@acorex/components/page';
24
32
  import { AXTextBoxModule } from '@acorex/components/text-box';
25
- import * as i1 from '@angular/forms';
33
+ import * as i1$1 from '@angular/forms';
26
34
  import { FormsModule } from '@angular/forms';
27
- import * as i2$1 from '@acorex/components/image';
28
- import { AXImageModule } from '@acorex/components/image';
29
- import * as i1$1 from '@angular/common';
30
- import { CommonModule } from '@angular/common';
31
- import { signalStore, withState, withMethods, patchState, withHooks } from '@ngrx/signals';
32
- import { AXTranslationService } from '@acorex/core/translation';
33
- import { Store, createAction } from '@ngrx/store';
34
- import { AXFormatService } from '@acorex/core/format';
35
- import { Subject } from 'rxjs';
36
- import { AXDialogService } from '@acorex/components/dialog';
37
35
 
38
36
  class AXPAppStartUpService {
39
37
  constructor() {
@@ -243,788 +241,146 @@ const ALL_DEFAULT_OPERATORS = [
243
241
  class AXPDataProvider {
244
242
  }
245
243
 
246
- class AXPClipBoardService {
247
- constructor() {
248
- this.toast = inject(AXToastService);
249
- }
250
- copy(title, value) {
251
- const copyText = document.createElement('input');
252
- copyText.type = 'text';
253
- copyText.select();
254
- copyText.setSelectionRange(0, 99999); // For mobile devices
255
- copyText.remove();
256
- navigator.clipboard.writeText(value);
257
- this.toast.success(`${title} copied!`);
244
+ class AXPCustomOperatorService {
245
+ }
246
+ class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {
247
+ getCustomOperators() {
248
+ return {};
258
249
  }
259
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
260
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, providedIn: 'root' }); }
250
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
251
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl }); }
261
252
  }
262
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, decorators: [{
263
- type: Injectable,
264
- args: [{
265
- providedIn: 'root',
266
- }]
253
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl, decorators: [{
254
+ type: Injectable
267
255
  }] });
268
256
 
269
- class AXPDataGenerator {
270
- static uuid() {
271
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
272
- const random = (Math.random() * 16) | 0;
273
- const value = char === 'x' ? random : (random & 0x3) | 0x8;
274
- return value.toString(16);
275
- });
276
- }
277
- static number(...args) {
278
- let min = 0;
279
- let max = 100;
280
- if (args.length == 1)
281
- max = args[0];
282
- if (args.length == 2) {
283
- min = args[0];
284
- max = args[1];
285
- }
286
- return Math.floor(Math.random() * (max - min + 1)) + min;
287
- }
288
- static date(...args) {
289
- let start = new Date(2000, 0, 1);
290
- let end = new Date();
291
- if (args.length === 1) {
292
- start = args[0];
293
- }
294
- else if (args.length === 2) {
295
- start = args[0];
296
- end = args[1];
297
- }
298
- const startTime = start.getTime();
299
- const endTime = end.getTime();
300
- return new Date(startTime + Math.random() * (endTime - startTime));
257
+ class AXPFilterOperatorMiddlewareService {
258
+ }
259
+ class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {
260
+ constructor() {
261
+ super(...arguments);
262
+ this.customOperatorService = inject(AXPCustomOperatorService);
263
+ this.operators = {
264
+ ...this.getDefaultOperators(),
265
+ ...this.customOperatorService.getCustomOperators(),
266
+ };
301
267
  }
302
- static array(length = 5, generator) {
303
- return Array.from({ length }, generator);
268
+ transformFilters(filters) {
269
+ return filters.map((filter) => this.transformFilter(filter));
304
270
  }
305
- static pick(...args) {
306
- if (args.length < 1) {
307
- throw new Error('Invalid parameters');
308
- }
309
- const items = args[0];
310
- const count = args[1] ?? 1;
311
- if (count < 1) {
312
- throw new Error('Count must be at least 1');
313
- }
314
- // If the count is greater than the number of items, just return a shuffled copy of the array
315
- if (count >= items.length) {
316
- return [...items].sort(() => Math.random() - 0.5);
317
- }
318
- // Shuffle the array and slice the first 'count' elements
319
- const shuffled = items.slice();
320
- for (let i = shuffled.length - 1; i > 0; i--) {
321
- const j = Math.floor(Math.random() * (i + 1));
322
- [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; // Swap elements
271
+ transformFilter(filter) {
272
+ const { operator, value, filters, field } = filter;
273
+ // Find the operator (either default or custom)
274
+ const filterOperator = this.operators[operator?.type ?? ''] || null;
275
+ // Start by transforming the filter itself
276
+ const transformedFilter = {
277
+ ...filter, // Keep the original filter structure
278
+ operator: filterOperator ? filterOperator : operator, // Add operator name
279
+ };
280
+ // If the filter contains nested filters, recursively transform them
281
+ if (filters && filters.length > 0) {
282
+ transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters
323
283
  }
324
- return count == 1 ? shuffled.slice(0, count)[0] : shuffled.slice(0, count);
325
- }
326
- static string(length = 10) {
327
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
328
- return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
284
+ return transformedFilter;
329
285
  }
330
- static boolean() {
331
- return Math.random() >= 0.5;
286
+ getOperator(key) {
287
+ return this.operators[key];
332
288
  }
333
- static item(array = []) {
334
- return array.length > 0 ? array[Math.floor(Math.random() * array.length)] : undefined;
289
+ // Helper function to return the default operators
290
+ getDefaultOperators() {
291
+ return ALL_DEFAULT_OPERATORS.reduce((acc, operator) => {
292
+ acc[operator.name] = {
293
+ type: operator.name,
294
+ };
295
+ return acc;
296
+ }, {});
335
297
  }
336
- static color() {
337
- const color = Math.floor(Math.random() * 16777215).toString(16);
338
- return `#${color.padStart(6, '0')}`;
298
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
299
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl }); }
300
+ }
301
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl, decorators: [{
302
+ type: Injectable
303
+ }] });
304
+
305
+ class AXPErrorHandlerRegistryService {
306
+ constructor(injector) {
307
+ this.injector = injector;
308
+ this.errorHandlers = [];
339
309
  }
340
- static alphanumeric(length = 10) {
341
- const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
342
- return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
310
+ register(...plugins) {
311
+ plugins.forEach(t => {
312
+ const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });
313
+ const handler = childInjector.get(t);
314
+ if (handler) {
315
+ this.errorHandlers.push(handler);
316
+ }
317
+ });
343
318
  }
344
- static alphabet(length = 10) {
345
- const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
346
- return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
319
+ get handlers() {
320
+ return this.errorHandlers;
347
321
  }
348
- static phone() {
349
- const areaCode = this.number(100, 999);
350
- const exchangeCode = this.number(100, 999);
351
- const lineNumber = this.number(1000, 9999);
352
- return `${areaCode}-${exchangeCode}-${lineNumber}`;
322
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
323
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, providedIn: 'root' }); }
324
+ }
325
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, decorators: [{
326
+ type: Injectable,
327
+ args: [{
328
+ providedIn: 'root'
329
+ }]
330
+ }], ctorParameters: () => [{ type: i0.Injector }] });
331
+
332
+ class AXPGlobalErrorHandler extends ErrorHandler {
333
+ constructor(injector, registry) {
334
+ super();
335
+ this.injector = injector;
336
+ this.registry = registry;
353
337
  }
354
- static firstName() {
355
- const firstNames = ['John', 'Allen', 'Jak', 'Rose', 'Kate', 'Liam', 'Olivia', 'Noah', 'Emma', 'Ava'];
356
- return this.pick(firstNames);
338
+ handleError(error) {
339
+ const handleErrorRecursively = (index, error) => {
340
+ const errorHandlers = this.registry.handlers;
341
+ if (index < errorHandlers.length) {
342
+ errorHandlers[index].handleError(error, (err) => {
343
+ handleErrorRecursively(index + 1, err);
344
+ });
345
+ }
346
+ else {
347
+ super.handleError(error); // Fallback to default handler
348
+ }
349
+ };
350
+ if (error.message?.startsWith('NG0100')) {
351
+ //ignore it
352
+ return;
353
+ }
354
+ handleErrorRecursively(0, error);
357
355
  }
358
- static lastName() {
359
- const lastNames = ['Gates', 'Jonsen', 'Smith', 'Ford', 'Jakson', 'Brown', 'Johnson', 'Williams', 'Jones', 'Garcia'];
360
- return this.pick(lastNames);
356
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, deps: [{ token: i0.Injector }, { token: AXPErrorHandlerRegistryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
357
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, providedIn: 'root' }); }
358
+ }
359
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, decorators: [{
360
+ type: Injectable,
361
+ args: [{ providedIn: 'root' }]
362
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: AXPErrorHandlerRegistryService }] });
363
+
364
+ // src/app/directives/grid-layout.directive.ts
365
+ class AXPGridLayoutDirective {
366
+ constructor(el, renderer) {
367
+ this.el = el;
368
+ this.renderer = renderer;
361
369
  }
362
- static email(...args) {
363
- const domains = ['gmail.com', 'yahoo.com', 'outlook.com', 'example.com'];
364
- const domain = this.pick(domains);
365
- const separator = this.pick(['.', '_', '']);
366
- const randomSuffix = this.boolean() ? this.number(1, 99).toString() : '';
367
- if (args.length === 2) {
368
- const firstName = args[0].toLowerCase();
369
- const lastName = args[1].toLowerCase();
370
- return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;
371
- }
372
- else {
373
- const firstName = this.firstName().toLowerCase();
374
- const lastName = this.lastName().toLowerCase();
375
- return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;
370
+ ngOnChanges(changes) {
371
+ if (changes['options']) {
372
+ this.applyTailwindClasses();
376
373
  }
377
374
  }
378
- static country() {
379
- const countries = ['USA', 'Canada', 'Mexico', 'Germany', 'France', 'Japan', 'Australia'];
380
- return this.pick(countries);
381
- }
382
- static city() {
383
- const cities = ['New York', 'Los Angeles', 'Toronto', 'Vancouver', 'Berlin', 'Paris', 'Tokyo', 'Sydney'];
384
- return this.pick(cities);
385
- }
386
- static state() {
387
- const states = ['NY', 'CA', 'TX', 'ON', 'BC', 'NSW', 'BER', 'IDF', 'TYO'];
388
- return this.pick(states);
389
- }
390
- static address() {
391
- const streets = ['Main St', 'High St', 'Maple Ave', 'Oak St', 'Pine St', 'Cedar St'];
392
- const streetNumber = this.number(100, 9999);
393
- const street = this.pick(streets);
394
- const city = this.city();
395
- const state = this.state();
396
- const zip = this.number(10000, 99999);
397
- const country = this.country();
398
- return `${streetNumber} ${street}, ${city}, ${state} ${zip}, ${country}`;
399
- }
400
- }
401
-
402
- class AXMOrgChartPrintPage extends AXBasePageComponent {
403
- constructor() {
404
- super(...arguments);
405
- this.ratio = signal(false);
406
- this.baseWidth = signal(undefined);
407
- this.baseHeight = signal(undefined);
408
- this.bgcolor = model();
409
- this.width = model();
410
- this.height = model();
411
- this.quality = model();
412
- this.qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);
413
- this.scale = model();
414
- this.#init = afterNextRender(() => {
415
- this.bgcolor.set(this.data.bgcolor);
416
- this.width.set(this.data.width);
417
- this.baseWidth.set(this.data.width);
418
- this.height.set(this.data.height);
419
- this.baseHeight.set(this.data.height);
420
- this.quality.set(this.data.quality);
421
- this.scale.set(this.data.scale);
422
- });
423
- }
424
- #init;
425
- calculateRatio(event, type) {
426
- if (!this.ratio() || !event.isUserInteraction)
427
- return;
428
- const value = event.value;
429
- if (type === 'width') {
430
- const newHeight = Math.round((value / this.baseWidth()) * this.baseHeight() * 100) / 100;
431
- this.height.set(newHeight);
432
- this.width.set(value);
433
- }
434
- else {
435
- const newWidth = Math.round((value / this.baseHeight()) * this.baseWidth() * 100) / 100;
436
- this.width.set(newWidth);
437
- this.height.set(value);
438
- }
439
- }
440
- async handleClose(isCanceled = false) {
441
- this.close({
442
- bgcolor: this.bgcolor(),
443
- width: this.width(),
444
- height: this.height(),
445
- quality: this.qualityComputed() / 100,
446
- scale: this.scale(),
447
- isCanceled,
448
- });
449
- }
450
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPrintPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
451
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: AXMOrgChartPrintPage, isStandalone: true, selector: "ng-component", inputs: { bgcolor: { classPropertyName: "bgcolor", publicName: "bgcolor", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, quality: { classPropertyName: "quality", publicName: "quality", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { bgcolor: "bgcolorChange", width: "widthChange", height: "heightChange", quality: "qualityChange", scale: "scaleChange" }, usesInheritance: true, ngImport: i0, template: ` <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
452
- <ax-label>Resolution (px)</ax-label>
453
- <div class="ax-flex ax-gap-2 ax-items-center">
454
- <ax-number-box
455
- [changeOnScroll]="true"
456
- [decimals]="4"
457
- [value]="width()"
458
- (onValueChanged)="calculateRatio($event, 'width')"
459
- name="Width"
460
- >
461
- </ax-number-box>
462
- <ax-button [toggleable]="true" [(selected)]="ratio"
463
- ><ax-icon><i class="fa-solid fa-vector-square"></i></ax-icon
464
- ></ax-button>
465
- <ax-number-box
466
- [changeOnScroll]="true"
467
- [decimals]="4"
468
- [value]="height()"
469
- (onValueChanged)="calculateRatio($event, 'height')"
470
- name="Height"
471
- >
472
- </ax-number-box>
473
- </div>
474
-
475
- <ax-label>Background color</ax-label>
476
- <ax-color-box [(ngModel)]="bgcolor"></ax-color-box>
477
-
478
- <ax-label>Quality of image (50-100%)</ax-label>
479
- <ax-number-box
480
- [changeOnScroll]="true"
481
- [minValue]="50"
482
- [maxValue]="100"
483
- [(ngModel)]="qualityComputed"
484
- name="Quality"
485
- >
486
- </ax-number-box>
487
-
488
- <ax-label>Scale</ax-label>
489
- <ax-number-box [changeOnScroll]="true" [minValue]="1" [(ngModel)]="scale" name="scale"> </ax-number-box>
490
- </div>
491
-
492
- <ax-footer>
493
- <ax-prefix>
494
- </ax-prefix>
495
- <ax-suffix>
496
- <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"> </ax-button>
497
- <ax-button text="Print" look="solid" color="primary" (onClick)="handleClose()">
498
- <ax-icon class="fa-solid fa-print"> </ax-icon>
499
- </ax-button>
500
- </ax-suffix>
501
- </ax-footer>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXNumberBoxModule }, { kind: "component", type: i2.AXNumberBoxComponent, selector: "ax-number-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "changeOnScroll", "thousandsSeparator", "padDecimalZeros", "step", "decimals", "decimalStep", "showSpinButtons", "minValue", "maxValue", "class"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i3.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { 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: AXButtonModule }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXColorBoxModule }, { kind: "component", type: i6.AXColorBoxComponent, selector: "ax-color-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "showBadge", "showValue", "showClearButton", "showIcon"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange"] }] }); }
502
- }
503
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPrintPage, decorators: [{
504
- type: Component,
505
- args: [{
506
- template: ` <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
507
- <ax-label>Resolution (px)</ax-label>
508
- <div class="ax-flex ax-gap-2 ax-items-center">
509
- <ax-number-box
510
- [changeOnScroll]="true"
511
- [decimals]="4"
512
- [value]="width()"
513
- (onValueChanged)="calculateRatio($event, 'width')"
514
- name="Width"
515
- >
516
- </ax-number-box>
517
- <ax-button [toggleable]="true" [(selected)]="ratio"
518
- ><ax-icon><i class="fa-solid fa-vector-square"></i></ax-icon
519
- ></ax-button>
520
- <ax-number-box
521
- [changeOnScroll]="true"
522
- [decimals]="4"
523
- [value]="height()"
524
- (onValueChanged)="calculateRatio($event, 'height')"
525
- name="Height"
526
- >
527
- </ax-number-box>
528
- </div>
529
-
530
- <ax-label>Background color</ax-label>
531
- <ax-color-box [(ngModel)]="bgcolor"></ax-color-box>
532
-
533
- <ax-label>Quality of image (50-100%)</ax-label>
534
- <ax-number-box
535
- [changeOnScroll]="true"
536
- [minValue]="50"
537
- [maxValue]="100"
538
- [(ngModel)]="qualityComputed"
539
- name="Quality"
540
- >
541
- </ax-number-box>
542
-
543
- <ax-label>Scale</ax-label>
544
- <ax-number-box [changeOnScroll]="true" [minValue]="1" [(ngModel)]="scale" name="scale"> </ax-number-box>
545
- </div>
546
-
547
- <ax-footer>
548
- <ax-prefix>
549
- </ax-prefix>
550
- <ax-suffix>
551
- <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"> </ax-button>
552
- <ax-button text="Print" look="solid" color="primary" (onClick)="handleClose()">
553
- <ax-icon class="fa-solid fa-print"> </ax-icon>
554
- </ax-button>
555
- </ax-suffix>
556
- </ax-footer>`,
557
- imports: [
558
- FormsModule,
559
- AXCheckBoxModule,
560
- AXNumberBoxModule,
561
- AXTextBoxModule,
562
- AXLabelModule,
563
- AXDecoratorModule,
564
- AXButtonModule,
565
- AXColorBoxModule,
566
- ],
567
- }]
568
- }] });
569
-
570
- // AXPPdfService
571
- class AXPExportService {
572
- constructor() {
573
- this.popupService = inject(AXPopupService);
574
- }
575
- async generateBlobFromElement(element, blobOptions) {
576
- const domtoimage = (await import('dom-to-image')).default;
577
- const originalWidth = element.scrollWidth;
578
- const originalHeight = element.scrollHeight;
579
- let popup, options = {}, newOptions = {};
580
- if (blobOptions) {
581
- ({ popup, ...options } = blobOptions);
582
- }
583
- if (popup) {
584
- const result = await this.popupService.open(AXMOrgChartPrintPage, {
585
- header: true,
586
- size: 'fit',
587
- draggable: true,
588
- hasBackdrop: true,
589
- title: 'Export Options',
590
- data: { data: options },
591
- });
592
- if (result.data.isCanceled) {
593
- throw new Error('Process is Canceled by User!');
594
- }
595
- else {
596
- newOptions = { ...options, ...result.data };
597
- }
598
- }
599
- return domtoimage.toBlob(element, {
600
- ...newOptions,
601
- width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),
602
- height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),
603
- style: {
604
- transform: `scale(${newOptions?.scale ?? 1})`,
605
- transformOrigin: 'top left',
606
- },
607
- });
608
- }
609
- download(blob, filename) {
610
- const link = document.createElement('a');
611
- link.href = URL.createObjectURL(blob);
612
- link.download = filename;
613
- document.body.appendChild(link);
614
- link.click();
615
- document.body.removeChild(link);
616
- URL.revokeObjectURL(link.href);
617
- }
618
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
619
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, providedIn: 'root' }); }
620
- }
621
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, decorators: [{
622
- type: Injectable,
623
- args: [{
624
- providedIn: 'root',
625
- }]
626
- }] });
627
-
628
- class AXPExpressionEvaluatorService {
629
- async evaluateExpression(obj, templateExpression, scope) {
630
- try {
631
- if (typeof templateExpression === 'string' && templateExpression.includes('{{')) {
632
- return await this.evaluateStringExpression(templateExpression, scope);
633
- }
634
- else if (typeof templateExpression === 'object') {
635
- const evaluatedObject = {};
636
- for (const key in templateExpression) {
637
- if (templateExpression.hasOwnProperty(key)) {
638
- evaluatedObject[key] = await this.evaluateExpression(obj, templateExpression[key], scope);
639
- }
640
- }
641
- return evaluatedObject;
642
- }
643
- else {
644
- return templateExpression;
645
- }
646
- }
647
- catch (error) {
648
- console.error('Error evaluating expression:', error);
649
- return false;
650
- }
651
- }
652
- async evaluateStringExpression(templateExpression, scope) {
653
- const expressionMatch = templateExpression.match(/\{\{\s*(.*?)\s*\}\}/);
654
- if (!expressionMatch) {
655
- throw Error(`No valid expression found in "${templateExpression}"`);
656
- }
657
- const expression = expressionMatch[1];
658
- const evaluationFunction = async () => {
659
- const sandbox = new Function('scope', `with (scope) { return (async function() { return ${expression}; })(); }`);
660
- return await sandbox(scope);
661
- };
662
- return await evaluationFunction();
663
- }
664
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExpressionEvaluatorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
665
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExpressionEvaluatorService, providedIn: 'root' }); }
666
- }
667
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExpressionEvaluatorService, decorators: [{
668
- type: Injectable,
669
- args: [{ providedIn: 'root' }]
670
- }] });
671
-
672
- class AXPRegionalService {
673
- }
674
-
675
- class AXPDexieEntityStorageService extends Dexie {
676
- constructor() {
677
- super('ACoreXPlatform');
678
- this.version(1).stores({
679
- 'entity-store': '++id, entityName, [entityName+id]',
680
- });
681
- }
682
- get dbName() {
683
- return 'ACoreXPlatform';
684
- }
685
- async initial(entityName, collection) {
686
- const exists = await this.table('entity-store').where({ entityName }).count();
687
- if (exists === 0) {
688
- await this.table('entity-store').bulkAdd(collection.map((item) => ({ ...item, entityName })));
689
- }
690
- return collection;
691
- }
692
- async getOne(entityName, id) {
693
- return await this.table('entity-store').where({ entityName, id: id }).first();
694
- }
695
- async updateOne(entityName, id, keyValue) {
696
- await this.table('entity-store').where({ entityName, id: id }).modify(keyValue);
697
- return await this.getOne(entityName, id);
698
- }
699
- async deleteOne(entityName, id) {
700
- await this.table('entity-store').where({ entityName, id: id }).delete();
701
- }
702
- async insertOne(entityName, entity) {
703
- const uuid = AXPDataGenerator.uuid();
704
- await this.table('entity-store').add({ ...entity, id: uuid, entityName });
705
- return uuid;
706
- }
707
- async getAll(entityName) {
708
- return await this.table('entity-store').where({ entityName }).toArray();
709
- }
710
- async query(entityName, request) {
711
- let result = await this.table('entity-store').where({ entityName }).toArray();
712
- if (request.sort && request.sort.length) {
713
- result = applySortArray(result, request.sort);
714
- }
715
- result = applyFilterArray(result, request.filter ? [request.filter] : []);
716
- return Promise.resolve({
717
- total: result.length,
718
- items: result.slice(request.skip, (request.skip ?? 0) + (request.take ?? 0)),
719
- });
720
- }
721
- }
722
- // export class AXPDexieTableStorageService extends Dexie implements AXPEntityStorageService {
723
- // private schemaUpdateLock: Promise<void> = Promise.resolve();
724
- // constructor() {
725
- // super('ACoreXPlatform');
726
- // // Initial empty version
727
- // //this.version(1).stores({});
728
- // }
729
- // // Function to change the schema dynamically
730
- // private async changeSchema(schemaChanges: { [tableName: string]: string | null }): Promise<void> {
731
- // // Acquire schema update lock to ensure no other operations are performed while schema is changing
732
- // this.schemaUpdateLock = this.schemaUpdateLock.then(async () => {
733
- // console.log('Attempting schema change with:', schemaChanges);
734
- // try {
735
- // this.close();
736
- // const newDb = new Dexie(this.name);
737
- // // Extract current schema in Dexie format
738
- // const currentSchema = this.tables.reduce((result, { name, schema }) => {
739
- // result[name] = [schema.primKey.src, ...schema.indexes.map((idx) => idx.src)].join(',');
740
- // return result;
741
- // }, {} as { [tableName: string]: string });
742
- // console.log('Current Schema:', currentSchema);
743
- // // Define current schema version
744
- // newDb.version(this.verno + 10).stores(currentSchema);
745
- // // Define new schema version with schema changes
746
- // const nextVersion = this.verno + 1;
747
- // newDb.version(nextVersion).stores(schemaChanges);
748
- // await newDb.open();
749
- // // Reassign updated db instance
750
- // Object.assign(this, newDb);
751
- // console.log(`Schema updated. Current version: ${this.verno}`);
752
- // } catch (error) {
753
- // console.error('Error during schema change:', error);
754
- // throw error;
755
- // }
756
- // });
757
- // // Wait for schema change lock to complete
758
- // await this.schemaUpdateLock;
759
- // }
760
- // private async ensureInitialized(entityName: string): Promise<void> {
761
- // if (this.tables.findIndex((table) => table.name === entityName) == -1) {
762
- // const schemaChanges: { [tableName: string]: string } = {};
763
- // schemaChanges[entityName] = '++id';
764
- // await this.changeSchema(schemaChanges);
765
- // }
766
- // }
767
- // get dbName(): string {
768
- // return 'ACoreXPlatform';
769
- // }
770
- // private async getTable<T>(entityName: string) {
771
- // await this.ensureInitialized(entityName);
772
- // return this.table<T, number>(entityName);
773
- // }
774
- // async initial<T = any>(entityName: string, collection: T[]): Promise<void> {
775
- // const table = await this.getTable<T>(entityName);
776
- // const exists = await table.count();
777
- // if (exists === 0) {
778
- // await table.bulkAdd(collection);
779
- // }
780
- // }
781
- // async getOne<T = any>(entityName: string, id: string): Promise<T> {
782
- // const table = await this.getTable<T>(entityName);
783
- // return (await table.where({ id: parseInt(id) }).first()) as T;
784
- // }
785
- // async updateOne(entityName: string, id: string, keyValue: { [key: string]: any }): Promise<void> {
786
- // const table = await this.getTable(entityName);
787
- // await table.update(parseInt(id), keyValue);
788
- // }
789
- // async deleteOne(entityName: string, id: string): Promise<void> {
790
- // const table = await this.getTable(entityName);
791
- // await table.delete(parseInt(id));
792
- // }
793
- // async insertOne<T = any>(entityName: string, entity: T): Promise<void> {
794
- // const table = await this.getTable<T>(entityName);
795
- // await table.add(entity);
796
- // }
797
- // async getAll<T = any>(entityName: string): Promise<T[]> {
798
- // const table = await this.getTable<T>(entityName);
799
- // return await table.toArray();
800
- // }
801
- // }
802
-
803
- const AXP_DATA_SEEDER_TOKEN = new InjectionToken('AXP_DATA_SEEDER_TOKEN');
804
- class AXPDataSeederService {
805
- constructor() {
806
- this.loader = inject(AXP_DATA_SEEDER_TOKEN, { optional: true });
807
- }
808
- async seed() {
809
- if (Array.isArray(this.loader)) {
810
- for (const loader of this.loader) {
811
- await loader.seed();
812
- }
813
- }
814
- else {
815
- await this.loader?.seed();
816
- }
817
- }
818
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDataSeederService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
819
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDataSeederService, providedIn: 'root' }); }
820
- }
821
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPDataSeederService, decorators: [{
822
- type: Injectable,
823
- args: [{ providedIn: 'root' }]
824
- }] });
825
-
826
- class AXPEntityStorageService {
827
- }
828
- class AXPEntityDataProvider {
829
- }
830
- class AXPEntityDataProviderImpl {
831
- constructor(storageService, entityName) {
832
- this.storageService = storageService;
833
- this.entityName = entityName;
834
- }
835
- async initial(collection) {
836
- await this.storageService.initial(this.entityName, collection);
837
- }
838
- getOne(id) {
839
- return this.storageService.getOne(this.entityName, id);
840
- }
841
- getAll() {
842
- return this.storageService.getAll(this.entityName);
843
- }
844
- query(request) {
845
- return this.storageService.query(this.entityName, request);
846
- }
847
- updateOne(id, keyValue) {
848
- return this.storageService.updateOne(this.entityName, id, keyValue);
849
- }
850
- deleteOne(id) {
851
- return this.storageService.deleteOne(this.entityName, id);
852
- }
853
- insertOne(entity) {
854
- return this.storageService.insertOne(this.entityName, entity);
855
- }
856
- }
857
- class AXMEntityCrudService {
858
- }
859
- class AXMEntityCrudServiceImpl {
860
- constructor(entityName) {
861
- this.entityName = entityName;
862
- this._storageService = inject(AXPEntityStorageService);
863
- this._entityDataProvider = new AXPEntityDataProviderImpl(this._storageService, this.entityName);
864
- }
865
- async insertOne(request) {
866
- return this._entityDataProvider.insertOne(request);
867
- }
868
- async getOne(id) {
869
- return this._entityDataProvider.getOne(id);
870
- }
871
- async deleteOne(id) {
872
- return this._entityDataProvider.deleteOne(id);
873
- }
874
- async updateOne(id, values) {
875
- return this._entityDataProvider.updateOne(id, values);
876
- }
877
- async query(request = { skip: 0, take: 100 }) {
878
- return this._entityDataProvider.query(request);
879
- }
880
- // get entityDataProvider() {
881
- // return this._entityDataProvider;
882
- // }
883
- get storageService() {
884
- return this._storageService;
885
- }
886
- }
887
-
888
- class AXPCustomOperatorService {
889
- }
890
- class AXPCustomOperatorServiceImpl extends AXPCustomOperatorService {
891
- getCustomOperators() {
892
- return {};
893
- }
894
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
895
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl }); }
896
- }
897
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCustomOperatorServiceImpl, decorators: [{
898
- type: Injectable
899
- }] });
900
-
901
- class AXPFilterOperatorMiddlewareService {
902
- }
903
- class AXPFilterOperatorMiddlewareServiceImpl extends AXPFilterOperatorMiddlewareService {
904
- constructor() {
905
- super(...arguments);
906
- this.customOperatorService = inject(AXPCustomOperatorService);
907
- this.operators = {
908
- ...this.getDefaultOperators(),
909
- ...this.customOperatorService.getCustomOperators(),
910
- };
911
- }
912
- transformFilters(filters) {
913
- return filters.map((filter) => this.transformFilter(filter));
914
- }
915
- transformFilter(filter) {
916
- const { operator, value, filters, field } = filter;
917
- // Find the operator (either default or custom)
918
- const filterOperator = this.operators[operator?.type] || null;
919
- // Start by transforming the filter itself
920
- const transformedFilter = {
921
- ...filter, // Keep the original filter structure
922
- operator: filterOperator ? filterOperator : operator, // Add operator name
923
- };
924
- // If the filter contains nested filters, recursively transform them
925
- if (filters && filters.length > 0) {
926
- transformedFilter.filters = this.transformFilters(filters); // Recursively transform nested filters
927
- }
928
- return transformedFilter;
929
- }
930
- getOperator(key) {
931
- return this.operators[key];
932
- }
933
- // Helper function to return the default operators
934
- getDefaultOperators() {
935
- return ALL_DEFAULT_OPERATORS.reduce((acc, operator) => {
936
- acc[operator.name] = {
937
- type: operator.name,
938
- };
939
- return acc;
940
- }, {});
941
- }
942
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
943
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl }); }
944
- }
945
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFilterOperatorMiddlewareServiceImpl, decorators: [{
946
- type: Injectable
947
- }] });
948
-
949
- class AXPErrorHandlerRegistryService {
950
- constructor(injector) {
951
- this.injector = injector;
952
- this.errorHandlers = [];
953
- }
954
- register(...plugins) {
955
- plugins.forEach(t => {
956
- const childInjector = Injector.create({ providers: [{ provide: t, useClass: t, deps: [] }], parent: this.injector });
957
- const handler = childInjector.get(t);
958
- if (handler) {
959
- this.errorHandlers.push(handler);
960
- }
961
- });
962
- }
963
- get handlers() {
964
- return this.errorHandlers;
965
- }
966
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
967
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, providedIn: 'root' }); }
968
- }
969
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPErrorHandlerRegistryService, decorators: [{
970
- type: Injectable,
971
- args: [{
972
- providedIn: 'root'
973
- }]
974
- }], ctorParameters: () => [{ type: i0.Injector }] });
975
-
976
- class AXPGlobalErrorHandler extends ErrorHandler {
977
- constructor(injector, registry) {
978
- super();
979
- this.injector = injector;
980
- this.registry = registry;
981
- }
982
- handleError(error) {
983
- const handleErrorRecursively = (index, error) => {
984
- const errorHandlers = this.registry.handlers;
985
- if (index < errorHandlers.length) {
986
- errorHandlers[index].handleError(error, (err) => {
987
- handleErrorRecursively(index + 1, err);
988
- });
989
- }
990
- else {
991
- super.handleError(error); // Fallback to default handler
992
- }
993
- };
994
- if (error.message?.startsWith('NG0100')) {
995
- //ignore it
996
- return;
997
- }
998
- handleErrorRecursively(0, error);
999
- }
1000
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, deps: [{ token: i0.Injector }, { token: AXPErrorHandlerRegistryService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1001
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, providedIn: 'root' }); }
1002
- }
1003
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPGlobalErrorHandler, decorators: [{
1004
- type: Injectable,
1005
- args: [{ providedIn: 'root' }]
1006
- }], ctorParameters: () => [{ type: i0.Injector }, { type: AXPErrorHandlerRegistryService }] });
1007
-
1008
- // src/app/directives/grid-layout.directive.ts
1009
- class AXPGridLayoutDirective {
1010
- constructor(el, renderer) {
1011
- this.el = el;
1012
- this.renderer = renderer;
1013
- }
1014
- ngOnChanges(changes) {
1015
- if (changes['options']) {
1016
- this.applyTailwindClasses();
1017
- }
1018
- }
1019
- applyTailwindClasses() {
1020
- // Clear existing grid classes
1021
- this.clearClasses();
1022
- // Apply new grid classes based on the input options
1023
- this.setClasses(this.options.positions?.default, '');
1024
- this.setClasses(this.options.positions?.md, 'md:');
1025
- this.setClasses(this.options.positions?.lg, 'lg:');
1026
- this.setClasses(this.options.positions?.xl, 'xl:');
1027
- this.setClasses(this.options.positions?.xxl, '2xl:');
375
+ applyTailwindClasses() {
376
+ // Clear existing grid classes
377
+ this.clearClasses();
378
+ // Apply new grid classes based on the input options
379
+ this.setClasses(this.options.positions?.default, '');
380
+ this.setClasses(this.options.positions?.md, 'md:');
381
+ this.setClasses(this.options.positions?.lg, 'lg:');
382
+ this.setClasses(this.options.positions?.xl, 'xl:');
383
+ this.setClasses(this.options.positions?.xxl, '2xl:');
1028
384
  }
1029
385
  setClasses(positions, prefix) {
1030
386
  if (positions == null)
@@ -1381,7 +737,7 @@ class AXPLogoComponent {
1381
737
  }
1382
738
  }
1383
739
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1384
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLogoComponent, isStandalone: true, selector: "axp-logo", inputs: { source: "source" }, host: { classAttribute: "ax-flex ax-justify-center" }, ngImport: i0, template: "@switch (logoType) {\n@case ('text') {\n<span class=\"ax-font-bold ax-select-none\">{{ source.text }}</span>\n}\n@case ('url') {\n<ax-image [src]=\"source.url\"></ax-image>\n} @case ('iconClass') {\n<ax-icon class=\"{{ source.classIcon }}\"></ax-icon>\n} @case ('component') {\n<ng-container *ngComponentOutlet=\"source.component\"></ng-container>\n}\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i2$1.AXImageComponent, selector: "ax-image", inputs: ["overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }] }); }
740
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXPLogoComponent, isStandalone: true, selector: "axp-logo", inputs: { source: "source" }, host: { classAttribute: "ax-flex ax-justify-center" }, ngImport: i0, template: "@switch (logoType) {\n@case ('text') {\n<span class=\"ax-font-bold ax-select-none\">{{ source.text }}</span>\n}\n@case ('url') {\n<ax-image [src]=\"source.url\"></ax-image>\n} @case ('iconClass') {\n<ax-icon class=\"{{ source.classIcon }}\"></ax-icon>\n} @case ('component') {\n<ng-container *ngComponentOutlet=\"source.component\"></ng-container>\n}\n}", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "ngmodule", type: AXImageModule }, { kind: "component", type: i2.AXImageComponent, selector: "ax-image", inputs: ["overlayMode", "src", "alt", "priority", "lazy"], outputs: ["onLoad", "onError"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }] }); }
1385
741
  }
1386
742
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPLogoComponent, decorators: [{
1387
743
  type: Component,
@@ -1602,11 +958,12 @@ withMethods((store, router = inject(Router), workflow = inject(AXPWorkflowServic
1602
958
  executeCommand(item) {
1603
959
  if (item.path) {
1604
960
  workflow.execute('navigate', { type: 'router', options: { path: item.path } });
961
+ patchState(store, { selectedMenuItem: { item, isFullMatch: true } });
1605
962
  }
1606
963
  if (item.command) {
1607
- workflow.execute('navigate', item.command);
964
+ const command = item.command;
965
+ workflow.execute(command.name, command.options);
1608
966
  }
1609
- patchState(store, { selectedMenuItem: { item, isFullMatch: true } });
1610
967
  },
1611
968
  isItemOpen(item) {
1612
969
  const selectedItem = store.selectedMenuItem();
@@ -1662,16 +1019,15 @@ class AXPMenuSearchProvider {
1662
1019
  title: item.text, // Use `text` for the `title`
1663
1020
  icon: item.icon, // Include the `icon` if present
1664
1021
  data: omit(item, ['parent', 'children']), // Include all data except `parent` and `children`
1665
- commands: {
1666
- navigate: {
1667
- ...(item.command ?? {
1668
- type: 'router',
1669
- options: {
1670
- path: item.path,
1671
- },
1672
- }),
1673
- },
1674
- },
1022
+ command: item.path ? {
1023
+ name: 'navigate',
1024
+ options: {
1025
+ type: 'router',
1026
+ options: {
1027
+ path: item.path,
1028
+ },
1029
+ }
1030
+ } : item.command,
1675
1031
  parent: item.parent
1676
1032
  ? {
1677
1033
  title: item.parent.text,
@@ -1724,19 +1080,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
1724
1080
  }] } });
1725
1081
 
1726
1082
  class AXPNavBarSlotComponent {
1727
- constructor() {
1728
- this.store = inject(Store);
1729
- }
1730
1083
  handleCommand(action) {
1731
- if (action)
1732
- this.store.dispatch(action);
1084
+ // if (action)
1085
+ // this.store.dispatch(action)
1733
1086
  }
1734
1087
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPNavBarSlotComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1735
1088
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXPNavBarSlotComponent, isStandalone: true, selector: "ng-component", inputs: { items: "items" }, ngImport: i0, template: `
1736
1089
  <div class="ax-flex ax-items-center ax-justify-between ax-gap-5">
1737
1090
  <a *ngFor="let link of items" (click)="handleCommand(link.command)" >{{ link.text }}</a>
1738
1091
  </div>
1739
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None }); }
1092
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], encapsulation: i0.ViewEncapsulation.None }); }
1740
1093
  }
1741
1094
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPNavBarSlotComponent, decorators: [{
1742
1095
  type: Component,
@@ -1929,7 +1282,7 @@ class AXPSearchService {
1929
1282
  ? this.formatService.format(definition.format.icon, 'string', result.data)
1930
1283
  : definition.icon),
1931
1284
  data: result.data,
1932
- commands: result.commands,
1285
+ command: result.command,
1933
1286
  actions: definition.actions,
1934
1287
  parent: result.parent,
1935
1288
  order: definition.order,
@@ -2283,9 +1636,9 @@ class AXPSettingService {
2283
1636
  this.providers = inject(AXP_SETTING_VALUE_PROVIDER);
2284
1637
  //private readonly definitionService = inject(AXPSettingDefinitionProviderService);
2285
1638
  this.injector = inject(Injector);
1639
+ this.eventService = inject(AXPBroadcastEventService);
2286
1640
  this.scopedSettingsCache = new Map();
2287
1641
  this.onChanged = new Subject();
2288
- this.broadcastChannel = new BroadcastChannel('AXPSettingChannel'); // BroadcastChannel for sync
2289
1642
  // Initialize scoped caches for dynamic scopes
2290
1643
  const staticScopes = [
2291
1644
  AXPSettingScope.Environment,
@@ -2299,13 +1652,13 @@ class AXPSettingService {
2299
1652
  }
2300
1653
  });
2301
1654
  // Listen for setting changes from other tabs
2302
- this.broadcastChannel.onmessage = (event) => {
1655
+ this.eventService.listen('AXPSettingChangedEvent').subscribe((event) => {
2303
1656
  const data = event.data;
2304
1657
  data.keys.forEach((key) => {
2305
1658
  this.scopedSettingsCache.get(data.scope)?.set(key, data.values[key]);
2306
1659
  });
2307
1660
  this.onChanged.next(data); // Notify subscribers in the current tab
2308
- };
1661
+ });
2309
1662
  }
2310
1663
  async load() {
2311
1664
  try {
@@ -2387,7 +1740,7 @@ class AXPSettingService {
2387
1740
  }
2388
1741
  invokeChangeEvent(event) {
2389
1742
  this.onChanged.next(event);
2390
- this.broadcastChannel.postMessage(event);
1743
+ this.eventService.publish("AXPSettingChangedEvent", event);
2391
1744
  }
2392
1745
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPSettingService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2393
1746
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPSettingService, providedIn: 'root' }); }
@@ -2627,7 +1980,9 @@ class AXPCommonModule {
2627
1980
  /**
2628
1981
  * @ignore
2629
1982
  */
2630
- constructor(instances, appInitService, settingsService, seederService) {
1983
+ constructor(instances, appInitService, settingsService
1984
+ // seederService: AXPDataSeederService
1985
+ ) {
2631
1986
  instances.forEach((f) => {
2632
1987
  f();
2633
1988
  });
@@ -2640,16 +1995,16 @@ class AXPCommonModule {
2640
1995
  });
2641
1996
  //
2642
1997
  //
2643
- appInitService.registerTask({
2644
- name: 'Seeder',
2645
- statusText: 'Seed Data ...',
2646
- run: async () => {
2647
- await seederService.seed();
2648
- },
2649
- });
2650
- }
2651
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCommonModule, deps: [{ token: 'AXPCommonModuleFactory' }, { token: AXPAppStartUpService }, { token: AXPSettingService }, { token: AXPDataSeederService }], target: i0.ɵɵFactoryTarget.NgModule }); }
2652
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXPCommonModule, imports: [i4$1.AXPWorkflowModule, AXPopupModule,
1998
+ // appInitService.registerTask({
1999
+ // name: 'Seeder',
2000
+ // statusText: 'Seed Data ...',
2001
+ // run: async () => {
2002
+ // await seederService.seed();
2003
+ // },
2004
+ // });
2005
+ }
2006
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCommonModule, deps: [{ token: 'AXPCommonModuleFactory' }, { token: AXPAppStartUpService }, { token: AXPSettingService }], target: i0.ɵɵFactoryTarget.NgModule }); }
2007
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXPCommonModule, imports: [i3.AXPWorkflowModule, AXPopupModule,
2653
2008
  AXDateTimeModule,
2654
2009
  AXToastModule], exports: [RouterModule] }); }
2655
2010
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPCommonModule, providers: [
@@ -2738,7 +2093,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
2738
2093
  }], ctorParameters: () => [{ type: undefined, decorators: [{
2739
2094
  type: Inject,
2740
2095
  args: ['AXPCommonModuleFactory']
2741
- }] }, { type: AXPAppStartUpService }, { type: AXPSettingService }, { type: AXPDataSeederService }] });
2096
+ }] }, { type: AXPAppStartUpService }, { type: AXPSettingService }] });
2742
2097
 
2743
2098
  const ENVIRONMENT = new InjectionToken('ENVIRONMENT');
2744
2099
  const AXP_PLATFORM_CONFIG_TOKEN = new InjectionToken('AXP_PLATFORM_CONFIG_TOKEN', {
@@ -2758,78 +2113,460 @@ const AXPPlatformDefaultConfigs = {
2758
2113
  network: {
2759
2114
  timeOut: 5000,
2760
2115
  }
2761
- };
2762
- function configPlatform(config = AXPPlatformDefaultConfigs) {
2763
- return merge(AXPPlatformDefaultConfigs, config);
2116
+ };
2117
+ function configPlatform(config = AXPPlatformDefaultConfigs) {
2118
+ return merge(AXPPlatformDefaultConfigs, config);
2119
+ }
2120
+
2121
+ const AXP_ROOT_CONFIG_TOKEN = new InjectionToken('AXP_ROOT_CONFIG_TOKEN');
2122
+
2123
+ class AXPFileStorageService {
2124
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2125
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService }); }
2126
+ }
2127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService, decorators: [{
2128
+ type: Injectable
2129
+ }] });
2130
+
2131
+ var AXPFileStorageStatus;
2132
+ (function (AXPFileStorageStatus) {
2133
+ AXPFileStorageStatus["Temporary"] = "temporary";
2134
+ AXPFileStorageStatus["Committed"] = "committed";
2135
+ AXPFileStorageStatus["PendingDeletion"] = "pendingDeletion";
2136
+ AXPFileStorageStatus["Archived"] = "archived";
2137
+ AXPFileStorageStatus["Error"] = "error";
2138
+ })(AXPFileStorageStatus || (AXPFileStorageStatus = {}));
2139
+
2140
+ class AXPFiltersProviderService {
2141
+ async getAll() {
2142
+ return Promise.resolve('');
2143
+ }
2144
+ async execute() {
2145
+ return Promise.resolve('');
2146
+ }
2147
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2148
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, providedIn: 'root' }); }
2149
+ }
2150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, decorators: [{
2151
+ type: Injectable,
2152
+ args: [{
2153
+ providedIn: 'root',
2154
+ }]
2155
+ }] });
2156
+
2157
+ const AXP_FILE_TYPE_INFO_PROVIDER = new InjectionToken('AXP_FILE_TYPE_INFO_PROVIDER');
2158
+ class AXPFileTypeProviderService {
2159
+ constructor() {
2160
+ this.providers = inject(AXP_FILE_TYPE_INFO_PROVIDER, { optional: true });
2161
+ }
2162
+ async items() {
2163
+ const items = [];
2164
+ if (Array.isArray(this.providers)) {
2165
+ for (const provider of this.providers) {
2166
+ items.push(...(await provider.items()));
2167
+ }
2168
+ }
2169
+ return items;
2170
+ }
2171
+ async get(name) {
2172
+ return (await this.items()).find((c) => c.name == name);
2173
+ }
2174
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2175
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, providedIn: 'root' }); }
2176
+ }
2177
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, decorators: [{
2178
+ type: Injectable,
2179
+ args: [{ providedIn: 'root' }]
2180
+ }] });
2181
+
2182
+ class AXPClipBoardService {
2183
+ constructor() {
2184
+ this.toast = inject(AXToastService);
2185
+ }
2186
+ copy(title, value) {
2187
+ const copyText = document.createElement('input');
2188
+ copyText.type = 'text';
2189
+ copyText.select();
2190
+ copyText.setSelectionRange(0, 99999); // For mobile devices
2191
+ copyText.remove();
2192
+ navigator.clipboard.writeText(value);
2193
+ this.toast.success(`${title} copied!`);
2194
+ }
2195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2196
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, providedIn: 'root' }); }
2197
+ }
2198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPClipBoardService, decorators: [{
2199
+ type: Injectable,
2200
+ args: [{
2201
+ providedIn: 'root',
2202
+ }]
2203
+ }] });
2204
+
2205
+ class AXPDataGenerator {
2206
+ static uuid() {
2207
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (char) => {
2208
+ const random = (Math.random() * 16) | 0;
2209
+ const value = char === 'x' ? random : (random & 0x3) | 0x8;
2210
+ return value.toString(16);
2211
+ });
2212
+ }
2213
+ static number(...args) {
2214
+ let min = 0;
2215
+ let max = 100;
2216
+ if (args.length == 1)
2217
+ max = args[0];
2218
+ if (args.length == 2) {
2219
+ min = args[0];
2220
+ max = args[1];
2221
+ }
2222
+ return Math.floor(Math.random() * (max - min + 1)) + min;
2223
+ }
2224
+ static date(...args) {
2225
+ let start = new Date(2000, 0, 1);
2226
+ let end = new Date();
2227
+ if (args.length === 1) {
2228
+ start = args[0];
2229
+ }
2230
+ else if (args.length === 2) {
2231
+ start = args[0];
2232
+ end = args[1];
2233
+ }
2234
+ const startTime = start.getTime();
2235
+ const endTime = end.getTime();
2236
+ return new Date(startTime + Math.random() * (endTime - startTime));
2237
+ }
2238
+ static array(length = 5, generator) {
2239
+ return Array.from({ length }, generator);
2240
+ }
2241
+ static pick(...args) {
2242
+ if (args.length < 1) {
2243
+ throw new Error('Invalid parameters');
2244
+ }
2245
+ const items = args[0];
2246
+ const count = args[1] ?? 1;
2247
+ if (count < 1) {
2248
+ throw new Error('Count must be at least 1');
2249
+ }
2250
+ // If the count is greater than the number of items, just return a shuffled copy of the array
2251
+ if (count >= items.length) {
2252
+ return [...items].sort(() => Math.random() - 0.5);
2253
+ }
2254
+ // Shuffle the array and slice the first 'count' elements
2255
+ const shuffled = items.slice();
2256
+ for (let i = shuffled.length - 1; i > 0; i--) {
2257
+ const j = Math.floor(Math.random() * (i + 1));
2258
+ [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]]; // Swap elements
2259
+ }
2260
+ return count == 1 ? shuffled.slice(0, count)[0] : shuffled.slice(0, count);
2261
+ }
2262
+ static string(length = 10) {
2263
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
2264
+ return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
2265
+ }
2266
+ static boolean() {
2267
+ return Math.random() >= 0.5;
2268
+ }
2269
+ static item(array = []) {
2270
+ return array.length > 0 ? array[Math.floor(Math.random() * array.length)] : undefined;
2271
+ }
2272
+ static color() {
2273
+ const color = Math.floor(Math.random() * 16777215).toString(16);
2274
+ return `#${color.padStart(6, '0')}`;
2275
+ }
2276
+ static alphanumeric(length = 10) {
2277
+ const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
2278
+ return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
2279
+ }
2280
+ static alphabet(length = 10) {
2281
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
2282
+ return Array.from({ length }, () => chars.charAt(Math.floor(Math.random() * chars.length))).join('');
2283
+ }
2284
+ static phone() {
2285
+ const areaCode = this.number(100, 999);
2286
+ const exchangeCode = this.number(100, 999);
2287
+ const lineNumber = this.number(1000, 9999);
2288
+ return `${areaCode}-${exchangeCode}-${lineNumber}`;
2289
+ }
2290
+ static firstName() {
2291
+ const firstNames = ['John', 'Allen', 'Jak', 'Rose', 'Kate', 'Liam', 'Olivia', 'Noah', 'Emma', 'Ava'];
2292
+ return this.pick(firstNames);
2293
+ }
2294
+ static lastName() {
2295
+ const lastNames = ['Gates', 'Jonsen', 'Smith', 'Ford', 'Jakson', 'Brown', 'Johnson', 'Williams', 'Jones', 'Garcia'];
2296
+ return this.pick(lastNames);
2297
+ }
2298
+ static email(...args) {
2299
+ const domains = ['gmail.com', 'yahoo.com', 'outlook.com', 'example.com'];
2300
+ const domain = this.pick(domains);
2301
+ const separator = this.pick(['.', '_', '']);
2302
+ const randomSuffix = this.boolean() ? this.number(1, 99).toString() : '';
2303
+ if (args.length === 2) {
2304
+ const firstName = args[0].toLowerCase();
2305
+ const lastName = args[1].toLowerCase();
2306
+ return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;
2307
+ }
2308
+ else {
2309
+ const firstName = this.firstName().toLowerCase();
2310
+ const lastName = this.lastName().toLowerCase();
2311
+ return `${firstName}${separator}${lastName}${randomSuffix}@${domain}`;
2312
+ }
2313
+ }
2314
+ static country() {
2315
+ const countries = ['USA', 'Canada', 'Mexico', 'Germany', 'France', 'Japan', 'Australia'];
2316
+ return this.pick(countries);
2317
+ }
2318
+ static city() {
2319
+ const cities = ['New York', 'Los Angeles', 'Toronto', 'Vancouver', 'Berlin', 'Paris', 'Tokyo', 'Sydney'];
2320
+ return this.pick(cities);
2321
+ }
2322
+ static state() {
2323
+ const states = ['NY', 'CA', 'TX', 'ON', 'BC', 'NSW', 'BER', 'IDF', 'TYO'];
2324
+ return this.pick(states);
2325
+ }
2326
+ static address() {
2327
+ const streets = ['Main St', 'High St', 'Maple Ave', 'Oak St', 'Pine St', 'Cedar St'];
2328
+ const streetNumber = this.number(100, 9999);
2329
+ const street = this.pick(streets);
2330
+ const city = this.city();
2331
+ const state = this.state();
2332
+ const zip = this.number(10000, 99999);
2333
+ const country = this.country();
2334
+ return `${streetNumber} ${street}, ${city}, ${state} ${zip}, ${country}`;
2335
+ }
2764
2336
  }
2765
2337
 
2766
- const AXP_ROOT_CONFIG_TOKEN = new InjectionToken('AXP_ROOT_CONFIG_TOKEN');
2338
+ class AXMOrgChartPrintPage extends AXBasePageComponent {
2339
+ constructor() {
2340
+ super(...arguments);
2341
+ this.ratio = signal(false);
2342
+ this.baseWidth = signal(undefined);
2343
+ this.baseHeight = signal(undefined);
2344
+ this.bgcolor = model();
2345
+ this.width = model();
2346
+ this.height = model();
2347
+ this.quality = model();
2348
+ this.qualityComputed = linkedSignal(() => (this.data.quality ?? 1) * 100);
2349
+ this.scale = model();
2350
+ this.#init = afterNextRender(() => {
2351
+ this.bgcolor.set(this.data.bgcolor);
2352
+ this.width.set(this.data.width);
2353
+ this.baseWidth.set(this.data.width);
2354
+ this.height.set(this.data.height);
2355
+ this.baseHeight.set(this.data.height);
2356
+ this.quality.set(this.data.quality);
2357
+ this.scale.set(this.data.scale);
2358
+ });
2359
+ }
2360
+ #init;
2361
+ calculateRatio(event, type) {
2362
+ if (!this.ratio() || !event.isUserInteraction)
2363
+ return;
2364
+ const value = event.value;
2365
+ if (type === 'width') {
2366
+ const newHeight = Math.round((value / this.baseWidth()) * this.baseHeight() * 100) / 100;
2367
+ this.height.set(newHeight);
2368
+ this.width.set(value);
2369
+ }
2370
+ else {
2371
+ const newWidth = Math.round((value / this.baseHeight()) * this.baseWidth() * 100) / 100;
2372
+ this.width.set(newWidth);
2373
+ this.height.set(value);
2374
+ }
2375
+ }
2376
+ async handleClose(isCanceled = false) {
2377
+ this.close({
2378
+ bgcolor: this.bgcolor(),
2379
+ width: this.width(),
2380
+ height: this.height(),
2381
+ quality: this.qualityComputed() / 100,
2382
+ scale: this.scale(),
2383
+ isCanceled,
2384
+ });
2385
+ }
2386
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPrintPage, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
2387
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.3", type: AXMOrgChartPrintPage, isStandalone: true, selector: "ng-component", inputs: { bgcolor: { classPropertyName: "bgcolor", publicName: "bgcolor", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null }, height: { classPropertyName: "height", publicName: "height", isSignal: true, isRequired: false, transformFunction: null }, quality: { classPropertyName: "quality", publicName: "quality", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { bgcolor: "bgcolorChange", width: "widthChange", height: "heightChange", quality: "qualityChange", scale: "scaleChange" }, usesInheritance: true, ngImport: i0, template: ` <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
2388
+ <ax-label>Resolution (px)</ax-label>
2389
+ <div class="ax-flex ax-gap-2 ax-items-center">
2390
+ <ax-number-box
2391
+ [changeOnScroll]="true"
2392
+ [decimals]="4"
2393
+ [value]="width()"
2394
+ (onValueChanged)="calculateRatio($event, 'width')"
2395
+ name="Width"
2396
+ >
2397
+ </ax-number-box>
2398
+ <ax-button [toggleable]="true" [(selected)]="ratio"
2399
+ ><ax-icon><i class="fa-solid fa-vector-square"></i></ax-icon
2400
+ ></ax-button>
2401
+ <ax-number-box
2402
+ [changeOnScroll]="true"
2403
+ [decimals]="4"
2404
+ [value]="height()"
2405
+ (onValueChanged)="calculateRatio($event, 'height')"
2406
+ name="Height"
2407
+ >
2408
+ </ax-number-box>
2409
+ </div>
2767
2410
 
2768
- class AXPFileStorageService {
2769
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2770
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService }); }
2771
- }
2772
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileStorageService, decorators: [{
2773
- type: Injectable
2774
- }] });
2411
+ <ax-label>Background color</ax-label>
2412
+ <ax-color-box [(ngModel)]="bgcolor"></ax-color-box>
2775
2413
 
2776
- var AXPFileStorageStatus;
2777
- (function (AXPFileStorageStatus) {
2778
- AXPFileStorageStatus["Temporary"] = "temporary";
2779
- AXPFileStorageStatus["Committed"] = "committed";
2780
- AXPFileStorageStatus["PendingDeletion"] = "pendingDeletion";
2781
- AXPFileStorageStatus["Archived"] = "archived";
2782
- AXPFileStorageStatus["Error"] = "error";
2783
- })(AXPFileStorageStatus || (AXPFileStorageStatus = {}));
2414
+ <ax-label>Quality of image (50-100%)</ax-label>
2415
+ <ax-number-box
2416
+ [changeOnScroll]="true"
2417
+ [minValue]="50"
2418
+ [maxValue]="100"
2419
+ [(ngModel)]="qualityComputed"
2420
+ name="Quality"
2421
+ >
2422
+ </ax-number-box>
2784
2423
 
2785
- class AXPFiltersProviderService {
2786
- async getAll() {
2787
- return Promise.resolve('');
2788
- }
2789
- async execute() {
2790
- return Promise.resolve('');
2791
- }
2792
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2793
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, providedIn: 'root' }); }
2424
+ <ax-label>Scale</ax-label>
2425
+ <ax-number-box [changeOnScroll]="true" [minValue]="1" [(ngModel)]="scale" name="scale"> </ax-number-box>
2426
+ </div>
2427
+
2428
+ <ax-footer>
2429
+ <ax-prefix>
2430
+ </ax-prefix>
2431
+ <ax-suffix>
2432
+ <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"> </ax-button>
2433
+ <ax-button text="Print" look="solid" color="primary" (onClick)="handleClose()">
2434
+ <ax-icon class="fa-solid fa-print"> </ax-icon>
2435
+ </ax-button>
2436
+ </ax-suffix>
2437
+ </ax-footer>`, isInline: true, dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXCheckBoxModule }, { kind: "ngmodule", type: AXNumberBoxModule }, { kind: "component", type: i2$1.AXNumberBoxComponent, selector: "ax-number-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "changeOnScroll", "thousandsSeparator", "padDecimalZeros", "step", "decimals", "decimalStep", "showSpinButtons", "minValue", "maxValue", "class"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "ngmodule", type: AXTextBoxModule }, { kind: "ngmodule", type: AXLabelModule }, { kind: "component", type: i3$1.AXLabelComponent, selector: "ax-label", inputs: ["required", "for"], outputs: ["requiredChange"] }, { 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: AXButtonModule }, { kind: "component", type: i5.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXColorBoxModule }, { kind: "component", type: i6.AXColorBoxComponent, selector: "ax-color-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "showBadge", "showValue", "showClearButton", "showIcon"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange"] }] }); }
2794
2438
  }
2795
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFiltersProviderService, decorators: [{
2796
- type: Injectable,
2439
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXMOrgChartPrintPage, decorators: [{
2440
+ type: Component,
2797
2441
  args: [{
2798
- providedIn: 'root',
2442
+ template: ` <div class="ax-grid ax-grid-cols-[auto_18rem] ax-gap-4 ax-justify-center ax-p-4 ax-items-center">
2443
+ <ax-label>Resolution (px)</ax-label>
2444
+ <div class="ax-flex ax-gap-2 ax-items-center">
2445
+ <ax-number-box
2446
+ [changeOnScroll]="true"
2447
+ [decimals]="4"
2448
+ [value]="width()"
2449
+ (onValueChanged)="calculateRatio($event, 'width')"
2450
+ name="Width"
2451
+ >
2452
+ </ax-number-box>
2453
+ <ax-button [toggleable]="true" [(selected)]="ratio"
2454
+ ><ax-icon><i class="fa-solid fa-vector-square"></i></ax-icon
2455
+ ></ax-button>
2456
+ <ax-number-box
2457
+ [changeOnScroll]="true"
2458
+ [decimals]="4"
2459
+ [value]="height()"
2460
+ (onValueChanged)="calculateRatio($event, 'height')"
2461
+ name="Height"
2462
+ >
2463
+ </ax-number-box>
2464
+ </div>
2465
+
2466
+ <ax-label>Background color</ax-label>
2467
+ <ax-color-box [(ngModel)]="bgcolor"></ax-color-box>
2468
+
2469
+ <ax-label>Quality of image (50-100%)</ax-label>
2470
+ <ax-number-box
2471
+ [changeOnScroll]="true"
2472
+ [minValue]="50"
2473
+ [maxValue]="100"
2474
+ [(ngModel)]="qualityComputed"
2475
+ name="Quality"
2476
+ >
2477
+ </ax-number-box>
2478
+
2479
+ <ax-label>Scale</ax-label>
2480
+ <ax-number-box [changeOnScroll]="true" [minValue]="1" [(ngModel)]="scale" name="scale"> </ax-number-box>
2481
+ </div>
2482
+
2483
+ <ax-footer>
2484
+ <ax-prefix>
2485
+ </ax-prefix>
2486
+ <ax-suffix>
2487
+ <ax-button text="Cancel" look="solid" (onClick)="handleClose(true)"> </ax-button>
2488
+ <ax-button text="Print" look="solid" color="primary" (onClick)="handleClose()">
2489
+ <ax-icon class="fa-solid fa-print"> </ax-icon>
2490
+ </ax-button>
2491
+ </ax-suffix>
2492
+ </ax-footer>`,
2493
+ imports: [
2494
+ FormsModule,
2495
+ AXCheckBoxModule,
2496
+ AXNumberBoxModule,
2497
+ AXTextBoxModule,
2498
+ AXLabelModule,
2499
+ AXDecoratorModule,
2500
+ AXButtonModule,
2501
+ AXColorBoxModule,
2502
+ ],
2799
2503
  }]
2800
2504
  }] });
2801
2505
 
2802
- const AXP_FILE_TYPE_PROVIDER = new InjectionToken('AXP_FILE_TYPE_PROVIDER');
2803
- class AXPFileTypeProviderService {
2506
+ // AXPPdfService
2507
+ class AXPExportService {
2804
2508
  constructor() {
2805
- this.providers = inject(AXP_FILE_TYPE_PROVIDER, { optional: true });
2509
+ this.popupService = inject(AXPopupService);
2806
2510
  }
2807
- async items() {
2808
- const items = [];
2809
- if (Array.isArray(this.providers)) {
2810
- for (const provider of this.providers) {
2811
- items.push(...(await provider.items()));
2511
+ async generateBlobFromElement(element, blobOptions) {
2512
+ const domtoimage = (await import('dom-to-image')).default;
2513
+ const originalWidth = element.scrollWidth;
2514
+ const originalHeight = element.scrollHeight;
2515
+ let popup, options = {}, newOptions = {};
2516
+ if (blobOptions) {
2517
+ ({ popup, ...options } = blobOptions);
2518
+ }
2519
+ if (popup) {
2520
+ const result = await this.popupService.open(AXMOrgChartPrintPage, {
2521
+ header: true,
2522
+ size: 'fit',
2523
+ draggable: true,
2524
+ hasBackdrop: true,
2525
+ title: 'Export Options',
2526
+ data: { data: options },
2527
+ });
2528
+ if (result.data.isCanceled) {
2529
+ throw new Error('Process is Canceled by User!');
2530
+ }
2531
+ else {
2532
+ newOptions = { ...options, ...result.data };
2812
2533
  }
2813
2534
  }
2814
- return items;
2535
+ return domtoimage.toBlob(element, {
2536
+ ...newOptions,
2537
+ width: (newOptions.width ?? originalWidth) * (newOptions?.scale ?? 1),
2538
+ height: (newOptions.height ?? originalHeight) * (newOptions?.scale ?? 1),
2539
+ style: {
2540
+ transform: `scale(${newOptions?.scale ?? 1})`,
2541
+ transformOrigin: 'top left',
2542
+ },
2543
+ });
2815
2544
  }
2816
- async get(name) {
2817
- return (await this.items()).find((c) => c.name == name);
2545
+ download(blob, filename) {
2546
+ const link = document.createElement('a');
2547
+ link.href = URL.createObjectURL(blob);
2548
+ link.download = filename;
2549
+ document.body.appendChild(link);
2550
+ link.click();
2551
+ document.body.removeChild(link);
2552
+ URL.revokeObjectURL(link.href);
2818
2553
  }
2819
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2820
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, providedIn: 'root' }); }
2554
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2555
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, providedIn: 'root' }); }
2821
2556
  }
2822
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPFileTypeProviderService, decorators: [{
2557
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXPExportService, decorators: [{
2823
2558
  type: Injectable,
2824
- args: [{ providedIn: 'root' }]
2559
+ args: [{
2560
+ providedIn: 'root',
2561
+ }]
2825
2562
  }] });
2826
2563
 
2827
- const AXPSignOutAction = createAction('[SignOut] Action');
2828
- const AXPSignInAction = createAction('[SignIn] Action');
2564
+ class AXPRegionalService {
2565
+ }
2829
2566
 
2830
2567
  /**
2831
2568
  * Generated bundle index. Do not edit.
2832
2569
  */
2833
2570
 
2834
- export { ALL_DEFAULT_OPERATORS, AXMEntityCrudService, AXMEntityCrudServiceImpl, AXMWorkflowErrorHandler, AXPAppStartUpProvider, AXPAppStartUpService, AXPClipBoardService, AXPCommonModule, AXPComponentLogoConfig, AXPComponentSlotDirective, AXPComponentSlotLoaderService, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataGenerator, AXPDataProvider, AXPDataSeederService, AXPDexieEntityStorageService, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityDataProvider, AXPEntityDataProviderImpl, AXPEntityQueryType, AXPEntityStorageService, AXPErrorHandlerRegistryService, AXPExportService, AXPExpressionEvaluatorService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFiltersProviderService, AXPFontIconLogoConfig, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPGridLayoutDirective, AXPImageUrlLogoConfig, AXPLogoComponent, AXPMenuProviderService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalService, AXPRelationshipCardinality, AXPRelationshipKind, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValueProvider, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingScope, AXPSettingService, AXPSignInAction, AXPSignOutAction, AXPStickyDirective, AXPTextLogoConfig, AXPToastAction, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_DATA_SEEDER_TOKEN, AXP_FILE_TYPE_PROVIDER, AXP_MENU_PROVIDER, AXP_PLATFORM_CONFIG_TOKEN, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, configPlatform, createAllQueryView, createQueryView, getEntityInfo, resolveActionLook };
2571
+ export { ALL_DEFAULT_OPERATORS, AXMWorkflowErrorHandler, AXPAppStartUpProvider, AXPAppStartUpService, AXPClipBoardService, AXPCommonModule, AXPComponentLogoConfig, AXPComponentSlotDirective, AXPComponentSlotLoaderService, AXPComponentSlotModule, AXPComponentSlotRegistryService, AXPCustomOperatorService, AXPCustomOperatorServiceImpl, AXPDataGenerator, AXPDataProvider, AXPDialogConfirmAction, AXPEntityCommandScope, AXPEntityQueryType, AXPErrorHandlerRegistryService, AXPExportService, AXPFileStorageService, AXPFileStorageStatus, AXPFileTypeProviderService, AXPFilterOperatorMiddlewareService, AXPFilterOperatorMiddlewareServiceImpl, AXPFiltersProviderService, AXPFontIconLogoConfig, AXPFooterTextSlotComponent, AXPGlobalErrorHandler, AXPGridLayoutDirective, AXPImageUrlLogoConfig, AXPLogoComponent, AXPMenuProviderService, AXPMenuSearchDefinitionProvider, AXPMenuSearchProvider, AXPMenuService, AXPNavBarSlotComponent, AXPNavigateWorkflow, AXPPlatformDefaultConfigs, AXPRedirectEvent, AXPRefreshEvent, AXPRegionalService, AXPRelationshipCardinality, AXPRelationshipKind, AXPSearchCommandProvider, AXPSearchDefinitionActionBuilder, AXPSearchDefinitionBuilder, AXPSearchDefinitionProviderContext, AXPSearchDefinitionProviderService, AXPSearchService, AXPSettingDefaultValueProvider, AXPSettingDefinitionGroupBuilder, AXPSettingDefinitionProviderContext, AXPSettingDefinitionProviderService, AXPSettingDefinitionSectionBuilder, AXPSettingScope, AXPSettingService, AXPStickyDirective, AXPTextLogoConfig, AXPToastAction, AXPWorkflowNavigateAction, AXPWorkflowRouterNavigateAction, AXP_APP_VERSION_PROVIDER, AXP_FILE_TYPE_INFO_PROVIDER, AXP_MENU_PROVIDER, AXP_PLATFORM_CONFIG_TOKEN, AXP_ROOT_CONFIG_TOKEN, AXP_SEARCH_DEFINITION_PROVIDER, AXP_SEARCH_PROVIDER, AXP_SETTING_DEFINITION_PROVIDER, AXP_SETTING_VALUE_PROVIDER, BETWEEN_OPER, BOOLEAN_OPERATORS, CONTAINS_OPER, DATE_OPERATORS, ENDS_WITH_OPER, ENVIRONMENT, EQ_OPER, GTE_OPER, GT_OPER, IS_EMPTY_OPER, IS_NOT_EMPTY_OPER, LTE_OPER, LT_OPER, NOT_CONTAINS_OPER, NOT_EQ_OPER, NUMBER_OPERATORS, STARTS_WITH_OPER, STRING_OPERATORS, configPlatform, createAllQueryView, createQueryView, getEntityInfo, resolveActionLook };
2835
2572
  //# sourceMappingURL=acorex-platform-common.mjs.map