@acorex-platform/framework-client 1.0.0 → 1.0.2

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 (59) hide show
  1. package/fesm2022/acorex-platform-framework-client-auth.mjs +113 -45
  2. package/fesm2022/acorex-platform-framework-client-auth.mjs.map +1 -1
  3. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs → acorex-platform-framework-client-common-common-settings.provider-Cyr1DaiD.mjs} +19 -2
  4. package/fesm2022/{acorex-platform-framework-client-common-common-settings.provider-ChU2tvyt.mjs.map → acorex-platform-framework-client-common-common-settings.provider-Cyr1DaiD.mjs.map} +1 -1
  5. package/fesm2022/acorex-platform-framework-client-common.mjs +445 -191
  6. package/fesm2022/acorex-platform-framework-client-common.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-framework-client-core.mjs +7 -2
  8. package/fesm2022/acorex-platform-framework-client-core.mjs.map +1 -1
  9. package/fesm2022/acorex-platform-framework-client-layout-components.mjs +399 -132
  10. package/fesm2022/acorex-platform-framework-client-layout-components.mjs.map +1 -1
  11. package/fesm2022/{acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-i9oZEXUR.mjs → acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs} +616 -196
  12. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-D2kZxLOh.mjs.map +1 -0
  13. package/fesm2022/{acorex-platform-framework-client-layout-entity-attachments-page.component-DyrvSBEY.mjs → acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs} +10 -5
  14. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-BManmr01.mjs.map +1 -0
  15. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8s_JEV8.mjs → acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-framework-client-layout-entity-bulk-entity.command-B8s_JEV8.mjs.map → acorex-platform-framework-client-layout-entity-bulk-entity.command-B8XsnrnO.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs → acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs} +28 -12
  18. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-DGZVS11E.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-fATD9Uax.mjs → acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs} +2 -2
  20. package/fesm2022/{acorex-platform-framework-client-layout-entity-gallery-page.component-fATD9Uax.mjs.map → acorex-platform-framework-client-layout-entity-gallery-page.component-Be348QCj.mjs.map} +1 -1
  21. package/fesm2022/acorex-platform-framework-client-layout-entity.mjs +1 -1
  22. package/fesm2022/acorex-platform-framework-client-layout-views.mjs +71 -10
  23. package/fesm2022/acorex-platform-framework-client-layout-views.mjs.map +1 -1
  24. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs +147 -171
  25. package/fesm2022/acorex-platform-framework-client-layout-widget-core.mjs.map +1 -1
  26. package/fesm2022/{acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs → acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs} +342 -60
  27. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-M8SZFPQx.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs} +3 -3
  29. package/fesm2022/{acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-BiuahYd8.mjs.map → acorex-platform-framework-client-layout-widgets-repeater-widget-column.component-DsLgZbZA.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs} +2 -2
  31. package/fesm2022/{acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-CU_5b_te.mjs.map → acorex-platform-framework-client-layout-widgets-text-block-widget-designer.component-Vpz3itLZ.mjs.map} +1 -1
  32. package/fesm2022/acorex-platform-framework-client-layout-widgets.mjs +1 -1
  33. package/fesm2022/acorex-platform-framework-client-realtime.mjs +49 -7
  34. package/fesm2022/acorex-platform-framework-client-realtime.mjs.map +1 -1
  35. package/fesm2022/acorex-platform-framework-client-themes-default.mjs +40 -20
  36. package/fesm2022/acorex-platform-framework-client-themes-default.mjs.map +1 -1
  37. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs +1 -1
  38. package/fesm2022/acorex-platform-framework-client-themes-shared.mjs.map +1 -1
  39. package/i18n/en-AU/general.json +16 -4
  40. package/i18n/en-AU/layout.json +2 -1
  41. package/i18n/en-US/general.json +16 -4
  42. package/i18n/en-US/layout.json +2 -1
  43. package/i18n/fa-IR/general.json +16 -4
  44. package/i18n/fa-IR/layout.json +2 -1
  45. package/layout/widget-core/README.md +1 -1
  46. package/layout/widgets/README.md +2 -2
  47. package/package.json +2 -2
  48. package/types/acorex-platform-framework-client-auth.d.ts +15 -1
  49. package/types/acorex-platform-framework-client-common.d.ts +73 -7
  50. package/types/acorex-platform-framework-client-layout-components.d.ts +38 -7
  51. package/types/acorex-platform-framework-client-layout-entity.d.ts +86 -34
  52. package/types/acorex-platform-framework-client-layout-views.d.ts +15 -0
  53. package/types/acorex-platform-framework-client-layout-widget-core.d.ts +38 -13
  54. package/types/acorex-platform-framework-client-layout-widgets.d.ts +25 -7
  55. package/types/acorex-platform-framework-client-realtime.d.ts +5 -0
  56. package/fesm2022/acorex-platform-framework-client-layout-entity-acorex-platform-framework-client-layout-entity-i9oZEXUR.mjs.map +0 -1
  57. package/fesm2022/acorex-platform-framework-client-layout-entity-attachments-page.component-DyrvSBEY.mjs.map +0 -1
  58. package/fesm2022/acorex-platform-framework-client-layout-entity-file-list-popup.component-C0LgUzzv.mjs.map +0 -1
  59. package/fesm2022/acorex-platform-framework-client-layout-widgets-acorex-platform-framework-client-layout-widgets-Drmmu4HQ.mjs.map +0 -1
@@ -2,7 +2,7 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, signal, computed, effect, untracked, Injectable, inject, ElementRef, DestroyRef, PLATFORM_ID, EventEmitter, Injector, ChangeDetectorRef, ViewChild, Input, Output, ChangeDetectionStrategy, Component, input, output, ViewContainerRef, Directive, NgModule } from '@angular/core';
3
3
  import { AXPContextStore, AXPDeviceService, AXPExpressionEvaluatorService, AXPDebugService, FORM_DIRTY_TRACE_NS, OVERLAY_WIDGET_SETTLE_TRACE_NS } from '@acorex-platform/framework-client/core';
