@acorex/platform 18.2.0 → 18.2.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 (384) hide show
  1. package/common/lib/app/application.types.d.ts +18 -2
  2. package/common/lib/data/data.types.d.ts +1 -1
  3. package/common/lib/data/entity-storage-service.d.ts +1 -2
  4. package/common/lib/layout/component-slot/component-slot-loader.service.d.ts +2 -2
  5. package/common/lib/layout/component-slot/component-slot.types.d.ts +2 -1
  6. package/common/lib/layout/menu/index.d.ts +0 -1
  7. package/common/lib/layout/menu/menu.provider.d.ts +12 -5
  8. package/common/lib/layout/menu/menu.service.d.ts +8 -2
  9. package/common/lib/layout/menu/menu.types.d.ts +9 -6
  10. package/common/lib/settings/index.d.ts +2 -1
  11. package/common/lib/settings/setting-definition.provider.d.ts +19 -0
  12. package/common/lib/settings/settings.types.d.ts +42 -0
  13. package/common/lib/utils/index.d.ts +0 -1
  14. package/esm2022/common/lib/app/application.types.mjs +13 -1
  15. package/esm2022/common/lib/common.module.mjs +14 -16
  16. package/esm2022/common/lib/data/data.types.mjs +1 -1
  17. package/esm2022/common/lib/data/dexie-storage.service.mjs +2 -2
  18. package/esm2022/common/lib/data/entity-storage-service.mjs +5 -5
  19. package/esm2022/common/lib/layout/component-slot/component-slot-loader.service.mjs +6 -5
  20. package/esm2022/common/lib/layout/component-slot/component-slot.types.mjs +1 -1
  21. package/esm2022/common/lib/layout/menu/index.mjs +1 -2
  22. package/esm2022/common/lib/layout/menu/menu.provider.mjs +105 -28
  23. package/esm2022/common/lib/layout/menu/menu.service.mjs +42 -10
  24. package/esm2022/common/lib/layout/menu/menu.types.mjs +1 -1
  25. package/esm2022/common/lib/layout/theme/store/admin-layout.reducers.mjs +2 -1
  26. package/esm2022/common/lib/layout/theme/store/admin-layout.state.mjs +4 -4
  27. package/esm2022/common/lib/schema/widgets/checkbox/checkbox-widget-edit.component.mjs +2 -2
  28. package/esm2022/common/lib/schema/widgets/common-widget-filter/boolean-widget-filter.component.mjs +2 -2
  29. package/esm2022/common/lib/schema/widgets/common-widget-filter/number-widget-filter.component.mjs +2 -2
  30. package/esm2022/common/lib/schema/widgets/common-widget-filter/string-widget-filter.component.mjs +2 -2
  31. package/esm2022/common/lib/schema/widgets/common-widgets.module.mjs +22 -22
  32. package/esm2022/common/lib/schema/widgets/lookup/lookup-widget-filter.component.mjs +2 -2
  33. package/esm2022/common/lib/schema/widgets/password/change-password.component.mjs +2 -2
  34. package/esm2022/common/lib/schema/widgets/selection-list/selection-list-widget-edit.component.mjs +2 -2
  35. package/esm2022/common/lib/settings/index.mjs +3 -2
  36. package/esm2022/common/lib/settings/setting-definition.provider.mjs +229 -0
  37. package/esm2022/common/lib/settings/settings.types.mjs +7 -2
  38. package/esm2022/common/lib/utils/index.mjs +1 -2
  39. package/esm2022/common/lib/workflows/common.workflow.mjs +5 -3
  40. package/esm2022/layout/builder/lib/builder/builder.service.mjs +3 -2
  41. package/esm2022/layout/builder/lib/builder/datasource-provider.service.mjs +27 -0
  42. package/esm2022/layout/builder/lib/builder/index.mjs +2 -1
  43. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +2 -1
  44. package/esm2022/layout/builder/lib/builder/widget-renderer.component.directive.mjs +3 -9
  45. package/esm2022/layout/builder/lib/builder/widget-renderer.component.mjs +7 -5
  46. package/esm2022/layout/builder/lib/builder/widget.types.mjs +59 -6
  47. package/esm2022/layout/designer/lib/designer/components/board/board.component.mjs +66 -47
  48. package/esm2022/layout/designer/lib/designer/components/breadcrumbs/breadcrumbs.component.mjs +27 -32
  49. package/esm2022/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.mjs +5 -4
  50. package/esm2022/layout/designer/lib/designer/components/grid-drawer/grid-drawer.component.mjs +2 -2
  51. package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +35 -10
  52. package/esm2022/layout/designer/lib/designer/components/size-mode/view-size-toolbar.component.mjs +23 -23
  53. package/esm2022/layout/designer/lib/designer/components/widget-picker/widget-picker.component.mjs +3 -3
  54. package/esm2022/layout/designer/lib/designer/designer.component.mjs +10 -9
  55. package/esm2022/layout/designer/lib/designer/index.mjs +2 -1
  56. package/esm2022/layout/designer/lib/designer/shared/designer-connector.service.mjs +5 -5
  57. package/esm2022/layout/designer/lib/designer/shared/designer.service.mjs +158 -63
  58. package/esm2022/layout/designer/lib/designer/shared/designer.types.mjs +1 -1
  59. package/esm2022/layout/designer/lib/designer/shared/generic-commands.types.mjs +52 -0
  60. package/esm2022/layout/designer/lib/designer/shared/widget-designer-renderer.directive.mjs +35 -38
  61. package/esm2022/layout/designer/lib/preview/preview-viewer.component.mjs +12 -3
  62. package/esm2022/layout/designer/lib/preview/preview.component.mjs +3 -2
  63. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +7 -6
  64. package/esm2022/layout/entity/lib/entity-detail-list.viewmodel.mjs +5 -7
  65. package/esm2022/layout/entity/lib/entity-master-create.viewmodel.mjs +3 -3
  66. package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +21 -18
  67. package/esm2022/layout/entity/lib/entity-master-single.viewmodel.mjs +8 -7
  68. package/esm2022/layout/entity/lib/entity.config.mjs +6 -6
  69. package/esm2022/layout/entity/lib/entity.service.mjs +18 -0
  70. package/esm2022/layout/entity/lib/entity.viewmodel.mjs +7 -5
  71. package/esm2022/layout/entity/lib/index.mjs +2 -1
  72. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.mjs +10 -4
  73. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.mjs +42 -32
  74. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.component.mjs +3 -3
  75. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.mjs +20 -19
  76. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +79 -40
  77. package/esm2022/layout/entity/lib/workflows/modify-section.workflow.mjs +2 -2
  78. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +2 -2
  79. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +2 -2
  80. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/entity-custom-view/entity-custom-view.component.mjs +1 -1
  81. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +1 -1
  82. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +6 -5
  83. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +2 -2
  84. package/esm2022/layouts/lib/admin/entity-layout/workflows/create-entity.workflow.mjs +2 -2
  85. package/esm2022/layouts/lib/admin/entity-layout/workflows/modify-entity.workflow.mjs +2 -2
  86. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +30 -10
  87. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +3 -3
  88. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +9 -8
  89. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.mjs +3 -3
  90. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-sorting/list-view-option-sorting.component.mjs +24 -18
  91. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.mjs +3 -3
  92. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +3 -3
  93. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/overview/entity-single-overview.component.mjs +12 -10
  94. package/esm2022/themes/default/lib/layouts/root-layout/components/header/header.component.mjs +2 -2
  95. package/esm2022/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.mjs +4 -3
  96. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +2 -4
  97. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.module.mjs +6 -1
  98. package/esm2022/themes/shared/lib/shared.module.mjs +25 -4
  99. package/esm2022/widgets/lib/properties/editors.props.mjs +4 -2
  100. package/esm2022/widgets/lib/properties/general.props.mjs +2 -2
  101. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-designer.component.mjs +2 -2
  102. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +44 -20
  103. package/esm2022/widgets/lib/widgets/editors/contact/popup-component.mjs +1 -1
  104. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +17 -15
  105. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +7 -10
  106. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +13 -6
  107. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +1 -2
  108. package/esm2022/widgets/lib/widgets/editors/select/index.mjs +3 -3
  109. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +9 -20
  110. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +20 -25
  111. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.mjs +35 -17
  112. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +41 -19
  113. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +24 -15
  114. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +4 -2
  115. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.mjs +14 -7
  116. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.mjs +3 -3
  117. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.mjs +29 -67
  118. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +32 -17
  119. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +1 -22
  120. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.mjs +3 -3
  121. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +76 -78
  122. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +9 -9
  123. package/esm2022/widgets/lib/widgets/layout/template/template-picker/template-picker.component.mjs +120 -0
  124. package/esm2022/widgets/lib/widgets/layout/template/template-widget-edit.component.mjs +65 -24
  125. package/esm2022/widgets/lib/widgets/layout/template/template-widget-view.component.mjs +27 -7
  126. package/esm2022/widgets/lib/widgets/layout/template/template.provider.mjs +18 -1
  127. package/fesm2022/acorex-platform-auth.mjs +1 -1
  128. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-D4k52w2k.mjs → acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs} +3 -4
  129. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-D4k52w2k.mjs.map → acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs.map} +1 -1
  130. package/fesm2022/{acorex-platform-common-avatar-widget-view.component-Bbg1imZG.mjs → acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs} +3 -4
  131. package/fesm2022/acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs.map +1 -0
  132. package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-CRFI7vNR.mjs → acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs} +4 -5
  133. package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-CRFI7vNR.mjs.map → acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs.map} +1 -1
  134. package/fesm2022/{acorex-platform-common-change-password.component-Djd4SeNv.mjs → acorex-platform-common-change-password.component-g_GEw3IZ.mjs} +4 -4
  135. package/fesm2022/{acorex-platform-common-change-password.component-Djd4SeNv.mjs.map → acorex-platform-common-change-password.component-g_GEw3IZ.mjs.map} +1 -1
  136. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-BCUcZiP_.mjs → acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs} +3 -4
  137. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-BCUcZiP_.mjs.map → acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs.map} +1 -1
  138. package/fesm2022/{acorex-platform-common-checkbox-widget-edit.component-GgWLpxV0.mjs → acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs} +4 -5
  139. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs.map +1 -0
  140. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-KuRnDGoQ.mjs → acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs} +3 -4
  141. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-KuRnDGoQ.mjs.map → acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs.map} +1 -1
  142. package/fesm2022/{acorex-platform-common-dateTime-widget-column.component-DaXNK6e2.mjs → acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs} +3 -4
  143. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs.map +1 -0
  144. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-XOReyHZ-.mjs → acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs} +3 -4
  145. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-XOReyHZ-.mjs.map → acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs.map} +1 -1
  146. package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-3PJx2C6G.mjs → acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs} +3 -4
  147. package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-3PJx2C6G.mjs.map → acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs.map} +1 -1
  148. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BWTedYCf.mjs → acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs} +3 -4
  149. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-BWTedYCf.mjs.map → acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs.map} +1 -1
  150. package/fesm2022/{acorex-platform-common-email-widget-column.component-MySWR3RG.mjs → acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs} +3 -4
  151. package/fesm2022/acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs.map +1 -0
  152. package/fesm2022/{acorex-platform-common-email-widget-edit.component-DzqW3Ay6.mjs → acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs} +3 -4
  153. package/fesm2022/{acorex-platform-common-email-widget-edit.component-DzqW3Ay6.mjs.map → acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs.map} +1 -1
  154. package/fesm2022/{acorex-platform-common-email-widget-view.component-ikN6SIj0.mjs → acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs} +2 -3
  155. package/fesm2022/{acorex-platform-common-email-widget-view.component-ikN6SIj0.mjs.map → acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs.map} +1 -1
  156. package/fesm2022/{acorex-platform-common-file-widget-column.component-GtbElxmS.mjs → acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs} +2 -3
  157. package/fesm2022/acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs.map +1 -0
  158. package/fesm2022/{acorex-platform-common-file-widget-edit.component-CPSsJviw.mjs → acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs} +3 -4
  159. package/fesm2022/{acorex-platform-common-file-widget-edit.component-CPSsJviw.mjs.map → acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs.map} +1 -1
  160. package/fesm2022/{acorex-platform-common-file-widget-filter.component-D-_WnxlE.mjs → acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs} +3 -4
  161. package/fesm2022/acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs.map +1 -0
  162. package/fesm2022/{acorex-platform-common-file-widget-view.component-BU8iWCVR.mjs → acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs} +3 -4
  163. package/fesm2022/{acorex-platform-common-file-widget-view.component-BU8iWCVR.mjs.map → acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs.map} +1 -1
  164. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DMu9OW45.mjs → acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs} +3 -4
  165. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DMu9OW45.mjs.map → acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs.map} +1 -1
  166. package/fesm2022/{acorex-platform-common-gallery-widget-filter.component-BNYgn0eK.mjs → acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs} +3 -4
  167. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs.map +1 -0
  168. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-D52gjNcJ.mjs → acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs} +3 -4
  169. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-D52gjNcJ.mjs.map → acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs.map} +1 -1
  170. package/fesm2022/{acorex-platform-common-largetext-widget-edit.component-B7Hq-1ny.mjs → acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs} +2 -3
  171. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs.map +1 -0
  172. package/fesm2022/{acorex-platform-common-lookup-widget-column.component-2ccF27nN.mjs → acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs} +3 -4
  173. package/fesm2022/acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs.map +1 -0
  174. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-Cn3yALld.mjs → acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs} +3 -4
  175. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-Cn3yALld.mjs.map → acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs.map} +1 -1
  176. package/fesm2022/{acorex-platform-common-lookup-widget-filter.component-NY-w7EgD.mjs → acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs} +4 -5
  177. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs.map +1 -0
  178. package/fesm2022/{acorex-platform-common-lookup-widget-view.component-DjbS0xsx.mjs → acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs} +3 -4
  179. package/fesm2022/acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs.map +1 -0
  180. package/fesm2022/{acorex-platform-common-map-widget-edit.component-CHyEencO.mjs → acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs} +3 -4
  181. package/fesm2022/acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs.map +1 -0
  182. package/fesm2022/{acorex-platform-common-map-widget-view.component-BMK6QTKt.mjs → acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs} +3 -4
  183. package/fesm2022/acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs.map +1 -0
  184. package/fesm2022/{acorex-platform-common-messenger-widget-column.component-iVdgR19k.mjs → acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs} +3 -4
  185. package/fesm2022/acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs.map +1 -0
  186. package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-BicSI2_5.mjs → acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs} +3 -4
  187. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs.map +1 -0
  188. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DlSSOqrz.mjs → acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs} +3 -4
  189. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DlSSOqrz.mjs.map → acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs.map} +1 -1
  190. package/fesm2022/{acorex-platform-common-number-widget-edit.component-DlLjt4OQ.mjs → acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs} +3 -4
  191. package/fesm2022/acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs.map +1 -0
  192. package/fesm2022/{acorex-platform-common-number-widget-filter.component-DPZQomNX.mjs → acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs} +4 -5
  193. package/fesm2022/acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs.map +1 -0
  194. package/fesm2022/{acorex-platform-common-number-widget-view.component-BW1ftaLk.mjs → acorex-platform-common-number-widget-view.component-ROrdklif.mjs} +3 -4
  195. package/fesm2022/acorex-platform-common-number-widget-view.component-ROrdklif.mjs.map +1 -0
  196. package/fesm2022/{acorex-platform-common-password-widget-column.component-BZEavb7p.mjs → acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs} +3 -4
  197. package/fesm2022/{acorex-platform-common-password-widget-column.component-BZEavb7p.mjs.map → acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs.map} +1 -1
  198. package/fesm2022/{acorex-platform-common-password-widget-edit.component-De5r-L4i.mjs → acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs} +3 -4
  199. package/fesm2022/acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs.map +1 -0
  200. package/fesm2022/{acorex-platform-common-password-widget-view.component-Dw4xxdOT.mjs → acorex-platform-common-password-widget-view.component-rpjAeimk.mjs} +4 -5
  201. package/fesm2022/{acorex-platform-common-password-widget-view.component-Dw4xxdOT.mjs.map → acorex-platform-common-password-widget-view.component-rpjAeimk.mjs.map} +1 -1
  202. package/fesm2022/{acorex-platform-common-phone-widget-column.component-BTbtfPty.mjs → acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs} +3 -4
  203. package/fesm2022/{acorex-platform-common-phone-widget-column.component-BTbtfPty.mjs.map → acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs.map} +1 -1
  204. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-Ay4y8j_t.mjs → acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs} +3 -4
  205. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-Ay4y8j_t.mjs.map → acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs.map} +1 -1
  206. package/fesm2022/{acorex-platform-common-phone-widget-view.component-D4WqjjBP.mjs → acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs} +3 -4
  207. package/fesm2022/{acorex-platform-common-phone-widget-view.component-D4WqjjBP.mjs.map → acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs.map} +1 -1
  208. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-B5rev2NB.mjs → acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs} +3 -4
  209. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-B5rev2NB.mjs.map → acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs.map} +1 -1
  210. package/fesm2022/{acorex-platform-common-rich-text-widget-edit.component-BHBRQKhj.mjs → acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs} +3 -4
  211. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs.map +1 -0
  212. package/fesm2022/{acorex-platform-common-rich-text-widget-view.component-0bIoY7Ws.mjs → acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs} +3 -4
  213. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs.map +1 -0
  214. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-CzJWP4YT.mjs → acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs} +3 -4
  215. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-CzJWP4YT.mjs.map → acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs.map} +1 -1
  216. package/fesm2022/{acorex-platform-common-selection-list-widget-edit.component-DhYa6y65.mjs → acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs} +4 -5
  217. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs.map +1 -0
  218. package/fesm2022/{acorex-platform-common-selection-list-widget-filter.component-B344MeXJ.mjs → acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs} +3 -4
  219. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs.map +1 -0
  220. package/fesm2022/{acorex-platform-common-selection-list-widget-view.component-Czk5DzgK.mjs → acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs} +3 -4
  221. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs.map +1 -0
  222. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-YSGjL25D.mjs → acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs} +3 -4
  223. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-YSGjL25D.mjs.map → acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs.map} +1 -1
  224. package/fesm2022/{acorex-platform-common-signature-pad-widget-view.component-D64btt99.mjs → acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs} +3 -4
  225. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs.map +1 -0
  226. package/fesm2022/{acorex-platform-common-string-widget-filter.component-5wb1x5Fa.mjs → acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs} +4 -5
  227. package/fesm2022/acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs.map +1 -0
  228. package/fesm2022/{acorex-platform-common-text-widget-column.component-U-V3HD2V.mjs → acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs} +3 -4
  229. package/fesm2022/{acorex-platform-common-text-widget-column.component-U-V3HD2V.mjs.map → acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs.map} +1 -1
  230. package/fesm2022/{acorex-platform-common-text-widget-edit.component-BCs13zUr.mjs → acorex-platform-common-text-widget-edit.component-feJTTnye.mjs} +3 -4
  231. package/fesm2022/{acorex-platform-common-text-widget-edit.component-BCs13zUr.mjs.map → acorex-platform-common-text-widget-edit.component-feJTTnye.mjs.map} +1 -1
  232. package/fesm2022/{acorex-platform-common-text-widget-view.component-V1RkKuNZ.mjs → acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs} +3 -4
  233. package/fesm2022/{acorex-platform-common-text-widget-view.component-V1RkKuNZ.mjs.map → acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs.map} +1 -1
  234. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-FqKLeAhY.mjs → acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs} +3 -4
  235. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-FqKLeAhY.mjs.map → acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs.map} +1 -1
  236. package/fesm2022/{acorex-platform-common-toggle-widget-edit.component-DKSnFdTQ.mjs → acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs} +3 -4
  237. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs.map +1 -0
  238. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-BOYPRUCt.mjs → acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs} +3 -4
  239. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-BOYPRUCt.mjs.map → acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs.map} +1 -1
  240. package/fesm2022/acorex-platform-common.mjs +515 -237
  241. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  242. package/fesm2022/acorex-platform-layout-builder.mjs +92 -17
  243. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  244. package/fesm2022/acorex-platform-layout-designer.mjs +424 -231
  245. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  246. package/fesm2022/acorex-platform-layout-entity.mjs +206 -134
  247. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  248. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs → acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs} +3 -3
  249. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-CPGbLM4C.mjs.map → acorex-platform-layouts-entity-create-view.component-JsGlDx_S.mjs.map} +1 -1
  250. package/fesm2022/{acorex-platform-layouts-entity-import-view.component-CZpEcVi9.mjs → acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs} +2 -2
  251. package/fesm2022/{acorex-platform-layouts-entity-import-view.component-CZpEcVi9.mjs.map → acorex-platform-layouts-entity-import-view.component-9FK_Iro9.mjs.map} +1 -1
  252. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs → acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs} +3 -3
  253. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs.map → acorex-platform-layouts-entity-modify-view.component-CNbc8ewu.mjs.map} +1 -1
  254. package/fesm2022/acorex-platform-layouts.mjs +14 -13
  255. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  256. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BJ7inoTB.mjs → acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs} +7 -7
  257. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-BJ7inoTB.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs.map} +1 -1
  258. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs +306 -0
  259. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs.map +1 -0
  260. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs +88 -0
  261. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs.map +1 -0
  262. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs +150 -0
  263. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs.map +1 -0
  264. package/fesm2022/acorex-platform-themes-default.mjs +49 -27
  265. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  266. package/fesm2022/acorex-platform-themes-shared.mjs +23 -4
  267. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  268. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs → acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs} +2 -2
  269. package/fesm2022/{acorex-platform-widgets-button-widget-designer.component-M_JuDPbt.mjs.map → acorex-platform-widgets-button-widget-designer.component-CPFA79Gx.mjs.map} +1 -1
  270. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs → acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs} +2 -2
  271. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-j1jG8pCr.mjs.map → acorex-platform-widgets-checkbox-widget-column.component-MInF2GVN.mjs.map} +1 -1
  272. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-e9O9qFIf.mjs → acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs} +5 -5
  273. package/fesm2022/{acorex-platform-widgets-checkbox-widget-designer.component-e9O9qFIf.mjs.map → acorex-platform-widgets-checkbox-widget-designer.component-B7Qv2aYx.mjs.map} +1 -1
  274. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs → acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs} +2 -2
  275. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-CDA7Jwov.mjs.map → acorex-platform-widgets-checkbox-widget-view.component-DP4kITs-.mjs.map} +1 -1
  276. package/fesm2022/{acorex-platform-widgets-color-box-widget-designer.component-Brsun0id.mjs → acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs} +5 -5
  277. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-uQBHAspe.mjs.map +1 -0
  278. package/fesm2022/{acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs → acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs} +2 -2
  279. package/fesm2022/{acorex-platform-widgets-contact-widget-filter.component-GTwK51nJ.mjs.map → acorex-platform-widgets-contact-widget-filter.component-DnQZon-E.mjs.map} +1 -1
  280. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs → acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs} +76 -78
  281. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DOulAanE.mjs.map +1 -0
  282. package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs → acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs} +2 -2
  283. package/fesm2022/{acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map → acorex-platform-widgets-rich-text-popup.component-C8KmObPV.mjs.map} +1 -1
  284. package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs +123 -0
  285. package/fesm2022/acorex-platform-widgets-template-picker.component-DPlvwgbu.mjs.map +1 -0
  286. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs +135 -0
  287. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs.map +1 -0
  288. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs → acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs} +2 -2
  289. package/fesm2022/{acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs.map → acorex-platform-widgets-text-block-widget-designer.component-BE6goaZc.mjs.map} +1 -1
  290. package/fesm2022/acorex-platform-widgets.mjs +438 -385
  291. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  292. package/fesm2022/acorex-platform-workflow.mjs +1 -1
  293. package/layout/builder/lib/builder/datasource-provider.service.d.ts +24 -0
  294. package/layout/builder/lib/builder/index.d.ts +1 -0
  295. package/layout/builder/lib/builder/widget.types.d.ts +15 -9
  296. package/layout/designer/lib/designer/components/board/board.component.d.ts +8 -1
  297. package/layout/designer/lib/designer/components/drawers/data-sources/data-sources.component.d.ts +6 -4
  298. package/layout/designer/lib/designer/designer.component.d.ts +3 -2
  299. package/layout/designer/lib/designer/index.d.ts +1 -0
  300. package/layout/designer/lib/designer/shared/designer-connector.service.d.ts +10 -9
  301. package/layout/designer/lib/designer/shared/designer.service.d.ts +18 -5
  302. package/layout/designer/lib/designer/shared/designer.types.d.ts +0 -4
  303. package/layout/designer/lib/designer/shared/generic-commands.types.d.ts +9 -0
  304. package/layout/designer/lib/designer/shared/widget-designer-renderer.directive.d.ts +8 -5
  305. package/layout/designer/lib/preview/preview-viewer.component.d.ts +8 -1
  306. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +8 -4
  307. package/layout/entity/lib/entity-detail-list.viewmodel.d.ts +2 -1
  308. package/layout/entity/lib/entity-master-create.viewmodel.d.ts +1 -1
  309. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +2 -3
  310. package/layout/entity/lib/entity-master-single.viewmodel.d.ts +2 -1
  311. package/layout/entity/lib/entity-master-update.viewmodel.d.ts +1 -1
  312. package/layout/entity/lib/entity.config.d.ts +1 -1
  313. package/layout/entity/lib/entity.service.d.ts +7 -0
  314. package/layout/entity/lib/entity.viewmodel.d.ts +6 -4
  315. package/layout/entity/lib/index.d.ts +1 -0
  316. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +14 -12
  317. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-selector.viewmodel.d.ts +2 -2
  318. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +13 -10
  319. package/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.d.ts +0 -1
  320. package/package.json +12 -12
  321. package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +4 -1
  322. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-sorting/list-view-option-sorting.component.d.ts +1 -1
  323. package/themes/default/lib/layouts/root-layout/components/menu/root-menu.component.d.ts +8 -2
  324. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +3 -6
  325. package/themes/default/lib/layouts/root-layout/root-layout.module.d.ts +14 -13
  326. package/themes/shared/lib/shared.module.d.ts +2 -1
  327. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.d.ts +2 -0
  328. package/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.d.ts +1 -3
  329. package/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.d.ts +1 -0
  330. package/widgets/lib/widgets/editors/select/index.d.ts +2 -2
  331. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +3 -6
  332. package/widgets/lib/widgets/editors/select/select-box-widget-view.component.d.ts +2 -3
  333. package/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.d.ts +6 -7
  334. package/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.d.ts +5 -6
  335. package/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.d.ts +3 -3
  336. package/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.d.ts +1 -2
  337. package/widgets/lib/widgets/editors/toggle/toggle-widget-print.component.d.ts +1 -1
  338. package/widgets/lib/widgets/editors/toggle/toggle-widget-view.component.d.ts +1 -1
  339. package/widgets/lib/widgets/layout/page/page-widget-designer.component.d.ts +8 -9
  340. package/widgets/lib/widgets/layout/template/template-picker/template-picker.component.d.ts +30 -0
  341. package/widgets/lib/widgets/layout/template/template-widget-edit.component.d.ts +3 -0
  342. package/widgets/lib/widgets/layout/template/template-widget-view.component.d.ts +1 -0
  343. package/widgets/lib/widgets/layout/template/template.provider.d.ts +3 -0
  344. package/common/lib/layout/menu/menu.loader.d.ts +0 -17
  345. package/common/lib/utils/router-util.service.d.ts +0 -12
  346. package/esm2022/common/lib/layout/menu/menu.loader.mjs +0 -39
  347. package/esm2022/common/lib/utils/router-util.service.mjs +0 -43
  348. package/fesm2022/acorex-platform-common-avatar-widget-view.component-Bbg1imZG.mjs.map +0 -1
  349. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-GgWLpxV0.mjs.map +0 -1
  350. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-DaXNK6e2.mjs.map +0 -1
  351. package/fesm2022/acorex-platform-common-email-widget-column.component-MySWR3RG.mjs.map +0 -1
  352. package/fesm2022/acorex-platform-common-file-widget-column.component-GtbElxmS.mjs.map +0 -1
  353. package/fesm2022/acorex-platform-common-file-widget-filter.component-D-_WnxlE.mjs.map +0 -1
  354. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-BNYgn0eK.mjs.map +0 -1
  355. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-B7Hq-1ny.mjs.map +0 -1
  356. package/fesm2022/acorex-platform-common-lookup-widget-column.component-2ccF27nN.mjs.map +0 -1
  357. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-NY-w7EgD.mjs.map +0 -1
  358. package/fesm2022/acorex-platform-common-lookup-widget-view.component-DjbS0xsx.mjs.map +0 -1
  359. package/fesm2022/acorex-platform-common-map-widget-edit.component-CHyEencO.mjs.map +0 -1
  360. package/fesm2022/acorex-platform-common-map-widget-view.component-BMK6QTKt.mjs.map +0 -1
  361. package/fesm2022/acorex-platform-common-messenger-widget-column.component-iVdgR19k.mjs.map +0 -1
  362. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-BicSI2_5.mjs.map +0 -1
  363. package/fesm2022/acorex-platform-common-number-widget-edit.component-DlLjt4OQ.mjs.map +0 -1
  364. package/fesm2022/acorex-platform-common-number-widget-filter.component-DPZQomNX.mjs.map +0 -1
  365. package/fesm2022/acorex-platform-common-number-widget-view.component-BW1ftaLk.mjs.map +0 -1
  366. package/fesm2022/acorex-platform-common-password-widget-edit.component-De5r-L4i.mjs.map +0 -1
  367. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-BHBRQKhj.mjs.map +0 -1
  368. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-0bIoY7Ws.mjs.map +0 -1
  369. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-DhYa6y65.mjs.map +0 -1
  370. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-B344MeXJ.mjs.map +0 -1
  371. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-Czk5DzgK.mjs.map +0 -1
  372. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-D64btt99.mjs.map +0 -1
  373. package/fesm2022/acorex-platform-common-string-widget-filter.component-5wb1x5Fa.mjs.map +0 -1
  374. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-DKSnFdTQ.mjs.map +0 -1
  375. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs +0 -298
  376. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BGKWaCth.mjs.map +0 -1
  377. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs +0 -88
  378. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-B3phYOIw.mjs.map +0 -1
  379. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BO_lAQc_.mjs +0 -150
  380. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-BO_lAQc_.mjs.map +0 -1
  381. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-Brsun0id.mjs.map +0 -1
  382. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-BL_EAwUs.mjs.map +0 -1
  383. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs +0 -96
  384. package/fesm2022/acorex-platform-widgets-template-widget-edit.component-gvAh-gH1.mjs.map +0 -1
