@acorex/platform 18.0.11 → 18.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (545) hide show
  1. package/auth/lib/session.service.d.ts +2 -2
  2. package/common/lib/app/application.types.d.ts +3 -2
  3. package/common/lib/layout/sticky.directive.d.ts +1 -1
  4. package/common/lib/schema/widget/widget-renderer.d.ts +1 -0
  5. package/core/utils/countdown-timer.d.ts +4 -2
  6. package/esm2022/auth/lib/session.service.mjs +23 -38
  7. package/esm2022/common/lib/app/application.types.mjs +1 -1
  8. package/esm2022/common/lib/layout/sticky.directive.mjs +2 -2
  9. package/esm2022/common/lib/schema/widget/widget-renderer.mjs +20 -16
  10. package/esm2022/common/lib/schema/widgets/text/text-widget-column.component.mjs +3 -3
  11. package/esm2022/core/utils/countdown-timer.mjs +10 -3
  12. package/esm2022/layout/builder/lib/builder/builder.service.mjs +15 -12
  13. package/esm2022/layout/builder/lib/builder/index.mjs +7 -6
  14. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +33 -0
  15. package/esm2022/layout/builder/lib/builder/widget-groups.mjs +27 -0
  16. package/esm2022/layout/builder/lib/builder/widget-registery.service.mjs +3 -3
  17. package/esm2022/layout/builder/lib/builder/widget.types.mjs +7 -6
  18. package/esm2022/layout/designer/index.mjs +3 -3
  19. package/esm2022/layout/designer/lib/board/board.component.mjs +69 -45
  20. package/esm2022/layout/designer/lib/command.mjs +185 -0
  21. package/esm2022/layout/designer/lib/designer/designer.component.mjs +64 -38
  22. package/esm2022/layout/designer/lib/designer.service.mjs +142 -115
  23. package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +24 -0
  24. package/esm2022/layout/designer/lib/helpers/add-widget-button/add-widget-button.component.mjs +37 -0
  25. package/esm2022/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.mjs +82 -0
  26. package/esm2022/layout/designer/lib/history/history.component.mjs +28 -0
  27. package/esm2022/layout/designer/lib/outline/outline.component.mjs +17 -17
  28. package/esm2022/layout/designer/lib/pages/pages.component.mjs +28 -0
  29. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +5 -2
  30. package/esm2022/layout/designer/lib/widget-designer-renderer.component.mjs +3 -3
  31. package/esm2022/layout/designer/lib/widget-picker/widget-picker.component.mjs +80 -6
  32. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +6 -4
  33. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.component.mjs +17 -7
  34. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +1 -1
  35. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +12 -6
  36. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +1 -2
  37. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +2 -2
  38. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +1 -1
  39. package/esm2022/widgets/lib/properties/editors.props.mjs +114 -44
  40. package/esm2022/widgets/lib/properties/layout.props.mjs +60 -0
  41. package/esm2022/widgets/lib/properties/table-column.props.mjs +3 -2
  42. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +52 -0
  43. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +27 -0
  44. package/esm2022/widgets/lib/widgets/actions/button/index.mjs +3 -0
  45. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.mjs +1 -1
  46. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-edit.component.mjs +122 -0
  47. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.mjs +1 -1
  48. package/esm2022/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.mjs +1 -1
  49. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-view.component.mjs +215 -0
  50. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +51 -0
  51. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.service.mjs +3 -0
  52. package/esm2022/widgets/lib/widgets/advance/file/index.mjs +8 -0
  53. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.mjs +1 -1
  54. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.mjs +1 -1
  55. package/esm2022/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.mjs +1 -1
  56. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-print.component.mjs +19 -0
  57. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-types.mjs +2 -0
  58. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-view.component.mjs +160 -0
  59. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget.config.mjs +29 -0
  60. package/esm2022/widgets/lib/widgets/advance/gallery/index.mjs +7 -0
  61. package/esm2022/widgets/lib/widgets/advance/map/index.mjs +7 -0
  62. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-print.component.mjs → advance/map/map-box-widget-column.component.mjs} +5 -5
  63. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +171 -0
  64. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.mjs +1 -1
  65. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.mjs +1 -1
  66. package/esm2022/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.mjs +3 -3
  67. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +31 -0
  68. package/esm2022/widgets/lib/widgets/advance/qrcode/index.mjs +3 -0
  69. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +51 -0
  70. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +62 -0
  71. package/esm2022/widgets/lib/widgets/advance/signature/index.mjs +7 -0
  72. 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
  73. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.mjs +142 -0
  74. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.mjs +1 -1
  75. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.mjs +1 -1
  76. package/esm2022/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.mjs +1 -1
  77. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +31 -0
  78. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +10 -12
  79. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.component.mjs +1 -1
  80. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-edit.component.mjs +48 -0
  81. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-filter.component.mjs +1 -1
  82. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-print.component.mjs +1 -1
  83. package/esm2022/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-view.component.mjs +1 -1
  84. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +31 -0
  85. package/esm2022/widgets/lib/widgets/editors/color/index.mjs +7 -0
  86. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-column.component.mjs +36 -0
  87. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +297 -0
  88. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-filter.component.mjs +1 -1
  89. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-print.component.mjs +1 -1
  90. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-view.component.mjs +122 -0
  91. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget.config.mjs +81 -0
  92. package/esm2022/widgets/lib/widgets/editors/contact/contact.type.mjs +2 -0
  93. package/esm2022/widgets/lib/widgets/editors/contact/index.mjs +7 -0
  94. package/esm2022/widgets/lib/widgets/editors/{contact-widget → contact}/popup-component.mjs +1 -1
  95. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-column.component.mjs +44 -0
  96. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +133 -0
  97. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-filter.component.mjs +1 -1
  98. package/esm2022/widgets/lib/widgets/editors/{date-time-box-widget → date-time}/date-time-box-widget-print.component.mjs +1 -1
  99. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-view.component.mjs +54 -0
  100. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +40 -0
  101. package/esm2022/widgets/lib/widgets/editors/date-time/index.mjs +7 -0
  102. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-column.component.mjs +66 -0
  103. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-edit.component.mjs +249 -0
  104. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-filter.component.mjs +1 -1
  105. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-print.component.mjs +1 -1
  106. package/esm2022/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget-view.component.mjs +1 -1
  107. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +39 -0
  108. package/esm2022/widgets/lib/widgets/editors/email/index.mjs +7 -0
  109. package/esm2022/widgets/lib/widgets/editors/large-text/index.mjs +7 -0
  110. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-column.component.mjs +1 -1
  111. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-edit.component.mjs +1 -1
  112. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-filter.component.mjs +1 -1
  113. 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
  114. package/esm2022/widgets/lib/widgets/editors/{large-text-widget → large-text}/large-text-widget-view.component.mjs +1 -1
  115. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +39 -0
  116. package/esm2022/widgets/lib/widgets/editors/link/index.mjs +7 -0
  117. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-column.component.mjs +1 -1
  118. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +391 -0
  119. package/esm2022/widgets/lib/widgets/editors/link/link-widget-filter.component.mjs +20 -0
  120. package/esm2022/widgets/lib/widgets/editors/link/link-widget-print.component.mjs +19 -0
  121. package/esm2022/widgets/lib/widgets/editors/{link-widget → link}/link-widget-view.component.mjs +1 -1
  122. package/esm2022/widgets/lib/widgets/editors/link/link-widget.config.mjs +29 -0
  123. package/esm2022/widgets/lib/widgets/editors/number/index.mjs +7 -0
  124. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-column.component.mjs +38 -0
  125. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +157 -0
  126. package/esm2022/widgets/lib/widgets/{layout/repeater-widget/repeater-widget-edit.component.mjs → editors/number/number-box-widget-filter.component.mjs} +5 -5
  127. package/esm2022/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-print.component.mjs +1 -1
  128. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-view.component.mjs +56 -0
  129. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +39 -0
  130. package/esm2022/widgets/lib/widgets/editors/password/index.mjs +7 -0
  131. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget/phone-box-widget-print.component.mjs → password/password-box-widget-column.component.mjs} +5 -5
  132. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-edit.component.mjs +1 -1
  133. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-filter.component.mjs +1 -1
  134. package/esm2022/widgets/lib/widgets/editors/{password-box-widget → password}/password-box-widget-print.component.mjs +1 -1
  135. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-view.component.mjs +76 -0
  136. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +38 -0
  137. package/esm2022/widgets/lib/widgets/editors/phone/index.mjs +7 -0
  138. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-column.component.mjs +66 -0
  139. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-edit.component.mjs +1 -1
  140. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-filter.component.mjs +1 -1
  141. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-print.component.mjs +19 -0
  142. package/esm2022/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget-view.component.mjs +1 -1
  143. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget.config.mjs +32 -0
  144. package/esm2022/widgets/lib/widgets/editors/rich-text/index.mjs +7 -0
  145. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-popup.component.mjs +1 -1
  146. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-column.component.mjs +46 -0
  147. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +67 -0
  148. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-filter.component.mjs +1 -1
  149. package/esm2022/widgets/lib/widgets/editors/{rich-text-widget → rich-text}/rich-text-widget-print.component.mjs +1 -1
  150. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-view.component.mjs +45 -0
  151. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +39 -0
  152. package/esm2022/widgets/lib/widgets/editors/select/index.mjs +7 -0
  153. package/esm2022/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-column.component.mjs +1 -1
  154. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +85 -0
  155. package/esm2022/widgets/lib/widgets/editors/{gallery-widget/gallery-widget-print.component.mjs → select/select-box-widget-filter.component.mjs} +5 -5
  156. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-print.component.mjs +19 -0
  157. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +60 -0
  158. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget.config.mjs +38 -0
  159. package/esm2022/widgets/lib/widgets/editors/selection-list/index.mjs +7 -0
  160. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-column.component.mjs +41 -0
  161. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +72 -0
  162. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.mjs +1 -1
  163. package/esm2022/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.mjs +1 -1
  164. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-view.component.mjs +44 -0
  165. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.mjs +29 -0
  166. package/esm2022/widgets/lib/widgets/editors/text/index.mjs +7 -0
  167. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.mjs +1 -1
  168. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-edit.component.mjs +121 -0
  169. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.mjs +1 -1
  170. package/esm2022/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.mjs +1 -1
  171. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-view.component.mjs +47 -0
  172. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +41 -0
  173. package/esm2022/widgets/lib/widgets/editors/toggle/index.mjs +7 -0
  174. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.mjs +1 -1
  175. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.mjs +1 -1
  176. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.mjs +1 -1
  177. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.mjs +1 -1
  178. package/esm2022/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.mjs +1 -1
  179. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +40 -0
  180. package/esm2022/widgets/lib/widgets/index.mjs +23 -22
  181. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +65 -0
  182. package/esm2022/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.mjs +1 -1
  183. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +26 -0
  184. package/esm2022/widgets/lib/widgets/layout/block/index.mjs +4 -0
  185. package/esm2022/widgets/lib/widgets/layout/document/document-widget.config.mjs +13 -0
  186. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +56 -0
  187. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.mjs +41 -0
  188. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +25 -0
  189. package/esm2022/widgets/lib/widgets/layout/form-field/index.mjs +4 -0
  190. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +101 -0
  191. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-print.component.mjs +19 -0
  192. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-view.component.mjs +18 -0
  193. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +26 -0
  194. package/esm2022/widgets/lib/widgets/layout/grid/index.mjs +5 -0
  195. package/esm2022/widgets/lib/widgets/layout/page/index.mjs +3 -0
  196. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +65 -0
  197. package/esm2022/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.mjs +1 -1
  198. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +27 -0
  199. package/esm2022/widgets/lib/widgets/layout/repeater/index.mjs +6 -0
  200. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.mjs +1 -1
  201. package/esm2022/widgets/lib/widgets/{editors/link-widget/link-widget-filter.component.mjs → layout/repeater/repeater-widget-edit.component.mjs} +5 -5
  202. package/esm2022/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.mjs +1 -1
  203. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-view.component.mjs +52 -0
  204. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget.config.mjs +24 -0
  205. package/esm2022/widgets/lib/widgets/layout/text-block/index.mjs +3 -0
  206. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.mjs +29 -0
  207. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +42 -0
  208. package/esm2022/widgets/lib/widgets.module.mjs +17 -3
  209. package/fesm2022/acorex-platform-auth.mjs +22 -37
  210. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  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-core.mjs +9 -2
  216. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  217. package/fesm2022/acorex-platform-layout-builder.mjs +163 -129
  218. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  219. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs +100 -0
  220. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs.map +1 -0
  221. package/fesm2022/acorex-platform-layout-designer.mjs +640 -265
  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-CjofXJku.mjs → acorex-platform-layouts-entity-modify-view.component-Bt4MLEou.mjs} +12 -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-DYb6bilD.mjs → acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs} +14 -4
  236. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +1 -0
  237. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map +1 -1
  238. package/fesm2022/acorex-platform-widgets.mjs +3989 -3315
  239. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  240. package/layout/builder/lib/builder/builder.service.d.ts +1 -1
  241. package/layout/builder/lib/builder/index.d.ts +6 -5
  242. package/layout/builder/lib/builder/widget-catalog.d.ts +3 -0
  243. package/layout/builder/lib/builder/widget-groups.d.ts +6 -0
  244. package/layout/builder/lib/builder/widget-registery.service.d.ts +1 -1
  245. package/layout/builder/lib/builder/widget.types.d.ts +44 -6
  246. package/layout/designer/index.d.ts +2 -2
  247. package/layout/designer/lib/board/board.component.d.ts +7 -2
  248. package/layout/designer/lib/command.d.ts +70 -0
  249. package/layout/designer/lib/designer/designer.component.d.ts +4 -10
  250. package/layout/designer/lib/designer.service.d.ts +34 -19
  251. package/layout/designer/lib/header-menu/header-menu.component.d.ts +7 -0
  252. package/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.d.ts +19 -0
  253. package/layout/designer/lib/history/history.component.d.ts +7 -0
  254. package/layout/designer/lib/outline/outline.component.d.ts +1 -0
  255. package/layout/designer/lib/pages/pages.component.d.ts +7 -0
  256. package/layout/designer/lib/property-viewer/widget-property-viewer.component.d.ts +1 -0
  257. package/layout/designer/lib/widget-picker/widget-picker.component.d.ts +22 -4
  258. package/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.d.ts +5 -0
  259. package/package.json +12 -12
  260. package/widgets/lib/properties/editors.props.d.ts +5 -1
  261. package/widgets/lib/properties/layout.props.d.ts +4 -0
  262. package/widgets/lib/widgets/actions/{button-widget → button}/button-widget-view.component.d.ts +1 -0
  263. package/widgets/lib/widgets/actions/button/button-widget.config.d.ts +7 -0
  264. package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.config.d.ts +5 -0
  265. package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget.config.d.ts +5 -0
  266. package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +37 -0
  267. package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget.config.d.ts +5 -0
  268. package/widgets/lib/widgets/advance/qrcode/index.d.ts +2 -0
  269. package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +12 -0
  270. package/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.d.ts +7 -0
  271. package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget.config.d.ts +5 -0
  272. package/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.d.ts +5 -0
  273. package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-edit.component.d.ts +2 -4
  274. package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget.config.d.ts +5 -0
  275. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-edit.component.d.ts +1 -1
  276. package/widgets/lib/widgets/editors/{contact-widget → contact}/contact-widget-view.component.d.ts +1 -1
  277. package/widgets/lib/widgets/editors/contact/contact-widget.config.d.ts +7 -0
  278. package/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.d.ts +7 -0
  279. package/widgets/lib/widgets/editors/{email-box-widget → email}/email-box-widget.config.d.ts +5 -0
  280. package/widgets/lib/widgets/editors/large-text/large-text-widget.config.d.ts +7 -0
  281. package/widgets/lib/widgets/editors/link/link-widget.config.d.ts +7 -0
  282. package/widgets/lib/widgets/editors/{number-box-widget → number}/number-box-widget-edit.component.d.ts +2 -0
  283. package/widgets/lib/widgets/editors/number/number-box-widget.config.d.ts +7 -0
  284. package/widgets/lib/widgets/editors/password/password-box-widget.config.d.ts +7 -0
  285. package/widgets/lib/widgets/editors/{phone-box-widget → phone}/phone-box-widget.config.d.ts +5 -0
  286. package/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.d.ts +7 -0
  287. package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-edit.component.d.ts +2 -0
  288. package/widgets/lib/widgets/editors/select/select-box-widget.config.d.ts +7 -0
  289. package/widgets/lib/widgets/editors/selection-list/selection-list-widget.config.d.ts +7 -0
  290. package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-edit.component.d.ts +1 -1
  291. package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget.config.d.ts +5 -0
  292. package/widgets/lib/widgets/editors/toggle/toggle-widget.config.d.ts +7 -0
  293. package/widgets/lib/widgets/index.d.ts +21 -21
  294. package/widgets/lib/widgets/layout/block/block-widget.config.d.ts +7 -0
  295. package/widgets/lib/widgets/layout/document/document-widget.config.d.ts +7 -0
  296. package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +7 -0
  297. package/widgets/lib/widgets/layout/form-field/form-field-widget-view.component.d.ts +7 -0
  298. package/widgets/lib/widgets/layout/form-field/form-field-widget.config.d.ts +7 -0
  299. package/widgets/lib/widgets/layout/form-field/index.d.ts +3 -0
  300. package/widgets/lib/widgets/layout/grid/grid-widget-designer.component.d.ts +20 -0
  301. package/widgets/lib/widgets/layout/grid/grid-widget-print.component.d.ts +6 -0
  302. package/widgets/lib/widgets/layout/grid/grid-widget-view.component.d.ts +6 -0
  303. package/widgets/lib/widgets/layout/grid/grid-widget.config.d.ts +7 -0
  304. package/widgets/lib/widgets/layout/grid/index.d.ts +4 -0
  305. package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-designer.component.d.ts +2 -0
  306. package/widgets/lib/widgets/layout/page/page-widget.config.d.ts +7 -0
  307. package/widgets/lib/widgets/layout/repeater/repeater-widget.config.d.ts +7 -0
  308. package/widgets/lib/widgets/layout/text-block/text-block-widget.config.d.ts +7 -0
  309. package/esm2022/layout/builder/lib/builder/layout.types.mjs +0 -30
  310. package/esm2022/layout/designer/lib/buttons/add-widget-button/add-widget-button.component.mjs +0 -37
  311. package/esm2022/layout/designer/lib/designer.module.mjs +0 -16
  312. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget-view.component.mjs +0 -37
  313. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget.config.mjs +0 -25
  314. package/esm2022/widgets/lib/widgets/actions/button-widget/index.mjs +0 -3
  315. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-edit.component.mjs +0 -54
  316. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget.config.mjs +0 -34
  317. package/esm2022/widgets/lib/widgets/editors/color-box-widget/index.mjs +0 -7
  318. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-column.component.mjs +0 -36
  319. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.mjs +0 -297
  320. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-view.component.mjs +0 -122
  321. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget.config.mjs +0 -78
  322. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact.type.mjs +0 -2
  323. package/esm2022/widgets/lib/widgets/editors/contact-widget/index.mjs +0 -7
  324. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-column.component.mjs +0 -44
  325. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-edit.component.mjs +0 -133
  326. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-view.component.mjs +0 -54
  327. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.mjs +0 -38
  328. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/index.mjs +0 -7
  329. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-column.component.mjs +0 -66
  330. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-edit.component.mjs +0 -249
  331. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget.config.mjs +0 -36
  332. package/esm2022/widgets/lib/widgets/editors/email-box-widget/index.mjs +0 -7
  333. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-edit.component.mjs +0 -122
  334. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-view.component.mjs +0 -215
  335. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.config.mjs +0 -48
  336. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.service.mjs +0 -3
  337. package/esm2022/widgets/lib/widgets/editors/file-box-widget/index.mjs +0 -8
  338. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-types.mjs +0 -2
  339. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-view.component.mjs +0 -160
  340. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget.config.mjs +0 -26
  341. package/esm2022/widgets/lib/widgets/editors/gallery-widget/index.mjs +0 -7
  342. package/esm2022/widgets/lib/widgets/editors/large-text-widget/index.mjs +0 -7
  343. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-print.component.mjs +0 -19
  344. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.mjs +0 -37
  345. package/esm2022/widgets/lib/widgets/editors/link-widget/index.mjs +0 -7
  346. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-edit.component.mjs +0 -391
  347. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget.config.mjs +0 -26
  348. package/esm2022/widgets/lib/widgets/editors/map-box-widget/index.mjs +0 -7
  349. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.mjs +0 -96
  350. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget.config.mjs +0 -28
  351. package/esm2022/widgets/lib/widgets/editors/number-box-widget/index.mjs +0 -7
  352. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-column.component.mjs +0 -38
  353. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-edit.component.mjs +0 -151
  354. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-filter.component.mjs +0 -20
  355. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-view.component.mjs +0 -56
  356. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.mjs +0 -37
  357. package/esm2022/widgets/lib/widgets/editors/password-box-widget/index.mjs +0 -7
  358. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-column.component.mjs +0 -19
  359. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-view.component.mjs +0 -76
  360. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.mjs +0 -35
  361. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/index.mjs +0 -7
  362. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-column.component.mjs +0 -66
  363. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget.config.mjs +0 -29
  364. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/index.mjs +0 -7
  365. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-column.component.mjs +0 -46
  366. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-edit.component.mjs +0 -67
  367. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-view.component.mjs +0 -45
  368. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.mjs +0 -37
  369. package/esm2022/widgets/lib/widgets/editors/select-box-widget/index.mjs +0 -7
  370. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.mjs +0 -75
  371. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-filter.component.mjs +0 -19
  372. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-view.component.mjs +0 -60
  373. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.mjs +0 -28
  374. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/index.mjs +0 -7
  375. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-column.component.mjs +0 -41
  376. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-edit.component.mjs +0 -72
  377. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-view.component.mjs +0 -44
  378. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.mjs +0 -25
  379. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/index.mjs +0 -7
  380. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-column.component.mjs +0 -19
  381. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-edit.component.mjs +0 -142
  382. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget.config.mjs +0 -34
  383. package/esm2022/widgets/lib/widgets/editors/text-box-widget/index.mjs +0 -7
  384. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.mjs +0 -119
  385. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-view.component.mjs +0 -47
  386. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget.config.mjs +0 -38
  387. package/esm2022/widgets/lib/widgets/editors/toggle-widget/index.mjs +0 -7
  388. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.mjs +0 -36
  389. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget-designer.component.mjs +0 -65
  390. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget.config.mjs +0 -27
  391. package/esm2022/widgets/lib/widgets/layout/block-widget/index.mjs +0 -4
  392. package/esm2022/widgets/lib/widgets/layout/page-widget/index.mjs +0 -3
  393. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.mjs +0 -55
  394. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget.config.mjs +0 -27
  395. package/esm2022/widgets/lib/widgets/layout/repeater-widget/index.mjs +0 -6
  396. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-view.component.mjs +0 -52
  397. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.mjs +0 -20
  398. package/esm2022/widgets/lib/widgets/layout/text-block-widget/index.mjs +0 -3
  399. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget-view.component.mjs +0 -29
  400. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.mjs +0 -39
  401. package/fesm2022/acorex-platform-common-text-widget-column.component-D-mLfzKJ.mjs.map +0 -1
  402. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs +0 -26
  403. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs.map +0 -1
  404. package/fesm2022/acorex-platform-layouts-entity-create-view.component-B2XtNJo1.mjs.map +0 -1
  405. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs.map +0 -1
  406. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs.map +0 -1
  407. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DYb6bilD.mjs.map +0 -1
  408. package/layout/builder/lib/builder/layout.types.d.ts +0 -1
  409. package/layout/designer/lib/designer.module.d.ts +0 -6
  410. package/widgets/lib/widgets/actions/button-widget/button-widget.config.d.ts +0 -2
  411. package/widgets/lib/widgets/editors/contact-widget/contact-widget.config.d.ts +0 -2
  412. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.d.ts +0 -2
  413. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.d.ts +0 -2
  414. package/widgets/lib/widgets/editors/link-widget/link-widget.config.d.ts +0 -2
  415. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.d.ts +0 -15
  416. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.d.ts +0 -2
  417. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.d.ts +0 -2
  418. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.d.ts +0 -2
  419. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.d.ts +0 -2
  420. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.d.ts +0 -2
  421. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.d.ts +0 -2
  422. package/widgets/lib/widgets/layout/block-widget/block-widget.config.d.ts +0 -2
  423. package/widgets/lib/widgets/layout/page-widget/page-widget.config.d.ts +0 -2
  424. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.d.ts +0 -2
  425. package/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.d.ts +0 -2
  426. /package/layout/designer/lib/{buttons → helpers}/add-widget-button/add-widget-button.component.d.ts +0 -0
  427. /package/widgets/lib/widgets/actions/{button-widget → button}/index.d.ts +0 -0
  428. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-column.component.d.ts +0 -0
  429. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-edit.component.d.ts +0 -0
  430. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-filter.component.d.ts +0 -0
  431. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-print.component.d.ts +0 -0
  432. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget-view.component.d.ts +0 -0
  433. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/file-box-widget.service.d.ts +0 -0
  434. /package/widgets/lib/widgets/{editors/file-box-widget → advance/file}/index.d.ts +0 -0
  435. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-column.component.d.ts +0 -0
  436. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-edit.component.d.ts +0 -0
  437. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-filter.component.d.ts +0 -0
  438. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-print.component.d.ts +0 -0
  439. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-types.d.ts +0 -0
  440. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/gallery-widget-view.component.d.ts +0 -0
  441. /package/widgets/lib/widgets/{editors/gallery-widget → advance/gallery}/index.d.ts +0 -0
  442. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/index.d.ts +0 -0
  443. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-column.component.d.ts +0 -0
  444. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-filter.component.d.ts +0 -0
  445. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-print.component.d.ts +0 -0
  446. /package/widgets/lib/widgets/{editors/map-box-widget → advance/map}/map-box-widget-view.component.d.ts +0 -0
  447. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/index.d.ts +0 -0
  448. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-column.component.d.ts +0 -0
  449. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-edit.component.d.ts +0 -0
  450. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-filter.component.d.ts +0 -0
  451. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-print.component.d.ts +0 -0
  452. /package/widgets/lib/widgets/{editors/signature-pad-widget → advance/signature}/signature-pad-widget-view.component.d.ts +0 -0
  453. /package/widgets/lib/widgets/editors/{color-box-widget → color}/color-box-widget-column.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-filter.component.d.ts +0 -0
  515. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-print.component.d.ts +0 -0
  516. /package/widgets/lib/widgets/editors/{select-box-widget → select}/select-box-widget-view.component.d.ts +0 -0
  517. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/index.d.ts +0 -0
  518. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-column.component.d.ts +0 -0
  519. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-edit.component.d.ts +0 -0
  520. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-filter.component.d.ts +0 -0
  521. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-print.component.d.ts +0 -0
  522. /package/widgets/lib/widgets/editors/{selection-list-widget → selection-list}/selection-list-widget-view.component.d.ts +0 -0
  523. /package/widgets/lib/widgets/editors/{text-box-widget → text}/index.d.ts +0 -0
  524. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-column.component.d.ts +0 -0
  525. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-filter.component.d.ts +0 -0
  526. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-print.component.d.ts +0 -0
  527. /package/widgets/lib/widgets/editors/{text-box-widget → text}/text-box-widget-view.component.d.ts +0 -0
  528. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/index.d.ts +0 -0
  529. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-column.component.d.ts +0 -0
  530. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-edit.component.d.ts +0 -0
  531. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-filter.component.d.ts +0 -0
  532. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-print.component.d.ts +0 -0
  533. /package/widgets/lib/widgets/editors/{toggle-widget → toggle}/toggle-widget-view.component.d.ts +0 -0
  534. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-designer.component.d.ts +0 -0
  535. /package/widgets/lib/widgets/layout/{block-widget → block}/block-widget-view.component.d.ts +0 -0
  536. /package/widgets/lib/widgets/layout/{block-widget → block}/index.d.ts +0 -0
  537. /package/widgets/lib/widgets/layout/{page-widget → page}/index.d.ts +0 -0
  538. /package/widgets/lib/widgets/layout/{page-widget → page}/page-widget-view.component.d.ts +0 -0
  539. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/index.d.ts +0 -0
  540. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-designer.component.d.ts +0 -0
  541. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-edit.component.d.ts +0 -0
  542. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-print.component.d.ts +0 -0
  543. /package/widgets/lib/widgets/layout/{repeater-widget → repeater}/repeater-widget-view.component.d.ts +0 -0
  544. /package/widgets/lib/widgets/layout/{text-block-widget → text-block}/index.d.ts +0 -0
  545. /package/widgets/lib/widgets/layout/{text-block-widget → text-block}/text-block-widget-view.component.d.ts +0 -0
