@wavemaker/app-ng-runtime 11.14.2-rc.6311 → 11.15.0-1.246

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 (177) hide show
  1. package/build-task/bundles/index.umd.js +13 -2
  2. package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
  3. package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
  4. package/build-task/fesm2022/index.mjs +13 -2
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/base/bundles/index.umd.js +271 -128
  7. package/components/base/esm2022/public_api.mjs +2 -2
  8. package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
  9. package/components/base/esm2022/utils/live-utils.mjs +10 -7
  10. package/components/base/esm2022/utils/widget-utils.mjs +8 -1
  11. package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
  12. package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
  13. package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
  14. package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
  15. package/components/base/fesm2022/index.mjs +273 -129
  16. package/components/base/fesm2022/index.mjs.map +1 -1
  17. package/components/base/public_api.d.ts +1 -1
  18. package/components/base/utils/autolayout-utils.d.ts +29 -0
  19. package/components/base/utils/widget-utils.d.ts +1 -0
  20. package/components/base/widgets/common/container/container.directive.d.ts +7 -9
  21. package/components/basic/label/bundles/index.umd.js +4 -0
  22. package/components/basic/label/esm2022/label.directive.mjs +5 -1
  23. package/components/basic/label/fesm2022/index.mjs +4 -0
  24. package/components/basic/label/fesm2022/index.mjs.map +1 -1
  25. package/components/basic/search/bundles/index.umd.js +13 -11
  26. package/components/basic/search/esm2022/search.component.mjs +14 -12
  27. package/components/basic/search/fesm2022/index.mjs +13 -11
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/chart/bundles/index.umd.js +2 -2
  30. package/components/chart/esm2022/chart.utils.mjs +3 -3
  31. package/components/chart/fesm2022/index.mjs +2 -2
  32. package/components/chart/fesm2022/index.mjs.map +1 -1
  33. package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
  34. package/components/containers/accordion/accordion.directive.d.ts +4 -0
  35. package/components/containers/accordion/bundles/index.umd.js +34 -0
  36. package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
  37. package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
  38. package/components/containers/accordion/fesm2022/index.mjs +36 -2
  39. package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
  40. package/components/containers/tabs/bundles/index.umd.js +34 -0
  41. package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
  42. package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
  43. package/components/containers/tabs/fesm2022/index.mjs +36 -2
  44. package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
  45. package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
  46. package/components/containers/tabs/tabs.component.d.ts +5 -1
  47. package/components/containers/wizard/bundles/index.umd.js +46 -2
  48. package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
  49. package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
  50. package/components/containers/wizard/fesm2022/index.mjs +48 -4
  51. package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
  52. package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
  53. package/components/containers/wizard/wizard.component.d.ts +1 -0
  54. package/components/data/form/bundles/index.umd.js +28 -1
  55. package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
  56. package/components/data/form/esm2022/form.component.mjs +24 -2
  57. package/components/data/form/esm2022/form.props.mjs +3 -2
  58. package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
  59. package/components/data/form/fesm2022/index.mjs +29 -2
  60. package/components/data/form/fesm2022/index.mjs.map +1 -1
  61. package/components/data/form/form.component.d.ts +3 -0
  62. package/components/data/list/bundles/index.umd.js +0 -9
  63. package/components/data/list/esm2022/list-item.directive.mjs +1 -10
  64. package/components/data/list/fesm2022/index.mjs +0 -9
  65. package/components/data/list/fesm2022/index.mjs.map +1 -1
  66. package/components/data/pagination/bundles/index.umd.js +6 -2
  67. package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
  68. package/components/data/pagination/fesm2022/index.mjs +6 -2
  69. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  70. package/components/data/table/bundles/index.umd.js +21 -4
  71. package/components/data/table/esm2022/table.component.mjs +22 -5
  72. package/components/data/table/fesm2022/index.mjs +21 -4
  73. package/components/data/table/fesm2022/index.mjs.map +1 -1
  74. package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
  75. package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
  76. package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
  77. package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
  78. package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
  79. package/components/input/checkbox/bundles/index.umd.js +12 -3
  80. package/components/input/checkbox/checkbox.component.d.ts +2 -0
  81. package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
  82. package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
  83. package/components/input/checkbox/fesm2022/index.mjs +12 -3
  84. package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
  85. package/components/input/checkboxset/bundles/index.umd.js +12 -1
  86. package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
  87. package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
  88. package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
  89. package/components/input/checkboxset/fesm2022/index.mjs +12 -1
  90. package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
  91. package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
  92. package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
  93. package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
  94. package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
  95. package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
  96. package/components/input/epoch/date/bundles/index.umd.js +4 -3
  97. package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
  98. package/components/input/epoch/date/fesm2022/index.mjs +4 -3
  99. package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
  100. package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
  101. package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
  102. package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
  103. package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
  104. package/components/input/file-upload/bundles/index.umd.js +1 -1
  105. package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
  106. package/components/input/file-upload/fesm2022/index.mjs +1 -1
  107. package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
  108. package/components/input/radioset/bundles/index.umd.js +13 -1
  109. package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
  110. package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
  111. package/components/input/radioset/fesm2022/index.mjs +13 -1
  112. package/components/input/radioset/fesm2022/index.mjs.map +1 -1
  113. package/components/input/radioset/radioset.component.d.ts +1 -0
  114. package/components/input/slider/bundles/index.umd.js +86 -16
  115. package/components/input/slider/esm2022/slider.component.mjs +76 -9
  116. package/components/input/slider/esm2022/slider.props.mjs +5 -1
  117. package/components/input/slider/fesm2022/index.mjs +79 -8
  118. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  119. package/components/input/slider/slider.component.d.ts +12 -3
  120. package/components/input/text/bundles/index.umd.js +24 -3
  121. package/components/input/text/esm2022/input-text/input-text.component.mjs +6 -3
  122. package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
  123. package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
  124. package/components/input/text/fesm2022/index.mjs +24 -3
  125. package/components/input/text/fesm2022/index.mjs.map +1 -1
  126. package/components/input/text/input-text/input-text.component.d.ts +4 -0
  127. package/components/input/text/number-locale/number-locale.d.ts +12 -0
  128. package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
  129. package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
  130. package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
  131. package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
  132. package/components/navigation/popover/bundles/index.umd.js +12 -0
  133. package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
  134. package/components/navigation/popover/fesm2022/index.mjs +12 -0
  135. package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
  136. package/components/navigation/popover/popover.component.d.ts +2 -0
  137. package/components/page/default/bundles/index.umd.js +0 -4
  138. package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
  139. package/components/page/default/fesm2022/index.mjs +0 -4
  140. package/components/page/default/fesm2022/index.mjs.map +1 -1
  141. package/components/page/header/bundles/index.umd.js +4 -3
  142. package/components/page/header/esm2022/header.component.mjs +5 -4
  143. package/components/page/header/fesm2022/index.mjs +4 -3
  144. package/components/page/header/fesm2022/index.mjs.map +1 -1
  145. package/components/page/header/header.component.d.ts +2 -1
  146. package/core/bundles/index.umd.js +90 -6
  147. package/core/enums/enums.d.ts +1 -0
  148. package/core/esm2022/enums/enums.mjs +2 -1
  149. package/core/esm2022/utils/build-utils.mjs +5 -1
  150. package/core/esm2022/utils/utils.mjs +5 -2
  151. package/core/esm2022/utils/watcher.mjs +83 -4
  152. package/core/fesm2022/index.mjs +91 -4
  153. package/core/fesm2022/index.mjs.map +1 -1
  154. package/core/utils/watcher.d.ts +2 -0
  155. package/npm-shrinkwrap.json +2 -2
  156. package/oAuth/esm2022/oAuth.service.mjs +1 -1
  157. package/oAuth/fesm2022/index.mjs.map +1 -1
  158. package/oAuth/oAuth.service.d.ts +1 -1
  159. package/package-lock.json +2 -2
  160. package/package.json +1 -1
  161. package/runtime/base/bundles/index.umd.js +33 -31
  162. package/runtime/base/components/base-prefab.component.d.ts +6 -4
  163. package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
  164. package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
  165. package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
  166. package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
  167. package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
  168. package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
  169. package/runtime/base/fesm2022/index.mjs +34 -31
  170. package/runtime/base/fesm2022/index.mjs.map +1 -1
  171. package/runtime/base/runtime-base.module.d.ts +2 -1
  172. package/runtime/dynamic/app/app.config.d.ts +1 -1
  173. package/runtime/dynamic/bundles/index.umd.js +1 -1
  174. package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
  175. package/runtime/dynamic/fesm2022/index.mjs +2 -2
  176. package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
  177. package/scripts/datatable/datatable.js +17 -15