@@ -3,13 +3,14 @@ import { AXButtonModule } from '@acorex/components/button';
3
3
  import * as i1 from '@acorex/components/decorators';
4
4
  import { AXDecoratorModule } from '@acorex/components/decorators';
5
5
  import * as i1$3 from '@acorex/platform/layout/builder';
6
- import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXPContainerWidgetComponent, AXP_WIDGETS_GROUPS, AXPLayoutBuilderModule, AXP_WIDGET_TOKEN } from '@acorex/platform/layout/builder';
6
+ import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXPContainerWidgetComponent, AXP_WIDGETS_GROUPS, AXPWidgetDataSourceProviderService, AXPLayoutBuilderModule, AXP_WIDGET_TOKEN } from '@acorex/platform/layout/builder';
7
7
  import * as i0 from '@angular/core';
8
- import { signal, computed, Injectable, inject, Component, ChangeDetectionStrategy, ViewEncapsulation, input, output, HostBinding, model, HostListener, EventEmitter, effect, untracked, Output, Injector, NgZone, ViewContainerRef, Directive, ElementRef, ViewChild } from '@angular/core';
8
+ import { signal, computed, Injectable, inject, effect, ViewEncapsulation, ChangeDetectionStrategy, Component, input, output, HostBinding, model, HostListener, EventEmitter, untracked, Output, Injector, NgZone, ViewContainerRef, Directive, ElementRef, ViewChild } from '@angular/core';
9
9
  import { AXLoadingDialogService } from '@acorex/components/loading-dialog';