@@ -1,82 +1,259 @@
1
1
  import * as i3$1 from '@acorex/platform/layout/builder';
2
- import { AXPWidgetRegistryService, AXP_WIDGET_TOKEN, AXPLayoutBuilderModule, AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';
2
+ import { AXPWidgetRegistryService, AXPWidgetsCatalog, AXP_WIDGET_TOKEN, AXPLayoutBuilderModule, AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i0 from '@angular/core';
6
- import { signal, computed, inject, Injectable, Injector, NgZone, ElementRef, input, effect, Component, ChangeDetectionStrategy, HostListener, ViewEncapsulation, HostBinding, NgModule, EventEmitter, untracked, Output } from '@angular/core';
6
+ import { signal, computed, Injectable, inject, Injector, NgZone, ElementRef, input, effect, Component, ChangeDetectionStrategy, HostListener, ViewEncapsulation, model, output, HostBinding, EventEmitter, untracked, Output, ViewChild } from '@angular/core';
7
7
  import * as i3 from '@acorex/components/skeleton';
8
8
  import { AXSkeletonModule } from '@acorex/components/skeleton';
9
9
  import { AXUnsubscriber } from '@acorex/core/utils';
10
10
  import * as i2 from '@angular/cdk/portal';
11
11
  import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
- import { merge, sortBy, set, get, cloneDeep, 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
- import * as i1$1 from '@acorex/components/button';
15
+ import * as i2$1 from '@acorex/components/button';
16
16
  import { AXButtonModule } from '@acorex/components/button';
17
- import * as i4 from '@acorex/components/decorators';
17
+ import * as i2$2 from '@acorex/components/decorators';
18
18
  import { AXDecoratorModule } from '@acorex/components/decorators';
19
+ import * as i5 from '@acorex/components/button-group';
20
+ import { AXButtonGroupModule } from '@acorex/components/button-group';
19
21
  import * as i3$2 from '@acorex/components/drawer';
20
22
  import { AXDrawerModule } from '@acorex/components/drawer';
21
- import * as i2$1 from '@acorex/components/tabs';
23
+ import * as i4 from '@acorex/components/dropdown';
24
+ import { AXDropdownModule } from '@acorex/components/dropdown';
25
+ import * as i2$3 from '@acorex/components/menu';
26
+ import { AXMenuModule } from '@acorex/components/menu';
27
+ import * as i2$4 from '@acorex/components/tabs';
22
28
  import { AXTabsModule } from '@acorex/components/tabs';
23
- import * as i1$2 from '@acorex/components/breadcrumbs';
29
+ import * as i1$1 from '@acorex/components/breadcrumbs';
24
30
  import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
25
- import * as i1$3 from '@acorex/components/collapse';
31
+ import * as i1$2 from '@acorex/components/collapse';
26
32
  import { AXCollapseModule } from '@acorex/components/collapse';
27
- import * as i5 from '@acorex/components/menu';
28
- import { AXMenuModule } from '@acorex/components/menu';
33
+
34
+ // AddWidgetCommand
35
+ class AddWidgetCommand {
36
+ constructor(widget, parent, previousSelection) {
37
+ this.widget = widget;
38
+ this.parent = parent;
39
+ this.previousSelection = previousSelection;
40
+ }
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);
50
+ }
51
+ }
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);
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
161
+ }
162
+ undo() {
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
+ }
173
+ }
174
+ }
175
+ redo() {
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());
181
+ }
182
+ }
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
+ }
198
+ }
199
+ // Optionally update any UI components or state here
200
+ this.selectedNode.set(this.undoStack()[this.currentIndex()].getExecutionSelection());
201
+ }
202
+ clear() {
203
+ this.undoStack.set([]);
204
+ this.currentIndex.set(-1);
205
+ }
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' }); }
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: CommandManager, decorators: [{
210
+ type: Injectable,
211
+ args: [{
212
+ providedIn: 'root'
213
+ }]
214
+ }] });
29
215
 
