@acorex/platform 18.0.12 → 18.0.13

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 (531) hide show
  1. package/common/lib/app/application.types.d.ts +3 -2
  2. package/common/lib/layout/sticky.directive.d.ts +1 -1
  3. package/common/lib/schema/widget/widget-renderer.d.ts +1 -0
  4. package/esm2022/common/lib/app/application.types.mjs +1 -1
  5. package/esm2022/common/lib/layout/sticky.directive.mjs +2 -2
  6. package/esm2022/common/lib/schema/widget/widget-renderer.mjs +20 -16
  7. package/esm2022/common/lib/schema/widgets/text/text-widget-column.component.mjs +3 -3
  8. package/esm2022/layout/builder/lib/builder/builder.service.mjs +15 -12
  9. package/esm2022/layout/builder/lib/builder/index.mjs +7 -6
  10. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +33 -0
  11. package/esm2022/layout/builder/lib/builder/widget-groups.mjs +27 -0
  12. package/esm2022/layout/builder/lib/builder/widget-registery.service.mjs +3 -3
  13. package/esm2022/layout/builder/lib/builder/widget.types.mjs +5 -5
  14. package/esm2022/layout/designer/index.mjs +3 -3
  15. package/esm2022/layout/designer/lib/board/board.component.mjs +5 -40
  16. package/esm2022/layout/designer/lib/command.mjs +185 -0
  17. package/esm2022/layout/designer/lib/designer/designer.component.mjs +54 -5
  18. package/esm2022/layout/designer/lib/designer.service.mjs +136 -95
  19. package/esm2022/layout/designer/lib/{buttons → helpers}/add-widget-button/add-widget-button.component.mjs +5 -5
  20. package/esm2022/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.mjs +82 -0
  21. package/esm2022/layout/designer/lib/history/history.component.mjs +11 -4
  22. package/esm2022/layout/designer/lib/outline/outline.component.mjs +16 -15
  23. package/esm2022/layout/designer/lib/pages/pages.component.mjs +28 -0
  24. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +5 -2
  25. package/esm2022/layout/designer/lib/widget-designer-renderer.component.mjs +3 -3
  26. package/esm2022/layout/designer/lib/widget-picker/widget-picker.component.mjs +80 -6
  27. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +6 -4
  28. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +17 -7
  29. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +1 -1
  30. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +10 -5
  31. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +1 -2
  32. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +2 -2
  33. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +1 -1
  34. package/esm2022/widgets/lib/properties/editors.props.mjs +80 -45
  35. package/esm2022/widgets/lib/properties/layout.props.mjs +60 -0
  36. package/esm2022/widgets/lib/properties/table-column.props.mjs +3 -2
  37. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +52 -0
  38. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +27 -0
  39. package/esm2022/widgets/lib/widgets/actions/button/index.mjs +3 -0
  40. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.mjs +1 -1
  41. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-edit.component.mjs +122 -0
  42. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.mjs +1 -1
  43. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.mjs +1 -1
  44. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-view.component.mjs +215 -0
  45. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +51 -0
  46. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.service.mjs +3 -0
  47. package/esm2022/widgets/lib/widgets/advance/file/index.mjs +8 -0
  48. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.mjs +1 -1
  49. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.mjs +1 -1
  50. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.mjs +1 -1
  51. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-print.component.mjs +19 -0
  52. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-types.mjs +2 -0
  53. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-view.component.mjs +160 -0
  54. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget.config.mjs +29 -0
  55. package/esm2022/widgets/lib/widgets/advance/gallery/index.mjs +7 -0
  56. package/esm2022/widgets/lib/widgets/advance/map/index.mjs +7 -0
  57. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-print.component.mjs → advance/map/map-box-widget-column.component.mjs} +5 -5
  58. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +171 -0
  59. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.mjs +1 -1
  60. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.mjs +1 -1
  61. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.mjs +3 -3
  62. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +31 -0
  63. package/esm2022/widgets/lib/widgets/advance/qrcode/index.mjs +3 -0
  64. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +51 -0
  65. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +62 -0
  66. package/esm2022/widgets/lib/widgets/advance/signature/index.mjs +7 -0
  67. package/esm2022/widgets/lib/widgets/{editors/select-box-widget/select-box-widget-print.component.mjs → advance/signature/signature-pad-widget-column.component.mjs} +5 -5
  68. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.mjs +142 -0
  69. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.mjs +1 -1
  70. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.mjs +1 -1
  71. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.mjs +1 -1
  72. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +31 -0
  73. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +9 -12
  74. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.component.mjs +1 -1
  75. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-edit.component.mjs +1 -1
  76. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-filter.component.mjs +1 -1
  77. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-print.component.mjs +1 -1
  78. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-view.component.mjs +1 -1
  79. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +31 -0
  80. package/esm2022/widgets/lib/widgets/editors/color/index.mjs +7 -0
  81. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-column.component.mjs +36 -0
  82. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +297 -0
  83. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-filter.component.mjs +1 -1
  84. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-print.component.mjs +1 -1
  85. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +122 -0
  86. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +81 -0
  87. package/esm2022/widgets/lib/widgets/editors/contact/contact.type.mjs +2 -0
  88. package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +7 -0
  89. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/popup-component.mjs +1 -1
  90. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +44 -0
  91. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +133 -0
  92. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-filter.component.mjs +1 -1
  93. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-print.component.mjs +1 -1
  94. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +54 -0
  95. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +40 -0
  96. package/esm2022/widgets/lib/widgets/editors/date-time/index.mjs +7 -0
  97. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-column.component.mjs +66 -0
  98. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-edit.component.mjs +249 -0
  99. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-filter.component.mjs +1 -1
  100. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-print.component.mjs +1 -1
  101. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-view.component.mjs +1 -1
  102. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +39 -0
  103. package/esm2022/widgets/lib/widgets/editors/email/index.mjs +7 -0
  104. package/esm2022/widgets/lib/widgets/editors/large-text/index.mjs +7 -0
  105. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-column.component.mjs +1 -1
  106. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-edit.component.mjs +1 -1
  107. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-filter.component.mjs +1 -1
  108. package/esm2022/widgets/lib/widgets/editors/{map-box-widget/map-box-widget-column.component.mjs → large-text/large-text-widget-print.component.mjs} +5 -5
  109. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-view.component.mjs +1 -1
  110. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +39 -0
  111. package/esm2022/widgets/lib/widgets/editors/link/index.mjs +7 -0
  112. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-column.component.mjs +1 -1
  113. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +391 -0
  114. package/esm2022/widgets/lib/widgets/editors/link/link-widget-filter.component.mjs +20 -0
  115. package/esm2022/widgets/lib/widgets/editors/link/link-widget-print.component.mjs +19 -0
  116. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-view.component.mjs +1 -1
  117. package/esm2022/widgets/lib/widgets/editors/link/link-widget.config.mjs +29 -0
  118. package/esm2022/widgets/lib/widgets/editors/number/index.mjs +7 -0
  119. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-column.component.mjs +38 -0
  120. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +157 -0
  121. package/esm2022/widgets/lib/widgets/{layout/repeater-widget/repeater-widget-edit.component.mjs → editors/number/number-box-widget-filter.component.mjs} +5 -5
  122. package/esm2022/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-print.component.mjs +1 -1
  123. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +56 -0
  124. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +39 -0
  125. package/esm2022/widgets/lib/widgets/editors/password/index.mjs +7 -0
  126. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget/phone-box-widget-print.component.mjs → password/password-box-widget-column.component.mjs} +5 -5
  127. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-edit.component.mjs +1 -1
  128. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-filter.component.mjs +1 -1
  129. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-print.component.mjs +1 -1
  130. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +76 -0
  131. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +38 -0
  132. package/esm2022/widgets/lib/widgets/editors/phone/index.mjs +7 -0
  133. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.mjs +66 -0
  134. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-edit.component.mjs +1 -1
  135. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-filter.component.mjs +1 -1
  136. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-print.component.mjs +19 -0
  137. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-view.component.mjs +1 -1
  138. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget.config.mjs +32 -0
  139. package/esm2022/widgets/lib/widgets/editors/rich-text/index.mjs +7 -0
  140. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-popup.component.mjs +1 -1
  141. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.mjs +46 -0
  142. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-edit.component.mjs +1 -1
  143. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-filter.component.mjs +1 -1
  144. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-print.component.mjs +1 -1
  145. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-view.component.mjs +45 -0
  146. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +39 -0
  147. package/esm2022/widgets/lib/widgets/editors/select/index.mjs +7 -0
  148. package/esm2022/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-column.component.mjs +1 -1
  149. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +85 -0
  150. package/esm2022/widgets/lib/widgets/editors/{gallery-widget/gallery-widget-print.component.mjs → select/select-box-widget-filter.component.mjs} +5 -5
  151. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-print.component.mjs +19 -0
  152. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +60 -0
  153. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +38 -0
  154. package/esm2022/widgets/lib/widgets/editors/selection-list/index.mjs +7 -0
  155. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +41 -0
  156. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +72 -0
  157. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.mjs +1 -1
  158. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.mjs +1 -1
  159. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +44 -0
  160. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +29 -0
  161. package/esm2022/widgets/lib/widgets/editors/text/index.mjs +7 -0
  162. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.mjs +1 -1
  163. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-edit.component.mjs +121 -0
  164. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.mjs +1 -1
  165. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.mjs +1 -1
  166. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-view.component.mjs +47 -0
  167. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +41 -0
  168. package/esm2022/widgets/lib/widgets/editors/toggle/index.mjs +7 -0
  169. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.mjs +1 -1
  170. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.mjs +1 -1
  171. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.mjs +1 -1
  172. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.mjs +1 -1
  173. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.mjs +1 -1
  174. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +40 -0
  175. package/esm2022/widgets/lib/widgets/index.mjs +23 -22
  176. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +65 -0
  177. package/esm2022/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.mjs +1 -1
  178. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +26 -0
  179. package/esm2022/widgets/lib/widgets/layout/block/index.mjs +4 -0
  180. package/esm2022/widgets/lib/widgets/layout/document/document-widget.config.mjs +13 -0
  181. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +56 -0
  182. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +41 -0
  183. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +25 -0
  184. package/esm2022/widgets/lib/widgets/layout/form-field/index.mjs +4 -0
  185. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +101 -0
  186. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-print.component.mjs +19 -0
  187. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +18 -0
  188. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +26 -0
  189. package/esm2022/widgets/lib/widgets/layout/grid/index.mjs +5 -0
  190. package/esm2022/widgets/lib/widgets/layout/page/index.mjs +3 -0
  191. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +65 -0
  192. package/esm2022/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.mjs +1 -1
  193. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +27 -0
  194. package/esm2022/widgets/lib/widgets/layout/repeater/index.mjs +6 -0
  195. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.mjs +1 -1
  196. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-filter.component.mjs → layout/repeater/repeater-widget-edit.component.mjs} +5 -5
  197. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.mjs +1 -1
  198. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-view.component.mjs +52 -0
  199. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget.config.mjs +24 -0
  200. package/esm2022/widgets/lib/widgets/layout/text-block/index.mjs +3 -0
  201. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.mjs +29 -0
  202. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +42 -0
  203. package/esm2022/widgets/lib/widgets.module.mjs +17 -3
  204. package/fesm2022/{acorex-platform-common-text-widget-column.component-D-mLfzKJ.mjs → acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs} +3 -3
  205. package/fesm2022/acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs.map +1 -0
  206. package/fesm2022/acorex-platform-common.mjs +21 -17
  207. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  208. package/fesm2022/acorex-platform-layout-builder.mjs +162 -129
  209. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  210. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs +100 -0
  211. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs.map +1 -0
  212. package/fesm2022/acorex-platform-layout-designer.mjs +484 -272
  213. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  214. package/fesm2022/acorex-platform-layout-entity.mjs +5 -4
  215. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  216. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-B2XtNJo1.mjs → acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs} +17 -7
  217. package/fesm2022/acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs.map +1 -0
  218. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs → acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs} +10 -5
  219. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs.map +1 -0
  220. package/fesm2022/acorex-platform-layouts.mjs +4 -4
  221. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  222. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs → acorex-platform-themes-default-entity-master-create-view.component-DKNRxpQk.mjs} +1 -2
  223. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-DKNRxpQk.mjs.map +1 -0
  224. package/fesm2022/acorex-platform-themes-default.mjs +4 -4
  225. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  226. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +1 -1
  227. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map +1 -1
  228. package/fesm2022/acorex-platform-widgets.mjs +3796 -3187
  229. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  230. package/layout/builder/lib/builder/builder.service.d.ts +1 -1
  231. package/layout/builder/lib/builder/index.d.ts +6 -5
  232. package/layout/builder/lib/builder/widget-catalog.d.ts +3 -0
  233. package/layout/builder/lib/builder/widget-groups.d.ts +6 -0
  234. package/layout/builder/lib/builder/widget-registery.service.d.ts +1 -1
  235. package/layout/builder/lib/builder/widget.types.d.ts +43 -5
  236. package/layout/designer/index.d.ts +2 -2
  237. package/layout/designer/lib/board/board.component.d.ts +0 -1
  238. package/layout/designer/lib/command.d.ts +70 -0
  239. package/layout/designer/lib/designer/designer.component.d.ts +3 -0
  240. package/layout/designer/lib/designer.service.d.ts +20 -9
  241. package/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.d.ts +19 -0
  242. package/layout/designer/lib/outline/outline.component.d.ts +1 -0
  243. package/layout/designer/lib/pages/pages.component.d.ts +7 -0
  244. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +1 -0
  245. package/layout/designer/lib/widget-picker/widget-picker.component.d.ts +22 -4
  246. package/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.d.ts +5 -0
  247. package/package.json +7 -7
  248. package/widgets/lib/properties/editors.props.d.ts +4 -1
  249. package/widgets/lib/properties/layout.props.d.ts +4 -0
  250. package/widgets/lib/widgets/actions/button/button-widget.config.d.ts +7 -0
  251. package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.config.d.ts +5 -0
  252. package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget.config.d.ts +5 -0
  253. package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +37 -0
  254. package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget.config.d.ts +5 -0
  255. package/widgets/lib/widgets/advance/qrcode/index.d.ts +2 -0
  256. package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +12 -0
  257. package/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.d.ts +7 -0
  258. package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget.config.d.ts +5 -0
  259. package/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.d.ts +5 -0
  260. package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget.config.d.ts +5 -0
  261. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-edit.component.d.ts +1 -1
  262. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-view.component.d.ts +1 -1
  263. package/widgets/lib/widgets/editors/contact/contact-widget.config.d.ts +7 -0
  264. package/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.d.ts +7 -0
  265. package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget.config.d.ts +5 -0
  266. package/widgets/lib/widgets/editors/large-text/large-text-widget.config.d.ts +7 -0
  267. package/widgets/lib/widgets/editors/link/link-widget.config.d.ts +7 -0
  268. package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-edit.component.d.ts +2 -0
  269. package/widgets/lib/widgets/editors/number/number-box-widget.config.d.ts +7 -0
  270. package/widgets/lib/widgets/editors/password/password-box-widget.config.d.ts +7 -0
  271. package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget.config.d.ts +5 -0
  272. package/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.d.ts +7 -0
  273. package/widgets/lib/widgets/editors/select/select-box-widget.config.d.ts +7 -0
  274. package/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.d.ts +7 -0
  275. package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget.config.d.ts +5 -0
  276. package/widgets/lib/widgets/editors/toggle/toggle-widget.config.d.ts +7 -0
  277. package/widgets/lib/widgets/index.d.ts +21 -21
  278. package/widgets/lib/widgets/layout/block/block-widget.config.d.ts +7 -0
  279. package/widgets/lib/widgets/layout/document/document-widget.config.d.ts +7 -0
  280. package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +7 -0
  281. package/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.d.ts +7 -0
  282. package/widgets/lib/widgets/layout/form-field/form-field-widget.config.d.ts +7 -0
  283. package/widgets/lib/widgets/layout/form-field/index.d.ts +3 -0
  284. package/widgets/lib/widgets/layout/grid/grid-widget-designer.component.d.ts +20 -0
  285. package/widgets/lib/widgets/layout/grid/grid-widget-print.component.d.ts +6 -0
  286. package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +6 -0
  287. package/widgets/lib/widgets/layout/grid/grid-widget.config.d.ts +7 -0
  288. package/widgets/lib/widgets/layout/grid/index.d.ts +4 -0
  289. package/widgets/lib/widgets/layout/page/page-widget.config.d.ts +7 -0
  290. package/widgets/lib/widgets/layout/repeater/repeater-widget.config.d.ts +7 -0
  291. package/widgets/lib/widgets/layout/text-block/text-block-widget.config.d.ts +7 -0
  292. package/esm2022/layout/builder/lib/builder/layout.types.mjs +0 -30
  293. package/esm2022/layout/designer/lib/designer.module.mjs +0 -16
  294. package/esm2022/layout/designer/lib/history-manager.service.mjs +0 -117
  295. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget-view.component.mjs +0 -52
  296. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget.config.mjs +0 -25
  297. package/esm2022/widgets/lib/widgets/actions/button-widget/index.mjs +0 -3
  298. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget.config.mjs +0 -34
  299. package/esm2022/widgets/lib/widgets/editors/color-box-widget/index.mjs +0 -7
  300. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-column.component.mjs +0 -36
  301. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.mjs +0 -297
  302. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-view.component.mjs +0 -122
  303. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget.config.mjs +0 -78
  304. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact.type.mjs +0 -2
  305. package/esm2022/widgets/lib/widgets/editors/contact-widget/index.mjs +0 -7
  306. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-column.component.mjs +0 -44
  307. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-edit.component.mjs +0 -133
  308. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-view.component.mjs +0 -54
  309. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.mjs +0 -38
  310. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/index.mjs +0 -7
  311. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-column.component.mjs +0 -66
  312. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-edit.component.mjs +0 -249
  313. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget.config.mjs +0 -36
  314. package/esm2022/widgets/lib/widgets/editors/email-box-widget/index.mjs +0 -7
  315. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-edit.component.mjs +0 -122
  316. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-view.component.mjs +0 -215
  317. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.config.mjs +0 -48
  318. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.service.mjs +0 -3
  319. package/esm2022/widgets/lib/widgets/editors/file-box-widget/index.mjs +0 -8
  320. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-types.mjs +0 -2
  321. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-view.component.mjs +0 -160
  322. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget.config.mjs +0 -26
  323. package/esm2022/widgets/lib/widgets/editors/gallery-widget/index.mjs +0 -7
  324. package/esm2022/widgets/lib/widgets/editors/large-text-widget/index.mjs +0 -7
  325. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-print.component.mjs +0 -19
  326. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.mjs +0 -37
  327. package/esm2022/widgets/lib/widgets/editors/link-widget/index.mjs +0 -7
  328. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-edit.component.mjs +0 -391
  329. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget.config.mjs +0 -26
  330. package/esm2022/widgets/lib/widgets/editors/map-box-widget/index.mjs +0 -7
  331. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.mjs +0 -96
  332. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget.config.mjs +0 -28
  333. package/esm2022/widgets/lib/widgets/editors/number-box-widget/index.mjs +0 -7
  334. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-column.component.mjs +0 -38
  335. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-edit.component.mjs +0 -151
  336. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-filter.component.mjs +0 -20
  337. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-view.component.mjs +0 -56
  338. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.mjs +0 -37
  339. package/esm2022/widgets/lib/widgets/editors/password-box-widget/index.mjs +0 -7
  340. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-column.component.mjs +0 -19
  341. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-view.component.mjs +0 -76
  342. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.mjs +0 -35
  343. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/index.mjs +0 -7
  344. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-column.component.mjs +0 -66
  345. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget.config.mjs +0 -29
  346. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/index.mjs +0 -7
  347. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-column.component.mjs +0 -46
  348. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-view.component.mjs +0 -45
  349. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.mjs +0 -37
  350. package/esm2022/widgets/lib/widgets/editors/select-box-widget/index.mjs +0 -7
  351. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.mjs +0 -85
  352. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-filter.component.mjs +0 -19
  353. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-view.component.mjs +0 -60
  354. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.mjs +0 -35
  355. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/index.mjs +0 -7
  356. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-column.component.mjs +0 -41
  357. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-edit.component.mjs +0 -72
  358. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-view.component.mjs +0 -44
  359. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.mjs +0 -26
  360. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/index.mjs +0 -7
  361. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-column.component.mjs +0 -19
  362. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-edit.component.mjs +0 -142
  363. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget.config.mjs +0 -34
  364. package/esm2022/widgets/lib/widgets/editors/text-box-widget/index.mjs +0 -7
  365. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.mjs +0 -119
  366. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-view.component.mjs +0 -47
  367. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget.config.mjs +0 -39
  368. package/esm2022/widgets/lib/widgets/editors/toggle-widget/index.mjs +0 -7
  369. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.mjs +0 -37
  370. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget-designer.component.mjs +0 -65
  371. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget.config.mjs +0 -27
  372. package/esm2022/widgets/lib/widgets/layout/block-widget/index.mjs +0 -4
  373. package/esm2022/widgets/lib/widgets/layout/page-widget/index.mjs +0 -3
  374. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.mjs +0 -65
  375. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget.config.mjs +0 -28
  376. package/esm2022/widgets/lib/widgets/layout/repeater-widget/index.mjs +0 -6
  377. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-view.component.mjs +0 -52
  378. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.mjs +0 -21
  379. package/esm2022/widgets/lib/widgets/layout/text-block-widget/index.mjs +0 -3
  380. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget-view.component.mjs +0 -29
  381. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.mjs +0 -39
  382. package/fesm2022/acorex-platform-common-text-widget-column.component-D-mLfzKJ.mjs.map +0 -1
  383. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs +0 -26
  384. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs.map +0 -1
  385. package/fesm2022/acorex-platform-layouts-entity-create-view.component-B2XtNJo1.mjs.map +0 -1
  386. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs.map +0 -1
  387. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs.map +0 -1
  388. package/layout/builder/lib/builder/layout.types.d.ts +0 -1
  389. package/layout/designer/lib/designer.module.d.ts +0 -6
  390. package/layout/designer/lib/history-manager.service.d.ts +0 -31
  391. package/widgets/lib/widgets/actions/button-widget/button-widget.config.d.ts +0 -2
  392. package/widgets/lib/widgets/editors/contact-widget/contact-widget.config.d.ts +0 -2
  393. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.d.ts +0 -2
  394. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.d.ts +0 -2
  395. package/widgets/lib/widgets/editors/link-widget/link-widget.config.d.ts +0 -2
  396. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.d.ts +0 -15
  397. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.d.ts +0 -2
  398. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.d.ts +0 -2
  399. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.d.ts +0 -2
  400. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.d.ts +0 -2
  401. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.d.ts +0 -2
  402. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.d.ts +0 -2
  403. package/widgets/lib/widgets/layout/block-widget/block-widget.config.d.ts +0 -2
  404. package/widgets/lib/widgets/layout/page-widget/page-widget.config.d.ts +0 -2
  405. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.d.ts +0 -2
  406. package/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.d.ts +0 -2
  407. /package/layout/designer/lib/{buttons → helpers}/add-widget-button/add-widget-button.component.d.ts +0 -0
  408. /package/widgets/lib/widgets/actions/{button-widget → button}/button-widget-view.component.d.ts +0 -0
  409. /package/widgets/lib/widgets/actions/{button-widget → button}/index.d.ts +0 -0
  410. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.d.ts +0 -0
  411. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-edit.component.d.ts +0 -0
  412. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.d.ts +0 -0
  413. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.d.ts +0 -0
  414. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-view.component.d.ts +0 -0
  415. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.service.d.ts +0 -0
  416. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/index.d.ts +0 -0
  417. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.d.ts +0 -0
  418. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.d.ts +0 -0
  419. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.d.ts +0 -0
  420. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-print.component.d.ts +0 -0
  421. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-types.d.ts +0 -0
  422. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-view.component.d.ts +0 -0
  423. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/index.d.ts +0 -0
  424. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/index.d.ts +0 -0
  425. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-column.component.d.ts +0 -0
  426. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.d.ts +0 -0
  427. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.d.ts +0 -0
  428. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.d.ts +0 -0
  429. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/index.d.ts +0 -0
  430. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-column.component.d.ts +0 -0
  431. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-edit.component.d.ts +0 -0
  432. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.d.ts +0 -0
  433. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.d.ts +0 -0
  434. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.d.ts +0 -0
  435. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.component.d.ts +0 -0
  436. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-edit.component.d.ts +0 -0
  437. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-filter.component.d.ts +0 -0
  438. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-print.component.d.ts +0 -0
  439. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-view.component.d.ts +0 -0
  440. /package/widgets/lib/widgets/editors/{color-box-widget → color}/index.d.ts +0 -0
  441. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-column.component.d.ts +0 -0
  442. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-filter.component.d.ts +0 -0
  443. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-print.component.d.ts +0 -0
  444. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact.type.d.ts +0 -0
  445. /package/widgets/lib/widgets/editors/{contact-widget → contact}/index.d.ts +0 -0
  446. /package/widgets/lib/widgets/editors/{contact-widget → contact}/popup-component.d.ts +0 -0
  447. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-column.component.d.ts +0 -0
  448. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-edit.component.d.ts +0 -0
  449. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-filter.component.d.ts +0 -0
  450. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-print.component.d.ts +0 -0
  451. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-view.component.d.ts +0 -0
  452. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/index.d.ts +0 -0
  453. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-column.component.d.ts +0 -0
  454. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-edit.component.d.ts +0 -0
  455. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-filter.component.d.ts +0 -0
  456. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-print.component.d.ts +0 -0
  457. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-view.component.d.ts +0 -0
  458. /package/widgets/lib/widgets/editors/{email-box-widget → email}/index.d.ts +0 -0
  459. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/index.d.ts +0 -0
  460. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-column.component.d.ts +0 -0
  461. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-edit.component.d.ts +0 -0
  462. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-filter.component.d.ts +0 -0
  463. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-print.component.d.ts +0 -0
  464. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-view.component.d.ts +0 -0
  465. /package/widgets/lib/widgets/editors/{link-widget → link}/index.d.ts +0 -0
  466. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-column.component.d.ts +0 -0
  467. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-edit.component.d.ts +0 -0
  468. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-filter.component.d.ts +0 -0
  469. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-print.component.d.ts +0 -0
  470. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-view.component.d.ts +0 -0
  471. /package/widgets/lib/widgets/editors/{number-box-widget → number}/index.d.ts +0 -0
  472. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-column.component.d.ts +0 -0
  473. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-filter.component.d.ts +0 -0
  474. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-print.component.d.ts +0 -0
  475. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-view.component.d.ts +0 -0
  476. /package/widgets/lib/widgets/editors/{password-box-widget → password}/index.d.ts +0 -0
  477. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-column.component.d.ts +0 -0
  478. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-edit.component.d.ts +0 -0
  479. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-filter.component.d.ts +0 -0
  480. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-print.component.d.ts +0 -0
  481. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-view.component.d.ts +0 -0
  482. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/index.d.ts +0 -0
  483. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-column.component.d.ts +0 -0
  484. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-edit.component.d.ts +0 -0
  485. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-filter.component.d.ts +0 -0
  486. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-print.component.d.ts +0 -0
  487. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-view.component.d.ts +0 -0
  488. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/index.d.ts +0 -0
  489. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-popup.component.d.ts +0 -0
  490. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-column.component.d.ts +0 -0
  491. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-edit.component.d.ts +0 -0
  492. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-filter.component.d.ts +0 -0
  493. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-print.component.d.ts +0 -0
  494. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-view.component.d.ts +0 -0
  495. /package/widgets/lib/widgets/editors/{select-box-widget → select}/index.d.ts +0 -0
  496. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-column.component.d.ts +0 -0
  497. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-edit.component.d.ts +0 -0
  498. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-filter.component.d.ts +0 -0
  499. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-print.component.d.ts +0 -0
  500. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-view.component.d.ts +0 -0
  501. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/index.d.ts +0 -0
  502. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-column.component.d.ts +0 -0
  503. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-edit.component.d.ts +0 -0
  504. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.d.ts +0 -0
  505. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.d.ts +0 -0
  506. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-view.component.d.ts +0 -0
  507. /package/widgets/lib/widgets/editors/{text-box-widget → text}/index.d.ts +0 -0
  508. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.d.ts +0 -0
  509. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-edit.component.d.ts +0 -0
  510. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.d.ts +0 -0
  511. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.d.ts +0 -0
  512. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-view.component.d.ts +0 -0
  513. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/index.d.ts +0 -0
  514. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.d.ts +0 -0
  515. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.d.ts +0 -0
  516. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.d.ts +0 -0
  517. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.d.ts +0 -0
  518. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.d.ts +0 -0
  519. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-designer.component.d.ts +0 -0
  520. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.d.ts +0 -0
  521. /package/widgets/lib/widgets/layout/{block-widget → block}/index.d.ts +0 -0
  522. /package/widgets/lib/widgets/layout/{page-widget → page}/index.d.ts +0 -0
  523. /package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-designer.component.d.ts +0 -0
  524. /package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.d.ts +0 -0
  525. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/index.d.ts +0 -0
  526. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.d.ts +0 -0
  527. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-edit.component.d.ts +0 -0
  528. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.d.ts +0 -0
  529. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-view.component.d.ts +0 -0
  530. /package/widgets/lib/widgets/layout/{text-block-widget → text-block}/index.d.ts +0 -0
  531. /package/widgets/lib/widgets/layout/{text-block-widget → text-block}/text-block-widget-view.component.d.ts +0 -0