10
10
  import { AXPopupService } from '@acorex/components/popup';
11
+ import { AXToastService } from '@acorex/components/toast';
11
12
  import { AXFileService } from '@acorex/core/file';
12
- import { merge, cloneDeep, sortBy, set, get, orderBy, capitalize, unionBy, isArray, isNil, isEmpty } from 'lodash-es';
13
+ import { merge, cloneDeep, assign, get, sortBy, set, orderBy, capitalize, unionBy, isArray, isNil, isEmpty } from 'lodash-es';
13
14
  import { Subject, first, merge as merge$1 } from 'rxjs';
14
15
  import * as i2$1 from '@acorex/components/common';
15
16
  import { AXCommonModule } from '@acorex/components/common';
@@ -29,7 +30,7 @@ import * as i3$1 from '@acorex/components/drawer';
29
30
  import { AXDrawerModule } from '@acorex/components/drawer';
30
31
  import * as i4 from '@acorex/components/dropdown';
31
32
  import { AXDropdownModule } from '@acorex/components/dropdown';
32
- import * as i6$1 from '@acorex/components/dropdown-button';
33
+ import * as i5 from '@acorex/components/dropdown-button';
33
34
  import { AXDropdownButtonModule } from '@acorex/components/dropdown-button';
34
35
  import * as i2$2 from '@acorex/components/menu';
35
36
  import { AXMenuModule } from '@acorex/components/menu';
@@ -224,41 +225,107 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
224
225
  }]
225
226
  }] });
226
227
 
227
- class AXPDesignerModes {
228
- static { this.View = { id: 'view', title: 'View' }; }
229
- static { this.Design = { id: 'designer', title: 'Designer' }; }
230
- static { this.Edit = { id: 'edit', title: 'Edit' }; }
228
+ class AXPDesignerConnector {
229
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnector, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
230
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnector }); }
231
+ }
232
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnector, decorators: [{
233
+ type: Injectable
234
+ }] });
235
+
236
+ const AXP_DESIGNER_COPY_MENU = {
237
+ text: 'Copy',
238
+ name: 'copy',
239
+ icon: 'fa-solid fa-copy',
240
+ suffix: {
241
+ text: 'Ctrl+C',
242
+ },
243
+ };
244
+ const AXP_DESIGNER_CLONE_MENU = {
245
+ text: 'Clone',
246
+ name: 'clone',
247
+ icon: 'fa-solid fa-clone',
248
+ suffix: {
249
+ text: 'Ctrl+D',
250
+ },
251
+ };
252
+ const AXP_DESIGNER_CUT_MENU = {
253
+ text: 'Cut',
254
+ name: 'cut',
255
+ icon: 'fa-solid fa-cut',
256
+ suffix: {
257
+ text: 'Ctrl+X',
258
+ },
259
+ };
260
+ const AXP_DESIGNER_PASTE_MENU = {
261
+ text: 'Paste',
262
+ name: 'paste',
263
+ icon: 'fa-solid fa-paste',
264
+ suffix: {
265
+ text: 'Ctrl+V',
266
+ },
267
+ };
268
+ const AXP_DESIGNER_ADD_WIDGET_MENU = {
269
+ text: 'Add Widget',
270
+ name: 'add-widget',
271
+ icon: 'fa-solid fa-plus',
272
+ };
273
+ const AXP_DESIGNER_DELETE_WIDGET_MENU = {
274
+ text: 'Remove Widget',
275
+ name: 'remove-widget',
276
+ icon: 'fa-solid fa-trash',
277
+ };
278
+ const AXP_DESIGNER_SAVE_AS_WIDGET_MENU = {
279
+ text: 'Save As...',
280
+ name: 'save-as',
281
+ icon: 'fa-solid fa-save',
282
+ };
283
+ function cloneWidgetMenu(item, options) {
284
+ return assign(cloneDeep(item), options);
231
285
  }
232
286
 
233
287
  class AXPDesignerService {
288
+ #ef;
234
289
  constructor() {
235
290
  this.popupService = inject(AXPopupService);
291
+ this.toastService = inject(AXToastService);
236
292
  this.fileService = inject(AXFileService);
237
293
  this.loadingService = inject(AXLoadingDialogService);
238
294
  this.widgetRegisteryService = inject(AXPWidgetRegistryService);
295
+ this.connector = inject(AXPDesignerConnector);
239
296
  this.channel = new BroadcastChannel('livePreviewChannel');
240
297
  this.document = signal(this.createDoc());
241
298
  this.currentPageIndex = signal(0);
242
299
  this.currentPage = signal(this.document().children?.[0]);
243
300
  this.commandManager = inject(CommandManager);
244
301
  this.clipboard = signal(null);
245
- this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != 'page');
302
+ //
303
+ this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
304
+ this.canDelete = computed(() => this.selectedNode() != null && this.selectedNode()?.type != 'page-layout');
305
+ this.canInsert = computed(() => this.selectedNode() != null && this.selectedNodeConfig().type == 'container');
246
306
  this.canPaste = computed(() => this.clipboard() != null);
307
+ //
247
308
  this.history = computed(() => this.commandManager.history());
248
309
  this.canUndo = computed(() => this.commandManager.canUndo());
249
310
  this.canRedo = computed(() => this.commandManager.canRedo());
311
+ //
312
+ this.canSave = computed(() => this.templateId() != null);
250
313
  this.breadcrumbs = computed(() => {
251
314
  return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];
252
315
  });