30
216
  class AXPDesignerService {
31
217
  constructor() {
32
- this.clipboard = signal(null);
33
- this.undoStack = [];
34
- this.redoStack = [];
35
- this.maxHistorySize = 20;
36
- this.canUndo = signal(false);
37
- this.canRedo = signal(false);
38
- this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != "page");
39
- this.canPaste = computed(() => (this.clipboard() != null));
40
218
  this.popupService = inject(AXPopupService);
41
219
  this.widgetRegisteryService = inject(AXPWidgetRegistryService);
42
- this.root = signal(this.createPage());
220
+ this.document = signal(this.createDoc());
221
+ this.currentPageIndex = signal(0);
222
+ this.currentPage = signal(this.document().children?.[0]);
223
+ this.commandManager = inject(CommandManager);
224
+ this.clipboard = signal(null);
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());
43
230
  this.breadcrumbs = computed(() => {
44
- return this.selectedNode() ? this.findBreadcrumbs(this.root(), this.selectedNode()) ?? [] : [];
231
+ return this.selectedNode() ? this.findBreadcrumbs(this.currentPage(), this.selectedNode()) ?? [] : [];
45
232
  });
46
233
  this.selectedNode = signal(null);
47
- this._lastSelectedNode = null;
48
234
  this._focusedNode = null;
