@acorex/platform 18.0.12 → 18.0.14

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 (548) 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 +34 -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 +6 -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 +55 -5
  18. package/esm2022/layout/designer/lib/designer.service.mjs +139 -96
  19. package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +1 -1
  20. package/esm2022/layout/designer/lib/{buttons → helpers}/add-widget-button/add-widget-button.component.mjs +7 -7
  21. package/esm2022/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.mjs +82 -0
  22. package/esm2022/layout/designer/lib/history/history.component.mjs +11 -4
  23. package/esm2022/layout/designer/lib/outline/outline.component.mjs +16 -15
  24. package/esm2022/layout/designer/lib/pages/pages.component.mjs +28 -0
  25. package/esm2022/layout/designer/lib/preview/preview.component.mjs +20 -0
  26. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +5 -2
  27. package/esm2022/layout/designer/lib/widget-designer-renderer.component.mjs +16 -8
  28. package/esm2022/layout/designer/lib/widget-picker/widget-picker.component.mjs +80 -6
  29. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +6 -4
  30. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +17 -7
  31. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +1 -1
  32. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +10 -5
  33. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +1 -2
  34. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +2 -2
  35. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +1 -1
  36. package/esm2022/widgets/lib/properties/editors.props.mjs +81 -45
  37. package/esm2022/widgets/lib/properties/layout.props.mjs +165 -0
  38. package/esm2022/widgets/lib/properties/table-column.props.mjs +3 -2
  39. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +52 -0
  40. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +27 -0
  41. package/esm2022/widgets/lib/widgets/actions/button/index.mjs +3 -0
  42. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.mjs +1 -1
  43. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-edit.component.mjs +122 -0
  44. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.mjs +1 -1
  45. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.mjs +1 -1
  46. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-view.component.mjs +215 -0
  47. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +51 -0
  48. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.service.mjs +3 -0
  49. package/esm2022/widgets/lib/widgets/advance/file/index.mjs +8 -0
  50. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.mjs +1 -1
  51. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.mjs +1 -1
  52. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.mjs +1 -1
  53. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-print.component.mjs +19 -0
  54. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-types.mjs +2 -0
  55. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-view.component.mjs +160 -0
  56. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget.config.mjs +29 -0
  57. package/esm2022/widgets/lib/widgets/advance/gallery/index.mjs +7 -0
  58. package/esm2022/widgets/lib/widgets/advance/map/index.mjs +7 -0
  59. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-print.component.mjs → advance/map/map-box-widget-column.component.mjs} +5 -5
  60. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +171 -0
  61. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.mjs +1 -1
  62. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.mjs +1 -1
  63. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.mjs +3 -3
  64. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +31 -0
  65. package/esm2022/widgets/lib/widgets/advance/qrcode/index.mjs +3 -0
  66. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +51 -0
  67. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +62 -0
  68. package/esm2022/widgets/lib/widgets/advance/signature/index.mjs +7 -0
  69. 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
  70. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.mjs +142 -0
  71. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.mjs +1 -1
  72. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.mjs +1 -1
  73. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.mjs +1 -1
  74. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +31 -0
  75. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +9 -12
  76. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.component.mjs +1 -1
  77. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-edit.component.mjs +1 -1
  78. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-filter.component.mjs +1 -1
  79. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-print.component.mjs +1 -1
  80. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-view.component.mjs +1 -1
  81. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +31 -0
  82. package/esm2022/widgets/lib/widgets/editors/color/index.mjs +7 -0
  83. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-column.component.mjs +36 -0
  84. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +297 -0
  85. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-filter.component.mjs +1 -1
  86. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-print.component.mjs +1 -1
  87. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +122 -0
  88. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +81 -0
  89. package/esm2022/widgets/lib/widgets/editors/contact/contact.type.mjs +2 -0
  90. package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +7 -0
  91. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/popup-component.mjs +1 -1
  92. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +44 -0
  93. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +133 -0
  94. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-filter.component.mjs +1 -1
  95. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-print.component.mjs +1 -1
  96. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +54 -0
  97. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +40 -0
  98. package/esm2022/widgets/lib/widgets/editors/date-time/index.mjs +7 -0
  99. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-column.component.mjs +66 -0
  100. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-edit.component.mjs +249 -0
  101. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-filter.component.mjs +1 -1
  102. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-print.component.mjs +1 -1
  103. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-view.component.mjs +1 -1
  104. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +39 -0
  105. package/esm2022/widgets/lib/widgets/editors/email/index.mjs +7 -0
  106. package/esm2022/widgets/lib/widgets/editors/large-text/index.mjs +7 -0
  107. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-column.component.mjs +1 -1
  108. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-edit.component.mjs +1 -1
  109. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-filter.component.mjs +1 -1
  110. 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
  111. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-view.component.mjs +1 -1
  112. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +39 -0
  113. package/esm2022/widgets/lib/widgets/editors/link/index.mjs +7 -0
  114. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-column.component.mjs +1 -1
  115. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +391 -0
  116. package/esm2022/widgets/lib/widgets/editors/link/link-widget-filter.component.mjs +20 -0
  117. package/esm2022/widgets/lib/widgets/editors/link/link-widget-print.component.mjs +19 -0
  118. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-view.component.mjs +1 -1
  119. package/esm2022/widgets/lib/widgets/editors/link/link-widget.config.mjs +29 -0
  120. package/esm2022/widgets/lib/widgets/editors/number/index.mjs +7 -0
  121. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-column.component.mjs +38 -0
  122. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +157 -0
  123. package/esm2022/widgets/lib/widgets/{layout/repeater-widget/repeater-widget-edit.component.mjs → editors/number/number-box-widget-filter.component.mjs} +5 -5
  124. package/esm2022/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-print.component.mjs +1 -1
  125. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +56 -0
  126. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +39 -0
  127. package/esm2022/widgets/lib/widgets/editors/password/index.mjs +7 -0
  128. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget/phone-box-widget-print.component.mjs → password/password-box-widget-column.component.mjs} +5 -5
  129. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-edit.component.mjs +1 -1
  130. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-filter.component.mjs +1 -1
  131. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-print.component.mjs +1 -1
  132. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +76 -0
  133. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +38 -0
  134. package/esm2022/widgets/lib/widgets/editors/phone/index.mjs +7 -0
  135. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.mjs +66 -0
  136. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-edit.component.mjs +1 -1
  137. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-filter.component.mjs +1 -1
  138. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-print.component.mjs +19 -0
  139. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-view.component.mjs +1 -1
  140. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget.config.mjs +32 -0
  141. package/esm2022/widgets/lib/widgets/editors/rich-text/index.mjs +7 -0
  142. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-popup.component.mjs +1 -1
  143. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.mjs +46 -0
  144. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +67 -0
  145. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-filter.component.mjs +1 -1
  146. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-print.component.mjs +1 -1
  147. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-view.component.mjs +45 -0
  148. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +39 -0
  149. package/esm2022/widgets/lib/widgets/editors/select/index.mjs +7 -0
  150. package/esm2022/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-column.component.mjs +1 -1
  151. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +85 -0
  152. package/esm2022/widgets/lib/widgets/editors/{gallery-widget/gallery-widget-print.component.mjs → select/select-box-widget-filter.component.mjs} +5 -5
  153. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-print.component.mjs +19 -0
  154. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +60 -0
  155. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +38 -0
  156. package/esm2022/widgets/lib/widgets/editors/selection-list/index.mjs +7 -0
  157. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +41 -0
  158. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +72 -0
  159. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.mjs +1 -1
  160. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.mjs +1 -1
  161. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +44 -0
  162. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +29 -0
  163. package/esm2022/widgets/lib/widgets/editors/text/index.mjs +7 -0
  164. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.mjs +1 -1
  165. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-edit.component.mjs +121 -0
  166. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.mjs +1 -1
  167. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.mjs +1 -1
  168. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-view.component.mjs +47 -0
  169. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +41 -0
  170. package/esm2022/widgets/lib/widgets/editors/toggle/index.mjs +7 -0
  171. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.mjs +1 -1
  172. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.mjs +1 -1
  173. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.mjs +1 -1
  174. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.mjs +1 -1
  175. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.mjs +1 -1
  176. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +40 -0
  177. package/esm2022/widgets/lib/widgets/index.mjs +23 -22
  178. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +65 -0
  179. package/esm2022/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.mjs +1 -1
  180. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +26 -0
  181. package/esm2022/widgets/lib/widgets/layout/block/index.mjs +4 -0
  182. package/esm2022/widgets/lib/widgets/layout/document/document-widget.config.mjs +13 -0
  183. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +56 -0
  184. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +41 -0
  185. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +25 -0
  186. package/esm2022/widgets/lib/widgets/layout/form-field/index.mjs +4 -0
  187. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +95 -0
  188. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-print.component.mjs +19 -0
  189. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +18 -0
  190. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +26 -0
  191. package/esm2022/widgets/lib/widgets/layout/grid/index.mjs +5 -0
  192. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.mjs +97 -0
  193. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-print.component.mjs +19 -0
  194. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.mjs +18 -0
  195. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.mjs +34 -0
  196. package/esm2022/widgets/lib/widgets/layout/grid-item/index.mjs +5 -0
  197. package/esm2022/widgets/lib/widgets/layout/page/index.mjs +3 -0
  198. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +65 -0
  199. package/esm2022/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.mjs +1 -1
  200. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +27 -0
  201. package/esm2022/widgets/lib/widgets/layout/repeater/index.mjs +6 -0
  202. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.mjs +1 -1
  203. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-filter.component.mjs → layout/repeater/repeater-widget-edit.component.mjs} +5 -5
  204. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.mjs +1 -1
  205. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-view.component.mjs +52 -0
  206. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget.config.mjs +24 -0
  207. package/esm2022/widgets/lib/widgets/layout/text-block/index.mjs +3 -0
  208. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.mjs +29 -0
  209. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +42 -0
  210. package/esm2022/widgets/lib/widgets.module.mjs +20 -3
  211. package/fesm2022/{acorex-platform-common-text-widget-column.component-D-mLfzKJ.mjs → acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs} +3 -3
  212. package/fesm2022/acorex-platform-common-text-widget-column.component-ytX4OqZX.mjs.map +1 -0
  213. package/fesm2022/acorex-platform-common.mjs +21 -17
  214. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  215. package/fesm2022/acorex-platform-layout-builder.mjs +164 -129
  216. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  217. package/fesm2022/acorex-platform-layout-designer-preview.component-xkvSLydm.mjs +23 -0
  218. package/fesm2022/acorex-platform-layout-designer-preview.component-xkvSLydm.mjs.map +1 -0
  219. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs +100 -0
  220. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs.map +1 -0
  221. package/fesm2022/acorex-platform-layout-designer.mjs +501 -278
  222. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  223. package/fesm2022/acorex-platform-layout-entity.mjs +5 -4
  224. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  225. package/fesm2022/{acorex-platform-layouts-entity-create-view.component-B2XtNJo1.mjs → acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs} +17 -7
  226. package/fesm2022/acorex-platform-layouts-entity-create-view.component-C2pYReAo.mjs.map +1 -0
  227. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs → acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs} +10 -5
  228. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs.map +1 -0
  229. package/fesm2022/acorex-platform-layouts.mjs +4 -4
  230. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  231. 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
  232. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-DKNRxpQk.mjs.map +1 -0
  233. package/fesm2022/acorex-platform-themes-default.mjs +4 -4
  234. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  235. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +1 -1
  236. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map +1 -1
  237. package/fesm2022/acorex-platform-widgets.mjs +4186 -3318
  238. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  239. package/layout/builder/lib/builder/builder.service.d.ts +1 -1
  240. package/layout/builder/lib/builder/index.d.ts +6 -5
  241. package/layout/builder/lib/builder/widget-catalog.d.ts +3 -0
  242. package/layout/builder/lib/builder/widget-groups.d.ts +6 -0
  243. package/layout/builder/lib/builder/widget-registery.service.d.ts +1 -1
  244. package/layout/builder/lib/builder/widget.types.d.ts +49 -9
  245. package/layout/designer/index.d.ts +2 -2
  246. package/layout/designer/lib/board/board.component.d.ts +0 -1
  247. package/layout/designer/lib/command.d.ts +70 -0
  248. package/layout/designer/lib/designer/designer.component.d.ts +3 -0
  249. package/layout/designer/lib/designer.service.d.ts +21 -10
  250. package/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.d.ts +19 -0
  251. package/layout/designer/lib/outline/outline.component.d.ts +1 -0
  252. package/layout/designer/lib/pages/pages.component.d.ts +7 -0
  253. package/layout/designer/lib/preview/preview.component.d.ts +8 -0
  254. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +1 -0
  255. package/layout/designer/lib/widget-designer-renderer.component.d.ts +1 -0
  256. package/layout/designer/lib/widget-picker/widget-picker.component.d.ts +22 -4
  257. package/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.d.ts +5 -0
  258. package/package.json +14 -13
  259. package/widgets/lib/properties/editors.props.d.ts +4 -1
  260. package/widgets/lib/properties/layout.props.d.ts +9 -0
  261. package/widgets/lib/widgets/actions/button/button-widget.config.d.ts +7 -0
  262. package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.config.d.ts +5 -0
  263. package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget.config.d.ts +5 -0
  264. package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +37 -0
  265. package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget.config.d.ts +5 -0
  266. package/widgets/lib/widgets/advance/qrcode/index.d.ts +2 -0
  267. package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +12 -0
  268. package/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.d.ts +7 -0
  269. package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget.config.d.ts +5 -0
  270. package/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.d.ts +5 -0
  271. package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget.config.d.ts +5 -0
  272. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-edit.component.d.ts +1 -1
  273. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-view.component.d.ts +1 -1
  274. package/widgets/lib/widgets/editors/contact/contact-widget.config.d.ts +7 -0
  275. package/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.d.ts +7 -0
  276. package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget.config.d.ts +5 -0
  277. package/widgets/lib/widgets/editors/large-text/large-text-widget.config.d.ts +7 -0
  278. package/widgets/lib/widgets/editors/link/link-widget.config.d.ts +7 -0
  279. package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-edit.component.d.ts +2 -0
  280. package/widgets/lib/widgets/editors/number/number-box-widget.config.d.ts +7 -0
  281. package/widgets/lib/widgets/editors/password/password-box-widget.config.d.ts +7 -0
  282. package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget.config.d.ts +5 -0
  283. package/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.d.ts +7 -0
  284. package/widgets/lib/widgets/editors/select/select-box-widget.config.d.ts +7 -0
  285. package/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.d.ts +7 -0
  286. package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget.config.d.ts +5 -0
  287. package/widgets/lib/widgets/editors/toggle/toggle-widget.config.d.ts +7 -0
  288. package/widgets/lib/widgets/index.d.ts +21 -21
  289. package/widgets/lib/widgets/layout/block/block-widget.config.d.ts +7 -0
  290. package/widgets/lib/widgets/layout/document/document-widget.config.d.ts +7 -0
  291. package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +7 -0
  292. package/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.d.ts +7 -0
  293. package/widgets/lib/widgets/layout/form-field/form-field-widget.config.d.ts +7 -0
  294. package/widgets/lib/widgets/layout/form-field/index.d.ts +3 -0
  295. package/widgets/lib/widgets/layout/grid/grid-widget-designer.component.d.ts +16 -0
  296. package/widgets/lib/widgets/layout/grid/grid-widget-print.component.d.ts +6 -0
  297. package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +6 -0
  298. package/widgets/lib/widgets/layout/grid/grid-widget.config.d.ts +7 -0
  299. package/widgets/lib/widgets/layout/grid/index.d.ts +4 -0
  300. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.d.ts +15 -0
  301. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-print.component.d.ts +6 -0
  302. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.d.ts +6 -0
  303. package/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.d.ts +7 -0
  304. package/widgets/lib/widgets/layout/grid-item/index.d.ts +4 -0
  305. package/widgets/lib/widgets/layout/page/page-widget.config.d.ts +7 -0
  306. package/widgets/lib/widgets/layout/repeater/repeater-widget.config.d.ts +7 -0
  307. package/widgets/lib/widgets/layout/text-block/text-block-widget.config.d.ts +7 -0
  308. package/esm2022/layout/builder/lib/builder/layout.types.mjs +0 -30
  309. package/esm2022/layout/designer/lib/designer.module.mjs +0 -16
  310. package/esm2022/layout/designer/lib/history-manager.service.mjs +0 -117
  311. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget-view.component.mjs +0 -52
  312. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget.config.mjs +0 -25
  313. package/esm2022/widgets/lib/widgets/actions/button-widget/index.mjs +0 -3
  314. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget.config.mjs +0 -34
  315. package/esm2022/widgets/lib/widgets/editors/color-box-widget/index.mjs +0 -7
  316. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-column.component.mjs +0 -36
  317. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.mjs +0 -297
  318. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-view.component.mjs +0 -122
  319. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget.config.mjs +0 -78
  320. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact.type.mjs +0 -2
  321. package/esm2022/widgets/lib/widgets/editors/contact-widget/index.mjs +0 -7
  322. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-column.component.mjs +0 -44
  323. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-edit.component.mjs +0 -133
  324. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-view.component.mjs +0 -54
  325. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.mjs +0 -38
  326. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/index.mjs +0 -7
  327. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-column.component.mjs +0 -66
  328. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-edit.component.mjs +0 -249
  329. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget.config.mjs +0 -36
  330. package/esm2022/widgets/lib/widgets/editors/email-box-widget/index.mjs +0 -7
  331. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-edit.component.mjs +0 -122
  332. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-view.component.mjs +0 -215
  333. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.config.mjs +0 -48
  334. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.service.mjs +0 -3
  335. package/esm2022/widgets/lib/widgets/editors/file-box-widget/index.mjs +0 -8
  336. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-types.mjs +0 -2
  337. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-view.component.mjs +0 -160
  338. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget.config.mjs +0 -26
  339. package/esm2022/widgets/lib/widgets/editors/gallery-widget/index.mjs +0 -7
  340. package/esm2022/widgets/lib/widgets/editors/large-text-widget/index.mjs +0 -7
  341. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-print.component.mjs +0 -19
  342. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.mjs +0 -37
  343. package/esm2022/widgets/lib/widgets/editors/link-widget/index.mjs +0 -7
  344. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-edit.component.mjs +0 -391
  345. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget.config.mjs +0 -26
  346. package/esm2022/widgets/lib/widgets/editors/map-box-widget/index.mjs +0 -7
  347. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.mjs +0 -96
  348. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget.config.mjs +0 -28
  349. package/esm2022/widgets/lib/widgets/editors/number-box-widget/index.mjs +0 -7
  350. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-column.component.mjs +0 -38
  351. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-edit.component.mjs +0 -151
  352. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-filter.component.mjs +0 -20
  353. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-view.component.mjs +0 -56
  354. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.mjs +0 -37
  355. package/esm2022/widgets/lib/widgets/editors/password-box-widget/index.mjs +0 -7
  356. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-column.component.mjs +0 -19
  357. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-view.component.mjs +0 -76
  358. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.mjs +0 -35
  359. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/index.mjs +0 -7
  360. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-column.component.mjs +0 -66
  361. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget.config.mjs +0 -29
  362. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/index.mjs +0 -7
  363. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-column.component.mjs +0 -46
  364. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-edit.component.mjs +0 -67
  365. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-view.component.mjs +0 -45
  366. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.mjs +0 -37
  367. package/esm2022/widgets/lib/widgets/editors/select-box-widget/index.mjs +0 -7
  368. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.mjs +0 -85
  369. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-filter.component.mjs +0 -19
  370. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-view.component.mjs +0 -60
  371. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.mjs +0 -35
  372. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/index.mjs +0 -7
  373. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-column.component.mjs +0 -41
  374. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-edit.component.mjs +0 -72
  375. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-view.component.mjs +0 -44
  376. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.mjs +0 -26
  377. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/index.mjs +0 -7
  378. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-column.component.mjs +0 -19
  379. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-edit.component.mjs +0 -142
  380. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget.config.mjs +0 -34
  381. package/esm2022/widgets/lib/widgets/editors/text-box-widget/index.mjs +0 -7
  382. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.mjs +0 -119
  383. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-view.component.mjs +0 -47
  384. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget.config.mjs +0 -39
  385. package/esm2022/widgets/lib/widgets/editors/toggle-widget/index.mjs +0 -7
  386. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.mjs +0 -37
  387. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget-designer.component.mjs +0 -65
  388. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget.config.mjs +0 -27
  389. package/esm2022/widgets/lib/widgets/layout/block-widget/index.mjs +0 -4
  390. package/esm2022/widgets/lib/widgets/layout/page-widget/index.mjs +0 -3
  391. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.mjs +0 -65
  392. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget.config.mjs +0 -28
  393. package/esm2022/widgets/lib/widgets/layout/repeater-widget/index.mjs +0 -6
  394. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-view.component.mjs +0 -52
  395. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.mjs +0 -21
  396. package/esm2022/widgets/lib/widgets/layout/text-block-widget/index.mjs +0 -3
  397. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget-view.component.mjs +0 -29
  398. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.mjs +0 -39
  399. package/fesm2022/acorex-platform-common-text-widget-column.component-D-mLfzKJ.mjs.map +0 -1
  400. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs +0 -26
  401. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs.map +0 -1
  402. package/fesm2022/acorex-platform-layouts-entity-create-view.component-B2XtNJo1.mjs.map +0 -1
  403. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs.map +0 -1
  404. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs.map +0 -1
  405. package/layout/builder/lib/builder/layout.types.d.ts +0 -1
  406. package/layout/designer/lib/designer.module.d.ts +0 -6
  407. package/layout/designer/lib/history-manager.service.d.ts +0 -31
  408. package/widgets/lib/widgets/actions/button-widget/button-widget.config.d.ts +0 -2
  409. package/widgets/lib/widgets/editors/contact-widget/contact-widget.config.d.ts +0 -2
  410. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.d.ts +0 -2
  411. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.d.ts +0 -2
  412. package/widgets/lib/widgets/editors/link-widget/link-widget.config.d.ts +0 -2
  413. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.d.ts +0 -15
  414. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.d.ts +0 -2
  415. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.d.ts +0 -2
  416. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.d.ts +0 -2
  417. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.d.ts +0 -2
  418. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.d.ts +0 -2
  419. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.d.ts +0 -2
  420. package/widgets/lib/widgets/layout/block-widget/block-widget.config.d.ts +0 -2
  421. package/widgets/lib/widgets/layout/page-widget/page-widget.config.d.ts +0 -2
  422. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.d.ts +0 -2
  423. package/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.d.ts +0 -2
  424. /package/layout/designer/lib/{buttons → helpers}/add-widget-button/add-widget-button.component.d.ts +0 -0
  425. /package/widgets/lib/widgets/actions/{button-widget → button}/button-widget-view.component.d.ts +0 -0
  426. /package/widgets/lib/widgets/actions/{button-widget → button}/index.d.ts +0 -0
  427. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.d.ts +0 -0
  428. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-edit.component.d.ts +0 -0
  429. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.d.ts +0 -0
  430. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.d.ts +0 -0
  431. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-view.component.d.ts +0 -0
  432. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.service.d.ts +0 -0
  433. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/index.d.ts +0 -0
  434. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.d.ts +0 -0
  435. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.d.ts +0 -0
  436. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.d.ts +0 -0
  437. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-print.component.d.ts +0 -0
  438. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-types.d.ts +0 -0
  439. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-view.component.d.ts +0 -0
  440. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/index.d.ts +0 -0
  441. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/index.d.ts +0 -0
  442. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-column.component.d.ts +0 -0
  443. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.d.ts +0 -0
  444. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.d.ts +0 -0
  445. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.d.ts +0 -0
  446. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/index.d.ts +0 -0
  447. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-column.component.d.ts +0 -0
  448. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-edit.component.d.ts +0 -0
  449. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.d.ts +0 -0
  450. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.d.ts +0 -0
  451. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.d.ts +0 -0
  452. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.component.d.ts +0 -0
  453. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-edit.component.d.ts +0 -0
  454. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-filter.component.d.ts +0 -0
  455. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-print.component.d.ts +0 -0
  456. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-view.component.d.ts +0 -0
  457. /package/widgets/lib/widgets/editors/{color-box-widget → color}/index.d.ts +0 -0
  458. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-column.component.d.ts +0 -0
  459. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-filter.component.d.ts +0 -0
  460. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-print.component.d.ts +0 -0
  461. /package/widgets/lib/widgets/editors/{contact-widget → contact}/contact.type.d.ts +0 -0
  462. /package/widgets/lib/widgets/editors/{contact-widget → contact}/index.d.ts +0 -0
  463. /package/widgets/lib/widgets/editors/{contact-widget → contact}/popup-component.d.ts +0 -0
  464. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-column.component.d.ts +0 -0
  465. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-edit.component.d.ts +0 -0
  466. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-filter.component.d.ts +0 -0
  467. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-print.component.d.ts +0 -0
  468. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-view.component.d.ts +0 -0
  469. /package/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/index.d.ts +0 -0
  470. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-column.component.d.ts +0 -0
  471. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-edit.component.d.ts +0 -0
  472. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-filter.component.d.ts +0 -0
  473. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-print.component.d.ts +0 -0
  474. /package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-view.component.d.ts +0 -0
  475. /package/widgets/lib/widgets/editors/{email-box-widget → email}/index.d.ts +0 -0
  476. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/index.d.ts +0 -0
  477. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-column.component.d.ts +0 -0
  478. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-edit.component.d.ts +0 -0
  479. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-filter.component.d.ts +0 -0
  480. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-print.component.d.ts +0 -0
  481. /package/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-view.component.d.ts +0 -0
  482. /package/widgets/lib/widgets/editors/{link-widget → link}/index.d.ts +0 -0
  483. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-column.component.d.ts +0 -0
  484. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-edit.component.d.ts +0 -0
  485. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-filter.component.d.ts +0 -0
  486. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-print.component.d.ts +0 -0
  487. /package/widgets/lib/widgets/editors/{link-widget → link}/link-widget-view.component.d.ts +0 -0
  488. /package/widgets/lib/widgets/editors/{number-box-widget → number}/index.d.ts +0 -0
  489. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-column.component.d.ts +0 -0
  490. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-filter.component.d.ts +0 -0
  491. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-print.component.d.ts +0 -0
  492. /package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-view.component.d.ts +0 -0
  493. /package/widgets/lib/widgets/editors/{password-box-widget → password}/index.d.ts +0 -0
  494. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-column.component.d.ts +0 -0
  495. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-edit.component.d.ts +0 -0
  496. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-filter.component.d.ts +0 -0
  497. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-print.component.d.ts +0 -0
  498. /package/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-view.component.d.ts +0 -0
  499. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/index.d.ts +0 -0
  500. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-column.component.d.ts +0 -0
  501. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-edit.component.d.ts +0 -0
  502. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-filter.component.d.ts +0 -0
  503. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-print.component.d.ts +0 -0
  504. /package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-view.component.d.ts +0 -0
  505. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/index.d.ts +0 -0
  506. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-popup.component.d.ts +0 -0
  507. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-column.component.d.ts +0 -0
  508. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-edit.component.d.ts +0 -0
  509. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-filter.component.d.ts +0 -0
  510. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-print.component.d.ts +0 -0
  511. /package/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-view.component.d.ts +0 -0
  512. /package/widgets/lib/widgets/editors/{select-box-widget → select}/index.d.ts +0 -0
  513. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-column.component.d.ts +0 -0
  514. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-edit.component.d.ts +0 -0
  515. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-filter.component.d.ts +0 -0
  516. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-print.component.d.ts +0 -0
  517. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-view.component.d.ts +0 -0
  518. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/index.d.ts +0 -0
  519. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-column.component.d.ts +0 -0
  520. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-edit.component.d.ts +0 -0
  521. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.d.ts +0 -0
  522. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.d.ts +0 -0
  523. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-view.component.d.ts +0 -0
  524. /package/widgets/lib/widgets/editors/{text-box-widget → text}/index.d.ts +0 -0
  525. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.d.ts +0 -0
  526. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-edit.component.d.ts +0 -0
  527. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.d.ts +0 -0
  528. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.d.ts +0 -0
  529. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-view.component.d.ts +0 -0
  530. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/index.d.ts +0 -0
  531. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.d.ts +0 -0
  532. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.d.ts +0 -0
  533. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.d.ts +0 -0
  534. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.d.ts +0 -0
  535. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.d.ts +0 -0
  536. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-designer.component.d.ts +0 -0
  537. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.d.ts +0 -0
  538. /package/widgets/lib/widgets/layout/{block-widget → block}/index.d.ts +0 -0
  539. /package/widgets/lib/widgets/layout/{page-widget → page}/index.d.ts +0 -0
  540. /package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-designer.component.d.ts +0 -0
  541. /package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.d.ts +0 -0
  542. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/index.d.ts +0 -0
  543. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.d.ts +0 -0
  544. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-edit.component.d.ts +0 -0
  545. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.d.ts +0 -0
  546. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-view.component.d.ts +0 -0
  547. /package/widgets/lib/widgets/layout/{text-block-widget → text-block}/index.d.ts +0 -0
  548. /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, AXPContainerWidgetComponent, AXPLayoutBuilderModule } 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, HostBinding, HostListener, ViewEncapsulation, model, output, 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,70 @@ 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-DXgcm-fP.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
  });