4
4
  import { AXPPageStatus, AXPWidgetStatus, AXP_WIDGET_TOKEN, AXP_WIDGET_COLUMN_TOKEN, layoutProfileMediumFromRenderMode, resolveLayoutProfile, createStringProperty, createBooleanProperty, createSelectProperty, createNumberProperty, cloneProperty } from '@acorex-platform/framework-shared/widget-core';
5
- import { cloneDeep, set, get, isEqual, isNil, isUndefined, isObjectLike, merge, sum, isEmpty, isString } from 'lodash-es';
5
+ import { cloneDeep, get, isEqual, set, isNil, isUndefined, isObjectLike, merge, sum, isEmpty, isString } from 'lodash-es';
6
6
  import { AXPWidgetsList, isSelectionValueEqual, isFormValueEqual, runtimeQueryPayloadData, runtimeQueryCollectionData, extractValue, axpGridItemPlacementClassMap, getSmart, summarizeFormContextDirtyDiff, AXPWidgetsCatalog } from '@acorex-platform/framework-shared/core';
7
7
  import { ENTITY_GET_BY_ID_DEFAULT } from '@acorex-platform/framework-shared/runtime';
8
8
  export { AXP_WIDGETS_ACTION_CATEGORY, AXP_WIDGETS_ACTION_SUB_CONTROLS, AXP_WIDGETS_ADVANCE_CATEGORY, AXP_WIDGETS_ADVANCE_SUB_DATA, AXP_WIDGETS_ADVANCE_SUB_INPUT, AXP_WIDGETS_ADVANCE_SUB_MEDIA, AXP_WIDGETS_ADVANCE_SUB_TOOLS, AXP_WIDGETS_AI_CATEGORY, AXP_WIDGETS_CATEGORIES, AXP_WIDGETS_EDITOR_CATEGORY, AXP_WIDGETS_EDITOR_SUB_CHOICE, AXP_WIDGETS_EDITOR_SUB_COMPOSITE, AXP_WIDGETS_EDITOR_SUB_CONFIG, AXP_WIDGETS_EDITOR_SUB_DATETIME, AXP_WIDGETS_EDITOR_SUB_NUMERIC, AXP_WIDGETS_EDITOR_SUB_RICH, AXP_WIDGETS_EDITOR_SUB_TEXT_INPUTS, AXP_WIDGETS_EDITOR_SUB_VISUAL, AXP_WIDGETS_LAYOUT_CATEGORY, AXP_WIDGETS_LAYOUT_SUB_GRID, AXP_WIDGETS_LAYOUT_SUB_LISTS, AXP_WIDGETS_LAYOUT_SUB_SHELL, AXP_WIDGETS_LAYOUT_SUB_SURFACES, AXP_WIDGETS_LAYOUT_SUB_TABS, AXP_WIDGETS_LAYOUT_SUB_UTILITY, normalizeWidgetCategories } from '@acorex-platform/framework-shared/runtime';
@@ -402,6 +402,83 @@ class AXPWidgetSerializationHelper {
402
402
  }
403
403
  //#endregion
404
404
 
405
+ //#endregion
406
+ //#region ----- Helpers -----
407
+ function isBlankExposeValue(value) {
408
+ if (value == null) {
409
+ return true;
410
+ }
411
+ if (typeof value === 'string') {
412
+ return value.trim() === '';
413
+ }
414
+ if (Array.isArray(value)) {
415
+ return value.length === 0;
416
+ }
417
+ return false;
418
+ }
419
+ function readExposeMapping(entry) {
420
+ if (typeof entry === 'string') {
421
+ const path = entry.trim();
422
+ if (!path) {
423
+ return null;
424
+ }
425
+ return { source: path, target: path };
426
+ }
427
+ const source = entry?.source?.trim() ?? '';
428
+ const target = entry?.target?.trim() ?? '';
429
+ if (!source || !target) {
430
+ return null;
431
+ }
432
+ return { source, target };
433
+ }
434
+ /** True when writing `target` would replace this widget's own value or its parent object. */
435
+ function exposeTargetTouchesWidget(target, widgetPath) {
436
+ if (!widgetPath) {
437
+ return false;
438
+ }
439
+ if (target === widgetPath) {
440
+ return true;
441
+ }
442
+ if (widgetPath.startsWith(`${target}.`) || widgetPath.startsWith(`${target}[`)) {
443
+ return true;
444
+ }
445
+ if (target.startsWith(`${widgetPath}.`) || target.startsWith(`${widgetPath}[`)) {
446
+ return true;
447
+ }
448
+ return false;
449
+ }
450
+ //#endregion
451
+ //#region ----- Resolve -----
452
+ /**
453
+ * Leaf writes for opening a form. Skips empty sources, the widget's own path,
454
+ * and targets that already hold a different value.
455
+ */
456
+ function resolveWidgetExposeHydrateWrites(input) {
457
+ const items = input.items.filter((item) => item != null);
458
+ if (!items.length || !input.expose?.length) {
459
+ return [];
460
+ }
461
+ const writes = [];
462
+ for (const entry of input.expose) {
463
+ const mapping = readExposeMapping(entry);
464
+ if (!mapping || exposeTargetTouchesWidget(mapping.target, input.widgetPath)) {
465
+ continue;
466
+ }
467
+ const sources = items.map((item) => get(item, mapping.source));
468
+ if (sources.some((value) => isBlankExposeValue(value))) {
469
+ continue;
470
+ }
471
+ const nextValue = input.multiple ? sources : sources[0];
472
+ const current = input.readTarget(mapping.target);
473
+ if (isEqual(current, nextValue) || !isBlankExposeValue(current)) {
474
+ continue;
475
+ }
476
+ writes.push({ path: mapping.target, value: nextValue });
477
+ }
478
+ return writes;
479
+ }
480
+ //#endregion
481
+
405
482
  class AXPWidgetCoreElement {
406
483
  api() {
407
484
  return {};
@@ -2038,6 +2115,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2038
2115
  type: Injectable
2039
2116
  }] });