49
235
  this.focusedNode = () => this._focusedNode;
50
- this._mode = signal('designer');
51
- this.mode = this._mode.asReadonly();
236
+ this.mode = signal('designer');
237
+ this.size = signal('xl');
52
238
  this.onSelected = new Subject();
53
239
  this.onRefresh = new Subject();
54
240
  this.onUpdate = new Subject();
55
241
  this.onFocused = new Subject();
56
242
  }
57
- setMode(mode) {
58
- this._mode.set(mode);
59
- }
60
243
  register(command) {
61
- if (!this._lastSelectedNode) {
62
- this.select({ widget: command.widget });
63
- }
64
- else {
65
- this.select({ widget: this._lastSelectedNode });
66
- }
244
+ this.select({ widget: command.widget });
67
245
  }
68
246
  select(command) {
69
247
  this.selectedNode.set(command.widget);
70
- this._lastSelectedNode = this.selectedNode();
71
248
  this.onSelected.next(command);
72
249
  }
73
250
  update(command) {
74
- if (command.mode == 'update') {
75
- console.log(this.selectedNode()?.name, command);
76
- this.saveStateForUndo();
251
+ const node = command.widget ?? this.selectedNode();
252
+ if (command.mode == 'update' && node) {
253
+ this.commandManager.executeCommand(new UpdateWidgetCommand(node, command.values, node));
77
254
  }
78
- this.selectedNode.update(c => merge(this.selectedNode(), command.values));
79
- 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 });
80
257
  }