296
+ const widgets = [];
232
297
  if ((result.data?.widgets ?? []).length) {
233
298
  const selected = result.data?.widgets;
234
- selected.forEach(c => {
235
- this.addWidget(currentNode, { type: c.name });
299
+ selected.forEach((c) => {
300
+ widgets.push(this.addWidget(currentNode, { type: c.name }));
236
301
  });
237
302
  }
303
+ return widgets;
304
+ }
305
+ createDoc() {
306
+ const doc = {
307
+ type: AXPWidgetsCatalog.document,
308
+ children: [this.createPage()],
309
+ name: 'document',
310
+ };
311
+ set(doc, '__meta__.id', Math.random() * Math.pow(10, 18));
312
+ return doc;
238
313
  }
239
314
  createPage() {
240
- const config = this.widgetRegisteryService.resolve('page');
315
+ const config = this.widgetRegisteryService.resolve('page-layout');
241
316
  const page = {
242
- type: 'page',
317
+ type: 'page-layout',
243
318
  children: [],
244
- name: "page",
319
+ name: 'page-layout1',
245
320
  };
246
321
  set(page, '__meta__.id', Math.random() * Math.pow(10, 18));
247
322
  set(page, '__meta__.config', config);
248
- this.historyManager.saveState(page, "New");
249
323
  return page;
250
324
  }
325
+ addNewPage() {
326
+ this.addWidget(this.document(), this.createPage());
327
+ this.goToPage(this.currentPageIndex() + 1);
328
+ }
329
+ removePage(index) {
330
+ const page = this.document().children?.[index];
331
+ this.removeWidget(page);
332
+ this.goToPage(index - 1);
333
+ }
334
+ clonePage(index) {
335
+ const page = this.document().children?.[index];
336
+ this.clone(page);
337
+ this.goToPage((this.document().children?.length ?? 1) - 1);
338
+ }
339
+ goToPage(index) {
340
+ this.currentPageIndex.set(index);
341
+ setTimeout(() => {
342
+ this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
343
+ this.select({ widget: this.currentPage() });
344
+ });
345
+ }
346
+ reRenderPage() {
347
+ this.currentPage.set({ ...this.currentPage() });
348
+ }
251
349
  findWidgetById(root, id) {
252
- if (get(root, "__meta__.id") === id) {
350
+ if (get(root, '__meta__.id') === id) {
253
351
  return root; // Return the root if it matches the ID
254
352
  }
255
353
  if (!root.children)
@@ -262,10 +360,10 @@ class AXPDesignerService {
262
360
  }
263
361
  return null; // Node not found
264
362
  }
265
- findParent(id, parent = this.root()) {
363
+ findParent(id, parent = this.currentPage()) {
266
364
  if (!parent.children)
267
365
  return null;
268
- if (parent.children.some(child => get(child, "__meta__.id") === id)) {
366
+ if (parent.children.some((child) => get(child, '__meta__.id') === id)) {
269
367
  return parent; // Return this node as it's the parent of the node with the given ID
270
368
  }
271
369
  for (const child of parent.children) {
@@ -283,7 +381,7 @@ class AXPDesignerService {
283
381
  if (config && config.container) {
284
382
  return current;
285
383
  }
286
- current = this.findParent(get(current, "__meta__.id")); // Use findParent to navigate upwards
384
+ current = this.findParent(get(current, '__meta__.id')); // Use findParent to navigate upwards
287
385
  }
288
386
  }
289
387
  else {
@@ -307,76 +405,68 @@ class AXPDesignerService {
307
405
  return null;
308
406
  //
309
407
  const cloned = cloneDeep(node);
310
- this.historyManager.saveState(cloneDeep(this.root()), `Added ${cloned.type}`);
311
- //
312
- if (!currentNode.children) {
313
- currentNode.children = [];
314
- }
315
408
  const config = this.widgetRegisteryService.resolve(node.type);
316
409
  //
410
+ this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));
411
+ //
317
412
  cloned.name = this.generateUniqueName(node.type);
318
413
  set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));
319
414
  set(cloned, '__meta__.config', config);
320
415
  //
321
- currentNode.children.push(cloned);
322
- //
323
- this.historyManager.updateState(this.root());
416
+ this.reRenderPage();
324
417
  //
325
418
  this.refresh({ widget: currentNode });
326
419
  this.select({ widget: cloned });
327
420
  return cloned;
328
421
  }
329
422
  removeWidget(node) {
330
- if (node.type === "page") {
331
- console.error("Cannot remove the page node.");
332
- return; // Prevent removing the root page node
423
+ if (node.type === 'document-layout' || (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
424
+ console.error('Cannot remove the page node.');
425
+ return; // Prevent removing the root page node or document
333
426
  }
334
- this.historyManager.saveState(cloneDeep(this.root()), `Removed ${node.name}`);
335
- const nodeIdToRemove = get(node, "__meta__.id");
427
+ const nodeIdToRemove = get(node, '__meta__.id');
336
428
  if (!nodeIdToRemove) {
337
- throw new Error("Node does not have a valid __meta__.id to identify it for removal.");
429
+ throw new Error('Node does not have a valid __meta__.id to identify it for removal.');
338
430
  }
339
431
  // Find the parent of the node to remove it
340
- const parent = this.findParent(nodeIdToRemove, this.root());
432
+ const parent = this.findParent(nodeIdToRemove, this.document());
341
433
  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.");
434
+ throw new Error('Parent node not found. The node might be the root node or does not exist.');
355
435
  }
356
- }
357
- revertToChange(index) {
358
- this.historyManager.revert(index);
359
- this.root.set(this.historyManager.currentState()?.state);
360
- this.refresh({ widget: this.root() });
436
+ const previousSelection = this.selectedNode(); // Capture the currently selected node before removal
437
+ const command = new RemoveWidgetCommand(node, parent, previousSelection);
438
+ this.commandManager.executeCommand(command);
439
+ this.refresh({ widget: parent }); // Refresh the UI to reflect changes
440
+ this.select({ widget: parent }); // Select the parent node after removal
441
+ }
442
+ navigateTo(index) {
443
+ this.commandManager.goToCommand(index);
444
+ this.reRenderPage();
445
+ const currentSelection = this.commandManager.selectedNode();
446
+ this.refresh({ widget: this.currentPage() });
447
+ this.select({ widget: currentSelection });
361
448
  }
362
449
  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
- }
450
+ this.commandManager.redo();
451
+ this.reRenderPage();
452
+ const currentSelection = this.commandManager.selectedNode();
453
+ this.refresh({ widget: this.currentPage() });
454
+ this.select({ widget: currentSelection });
368
455
  }
369
456
  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
- }
457
+ this.commandManager.undo();
458
+ this.reRenderPage();
459
+ const currentSelection = this.commandManager.selectedNode();
460
+ this.refresh({ widget: this.currentPage() });
461
+ this.select({ widget: currentSelection });
462
+ }
463
+ clearHistory() {
464
+ this.commandManager.clear();
375
465
  }