@@ -1,147 +1,215 @@
1
1
  import * as i3$1 from '@acorex/platform/layout/builder';
2
- import { AXPWidgetRegistryService, AXP_WIDGET_TOKEN, AXPLayoutBuilderModule, AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';
2
+ import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXP_WIDGET_TOKEN, AXPLayoutBuilderModule, AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i0 from '@angular/core';
6
- import { signal, computed, Injectable, inject, Injector, NgZone, ElementRef, input, effect, Component, ChangeDetectionStrategy, HostListener, ViewEncapsulation, NgModule, EventEmitter, untracked, Output } from '@angular/core';
6
+ import { signal, computed, Injectable, inject, Injector, NgZone, ElementRef, input, effect, Component, ChangeDetectionStrategy, HostListener, ViewEncapsulation, model, output, HostBinding, EventEmitter, untracked, Output, ViewChild } from '@angular/core';
7
7
  import * as i3 from '@acorex/components/skeleton';
8
8
  import { AXSkeletonModule } from '@acorex/components/skeleton';
9
9
  import { AXUnsubscriber } from '@acorex/core/utils';
10
10
  import * as i2 from '@angular/cdk/portal';
11
11
  import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
- import { cloneDeep, merge, sortBy, set, get, capitalize, unionBy, isArray, isNil, isEmpty } from 'lodash-es';
12
+ import { merge, cloneDeep, sortBy, set, get, capitalize, unionBy, isArray, isNil, isEmpty } from 'lodash-es';
13
13
  import { Subject, first, merge as merge$1 } from 'rxjs';
14
14
  import { AXPopupService } from '@acorex/components/popup';
15
15
  import * as i2$1 from '@acorex/components/button';
16
16
  import { AXButtonModule } from '@acorex/components/button';
17
- import * as i1$1 from '@acorex/components/decorators';
17
+ import * as i2$2 from '@acorex/components/decorators';
18
18
  import { AXDecoratorModule } from '@acorex/components/decorators';
19
19
  import * as i5 from '@acorex/components/button-group';
20
20
  import { AXButtonGroupModule } from '@acorex/components/button-group';
21
21
  import * as i3$2 from '@acorex/components/drawer';
22
22
  import { AXDrawerModule } from '@acorex/components/drawer';
23
- import * as i6 from '@acorex/components/dropdown';
23
+ import * as i4 from '@acorex/components/dropdown';
24
24
  import { AXDropdownModule } from '@acorex/components/dropdown';
25
- import * as i2$2 from '@acorex/components/menu';
25
+ import * as i2$3 from '@acorex/components/menu';
26
26
  import { AXMenuModule } from '@acorex/components/menu';
27
- import * as i2$3 from '@acorex/components/tabs';
27
+ import * as i2$4 from '@acorex/components/tabs';
28
28
  import { AXTabsModule } from '@acorex/components/tabs';
29
- import * as i1$2 from '@acorex/components/breadcrumbs';
29
+ import * as i1$1 from '@acorex/components/breadcrumbs';
30
30
  import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
31
- import * as i1$3 from '@acorex/components/collapse';
31
+ import * as i1$2 from '@acorex/components/collapse';
32
32
  import { AXCollapseModule } from '@acorex/components/collapse';
33
33
 
34
- class AXPObjectHistoryManager {
35
- constructor() {
36
- this.undoStack = signal([]); // Undo history as a signal
37
- this.redoStack = signal([]); // Redo history as a signal
38
- this._currentState = signal(null); // Current state as a signal
39
- this.maxHistorySize = 50;
40
- this.revertedIndex = null; // Track the index when reverting
41
- this.currentState = this._currentState.asReadonly();
42
- this.canUndo = computed(() => this.undoStack().length > 0);
43
- this.canRedo = computed(() => this.redoStack().length > 0);
44
- // Get the undo history for UI with disabled future states
45
- this.history = computed(() => {
46
- const undoHistory = this.undoStack();
47
- return undoHistory.map((state, index) => ({
48
- ...state,
49
- index,
50
- disabled: this.revertedIndex !== null && index > this.revertedIndex
51
- }));
52
- });
34
+ // AddWidgetCommand
35
+ class AddWidgetCommand {
36
+ constructor(widget, parent, previousSelection) {
37
+ this.widget = widget;
38
+ this.parent = parent;
39
+ this.previousSelection = previousSelection;
53
40
  }
54
- // Save a new state and clear redo if necessary
55
- saveState(newState, description) {
56
- const newHistoryState = {
57
- state: cloneDeep(newState),
58
- date: new Date(),
59
- description: description,
60
- };
61
- // Limit undo history size
62
- if (this.undoStack().length >= this.maxHistorySize) {
63
- this.undoStack.set(this.undoStack().slice(1)); // Remove oldest state
64
- }
65
- // Add the current state to the undo stack
66
- //if (this._currentState()) {
67
- this.undoStack.set([...this.undoStack(), this._currentState()]);
68
- //}
69
- // Set the new state as the current state
70
- this._currentState.set(newHistoryState);
71
- // Clear the redo stack if a new state is saved after undoing
72
- if (this.revertedIndex !== null) {
73
- this.redoStack.set([]);
74
- this.revertedIndex = null; // Reset reverted index
41
+ execute() {
42
+ this.parent.children = this.parent.children || [];
43
+ this.parent.children.push(this.widget);
44
+ }
45
+ undo() {
46
+ this.parent.children = this.parent.children || [];
47
+ const index = this.parent.children.indexOf(this.widget);
48
+ if (index > -1) {
49
+ this.parent.children.splice(index, 1);
75
50
  }
76
51
  }
77
- // Update the current state's last entry in the undo stack
78
- updateState(newState) {
79
- const lastStateIndex = this.undoStack().length - 1;
80
- // Check if there is a valid state to update
81
- if (lastStateIndex >= 0) {
82
- const lastState = this.undoStack()[lastStateIndex];
83
- // Update the state in the last history entry
84
- const updatedState = {
85
- ...lastState,
86
- state: cloneDeep(newState),
87
- date: new Date() // Update the date to reflect the change
88
- };
89
- // Update the undo stack with the modified state
90
- const updatedUndoStack = [...this.undoStack()];
91
- updatedUndoStack[lastStateIndex] = updatedState;
92
- this.undoStack.set(updatedUndoStack);
93
- // Also update the currentState to reflect the latest change
94
- this._currentState.set(updatedState);
52
+ description() {
53
+ return `Added widget ${this.widget.name}`;
54
+ }
55
+ icon() {
56
+ return `fa-solid fa-square-plus`;
57
+ }
58
+ getExecutionSelection() {
59
+ return this.widget; // After executing, select the newly added widget
60
+ }
61
+ getUndoSelection() {
62
+ return this.previousSelection; // After undo, select the previously selected widget
63
+ }
64
+ }
65
+ class RemoveWidgetCommand {
66
+ constructor(widget, parent, previousSelection) {
67
+ this.widget = widget;
68
+ this.parent = parent;
69
+ this.previousSelection = previousSelection;
70
+ parent.children = parent.children || [];
71
+ this.index = parent.children.indexOf(widget); // Capture the index for undo purposes
72
+ }
73
+ execute() {
74
+ this.parent.children = this.parent.children || [];
75
+ this.index = this.parent.children.indexOf(this.widget); // Re-assert the index in case it has changed
76
+ this.parent.children.splice(this.index, 1);
77
+ }
78
+ undo() {
79
+ this.parent.children = this.parent.children || [];
80
+ this.parent.children.splice(this.index, 0, this.widget); // Reinsert at the original index
81
+ }
82
+ description() {
83
+ return `Removed widget ${this.widget.name}`;
84
+ }
85
+ icon() {
86
+ return `fa-solid fa-square-minus`;
87
+ }
88
+ getExecutionSelection() {
89
+ return this.previousSelection; // Typically the parent or a nearby sibling could be focused
90
+ }
91
+ getUndoSelection() {
92
+ return this.widget; // Select the widget itself when the operation is undone
93
+ }
94
+ }
95
+ class UpdateWidgetCommand {
96
+ constructor(widget, values, previousSelection) {
97
+ this.widget = widget;
98
+ this.newState = merge(cloneDeep(widget), values);
99
+ this.previousSelection = previousSelection;
100
+ this.previousState = cloneDeep(widget);
101
+ }
102
+ execute() {
103
+ merge(this.widget, this.newState);
104
+ }
105
+ undo() {
106
+ this.deepPruneAndRestore(this.widget, this.previousState);
107
+ }
108
+ description() {
109
+ return `Updated widget ${this.widget.name}`;
110
+ }
111
+ icon() {
112
+ return `fa-solid fa-pen-to-square`;
113
+ }
114
+ getExecutionSelection() {
115
+ return this.widget; // Focus the widget after it's updated
116
+ }
117
+ getUndoSelection() {
118
+ return this.previousSelection; // Restore the focus to where it was before the update
119
+ }
120
+ deepPruneAndRestore(current, original) {
121
+ Object.keys(current).forEach(key => {
122
+ if (original.hasOwnProperty(key)) {
123
+ if (typeof current[key] === 'object' && current[key] !== null && !(current[key] instanceof Array)) {
124
+ this.deepPruneAndRestore(current[key], original[key]);
125
+ }
126
+ }
127
+ else {
128
+ delete current[key]; // Remove properties not present in original
129
+ }
130
+ });
131
+ // Restore the original properties
132
+ merge(current, original);
133
+ }
134
+ }
135
+ class CommandManager {
136
+ constructor() {
137
+ this.undoStack = signal([]);
138
+ this.currentIndex = signal(-1);
139
+ this.selectedNode = signal(null);
140
+ this.canUndo = computed(() => this.currentIndex() >= 0);
141
+ this.canRedo = computed(() => this.currentIndex() < this.undoStack().length - 1);
142
+ this.history = computed(() => this.undoStack().map((cmd, index) => ({
143
+ description: cmd.description(),
144
+ icon: cmd.icon(),
145
+ isPast: this.currentIndex() > index,
146
+ isFuture: this.currentIndex() < index,
147
+ isCurrent: this.currentIndex() == index
148
+ })));
149
+ }
150
+ executeCommand(command) {
151
+ // Check if the currentIndex is not at the end of the undoStack
152
+ if (this.currentIndex() !== this.undoStack().length - 1) {
153
+ // Remove all commands beyond the current index to discard the "future" commands
154
+ const newUndoStack = this.undoStack().slice(0, this.currentIndex() + 1);
155
+ this.undoStack.set(newUndoStack);
95
156
  }
157
+ command.execute();
158
+ this.undoStack.set([...this.undoStack(), command]); // Add the new command to the stack
159
+ this.currentIndex.set(this.undoStack().length - 1); // Update currentIndex to the end of the stack
160
+ this.selectedNode.set(command.getExecutionSelection()); // Update the selected node
96
161
  }
97
- // Undo the last action and update the current state
98
162
  undo() {
99
- if (this.undoStack().length > 0) {
100
- const previousState = this.undoStack().pop(); // Get the last state
101
- this.redoStack.set([...this.redoStack(), this._currentState()]); // Save current state to redo stack
102
- this._currentState.set(previousState); // Revert to the previous state
103
- this.revertedIndex = this.undoStack().length - 1; // Update reverted index
163
+ if (this.currentIndex() >= 0) {
164
+ const command = this.undoStack()[this.currentIndex()];
165
+ command.undo();
166
+ this.currentIndex.set(this.currentIndex() - 1);
167
+ if (this.currentIndex() >= 0) {
168
+ this.selectedNode.set(this.undoStack()[this.currentIndex()].getUndoSelection());
169
+ }
170
+ else {
171
+ this.selectedNode.set(null); // No selection if all commands are undone
172
+ }
104
173
  }
105
174
  }
106
- // Redo the last undone action and update the current state
107
175
  redo() {
108
- if (this.redoStack().length > 0) {
109
- const nextState = this.redoStack().pop(); // Get the next state
110
- this.undoStack.set([...this.undoStack(), this._currentState()]); // Save current state to undo stack
111
- this._currentState.set(nextState); // Apply the redo state
112
- this.revertedIndex = this.undoStack().length - 1; // Update reverted index
176
+ if (this.currentIndex() < this.undoStack().length - 1) {
177
+ this.currentIndex.set(this.currentIndex() + 1);
178
+ const command = this.undoStack()[this.currentIndex()];
179
+ command.execute();
180
+ this.selectedNode.set(command.getExecutionSelection());
113
181
  }
114
182
  }
115
- // Revert to a specific state by index in the undo stack
116
- revert(index) {
117
- if (index < 0 || index >= this.undoStack().length) {
118
- return; // Invalid index, do nothing
183
+ goToCommand(index) {
184
+ if (index < 0 || index >= this.undoStack().length || index === this.currentIndex()) {
185
+ return; // Out of bounds or already at the desired index
186
+ }
187
+ if (index > this.currentIndex()) {
188
+ // Need to redo until reaching the desired index
189
+ while (this.currentIndex() < index) {
190
+ this.redo();
191
+ }
192
+ }
193
+ else {
194
+ // Need to undo until reaching the desired index
195
+ while (this.currentIndex() > index) {
196
+ this.undo();
197
+ }
119
198
  }
120
- const targetState = this.undoStack()[index];
121
- const currentStateSnapshot = this._currentState(); // Save the current state for redo
122
- // Move states after the reverted index to the redo stack
123
- const statesToRedo = this.undoStack().slice(index + 1);
124
- this.redoStack.set([currentStateSnapshot, ...statesToRedo]);
125
- // Update the undo stack to the reverted point
126
- this.undoStack.set(this.undoStack().slice(0, index + 1));
127
- // Set the reverted state as the current state
128
- this._currentState.set(targetState);
129
- this.revertedIndex = index; // Track the reverted index
130
- }
131
- // Clear all history
199
+ // Optionally update any UI components or state here
200
+ this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());
201
+ }
132
202
  clear() {
133
203
  this.undoStack.set([]);
134
- this.redoStack.set([]);
135
- this.revertedIndex = null;
136
- this._currentState.set(null);
204
+ this.currentIndex.set(-1);
137
205
  }
138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, providedIn: 'root' }); }
206
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
207
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, providedIn: 'root' }); }
140
208
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, decorators: [{
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, decorators: [{
142
210
  type: Injectable,
143
211
  args: [{
144
- providedIn: 'root',
212
+ providedIn: 'root'
145
213
  }]
146
214
  }] });
147
215
 
@@ -149,19 +217,20 @@ class AXPDesignerService {
149
217
  constructor() {
150
218
  this.popupService = inject(AXPopupService);
151
219
  this.widgetRegisteryService = inject(AXPWidgetRegistryService);
152
- this.historyManager = inject((AXPObjectHistoryManager));
220
+ this.document = signal(this.createDoc());
221
+ this.currentPageIndex = signal(0);
222
+ this.currentPage = signal(this.document().children?.[0]);
223
+ this.commandManager = inject(CommandManager);
153
224
  this.clipboard = signal(null);
154
- this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != "page");
155
- this.canPaste = computed(() => (this.clipboard() != null));
156
- this.history = computed(() => this.historyManager.history());
157
- this.canUndo = computed(() => this.historyManager.canUndo());
158
- this.canRedo = computed(() => this.historyManager.canRedo());
159
- this.root = signal(this.createPage());
225
+ this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != 'page');
226
+ this.canPaste = computed(() => this.clipboard() != null);
227
+ this.history = computed(() => this.commandManager.history());
228
+ this.canUndo = computed(() => this.commandManager.canUndo());
229
+ this.canRedo = computed(() => this.commandManager.canRedo());
160
230
  this.breadcrumbs = computed(() => {
161
- return this.selectedNode() ? this.findBreadcrumbs(this.root(), this.selectedNode()) ?? [] : [];
231
+ return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];
162
232
  });
163
233
  this.selectedNode = signal(null);
164
- this._lastSelectedNode = null;
165
234
  this._focusedNode = null;
166
235
  this.focusedNode = () => this._focusedNode;
167
236
  this.mode = signal('designer');
@@ -172,24 +241,19 @@ class AXPDesignerService {
172
241
  this.onFocused = new Subject();
173
242
  }
174
243
  register(command) {
175
- if (!this._lastSelectedNode) {
176
- this.select({ widget: command.widget });
177
- }
178
- else {
179
- this.select({ widget: this._lastSelectedNode });
180
- }
244
+ this.select({ widget: command.widget });
181
245
  }
182
246
  select(command) {
183
247
  this.selectedNode.set(command.widget);
184
- this._lastSelectedNode = this.selectedNode();
185
248
  this.onSelected.next(command);
186
249
  }
187
250
  update(command) {
188
- if (command.mode == 'update') {
189
- this.historyManager.saveState(cloneDeep(this.root()), `Updated ${this.selectedNode()?.name}`);
251
+ const node = command.widget ?? this.selectedNode();
252
+ if (command.mode == 'update' && node) {
253
+ this.commandManager.executeCommand(new UpdateWidgetCommand(node, command.values, node));
190
254
  }
191
- this.selectedNode.update(c => merge(this.selectedNode(), command.values));
192
- this.onUpdate.next({ widget: this.selectedNode(), values: command.values });
255
+ this.selectedNode.update((c) => merge(node, command.values));
256
+ this.onUpdate.next({ widget: node, values: command.values });
193
257
  }
194
258
  focus(command) {
195
259
  if (this._focusedNode != command.widget) {
@@ -220,36 +284,68 @@ class AXPDesignerService {
220
284
  return undefined;
221
285
  }
222
286
  async showPicker(currentNode) {
223
- const com = await import('./acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs').then(c => c.AXPDesignerWidgetPickerComponent);
287
+ const com = await import('./acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs').then((c) => c.AXPDesignerWidgetPickerComponent);
224
288
  const result = await this.popupService.open(com, {
225
- title: "Widget Gallery",
289
+ title: 'Widget Gallery',
226
290
  size: 'md',
227
291
  closeButton: true,
228
292
  data: {
229
- widgets: sortBy(this.widgetRegisteryService.all().filter(c => c.visible != false), c => c.title)
230
- }
293
+ widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
294
+ },
231
295
  });
232
296
  if ((result.data?.widgets ?? []).length) {
233
297
  const selected = result.data?.widgets;
234
- selected.forEach(c => {
298
+ selected.forEach((c) => {
235
299
  this.addWidget(currentNode, { type: c.name });
236
300
  });
237
301
  }
238
302
  }
303
+ createDoc() {
304
+ const doc = {
305
+ type: AXPWidgetsCatalog.document,
306
+ children: [this.createPage()],
307
+ name: 'document',
308
+ };
309
+ set(doc, '__meta__.id', Math.random() * Math.pow(10, 18));
310
+ return doc;
311
+ }
239
312
  createPage() {
240
- const config = this.widgetRegisteryService.resolve('page');
313
+ const config = this.widgetRegisteryService.resolve('page-layout');
241
314
  const page = {
242
- type: 'page',
315
+ type: 'page-layout',
243
316
  children: [],
244
- name: "page",
317
+ name: 'page-layout1',
245
318
  };
246
319
  set(page, '__meta__.id', Math.random() * Math.pow(10, 18));
247
320
  set(page, '__meta__.config', config);
248
- this.historyManager.saveState(page, "New");
249
321
  return page;
250
322
  }
323
+ addNewPage() {
324
+ this.addWidget(this.document(), this.createPage());
325
+ this.goToPage(this.currentPageIndex() + 1);
326
+ }
327
+ removePage(index) {
328
+ const page = this.document().children?.[index];
329
+ this.removeWidget(page);
330
+ this.goToPage(index - 1);
331
+ }
332
+ clonePage(index) {
333
+ const page = this.document().children?.[index];
334
+ this.clone(page);
335
+ this.goToPage((this.document().children?.length ?? 1) - 1);
336
+ }
337
+ goToPage(index) {
338
+ this.currentPageIndex.set(index);
339
+ setTimeout(() => {
340
+ this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
341
+ this.select({ widget: this.currentPage() });
342
+ });
343
+ }
344
+ reRenderPage() {
345
+ this.currentPage.set({ ...this.currentPage() });
346
+ }
251
347
  findWidgetById(root, id) {
252
- if (get(root, "__meta__.id") === id) {
348
+ if (get(root, '__meta__.id') === id) {
253
349
  return root; // Return the root if it matches the ID
254
350
  }
255
351
  if (!root.children)
@@ -262,10 +358,10 @@ class AXPDesignerService {
262
358
  }
263
359
  return null; // Node not found
264
360
  }
265
- findParent(id, parent = this.root()) {
361
+ findParent(id, parent = this.currentPage()) {
266
362
  if (!parent.children)
267
363
  return null;
268
- if (parent.children.some(child => get(child, "__meta__.id") === id)) {
364
+ if (parent.children.some((child) => get(child, '__meta__.id') === id)) {
269
365
  return parent; // Return this node as it's the parent of the node with the given ID
270
366
  }
271
367
  for (const child of parent.children) {
@@ -283,7 +379,7 @@ class AXPDesignerService {
283
379
  if (config && config.container) {
284
380
  return current;
285
381
  }
286
- current = this.findParent(get(current, "__meta__.id")); // Use findParent to navigate upwards
382
+ current = this.findParent(get(current, '__meta__.id')); // Use findParent to navigate upwards
287
383
  }
288
384
  }
289
385
  else {
@@ -307,76 +403,68 @@ class AXPDesignerService {
307
403
  return null;
308
404
  //
309
405
  const cloned = cloneDeep(node);
310
- this.historyManager.saveState(cloneDeep(this.root()), `Added ${cloned.type}`);
311
- //
312
- if (!currentNode.children) {
313
- currentNode.children = [];
314
- }
315
406
  const config = this.widgetRegisteryService.resolve(node.type);
316
407
  //
408
+ this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));
409
+ //
317
410
  cloned.name = this.generateUniqueName(node.type);
318
411
  set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));
319
412
  set(cloned, '__meta__.config', config);
320
413
  //
321
- currentNode.children.push(cloned);
322
- //
323
- this.historyManager.updateState(this.root());
414
+ this.reRenderPage();
324
415
  //
325
416
  this.refresh({ widget: currentNode });
326
417
  this.select({ widget: cloned });
327
418
  return cloned;
328
419
  }
329
420
  removeWidget(node) {
330
- if (node.type === "page") {
331
- console.error("Cannot remove the page node.");
332
- return; // Prevent removing the root page node
421
+ if (node.type === 'document-layout' || (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
422
+ console.error('Cannot remove the page node.');
423
+ return; // Prevent removing the root page node or document
333
424
  }
334
- this.historyManager.saveState(cloneDeep(this.root()), `Removed ${node.name}`);
335
- const nodeIdToRemove = get(node, "__meta__.id");
425
+ const nodeIdToRemove = get(node, '__meta__.id');
336
426
  if (!nodeIdToRemove) {
337
- throw new Error("Node does not have a valid __meta__.id to identify it for removal.");
427
+ throw new Error('Node does not have a valid __meta__.id to identify it for removal.');
338
428
  }
339
429
  // Find the parent of the node to remove it
340
- const parent = this.findParent(nodeIdToRemove, this.root());
430
+ const parent = this.findParent(nodeIdToRemove, this.document());
341
431
  if (!parent) {
342
- throw new Error("Parent node not found. The node might be the root node or does not exist.");
343
- }
344
- const index = parent.children?.findIndex(child => get(child, "__meta__.id") === nodeIdToRemove) ?? -1;
345
- if (index > -1) {
346
- parent.children.splice(index, 1);
347
- //
348
- this.historyManager.updateState(this.root());
349
- //
350
- this.refresh({ widget: parent }); // Refresh the UI to reflect changes
351
- this.select({ widget: parent }); // Select the parent node after removal
352
- }
353
- else {
354
- throw new Error("Node to remove not found in the widget tree.");
432
+ throw new Error('Parent node not found. The node might be the root node or does not exist.');
355
433
  }
356
- }
357
- revertToChange(index) {
358
- this.historyManager.revert(index);
359
- this.root.set(this.historyManager.currentState()?.state);
360
- this.refresh({ widget: this.root() });
434
+ const previousSelection = this.selectedNode(); // Capture the currently selected node before removal
435
+ const command = new RemoveWidgetCommand(node, parent, previousSelection);
436
+ this.commandManager.executeCommand(command);
437
+ this.refresh({ widget: parent }); // Refresh the UI to reflect changes
438
+ this.select({ widget: parent }); // Select the parent node after removal
439
+ }
440
+ navigateTo(index) {
441
+ this.commandManager.goToCommand(index);
442
+ this.reRenderPage();
443
+ const currentSelection = this.commandManager.selectedNode();
444
+ this.refresh({ widget: this.currentPage() });
445
+ this.select({ widget: currentSelection });
361
446
  }
362
447
  redo() {
363
- if (this.historyManager.canRedo()) {
364
- this.historyManager.redo();
365
- this.root.set(this.historyManager.currentState()?.state);
366
- this.refresh({ widget: this.root() });
367
- }
448
+ this.commandManager.redo();
449
+ this.reRenderPage();
450
+ const currentSelection = this.commandManager.selectedNode();
451
+ this.refresh({ widget: this.currentPage() });
452
+ this.select({ widget: currentSelection });
368
453
  }
369
454
  undo() {
370
- if (this.historyManager.canUndo()) {
371
- this.historyManager.undo();
372
- this.root.set(this.historyManager.currentState()?.state);
373
- this.refresh({ widget: this.root() });
374
- }
455
+ this.commandManager.undo();
456
+ this.reRenderPage();
457
+ const currentSelection = this.commandManager.selectedNode();
458
+ this.refresh({ widget: this.currentPage() });
459
+ this.select({ widget: currentSelection });
460
+ }
461
+ clearHistory() {
462
+ this.commandManager.clear();
375
463
  }
376
464
  formatOutputJSON(obj, nodeName) {
377
465
  // Check if the object is an array
378
466
  if (Array.isArray(obj)) {
379
- return obj.map(item => this.formatOutputJSON(item, nodeName));
467
+ return obj.map((item) => this.formatOutputJSON(item, nodeName));
380
468
  }
381
469
  else if (typeof obj === 'object' && obj !== null) {
382
470
  // Create a new object to store the result
@@ -403,47 +491,57 @@ class AXPDesignerService {
403
491
  this.copy(widget); // Copy the widget to the clipboard
404
492
  this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
405
493
  }
406
- paste(parentNode = this.selectedNode() ?? this.root()) {
494
+ clone(widget = this.selectedNode()) {
495
+ if (!widget)
496
+ return;
497
+ this.copy(widget); // Copy the widget to the clipboard
498
+ if (widget.type == 'page-layout') {
499
+ this.paste(this.document());
500
+ }
501
+ else {
502
+ this.paste(widget);
503
+ }
504
+ }
505
+ paste(parentNode = this.selectedNode() ?? this.currentPage()) {
407
506
  if (!this.clipboard() || !this.selectedNode()) {
408
- console.error("Clipboard is empty or no node is selected.");
507
+ console.error('Clipboard is empty or no node is selected.');
409
508
  return;
410
509
  }
411
510
  const newNode = cloneDeep(this.clipboard());
412
511
  const nearestContainer = this.findNearestContainer(parentNode, true);
413
512
  if (!nearestContainer) {
414
- console.error("No suitable container found.");
513
+ console.error('No suitable container found.');
415
514
  return;
416
515
  }
417
516
  //
418
- this.historyManager.saveState(newNode, `Pasted ${newNode.name}`); // Prepare for undo functionality
419
- //
420
517
  if (!nearestContainer.children) {
421
518
  nearestContainer.children = [];
422
519
  }
423
- set(newNode, "__meta__.id", Math.random() * Math.pow(10, 18)); // Ensure a unique ID
520
+ newNode.name = this.generateUniqueName(newNode.type);
521
+ set(newNode, '__meta__.id', Math.random() * Math.pow(10, 18)); // Ensure a unique ID
424
522
  //
425
- nearestContainer.children.push(newNode); // Add the new node to the container
523
+ this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));
426
524
  //
427
- this.historyManager.updateState(this.root());
428
- //
429
- this.refresh({ widget: nearestContainer }); // Refresh the UI
430
- this.select({ widget: newNode }); // Select the newly pasted node
525
+ setTimeout(() => {
526
+ this.refresh({ widget: nearestContainer }); // Refresh the UI
527
+ this.select({ widget: newNode }); // Select the newly pasted node
528
+ });
431
529
  }
432
530
  export() {
433
- const json = this.formatOutputJSON(this.root(), "__meta__");
531
+ const json = this.formatOutputJSON(this.document(), '__meta__');
434
532
  return JSON.stringify(json);
435
533
  }
436
534
  download() {
437
535
  // Convert the object to a JSON string
438
536
  const jsonStr = this.export();
439
537
  // Create a blob object from the JSON string
440
- const blob = new Blob([jsonStr], { type: "application/json" });
538
+ const blob = new Blob([jsonStr], { type: 'application/json' });
441
539
  // Create a URL for the blob object
442
540
  const url = URL.createObjectURL(blob);
443
541
  // Create a temporary <a> element to trigger the download
444
- const a = document.createElement("a");
542
+ const a = document.createElement('a');
445
543
  a.href = url;
446
- a.download = "export.json";
544
+ a.download = 'export.json';
447
545
  // Append the <a> element to the document body (necessary for some browsers)
448
546
  document.body.appendChild(a);
449
547
  // Trigger the download by clicking the <a> element
@@ -464,7 +562,7 @@ class AXPDesignerService {
464
562
  let uniqueName = `${baseName}${index}`;
465
563
  // Gather all existing names to check against
466
564
  const existingNames = new Set();
467
- this.collectAllNames(this.root(), existingNames);
565
+ this.collectAllNames(this.document(), existingNames);
468
566
  // Increment the index until a unique name is found
469
567
  while (existingNames.has(uniqueName)) {
470
568
  index++;
@@ -487,6 +585,17 @@ class AXPDesignerService {
487
585
  }
488
586
  }
489
587
  }
588
+ async openPreview() {
589
+ const com = await import('./acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs').then((c) => c.AXPDesignerWidgetPickerComponent);
590
+ await this.popupService.open(com, {
591
+ title: 'Widget Gallery',
592
+ size: 'full',
593
+ closeButton: true,
594
+ data: {
595
+ widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
596
+ },
597
+ });
598
+ }
490
599
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
491
600
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
492
601
  }
@@ -541,7 +650,7 @@ class AXPWidgetDesignerRendererComponent {
541
650
  //
542
651
  this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
543
652
  if (this.isCurrentWidget(c.widget)) {
544
- this.instance.setChildren(this.node().children ?? []);
653
+ this.instance?.setChildren(this.node().children ?? []);
545
654
  }
546
655
  });
547
656
  //
@@ -656,7 +765,7 @@ class AXPWidgetDesignerRendererComponent {
656
765
  });
657
766
  }
658
767
  applyOptions(values) {
659
- if (this.node().defaultValue != null) {
768
+ if (this.instance && this.node().defaultValue != null) {
660
769
  this.instance.setValue(this.node().defaultValue);
661
770
  }
662
771
  this.mergedOptions.update((currentOptions) => {
@@ -796,40 +905,8 @@ class AXPDesignerBoardComponent {
796
905
  removeCustomClass() {
797
906
  this.elementRef.nativeElement.querySelectorAll('style').forEach(s => s.remove());
798
907
  }
799
- handleKeyboardEvent(event) {
800
- if (event.ctrlKey) {
801
- switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
802
- case 'z':
803
- event.preventDefault(); // Prevent the browser's default undo action
804
- this.service.undo();
805
- break;
806
- case 'y':
807
- event.preventDefault(); // Prevent the browser's default redo action
808
- this.service.redo();
809
- break;
810
- case 'c':
811
- if (this.service.canCutCopy()) {
812
- event.preventDefault(); // Prevent the browser's default copy action
813
- this.service.copy();
814
- }
815
- break;
816
- case 'x':
817
- if (this.service.canCutCopy()) {
818
- event.preventDefault(); // Prevent the browser's default cut action
819
- this.service.cut();
820
- }
821
- break;
822
- case 'v':
823
- if (this.service.canPaste()) {
824
- event.preventDefault(); // Prevent the browser's default paste action
825
- this.service.paste();
826
- }
827
- break;
828
- }
829
- }
830
- }
831
908
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
832
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: AXPWidgetDesignerRendererComponent, selector: "axp-widget-designer-renderer", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
909
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", ngImport: i0, template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: AXPWidgetDesignerRendererComponent, selector: "axp-widget-designer-renderer", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
833
910
  }
834
911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, decorators: [{
835
912
  type: Component,
@@ -837,11 +914,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
837
914
  CommonModule,
838
915
  AXPLayoutBuilderModule,
839
916
  AXPWidgetDesignerRendererComponent
840
- ], template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>" }]
841
- }], propDecorators: { handleKeyboardEvent: [{
842
- type: HostListener,
843
- args: ['document:keydown', ['$event']]
844
- }] } });
917
+ ], template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>" }]
918
+ }] });
845
919
 
846
920
  class AXPDesignerAddWidgetButtonComponent {
847
921
  constructor() {
@@ -854,37 +928,103 @@ class AXPDesignerAddWidgetButtonComponent {
854
928
  }
855
929
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
856
930
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerAddWidgetButtonComponent, isStandalone: true, selector: "axp-designer-add-widget-button", ngImport: i0, template: `
857
- <div class="ax-container ax-mx-auto">
931
+ <div class="ax-container">
858
932
  <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
859
933
  <ax-icon icon="fa-solid fa-plus"></ax-icon>
860
934
  </ax-button>
861
935
  </div>
862
- `, isInline: true, styles: ["axp-designer-add-widget-button .ax-container{display:flex;justify-content:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
936
+ `, isInline: true, styles: ["axp-designer-add-widget-button .ax-container{margin-left:auto;margin-right:auto;display:flex;justify-content:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
863
937
  }
864
938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, decorators: [{
865
939
  type: Component,
866
940
  args: [{ selector: 'axp-designer-add-widget-button', template: `
867
- <div class="ax-container ax-mx-auto">
941
+ <div class="ax-container">
868
942
  <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
869
943
  <ax-icon icon="fa-solid fa-plus"></ax-icon>
870
944
  </ax-button>
871
945
  </div>
872
- `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule], encapsulation: ViewEncapsulation.None, styles: ["axp-designer-add-widget-button .ax-container{display:flex;justify-content:center;padding:.5rem}\n"] }]
946
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule], encapsulation: ViewEncapsulation.None, styles: ["axp-designer-add-widget-button .ax-container{margin-left:auto;margin-right:auto;display:flex;justify-content:center;padding:.5rem}\n"] }]
873
947
  }] });
874
948
 
875
- class AXPDesignerModule {
876
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
877
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
878
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
949
+ class AXPDesignerGridDrawerComponent {
950
+ constructor() {
951
+ this.rowsCount = model(5, { alias: "rows" });
952
+ this.colsCount = model(12, { alias: "columns" });
953
+ this.onSelect = output();
954
+ this.rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));
955
+ this.columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));
956
+ this.rangeR = signal(0);
957
+ this.rangeC = signal(0);
958
+ }
959
+ handleMouseHover(r, c) {
960
+ this.rangeR.set(r);
961
+ this.rangeC.set(c);
962
+ }
963
+ handleClick(r, c) {
964
+ this.onSelect.emit({ rows: r, cols: c });
965
+ }
966
+ handleMouseLeave(event) {
967
+ this.rangeR.set(0);
968
+ this.rangeC.set(0);
969
+ }
970
+ get __style() {
971
+ return {
972
+ "--cols-width": `${this.colsCount() == 0 ? 0 : (100 / this.colsCount())}%`
973
+ };
974
+ }
975
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
976
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerGridDrawerComponent, isStandalone: true, selector: "axp-designer-grid-drawer", inputs: { rowsCount: { classPropertyName: "rowsCount", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, colsCount: { classPropertyName: "colsCount", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowsCount: "rowsChange", colsCount: "columnsChange", onSelect: "onSelect" }, host: { listeners: { "mouseleave": "handleMouseLeave($event)" }, properties: { "style": "this.__style" } }, ngImport: i0, template: `
977
+ <table class="table-picker" >
978
+ <tbody>
979
+ @for(r of rows();track $index)
980
+ {
981
+ <tr >
982
+ @for(c of columns();track $index)
983
+ {
984
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
985
+ </td>
986
+ }
987
+ </tr>
988
+ }
989
+ <tr>
990
+ <td [attr.colspan]="columns().length" class="ax-text-center">
991
+ <small >{{rangeR()}}*{{rangeC()}}</small>
992
+ </td>
993
+ </tr>
994
+ </tbody>
995
+ </table>
996
+ `, 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 }); }
879
997
  }
880
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, decorators: [{
881
- type: NgModule,
882
- args: [{
883
- imports: [],
884
- exports: [],
885
- declarations: [],
886
- }]
887
- }] });
998
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, decorators: [{
999
+ type: Component,
1000
+ args: [{ selector: 'axp-designer-grid-drawer', template: `
1001
+ <table class="table-picker" >
1002
+ <tbody>
1003
+ @for(r of rows();track $index)
1004
+ {
1005
+ <tr >
1006
+ @for(c of columns();track $index)
1007
+ {
1008
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
1009
+ </td>
1010
+ }
1011
+ </tr>
1012
+ }
1013
+ <tr>
1014
+ <td [attr.colspan]="columns().length" class="ax-text-center">
1015
+ <small >{{rangeR()}}*{{rangeC()}}</small>
1016
+ </td>
1017
+ </tr>
1018
+ </tbody>
1019
+ </table>
1020
+ `, 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"] }]
1021
+ }], propDecorators: { handleMouseLeave: [{
1022
+ type: HostListener,
1023
+ args: ['mouseleave', ['$event']]
1024
+ }], __style: [{
1025
+ type: HostBinding,
1026
+ args: ['style']
1027
+ }] } });
888
1028
 
889
1029
  class AXPDesignerBreadcrumbsComponent {
890
1030
  constructor() {
@@ -911,7 +1051,7 @@ class AXPDesignerBreadcrumbsComponent {
911
1051
  <i class="ax-icon ax-icon-chevron-right"></i>
912
1052
  </ng-template>
913
1053
  </ax-breadcrumbs>
914
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$2.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$2.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1054
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$1.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$1.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
915
1055
  }
916
1056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, decorators: [{
917
1057
  type: Component,
@@ -946,7 +1086,7 @@ class AXPDesignerHeaderMenuComponent {
946
1086
  this.service = inject(AXPDesignerService);
947
1087
  }
948
1088
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
949
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\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>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\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>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\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>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\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>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\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>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.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: ["disabled", "text", "active"], outputs: ["activeChange", "onClick"] }, { kind: "component", type: i2$2.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn"] }] }); }
1089
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\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>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\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>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\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>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\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>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\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>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.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$3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["disabled", "text", "active"], outputs: ["activeChange", "onClick"] }, { kind: "component", type: i2$3.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn"] }] }); }
950
1090
  }
951
1091
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, decorators: [{
952
1092
  type: Component,
@@ -961,12 +1101,17 @@ class AXPDesignerOutlineComponent {
961
1101
  constructor() {
962
1102
  this.service = inject(AXPDesignerService);
963
1103
  this.collapsedStates = new Map();
964
- this.root = signal(this.service.root());
965
- merge$1(this.service.onRefresh, this.service.onUpdate)
966
- .subscribe(() => {
967
- this.root.update(c => ({ ...this.service.root() }));
1104
+ this.root = signal(this.getTree());
1105
+ merge$1(this.service.onRefresh, this.service.onUpdate).subscribe(() => {
1106
+ this.root.update((c) => ({ ...this.getTree() }));
968
1107
  });
969
1108
  }
1109
+ getTree() {
1110
+ return {
1111
+ type: AXPWidgetsCatalog.document,
1112
+ children: [this.service.currentPage()],
1113
+ };
1114
+ }
970
1115
  toggleCollapse(node) {
971
1116
  // Toggle the current state or set to true if undefined
972
1117
  this.collapsedStates.set(node, !this.collapsedStates.get(node));
@@ -976,7 +1121,7 @@ class AXPDesignerOutlineComponent {
976
1121
  return !!this.collapsedStates.get(node);
977
1122
  }
978
1123
  getConfig(node) {
979
- return get(node, "__meta__.config");
1124
+ return get(node, '__meta__.config');
980
1125
  }
981
1126
  handleClick(e, node) {
982
1127
  e.stopPropagation();
@@ -991,15 +1136,11 @@ class AXPDesignerOutlineComponent {
991
1136
  this.service.focus({ widget: node });
992
1137
  }
993
1138
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
994
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n\n @if(root().children?.length)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
995
1140
  }
996
1141
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
997
1142
  type: Component,
998
- args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
999
- CommonModule,
1000
- AXPLayoutBuilderModule,
1001
- AXDecoratorModule,
1002
- ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n\n @if(root().children?.length)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
1143
+ args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXPLayoutBuilderModule, AXDecoratorModule], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
1003
1144
  }], ctorParameters: () => [] });
1004
1145
 
1005
1146
  class AXPWidgetPropertyViewerComponent {
@@ -1030,6 +1171,9 @@ class AXPWidgetPropertyViewerComponent {
1030
1171
  }
1031
1172
  }, { allowSignalWrites: true });
1032
1173
  }
1174
+ update(values) {
1175
+ this.context.set(merge(cloneDeep(this.context()), values));
1176
+ }
1033
1177
  fillTabs() {
1034
1178
  const tabs = [
1035
1179
  {
@@ -1076,8 +1220,8 @@ class AXPWidgetPropertyViewerComponent {
1076
1220
  handleContextChange(e) {
1077
1221
  untracked(() => {
1078
1222
  this.context.set(e.data);
1223
+ this.onChanged.emit({ values: this.context(), mode: e.init ? 'init' : 'update' });
1079
1224
  });
1080
- this.onChanged.emit({ values: this.context(), mode: 'update', });
1081
1225
  }
1082
1226
  handleTabChange(event) {
1083
1227
  const indx = event.index;
@@ -1086,7 +1230,7 @@ class AXPWidgetPropertyViewerComponent {
1086
1230
  }
1087
1231
  }
1088
1232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1089
- 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)\">\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 <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 <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\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$3.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i1$3.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$3.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$3.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i3$1.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1233
+ 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)\">\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 <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 <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\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: i2$4.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$4.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i3$1.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1090
1234
  }
1091
1235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, decorators: [{
1092
1236
  type: Component,
@@ -1100,23 +1244,84 @@ class AXPDesignerHistoryComponent {
1100
1244
  this.service = inject(AXPDesignerService);
1101
1245
  }
1102
1246
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1103
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerHistoryComponent, isStandalone: true, selector: "axp-designer-history", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\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\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-2 ax-p-2 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.revertToChange($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\">\n {{ step.description }} {{step.disabled}}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerHistoryComponent, isStandalone: true, selector: "axp-designer-history", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\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\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-xs\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\"\n [class.ax-italic]=\"step.isFuture\" [class.ax-text-neutral-400]=\"step.isFuture\"\n [class.ax-bg-neutral-700]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1104
1248
  }
1105
1249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, decorators: [{
1106
1250
  type: Component,
1107
1251
  args: [{ selector: 'axp-designer-history', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1108
1252
  CommonModule,
1109
1253
  AXDecoratorModule,
1110
- ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\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\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-2 ax-p-2 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.revertToChange($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\">\n {{ step.description }} {{step.disabled}}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>" }]
1254
+ AXButtonModule,
1255
+ AXDropdownModule
1256
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\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\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-xs\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\"\n [class.ax-italic]=\"step.isFuture\" [class.ax-text-neutral-400]=\"step.isFuture\"\n [class.ax-bg-neutral-700]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>" }]
1257
+ }] });
1258
+
1259
+ class AXPDesignerPagesComponent {
1260
+ constructor() {
1261
+ this.service = inject(AXPDesignerService);
1262
+ }
1263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerPagesComponent, isStandalone: true, selector: "axp-designer-pages", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Pages</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @let count = service.document().children?.length ?? 0;\n @if(count)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( page of service.document().children;track $index)\n {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-neutral-700]=\"$index==service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{$index + 1}}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1)\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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: AXDropdownModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1265
+ }
1266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, decorators: [{
1267
+ type: Component,
1268
+ args: [{ selector: 'axp-designer-pages', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1269
+ CommonModule,
1270
+ AXPLayoutBuilderModule,
1271
+ AXDecoratorModule,
1272
+ AXButtonModule,
1273
+ AXDropdownModule
1274
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\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\">\n <span class=\"ax-font-semibold\">Pages</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @let count = service.document().children?.length ?? 0;\n @if(count)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( page of service.document().children;track $index)\n {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-neutral-700]=\"$index==service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{$index + 1}}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1)\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document\n </div>\n }\n </div>\n</div>" }]
1111
1275
  }] });
1112
1276
 
1113
1277
  class AXPLayoutDesignerComponent {
1114
1278
  constructor() {
1115
1279
  this.service = inject(AXPDesignerService);
1116
1280
  this.nodeConfig = computed(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') : null);
1281
+ this.service.onUpdate.subscribe((e) => {
1282
+ this.propertyViewer.update(e.values);
1283
+ });
1284
+ }
1285
+ handleKeyboardEvent(event) {
1286
+ if (event.ctrlKey) {
1287
+ switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
1288
+ case 'z':
1289
+ event.preventDefault(); // Prevent the browser's default undo action
1290
+ this.service.undo();
1291
+ break;
1292
+ case 'y':
1293
+ event.preventDefault(); // Prevent the browser's default redo action
1294
+ this.service.redo();
1295
+ break;
1296
+ case 'c':
1297
+ if (this.service.canCutCopy()) {
1298
+ event.preventDefault(); // Prevent the browser's default copy action
1299
+ this.service.copy();
1300
+ }
1301
+ break;
1302
+ case 'd':
1303
+ if (this.service.canCutCopy()) {
1304
+ event.preventDefault(); // Prevent the browser's default copy action
1305
+ this.service.clone();
1306
+ }
1307
+ break;
1308
+ case 'x':
1309
+ if (this.service.canCutCopy()) {
1310
+ event.preventDefault(); // Prevent the browser's default cut action
1311
+ this.service.cut();
1312
+ }
1313
+ break;
1314
+ case 'v':
1315
+ if (this.service.canPaste()) {
1316
+ event.preventDefault(); // Prevent the browser's default paste action
1317
+ this.service.paste();
1318
+ }
1319
+ break;
1320
+ }
1321
+ }
1117
1322
  }
1118
1323
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1119
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", providers: [AXPDesignerService], ngImport: i0, template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full 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\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\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-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" 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 text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\"></div>\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\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-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 [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", 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 .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1);position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1)}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.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: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.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: "component", type: i5.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "selectionChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i6.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], encapsulation: i0.ViewEncapsulation.None }); }
1324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, 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 child:ax-h-full 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-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" 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 text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\" (onClick)=\"service.openPreview()\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\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 Datasources\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\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-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 [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", 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 .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}.axp-designer-board .axp-empty-space{background-color:rgba(var(--ax-color-primary-400),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-400),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-400),50%) 0,rgba(var(--ax-color-primary-400),50%) 60%,transparent 0,transparent);background-size:6px 6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.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: AXPDesignerPagesComponent, selector: "axp-designer-pages" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.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$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed", "closeOthers"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.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: "component", type: i5.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "selectionChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], encapsulation: i0.ViewEncapsulation.None }); }
1120
1325
  }
1121
1326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, decorators: [{
1122
1327
  type: Component,
@@ -1129,6 +1334,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1129
1334
  AXPDesignerOutlineComponent,
1130
1335
  AXPDesignerHeaderMenuComponent,
1131
1336
  AXPDesignerHistoryComponent,
1337
+ AXPDesignerPagesComponent,
1132
1338
  AXTabsModule,
1133
1339
  AXButtonModule,
1134
1340
  AXDrawerModule,
@@ -1136,12 +1342,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1136
1342
  AXMenuModule,
1137
1343
  AXButtonGroupModule,
1138
1344
  AXDropdownModule,
1139
- ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full 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\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\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-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" 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 text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\"></div>\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\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-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 [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", 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 .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1);position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1)}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}\n"] }]
1140
- }] });
1345
+ ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full 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-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" 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 text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\" (onClick)=\"service.openPreview()\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\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 Datasources\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\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-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 [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", 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 .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}.axp-designer-board .axp-empty-space{background-color:rgba(var(--ax-color-primary-400),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-400),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-400),50%) 0,rgba(var(--ax-color-primary-400),50%) 60%,transparent 0,transparent);background-size:6px 6px}\n"] }]
1346
+ }], ctorParameters: () => [], propDecorators: { propertyViewer: [{
1347
+ type: ViewChild,
1348
+ args: [AXPWidgetPropertyViewerComponent, { static: true }]
1349
+ }], handleKeyboardEvent: [{
1350
+ type: HostListener,
1351
+ args: ['document:keydown', ['$event']]
1352
+ }] } });
1141
1353
 
1142
1354
  /**
1143
1355
  * Generated bundle index. Do not edit.
1144
1356
  */
1145
1357
 
1146
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerModule, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
1358
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerGridDrawerComponent, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
1147
1359
  //# sourceMappingURL=acorex-platform-layout-designer.mjs.map