81
258
  focus(command) {
82
259
  if (this._focusedNode != command.widget) {
@@ -107,35 +284,68 @@ class AXPDesignerService {
107
284
  return undefined;
108
285
  }
109
286
  async showPicker(currentNode) {
110
- const com = await import('./acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs').then(c => c.AXPDesignerWidgetPickerComponent);
287
+ const com = await import('./acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs').then((c) => c.AXPDesignerWidgetPickerComponent);
111
288
  const result = await this.popupService.open(com, {
112
- title: "Widget Gallery",
289
+ title: 'Widget Gallery',
113
290
  size: 'md',
114
291
  closeButton: true,
115
292
  data: {
116
- widgets: sortBy(this.widgetRegisteryService.all().filter(c => c.visible != false), c => c.title)
117
- }
293
+ widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
294
+ },
118
295
  });
119
296
  if ((result.data?.widgets ?? []).length) {
120
297
  const selected = result.data?.widgets;
121
- selected.forEach(c => {
298
+ selected.forEach((c) => {
122
299
  this.addWidget(currentNode, { type: c.name });
123
300
  });
124
301
  }
125
302
  }
303
+ createDoc() {
304
+ const doc = {
305
+ type: AXPWidgetsCatalog.document,
306
+ children: [this.createPage()],
307
+ name: 'document',
308
+ };
309
+ set(doc, '__meta__.id', Math.random() * Math.pow(10, 18));
310
+ return doc;
311
+ }
126
312
  createPage() {
127
- const config = this.widgetRegisteryService.resolve('page');
313
+ const config = this.widgetRegisteryService.resolve('page-layout');
128
314
  const page = {
129
- type: 'page',
315
+ type: 'page-layout',
130
316
  children: [],
131
- name: "page",
317
+ name: 'page-layout1',
132
318
  };
133
319
  set(page, '__meta__.id', Math.random() * Math.pow(10, 18));
134
320
  set(page, '__meta__.config', config);
135
321
  return page;
136
322
  }
323
+ addNewPage() {
324
+ this.addWidget(this.document(), this.createPage());
325
+ this.goToPage(this.currentPageIndex() + 1);
326
+ }
327
+ removePage(index) {
328
+ const page = this.document().children?.[index];
329
+ this.removeWidget(page);
330
+ this.goToPage(index - 1);
331
+ }
332
+ clonePage(index) {
333
+ const page = this.document().children?.[index];
334
+ this.clone(page);
335
+ this.goToPage((this.document().children?.length ?? 1) - 1);
336
+ }
337
+ goToPage(index) {
338
+ this.currentPageIndex.set(index);
339
+ setTimeout(() => {
340
+ this.currentPage.set(this.document().children?.[this.currentPageIndex()]);
341
+ this.select({ widget: this.currentPage() });
342
+ });
343
+ }
344
+ reRenderPage() {
345
+ this.currentPage.set({ ...this.currentPage() });
346
+ }
137
347
  findWidgetById(root, id) {
138
- if (get(root, "__meta__.id") === id) {
348
+ if (get(root, '__meta__.id') === id) {
139
349
  return root; // Return the root if it matches the ID
140
350
  }
141
351
  if (!root.children)
@@ -148,10 +358,10 @@ class AXPDesignerService {
148
358
  }
149
359
  return null; // Node not found
150
360
  }
151
- findParent(id, parent = this.root()) {
361
+ findParent(id, parent = this.currentPage()) {
152
362
  if (!parent.children)
153
363
  return null;
154
- if (parent.children.some(child => get(child, "__meta__.id") === id)) {
364
+ if (parent.children.some((child) => get(child, '__meta__.id') === id)) {
155
365
  return parent; // Return this node as it's the parent of the node with the given ID
156
366
  }
157
367
  for (const child of parent.children) {
@@ -169,7 +379,7 @@ class AXPDesignerService {
169
379
  if (config && config.container) {
170
380
  return current;
171
381
  }
172
- current = this.findParent(get(current, "__meta__.id")); // Use findParent to navigate upwards
382
+ current = this.findParent(get(current, '__meta__.id')); // Use findParent to navigate upwards
173
383
  }
174
384
  }
175
385
  else {
@@ -192,91 +402,69 @@ class AXPDesignerService {
192
402
  if (!currentNode)
193
403
  return null;
194
404
  //
195
- this.saveStateForUndo();
196
- //
197
- if (!currentNode.children) {
198
- currentNode.children = [];
199
- }
405
+ const cloned = cloneDeep(node);
200
406
  const config = this.widgetRegisteryService.resolve(node.type);
201
407
  //
202
- const cloned = cloneDeep(node);
408
+ this.commandManager.executeCommand(new AddWidgetCommand(cloned, currentNode, currentNode));
409
+ //
203
410
  cloned.name = this.generateUniqueName(node.type);
204
411
  set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));
205
412
  set(cloned, '__meta__.config', config);
206
413
  //
207
- currentNode.children.push(cloned);
208
- //
414
+ this.reRenderPage();
209
415
  //
210
416
  this.refresh({ widget: currentNode });
211
417
  this.select({ widget: cloned });
212
418
  return cloned;
213
419
  }
214
420
  removeWidget(node) {
215
- if (node.type === "page") {
216
- console.error("Cannot remove the page node.");
217
- return; // Prevent removing the root page node
421
+ if (node.type === 'document-layout' || (node.type === 'page-layout' && (this.document().children?.length ?? 1) == 1)) {
422
+ console.error('Cannot remove the page node.');
423
+ return; // Prevent removing the root page node or document
218
424
  }
219
- this.saveStateForUndo(); // Save state before making changes
220
- const nodeIdToRemove = get(node, "__meta__.id");
425
+ const nodeIdToRemove = get(node, '__meta__.id');
221
426
  if (!nodeIdToRemove) {
222
- throw new Error("Node does not have a valid __meta__.id to identify it for removal.");
427
+ throw new Error('Node does not have a valid __meta__.id to identify it for removal.');
223
428
  }
224
429
  // Find the parent of the node to remove it
225
- const parent = this.findParent(nodeIdToRemove, this.root());
430
+ const parent = this.findParent(nodeIdToRemove, this.document());
226
431
  if (!parent) {
227
- throw new Error("Parent node not found. The node might be the root node or does not exist.");
228
- }
229
- const index = parent.children?.findIndex(child => get(child, "__meta__.id") === nodeIdToRemove) ?? -1;
230
- if (index > -1) {
231
- parent.children.splice(index, 1);
232
- this.refresh({ widget: parent }); // Refresh the UI to reflect changes
233
- this.select({ widget: parent }); // Select the parent node after removal
234
- }
235
- else {
236
- throw new Error("Node to remove not found in the widget tree.");
432
+ throw new Error('Parent node not found. The node might be the root node or does not exist.');
237
433
  }
434
+ const previousSelection = this.selectedNode(); // Capture the currently selected node before removal
435
+ const command = new RemoveWidgetCommand(node, parent, previousSelection);
436
+ this.commandManager.executeCommand(command);
437
+ this.refresh({ widget: parent }); // Refresh the UI to reflect changes
438
+ this.select({ widget: parent }); // Select the parent node after removal
238
439
  }
239
- saveStateForUndo() {
240
- if (this.undoStack.length >= this.maxHistorySize) {
241
- this.undoStack.shift(); // Remove the oldest snapshot if exceeding the max history size.
242
- }
243
- this.undoStack.push(cloneDeep(this.root()));
244
- this.canUndo.set(true);
245
- // Clear the redo stack whenever a new change is made after undo
246
- if (this.redoStack.length > 0) {
247
- this.redoStack = [];
248
- this.canRedo.set(false);
249
- }
440
+ navigateTo(index) {
441
+ this.commandManager.goToCommand(index);
442
+ this.reRenderPage();
443
+ const currentSelection = this.commandManager.selectedNode();
444
+ this.refresh({ widget: this.currentPage() });
445
+ this.select({ widget: currentSelection });
250
446
  }
251
- applyState(state) {
252
- this.root.set(state);
253
- this.refresh({ widget: this.root() });
254
- //TODO: select the selected widget on this state
255
- this.select({ widget: this._lastSelectedNode ?? this.root() });
447
+ redo() {
448
+ this.commandManager.redo();
449
+ this.reRenderPage();
450
+ const currentSelection = this.commandManager.selectedNode();
451
+ this.refresh({ widget: this.currentPage() });
452
+ this.select({ widget: currentSelection });
256
453
  }
257
454
  undo() {
258
- if (this.undoStack.length > 0) {
259
- const currentState = cloneDeep(this.root());
260
- this.redoStack.push(currentState);
261
- const prevState = this.undoStack.pop();
262
- this.applyState(prevState);
263
- this.canUndo.set(this.undoStack.length > 0);
264
- this.canRedo.set(true); // There is at least one action to redo now
265
- }
455
+ this.commandManager.undo();
456
+ this.reRenderPage();
457
+ const currentSelection = this.commandManager.selectedNode();
458
+ this.refresh({ widget: this.currentPage() });
459
+ this.select({ widget: currentSelection });
266
460
  }
267
- redo() {
268
- if (this.redoStack.length > 0) {
269
- const nextState = this.redoStack.pop();
270
- this.undoStack.push(cloneDeep(this.root()));
271
- this.applyState(nextState);
272
- this.canRedo.set(this.redoStack.length > 0);
273
- this.canUndo.set(true); // Undo is always available after a redo
274
- }
461
+ clearHistory() {
462
+ this.commandManager.clear();
275
463
  }
276
464
  formatOutputJSON(obj, nodeName) {
277
465
  // Check if the object is an array
278
466
  if (Array.isArray(obj)) {
279
- return obj.map(item => this.formatOutputJSON(item, nodeName));
467
+ return obj.map((item) => this.formatOutputJSON(item, nodeName));
280
468
  }
281
469
  else if (typeof obj === 'object' && obj !== null) {
282
470
  // Create a new object to store the result
@@ -303,44 +491,57 @@ class AXPDesignerService {
303
491
  this.copy(widget); // Copy the widget to the clipboard
304
492
  this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
305
493
  }
306
- paste(parentNode = this.selectedNode() ?? this.root()) {
494
+ clone(widget = this.selectedNode()) {
495
+ if (!widget)
496
+ return;
497
+ this.copy(widget); // Copy the widget to the clipboard
498
+ if (widget.type == 'page-layout') {
499
+ this.paste(this.document());
500
+ }
501
+ else {
502
+ this.paste(widget);
503
+ }
504
+ }
505
+ paste(parentNode = this.selectedNode() ?? this.currentPage()) {
307
506
  if (!this.clipboard() || !this.selectedNode()) {
308
- console.error("Clipboard is empty or no node is selected.");
507
+ console.error('Clipboard is empty or no node is selected.');
309
508
  return;
310
509
  }
510
+ const newNode = cloneDeep(this.clipboard());
311
511
  const nearestContainer = this.findNearestContainer(parentNode, true);
312
512
  if (!nearestContainer) {
313
- console.error("No suitable container found.");
513
+ console.error('No suitable container found.');
314
514
  return;
315
515
  }
316
516
  //
317
- this.saveStateForUndo(); // Prepare for undo functionality
318
- //
319
517
  if (!nearestContainer.children) {
320
518
  nearestContainer.children = [];
321
519
  }
322
- const newNode = cloneDeep(this.clipboard());
323
- set(newNode, "__meta__.id", Math.random() * Math.pow(10, 18)); // Ensure a unique ID
520
+ newNode.name = this.generateUniqueName(newNode.type);
521
+ set(newNode, '__meta__.id', Math.random() * Math.pow(10, 18)); // Ensure a unique ID
522
+ //
523
+ this.commandManager.executeCommand(new AddWidgetCommand(newNode, nearestContainer, nearestContainer));
324
524
  //
325
- nearestContainer.children.push(newNode); // Add the new node to the container
326
- this.refresh({ widget: nearestContainer }); // Refresh the UI
327
- this.select({ widget: newNode }); // Select the newly pasted node
525
+ setTimeout(() => {
526
+ this.refresh({ widget: nearestContainer }); // Refresh the UI
527
+ this.select({ widget: newNode }); // Select the newly pasted node
528
+ });
328
529
  }
329
530
  export() {
330
- const json = this.formatOutputJSON(this.root(), "__meta__");
531
+ const json = this.formatOutputJSON(this.document(), '__meta__');
331
532
  return JSON.stringify(json);
332
533
  }
333
534
  download() {
334
535
  // Convert the object to a JSON string
335
536
  const jsonStr = this.export();
336
537
  // Create a blob object from the JSON string
337
- const blob = new Blob([jsonStr], { type: "application/json" });
538
+ const blob = new Blob([jsonStr], { type: 'application/json' });
338
539
  // Create a URL for the blob object
339
540
  const url = URL.createObjectURL(blob);
340
541
  // Create a temporary <a> element to trigger the download
341
- const a = document.createElement("a");
542
+ const a = document.createElement('a');
342
543
  a.href = url;
343
- a.download = "export.json";
544
+ a.download = 'export.json';
344
545
  // Append the <a> element to the document body (necessary for some browsers)
345
546
  document.body.appendChild(a);
346
547
  // Trigger the download by clicking the <a> element
@@ -361,7 +562,7 @@ class AXPDesignerService {
361
562
  let uniqueName = `${baseName}${index}`;
362
563
  // Gather all existing names to check against
363
564
  const existingNames = new Set();
364
- this.collectAllNames(this.root(), existingNames);
565
+ this.collectAllNames(this.document(), existingNames);
365
566
  // Increment the index until a unique name is found
366
567
  while (existingNames.has(uniqueName)) {
367
568
  index++;
@@ -384,6 +585,17 @@ class AXPDesignerService {
384
585
  }
385
586
  }
386
587
  }
588
+ async openPreview() {
589
+ const com = await import('./acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs').then((c) => c.AXPDesignerWidgetPickerComponent);
590
+ await this.popupService.open(com, {
591
+ title: 'Widget Gallery',
592
+ size: 'full',
593
+ closeButton: true,
594
+ data: {
595
+ widgets: sortBy(this.widgetRegisteryService.all().filter((c) => c.visible != false), (c) => c.title),
596
+ },
597
+ });
598
+ }
387
599
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
388
600
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
389
601
  }
@@ -438,7 +650,7 @@ class AXPWidgetDesignerRendererComponent {
438
650
  //
439
651
  this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
440
652
  if (this.isCurrentWidget(c.widget)) {
441
- this.instance.setChildren(this.node().children ?? []);
653
+ this.instance?.setChildren(this.node().children ?? []);
442
654
  }
443
655
  });
444
656
  //
@@ -553,7 +765,7 @@ class AXPWidgetDesignerRendererComponent {
553
765
  });
554
766
  }
555
767
  applyOptions(values) {
556
- if (this.node().defaultValue != null) {
768
+ if (this.instance && this.node().defaultValue != null) {
557
769
  this.instance.setValue(this.node().defaultValue);
558
770
  }
559
771
  this.mergedOptions.update((currentOptions) => {
@@ -624,48 +836,77 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
624
836
  class AXPDesignerBoardComponent {
625
837
  constructor() {
626
838
  this.context = {};
627
- this.service = inject(AXPDesignerService);
628
- }
629
- get __class() {
630
- return {
631
- "axp-designer-board": true,
632
- "axp-state-design": this.service.mode() == 'designer'
839
+ this.elementRef = inject((ElementRef));
840
+ this.breakpointMap = {
841
+ 'sm': 640,
842
+ 'md': 768,
843
+ 'lg': 1024,
844
+ 'xl': 1280,
845
+ 'xxl': 1536
633
846
  };
847
+ this.service = inject(AXPDesignerService);
848
+ this.width = computed(() => {
849
+ switch (this.service.size()) {
850
+ case 'sm':
851
+ return '340px';
852
+ case 'md':
853
+ case 'lg':
854
+ return '768px';
855
+ default:
856
+ return '100%';
857
+ }
858
+ });
859
+ this.ef = effect(() => {
860
+ this.removeCustomClass();
861
+ if (this.service.size() != 'xl') {
862
+ this.applyResponsiveStyles(this.service.size());
863
+ }
864
+ });
634
865
  }
635
- handleKeyboardEvent(event) {
636
- if (event.ctrlKey) {
637
- switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
638
- case 'z':
639
- event.preventDefault(); // Prevent the browser's default undo action
640
- this.service.undo();
641
- break;
642
- case 'y':
643
- event.preventDefault(); // Prevent the browser's default redo action
644
- this.service.redo();
645
- break;
646
- case 'c':
647
- if (this.service.canCutCopy()) {
648
- event.preventDefault(); // Prevent the browser's default copy action
649
- this.service.copy();
650
- }
651
- break;
652
- case 'x':
653
- if (this.service.canCutCopy()) {
654
- event.preventDefault(); // Prevent the browser's default cut action
655
- this.service.cut();
656
- }
657
- break;
658
- case 'v':
659
- if (this.service.canPaste()) {
660
- event.preventDefault(); // Prevent the browser's default paste action
661
- this.service.paste();
866
+ // Unified method to extract media queries and create a custom class
867
+ applyResponsiveStyles(breakpoint) {
868
+ const minWidth = get(this.breakpointMap, breakpoint);
869
+ const mediaRules = [];
870
+ // Loop through all the stylesheets
871
+ for (let sheet of Array.from(document.styleSheets)) {
872
+ try {
873
+ // Loop through CSS rules
874
+ for (let rule of Array.from(sheet.cssRules)) {
875
+ // Check if the rule is a CSSMediaRule
876
+ if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {
877
+ // Loop through the media rule's CSS rules
878
+ for (let subRule of Array.from(rule.cssRules)) {
879
+ mediaRules.push(subRule.cssText);
880
+ }
662
881
  }
663
- break;
882
+ }
883
+ }
884
+ catch (e) {
885
+ console.error('Error accessing stylesheet:', e);
664
886
  }
665
887
  }
888
+ // Create a dynamic class for the media queries
889
+ this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);
890
+ }
891
+ createCustomClass(className, styles, breakpoint) {
892
+ const styleSheet = document.createElement('style');
893
+ styleSheet.setAttribute("data-screen", breakpoint);
894
+ // Construct a pure CSS string, dynamically replacing the breakpoint prefix
895
+ let styleString = "";
896
+ styles.forEach(style => {
897
+ // Replace any prefixed classes like 'lg:' or 'md:' dynamically
898
+ const dynamicPrefix = new RegExp(`\\.${breakpoint}\\\\:`, 'g');
899
+ styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix
900
+ });
901
+ styleSheet.innerText = styleString;
902
+ this.removeCustomClass();
903
+ this.elementRef.nativeElement.appendChild(styleSheet);
904
+ }
905
+ removeCustomClass() {
906
+ this.elementRef.nativeElement.querySelectorAll('style').forEach(s => s.remove());
666
907
  }
667
908
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
668
- 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)" }, properties: { "class": "this.__class" } }, ngImport: i0, template: "<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>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: AXPWidgetDesignerRendererComponent, selector: "axp-widget-designer-renderer", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
909
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", ngImport: i0, template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: AXPWidgetDesignerRendererComponent, selector: "axp-widget-designer-renderer", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
669
910
  }
670
911
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, decorators: [{
671
912
  type: Component,
@@ -673,14 +914,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
673
914
  CommonModule,
674
915
  AXPLayoutBuilderModule,
675
916
  AXPWidgetDesignerRendererComponent
676
- ], template: "<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>" }]
677
- }], propDecorators: { __class: [{
678
- type: HostBinding,
679
- args: ['class']
680
- }], handleKeyboardEvent: [{
681
- type: HostListener,
682
- args: ['document:keydown', ['$event']]
683
- }] } });
917
+ ], template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.currentPage()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>" }]
918
+ }] });
684
919
 
685
920
  class AXPDesignerAddWidgetButtonComponent {
686
921
  constructor() {
@@ -693,37 +928,103 @@ class AXPDesignerAddWidgetButtonComponent {
693
928
  }
694
929
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
695
930
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerAddWidgetButtonComponent, isStandalone: true, selector: "axp-designer-add-widget-button", ngImport: i0, template: `
696
- <div class="ax-container">
697
- <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
698
- <ax-icon icon="fa-solid fa-plus"></ax-icon>
699
- </ax-button>
700
- </div>
701
- `, 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: i1$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: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
931
+ <div class="ax-container">
932
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
933
+ <ax-icon icon="fa-solid fa-plus"></ax-icon>
934
+ </ax-button>
935
+ </div>
936
+ `, isInline: true, styles: ["axp-designer-add-widget-button .ax-container{margin-left:auto;margin-right:auto;display:flex;justify-content:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
702
937
  }
703
938
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, decorators: [{
704
939
  type: Component,
705
940
  args: [{ selector: 'axp-designer-add-widget-button', template: `
706
- <div class="ax-container">
707
- <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
708
- <ax-icon icon="fa-solid fa-plus"></ax-icon>
709
- </ax-button>
710
- </div>
711
- `, 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"] }]
941
+ <div class="ax-container">
942
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
943
+ <ax-icon icon="fa-solid fa-plus"></ax-icon>
944
+ </ax-button>
945
+ </div>
946
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule], encapsulation: ViewEncapsulation.None, styles: ["axp-designer-add-widget-button .ax-container{margin-left:auto;margin-right:auto;display:flex;justify-content:center;padding:.5rem}\n"] }]
712
947
  }] });
713
948
 
714
- class AXPDesignerModule {
715
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
716
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
717
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
949
+ class AXPDesignerGridDrawerComponent {
950
+ constructor() {
951
+ this.rowsCount = model(5, { alias: "rows" });
952
+ this.colsCount = model(12, { alias: "columns" });
953
+ this.onSelect = output();
954
+ this.rows = computed(() => Array.from({ length: this.rowsCount() }).map((v, index) => index + 1));
955
+ this.columns = computed(() => Array.from({ length: this.colsCount() }).map((v, index) => index + 1));
956
+ this.rangeR = signal(0);
957
+ this.rangeC = signal(0);
958
+ }
959
+ handleMouseHover(r, c) {
960
+ this.rangeR.set(r);
961
+ this.rangeC.set(c);
962
+ }
963
+ handleClick(r, c) {
964
+ this.onSelect.emit({ rows: r, cols: c });
965
+ }
966
+ handleMouseLeave(event) {
967
+ this.rangeR.set(0);
968
+ this.rangeC.set(0);
969
+ }
970
+ get __style() {
971
+ return {
972
+ "--cols-width": `${this.colsCount() == 0 ? 0 : (100 / this.colsCount())}%`
973
+ };
974
+ }
975
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
976
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerGridDrawerComponent, isStandalone: true, selector: "axp-designer-grid-drawer", inputs: { rowsCount: { classPropertyName: "rowsCount", publicName: "rows", isSignal: true, isRequired: false, transformFunction: null }, colsCount: { classPropertyName: "colsCount", publicName: "columns", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowsCount: "rowsChange", colsCount: "columnsChange", onSelect: "onSelect" }, host: { listeners: { "mouseleave": "handleMouseLeave($event)" }, properties: { "style": "this.__style" } }, ngImport: i0, template: `
977
+ <table class="table-picker" >
978
+ <tbody>
979
+ @for(r of rows();track $index)
980
+ {
981
+ <tr >
982
+ @for(c of columns();track $index)
983
+ {
984
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
985
+ </td>
986
+ }
987
+ </tr>
988
+ }
989
+ <tr>
990
+ <td [attr.colspan]="columns().length" class="ax-text-center">
991
+ <small >{{rangeR()}}*{{rangeC()}}</small>
992
+ </td>
993
+ </tr>
994
+ </tbody>
995
+ </table>
996
+ `, isInline: true, styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
718
997
  }
719
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, decorators: [{
720
- type: NgModule,
721
- args: [{
722
- imports: [],
723
- exports: [],
724
- declarations: [],
725
- }]
726
- }] });
998
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerGridDrawerComponent, decorators: [{
999
+ type: Component,
1000
+ args: [{ selector: 'axp-designer-grid-drawer', template: `
1001
+ <table class="table-picker" >
1002
+ <tbody>
1003
+ @for(r of rows();track $index)
1004
+ {
1005
+ <tr >
1006
+ @for(c of columns();track $index)
1007
+ {
1008
+ <td (mouseenter)="handleMouseHover(r,c)" [class.picked]="c<=rangeC() && r<=rangeR()" (click)="handleClick(r,c)">
1009
+ </td>
1010
+ }
1011
+ </tr>
1012
+ }
1013
+ <tr>
1014
+ <td [attr.colspan]="columns().length" class="ax-text-center">
1015
+ <small >{{rangeR()}}*{{rangeC()}}</small>
1016
+ </td>
1017
+ </tr>
1018
+ </tbody>
1019
+ </table>
1020
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [], styles: [":host table{width:100%;border-collapse:collapse;--tw-border-spacing-x: 0px;--tw-border-spacing-y: 0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}:host table td{height:2.5rem;border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));width:var(--cols-width)}:host table td:after{content:\"\";display:block}:host table td.picked{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-border-default),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}\n"] }]
1021
+ }], propDecorators: { handleMouseLeave: [{
1022
+ type: HostListener,
1023
+ args: ['mouseleave', ['$event']]
1024
+ }], __style: [{
1025
+ type: HostBinding,
1026
+ args: ['style']
1027
+ }] } });
727
1028
 
728
1029
  class AXPDesignerBreadcrumbsComponent {
729
1030
  constructor() {
@@ -750,7 +1051,7 @@ class AXPDesignerBreadcrumbsComponent {
750
1051
  <i class="ax-icon ax-icon-chevron-right"></i>
751
1052
  </ng-template>
752
1053
  </ax-breadcrumbs>
753
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$2.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$2.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1054
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$1.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$1.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
754
1055
  }
755
1056
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, decorators: [{
756
1057
  type: Component,
@@ -780,6 +1081,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
780
1081
  }]
781
1082
  }] });