2040
2117
 
2118
+ const AXP_WIDGET_COLUMN_AUTO_FIT = new InjectionToken('AXP_WIDGET_COLUMN_AUTO_FIT');
2119
+
2041
2120
  //#region ---- Imports ----
2042
2121
  /**
2043
2122
  * Injection token for widget definition providers.
@@ -2123,8 +2202,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2123
2202
  }]
2124
2203
  }] });
2125
2204
 
2126
- const AXP_WIDGET_COLUMN_AUTO_FIT = new InjectionToken('AXP_WIDGET_COLUMN_AUTO_FIT');
2127
-
2128
2205
  class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2129
2206
  constructor() {
2130
2207
  super(...arguments);
@@ -2200,6 +2277,9 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2200
2277
  this.loadingRow.set(row);
2201
2278
  await this.grid.expandRow(row);
2202
2279
  this.loadingRow.set(null);
2280
+ this.contentAutoFitSettled = false;
2281
+ this.contentAutoFitShouldSettle = false;
2282
+ this.scheduleContentAutoFit();
2203
2283
  // if (row.data?.__meta__?.expanded === undefined) {
2204
2284
  // this.width = `${parseInt(this.width as string) + 24}px`;
2205
2285
  // }
@@ -2256,9 +2336,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2256
2336
  return this.normalizeColumnAlignment(align);
2257
2337
  }
2258
2338
  if (typeof align === 'object' && !Array.isArray(align)) {
2259
- const raw = side === 'header'
2260
- ? align.header
2261
- : align.cell;
2339
+ const raw = side === 'header' ? align.header : align.cell;
2262
2340
  return this.normalizeColumnAlignment(raw);
2263
2341
  }
2264
2342
  return 'start';
@@ -2314,12 +2392,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2314
2392
  },
2315
2393
  ],
2316
2394
  });
2317
- this.width =
2318
- this.mergedOptions().width === 'auto'
2319
- ? 'auto'
2320
- : this.customWidth
2321
- ? this.customWidth
2322
- : (this.mergedOptions().width ?? '200px');
2395
+ this.width = this.mergedOptions().width === 'auto' ? 'auto' : this.customWidth ? this.customWidth : (this.mergedOptions().width ?? '200px');
2323
2396
  this.allowResizing = this.mergedOptions().allowResizing !== false;
2324
2397
  this.allowSorting = this.sortEnabled;
2325
2398
  this.syncAutoWidthIntent();
@@ -2383,9 +2456,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2383
2456
  return;
2384
2457
  }
2385
2458
  this.bandLocaleWatchStarted = true;
2386
- this.translation.langChanges$
2387
- .pipe(takeUntilDestroyed(this.destroyRef))
2388
- .subscribe(() => {
2459
+ this.translation.langChanges$.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(() => {
2389
2460
  if (this.isBand && this.bandCaptionI18nKey) {
2390
2461
  this.resolveBandCaption();
2391
2462
  }
@@ -2396,8 +2467,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2396
2467
  return;
2397
2468
  }
2398
2469
  this.caption = text;
2399
- const topLevel = this.grid
2400
- .topLevelColumnsList;
2470
+ const topLevel = this.grid.topLevelColumnsList;
2401
2471
  if (topLevel) {
2402
2472
  topLevel.set([...topLevel()]);
2403
2473
  }
@@ -2429,9 +2499,7 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2429
2499
  // Use a hash of key properties instead of full JSON.stringify
2430
2500
  // This is much faster for large objects
2431
2501
  const keyProps = ['id', 'code', 'name', 'title'];
2432
- const keyValues = keyProps
2433
- .map((prop) => data?.[prop])
2434
- .filter((v) => v != null);
2502
+ const keyValues = keyProps.map((prop) => data?.[prop]).filter((v) => v != null);
2435
2503
  if (keyValues.length > 0) {
2436
2504
  return `row-${keyValues.join('-')}`;
2437
2505
  }
@@ -2482,7 +2550,8 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2482
2550
  if (!isPlatformBrowser(this.platformId) || !this.autoWidthColumn || this.contentAutoFitSettled) {
2483
2551
  return;
2484
2552
  }
2485
- this.contentAutoFitShouldSettle = this.contentAutoFitShouldSettle || request?.settle === true;
2553
+ const allowSettle = this.expandHandler !== true;
2554
+ this.contentAutoFitShouldSettle = this.contentAutoFitShouldSettle || (request?.settle === true && allowSettle);
2486
2555
  if (this.contentAutoFitTimer != null) {
2487
2556
  clearTimeout(this.contentAutoFitTimer);
2488
2557
  }
@@ -2654,23 +2723,13 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2654
2723
  [class.flex]="!sortEnabled"
2655
2724
  [class.items-center]="!sortEnabled"
2656
2725
  [class.axp-widget-column-header--sortable]="sortEnabled"
2657
- [class.axp-widget-column-header--sort-at-start]="
2658
- sortEnabled && getHeaderTextAlign() === 'end'
2659
- "
2660
- [class.axp-widget-column-header--sort-active]="
2661
- headerSortDirection === 'asc' || headerSortDirection === 'desc'
2662
- "
2726
+ [class.axp-widget-column-header--sort-at-start]="sortEnabled && getHeaderTextAlign() === 'end'"
2727
+ [class.axp-widget-column-header--sort-active]="headerSortDirection === 'asc' || headerSortDirection === 'desc'"
2663
2728
  [class.gap-1]="!sortEnabled"
2664
- [style.justify-content]="
2665
- sortEnabled ? 'flex-start' : getHeaderJustifyContent()
2666
- "
2729
+ [style.justify-content]="sortEnabled ? 'flex-start' : getHeaderJustifyContent()"
2667
2730
  (click)="onHeaderClick($event)"
2668
2731
  >
2669
- <span
2670
- class="axp-widget-column-header__caption truncate"
2671
- [class.axp-widget-column-header__caption--with-sort]="sortEnabled"
2672
- [style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
2673
- >
2732
+ <span class="axp-widget-column-header__caption truncate" [class.axp-widget-column-header__caption--with-sort]="sortEnabled" [style.text-align]="sortEnabled ? getHeaderTextAlign() : null">
2674
2733
  @if (isBand) {
2675
2734
  {{ caption }}
2676
2735
  } @else {
@@ -2680,84 +2739,40 @@ class AXPWidgetColumnRendererComponent extends AXDataTableColumnComponent {
2680
2739
  @if (sortEnabled) {
2681
2740
  <span class="axp-widget-column-header__sort">
2682
2741
  @if (headerSortPriority !== undefined && headerSortPriority > 1) {
2683
- <span
2684
- class="axp-widget-column-header__sort-priority text-xs opacity-70"
2685
- >{{ headerSortPriority }}</span
2686
- >
2742
+ <span class="axp-widget-column-header__sort-priority text-xs opacity-70">{{ headerSortPriority }}</span>
2687
2743
  }
2688
- <i
2689
- class="fa-solid fa-arrow-up-long text-neutral-400"
2690
- [class.text-primary]="headerSortDirection === 'asc'"
2691
- ></i>
2692
- <i
2693
- class="fa-solid fa-arrow-down-long text-neutral-400"
2694
- [class.text-primary]="headerSortDirection === 'desc'"
2695
- ></i>
2744
+ <i class="fa-solid fa-arrow-up-long text-neutral-400" [class.text-primary]="headerSortDirection === 'asc'"></i>
2745
+ <i class="fa-solid fa-arrow-down-long text-neutral-400" [class.text-primary]="headerSortDirection === 'desc'"></i>
2696
2746
  </span>
2697
2747
  }
2698
2748
  </div>
2699
2749
  </ng-template>
2700
2750
  <ng-template #cell let-row>
2701
2751
  @if (expandHandler) {
2702
- <div
2703
- class="ax-data-table-nested-indent w-full"
2704
- [attr.data-level]="row.data?.__meta__?.level || 0"
2705
- >
2752
+ <div class="ax-data-table-nested-indent w-full" [attr.data-level]="row.data?.__meta__?.level || 0">
2706
2753
  @if (hasExpandableRow(row)) {
2707
- <div
2708
- (click)="handleExpandRow(row, $event)"
2709
- class="ax-expand-handler"
2710
- id="ax-expand-handler-container"
2711
- >
2754
+ <div (click)="handleExpandRow(row, $event)" class="ax-expand-handler" id="ax-expand-handler-container">
2712
2755
  @if (loadingRow() === row) {
2713
- <i
2714
- class="fas fa-spinner-third animate-twSpin animate-infinite"
2715
- ></i>
2756
+ <i class="fas fa-spinner-third animate-twSpin animate-infinite"></i>
2716
2757
  } @else {
2717
2758
  @if (row.data?.__meta__?.expanded) {
2718
- <i
2719
- [class]="
2720
- customCollapseIcon ||
2721
- 'far fa-minus-square text-md opacity-75'
2722
- "
2723
- ></i>
2759
+ <i [class]="customCollapseIcon || 'far fa-minus-square text-md opacity-75'"></i>
2724
2760
  } @else {
2725
- <i
2726
- [class]="
2727
- customExpandIcon || 'far fa-plus-square text-md opacity-75'
2728
- "
2729
- ></i>
2761
+ <i [class]="customExpandIcon || 'far fa-plus-square text-md opacity-75'"></i>
2730
2762
  }
2731
2763
  }
2732
2764
  </div>
2733
2765
  }
2734
2766
  @if (component && row?.data) {
2735
2767
  <div class="ax-data-table-cell-text min-w-0 flex-1">
2736
- <ng-container
2737
- *ngComponentOutlet="
2738
- component;
2739
- injector: getRowInjector(row.data);
2740
- inputs: getInputs(row.data)
2741
- "
2742
- ></ng-container>
2768
+ <ng-container *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"></ng-container>
2743
2769
  </div>
2744
2770
  }
2745
2771
  </div>
2746
2772
  } @else {
2747
- <div
2748
- class="w-full min-w-0 max-w-full"
2749
- [class.flex]="getCellUseFlexLayout()"
2750
- [class.items-center]="getCellUseFlexLayout()"
2751
- [style.justify-content]="getCellJustifyContent()"
2752
- >
2773
+ <div class="w-full min-w-0 max-w-full" [class.flex]="getCellUseFlexLayout()" [class.items-center]="getCellUseFlexLayout()" [style.justify-content]="getCellJustifyContent()">
2753
2774
  @if (component && row?.data) {
2754
- <ng-container
2755
- *ngComponentOutlet="
2756
- component;
2757
- injector: getRowInjector(row.data);
2758
- inputs: getInputs(row.data)
2759
- "
2760
- ></ng-container>
2775
+ <ng-container *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"></ng-container>
2761
2776
  }
2762
2777
  </div>
2763
2778
  }
@@ -2775,23 +2790,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2775
2790
  [class.flex]="!sortEnabled"
2776
2791
  [class.items-center]="!sortEnabled"
2777
2792
  [class.axp-widget-column-header--sortable]="sortEnabled"
2778
- [class.axp-widget-column-header--sort-at-start]="
2779
- sortEnabled && getHeaderTextAlign() === 'end'
2780
- "
2781
- [class.axp-widget-column-header--sort-active]="
2782
- headerSortDirection === 'asc' || headerSortDirection === 'desc'
2783
- "
2793
+ [class.axp-widget-column-header--sort-at-start]="sortEnabled && getHeaderTextAlign() === 'end'"
2794
+ [class.axp-widget-column-header--sort-active]="headerSortDirection === 'asc' || headerSortDirection === 'desc'"
2784
2795
  [class.gap-1]="!sortEnabled"
2785
- [style.justify-content]="
2786
- sortEnabled ? 'flex-start' : getHeaderJustifyContent()
2787
- "
2796
+ [style.justify-content]="sortEnabled ? 'flex-start' : getHeaderJustifyContent()"
2788
2797
  (click)="onHeaderClick($event)"
2789
2798
  >
2790
- <span
2791
- class="axp-widget-column-header__caption truncate"
2792
- [class.axp-widget-column-header__caption--with-sort]="sortEnabled"
2793
- [style.text-align]="sortEnabled ? getHeaderTextAlign() : null"
2794
- >
2799
+ <span class="axp-widget-column-header__caption truncate" [class.axp-widget-column-header__caption--with-sort]="sortEnabled" [style.text-align]="sortEnabled ? getHeaderTextAlign() : null">
2795
2800
  @if (isBand) {
2796
2801
  {{ caption }}
2797
2802
  } @else {
@@ -2801,84 +2806,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
2801
2806
  @if (sortEnabled) {
2802
2807
  <span class="axp-widget-column-header__sort">
2803
2808
  @if (headerSortPriority !== undefined && headerSortPriority > 1) {
2804
- <span
2805
- class="axp-widget-column-header__sort-priority text-xs opacity-70"
2806
- >{{ headerSortPriority }}</span
2807
- >
2809
+ <span class="axp-widget-column-header__sort-priority text-xs opacity-70">{{ headerSortPriority }}</span>
2808
2810
  }
2809
- <i
2810
- class="fa-solid fa-arrow-up-long text-neutral-400"
2811
- [class.text-primary]="headerSortDirection === 'asc'"
2812
- ></i>
2813
- <i
2814
- class="fa-solid fa-arrow-down-long text-neutral-400"
2815
- [class.text-primary]="headerSortDirection === 'desc'"
2816
- ></i>
2811
+ <i class="fa-solid fa-arrow-up-long text-neutral-400" [class.text-primary]="headerSortDirection === 'asc'"></i>
2812
+ <i class="fa-solid fa-arrow-down-long text-neutral-400" [class.text-primary]="headerSortDirection === 'desc'"></i>
2817
2813
  </span>
2818
2814
  }
2819
2815
  </div>
2820
2816
  </ng-template>
2821
2817
  <ng-template #cell let-row>
2822
2818
  @if (expandHandler) {
2823
- <div
2824
- class="ax-data-table-nested-indent w-full"
2825
- [attr.data-level]="row.data?.__meta__?.level || 0"
2826
- >
2819
+ <div class="ax-data-table-nested-indent w-full" [attr.data-level]="row.data?.__meta__?.level || 0">
2827
2820
  @if (hasExpandableRow(row)) {
2828
- <div
2829
- (click)="handleExpandRow(row, $event)"
2830
- class="ax-expand-handler"
2831
- id="ax-expand-handler-container"
2832
- >
2821
+ <div (click)="handleExpandRow(row, $event)" class="ax-expand-handler" id="ax-expand-handler-container">
2833
2822
  @if (loadingRow() === row) {
2834
- <i
2835
- class="fas fa-spinner-third animate-twSpin animate-infinite"
2836
- ></i>
2823
+ <i class="fas fa-spinner-third animate-twSpin animate-infinite"></i>
2837
2824
  } @else {
2838
2825
  @if (row.data?.__meta__?.expanded) {
2839
- <i
2840
- [class]="
2841
- customCollapseIcon ||
2842
- 'far fa-minus-square text-md opacity-75'
2843
- "
2844
- ></i>
2826
+ <i [class]="customCollapseIcon || 'far fa-minus-square text-md opacity-75'"></i>
2845
2827
  } @else {
2846
- <i
2847
- [class]="
2848
- customExpandIcon || 'far fa-plus-square text-md opacity-75'
2849
- "
2850
- ></i>
2828
+ <i [class]="customExpandIcon || 'far fa-plus-square text-md opacity-75'"></i>
2851
2829
  }
2852
2830
  }
2853
2831
  </div>
2854
2832
  }
2855
2833
  @if (component && row?.data) {
2856
2834
  <div class="ax-data-table-cell-text min-w-0 flex-1">
2857
- <ng-container
2858
- *ngComponentOutlet="
2859
- component;
2860
- injector: getRowInjector(row.data);
2861
- inputs: getInputs(row.data)
2862
- "
2863
- ></ng-container>
2835
+ <ng-container *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"></ng-container>
2864
2836
  </div>
2865
2837
  }
2866
2838
  </div>
2867
2839
  } @else {
2868
- <div
2869
- class="w-full min-w-0 max-w-full"
2870
- [class.flex]="getCellUseFlexLayout()"
2871
- [class.items-center]="getCellUseFlexLayout()"
2872
- [style.justify-content]="getCellJustifyContent()"
2873
- >
2840
+ <div class="w-full min-w-0 max-w-full" [class.flex]="getCellUseFlexLayout()" [class.items-center]="getCellUseFlexLayout()" [style.justify-content]="getCellJustifyContent()">
2874
2841
  @if (component && row?.data) {
2875
- <ng-container
2876
- *ngComponentOutlet="
2877
- component;
2878
- injector: getRowInjector(row.data);
2879
- inputs: getInputs(row.data)
2880
- "
2881
- ></ng-container>
2842
+ <ng-container *ngComponentOutlet="component; injector: getRowInjector(row.data); inputs: getInputs(row.data)"></ng-container>
2882
2843
  }
2883
2844
  </div>
2884
2845
  }
@@ -3346,7 +3307,8 @@ class AXPWidgetRendererDirective {
3346
3307
  this.onContextChanged = new Subject();
3347
3308
  this.onLoadEvent = new Subject();
3348
3309
  //#region ---- Performance Optimization Properties ----
3349
- this.contextUpdateQueue = new Set();
3310
+ /** Path → whether `onContextChanged` (triggers) should fire. Hydrate writes stay false. */
3311
+ this.contextUpdateQueue = new Map();
3350
3312
  this.contextUpdateTimeout = null;