253
316
  this.selectedNode = signal(null);
317
+ this.selectedNodeConfig = computed(() => get(this.selectedNode(), '__meta__.config'));
254
318
  this._focusedNode = null;
255
319
  this.focusedNode = () => this._focusedNode;
256
- this.mode = signal(AXPDesignerModes.Design);
257
320
  this.size = signal('xl');
258
321
  this.onSelected = new Subject();
259
322
  this.onRefresh = new Subject();
260
323
  this.onUpdate = new Subject();
261
324
  this.onFocused = new Subject();
325
+ this.templateId = signal(null);
326
+ this.#ef = effect(() => {
327
+ this.refresh({ widget: this.currentPage() });
328
+ }, { allowSignalWrites: true });
262
329
  this.channelCallback = (message) => {
263
330
  if (message.data.action == 'designer-preview-loaded') {
264
331
  this.updatePreview();
@@ -314,7 +381,7 @@ class AXPDesignerService {
314
381
  // Return undefined if no match is found
315
382
  return undefined;
316
383
  }
317
- async showPicker(currentNode) {
384
+ async showPicker(currentNode = this.selectedNode()) {
318
385
  const com = await Promise.resolve().then(function () { return widgetPicker_component; }).then((c) => c.AXPDesignerWidgetPickerComponent);
319
386
  const result = await this.popupService.open(com, {
320
387
  title: 'Widget Gallery',
@@ -375,11 +442,11 @@ class AXPDesignerService {
375
442
  }
376
443
  goToPage(index) {
377
444
  this.currentPageIndex.set(index);
378
- setTimeout(() => {
379
- this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
380
- this.select({ widget: this.currentPage() });
381
- this.updatePreview();
382
- });
445
+ //setTimeout(() => {
446
+ this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
447
+ this.select({ widget: this.currentPage() });
448
+ //this.updatePreview();
449
+ //});
383
450
  }
384
451
  reRenderPage() {
385
452
  this.currentPage.set({ ...this.currentPage() });
@@ -458,7 +525,7 @@ class AXPDesignerService {
458
525
  this.select({ widget: cloned });
459
526
  return cloned;
460
527
  }
461
- removeWidget(node) {
528
+ removeWidget(node = this.selectedNode()) {
462
529
  if (node.type === 'document-layout' ||
463
530
  (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
464
531
  console.error('Cannot remove the page node.');
@@ -540,15 +607,15 @@ class AXPDesignerService {
540
607
  return node;
541
608
  }
542
609
  copy(widget = this.selectedNode()) {
543
- if (!widget)
544
- return;
545
- this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy
610
+ if (this.canCutCopy()) {
611
+ this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy
612
+ }
546
613
  }
547
614
  cut(widget = this.selectedNode()) {
548
- if (!widget)
549
- return;
550
- this.copy(widget); // Copy the widget to the clipboard
551
- this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
615
+ if (this.canCutCopy()) {
616
+ this.copy(widget); // Copy the widget to the clipboard
617
+ this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
618
+ }
552
619
  }
553
620
  clone(widget = this.selectedNode()) {
554
621
  if (!widget)
@@ -593,8 +660,23 @@ class AXPDesignerService {
593
660
  this.select({ widget: newNode }); // Select the newly pasted node
594
661
  });
595
662
  }
596
- export() {
597
- const json = this.removeMetaProp(this.document());
663
+ async save() {
664
+ if (this.templateId()) {
665
+ const content = this.export();
666
+ await this.connector.save(this.templateId(), { json: content });
667
+ this.toastService.success('Your changes saved successfully');
668
+ }
669
+ else {
670
+ this.downloadJson();
671
+ }
672
+ }
673
+ async saveAs(node = this.document()) {
674
+ const content = this.export(node);
675
+ await this.connector.saveAs({ json: content });
676
+ this.toastService.success('Your changes saved successfully');
677
+ }
678
+ export(node = this.document()) {
679
+ const json = this.removeMetaProp(node);
598
680
  return JSON.stringify(json);
599
681
  }
600
682
  downloadJson() {
@@ -616,54 +698,69 @@ class AXPDesignerService {
616
698
  URL.revokeObjectURL(url);
617
699
  document.body.removeChild(a);
618
700
  }
701
+ async loadById(id) {
702
+ try {
703
+ const content = await this.connector.load(id);
704
+ this.templateId.set(id);
705
+ if (content) {
706
+ await this.loadByContent(content);
707
+ }
708
+ }
709
+ catch (error) {
710
+ this.toastService.danger(error.message);
711
+ }
712
+ }
619
713
  async importJSon() {
620
714
  const files = await this.fileService.choose({ multiple: false, accept: 'application/json' });
621
715
  if (files && files.length) {
622
716
  const file = files[0];
623
717
  const content = await file.text();
624
- const rootNode = JSON.parse(content);
625
- const totalNode = this.countTotalNodes(rootNode);
626
- const processedNodes = { count: 0 };
627
- const button = {
628
- text: 'Cancel',
629
- autofocus: true,
630
- color: 'primary',
631
- onClick: (e) => {
632
- dialog.close();
633
- },
634
- };
635
- const dialog = this.loadingService.show({
636
- mode: 'determinate',
637
- title: 'Import Json File',
638
- progressColor: 'primary',
639
- text: 'Processing json file',
640
- status: `0 of ${totalNode}`,
641
- buttons: [button],
718
+ await this.loadByContent(content);
719
+ }
720
+ }
721
+ async loadByContent(content) {
722
+ const rootNode = JSON.parse(content);
723
+ const totalNode = this.countTotalNodes(rootNode);
724
+ const processedNodes = { count: 0 };
725
+ const button = {
726
+ text: 'Cancel',
727
+ autofocus: true,
728
+ color: 'primary',
729
+ onClick: (e) => {
730
+ dialog.close();
731
+ },
732
+ };
733
+ const dialog = this.loadingService.show({
734
+ mode: 'determinate',
735
+ title: 'Loading Content',
736
+ progressColor: 'primary',
737
+ text: 'Processing content',
738
+ status: `0 of ${totalNode}`,
739
+ buttons: [button],
740
+ });
741
+ try {
742
+ const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {
743
+ dialog.setProgressValue(Math.ceil((count / totalNode) * 100));
744
+ dialog.setProgressStatus(`${count} of ${totalNode}`);
642
745
  });
643
- try {
644
- const root = await this.addMetaToNodes(rootNode, processedNodes, (count) => {
645
- dialog.setProgressValue(Math.ceil((count / totalNode) * 100));
646
- dialog.setProgressStatus(`${count} of ${totalNode}`);
647
- });
648
- const page = root.children?.[0];
649
- this.document.set(root);
650
- this.currentPage.set(page);
651
- dialog.setProgressColor('success');
652
- dialog.setProgressText('Json file processed successfully');
653
- button.text = 'Okay';
654
- button.color = 'success';
655
- dialog.setProgressValue(100);
656
- setTimeout(() => {
657
- this.reRenderPage();
658
- dialog.close();
659
- }, 1000);
660
- }
661
- catch (error) {
662
- dialog.setProgressColor('danger');
663
- dialog.setProgressText(error instanceof Error ? error.message : 'Cannot process json file');
664
- button.text = 'Close';
665
- button.color = 'danger';
666
- }
746
+ const page = root.children?.[0];
747
+ this.document.set(root);
748
+ this.currentPage.set(page);
749
+ dialog.setProgressColor('success');
750
+ dialog.setProgressText('Content loaded successfully');
751
+ button.text = 'Okay';
752
+ button.color = 'success';
753
+ dialog.setProgressValue(100);
754
+ setTimeout(() => {
755
+ this.reRenderPage();
756
+ dialog.close();
757
+ }, 500);
758
+ }
759
+ catch (error) {
760
+ dialog.setProgressColor('danger');
761
+ dialog.setProgressText(error instanceof Error ? error.message : 'Cannot load content');
762
+ button.text = 'Close';
763
+ button.color = 'danger';
667
764
  }
668
765
  }
669
766
  countTotalNodes(node) {
@@ -721,6 +818,56 @@ class AXPDesignerService {
721
818
  openPreviewWindow() {
722
819
  window.open('/forms/preview', '_blank');
723
820
  }
821
+ getContextMenuItems() {
822
+ const items = [];
823
+ //
824
+ if (this.canInsert()) {
825
+ items.push(cloneWidgetMenu(AXP_DESIGNER_ADD_WIDGET_MENU, {
826
+ disabled: !this.canInsert(), break: true
827
+ }));
828
+ }
829
+ //
830
+ items.push(cloneWidgetMenu(AXP_DESIGNER_CLONE_MENU, { disabled: !this.canCutCopy() }));
831
+ items.push(cloneWidgetMenu(AXP_DESIGNER_CUT_MENU, { disabled: !this.canCutCopy() }));
832
+ items.push(cloneWidgetMenu(AXP_DESIGNER_COPY_MENU, { disabled: !this.canCutCopy() }));
833
+ items.push(cloneWidgetMenu(AXP_DESIGNER_PASTE_MENU, { disabled: !this.canPaste(), break: true }));
834
+ //
835
+ items.push(cloneWidgetMenu(AXP_DESIGNER_DELETE_WIDGET_MENU, { disabled: !this.canDelete(), break: true }));
836
+ //
837
+ items.push(cloneWidgetMenu(AXP_DESIGNER_SAVE_AS_WIDGET_MENU));
838
+ return items;
839
+ }
840
+ executeCommand(name, data) {
841
+ switch (name) {
842
+ case AXP_DESIGNER_ADD_WIDGET_MENU.name: {
843
+ this.showPicker();
844
+ break;
845
+ }
846
+ //
847
+ case AXP_DESIGNER_DELETE_WIDGET_MENU.name: {
848
+ this.removeWidget();
849
+ break;
850
+ }
851
+ //
852
+ case AXP_DESIGNER_CLONE_MENU.name: {
853
+ this.clone();
854
+ break;
855
+ }
856
+ case AXP_DESIGNER_CUT_MENU.name: {
857
+ this.cut();
858
+ break;
859
+ }
860
+ case AXP_DESIGNER_COPY_MENU.name: {
861
+ this.copy();
862
+ break;
863
+ }
864
+ case AXP_DESIGNER_PASTE_MENU.name: {
865
+ this.paste();
866
+ break;
867
+ }
868
+ //
869
+ }
870
+ }
724
871
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
725
872
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
726
873
  }
@@ -894,7 +1041,7 @@ class AXPDesignerGridDrawerComponent {
894
1041
  </tr>
895
1042
  </tbody>
896
1043
  </table>
897
- `, isInline: true, styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1044
+ `, isInline: true, styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity, 1));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity, 1))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
898
1045
  }
899
1046
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, decorators: [{
900
1047
  type: Component,
@@ -918,7 +1065,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
918
1065
  </tr>
919
1066
  </tbody>
920
1067
  </table>
921
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [], styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}\n"] }]
1068
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [], styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity, 1));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity, 1))}\n"] }]
922
1069
  }], propDecorators: { handleMouseLeave: [{
923
1070
  type: HostListener,
924
1071
  args: ['mouseleave', ['$event']]
@@ -1012,7 +1159,7 @@ class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {
1012
1159
  this.close({ widgets: this.selectedWidgets() });
1013
1160
  }
1014
1161
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
1015
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2$1.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
1162
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity, 1))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2$1.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
1016
1163
  }
1017
1164
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, decorators: [{
1018
1165
  type: Component,
@@ -1025,7 +1172,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1025
1172
  AXTabsModule,
1026
1173
  AXSearchBoxModule,
1027
1174
  AXPStickyDirective,
1028
- ], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"] }]
1175
+ ], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 dark:hover:ax-bg-primary-800 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-on-surface group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700 ax-text-on-surface-fore\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity, 1));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity, 1))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity, 1))}\n"] }]
1029
1176
  }] });
1030
1177
 