782
1083
 
1084
+ class AXPDesignerHeaderMenuComponent {
1085
+ constructor() {
1086
+ this.service = inject(AXPDesignerService);
1087
+ }
1088
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1089
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["disabled", "text", "active"], outputs: ["activeChange", "onClick"] }, { kind: "component", type: i2$3.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn"] }] }); }
1090
+ }
1091
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, decorators: [{
1092
+ type: Component,
1093
+ args: [{ standalone: true, imports: [
1094
+ CommonModule,
1095
+ AXDecoratorModule,
1096
+ AXMenuModule,
1097
+ ], selector: 'axp-designer-header-menu', 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>" }]
1098
+ }] });
1099
+
1100
+ class AXPDesignerOutlineComponent {
1101
+ constructor() {
1102
+ this.service = inject(AXPDesignerService);
1103
+ this.collapsedStates = new Map();
1104
+ this.root = signal(this.getTree());
1105
+ merge$1(this.service.onRefresh, this.service.onUpdate).subscribe(() => {
1106
+ this.root.update((c) => ({ ...this.getTree() }));
1107
+ });
1108
+ }
1109
+ getTree() {
1110
+ return {
1111
+ type: AXPWidgetsCatalog.document,
1112
+ children: [this.service.currentPage()],
1113
+ };
1114
+ }
1115
+ toggleCollapse(node) {
1116
+ // Toggle the current state or set to true if undefined
1117
+ this.collapsedStates.set(node, !this.collapsedStates.get(node));
1118
+ }
1119
+ isCollapsed(node) {
1120
+ // Return the collapsed state, default is false (expanded)
1121
+ return !!this.collapsedStates.get(node);
1122
+ }
1123
+ getConfig(node) {
1124
+ return get(node, '__meta__.config');
1125
+ }
1126
+ handleClick(e, node) {
1127
+ e.stopPropagation();
1128
+ this.service.select({ widget: node });
1129
+ }
1130
+ handleToggleClick(event, item) {
1131
+ event.stopPropagation(); // Prevents the event from bubbling up to parent elements
1132
+ this.toggleCollapse(item);
1133
+ }
1134
+ handleMouseOver(e, node) {
1135
+ e.stopPropagation();
1136
+ this.service.focus({ widget: node });
1137
+ }
1138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1139
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1140
+ }
1141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
1142
+ type: Component,
1143
+ args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXPLayoutBuilderModule, AXDecoratorModule], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
1144
+ }], ctorParameters: () => [] });
1145
+
783
1146
  class AXPWidgetPropertyViewerComponent {
784
1147
  constructor() {
785
1148
  this.widget = input.required();
@@ -808,6 +1171,9 @@ class AXPWidgetPropertyViewerComponent {
808
1171
  }
809
1172
  }, { allowSignalWrites: true });