376
466
  formatOutputJSON(obj, nodeName) {
377
467
  // Check if the object is an array
378
468
  if (Array.isArray(obj)) {
379
- return obj.map(item => this.formatOutputJSON(item, nodeName));
469
+ return obj.map((item) => this.formatOutputJSON(item, nodeName));
380
470
  }
381
471
  else if (typeof obj === 'object' && obj !== null) {
382
472
  // Create a new object to store the result
@@ -403,47 +493,57 @@ class AXPDesignerService {
403
493
  this.copy(widget); // Copy the widget to the clipboard
404
494
  this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
405
495
  }
406
- paste(parentNode = this.selectedNode() ?? this.root()) {
496
+ clone(widget = this.selectedNode()) {
497
+ if (!widget)
498
+ return;
499
+ this.copy(widget); // Copy the widget to the clipboard
500
+ if (widget.type == 'page-layout') {
501
+ this.paste(this.document());
502
+ }
503
+ else {
504
+ this.paste(widget);
505
+ }
506
+ }
507
+ paste(parentNode = this.selectedNode() ?? this.currentPage()) {
407
508
  if (!this.clipboard() || !this.selectedNode()) {
408
- console.error("Clipboard is empty or no node is selected.");
509
+ console.error('Clipboard is empty or no node is selected.');
409
510
  return;
410
511
  }
411
512
  const newNode = cloneDeep(this.clipboard());
412
513
  const nearestContainer = this.findNearestContainer(parentNode, true);
413
514
  if (!nearestContainer) {
414
- console.error("No suitable container found.");
515
+ console.error('No suitable container found.');
415
516
  return;
416
517
  }
417
518
  //
418
- this.historyManager.saveState(newNode, `Pasted ${newNode.name}`); // Prepare for undo functionality
419
- //
420
519
  if (!nearestContainer.children) {
421
520
  nearestContainer.children = [];
422
521
  }
423
- set(newNode, "__meta__.id", Math.random() * Math.pow(10, 18)); // Ensure a unique ID
522
+ newNode.name = this.generateUniqueName(newNode.type);
523
+ set(newNode, '__meta__.id', Math.random() * Math.pow(10, 18)); // Ensure a unique ID
424
524
  //
425
- nearestContainer.children.push(newNode); // Add the new node to the container
525
+ this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));
426
526
  //
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
527
+ setTimeout(() => {
528
+ this.refresh({ widget: nearestContainer }); // Refresh the UI
529
+ this.select({ widget: newNode }); // Select the newly pasted node
530
+ });
431
531
  }
432
532
  export() {
433
- const json = this.formatOutputJSON(this.root(), "__meta__");
533
+ const json = this.formatOutputJSON(this.document(), '__meta__');
434
534
  return JSON.stringify(json);
435
535
  }
436
536
  download() {
437
537
  // Convert the object to a JSON string
438
538
  const jsonStr = this.export();
439
539
  // Create a blob object from the JSON string
440
- const blob = new Blob([jsonStr], { type: "application/json" });
540
+ const blob = new Blob([jsonStr], { type: 'application/json' });
441
541
  // Create a URL for the blob object
442
542
  const url = URL.createObjectURL(blob);
443
543
  // Create a temporary <a> element to trigger the download
444
- const a = document.createElement("a");
544
+ const a = document.createElement('a');
445
545
  a.href = url;
446
- a.download = "export.json";
546
+ a.download = 'export.json';
447
547
  // Append the <a> element to the document body (necessary for some browsers)
448
548
  document.body.appendChild(a);
449
549
  // Trigger the download by clicking the <a> element
@@ -464,7 +564,7 @@ class AXPDesignerService {
464
564
  let uniqueName = `${baseName}${index}`;
465
565
  // Gather all existing names to check against
466
566
  const existingNames = new Set();
467
- this.collectAllNames(this.root(), existingNames);
567
+ this.collectAllNames(this.document(), existingNames);
468
568
  // Increment the index until a unique name is found
469
569
  while (existingNames.has(uniqueName)) {
470
570
  index++;
@@ -487,6 +587,17 @@ class AXPDesignerService {
487
587
  }
488
588
  }
489
589
  }
590
+ async openPreview() {
591
+ const com = await import('./acorex-platform-layout-designer-preview.component-xkvSLydm.mjs').then((c) => c.AXPLayoutDesignerPreviewComponent);
592
+ await this.popupService.open(com, {
593
+ header: false,
594
+ size: 'full',
595
+ closeButton: true,
596
+ data: {
597
+ widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
598
+ },
599
+ });
600
+ }
490
601
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
491
602
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
492
603
  }
@@ -541,7 +652,7 @@ class AXPWidgetDesignerRendererComponent {
541
652
  //
542
653
  this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
543
654
  if (this.isCurrentWidget(c.widget)) {
544
- this.instance.setChildren(this.node().children ?? []);
655
+ this.instance?.setChildren(this.node().children ?? []);
545
656
  }
546
657
  });