1031
1178
  var widgetPicker_component = /*#__PURE__*/Object.freeze({
@@ -1037,7 +1184,8 @@ class AXPWidgetPropertyViewerComponent {
1037
1184
  constructor() {
1038
1185
  this.widget = input.required();
1039
1186
  this.widgetRegistryService = inject(AXPWidgetRegistryService);
1040
- this.connector = inject(AXPDesignerConnectorAbstract);
1187
+ this.connector = inject(AXPDesignerConnector);
1188
+ this.dataSourceProvider = inject(AXPWidgetDataSourceProviderService);
1041
1189
  this.currentTabIndex = signal(0);
1042
1190
  this.config = signal(null);
1043
1191
  this.allPoperties = [];
@@ -1127,8 +1275,8 @@ class AXPWidgetPropertyViewerComponent {
1127
1275
  handleCollapsedChange(group, collapsed) {
1128
1276
  this.groupCollapsedStates.set(group, collapsed);
1129
1277
  }
1130
- getDataSourceNames() {
1131
- return this.connector.getDataSourcesNames();
1278
+ async getDataSourceNames() {
1279
+ return (await this.dataSourceProvider.items()).map(c => ({ id: c.name, title: c.title }));
1132
1280
  }
1133
1281
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1134
1282
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetPropertyViewerComponent, isStandalone: true, selector: "axp-widget-property-viewer", inputs: { widget: { classPropertyName: "widget", publicName: "widget", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onChanged: "onChanged" }, ngImport: i0, template: "<axp-widgets-container [context]=\"context()\" (onChanged)=\"handleContextChange($event)\" [functions]=\"functions\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for( tab of tabs();track $index){\n <ax-tab-item [text]=\"tab.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-collapse-group class=\"ax-h-fit\" look=\"blank\">\n @for( group of groups();track $index){\n <ax-collapse [caption]=\"group.title\" look=\"solid\" [(isCollapsed)]=\"group.isCollapsed\"\n (isCollapsedChange)=\"handleCollapsedChange(group.name,$event)\">\n <div class=\"ax-flex ax-flex-col ax-divide-y\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <span class=\"ax-font-semibold\">{{p.title}}</span>\n @if(p.schema.interface)\n {\n <ng-container axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </ng-container>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n</axp-widgets-container>", styles: ["ax-collapse .ax-collapse-header{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i1$2.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i1$2.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1$3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "directive", type: i1$3.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -1168,10 +1316,10 @@ class AXPWidgetDesignerRendererDirective {
1168
1316
  this.service.onSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
1169
1317
  this.zone.runOutsideAngular(() => {
1170
1318
  if (this.isCurrentWidget(c.widget)) {
1171
- this.select();
1319
+ this.applySelectedStyle();
1172
1320
  }
1173
1321
  else {
1174
- this.unselect();
1322
+ this.removeSelectedStyle();
1175
1323
  }
1176
1324
  });
1177
1325
  });
@@ -1191,17 +1339,21 @@ class AXPWidgetDesignerRendererDirective {
1191
1339
  }
1192
1340
  });
1193
1341
  //
1194
- effect(async () => {
1195
- await this.loadComponent();
1196
- }, { allowSignalWrites: true });
1342
+ }
1343
+ // Detect input changes
1344
+ ngOnChanges(changes) {
1345
+ if (changes['mode'] || changes['node']) {
1346
+ // Check if either 'mode' or 'node' has changed
1347
+ this.loadComponent();
1348
+ }
1197
1349
  }
1198
1350
  async loadComponent() {
1199
1351
  this.viewContainerRef.clear();
1200
1352
  this.isLoading.set(true);
1201
1353
  this.config = this.widgetRegistery.resolve(this.node().type);
1202
1354
  //
1203
- const props = this.config?.components[this.mode()]?.properties
1204
- ?.filter((c) => c.schema.defaultValue)
1355
+ const props = [...(this.config?.properties ?? []), ...(this.config?.components[this.mode()]?.properties ?? [])]
1356
+ ?.filter((c) => c.schema.defaultValue != null)
1205
1357
  .map((c) => ({ [c.name]: c.schema.defaultValue }))
1206
1358
  .reduce((acc, curr) => {
1207
1359
  return { ...acc, ...curr };
@@ -1232,21 +1384,23 @@ class AXPWidgetDesignerRendererDirective {
1232
1384
  //
1233
1385
  this.instance.onReady.pipe(first()).subscribe(() => {
1234
1386
  const host = this.hostElement();
1235
- host.classList.add("axp-widget-host");
1387
+ set(host, '__meta__.renderer', this);
1388
+ set(host, '__meta__.instance', this.instance);
1389
+ host.classList.add('axp-widget-host');
1236
1390
  if (this.mode() == 'designer') {
1237
1391
  host.addEventListener('mouseover', (e) => {
1238
1392
  e.stopPropagation();
1239
1393
  this.addOverlay();
1240
- this.service.focus({ widget: this.node() });
1394
+ this.focus();
1241
1395
  });
1242
1396
  host.addEventListener('mouseleave', (e) => {
1243
1397
  e.stopPropagation();
1244
1398
  this.removeOverlay();
1245
- this.service.focus({ widget: null });
1399
+ this.blur();
1246
1400
  });
1247
1401
  host.addEventListener('click', (e) => {
1248
1402
  e.stopPropagation();
1249
- this.select();
1403
+ this.applySelectedStyle();
1250
1404
  this.service.select({ widget: this.node() });
1251
1405
  });
1252
1406
  this.service.register({
@@ -1259,10 +1413,20 @@ class AXPWidgetDesignerRendererDirective {
1259
1413
  });
1260
1414
  }
1261
1415
  select() {
1416
+ this.service.select({ widget: this.node() });
1417
+ this.applySelectedStyle();
1418
+ }
1419
+ focus() {
1420
+ this.service.focus({ widget: this.node() });
1421
+ }
1422
+ blur() {
1423
+ this.service.focus({ widget: null });
1424
+ }
1425
+ applySelectedStyle() {
1262
1426
  this.hostElement()?.classList.add('axp-state-selected');
1263
1427
  this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
1264
1428
  }
1265
- unselect() {
1429
+ removeSelectedStyle() {
1266
1430
  this.hostElement()?.classList.remove('axp-state-selected');
1267
1431
  }
1268
1432
  addOverlay() {
@@ -1273,18 +1437,17 @@ class AXPWidgetDesignerRendererDirective {
1273
1437
  if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.type == 'container') {
1274
1438
  return;
1275
1439
  }
1276
- ;
1277
1440
  this.overlay = document.createElement('div');
1278
1441
  this.overlay.classList.add('axp-widget-overlay');
1279
1442
  this.overlay.addEventListener('click', (e) => {
1280
1443
  e.preventDefault();
1281
1444
  e.stopPropagation();
1282
- this.service.select({ widget: this.node() });
1445
+ this.select();
1283
1446
  });
1284
1447
  this.overlay.addEventListener('mouseleave', (e) => {
1285
1448
  e.preventDefault();
1286
1449
  e.stopPropagation();
1287
- this.service.focus({ widget: null });
1450
+ this.blur();
1288
1451
  });
1289
1452
  this.hostElement().appendChild(this.overlay);
1290
1453
  }
@@ -1318,27 +1481,12 @@ class AXPWidgetDesignerRendererDirective {
1318
1481
  });
1319
1482
  this.instance?.setOptions(this.mergedOptions());
1320
1483
  }
1321
- async onKeydownHandler(event) {
1322
- if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode()) && event.target == document.body) {
1323
- // handle delete
1324
- if (event.key == "Delete") {
1325
- event.preventDefault();
1326
- event.stopPropagation();
1327
- this.service.removeWidget(this.node());
1328
- }
1329
- //
1330
- // handle delete
1331
- if (this.config?.type == 'container' && event.key == "Insert") {
1332
- this.service.showPicker(this.node());
1333
- }
1334
- }
1335
- }
1336
1484
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
1337
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: AXPWidgetDesignerRendererDirective, isStandalone: true, selector: "[axp-widget-designer-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown": "onKeydownHandler($event)" } }, providers: [
1485
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: AXPWidgetDesignerRendererDirective, isStandalone: true, selector: "[axp-widget-designer-renderer]", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, providers: [
1338
1486
  {
1339
1487
  provide: AXUnsubscriber,
1340
1488
  },
1341
- ], ngImport: i0 }); }
1489
+ ], usesOnChanges: true, ngImport: i0 }); }
1342
1490
  }
1343
1491
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererDirective, decorators: [{
1344
1492
  type: Directive,
@@ -1351,45 +1499,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1351
1499
  },
1352
1500
  ],
1353
1501
  }]
1354
- }], ctorParameters: () => [], propDecorators: { onKeydownHandler: [{
1355
- type: HostListener,
1356
- args: ['document:keydown', ['$event']]
1357
- }] } });
1502
+ }], ctorParameters: () => [] });
1358
1503
 