810
1173
  }
1174
+ update(values) {
1175
+ this.context.set(merge(cloneDeep(this.context()), values));
1176
+ }
811
1177
  fillTabs() {
812
1178
  const tabs = [
813
1179
  {
@@ -854,8 +1220,8 @@ class AXPWidgetPropertyViewerComponent {
854
1220
  handleContextChange(e) {
855
1221
  untracked(() => {
856
1222
  this.context.set(e.data);
1223
+ this.onChanged.emit({ values: this.context(), mode: e.init ? 'init' : 'update' });
857
1224
  });
858
- this.onChanged.emit({ values: e.data, mode: 'update' });
859
1225
  }
860
1226
  handleTabChange(event) {
861
1227
  const indx = event.index;
@@ -864,7 +1230,7 @@ class AXPWidgetPropertyViewerComponent {
864
1230
  }
865
1231
  }
866
1232
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
867
- 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$1.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$1.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i3$1.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1233
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetPropertyViewerComponent, isStandalone: true, selector: "axp-widget-property-viewer", inputs: { widget: { classPropertyName: "widget", publicName: "widget", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onChanged: "onChanged" }, ngImport: i0, template: "<axp-widgets-container [context]=\"context()\" (onChanged)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for( tab of tabs();track $index){\n <ax-tab-item [text]=\"tab.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-collapse-group class=\"ax-h-fit\" look=\"blank\">\n @for( group of groups();track $index){\n <ax-collapse [caption]=\"group.title\" look=\"solid\" [(isCollapsed)]=\"group.isCollapsed\">\n <div class=\"ax-flex ax-flex-col ax-divide-y\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <span class=\"ax-font-semibold\">{{p.title}}</span>\n @if(p.schema.interface)\n {\n <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n</axp-widgets-container>", styles: ["ax-collapse .ax-collapse-header{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i1$2.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i1$2.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$4.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$4.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i3$1.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
868
1234
  }
869
1235
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, decorators: [{
870
1236
  type: Component,
@@ -873,88 +1239,89 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
873
1239
  type: Output
874
1240
  }] } });
875
1241
 
876
- class AXPDesignerOutlineComponent {
1242
+ class AXPDesignerHistoryComponent {
877
1243
  constructor() {
878
1244
  this.service = inject(AXPDesignerService);
879
- this.collapsedStates = new Map();
880
- this.root = signal(this.service.root());
881
- merge$1(this.service.onRefresh, this.service.onUpdate)
882
- .subscribe(() => {
883
- this.root.update(c => ({ ...this.service.root() }));
884
- });
885
- }
886
- toggleCollapse(node) {
887
- // Toggle the current state or set to true if undefined
888
- this.collapsedStates.set(node, !this.collapsedStates.get(node));
889
- }
890
- isCollapsed(node) {
891
- // Return the collapsed state, default is false (expanded)
892
- return !!this.collapsedStates.get(node);
893
- }
894
- getConfig(node) {
895
- return get(node, "__meta__.config");
896
- }
897
- handleClick(e, node) {
898
- e.stopPropagation();
899
- this.service.select({ widget: node });
900
- }
901
- handleToggleClick(event, item) {
902
- event.stopPropagation(); // Prevents the event from bubbling up to parent elements
903
- this.toggleCollapse(item);
904
1245
  }
905
- handleMouseOver(e, node) {
906
- e.stopPropagation();
907
- this.service.focus({ widget: node });
1246
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1247
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerHistoryComponent, isStandalone: true, selector: "axp-designer-history", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-xs\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\"\n [class.ax-italic]=\"step.isFuture\" [class.ax-text-neutral-400]=\"step.isFuture\"\n [class.ax-bg-neutral-700]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1248
+ }
1249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, decorators: [{
1250
+ type: Component,
1251
+ args: [{ selector: 'axp-designer-history', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1252
+ CommonModule,
1253
+ AXDecoratorModule,
1254
+ AXButtonModule,
1255
+ AXDropdownModule
1256
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\">\n <ax-icon class=\"fa-light fa-ellipsis\"></ax-icon>\n <ax-dropdown-panel class=\"ax-xs\">\n <ax-button-item-list>\n <ax-button-item text=\"Clear\" name=\"add\" (onClick)=\"service.clearHistory()\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.navigateTo($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\"\n [class.ax-italic]=\"step.isFuture\" [class.ax-text-neutral-400]=\"step.isFuture\"\n [class.ax-bg-neutral-700]=\"step.isCurrent\">\n <i class=\"ax-me-1\" [ngClass]=\"step.icon\"></i>\n {{ step.description }}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>" }]
1257
+ }] });
1258
+
1259
+ class AXPDesignerPagesComponent {
1260
+ constructor() {
1261
+ this.service = inject(AXPDesignerService);
908
1262
  }
909
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
910
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "@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</div>\n}", 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: AXBreadcrumbsModule }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
1263
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerPagesComponent, isStandalone: true, selector: "axp-designer-pages", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Pages</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @let count = service.document().children?.length ?? 0;\n @if(count)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( page of service.document().children;track $index)\n {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-neutral-700]=\"$index==service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{$index + 1}}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1)\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDropdownModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
911
1265
  }
912
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
1266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerPagesComponent, decorators: [{
913
1267
  type: Component,
914
- args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1268
+ args: [{ selector: 'axp-designer-pages', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
915
1269
  CommonModule,
916
1270
  AXPLayoutBuilderModule,
917
- AXBreadcrumbsModule,
918
1271
  AXDecoratorModule,
919
- ], template: "@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</div>\n}" }]
920
- }], ctorParameters: () => [] });
1272
+ AXButtonModule,
1273
+ AXDropdownModule
1274
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Pages</span>\n </div>\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <ax-button look=\"ghost\" class=\"ax-xs\" (onClick)=\"service.addNewPage()\" title=\"Add New Page\">\n <ax-icon class=\"fa-light fa-file-circle-plus\"></ax-icon>\n </ax-button>\n <ax-close-button></ax-close-button>\n </div>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @let count = service.document().children?.length ?? 0;\n @if(count)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( page of service.document().children;track $index)\n {\n <li (click)=\"service.goToPage($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group ax-flex ax-justify-between ax-items-center\"\n [class.ax-bg-neutral-700]=\"$index==service.currentPageIndex()\">\n <div>\n <i class=\"fa-light fa-file ax-me-1\"></i>\n Page {{$index + 1}}\n </div>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2\">\n @if(count>1)\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removePage($index)\"></i>\n }\n <i class=\"fa-light fa-clone hover:ax-text-primary-500\" (click)=\"service.clonePage($index)\"></i>\n </div>\n </li>\n }\n </ul>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No pages found in the document\n </div>\n }\n </div>\n</div>" }]
1275
+ }] });
921
1276
 