547
658
  //
@@ -613,7 +724,6 @@ class AXPWidgetDesignerRendererComponent {
613
724
  }
614
725
  addOverlay() {
615
726
  this.zone.runOutsideAngular(() => {
616
- //console.log('add', this.node().type);
617
727
  if (this.hostElement()) {
618
728
  this.hostElement()?.classList.add('axp-state-hover');
619
729
  //
@@ -656,7 +766,7 @@ class AXPWidgetDesignerRendererComponent {
656
766
  });
657
767
  }
658
768
  applyOptions(values) {
659
- if (this.node().defaultValue != null) {
769
+ if (this.instance && this.node().defaultValue != null) {
660
770
  this.instance.setValue(this.node().defaultValue);
661
771
  }
662
772
  this.mergedOptions.update((currentOptions) => {
@@ -664,6 +774,12 @@ class AXPWidgetDesignerRendererComponent {
664
774
  });
665
775
  this.instance?.setOptions(this.mergedOptions());
666
776
  }
777
+ get __class() {
778
+ if (this.instance instanceof AXPContainerWidgetComponent) {
779
+ return this.instance.outerClass();
780
+ }
781
+ return null;
782
+ }
667
783
  async onKeydownHandler(event) {
668
784
  if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode())) {
669
785
  // handle delete
@@ -680,7 +796,7 @@ class AXPWidgetDesignerRendererComponent {
680
796
  }
681
797
  }
682
798
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
683
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetDesignerRendererComponent, isStandalone: true, selector: "axp-widget-designer-renderer", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown": "onKeydownHandler($event)" }, classAttribute: "axp-widget-host" }, providers: [
799
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetDesignerRendererComponent, isStandalone: true, selector: "axp-widget-designer-renderer", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown": "onKeydownHandler($event)" }, properties: { "class": "this.__class" }, classAttribute: "axp-widget-host" }, providers: [
684
800
  {
685
801
  provide: AXUnsubscriber,
686
802
  },
@@ -719,7 +835,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
719
835
  ],
720
836
  host: { class: 'axp-widget-host' },
721
837
  }]