1359
1504
  class AXPDesignerBoardComponent {
1360
- constructor() {
1361
- this.context = {};
1362
- this.elementRef = inject((ElementRef));
1363
- this.breakpointMap = {
1364
- 'sm': 640,
1365
- 'md': 768,
1366
- 'lg': 1024,
1367
- 'xl': 1280,
1368
- 'xxl': 1536
1369
- };
1370
- this.ctx = effect(() => {
1371
- const mode = this.service.mode();
1372
- this.context = {};
1373
- });
1374
- this.service = inject(AXPDesignerService);
1375
- this.width = computed(() => {
1376
- switch (this.service.size()) {
1377
- case 'sm':
1378
- return '340px';
1379
- case 'md':
1380
- case 'lg':
1381
- return '768px';
1382
- default:
1383
- return '100%';
1384
- }
1385
- });
1386
- this.ef = effect(() => {
1387
- this.removeCustomClass();
1388
- if (this.service.size() != 'xl') {
1389
- this.applyResponsiveStyles(this.service.size());
1390
- }
1391
- });
1392
- }
1393
1505
  // Unified method to extract media queries and create a custom class
1394
1506
  applyResponsiveStyles(breakpoint) {
1395
1507
  const minWidth = get(this.breakpointMap, breakpoint);
@@ -1417,10 +1529,10 @@ class AXPDesignerBoardComponent {
1417
1529
  }
1418
1530
  createCustomClass(className, styles, breakpoint) {
1419
1531
  const styleSheet = document.createElement('style');
1420
- styleSheet.setAttribute("data-screen", breakpoint);
1532
+ styleSheet.setAttribute('data-screen', breakpoint);
1421
1533
  // Construct a pure CSS string, dynamically replacing the breakpoint prefix
1422
- let styleString = "";
1423
- styles.forEach(style => {
1534
+ let styleString = '';
1535
+ styles.forEach((style) => {
1424
1536
  // Replace any prefixed classes like 'lg:' or 'md:' dynamically
1425
1537
  const dynamicPrefix = new RegExp(`\\.${breakpoint}\\\\:`, 'g');
1426
1538
  styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix
@@ -1430,11 +1542,62 @@ class AXPDesignerBoardComponent {
1430
1542
  this.elementRef.nativeElement.appendChild(styleSheet);
1431
1543
  }
1432
1544
  removeCustomClass() {
1433
- this.elementRef.nativeElement.querySelectorAll('style').forEach(s => s.remove());
1545
+ this.elementRef.nativeElement.querySelectorAll('style').forEach((s) => s.remove());
1546
+ }
1547
+ /**
1548
+ *
1549
+ */
1550
+ constructor() {
1551
+ this.context = {};
1552
+ this.elementRef = inject((ElementRef));
1553
+ this.breakpointMap = {
1554
+ sm: 640,
1555
+ md: 768,
1556
+ lg: 1024,
1557
+ xl: 1280,
1558
+ xxl: 1536,
1559
+ };
1560
+ this.service = inject(AXPDesignerService);
1561
+ this.width = computed(() => {
1562
+ switch (this.service.size()) {
1563
+ case 'sm':
1564
+ return '340px';
1565
+ case 'md':
1566
+ case 'lg':
1567
+ return '768px';
1568
+ default:
1569
+ return '100%';
1570
+ }
1571
+ });
1572
+ this.ef = effect(() => {
1573
+ this.removeCustomClass();
1574
+ if (this.service.size() != 'xl') {
1575
+ this.applyResponsiveStyles(this.service.size());
1576
+ }
1577
+ });
1578
+ this.service.onRefresh.subscribe(() => {
1579
+ this.contextMenu?.refresh();
1580
+ });
1434
1581
  }
1435
1582
  handleContextChanged(e) {
1436
1583
  console.log(e);
1437
1584
  }
1585
+ handleContextMenuOpening(e) {
1586
+ const renderer = get(e.targetElement, '__meta__.renderer');
1587
+ renderer.select();
1588
+ const items = this.service.getContextMenuItems();
1589
+ if (items.length) {
1590
+ e.items.push(...items);
1591
+ }
1592
+ else {
1593
+ e.canceled = true;
1594
+ }
1595
+ }
1596
+ handleContextMenuItemClick(e) {
1597
+ if (e.item.name) {
1598
+ this.service.executeCommand(e.item.name);
1599
+ }
1600
+ }
1438
1601
  get __style() {
1439
1602
  const cls = {};
1440
1603
  cls[`width`] = this.width();
@@ -1451,16 +1614,15 @@ class AXPDesignerBoardComponent {
1451
1614
  return cls;
1452
1615
  }
1453
1616
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1454
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", host: { properties: { "style": "this.__style", "class": "this.__class" } }, ngImport: i0, template: "<axp-widgets-container [context]=\"context\" (onChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode().id\"></ng-container>\n</axp-widgets-container>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1$3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "directive", type: AXPWidgetDesignerRendererDirective, selector: "[axp-widget-designer-renderer]", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1617
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", host: { properties: { "style": "this.__style", "class": "this.__class" } }, viewQueries: [{ propertyName: "contextMenu", first: true, predicate: ["contextMenu"], descendants: true }], ngImport: i0, template: "<axp-widgets-container [context]=\"context\" (onChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n</axp-widgets-container>\n\n<ax-context-menu\n class=\"ax-dark\"\n #contextMenu\n [target]=\"'.axp-widget-host'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n>\n</ax-context-menu>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1$3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "directive", type: AXPWidgetDesignerRendererDirective, selector: "[axp-widget-designer-renderer]", inputs: ["parentNode", "index", "mode", "node"] }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$2.AXContextMenuComponent, selector: "ax-context-menu", inputs: ["orientation", "openOn", "closeOn", "items", "target"], outputs: ["onItemClick", "onOpening"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1455
1618
  }
1456
1619
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, decorators: [{
1457
1620
  type: Component,
1458
- args: [{ selector: 'axp-designer-board', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1459
- CommonModule,
1460
- AXPLayoutBuilderModule,
1461
- AXPWidgetDesignerRendererDirective
1462
- ], template: "<axp-widgets-container [context]=\"context\" (onChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode().id\"></ng-container>\n</axp-widgets-container>" }]
1463
- }], propDecorators: { __style: [{
1621
+ args: [{ selector: 'axp-designer-board', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXPLayoutBuilderModule, AXPWidgetDesignerRendererDirective, AXMenuModule], template: "<axp-widgets-container [context]=\"context\" (onChanged)=\"handleContextChanged($event)\">\n <ng-container axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"'designer'\"></ng-container>\n</axp-widgets-container>\n\n<ax-context-menu\n class=\"ax-dark\"\n #contextMenu\n [target]=\"'.axp-widget-host'\"\n [orientation]=\"'vertical'\"\n [closeOn]=\"'leave'\"\n (onOpening)=\"handleContextMenuOpening($event)\"\n (onItemClick)=\"handleContextMenuItemClick($event)\"\n>\n</ax-context-menu>\n" }]
1622
+ }], ctorParameters: () => [], propDecorators: { contextMenu: [{
1623
+ type: ViewChild,
1624
+ args: ['contextMenu']
1625
+ }], __style: [{
1464
1626
  type: HostBinding,
1465
1627
  args: ['style']
1466
1628
  }], __class: [{
@@ -1473,7 +1635,7 @@ class AXPDesignerBreadcrumbsComponent {
1473
1635
  this.service = inject(AXPDesignerService);
1474
1636
  }
1475
1637
  getTitle(node) {
1476
- return get(node, "__meta__.config.title");
1638
+ return get(node, '__meta__.config.title');
1477
1639
  }
1478
1640
  handleClick(node) {
1479
1641
  this.service.select({ widget: node });
@@ -1483,43 +1645,38 @@ class AXPDesignerBreadcrumbsComponent {
1483
1645
  }
1484
1646
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1485
1647
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerBreadcrumbsComponent, isStandalone: true, selector: "axp-designer-breadcrumbs", ngImport: i0, template: `
1486
- <ax-breadcrumbs class="ax-text-white">
1487
- @for( b of service.breadcrumbs();track $index){
1488
- <ax-breadcrumbs-item>
1489
- <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{getTitle(b)}}</a>
1490
- </ax-breadcrumbs-item>
1491
- }
1492
- <ng-template #divider>
1493
- <i class="ax-icon ax-icon-chevron-right"></i>
1494
- </ng-template>
1495
- </ax-breadcrumbs>
1496
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$4.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$4.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1648
+ <ax-breadcrumbs>
1649
+ @for( b of service.breadcrumbs();track $index){
1650
+ <ax-breadcrumbs-item>
1651
+ <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{ getTitle(b) }}</a>
1652
+ </ax-breadcrumbs-item>
1653
+ }
1654
+ <ng-template #divider>
1655
+ <i class="ax-icon ax-icon-chevron-right"></i>
1656
+ </ng-template>
1657
+ </ax-breadcrumbs>
1658
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$4.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$4.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1497
1659
  }
1498
1660
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, decorators: [{
1499
1661
  type: Component,
1500
1662
  args: [{
1501
1663
  selector: 'axp-designer-breadcrumbs',
1502
1664
  template: `
1503
- <ax-breadcrumbs class="ax-text-white">
1504
- @for( b of service.breadcrumbs();track $index){
1505
- <ax-breadcrumbs-item>
1506
- <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{getTitle(b)}}</a>
1507
- </ax-breadcrumbs-item>
1508
- }
1509
- <ng-template #divider>
1510
- <i class="ax-icon ax-icon-chevron-right"></i>
1511
- </ng-template>
1512
- </ax-breadcrumbs>
1513
- `,
1665
+ <ax-breadcrumbs>
1666
+ @for( b of service.breadcrumbs();track $index){
1667
+ <ax-breadcrumbs-item>
1668
+ <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{ getTitle(b) }}</a>
1669
+ </ax-breadcrumbs-item>
1670
+ }
1671
+ <ng-template #divider>
1672
+ <i class="ax-icon ax-icon-chevron-right"></i>
1673
+ </ng-template>
1674
+ </ax-breadcrumbs>
1675
+ `,
1514
1676
  encapsulation: ViewEncapsulation.None,
1515
1677
  changeDetection: ChangeDetectionStrategy.OnPush,
1516
1678
  standalone: true,
1517
- imports: [
1518
- CommonModule,
1519
- AXPLayoutBuilderModule,
1520
- AXBreadcrumbsModule,
1521
- AXDecoratorModule
1522
- ],
1679
+ imports: [CommonModule, AXPLayoutBuilderModule, AXBreadcrumbsModule, AXDecoratorModule],
1523
1680
  }]
1524
1681
  }] });
1525
1682
 
@@ -1534,22 +1691,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1534
1691
  args: [{ standalone: true, imports: [CommonModule, AXDecoratorModule], selector: 'axp-designer-drawer-content', template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72 ax-h-full\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center ax-font-semibold\">\n <ng-content select=\"ax-title\"></ng-content>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ng-content select=\"ax-content[header]\">\n </ng-content>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n <ng-content select=\"ax-content[body]\">\n\n </ng-content>\n </div>\n</div>" }]
1535
1692
  }], ctorParameters: () => [] });
1536
1693
 