922
1277
  class AXPLayoutDesignerComponent {
923
1278
  constructor() {
924
- this.currentTabIndex = signal(0);
925
1279
  this.service = inject(AXPDesignerService);
926
- this.tabs = [
927
- {
928
- mode: 'designer',
929
- title: 'Designer',
930
- },
931
- {
932
- mode: 'edit',
933
- title: 'Edit',
934
- },
935
- {
936
- mode: 'view',
937
- title: 'View',
938
- },
939
- {
940
- mode: 'print',
941
- title: 'Print',
942
- },
943
- ];
944
1280
  this.nodeConfig = computed(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') : null);
1281
+ this.service.onUpdate.subscribe((e) => {
1282
+ this.propertyViewer.update(e.values);
1283
+ });
945
1284
  }
946
- handleTabChange(event) {
947
- const index = event.index;
948
- if (this.currentTabIndex() != index) {
949
- this.currentTabIndex.set(index);
950
- this.service.setMode(this.tabs[this.currentTabIndex()].mode);
1285
+ handleKeyboardEvent(event) {
1286
+ if (event.ctrlKey) {
1287
+ switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
1288
+ case 'z':
1289
+ event.preventDefault(); // Prevent the browser's default undo action
1290
+ this.service.undo();
1291
+ break;
1292
+ case 'y':
1293
+ event.preventDefault(); // Prevent the browser's default redo action
1294
+ this.service.redo();
1295
+ break;
1296
+ case 'c':
1297
+ if (this.service.canCutCopy()) {
1298
+ event.preventDefault(); // Prevent the browser's default copy action
1299
+ this.service.copy();
1300
+ }
1301
+ break;
1302
+ case 'd':
1303
+ if (this.service.canCutCopy()) {
1304
+ event.preventDefault(); // Prevent the browser's default copy action
1305
+ this.service.clone();
1306
+ }
1307
+ break;
1308
+ case 'x':
1309
+ if (this.service.canCutCopy()) {
1310
+ event.preventDefault(); // Prevent the browser's default cut action
1311
+ this.service.cut();
1312
+ }
1313
+ break;
1314
+ case 'v':
1315
+ if (this.service.canPaste()) {
1316
+ event.preventDefault(); // Prevent the browser's default paste action
1317
+ this.service.paste();
1318
+ }
1319
+ break;
1320
+ }
951
1321
  }
952
1322
  }
953
- get __class() {
954
- return 'ax-h-full';
955
- }
956
1323
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
957
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", host: { properties: { "class": "this.__class" } }, 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\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center ax-dark\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\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()\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\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-dark 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 <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>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button color=\"success\" look=\"twotone\" text=\"Preview\">\n <ax-icon class=\"fa-solid fa-eye \"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.undo()\" [disabled]=\"!service.canUndo()\">\n <ax-icon class=\"fa-solid fa-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.redo()\" [disabled]=\"!service.canRedo()\">\n <ax-icon class=\"fa-solid fa-rotate-right ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n\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\" class=\"ax-dark\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\">\n </div>\n </ax-content>\n </ax-drawer>\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <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 <axp-designer-outline></axp-designer-outline>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content>\n <div class=\"ax-bg-white ax-h-full ax-block\">\n <axp-designer-board class=\"ax-w-full ax-border-default ax-border ax-flex-1 ax-overflow-auto ax-p-3\">\n </axp-designer-board>\n </div>\n </ax-content>\n </ax-drawer-container>\n </div>\n\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-dark ax-flex ax-items-center\">\n @if(currentTabIndex()==0) {\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n }\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s ax-dark \" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n\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}.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:9999;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: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1$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: 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: i4.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i4.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }, { kind: "component", type: i4.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: i5.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["disabled", "text", "active"], outputs: ["activeChange", "onClick"] }, { kind: "component", type: i5.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn"] }], encapsulation: i0.ViewEncapsulation.None }); }
1324
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, providers: [AXPDesignerService], viewQueries: [{ propertyName: "propertyViewer", first: true, predicate: AXPWidgetPropertyViewerComponent, descendants: true, static: true }], ngImport: i0, template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center \">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\" (onClick)=\"service.openPreview()\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\">\n <ax-content>\n Datasources\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}.axp-designer-board .axp-empty-space{background-color:rgba(var(--ax-color-primary-400),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-400),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-400),50%) 0,rgba(var(--ax-color-primary-400),50%) 60%,transparent 0,transparent);background-size:6px 6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: AXPDesignerBoardComponent, selector: "axp-designer-board" }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget"], outputs: ["onChanged"] }, { kind: "component", type: AXPDesignerBreadcrumbsComponent, selector: "axp-designer-breadcrumbs" }, { kind: "component", type: AXPDesignerOutlineComponent, selector: "axp-designer-outline" }, { kind: "component", type: AXPDesignerHeaderMenuComponent, selector: "axp-designer-header-menu" }, { kind: "component", type: AXPDesignerHistoryComponent, selector: "axp-designer-history" }, { kind: "component", type: AXPDesignerPagesComponent, selector: "axp-designer-pages" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed", "closeOthers"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2$2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2$2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i5.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "selectionChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i4.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], encapsulation: i0.ViewEncapsulation.None }); }
958
1325
  }
959
1326
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, decorators: [{
960
1327
  type: Component,
@@ -965,20 +1332,28 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
965
1332
  AXPWidgetPropertyViewerComponent,
966
1333
  AXPDesignerBreadcrumbsComponent,
967
1334
  AXPDesignerOutlineComponent,
1335
+ AXPDesignerHeaderMenuComponent,
1336
+ AXPDesignerHistoryComponent,
1337
+ AXPDesignerPagesComponent,
968
1338
  AXTabsModule,
969
1339
  AXButtonModule,
970
1340
  AXDrawerModule,
971
1341
  AXDecoratorModule,
972
- AXMenuModule
973
- ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center ax-dark\">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\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()\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n\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-dark 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 <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>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button color=\"success\" look=\"twotone\" text=\"Preview\">\n <ax-icon class=\"fa-solid fa-eye \"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.undo()\" [disabled]=\"!service.canUndo()\">\n <ax-icon class=\"fa-solid fa-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"service.redo()\" [disabled]=\"!service.canRedo()\">\n <ax-icon class=\"fa-solid fa-rotate-right ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n\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\" class=\"ax-dark\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\">\n </div>\n </ax-content>\n </ax-drawer>\n <ax-drawer #outline location=\"start\" mode=\"push\" class=\"ax-dark\">\n <ax-content>\n <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 <axp-designer-outline></axp-designer-outline>\n </div>\n </div>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content>\n <div class=\"ax-bg-white ax-h-full ax-block\">\n <axp-designer-board class=\"ax-w-full ax-border-default ax-border ax-flex-1 ax-overflow-auto ax-p-3\">\n </axp-designer-board>\n </div>\n </ax-content>\n </ax-drawer-container>\n </div>\n\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-dark ax-flex ax-items-center\">\n @if(currentTabIndex()==0) {\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n }\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s ax-dark \" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n\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}.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:9999;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}\n"] }]
974
- }], propDecorators: { __class: [{
975
- type: HostBinding,
976
- args: ['class']
1342
+ AXMenuModule,
1343
+ AXButtonGroupModule,
1344
+ AXDropdownModule,
1345
+ ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center \">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <!-- <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button> -->\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"pages.toggle()\" title=\"Pages\">\n <ax-icon class=\"fa-solid fa-page ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"datasources.toggle()\" title=\"Data Sources\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <!-- <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button> -->\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\" (onClick)=\"service.openPreview()\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <!-- Pages -->\n <ax-drawer #pages location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-pages></axp-designer-pages>\n </ax-content>\n </ax-drawer>\n <!-- Datasources -->\n <ax-drawer #datasources location=\"start\" mode=\"push\">\n <ax-content>\n Datasources\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6;position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:#8b5cf6}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}.axp-designer-board .axp-empty-space{background-color:rgba(var(--ax-color-primary-400),10%);background-image:linear-gradient(135deg,rgba(var(--ax-color-primary-400),50%) 10%,transparent 0,transparent 50%,rgba(var(--ax-color-primary-400),50%) 0,rgba(var(--ax-color-primary-400),50%) 60%,transparent 0,transparent);background-size:6px 6px}\n"] }]
1346
+ }], ctorParameters: () => [], propDecorators: { propertyViewer: [{
1347
+ type: ViewChild,
1348
+ args: [AXPWidgetPropertyViewerComponent, { static: true }]
1349
+ }], handleKeyboardEvent: [{
1350
+ type: HostListener,
1351
+ args: ['document:keydown', ['$event']]
977
1352
  }] } });
978
1353
 
979
1354
  /**
980
1355
  * Generated bundle index. Do not edit.
981
1356
  */
982
1357
 
983
- export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerModule, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
1358
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerGridDrawerComponent, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
984
1359
  //# sourceMappingURL=acorex-platform-layout-designer.mjs.map