3351
3313
  this.CONTEXT_UPDATE_DEBOUNCE_MS = 4; // ~250fps for large forms
3352
3314
  // Removed visibility detection - not needed for current implementation
@@ -3358,7 +3320,8 @@ class AXPWidgetRendererDirective {
3358
3320
  // Expression result tracking
3359
3321
  this.lastExpressionResults = new Map();
3360
3322
  // Buffer for context changes that happen before initial render completes
3361
- this.preRenderContextQueue = new Set();
3323
+ /** Path → whether buffered pre-render changes should fire triggers. `*` marks a full context init. */
3324
+ this.preRenderContextQueue = new Map();
3362
3325
  /**
3363
3326
  * Last context {@link AXPContextChangeEvent} handled by this renderer.
3364
3327
  * Prevents re-queueing when the effect re-runs while `lastChange` in the store is unchanged
@@ -3373,11 +3336,11 @@ class AXPWidgetRendererDirective {
3373
3336
  if (changed.state === 'initiated' && (!changed.path || changed.path === '')) {
3374
3337
  // Mark that we need to re-evaluate all expressions when initial render completes
3375
3338
  // This handles the case where context is set before/during widget initialization
3376
- this.preRenderContextQueue.add('*'); // Use '*' as a marker for full context initialization
3339
+ this.rememberQueuedPath(this.preRenderContextQueue, '*', true);
3377
3340
  // console.log(`📝 [${this.node().type}] Buffered initial context set`);
3378
3341
  }
3379
3342
  else if (changed.path) {
3380
- this.preRenderContextQueue.add(changed.path);
3343
+ this.rememberQueuedPath(this.preRenderContextQueue, changed.path, changed.origin !== 'hydrate');
3381
3344
  // console.log(`📝 [${this.node().type}] Buffered pre-render context change: ${changed.path}`);
3382
3345
  }
3383
3346
  return;
@@ -3397,7 +3360,7 @@ class AXPWidgetRendererDirective {
3397
3360
  else if (changed.path && this.isRelevantContextChange(changed.path)) {
3398
3361
  const changedPath = changed.path;
3399
3362
  if (this.markContextChangeHandled(changed)) {
3400
- this.queueContextUpdate(changedPath);
3363
+ this.queueContextUpdate(changedPath, changed.origin !== 'hydrate');
3401
3364
  }
3402
3365
  }
3403
3366
  await this.updateVisibility();
@@ -3455,10 +3418,13 @@ class AXPWidgetRendererDirective {
3455
3418
  this.lastProcessedContextChangeRef = changed;
3456
3419
  return true;
3457
3420
  }
3458
- queueContextUpdate(path) {
3421
+ rememberQueuedPath(queue, path, notifyTriggers) {
3422
+ queue.set(path, (queue.get(path) ?? false) || notifyTriggers);
3423
+ }
3424
+ queueContextUpdate(path, notifyTriggers = true) {
3459
3425
  if (path) {
3460
3426
  // console.log(`🔄 [${this.node().type}] Queueing context update for path: ${path}`);
3461
- this.contextUpdateQueue.add(path);
3427
+ this.rememberQueuedPath(this.contextUpdateQueue, path, notifyTriggers);
3462
3428
  // Clear existing timeout
3463
3429
  if (this.contextUpdateTimeout) {
3464
3430
  clearTimeout(this.contextUpdateTimeout);
@@ -3474,8 +3440,10 @@ class AXPWidgetRendererDirective {
3474
3440
  if (this.contextUpdateQueue.size === 0)
3475
3441
  return;
3476
3442
  const startTime = performance.now();
3477
- const paths = Array.from(this.contextUpdateQueue);
3443
+ const queued = Array.from(this.contextUpdateQueue.entries());
3478
3444
  this.contextUpdateQueue.clear();
3445
+ const paths = queued.map(([path]) => path);
3446
+ const triggerPaths = queued.filter(([, notifyTriggers]) => notifyTriggers).map(([path]) => path);
3479
3447
  // console.log(`📊 [${this.node().type}] Processing ${paths.length} paths:`, paths);
3480
3448
  // Clear expression cache only if changed paths affect this widget's expressions
3481
3449
  const shouldClearCache = paths.some((path) => this.isPathAffectingExpressions(path));
@@ -3499,8 +3467,7 @@ class AXPWidgetRendererDirective {
3499
3467
  await this.updateVisibility();
3500
3468
  }
3501
3469
  const visibilityTime = performance.now() - visibilityStartTime;
3502
- // Emit context changes
3503
- paths.forEach((path) => {
3470
+ triggerPaths.forEach((path) => {
3504
3471
  this.onContextChanged.next({ path });
3505
3472
  });
3506
3473
  const totalTime = performance.now() - startTime;
@@ -3980,7 +3947,9 @@ class AXPWidgetRendererDirective {
3980
3947
  // console.log(
3981
3948
  // `🚀 [${this.node().type}] Processing ${this.preRenderContextQueue.size} buffered pre-render changes`,
3982
3949
  // );
3983
- this.preRenderContextQueue.forEach((p) => this.contextUpdateQueue.add(p));
3950
+ this.preRenderContextQueue.forEach((notifyTriggers, path) => {
3951
+ this.rememberQueuedPath(this.contextUpdateQueue, path, notifyTriggers);
3952
+ });
3984
3953
  this.preRenderContextQueue.clear();
3985
3954
  await this.processBatchedUpdates();
3986
3955
  }
@@ -5112,6 +5081,13 @@ const AXP_ALLOW_SEARCH_PROPERTY = createBooleanProperty({
5112
5081
  group: AXP_BEHAVIOR_PROPERTY_GROUP,
5113
5082
  defaultValue: false,
5114
5083
  });
5084
+ const AXP_PREFETCH_PROPERTY = createBooleanProperty({
5085
+ name: 'prefetch',
5086
+ title: 'Prefetch',
5087
+ path: 'options.prefetch',
5088
+ group: AXP_BEHAVIOR_PROPERTY_GROUP,
5089
+ defaultValue: false,
5090
+ });
5115
5091
  const AXP_HAS_COPY_ICON_PROPERTY = createBooleanProperty({
5116
5092
  name: 'hasCopyIcon',
5117
5093
  title: 'Copy Icon',
@@ -6005,5 +5981,5 @@ const AXP_CALLBACK_VALIDATION_PROPERTY = {
6005
5981
  * Generated bundle index. Do not edit.
6006
5982
  */
6007
5983
 
6008
- export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnTruncatedTextComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EMPTY_SPACING_BOX, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_PROFILE, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_LOCAL_DATA_SOURCES_OPTION, AXP_LOCAL_DATA_SOURCE_PREFIX, AXP_LOCAL_DATA_SOURCE_STORE, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_QUERY_OPTIONS_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_PROPERTY_GROUP, LOCAL_DATA_SOURCE_SHEET_BUFFER_ROWS, LOCAL_DATA_SOURCE_SHEET_MIN_ROWS, WIDGET_CASCADE_TRACE_NS, booleanDefaultProperty, buildLocalDataSourceListRows, buildQuerySelectorNode, buildQueryTabsNode, buildWidgetRegistryMapFromProviders, coerceGridProfile, coerceSpacingProfile, createDefaultLocalDataSourceColumns, createQueryOptionsProperty, createReadonlyLocalDataSourceStore, createWritableLocalDataSourceStore, ensureLocalDataSourceRowValues, findNonEmptyBreakpoints, isFlatSpacingBox, isLocalDataSourceRef, isLocalDataSourceRowEmpty, largeTextDefaultProperty, layoutSizeFromDevice, mapAXPPropertyToWidgetProperty, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, padLocalDataSourceSheetRows, parseLocalDataSourceId, plainTextDefaultProperty, readLocalDataSourcesFromNode, resolveWidgetModeComponent, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty, spacingBoxOrEmpty, toLocalDataSourceRef, toLocalDataSourceSheet };
5984
+ export { AXPBaseWidgetComponent, AXPBlockBaseLayoutWidgetComponent, AXPBoxModelLayoutWidgetComponent, AXPColumnTruncatedTextComponent, AXPColumnWidgetComponent, AXPDataListWidgetComponent, AXPFlexBaseLayoutWidgetComponent, AXPFlexItemBaseLayoutWidgetComponent, AXPGridBaseLayoutWidgetComponent, AXPGridItemBaseLayoutWidgetComponent, AXPInlineBaseLayoutWidgetComponent, AXPLayoutBaseWidgetComponent, AXPPropertyEditorHelper, AXPTableBaseLayoutWidgetComponent, AXPTableItemBaseLayoutWidgetComponent, AXPTableItemOpsBaseLayoutWidgetComponent, AXPValueWidgetComponent, AXPWidgetColumnCellComponent, AXPWidgetColumnRendererComponent, AXPWidgetContainerComponent, AXPWidgetCoreElement, AXPWidgetCoreModule, AXPWidgetCoreService, AXPWidgetRegistryService, AXPWidgetRendererDirective, AXPWidgetSerializationHelper, AXP_ALLOW_CLEAR_PROPERTY, AXP_ALLOW_MULTIPLE_PROPERTY, AXP_ALLOW_SEARCH_PROPERTY, AXP_ANIMATION_PROPERTY_GROUP, AXP_APPEARANCE_PROPERTY_GROUP, AXP_BEHAVIOR_PROPERTY_GROUP, AXP_BETWEEN_VALIDATION_PROPERTY, AXP_BG_COLOR_PROPERTY, AXP_BOX_MODEL_PROPERTY_GROUP, AXP_CALLBACK_VALIDATION_PROPERTY, AXP_COLOR_PROPERTY, AXP_CONTENT_PROPERTY, AXP_DATA_PATH_PROPERTY, AXP_DATA_PROPERTY_GROUP, AXP_DATA_SOURCE_OPTIONS_PROPERTY, AXP_DATE_DEPTH_PROPERTY, AXP_DATE_FORMAT_PROPERTY, AXP_DATE_RANGE_LIMIT_PROPERTY, AXP_DEFAULT_ROW_COUNT_PROPERTY, AXP_DESCRIPTION_PROPERTY, AXP_DIRECTION_PROPERTY, AXP_DISABLED_PROPERTY, AXP_DOWNLOADABLE_PROPERTY, AXP_EMPTY_SPACING_BOX, AXP_EQUAL_VALIDATION_PROPERTY, AXP_FALSY_TEXT_PROPERTY, AXP_FIT_LINE_COUNT_PROPERTY, AXP_FONT_SIZE_PROPERTY, AXP_GREATER_THAN_VALIDATION_PROPERTY, AXP_HAS_CLEAR_BUTTON_PROPERTY, AXP_HAS_COPY_ICON_PROPERTY, AXP_HAS_EYE_ICON_PROPERTY, AXP_HAS_ICON_PROPERTY, AXP_HAS_LABEL_PROPERTY, AXP_ICON_PROPERTY, AXP_IS_LOADING_PROPERTY, AXP_LABEL_PROPERTY, AXP_LAYOUT_ADVANCED_GRID_PROPERTY, AXP_LAYOUT_BORDER_PROPERTY, AXP_LAYOUT_COLUMNS_PROPERTY, AXP_LAYOUT_DIRECTION_PROPERTY, AXP_LAYOUT_FLEX_ITEM_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY, AXP_LAYOUT_FLEX_PROPERTY_GROUP, AXP_LAYOUT_GAP_PROPERTY, AXP_LAYOUT_GRID_ITEM_PROPERTY, AXP_LAYOUT_GRID_PROPERTIES, AXP_LAYOUT_GRID_PROPERTY, AXP_LAYOUT_GRID_PROPERTY_GROUP, AXP_LAYOUT_GRID_ROW_PROPERTIES, AXP_LAYOUT_PROFILE, AXP_LAYOUT_ROWS_PROPERTY, AXP_LAYOUT_SHOW_HEADER_PROPERTY, AXP_LAYOUT_SPACING_PROPERTY, AXP_LAYOUT_TABLE_PROPERTY_GROUP, AXP_LESS_THAN_VALIDATION_PROPERTY, AXP_LOCAL_DATA_SOURCES_OPTION, AXP_LOCAL_DATA_SOURCE_PREFIX, AXP_LOCAL_DATA_SOURCE_STORE, AXP_MAX_LENGTH_VALIDATION_PROPERTY, AXP_MAX_LINE_COUNT_PROPERTY, AXP_MIN_LENGTH_VALIDATION_PROPERTY, AXP_MIN_LINE_COUNT_PROPERTY, AXP_MULTI_LANGUAGE_PROPERTY, AXP_NAME_PROPERTY, AXP_NUMBER_SEPARATOR_PROPERTY, AXP_PLACEHOLDER_PROPERTY, AXP_PREFETCH_PROPERTY, AXP_QUERY_OPTIONS_PROPERTY, AXP_READONLY_PROPERTY, AXP_REGULAR_EXPRESSION_VALIDATION_PROPERTY, AXP_REQUIRED_VALIDATION_PROPERTY, AXP_SHOW_PASSWORD_PROPERTY, AXP_SPIN_BUTTON_PROPERTY, AXP_STYLE_COLOR_PROPERTY, AXP_STYLE_LOOK_PROPERTY, AXP_STYLING_PROPERTY_GROUP, AXP_TABLE_COLUMNS_PROPERTY, AXP_TABLE_COLUMN_ALIGNMENT_PROPERTIES, AXP_TABLE_COLUMN_CELL_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEADER_ALIGN_PROPERTY, AXP_TABLE_COLUMN_HEIGHT_PROPERTY, AXP_TABLE_COLUMN_WIDTH_PROPERTY, AXP_TABLE_ITEM_COLSPAN_PROPERTY, AXP_TABLE_ITEM_ROWSPAN_PROPERTY, AXP_TEXT_ALIGN_PROPERTY, AXP_TEXT_FIELD_PROPERTY, AXP_TEXT_PROPERTY, AXP_THEME_PROPERTY, AXP_TITLE_PROPERTY, AXP_TRIGGERS_PROPERTY, AXP_TRIGGERS_PROPERTY_GROUP, AXP_TRULY_TEXT_PROPERTY, AXP_VALIDATION_PROPERTY_GROUP, AXP_VALUE_FIELD_PROPERTY, AXP_VERTICAL_ALIGN_PROPERTY, AXP_WIDGET_DEFINITION_PROVIDER, AXP_WIDGET_PROPERTY_GROUP, LOCAL_DATA_SOURCE_SHEET_BUFFER_ROWS, LOCAL_DATA_SOURCE_SHEET_MIN_ROWS, WIDGET_CASCADE_TRACE_NS, booleanDefaultProperty, buildLocalDataSourceListRows, buildQuerySelectorNode, buildQueryTabsNode, buildWidgetRegistryMapFromProviders, coerceGridProfile, coerceSpacingProfile, createDefaultLocalDataSourceColumns, createQueryOptionsProperty, createReadonlyLocalDataSourceStore, createWritableLocalDataSourceStore, ensureLocalDataSourceRowValues, findNonEmptyBreakpoints, isFlatSpacingBox, isLocalDataSourceRef, isLocalDataSourceRowEmpty, largeTextDefaultProperty, layoutSizeFromDevice, mapAXPPropertyToWidgetProperty, numberDefaultProperty, numberMaxValueProperty, numberMinValueProperty, padLocalDataSourceSheetRows, parseLocalDataSourceId, plainTextDefaultProperty, readLocalDataSourcesFromNode, resolveWidgetExposeHydrateWrites, resolveWidgetModeComponent, richTextDefaultProperty, selectEditorDefaultValueProperty, selectionListEditorDefaultValueProperty, spacingBoxOrEmpty, toLocalDataSourceRef, toLocalDataSourceSheet };
6009
5985
  //# sourceMappingURL=acorex-platform-framework-client-layout-widget-core.mjs.map