1537
- class AXPDesignerConnectorAbstract {
1538
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnectorAbstract, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1539
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnectorAbstract }); }
1540
- }
1541
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerConnectorAbstract, decorators: [{
1542
- type: Injectable
1543
- }] });
1544
-
1545
1694
  class AXPDesignerDataSourcesComponent {
1546
1695
  constructor() {
1547
1696
  this.service = inject(AXPDesignerService);
1548
- this.connector = inject(AXPDesignerConnectorAbstract);
1697
+ this.dataSourceProvider = inject(AXPWidgetDataSourceProviderService);
1549
1698
  this.list = signal([]);
1550
1699
  }
1551
1700
  async ngOnInit() {
1552
- this.list.set(await this.connector.getDataSourcesNames());
1701
+ const items = (await this.dataSourceProvider.items()).map(c => ({ name: c.name, title: c.title }));
1702
+ this.list.set(items);
1553
1703
  }
1554
1704
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerDataSourcesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1555
1705
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerDataSourcesComponent, isStandalone: true, selector: "axp-designer-data-sources", ngImport: i0, template: "<axp-designer-drawer-content>\n\n <ax-title>Data Sources</ax-title>\n\n <ax-content header>\n <ax-button look=\"ghost\" class=\"ax-xs\" title=\"Add New Data Source\">\n <ax-icon class=\"fa-light fa-plus\"></ax-icon>\n </ax-button>\n </ax-content>\n\n <ax-content body>\n @if(list().length)\n {\n <ul class=\"axp-designer-drawer-list\">\n @for (item of list(); track $index) {\n <li>\n <i class=\"ax-me-1 fa-solid fa-table\"></i>\n {{ item.title }}\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"axp-designer-drawer-empty\">No data source found in the\n document\n </div>\n }\n </ax-content>\n\n</axp-designer-drawer-content>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: AXPLayoutDesignerDrawerContentComponent, selector: "axp-designer-drawer-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
@@ -1655,6 +1805,15 @@ class AXPDesignerHeaderMenuComponent {
1655
1805
  this.service = inject(AXPDesignerService);
1656
1806
  }
1657
1807
  handleKeyboardEvent(event) {
1808
+ debugger;
1809
+ if (event.code == 'Delete' && this.service.canDelete()) {
1810
+ event.preventDefault();
1811
+ this.service.removeWidget();
1812
+ }
1813
+ if (event.code == 'Insert' && this.service.canInsert()) {
1814
+ event.preventDefault();
1815
+ this.service.showPicker();
1816
+ }
1658
1817
  if (event.shiftKey && event.target == document.body) {
1659
1818
  switch (event.code) {
1660
1819
  case 'KeyN':
@@ -1663,10 +1822,17 @@ class AXPDesignerHeaderMenuComponent {
1663
1822
  break;
1664
1823
  }
1665
1824
  }
1666
- //
1667
- if (event.ctrlKey && event.target == document.body) {
1668
- console.log(event.code);
1825
+ if (event.ctrlKey) {
1669
1826
  switch (event.code) {
1827
+ case 'KeyS':
1828
+ event.preventDefault();
1829
+ if (event.shiftKey) {
1830
+ this.service.saveAs();
1831
+ }
1832
+ else {
1833
+ this.service.save();
1834
+ }
1835
+ break;
1670
1836
  case 'KeyR':
1671
1837
  event.preventDefault();
1672
1838
  if (event.shiftKey) {
@@ -1676,13 +1842,22 @@ class AXPDesignerHeaderMenuComponent {
1676
1842
  this.service.openPreviewDialog();
1677
1843
  }
1678
1844
  break;
1845
+ }
1846
+ }
1847
+ //
1848
+ if (event.ctrlKey && event.target == document.body) {
1849
+ switch (event.code) {
1679
1850
  case 'KeyZ':
1680
- event.preventDefault();
1681
- this.service.undo();
1851
+ if (this.service.canUndo()) {
1852
+ event.preventDefault();
1853
+ this.service.undo();
1854
+ }
1682
1855
  break;
1683
1856
  case 'KeyY':
1684
- event.preventDefault();
1685
- this.service.redo();
1857
+ if (this.service.canRedo()) {
1858
+ event.preventDefault();
1859
+ this.service.redo();
1860
+ }
1686
1861
  break;
1687
1862
  case 'KeyC':
1688
1863
  if (this.service.canCutCopy()) {
@@ -1713,7 +1888,7 @@ class AXPDesignerHeaderMenuComponent {
1713
1888
  }
1714
1889
  }
1715
1890
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1716
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>Home</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+F5</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$2.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: i2$2.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn", "closeOn", "items", "hasArrow"], outputs: ["onItemClick"] }] }); }
1891
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if(service.canSave())\n {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+Shift+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.clone()\">\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+D </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canDelete()\" (onClick)=\"service.removeWidget()\">\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Del</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$2.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }, { kind: "component", type: i2$2.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn", "closeOn", "items", "hasArrow"], outputs: ["onItemClick"] }] }); }
1717
1892
  }
1718
1893
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, decorators: [{
1719
1894
  type: Component,
@@ -1721,7 +1896,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1721
1896
  CommonModule,
1722
1897
  AXDecoratorModule,
1723
1898
  AXMenuModule,
1724
- ], selector: 'axp-designer-header-menu', template: "<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>Home</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+F5</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>" }]
1899
+ ], selector: 'axp-designer-header-menu', template: "<ax-menu [openOn]=\"'hover'\" [hasArrow]=\"false\">\n <ax-menu-item>\n <ax-text>File</ax-text>\n <ax-menu-item (onClick)=\"service.new()\">\n <ax-text>New</ax-text>\n <ax-suffix>\n <ax-text> Shift+N </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n @if(service.canSave())\n {\n <ng-container>\n <ax-menu-item (onClick)=\"service.save()\">\n <ax-text>Save</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.saveAs()\">\n <ax-text>Save As...</ax-text>\n <ax-suffix>\n <ax-text> Ctrl+Shift+S </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n </ng-container>\n }\n <ax-menu-item>\n <ax-text>Export</ax-text>\n <ax-menu-item (onClick)=\"service.downloadJson()\">\n <ax-text>Download JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Import</ax-text>\n <ax-menu-item (onClick)=\"service.importJSon()\">\n <ax-text>Import JSON</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Edit</ax-text>\n <ax-menu-item [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-text>Undo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Z </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-text>Redo</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+Y </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.clone()\">\n <ax-text>Clone</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-clone\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+D </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-text>Cut</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+X </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-text>Copy</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text> Ctrl+C </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-text>Paste</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+V</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item [disabled]=\"!service.canDelete()\" (onClick)=\"service.removeWidget()\">\n <ax-text>Delete</ax-text>\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-trash\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Del</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Run</ax-text>\n <ax-menu-item (onClick)=\"service.openPreviewDialog()\">\n <ax-text>Preview</ax-text>\n <ax-prefix>\n </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item (onClick)=\"service.openPreviewWindow()\">\n <ax-text>Preview in seperate window</ax-text>\n <ax-prefix> </ax-prefix>\n <ax-suffix>\n <ax-text>Ctrl+Shift+R</ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item>\n <ax-text>Help</ax-text>\n <ax-menu-item>\n <ax-text>About</ax-text>\n </ax-menu-item>\n </ax-menu-item>\n</ax-menu>" }]
1725
1900
  }], propDecorators: { handleKeyboardEvent: [{
1726
1901
  type: HostListener,
1727
1902
  args: ['document:keydown', ['$event']]
@@ -1733,17 +1908,17 @@ class AXPDesignerViewSizeToolbarComponent {
1733
1908
  }
1734
1909
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerViewSizeToolbarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1735
1910
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: AXPDesignerViewSizeToolbarComponent, isStandalone: true, selector: "axp-designer-view-sizes", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { size: "sizeChange" }, ngImport: i0, template: `
1736
- <ax-button-group color="ghost" look="twotone" [selection]="'single'">
1737
- <ax-button-group-item [selected]="size() == 'xl'" [data]="'xl'" (onClick)="size.set('xl')">
1738
- <ax-icon class="fa-light fa-desktop"></ax-icon>
1739
- </ax-button-group-item>
1740
- <ax-button-group-item [selected]="size() == 'lg'" [data]="'lg'" (onClick)="size.set('lg')">
1741
- <ax-icon class="fa-light fa-tablet"></ax-icon>
1742
- </ax-button-group-item>
1743
- <ax-button-group-item [selected]="size() == 'sm'" [data]="'sm'" (onClick)="size.set('sm')">
1744
- <ax-icon class="fa-light fa-mobile"></ax-icon>
1745
- </ax-button-group-item>
1746
- </ax-button-group>
1911
+ <ax-button-group color="ghost" look="twotone" [selection]="'single'">
1912
+ <ax-button-group-item [selected]="size() == 'xl'" [data]="'xl'" (onClick)="size.set('xl')">
1913
+ <ax-icon class="fa-light fa-desktop"></ax-icon>
1914
+ </ax-button-group-item>
1915
+ <ax-button-group-item [selected]="size() == 'lg'" [data]="'lg'" (onClick)="size.set('lg')">
1916
+ <ax-icon class="fa-light fa-tablet"></ax-icon>
1917
+ </ax-button-group-item>
1918
+ <ax-button-group-item [selected]="size() == 'sm'" [data]="'sm'" (onClick)="size.set('sm')">
1919
+ <ax-icon class="fa-light fa-mobile"></ax-icon>
1920
+ </ax-button-group-item>
1921
+ </ax-button-group>
1747
1922
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i1$5.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "onClick", "selectionChange"] }, { kind: "component", type: i1$5.AXButtonGroupItemComponent, selector: "ax-button-group-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXMenuModule }] }); }
1748
1923
  }
1749
1924
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerViewSizeToolbarComponent, decorators: [{
@@ -1758,17 +1933,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1758
1933
  AXMenuModule,
1759
1934
  ],
1760
1935
  template: `
1761
- <ax-button-group color="ghost" look="twotone" [selection]="'single'">
1762
- <ax-button-group-item [selected]="size() == 'xl'" [data]="'xl'" (onClick)="size.set('xl')">
1763
- <ax-icon class="fa-light fa-desktop"></ax-icon>
1764
- </ax-button-group-item>
1765
- <ax-button-group-item [selected]="size() == 'lg'" [data]="'lg'" (onClick)="size.set('lg')">
1766
- <ax-icon class="fa-light fa-tablet"></ax-icon>
1767
- </ax-button-group-item>
1768
- <ax-button-group-item [selected]="size() == 'sm'" [data]="'sm'" (onClick)="size.set('sm')">
1769
- <ax-icon class="fa-light fa-mobile"></ax-icon>
1770
- </ax-button-group-item>
1771
- </ax-button-group>
1936
+ <ax-button-group color="ghost" look="twotone" [selection]="'single'">
1937
+ <ax-button-group-item [selected]="size() == 'xl'" [data]="'xl'" (onClick)="size.set('xl')">
1938
+ <ax-icon class="fa-light fa-desktop"></ax-icon>
1939
+ </ax-button-group-item>
1940
+ <ax-button-group-item [selected]="size() == 'lg'" [data]="'lg'" (onClick)="size.set('lg')">
1941
+ <ax-icon class="fa-light fa-tablet"></ax-icon>
1942
+ </ax-button-group-item>
1943
+ <ax-button-group-item [selected]="size() == 'sm'" [data]="'sm'" (onClick)="size.set('sm')">
1944
+ <ax-icon class="fa-light fa-mobile"></ax-icon>
1945
+ </ax-button-group-item>
1946
+ </ax-button-group>
1772
1947
  `
1773
1948
  }]
1774
1949
  }] });
@@ -1776,13 +1951,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1776
1951
  class AXPLayoutDesignerComponent {
1777
1952
  constructor() {
1778
1953
  this.service = inject(AXPDesignerService);
1954
+ this.id = input();
1779
1955
  this.nodeConfig = computed(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') : null);
1780
1956
  this.service.onUpdate.subscribe((e) => {
1781
1957
  this.propertyViewer.update(e.values);
1782
1958
  });
1783
1959
  }
1784
- changeMode(mode) {
1785
- this.service.mode.set(AXPDesignerModes[mode]);
1960
+ ngOnInit() {
1961
+ if (this.id()) {
1962
+ this.service.loadById(this.id());
1963
+ }
1786
1964
  }
1787
1965
  get __styles() {
1788
1966
  const styles = {};
@@ -1790,7 +1968,7 @@ class AXPLayoutDesignerComponent {
1790
1968
  return styles;
1791
1969
  }
1792
1970
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1793
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", host: { properties: { "style": "this.__styles" } }, providers: [AXPDesignerService], viewQueries: [{ propertyName: "propertyViewer", first: true, predicate: AXPWidgetPropertyViewerComponent, descendants: true, static: true }], ngImport: i0, template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-b ax-flex ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-end\">\n <ax-button [text]=\"service.mode().title\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"changeMode('Design')\"\n text=\"Designer\"\n name=\"designer\"\n [selected]=\"service.mode().id == 'designer'\"\n >\n </ax-button-item>\n <ax-button-item\n (onClick)=\"changeMode('View')\"\n text=\"View\"\n name=\"view\"\n [selected]=\"service.mode().id == 'view'\"\n >\n </ax-button-item>\n <ax-button-item\n (onClick)=\"changeMode('Edit')\"\n text=\"Edit\"\n name=\"edit\"\n [selected]=\"service.mode().id == 'edit'\"\n >\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-dropdown-button\n mode=\"split\"\n look=\"outline\"\n text=\"Preview\"\n class=\"ax-xs\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light ax-bg-[#f3f3fe] ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-white ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .ax-widget-outline{outline-style:dashed;outline-width:1px;outline-offset:2px;outline-color:#d1d5db}.axp-designer-board.axp-state-design .axp-widget-host{cursor:pointer;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected.ax-widget-container{outline-offset:2px}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:2px;outline-offset:2px;outline-color:#d946ef}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected{outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.ax-widget-container{outline-offset:4px}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2000;height:100%;width:100%}.axp-designer-board .axp-empty-space{display:flex;flex:1 1 0%;cursor:default;align-items:center;justify-content:center;background-color:rgba(var(--ax-color-primary-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px;height:100%}.axp-designer-board .axp-page-widget-header,.axp-designer-board .axp-page-widget-footer{filter:grayscale(100%);opacity:.5}.axp-designer-board .axp-page-widget-header:hover,.axp-designer-board .axp-page-widget-footer:hover{filter:grayscale(0);opacity:1}.axp-designer-board .axp-page-widget-header{margin-bottom:.5rem}.axp-designer-board .axp-page-widget-footer{margin-top:.5rem}axp-designer-drawer-content ul.axp-designer-drawer-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}axp-designer-drawer-content ul.axp-designer-drawer-list{padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}axp-designer-drawer-content ul.axp-designer-drawer-list li{cursor:pointer;border-radius:.125rem;padding:.25rem .5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}axp-designer-drawer-content ul.axp-designer-drawer-list li:hover:not(.axp-designer-drawer-list){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}axp-designer-drawer-content ul.axp-designer-drawer-list li.ax-state-selected{--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity))}axp-designer-drawer-content .axp-designer-drawer-empty{display:flex;align-items:center;justify-content:center;padding:1rem;--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: AXPDesignerBoardComponent, selector: "axp-designer-board" }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget"], outputs: ["onChanged"] }, { kind: "component", type: AXPDesignerBreadcrumbsComponent, selector: "axp-designer-breadcrumbs" }, { kind: "component", type: AXPDesignerOutlineComponent, selector: "axp-designer-outline" }, { kind: "component", type: AXPDesignerHeaderMenuComponent, selector: "axp-designer-header-menu" }, { kind: "component", type: AXPDesignerHistoryComponent, selector: "axp-designer-history" }, { kind: "component", type: AXPDesignerDataSourcesComponent, selector: "axp-designer-data-sources" }, { kind: "component", type: AXPDesignerPagesComponent, selector: "axp-designer-pages" }, { kind: "component", type: AXPDesignerViewSizeToolbarComponent, selector: "axp-designer-view-sizes", inputs: ["size"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "closeOthers", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i6$1.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
1971
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style": "this.__styles" } }, providers: [AXPDesignerService], viewQueries: [{ propertyName: "propertyViewer", first: true, predicate: AXPWidgetPropertyViewerComponent, descendants: true, static: true }], ngImport: i0, template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center ax-dark\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-b ax-flex ax-justify-between ax-px-2 ax-dark\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"outline\"\n text=\"Preview\"\n class=\"ax-xs\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light ax-bg-[#f3f3fe] ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-white ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center ax-dark\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s ax-dark\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".axp-designer-board{background-color:#fff;background-image:linear-gradient(45deg,#f0f0f0 25%,transparent 25%,transparent 75%,#f0f0f0 75%,#f0f0f0),linear-gradient(45deg,#f0f0f0 25%,#fff 25%,#fff 75%,#f0f0f0 75%,#f0f0f0);background-size:20px 20px;background-position:0 0,10px 10px;display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity, 1));padding:.75rem}.axp-designer-board.axp-state-design .ax-widget-outline{outline-style:dashed;outline-width:1px;outline-offset:2px;outline-color:#d1d5db}.axp-designer-board.axp-state-design .axp-widget-host{cursor:pointer;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected.ax-widget-container{outline-offset:2px}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:2px;outline-offset:2px;outline-color:#d946ef}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected{outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.ax-widget-container{outline-offset:4px}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2000;height:100%;width:100%}.axp-designer-board .axp-empty-space{display:flex;flex:1 1 0%;cursor:default;align-items:center;justify-content:center;background-color:rgba(var(--ax-color-primary-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px;height:100%}.axp-designer-board .axp-page-widget-header,.axp-designer-board .axp-page-widget-footer{filter:grayscale(100%);opacity:.5}.axp-designer-board .axp-page-widget-header:hover,.axp-designer-board .axp-page-widget-footer:hover{filter:grayscale(0);opacity:1}.axp-designer-board .axp-page-widget-header{margin-bottom:.5rem}.axp-designer-board .axp-page-widget-footer{margin-top:.5rem}axp-designer-drawer-content ul.axp-designer-drawer-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}axp-designer-drawer-content ul.axp-designer-drawer-list{padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}axp-designer-drawer-content ul.axp-designer-drawer-list li{cursor:pointer;border-radius:.125rem;padding:.25rem .5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}axp-designer-drawer-content ul.axp-designer-drawer-list li:hover:not(.axp-designer-drawer-list){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}axp-designer-drawer-content ul.axp-designer-drawer-list li.ax-state-selected{--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity, 1))}axp-designer-drawer-content .axp-designer-drawer-empty{display:flex;align-items:center;justify-content:center;padding:1rem;--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: AXPDesignerBoardComponent, selector: "axp-designer-board" }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget"], outputs: ["onChanged"] }, { kind: "component", type: AXPDesignerBreadcrumbsComponent, selector: "axp-designer-breadcrumbs" }, { kind: "component", type: AXPDesignerOutlineComponent, selector: "axp-designer-outline" }, { kind: "component", type: AXPDesignerHeaderMenuComponent, selector: "axp-designer-header-menu" }, { kind: "component", type: AXPDesignerHistoryComponent, selector: "axp-designer-history" }, { kind: "component", type: AXPDesignerDataSourcesComponent, selector: "axp-designer-data-sources" }, { kind: "component", type: AXPDesignerPagesComponent, selector: "axp-designer-pages" }, { kind: "component", type: AXPDesignerViewSizeToolbarComponent, selector: "axp-designer-view-sizes", inputs: ["size"], outputs: ["sizeChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i2.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "closeOthers", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "ngmodule", type: AXDropdownButtonModule }, { kind: "component", type: i5.AXDropdownButtonComponent, selector: "ax-dropdown-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "type", "mode"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "lookChange", "colorChange", "disabledChange"] }], encapsulation: i0.ViewEncapsulation.None }); }
1794
1972
  }
1795
1973
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, decorators: [{
1796
1974
  type: Component,
@@ -1814,7 +1992,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1814
1992
  AXButtonGroupModule,
1815
1993
  AXDropdownModule,
1816
1994
  AXDropdownButtonModule,
1817
- ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-b ax-flex ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-end\">\n <ax-button [text]=\"service.mode().title\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item\n (onClick)=\"changeMode('Design')\"\n text=\"Designer\"\n name=\"designer\"\n [selected]=\"service.mode().id == 'designer'\"\n >\n </ax-button-item>\n <ax-button-item\n (onClick)=\"changeMode('View')\"\n text=\"View\"\n name=\"view\"\n [selected]=\"service.mode().id == 'view'\"\n >\n </ax-button-item>\n <ax-button-item\n (onClick)=\"changeMode('Edit')\"\n text=\"Edit\"\n name=\"edit\"\n [selected]=\"service.mode().id == 'edit'\"\n >\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n\n <ax-dropdown-button\n mode=\"split\"\n look=\"outline\"\n text=\"Preview\"\n class=\"ax-xs\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light ax-bg-[#f3f3fe] ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-white ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .ax-widget-outline{outline-style:dashed;outline-width:1px;outline-offset:2px;outline-color:#d1d5db}.axp-designer-board.axp-state-design .axp-widget-host{cursor:pointer;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected.ax-widget-container{outline-offset:2px}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:2px;outline-offset:2px;outline-color:#d946ef}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected{outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.ax-widget-container{outline-offset:4px}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2000;height:100%;width:100%}.axp-designer-board .axp-empty-space{display:flex;flex:1 1 0%;cursor:default;align-items:center;justify-content:center;background-color:rgba(var(--ax-color-primary-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px;height:100%}.axp-designer-board .axp-page-widget-header,.axp-designer-board .axp-page-widget-footer{filter:grayscale(100%);opacity:.5}.axp-designer-board .axp-page-widget-header:hover,.axp-designer-board .axp-page-widget-footer:hover{filter:grayscale(0);opacity:1}.axp-designer-board .axp-page-widget-header{margin-bottom:.5rem}.axp-designer-board .axp-page-widget-footer{margin-top:.5rem}axp-designer-drawer-content ul.axp-designer-drawer-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}axp-designer-drawer-content ul.axp-designer-drawer-list{padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}axp-designer-drawer-content ul.axp-designer-drawer-list li{cursor:pointer;border-radius:.125rem;padding:.25rem .5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}axp-designer-drawer-content ul.axp-designer-drawer-list li:hover:not(.axp-designer-drawer-list){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity))}axp-designer-drawer-content ul.axp-designer-drawer-list li.ax-state-selected{--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity))}axp-designer-drawer-content .axp-designer-drawer-empty{display:flex;align-items:center;justify-content:center;padding:1rem;--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity))}\n"] }]
1995
+ ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center ax-dark\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-b ax-flex ax-justify-between ax-px-2 ax-dark\">\n <div class=\"ax-flex ax-flex-1 ax-items-center ax-text-white ax-justify-start\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-center\">\n <axp-designer-view-sizes [(size)]=\"service.size\"></axp-designer-view-sizes>\n </div>\n <div class=\"ax-flex ax-flex-1 ax-flex-row ax-gap-2 ax-xs ax-items-center ax-justify-end\">\n <ax-dropdown-button\n mode=\"split\"\n look=\"outline\"\n text=\"Preview\"\n class=\"ax-xs\"\n (onClick)=\"service.openPreviewDialog()\"\n >\n <ax-button-item-list>\n <ax-button-item text=\"Open in new window\" (onClick)=\"service.openPreviewWindow()\">\n <ax-prefix>\n <ax-icon icon=\"fa-regular fa-window-restore\"></ax-icon>\n </ax-prefix>\n </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-button>\n </div>\n </div>\n <!-- Board -->\n <ax-drawer-container class=\"ax-w-full ax-flex-1\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-data-sources></axp-designer-data-sources>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light ax-bg-[#f3f3fe] ax-flex ax-justify-center ax-p-10\">\n <axp-designer-board class=\"ax-rounded-lg ax-bg-white ax-shadow-md\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n <!-- Footer -->\n <div class=\"ax-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center ax-dark\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s ax-dark\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer\n [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\"\n class=\"ax-w-1/4\"\n >\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>\n", styles: [".axp-designer-board{background-color:#fff;background-image:linear-gradient(45deg,#f0f0f0 25%,transparent 25%,transparent 75%,#f0f0f0 75%,#f0f0f0),linear-gradient(45deg,#f0f0f0 25%,#fff 25%,#fff 75%,#f0f0f0 75%,#f0f0f0);background-size:20px 20px;background-position:0 0,10px 10px;display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity, 1));padding:.75rem}.axp-designer-board.axp-state-design .ax-widget-outline{outline-style:dashed;outline-width:1px;outline-offset:2px;outline-color:#d1d5db}.axp-designer-board.axp-state-design .axp-widget-host{cursor:pointer;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected.ax-widget-container{outline-offset:2px}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:2px;outline-offset:2px;outline-color:#d946ef}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected{outline-color:#60a5fa}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.ax-widget-container{outline-offset:4px}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:2000;height:100%;width:100%}.axp-designer-board .axp-empty-space{display:flex;flex:1 1 0%;cursor:default;align-items:center;justify-content:center;background-color:rgba(var(--ax-color-primary-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px;height:100%}.axp-designer-board .axp-page-widget-header,.axp-designer-board .axp-page-widget-footer{filter:grayscale(100%);opacity:.5}.axp-designer-board .axp-page-widget-header:hover,.axp-designer-board .axp-page-widget-footer:hover{filter:grayscale(0);opacity:1}.axp-designer-board .axp-page-widget-header{margin-bottom:.5rem}.axp-designer-board .axp-page-widget-footer{margin-top:.5rem}axp-designer-drawer-content ul.axp-designer-drawer-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.25rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.25rem * var(--tw-space-y-reverse))}axp-designer-drawer-content ul.axp-designer-drawer-list{padding:.25rem;font-size:.875rem;line-height:1.25rem;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1))}axp-designer-drawer-content ul.axp-designer-drawer-list li{cursor:pointer;border-radius:.125rem;padding:.25rem .5rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}axp-designer-drawer-content ul.axp-designer-drawer-list li:hover:not(.axp-designer-drawer-list){--tw-bg-opacity: 1;background-color:rgb(55 65 81 / var(--tw-bg-opacity, 1))}axp-designer-drawer-content ul.axp-designer-drawer-list li.ax-state-selected{--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-neutral-700),var(--tw-bg-opacity, 1))}axp-designer-drawer-content .axp-designer-drawer-empty{display:flex;align-items:center;justify-content:center;padding:1rem;--tw-text-opacity: 1;color:rgb(209 213 219 / var(--tw-text-opacity, 1))}\n"] }]
1818
1996
  }], ctorParameters: () => [], propDecorators: { propertyViewer: [{
1819
1997
  type: ViewChild,
1820
1998
  args: [AXPWidgetPropertyViewerComponent, { static: true }]
@@ -1823,15 +2001,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1823
2001
  args: ['style']
1824
2002
  }] } });
1825
2003
 
2004
+ class AXPDesignerModes {
2005
+ static { this.View = { id: 'view', title: 'View' }; }
2006
+ static { this.Design = { id: 'designer', title: 'Designer' }; }
2007
+ static { this.Edit = { id: 'edit', title: 'Edit' }; }
2008
+ }
2009
+
1826
2010
  class AXPLayoutDesignerPreviewViewerComponent {
1827
2011
  constructor() {
1828
2012
  this.context = {};
1829
2013
  this.document = signal({ type: AXPWidgetsCatalog.document });
1830
2014
  this.currentPageIndex = signal(0);
2015
+ this.connector = inject(AXPDesignerConnector);
2016
+ this.dataSourceProvider = inject(AXPWidgetDataSourceProviderService);
1831
2017
  this.currentPage = computed(() => {
1832
2018
  return (this.document().children?.[this.currentPageIndex()] ?? { type: AXPWidgetsCatalog.pageLayout });
1833
2019
  });
1834
2020
  this.channel = new BroadcastChannel('livePreviewChannel');
2021
+ this.functions = {
2022
+ getDataSourceNames: this.getDataSources.bind(this),
2023
+ };
1835
2024
  this.channel.addEventListener('message', (message) => {
1836
2025
  if (message.data.action == 'designer-preview') {
1837
2026
  this.document.set(message.data.document);
@@ -1854,6 +2043,9 @@ class AXPLayoutDesignerPreviewViewerComponent {
1854
2043
  context: this.context,
1855
2044
  });
1856
2045
  }
2046
+ async getDataSources(name) {
2047
+ return await this.dataSourceProvider.get(name);
2048
+ }
1857
2049
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerPreviewViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1858
2050
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerPreviewViewerComponent, isStandalone: true, selector: "axp-layout-builder-viewer", ngImport: i0, template: `
1859
2051
  <axp-widgets-container [(context)]="context" (onChanged)="handleContextChanged($event)">
@@ -1955,7 +2147,7 @@ class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {
1955
2147
  this.settings = inject(AXPSettingsService);
1956
2148
  this.initialSize = 'xl';
1957
2149
  this.isDialogWindow = false;
1958
- this.jsonSettingsKey = "forms:preview:json";
2150
+ this.jsonSettingsKey = 'forms:preview:json';
1959
2151
  this.jsonViewCollapsed = signal(true);
1960
2152
  this.size = signal(this.initialSize);
1961
2153
  this.channel = new BroadcastChannel('livePreviewChannel');
@@ -1963,6 +2155,7 @@ class AXPLayoutDesignerPreviewComponent extends AXBasePageComponent {
1963
2155
  //
1964
2156
  this.channel.addEventListener('message', (message) => {
1965
2157
  if (message.data.action == 'designer-preview-context') {
2158
+ //TODO: json viewer bug
1966
2159
  this.context.set(message.data.context);
1967
2160
  }
1968
2161
  });
@@ -2019,5 +2212,5 @@ var preview_component = /*#__PURE__*/Object.freeze({
2019
2212
  * Generated bundle index. Do not edit.
2020
2213
  */
2021
2214
 
2022
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnectorAbstract, AXPDesignerGridDrawerComponent, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPWidgetDesignerRendererDirective, AXPWidgetPropertyViewerComponent };
2215
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerAddWidgetLineButtonComponent, AXPDesignerAddWidgetMiniButtonComponent, AXPDesignerConnector, AXPDesignerGridDrawerComponent, AXPDesignerModes, AXPDesignerService, AXPDesignerWidgetPickerComponent, AXPLayoutDesignerComponent, AXPLayoutDesignerPreviewComponent, AXPLayoutDesignerPreviewViewerComponent, AXPWidgetDesignerRendererDirective, AXPWidgetPropertyViewerComponent, AXP_DESIGNER_ADD_WIDGET_MENU, AXP_DESIGNER_CLONE_MENU, AXP_DESIGNER_COPY_MENU, AXP_DESIGNER_CUT_MENU, AXP_DESIGNER_DELETE_WIDGET_MENU, AXP_DESIGNER_PASTE_MENU, AXP_DESIGNER_SAVE_AS_WIDGET_MENU, cloneWidgetMenu };
2023
2216
  //# sourceMappingURL=acorex-platform-layout-designer.mjs.map