722
- }], ctorParameters: () => [], propDecorators: { onKeydownHandler: [{
838
+ }], ctorParameters: () => [], propDecorators: { __class: [{
839
+ type: HostBinding,
840
+ args: ['class']
841
+ }], onKeydownHandler: [{
723
842
  type: HostListener,
724
843
  args: ['document:keydown', ['$event']]
725
844
  }] } });
@@ -796,40 +915,8 @@ class AXPDesignerBoardComponent {
796
915
  removeCustomClass() {
797
916
  this.elementRef.nativeElement.querySelectorAll('style').forEach(s => s.remove());
798
917
  }
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
918
  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 }); }
919
+ 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
920
  }
834
921
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, decorators: [{
835
922
  type: Component,
@@ -837,11 +924,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
837
924
  CommonModule,
838
925
  AXPLayoutBuilderModule,
839
926
  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
- }] } });
927
+ ], 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>" }]
928
+ }] });
845
929
 
846
930
  class AXPDesignerAddWidgetButtonComponent {
847
931
  constructor() {
@@ -854,37 +938,103 @@ class AXPDesignerAddWidgetButtonComponent {
854
938
  }
855
939
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
856
940
  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">
858
- <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
941
+ <div class="ax-container">
942
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'solid'" [color]="'primary'">
859
943
  <ax-icon icon="fa-solid fa-plus"></ax-icon>
860
944
  </ax-button>
861
945
  </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 }); }