@@ -504,6 +504,13 @@ const getKeyboardFocusableElements = (element) => {
504
504
  && (!el.hasAttribute('tabindex') || (el.hasAttribute('tabindex') && !el.getAttribute("tabindex").startsWith('-'))));
505
505
  });
506
506
  };
507
+ const getCurrentWidgets = (element, widgets) => {
508
+ const componentElements = Array.from(element.querySelectorAll('[widget-id]'));
509
+ return Object.assign(widgets, componentElements.reduce((result, comp) => {
510
+ result[comp.widget.name] = comp.widget;
511
+ return result;
512
+ }, {}));
513
+ };
507
514
 
508
515
  const noop = () => { };
509
516
  var Live_Operations;
@@ -1615,7 +1622,7 @@ const getFieldLayoutConfig = (captionWidth, captionPosition, os) => {
1615
1622
  };
1616
1623
  };
1617
1624
  const getDefaultViewModeWidget = widget => {
1618
- if (includes(['checkbox', 'toggle', 'rating'], widget)) {
1625
+ if (includes(['checkbox', 'toggle', 'iconbutton-toggle', 'rating'], widget)) {
1619
1626
  return VIEW_MODE_OPTIONS.DEFAULT;
1620
1627
  }
1621
1628
  return VIEW_MODE_OPTIONS.LABEL;
@@ -1634,16 +1641,19 @@ const parseBooleanValue = value => {
1634
1641
  };
1635
1642
  const parseValueByType = (value, type, widget, trailingzero) => {
1636
1643
  if (widget) {
1637
- if (widget === FormWidgetType.NUMBER || widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
1644
+ if (widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
1638
1645
  return isNaN(Number(value)) ? null : trailingzero ? value : Number(value);
1639
1646
  }
1640
- if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE) {
1647
+ if (widget === FormWidgetType.NUMBER) {
1648
+ return (isNaN(Number(value)) || value == null) ? null : trailingzero ? value : Number(value);
1649
+ }
1650
+ if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE || widget === FormWidgetType.ICONBUTTONTOGGLE) {
1641
1651
  return parseBooleanValue(value);
1642
1652
  }
1643
1653
  return value;
1644
1654
  }
1645
1655
  if (isNumberType(type)) {
1646
- return isNaN(Number(value)) ? null : Number(value);
1656
+ return (isNaN(Number(value)) || value == null) ? null : Number(value);
1647
1657
  }
1648
1658
  if (type === DataType.BOOLEAN) {
1649
1659
  return parseBooleanValue(value);
@@ -1667,7 +1677,7 @@ const fieldTypeWidgetTypeMap = {
1667
1677
  'time': ['time', 'text', 'number', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
1668
1678
  'timestamp': ['timestamp', 'text', 'number', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
1669
1679
  'datetime': ['datetime', 'text', 'select', 'checkboxset', 'radioset', 'autocomplete', 'chips'],
1670
- 'boolean': ['checkbox', 'radioset', 'toggle', 'select'],
1680
+ 'boolean': ['checkbox', 'radioset', 'toggle', 'iconbutton-toggle', 'select'],
1671
1681
  'list': ['select', 'radioset', 'checkboxset', 'switch', 'autocomplete', 'chips'],
1672
1682
  'clob': ['text', 'textarea', 'richtext'],
1673
1683
  'blob': ['upload'],
@@ -1725,7 +1735,7 @@ const getDefaultValue = (value, type, widget) => {
1725
1735
  if (widget === FormWidgetType.NUMBER || widget === FormWidgetType.SLIDER || widget === FormWidgetType.CURRENCY) {
1726
1736
  return isNaN(Number(value)) ? null : Number(value);
1727
1737
  }
1728
- if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE) {
1738
+ if (widget === FormWidgetType.CHECKBOX || widget === FormWidgetType.TOGGLE || widget === FormWidgetType.ICONBUTTONTOGGLE) {
1729
1739
  return parseBooleanValue(value);
1730
1740
  }
1731
1741
  return value;
@@ -2528,8 +2538,9 @@ class BaseComponent {
2528
2538
  const errorMessage = e.message || String(e);
2529
2539
  console.error(`Error executing event callback "${eventName}" on widget "${widgetName}":`, errorMessage);
2530
2540
  console.error('Event expression context:', { eventName, widgetName, locals });
2531
- // Re-throw to maintain original behavior but with better context
2532
- throw e;
2541
+ // Don't re-throw - allow execution to continue (e.g., navigation should still work)
2542
+ // Return undefined to indicate error was handled
2543
+ return undefined;
2533
2544
  }
2534
2545
  };
2535
2546
  if (child && !child.widget.eventHandlers)
@@ -2591,8 +2602,9 @@ class BaseComponent {
2591
2602
  const errorMessage = error?.message || String(error);
2592
2603
  console.error(`Error executing event callback "${eventName}" on widget "${widgetName}":`, errorMessage);
2593
2604
  console.error('Full error:', error);
2594
- // Re-throw to maintain original behavior but with better error context
2595
- throw error;
2605
+ // Don't re-throw - allow execution to continue (e.g., navigation should still work)
2606
+ // Return undefined to indicate error was handled
2607
+ return undefined;
2596
2608
  }
2597
2609
  }
2598
2610
  }
@@ -2817,9 +2829,6 @@ class BaseComponent {
2817
2829
  // This ensures all watchers registered for this component are cleaned up
2818
2830
  if (this.widgetId) {
2819
2831
  $unwatchAll(this.widgetId);
2820
- // if (removedCount > 0) {
2821
- // console.log(`🧹 Cleaned up ${removedCount} watcher(s) for widget ${this.widgetId}`);
2822
- // }
2823
2832
  }
2824
2833
  // MEMORY LEAK FIX: Clear context to release references to parent scope data
2825
2834
  // The context object holds references to repeater items, wizard steps, etc.
@@ -3229,6 +3238,9 @@ class PartialContainerDirective {
3229
3238
  this.renderPartial = debounce$1(this._renderPartial, 200);
3230
3239
  componentInstance.registerPropertyChangeListener((key, nv, ov) => {
3231
3240
  if (key === 'content') {
3241
+ if ('isInlineContent' in componentInstance) {
3242
+ componentInstance.isInlineContent = !(nv && nv !== '');
3243
+ }
3232
3244
  if (componentInstance.$lazyLoad) {
3233
3245
  componentInstance.$lazyLoad = () => {
3234
3246
  this.renderPartial(nv);
@@ -5034,94 +5046,53 @@ const registerProps = () => {
5034
5046
  ['alignment', PROP_STRING],
5035
5047
  ['gap', PROP_STRING],
5036
5048
  ['wrap', PROP_BOOLEAN],
5037
- ['columngap', PROP_STRING]
5049
+ ['columngap', PROP_STRING],
5050
+ ['clipcontent', PROP_STRING],
5051
+ ['position', PROP_STRING],
5052
+ ['overflow', PROP_STRING],
5053
+ ['zindex', PROP_STRING],
5038
5054
  ]));
5039
5055
  };
5040
5056
 
5041
- const DEFAULT_CLS = 'app-container';
5042
- const WIDGET_CONFIG = {
5043
- widgetType: 'wm-container',
5044
- hostClass: DEFAULT_CLS
5045
- };
5046
- // Alignment matrix (assumes direction: 'row' as base)
5047
- const alignmentMatrix = {
5048
- 'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start' },
5049
- 'top-center': { justifyContent: 'center', alignItems: 'flex-start' },
5050
- 'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start' },
5051
- 'middle-left': { justifyContent: 'flex-start', alignItems: 'center' },
5052
- 'middle-center': { justifyContent: 'center', alignItems: 'center' },
5053
- 'middle-right': { justifyContent: 'flex-end', alignItems: 'center' },
5054
- 'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end' },
5055
- 'bottom-center': { justifyContent: 'center', alignItems: 'flex-end' },
5056
- 'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end' },
5057
- 'start': { justifyContent: 'space-between', alignItems: 'flex-start' },
5058
- 'center': { justifyContent: 'space-between', alignItems: 'center' },
5059
- 'end': { justifyContent: 'space-between', alignItems: 'flex-end' }
5060
- };
5061
- class ContainerDirective extends BaseContainerComponent {
5062
- static { this.initializeProps = registerProps(); }
5063
- constructor(inj, explicitContext) {
5064
- super(inj, WIDGET_CONFIG, explicitContext);
5057
+ class AutoLayoutUtils {
5058
+ constructor() {
5059
+ this.direction = 'row';
5065
5060
  this.hasWrap = false;
5066
- addClass(this.nativeElement, DEFAULT_CLS);
5067
- styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
5061
+ this.alignment = 'top-left';
5062
+ // Alignment matrix
5063
+ this.alignmentMatrix = {
5064
+ 'top-left': { justifyContent: 'flex-start', alignItems: 'flex-start' },
5065
+ 'top-center': { justifyContent: 'center', alignItems: 'flex-start' },
5066
+ 'top-right': { justifyContent: 'flex-end', alignItems: 'flex-start' },
5067
+ 'middle-left': { justifyContent: 'flex-start', alignItems: 'center' },
5068
+ 'middle-center': { justifyContent: 'center', alignItems: 'center' },
5069
+ 'middle-right': { justifyContent: 'flex-end', alignItems: 'center' },
5070
+ 'bottom-left': { justifyContent: 'flex-start', alignItems: 'flex-end' },
5071
+ 'bottom-center': { justifyContent: 'center', alignItems: 'flex-end' },
5072
+ 'bottom-right': { justifyContent: 'flex-end', alignItems: 'flex-end' },
5073
+ 'start': { justifyContent: 'space-between', alignItems: 'flex-start' },
5074
+ 'center': { justifyContent: 'space-between', alignItems: 'center' },
5075
+ 'end': { justifyContent: 'space-between', alignItems: 'flex-end' }
5076
+ };
5068
5077
  }
5069
- onPropertyChange(key, nv, ov) {
5070
- switch (key) {
5071
- case 'direction':
5072
- this.direction = nv;
5073
- if (nv === 'column')
5074
- this.hasWrap = false; // disable wrap for column direction
5075
- this.$element.css({ 'flex-direction': nv, display: 'flex' });
5076
- this.applyAlignment(this.alignment);
5077
- break;
5078
- case 'wrap':
5079
- this.hasWrap = nv;
5080
- this.$element.css('flex-wrap', nv ? 'wrap' : 'nowrap');
5081
- break;
5082
- case 'alignment':
5083
- if (nv) {
5084
- this.alignment = nv;
5085
- this.applyAlignment(nv);
5086
- }
5087
- break;
5088
- case 'gap':
5089
- case 'columngap':
5090
- setTimeout(() => {
5091
- this.applySpacing(nv, key);
5092
- });
5093
- break;
5094
- }
5095
- super.onPropertyChange(key, nv, ov);
5078
+ /** Apply direction (row/column) */
5079
+ applyDirection(direction) {
5080
+ this.direction = direction;
5081
+ if (direction === 'column')
5082
+ this.hasWrap = false;
5083
+ this.$element.css({ display: 'flex', flexDirection: direction });
5084
+ this.applyAlignment(this.alignment);
5096
5085
  }
5097
- onStyleChange(key, nv, ov) {
5098
- if (key === 'alignment' && nv) {
5099
- this.alignment = nv;
5100
- this.applyAlignment(nv);
5101
- }
5102
- if (nv === 'fill') {
5103
- if (key === 'width')
5104
- this.$element.css('width', '100%');
5105
- if (key === 'height') {
5106
- const parentElement = this.nativeElement.parentElement;
5107
- if (parentElement?.hasAttribute('wmcontainer')) {
5108
- this.$element.css({ 'align-self': 'stretch', 'flex-grow': '1' });
5109
- }
5110
- else {
5111
- this.$element.css('height', '100%');
5112
- }
5113
- }
5114
- }
5115
- else if (nv === 'hug') {
5116
- if (key === 'width')
5117
- this.$element.css('width', 'fit-content');
5118
- if (key === 'height')
5119
- this.$element.css('height', 'fit-content');
5120
- }
5121
- super.onStyleChange(key, nv, ov);
5086
+ /** Apply wrapping */
5087
+ applyWrap(wrap) {
5088
+ this.hasWrap = wrap;
5089
+ this.$element.css('flex-wrap', wrap ? 'wrap' : 'nowrap');
5122
5090
  }
5091
+ /** Apply alignment based on direction */
5123
5092
  applyAlignment(alignmentKey) {
5124
- const base = alignmentMatrix[alignmentKey];
5093
+ if (!alignmentKey)
5094
+ return;
5095
+ const base = this.alignmentMatrix[alignmentKey];
5125
5096
  if (!base)
5126
5097
  return;
5127
5098
  const isRow = this.direction === 'row';
@@ -5130,80 +5101,253 @@ class ContainerDirective extends BaseContainerComponent {
5130
5101
  this.$element.css({
5131
5102
  display: 'flex',
5132
5103
  'flex-wrap': this.hasWrap ? 'wrap' : 'nowrap',
5133
- justifyContent: justifyContent,
5134
- alignItems: alignItems
5104
+ justifyContent,
5105
+ alignItems
5135
5106
  });
5136
5107
  }
5137
- applySpacing(nv, key) {
5108
+ /** Apply spacing for gap + column gap */
5109
+ applySpacing(key, nv) {
5110
+ const base = this.alignmentMatrix[this.alignment];
5111
+ if (!base)
5112
+ return;
5113
+ const gapValue = key === 'gap' ? nv : this.gap;
5114
+ const colValue = key === 'columngap' ? nv : this.columngap;
5138
5115
  const isRow = this.direction === 'row';
5139
- const base = alignmentMatrix[this.alignment];
5140
- const el = this.$element;
5141
- // Normalize values
5142
- const gap = key === 'gap' ? nv : this.gap;
5143
- const columngap = key === 'columngap' ? nv : this.columngap;
5144
- const hasWrap = this.hasWrap;
5145
- // Default gap values
5146
- const colVal = (columngap && columngap !== 'auto') ? (columngap) : null;
5147
- const gapVal = (gap && gap !== 'auto') ? (gap) : null;
5148
- const rowVal = hasWrap ? gapVal : null;
5116
+ const gapVal = (gapValue && gapValue !== 'auto') ? gapValue : null;
5117
+ const colVal = (colValue && colValue !== 'auto') ? colValue : null;
5118
+ const rowVal = this.hasWrap && gapVal ? gapVal : null;
5149
5119
  let justifyContent = isRow ? base.justifyContent : base.alignItems;
5150
5120
  let alignItems = isRow ? base.alignItems : base.justifyContent;
5151
- // CASE: No wrap
5152
- if (!hasWrap) {
5153
- if (gap === 'auto') {
5154
- el.css({
5121
+ // ————— NO WRAP —————
5122
+ if (!this.hasWrap) {
5123
+ if (gapValue === 'auto') {
5124
+ this.$element.css({
5155
5125
  'justify-content': base.justifyContent,
5156
5126
  'align-items': base.alignItems
5157
5127
  });
5158
5128
  }
5159
5129
  else {
5160
- el.css({
5130
+ this.$element.css({
5161
5131
  'justify-content': justifyContent,
5162
5132
  'align-items': alignItems,
5163
5133
  gap: `${gapVal}px`
5164
5134
  });
5165
5135
  }
5166
5136
  }
5167
- // CASE: Wrap enabled
5137
+ // ————— WRAP LOGIC —————
5168
5138
  else {
5169
- // both auto (gap as rowgap and columngap)
5170
- if (columngap === 'auto' && gap === 'auto') {
5171
- el.css({
5139
+ if (gapValue === 'auto' && colValue === 'auto') {
5140
+ this.$element.css({
5172
5141
  'justify-content': justifyContent,
5173
5142
  'align-content': justifyContent
5174
5143
  });
5175
5144
  }
5176
- // columngap auto, gap (rowgap) fixed
5177
- else if (columngap === 'auto' && gap !== 'auto') {
5178
- el.css({
5145
+ else if (gapValue !== 'auto' && colValue === 'auto') {
5146
+ this.$element.css({
5179
5147
  'justify-content': justifyContent,
5180
5148
  'align-content': alignItems,
5181
5149
  'row-gap': `${rowVal}px`
5182
5150
  });
5183
5151
  }
5184
- // gap (rowgap) auto, columngap fixed
5185
- else if (gap === 'auto' && columngap !== 'auto') {
5186
- el.css({
5152
+ else if (gapValue === 'auto' && colValue !== 'auto') {
5153
+ this.$element.css({
5187
5154
  'align-content': 'space-between',
5188
5155
  'column-gap': `${colVal}px`
5189
5156
  });
5190
5157
  }
5191
- // both fixed numbers
5192
5158
  else {
5193
5159
  if (colVal && rowVal) {
5194
5160
  if (colVal === rowVal) {
5195
- el.css({ 'gap': `${colVal}px`, 'align-content': alignItems, 'justify-content': justifyContent });
5161
+ this.$element.css({
5162
+ 'gap': `${colVal}px`,
5163
+ 'align-content': alignItems,
5164
+ 'justify-content': justifyContent
5165
+ });
5196
5166
  }
5197
5167
  else {
5198
- el.css({ gap: `${rowVal}px ${colVal}px`, 'align-content': alignItems, 'justify-content': justifyContent });
5168
+ this.$element.css({
5169
+ 'gap': `${rowVal}px ${colVal}px`,
5170
+ 'align-content': alignItems,
5171
+ 'justify-content': justifyContent
5172
+ });
5199
5173
  }
5200
5174
  }
5201
5175
  }
5202
- this.columngap = columngap?.toString();
5203
5176
  }
5204
- this.gap = gap?.toString();
5177
+ this.gap = gapValue?.toString();
5178
+ this.columngap = colValue?.toString();
5179
+ }
5180
+ onPropertyChange(key, nv, ov) {
5181
+ switch (key) {
5182
+ case 'direction':
5183
+ this.applyDirection(nv);
5184
+ break;
5185
+ case 'wrap':
5186
+ this.applyWrap(nv);
5187
+ break;
5188
+ case 'alignment':
5189
+ this.alignment = nv;
5190
+ this.applyAlignment(nv);
5191
+ break;
5192
+ case 'gap':
5193
+ case 'columngap':
5194
+ setTimeout(() => {
5195
+ this.applySpacing(key, nv);
5196
+ });
5197
+ break;
5198
+ case 'position':
5199
+ this.position = nv;
5200
+ this.handlePosition();
5201
+ break;
5202
+ case 'clipcontent':
5203
+ this.clipContent = nv;
5204
+ this.handleClipBehaviour();
5205
+ break;
5206
+ }
5207
+ }
5208
+ applyStyleChange(key, nv) {
5209
+ if (key === 'width' || key === 'height') {
5210
+ this.applySize(key, nv);
5211
+ }
5212
+ else if (key === 'padding') {
5213
+ this.$element.css('padding', nv);
5214
+ }
5215
+ else if (key === 'overflow') {
5216
+ this.overflowtype = nv;
5217
+ this.handleClipBehaviour();
5218
+ }
5219
+ else if (key === 'zindex') {
5220
+ this.zIndex = nv;
5221
+ this.handlePosition();
5222
+ }
5223
+ }
5224
+ applySize(key, nv) {
5225
+ if (nv === 'fill') {
5226
+ if (key === 'width') {
5227
+ this.$element.css('width', '100%');
5228
+ }
5229
+ if (key === 'height') {
5230
+ if (this.parentElement?.hasAttribute('wmcontainer') || this.parentElement.hasAttribute('wmautolayout')) {
5231
+ this.$element.css({
5232
+ 'align-self': 'stretch',
5233
+ 'flex-grow': '1'
5234
+ });
5235
+ }
5236
+ else {
5237
+ this.$element.css('height', '100%');
5238
+ }
5239
+ }
5240
+ }
5241
+ else if (nv === 'hug') {
5242
+ if (key === 'width') {
5243
+ this.$element.css('width', 'fit-content');
5244
+ }
5245
+ if (key === 'height') {
5246
+ this.$element.css('height', 'fit-content');
5247
+ }
5248
+ }
5249
+ else {
5250
+ this.$element.css('flex-shrink', '0'); // Don't shrink when size is fixed
5251
+ }
5252
+ }
5253
+ // Determine whether the container should clip its content and configure scrolling behaviour accordingly.
5254
+ handleClipBehaviour() {
5255
+ const overflow = this.overflowtype?.toLowerCase();
5256
+ switch (overflow) {
5257
+ case 'vertical':
5258
+ this.$element.css({
5259
+ 'overflow-x': 'hidden',
5260
+ 'overflow-y': 'scroll'
5261
+ });
5262
+ break;
5263
+ case 'horizontal':
5264
+ this.$element.css({
5265
+ 'overflow-x': 'scroll',
5266
+ 'overflow-y': 'hidden'
5267
+ });
5268
+ break;
5269
+ case 'both directions':
5270
+ this.$element.css({
5271
+ 'overflow': 'scroll'
5272
+ });
5273
+ break;
5274
+ case 'no scrolling':
5275
+ if (this.clipContent) {
5276
+ this.$element.css({ 'overflow': 'hidden' });
5277
+ }
5278
+ else {
5279
+ this.$element.css({ 'overflow': '' });
5280
+ }
5281
+ break;
5282
+ default:
5283
+ break;
5284
+ }
5285
+ }
5286
+ // Toggle and apply positional behaviour and expose the z-index control when position is not relative.
5287
+ handlePosition() {
5288
+ if (this.position === 'sticky') {
5289
+ // Apply sticky styles
5290
+ this.$element.css({
5291
+ 'position': 'sticky',
5292
+ 'top': '0', // Sticks to top when scrolling vertically
5293
+ 'left': '0', // Sticks to left when scrolling horizontally
5294
+ 'z-index': this.zIndex
5295
+ });
5296
+ }
5297
+ else {
5298
+ // Reset to default (static/relative behavior)
5299
+ this.$element.css({
5300
+ 'position': '',
5301
+ 'top': '',
5302
+ 'left': '',
5303
+ 'z-index': ''
5304
+ });
5305
+ }
5306
+ }
5307
+ }
5308
+
5309
+ const DEFAULT_CLS = 'app-container';
5310
+ const WIDGET_CONFIG = {
5311
+ widgetType: 'wm-container',
5312
+ hostClass: DEFAULT_CLS
5313
+ };
5314
+ class ContainerDirective extends BaseContainerComponent {
5315
+ static { this.initializeProps = registerProps(); }
5316
+ constructor(inj, explicitContext, app) {
5317
+ super(inj, WIDGET_CONFIG, explicitContext);
5318
+ this.app = app;
5319
+ this.isPrism = false;
5320
+ addClass(this.nativeElement, DEFAULT_CLS);
5321
+ styler(this.nativeElement, this, APPLY_STYLES_TYPE.CONTAINER);
5322
+ this.isPrism = this.app.isPrism;
5323
+ if (this.isPrism) {
5324
+ this.initializeAutoLayout();
5325
+ }
5326
+ }
5327
+ initializeAutoLayout() {
5328
+ const self = this;
5329
+ this.autoLayoutUtils = new class extends AutoLayoutUtils {
5330
+ constructor() {
5331
+ super(...arguments);
5332
+ this.nativeElement = self.nativeElement;
5333
+ this.$element = self.$element;
5334
+ this.parentElement = self.nativeElement.parentElement ?? null;
5335
+ }
5336
+ }();
5337
+ }
5338
+ onPropertyChange(key, nv, ov) {
5339
+ if (this.isPrism && this.autoLayoutUtils) {
5340
+ this.autoLayoutUtils.onPropertyChange(key, nv, ov);
5341
+ }
5342
+ super.onPropertyChange(key, nv, ov);
5343
+ }
5344
+ onStyleChange(key, nv, ov) {
5345
+ if (this.isPrism && this.autoLayoutUtils) {
5346
+ this.autoLayoutUtils.applyStyleChange(key, nv);
5347
+ }
5348
+ super.onStyleChange(key, nv, ov);
5205
5349
  }
5206
- static { this.ɵfac = function ContainerDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContainerDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
5350
+ static { this.ɵfac = function ContainerDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ContainerDirective)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8), i0.ɵɵdirectiveInject(i1.App)); }; }
5207
5351
  static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: ContainerDirective, selectors: [["", "wmContainer", ""]], standalone: true, features: [i0.ɵɵProvidersFeature([
5208
5352
  provideAsWidgetRef(ContainerDirective)
5209
5353
  ]), i0.ɵɵInheritDefinitionFeature] }); }
@@ -5222,7 +5366,7 @@ class ContainerDirective extends BaseContainerComponent {
5222
5366
  args: ['EXPLICIT_CONTEXT']
5223
5367
  }, {
5224
5368
  type: Optional
5225
- }] }], null); })();
5369
+ }] }, { type: i1.App }], null); })();
5226
5370
 
5227
5371
  class LazyLoadDirective {
5228
5372
  constructor(inj, templateRef, viewContainer, explicitContext = {}) {
@@ -5500,5 +5644,5 @@ class ShowInDeviceDirective {
5500
5644
  * Generated bundle index. Do not edit.
5501
5645
  */
5502
5646
 
5503
- export { ALLFIELDS, APPLY_STYLES_TYPE, AUTOCLOSE_TYPE, BaseComponent, BaseContainerComponent, BaseFieldValidations, ContainerDirective, Context, CustomPipe, CustomWidgetContainerDirective, DEBOUNCE_TIMES, DISPLAY_TYPE, DataSetItem, DatasetAwareNavComponent, DialogRef, DialogServiceImpl, EDIT_MODE, EVENTS_MAP, FileExtensionFromMimePipe, FileIconClassPipe, FileSizePipe, FilterPipe, INPUTMODE, ImagePipe, ItemTemplateDirective, LIVE_CONSTANTS, LazyLoadDirective, Live_Operations, MessageComponent, NAVIGATION_TYPE, NumberToStringPipe, PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, PROP_TYPE, PartialContainerDirective, PartialDirective, PartialParamDirective, PartialParamHandlerDirective, PrefixPipe, PullToRefresh, RedrawableDirective, RepeatTemplateDirective, SanitizePipe, ShowInDeviceDirective, StateClassPipe, StringToNumberPipe, StylableComponent, SuffixPipe, TemplateReplacePipe, TextContentDirective, TimeFromNowPipe, ToCurrencyPipe, ToDatePipe, ToNumberPipe, TrailingZeroDecimalPipe, TrustAsPipe, WidgetConfig, WidgetRef, applyFilterOnField, configureDnD, convertDataToObject, createArrayFrom, extractDataAsArray, extractDataSourceName, fetchDistinctValues, fetchRelatedFieldData, filterDate, getBackGroundImageUrl, getConditionalClasses, getContainerTargetClass, getDataTableFilterWidget, getDefaultValue, getDefaultViewModeWidget, getDistinctFieldProperties, getDistinctValues, getDistinctValuesForField, getEditModeWidget, getEmptyMatchMode, getEnableEmptyFilter, getEvaluatedData, getFieldLayoutConfig, getFieldTypeWidgetTypesMap, getImageUrl, getKeyboardFocusableElements, getMatchModeMsgs, getMatchModeTypesMap, getObjValueByKey, getOrderByExpr, getOrderedDataset, getRangeFieldValue, getRangeMatchMode, getRowOperationsColumn, getUniqObjsByDataField, getWatchIdentifier, getWidgetPropsByType, groupData, handleHeaderClick, hasLinkToCurrentPage, interpolateBindExpressions, isActiveNavItem, isBooleanAttr, isDataSetWidget, isDimensionProp, isStyle, parseValueByType, performDataOperation, prepareFieldDefs, propNameCSSKeyMap, provideAs, provideAsDialogRef, provideAsWidgetRef, refreshDataSource, register$1 as register, registerFormWidget, setFocusTrap, setHeaderConfig, setHeaderConfigForTable, setItemByCompare, styler, toggleAllHeaders, transformData, transformDataWithKeys, transformFormData, unsupportedStatePersistenceTypes, updateDeviceView, widgetIdGenerator };
5647
+ export { ALLFIELDS, APPLY_STYLES_TYPE, AUTOCLOSE_TYPE, BaseComponent, BaseContainerComponent, BaseFieldValidations, ContainerDirective, Context, CustomPipe, CustomWidgetContainerDirective, DEBOUNCE_TIMES, DISPLAY_TYPE, DataSetItem, DatasetAwareNavComponent, DialogRef, DialogServiceImpl, EDIT_MODE, EVENTS_MAP, FileExtensionFromMimePipe, FileIconClassPipe, FileSizePipe, FilterPipe, INPUTMODE, ImagePipe, ItemTemplateDirective, LIVE_CONSTANTS, LazyLoadDirective, Live_Operations, MessageComponent, NAVIGATION_TYPE, NumberToStringPipe, PROP_ANY, PROP_BOOLEAN, PROP_NUMBER, PROP_STRING, PROP_TYPE, PartialContainerDirective, PartialDirective, PartialParamDirective, PartialParamHandlerDirective, PrefixPipe, PullToRefresh, RedrawableDirective, RepeatTemplateDirective, SanitizePipe, ShowInDeviceDirective, StateClassPipe, StringToNumberPipe, StylableComponent, SuffixPipe, TemplateReplacePipe, TextContentDirective, TimeFromNowPipe, ToCurrencyPipe, ToDatePipe, ToNumberPipe, TrailingZeroDecimalPipe, TrustAsPipe, WidgetConfig, WidgetRef, applyFilterOnField, configureDnD, convertDataToObject, createArrayFrom, extractDataAsArray, extractDataSourceName, fetchDistinctValues, fetchRelatedFieldData, filterDate, getBackGroundImageUrl, getConditionalClasses, getContainerTargetClass, getCurrentWidgets, getDataTableFilterWidget, getDefaultValue, getDefaultViewModeWidget, getDistinctFieldProperties, getDistinctValues, getDistinctValuesForField, getEditModeWidget, getEmptyMatchMode, getEnableEmptyFilter, getEvaluatedData, getFieldLayoutConfig, getFieldTypeWidgetTypesMap, getImageUrl, getKeyboardFocusableElements, getMatchModeMsgs, getMatchModeTypesMap, getObjValueByKey, getOrderByExpr, getOrderedDataset, getRangeFieldValue, getRangeMatchMode, getRowOperationsColumn, getUniqObjsByDataField, getWatchIdentifier, getWidgetPropsByType, groupData, handleHeaderClick, hasLinkToCurrentPage, interpolateBindExpressions, isActiveNavItem, isBooleanAttr, isDataSetWidget, isDimensionProp, isStyle, parseValueByType, performDataOperation, prepareFieldDefs, propNameCSSKeyMap, provideAs, provideAsDialogRef, provideAsWidgetRef, refreshDataSource, register$1 as register, registerFormWidget, setFocusTrap, setHeaderConfig, setHeaderConfigForTable, setItemByCompare, styler, toggleAllHeaders, transformData, transformDataWithKeys, transformFormData, unsupportedStatePersistenceTypes, updateDeviceView, widgetIdGenerator };
5504
5648
  //# sourceMappingURL=index.mjs.map