946
+ `, 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
947
  }
864
948
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, decorators: [{
865
949
  type: Component,
866
950
  args: [{ selector: 'axp-designer-add-widget-button', template: `
867
- <div class="ax-container ax-mx-auto">
868
- <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
951
+ <div class="ax-container">
952
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'solid'" [color]="'primary'">
869
953
  <ax-icon icon="fa-solid fa-plus"></ax-icon>
870
954
  </ax-button>
871
955
  </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"] }]
956
+ `, 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
957
  }] });
874
958
 
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 }); }
959
+ class AXPDesignerGridDrawerComponent {
960
+ constructor() {
961
+ this.rowsCount = model(5, { alias: "rows" });
962
+ this.colsCount = model(12, { alias: "columns" });
963
+ this.onSelect = output();
964
+ this.rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));
965
+ this.columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));
966
+ this.rangeR = signal(0);
967
+ this.rangeC = signal(0);
968
+ }
969
+ handleMouseHover(r, c) {
970
+ this.rangeR.set(r);
971
+ this.rangeC.set(c);
972
+ }
973
+ handleClick(r, c) {
974
+ this.onSelect.emit({ rows: r, cols: c });
975
+ }
976
+ handleMouseLeave(event) {
977
+ this.rangeR.set(0);
978
+ this.rangeC.set(0);
979
+ }
980
+ get __style() {
981
+ return {
982
+ "--cols-width": `${this.colsCount() == 0 ? 0 : (100 / this.colsCount())}%`
983
+ };
984
+ }
985
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
986
+ 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: `
987
+ <table class="table-picker" >
988
+ <tbody>
989
+ @for(r of rows();track $index)
990
+ {
991
+ <tr >
992
+ @for(c of columns();track $index)
993
+ {
994
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
995
+ </td>
996
+ }
997
+ </tr>
998
+ }
999
+ <tr>
1000
+ <td [attr.colspan]="columns().length" class="ax-text-center">
1001
+ <small >{{rangeC()}}*{{rangeR()}}</small>
1002
+ </td>
1003
+ </tr>
1004
+ </tbody>
1005
+ </table>
1006
+ `, 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
1007
  }
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
- }] });
1008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, decorators: [{
1009
+ type: Component,
1010
+ args: [{ selector: 'axp-designer-grid-drawer', template: `
1011
+ <table class="table-picker" >
1012
+ <tbody>
1013
+ @for(r of rows();track $index)
1014
+ {
1015
+ <tr >
1016
+ @for(c of columns();track $index)
1017
+ {
1018
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
1019
+ </td>
1020
+ }
1021
+ </tr>
1022
+ }
1023
+ <tr>
1024
+ <td [attr.colspan]="columns().length" class="ax-text-center">
1025
+ <small >{{rangeC()}}*{{rangeR()}}</small>
1026
+ </td>
1027
+ </tr>
1028
+ </tbody>
1029
+ </table>
1030
+ `, 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"] }]
1031
+ }], propDecorators: { handleMouseLeave: [{
1032
+ type: HostListener,
1033
+ args: ['mouseleave', ['$event']]
1034
+ }], __style: [{
1035
+ type: HostBinding,
1036
+ args: ['style']
1037
+ }] } });
888
1038
 
889
1039
  class AXPDesignerBreadcrumbsComponent {
890
1040
  constructor() {
@@ -911,7 +1061,7 @@ class AXPDesignerBreadcrumbsComponent {
911
1061
  <i class="ax-icon ax-icon-chevron-right"></i>
912
1062
  </ng-template>
913
1063
  </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 }); }
1064
+ `, 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
1065
  }
916
1066
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, decorators: [{
917
1067
  type: Component,
@@ -946,7 +1096,7 @@ class AXPDesignerHeaderMenuComponent {
946
1096
  this.service = inject(AXPDesignerService);
947
1097
  }
948
1098
  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"] }] }); }
1099
+ 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", "truncateMenu"] }] }); }
950
1100
  }
951
1101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, decorators: [{
952
1102
  type: Component,
@@ -961,12 +1111,17 @@ class AXPDesignerOutlineComponent {
961
1111
  constructor() {
962
1112
  this.service = inject(AXPDesignerService);
963
1113
  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() }));
1114
+ this.root = signal(this.getTree());
1115
+ merge$1(this.service.onRefresh, this.service.onUpdate).subscribe(() => {
1116
+ this.root.update((c) => ({ ...this.getTree() }));
968
1117
  });
969
1118
  }
1119
+ getTree() {
1120
+ return {
1121
+ type: AXPWidgetsCatalog.document,
1122
+ children: [this.service.currentPage()],
1123
+ };
1124
+ }
970
1125
  toggleCollapse(node) {
971
1126
  // Toggle the current state or set to true if undefined
972
1127
  this.collapsedStates.set(node, !this.collapsedStates.get(node));
@@ -976,7 +1131,7 @@ class AXPDesignerOutlineComponent {
976
1131
  return !!this.collapsedStates.get(node);
977
1132
  }
978
1133
  getConfig(node) {
979
- return get(node, "__meta__.config");
1134
+ return get(node, '__meta__.config');
980
1135
  }
981
1136
  handleClick(e, node) {
982
1137
  e.stopPropagation();
@@ -991,15 +1146,11 @@ class AXPDesignerOutlineComponent {
991
1146
  this.service.focus({ widget: node });
992
1147
  }
993
1148
  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 }); }
1149
+ 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
1150
  }
996
1151
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
997
1152
  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>" }]
1153
+ 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
1154
  }], ctorParameters: () => [] });
1004
1155
 
1005
1156
  class AXPWidgetPropertyViewerComponent {
@@ -1030,6 +1181,9 @@ class AXPWidgetPropertyViewerComponent {
1030
1181
  }
1031
1182
  }, { allowSignalWrites: true });
1032
1183
  }
1184
+ update(values) {
1185
+ this.context.set(merge(cloneDeep(this.context()), values));
1186
+ }
1033
1187
  fillTabs() {
1034
1188
  const tabs = [
1035
1189
  {
@@ -1076,8 +1230,8 @@ class AXPWidgetPropertyViewerComponent {
1076
1230
  handleContextChange(e) {
1077
1231
  untracked(() => {
1078
1232
  this.context.set(e.data);
1233
+ this.onChanged.emit({ values: this.context(), mode: e.init ? 'init' : 'update' });
1079
1234
  });
1080
- this.onChanged.emit({ values: this.context(), mode: 'update', });
1081
1235
  }
1082
1236
  handleTabChange(event) {
1083
1237
  const indx = event.index;
@@ -1086,7 +1240,7 @@ class AXPWidgetPropertyViewerComponent {
1086
1240
  }
1087
1241
  }
1088
1242
  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 }); }
1243
+ 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
1244
  }
1091
1245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, decorators: [{
1092
1246
  type: Component,
@@ -1100,23 +1254,85 @@ class AXPDesignerHistoryComponent {
1100
1254
  this.service = inject(AXPDesignerService);
1101
1255
  }
1102
1256
  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 }); }
1257
+ 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
1258
  }
1105
1259
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, decorators: [{
1106
1260
  type: Component,
1107
1261
  args: [{ selector: 'axp-designer-history', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1108
1262
  CommonModule,
1109
1263
  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>" }]
1264
+ AXButtonModule,
1265
+ AXDropdownModule
1266
+ ], 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>" }]
1267
+ }] });
1268
+
1269
+ class AXPDesignerPagesComponent {
1270
+ constructor() {
1271
+ this.service = inject(AXPDesignerService);
1272
+ }
1273
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1274
+ 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 }); }
1275
+ }
1276
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, decorators: [{
1277
+ type: Component,
1278
+ args: [{ selector: 'axp-designer-pages', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1279
+ CommonModule,
1280
+ AXPLayoutBuilderModule,
1281
+ AXDecoratorModule,
1282
+ AXButtonModule,
1283
+ AXDropdownModule
1284
+ ], 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
1285
  }] });
1112
1286
 
1113
1287
  class AXPLayoutDesignerComponent {
1114
1288
  constructor() {
1115
1289
  this.service = inject(AXPDesignerService);
1116
1290
  this.nodeConfig = computed(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') : null);
1291
+ this.service.onUpdate.subscribe((e) => {
1292
+ this.propertyViewer.update(e.values);
1293
+ });
1294
+ }
1295
+ handleKeyboardEvent(event) {
1296
+ if (event.ctrlKey && event.target == document.body) {
1297
+ switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
1298
+ case 'z':
1299
+ event.preventDefault(); // Prevent the browser's default undo action
1300
+ this.service.undo();
1301
+ break;
1302
+ case 'y':
1303
+ event.preventDefault(); // Prevent the browser's default redo action
1304
+ this.service.redo();
1305
+ break;
1306
+ case 'c':
1307
+ if (this.service.canCutCopy()) {
1308
+ event.preventDefault(); // Prevent the browser's default copy action
1309
+ this.service.copy();
1310
+ }
1311
+ break;
1312
+ case 'd':
1313
+ if (this.service.canCutCopy()) {
1314
+ event.preventDefault(); // Prevent the browser's default copy action
1315
+ this.service.clone();
1316
+ }
1317
+ break;
1318
+ case 'x':
1319
+ if (this.service.canCutCopy()) {
1320
+ debugger;
1321
+ event.preventDefault(); // Prevent the browser's default cut action
1322
+ this.service.cut();
1323
+ }
1324
+ break;
1325
+ case 'v':
1326
+ if (this.service.canPaste()) {
1327
+ event.preventDefault(); // Prevent the browser's default paste action
1328
+ this.service.paste();
1329
+ }
1330
+ break;
1331
+ }
1332
+ }
1117
1333
  }
1118
1334
  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 }); }
1335
+ 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}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover:not(.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected){outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#60a5fa}.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%}@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-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px}.axp-designer-board .grid-stack-item-content{color:#2c3e50;text-align:center;background-color:#18bc9c}\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
1336
  }
1121
1337
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, decorators: [{
1122
1338
  type: Component,
@@ -1129,6 +1345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1129
1345
  AXPDesignerOutlineComponent,
1130
1346
  AXPDesignerHeaderMenuComponent,
1131
1347
  AXPDesignerHistoryComponent,
1348
+ AXPDesignerPagesComponent,
1132
1349
  AXTabsModule,
1133
1350
  AXButtonModule,
1134
1351
  AXDrawerModule,
@@ -1136,12 +1353,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
1136
1353
  AXMenuModule,
1137
1354
  AXButtonGroupModule,
1138
1355
  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
- }] });
1356
+ ], 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}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:2px;outline-offset:1px;outline-color:#60a5fa;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover:not(.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover.axp-state-selected){outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#60a5fa}.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%}@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-300),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-300),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-300),50%) 0,rgba(var(--ax-color-primary-300),50%) 60%,transparent 0,transparent);background-size:7.5px 7.5px}.axp-designer-board .grid-stack-item-content{color:#2c3e50;text-align:center;background-color:#18bc9c}\n"] }]
1357
+ }], ctorParameters: () => [], propDecorators: { propertyViewer: [{
1358
+ type: ViewChild,
1359
+ args: [AXPWidgetPropertyViewerComponent, { static: true }]
1360
+ }], handleKeyboardEvent: [{
1361
+ type: HostListener,
1362
+ args: ['document:keydown', ['$event']]
1363
+ }] } });
1141
1364
 
1142
1365
  /**
1143
1366
  * Generated bundle index. Do not edit.
1144
1367
  */
1145
1368
 
1146
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerModule, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
1369
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerGridDrawerComponent, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
1147
1370
  //# sourceMappingURL=acorex-platform-layout-designer.mjs.map