@acorex/platform 18.0.10 → 18.0.12

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 (443) hide show
  1. package/auth/lib/session.service.d.ts +2 -2
  2. package/core/index.d.ts +2 -0
  3. package/core/lib/types.d.ts +1 -0
  4. package/core/utils/countdown-timer.d.ts +14 -0
  5. package/core/utils/html-utils.d.ts +9 -0
  6. package/esm2022/auth/lib/session.service.mjs +23 -38
  7. package/esm2022/common/lib/schema/widgets/common-widget-filter/number-widget-filter.component.mjs +2 -2
  8. package/esm2022/common/lib/schema/widgets/number/number-widget-edit.component.mjs +2 -2
  9. package/esm2022/core/index.mjs +3 -1
  10. package/esm2022/core/lib/types.mjs +13 -2
  11. package/esm2022/core/utils/countdown-timer.mjs +49 -0
  12. package/esm2022/core/utils/html-utils.mjs +27 -0
  13. package/esm2022/layout/builder/lib/builder/widget-column-renderer.mjs +3 -3
  14. package/esm2022/layout/builder/lib/builder/widget-container.component.mjs +12 -18
  15. package/esm2022/layout/builder/lib/builder/widget-registery.service.mjs +4 -1
  16. package/esm2022/layout/builder/lib/builder/widget-renderer.component.mjs +19 -12
  17. package/esm2022/layout/builder/lib/builder/widget.types.mjs +57 -58
  18. package/esm2022/layout/designer/index.mjs +7 -2
  19. package/esm2022/layout/designer/lib/board/board.component.mjs +127 -0
  20. package/esm2022/layout/designer/lib/breadcrumbs/breadcrumbs.component.mjs +64 -0
  21. package/esm2022/layout/designer/lib/buttons/add-widget-button/add-widget-button.component.mjs +37 -0
  22. package/esm2022/layout/designer/lib/designer/designer.component.mjs +54 -0
  23. package/esm2022/layout/designer/lib/designer.module.mjs +6 -26
  24. package/esm2022/layout/designer/lib/designer.service.mjs +356 -0
  25. package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +24 -0
  26. package/esm2022/layout/designer/lib/history/history.component.mjs +21 -0
  27. package/esm2022/layout/designer/lib/history-manager.service.mjs +117 -0
  28. package/esm2022/layout/designer/lib/outline/outline.component.mjs +55 -0
  29. package/esm2022/layout/designer/lib/property-viewer/widget-property-viewer.component.mjs +103 -0
  30. package/esm2022/layout/designer/lib/widget-designer-renderer.component.mjs +243 -0
  31. package/esm2022/layout/designer/lib/widget-picker/widget-picker.component.mjs +23 -0
  32. package/esm2022/layout/entity/lib/widgets/lookup-widget/index.mjs +1 -2
  33. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.mjs +3 -3
  34. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.mjs +17 -16
  35. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-filter.component.mjs +3 -3
  36. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-print.component.mjs +3 -3
  37. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.mjs +4 -4
  38. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget.config.mjs +39 -4
  39. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +3 -3
  40. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +3 -3
  41. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.component.mjs +7 -6
  42. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +5 -4
  43. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-modify-view/entity-master-modify-view.component.mjs +4 -4
  44. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +4 -4
  45. package/esm2022/widgets/lib/properties/editors.props.mjs +390 -31
  46. package/esm2022/widgets/lib/properties/table-column.props.mjs +8 -7
  47. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget-view.component.mjs +27 -8
  48. package/esm2022/widgets/lib/widgets/actions/button-widget/button-widget.config.mjs +20 -4
  49. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.mjs +9 -3
  50. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +10 -7
  51. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.mjs +20 -19
  52. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +21 -1
  53. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-column.component.mjs +19 -0
  54. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-edit.component.mjs +48 -0
  55. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-filter.component.mjs +20 -0
  56. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-print.component.mjs +19 -0
  57. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget-view.component.mjs +19 -0
  58. package/esm2022/widgets/lib/widgets/editors/color-box-widget/color-box-widget.config.mjs +34 -0
  59. package/esm2022/widgets/lib/widgets/editors/color-box-widget/index.mjs +7 -0
  60. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-column.component.mjs +23 -6
  61. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.mjs +76 -46
  62. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-filter.component.mjs +3 -3
  63. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-print.component.mjs +3 -3
  64. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-view.component.mjs +110 -8
  65. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget.config.mjs +58 -4
  66. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact.type.mjs +2 -0
  67. package/esm2022/widgets/lib/widgets/editors/contact-widget/index.mjs +1 -2
  68. package/esm2022/widgets/lib/widgets/editors/contact-widget/popup-component.mjs +3 -3
  69. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-column.component.mjs +3 -3
  70. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-edit.component.mjs +48 -37
  71. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-filter.component.mjs +3 -3
  72. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-print.component.mjs +5 -5
  73. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-view.component.mjs +22 -13
  74. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget.config.mjs +16 -2
  75. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/index.mjs +1 -2
  76. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-column.component.mjs +3 -3
  77. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-edit.component.mjs +147 -126
  78. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-filter.component.mjs +3 -3
  79. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-print.component.mjs +3 -3
  80. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-view.component.mjs +30 -26
  81. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget.config.mjs +14 -2
  82. package/esm2022/widgets/lib/widgets/editors/email-box-widget/index.mjs +1 -2
  83. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-column.component.mjs +3 -3
  84. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-edit.component.mjs +14 -10
  85. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-filter.component.mjs +3 -3
  86. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-print.component.mjs +3 -3
  87. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-view.component.mjs +9 -7
  88. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.config.mjs +28 -4
  89. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget.service.mjs +1 -1
  90. package/esm2022/widgets/lib/widgets/editors/file-box-widget/index.mjs +1 -2
  91. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-column.component.mjs +3 -3
  92. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-edit.component.mjs +4 -3
  93. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-filter.component.mjs +3 -3
  94. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-print.component.mjs +3 -3
  95. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-view.component.mjs +4 -3
  96. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget.config.mjs +4 -2
  97. package/esm2022/widgets/lib/widgets/editors/gallery-widget/index.mjs +1 -2
  98. package/esm2022/widgets/lib/widgets/editors/large-text-widget/index.mjs +1 -2
  99. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-column.component.mjs +3 -3
  100. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-edit.component.mjs +22 -17
  101. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-filter.component.mjs +3 -3
  102. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-print.component.mjs +3 -3
  103. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-view.component.mjs +3 -3
  104. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget.config.mjs +13 -9
  105. package/esm2022/widgets/lib/widgets/editors/link-widget/index.mjs +1 -2
  106. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-column.component.mjs +3 -3
  107. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-edit.component.mjs +35 -34
  108. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-filter.component.mjs +3 -3
  109. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-print.component.mjs +3 -3
  110. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-view.component.mjs +3 -3
  111. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget.config.mjs +4 -2
  112. package/esm2022/widgets/lib/widgets/editors/map-box-widget/index.mjs +1 -2
  113. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-column.component.mjs +3 -3
  114. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.mjs +9 -5
  115. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-filter.component.mjs +3 -3
  116. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-print.component.mjs +3 -3
  117. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-view.component.mjs +3 -3
  118. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget.config.mjs +8 -4
  119. package/esm2022/widgets/lib/widgets/editors/number-box-widget/index.mjs +1 -2
  120. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-column.component.mjs +5 -5
  121. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-edit.component.mjs +68 -55
  122. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-filter.component.mjs +3 -3
  123. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-print.component.mjs +3 -3
  124. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-view.component.mjs +20 -17
  125. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget.config.mjs +15 -9
  126. package/esm2022/widgets/lib/widgets/editors/password-box-widget/index.mjs +1 -2
  127. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-column.component.mjs +3 -3
  128. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-edit.component.mjs +24 -11
  129. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-filter.component.mjs +3 -3
  130. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-print.component.mjs +3 -3
  131. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-view.component.mjs +17 -14
  132. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget.config.mjs +15 -4
  133. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/index.mjs +1 -2
  134. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-column.component.mjs +3 -3
  135. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-edit.component.mjs +27 -26
  136. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-filter.component.mjs +3 -3
  137. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-print.component.mjs +3 -3
  138. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-view.component.mjs +11 -9
  139. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget.config.mjs +9 -17
  140. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/index.mjs +1 -2
  141. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-popup.component.mjs +38 -0
  142. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-column.component.mjs +35 -12
  143. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-edit.component.mjs +56 -52
  144. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-filter.component.mjs +3 -3
  145. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-print.component.mjs +3 -3
  146. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-view.component.mjs +26 -20
  147. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget.config.mjs +15 -2
  148. package/esm2022/widgets/lib/widgets/editors/select-box-widget/index.mjs +1 -2
  149. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-column.component.mjs +3 -3
  150. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.mjs +38 -33
  151. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-filter.component.mjs +3 -3
  152. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-print.component.mjs +3 -3
  153. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-view.component.mjs +10 -10
  154. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget.config.mjs +15 -4
  155. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/index.mjs +1 -2
  156. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-column.component.mjs +3 -3
  157. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-edit.component.mjs +37 -23
  158. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-filter.component.mjs +3 -3
  159. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-print.component.mjs +3 -3
  160. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-view.component.mjs +11 -8
  161. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget.config.mjs +4 -2
  162. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/index.mjs +1 -2
  163. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-column.component.mjs +3 -3
  164. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-edit.component.mjs +17 -15
  165. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-filter.component.mjs +3 -3
  166. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-print.component.mjs +3 -3
  167. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-view.component.mjs +6 -5
  168. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget.config.mjs +12 -2
  169. package/esm2022/widgets/lib/widgets/editors/text-box-widget/index.mjs +1 -2
  170. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-column.component.mjs +3 -3
  171. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.mjs +21 -23
  172. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-filter.component.mjs +3 -3
  173. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-print.component.mjs +3 -3
  174. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-view.component.mjs +18 -11
  175. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget.config.mjs +15 -13
  176. package/esm2022/widgets/lib/widgets/editors/toggle-widget/index.mjs +1 -2
  177. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-column.component.mjs +9 -3
  178. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-edit.component.mjs +11 -6
  179. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-filter.component.mjs +3 -3
  180. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-print.component.mjs +3 -3
  181. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-view.component.mjs +22 -16
  182. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget.config.mjs +17 -4
  183. package/esm2022/widgets/lib/widgets/index.mjs +2 -1
  184. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget-designer.component.mjs +65 -0
  185. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget-view.component.mjs +48 -0
  186. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget.config.mjs +21 -3
  187. package/esm2022/widgets/lib/widgets/layout/block-widget/index.mjs +3 -2
  188. package/esm2022/widgets/lib/widgets/layout/page-widget/index.mjs +3 -0
  189. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.mjs +65 -0
  190. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget-view.component.mjs +42 -0
  191. package/esm2022/widgets/lib/widgets/layout/page-widget/page-widget.config.mjs +28 -0
  192. package/esm2022/widgets/lib/widgets/layout/repeater-widget/index.mjs +1 -3
  193. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-designer.component.mjs +39 -8
  194. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-edit.component.mjs +3 -3
  195. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-print.component.mjs +3 -3
  196. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-view.component.mjs +6 -6
  197. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget.config.mjs +5 -8
  198. package/esm2022/widgets/lib/widgets/layout/text-block-widget/index.mjs +3 -0
  199. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget-view.component.mjs +29 -0
  200. package/esm2022/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.mjs +39 -0
  201. package/esm2022/widgets/lib/widgets.module.mjs +18 -6
  202. package/fesm2022/acorex-platform-auth.mjs +22 -37
  203. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  204. package/fesm2022/{acorex-platform-common-number-widget-edit.component-bTHacO49.mjs → acorex-platform-common-number-widget-edit.component-XSWI6466.mjs} +2 -2
  205. package/fesm2022/{acorex-platform-common-number-widget-edit.component-bTHacO49.mjs.map → acorex-platform-common-number-widget-edit.component-XSWI6466.mjs.map} +1 -1
  206. package/fesm2022/{acorex-platform-common-number-widget-filter.component-CFqNphMw.mjs → acorex-platform-common-number-widget-filter.component-BOT9wPJ5.mjs} +2 -2
  207. package/fesm2022/{acorex-platform-common-number-widget-filter.component-CFqNphMw.mjs.map → acorex-platform-common-number-widget-filter.component-BOT9wPJ5.mjs.map} +1 -1
  208. package/fesm2022/acorex-platform-common.mjs +2 -2
  209. package/fesm2022/acorex-platform-core.mjs +90 -0
  210. package/fesm2022/acorex-platform-core.mjs.map +1 -1
  211. package/fesm2022/acorex-platform-layout-builder.mjs +89 -86
  212. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  213. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs +26 -0
  214. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs.map +1 -0
  215. package/fesm2022/acorex-platform-layout-designer.mjs +1081 -59
  216. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  217. package/fesm2022/acorex-platform-layout-entity.mjs +59 -43
  218. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  219. package/fesm2022/{acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs → acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs} +7 -5
  220. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-C9L8cyBm.mjs.map +1 -0
  221. package/fesm2022/acorex-platform-layouts.mjs +6 -6
  222. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  223. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-D1vzPrng.mjs → acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs} +5 -4
  224. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-Cv0mt0pU.mjs.map +1 -0
  225. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-DCE6c3Is.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BDk03AnX.mjs} +4 -4
  226. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDk03AnX.mjs.map +1 -0
  227. package/fesm2022/acorex-platform-themes-default.mjs +7 -7
  228. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  229. package/fesm2022/{acorex-platform-widgets-checkbox-widget-column.component-CJUV6lFi.mjs → acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs} +9 -3
  230. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-BzNhzB9y.mjs.map +1 -0
  231. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-T-tXqoMd.mjs → acorex-platform-widgets-checkbox-widget-view.component-BCsej7C6.mjs} +20 -19
  232. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-BCsej7C6.mjs.map +1 -0
  233. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs +68 -0
  234. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +1 -0
  235. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs +41 -0
  236. package/fesm2022/acorex-platform-widgets-rich-text-popup.component-RCdFIz45.mjs.map +1 -0
  237. package/fesm2022/acorex-platform-widgets.mjs +2397 -1474
  238. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  239. package/layout/builder/lib/builder/widget-container.component.d.ts +5 -5
  240. package/layout/builder/lib/builder/widget-registery.service.d.ts +1 -0
  241. package/layout/builder/lib/builder/widget-renderer.component.d.ts +6 -3
  242. package/layout/builder/lib/builder/widget.types.d.ts +54 -33
  243. package/layout/designer/index.d.ts +6 -1
  244. package/layout/designer/lib/board/board.component.d.ts +16 -0
  245. package/layout/designer/lib/breadcrumbs/breadcrumbs.component.d.ts +11 -0
  246. package/layout/designer/lib/buttons/add-widget-button/add-widget-button.component.d.ts +9 -0
  247. package/layout/designer/lib/designer/designer.component.d.ts +9 -0
  248. package/layout/designer/lib/designer.module.d.ts +1 -7
  249. package/layout/designer/lib/designer.service.d.ts +107 -0
  250. package/layout/designer/lib/header-menu/header-menu.component.d.ts +7 -0
  251. package/layout/designer/lib/history/history.component.d.ts +7 -0
  252. package/layout/designer/lib/history-manager.service.d.ts +31 -0
  253. package/layout/designer/lib/outline/outline.component.d.ts +17 -0
  254. package/layout/designer/lib/{components → property-viewer}/widget-property-viewer.component.d.ts +12 -12
  255. package/layout/designer/lib/widget-designer-renderer.component.d.ts +38 -0
  256. package/layout/designer/lib/widget-picker/widget-picker.component.d.ts +9 -0
  257. package/layout/entity/lib/widgets/lookup-widget/index.d.ts +0 -1
  258. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-column.component.d.ts +2 -2
  259. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-edit.component.d.ts +9 -9
  260. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-filter.component.d.ts +2 -2
  261. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-print.component.d.ts +2 -2
  262. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-view.component.d.ts +5 -5
  263. package/package.json +7 -7
  264. package/widgets/lib/properties/editors.props.d.ts +22 -1
  265. package/widgets/lib/widgets/actions/button-widget/button-widget-view.component.d.ts +8 -3
  266. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-column.component.d.ts +4 -4
  267. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.d.ts +6 -4
  268. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.d.ts +5 -5
  269. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-column.component.d.ts +6 -0
  270. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-edit.component.d.ts +10 -0
  271. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-filter.component.d.ts +6 -0
  272. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-print.component.d.ts +6 -0
  273. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget-view.component.d.ts +6 -0
  274. package/widgets/lib/widgets/editors/color-box-widget/color-box-widget.config.d.ts +2 -0
  275. package/widgets/lib/widgets/editors/color-box-widget/index.d.ts +6 -0
  276. package/widgets/lib/widgets/editors/contact-widget/contact-widget-column.component.d.ts +4 -2
  277. package/widgets/lib/widgets/editors/contact-widget/contact-widget-edit.component.d.ts +11 -15
  278. package/widgets/lib/widgets/editors/contact-widget/contact-widget-filter.component.d.ts +2 -2
  279. package/widgets/lib/widgets/editors/contact-widget/contact-widget-print.component.d.ts +2 -2
  280. package/widgets/lib/widgets/editors/contact-widget/contact-widget-view.component.d.ts +15 -2
  281. package/widgets/lib/widgets/editors/contact-widget/contact.type.d.ts +5 -0
  282. package/widgets/lib/widgets/editors/contact-widget/index.d.ts +0 -1
  283. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-column.component.d.ts +2 -2
  284. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-edit.component.d.ts +7 -7
  285. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-filter.component.d.ts +2 -2
  286. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-print.component.d.ts +2 -2
  287. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-view.component.d.ts +4 -4
  288. package/widgets/lib/widgets/editors/date-time-box-widget/index.d.ts +0 -1
  289. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-column.component.d.ts +2 -2
  290. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-edit.component.d.ts +8 -7
  291. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-filter.component.d.ts +2 -2
  292. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-print.component.d.ts +2 -2
  293. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-view.component.d.ts +4 -4
  294. package/widgets/lib/widgets/editors/email-box-widget/index.d.ts +0 -1
  295. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-column.component.d.ts +2 -2
  296. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-edit.component.d.ts +6 -5
  297. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-filter.component.d.ts +2 -2
  298. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-print.component.d.ts +2 -2
  299. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-view.component.d.ts +4 -4
  300. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget.service.d.ts +1 -1
  301. package/widgets/lib/widgets/editors/file-box-widget/index.d.ts +0 -1
  302. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-column.component.d.ts +2 -2
  303. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-edit.component.d.ts +3 -3
  304. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-filter.component.d.ts +2 -2
  305. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-print.component.d.ts +2 -2
  306. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-view.component.d.ts +3 -3
  307. package/widgets/lib/widgets/editors/gallery-widget/index.d.ts +0 -1
  308. package/widgets/lib/widgets/editors/large-text-widget/index.d.ts +0 -1
  309. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-column.component.d.ts +2 -2
  310. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-edit.component.d.ts +7 -5
  311. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-filter.component.d.ts +2 -2
  312. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-print.component.d.ts +2 -2
  313. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-view.component.d.ts +2 -2
  314. package/widgets/lib/widgets/editors/link-widget/index.d.ts +0 -1
  315. package/widgets/lib/widgets/editors/link-widget/link-widget-column.component.d.ts +2 -2
  316. package/widgets/lib/widgets/editors/link-widget/link-widget-edit.component.d.ts +9 -9
  317. package/widgets/lib/widgets/editors/link-widget/link-widget-filter.component.d.ts +2 -2
  318. package/widgets/lib/widgets/editors/link-widget/link-widget-print.component.d.ts +2 -2
  319. package/widgets/lib/widgets/editors/link-widget/link-widget-view.component.d.ts +2 -2
  320. package/widgets/lib/widgets/editors/map-box-widget/index.d.ts +0 -1
  321. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-column.component.d.ts +2 -2
  322. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-edit.component.d.ts +5 -5
  323. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-filter.component.d.ts +2 -2
  324. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-print.component.d.ts +2 -2
  325. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-view.component.d.ts +6 -6
  326. package/widgets/lib/widgets/editors/number-box-widget/index.d.ts +0 -1
  327. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-column.component.d.ts +2 -2
  328. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-edit.component.d.ts +8 -11
  329. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-filter.component.d.ts +2 -2
  330. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-print.component.d.ts +2 -2
  331. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-view.component.d.ts +5 -7
  332. package/widgets/lib/widgets/editors/password-box-widget/index.d.ts +0 -1
  333. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-column.component.d.ts +2 -2
  334. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-edit.component.d.ts +4 -2
  335. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-filter.component.d.ts +2 -2
  336. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-print.component.d.ts +2 -2
  337. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-view.component.d.ts +6 -5
  338. package/widgets/lib/widgets/editors/phone-box-widget/index.d.ts +0 -1
  339. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-column.component.d.ts +2 -2
  340. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-edit.component.d.ts +7 -8
  341. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-filter.component.d.ts +2 -2
  342. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-print.component.d.ts +2 -2
  343. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-view.component.d.ts +4 -4
  344. package/widgets/lib/widgets/editors/rich-text-widget/index.d.ts +0 -1
  345. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-popup.component.d.ts +9 -0
  346. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-column.component.d.ts +11 -3
  347. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-edit.component.d.ts +7 -29
  348. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-filter.component.d.ts +2 -2
  349. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-print.component.d.ts +2 -2
  350. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-view.component.d.ts +10 -6
  351. package/widgets/lib/widgets/editors/select-box-widget/index.d.ts +0 -1
  352. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-column.component.d.ts +2 -2
  353. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-edit.component.d.ts +10 -7
  354. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-filter.component.d.ts +2 -2
  355. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-print.component.d.ts +2 -2
  356. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-view.component.d.ts +5 -5
  357. package/widgets/lib/widgets/editors/selection-list-widget/index.d.ts +0 -1
  358. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-column.component.d.ts +2 -2
  359. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-edit.component.d.ts +10 -7
  360. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-filter.component.d.ts +2 -2
  361. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-print.component.d.ts +2 -2
  362. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-view.component.d.ts +5 -5
  363. package/widgets/lib/widgets/editors/signature-pad-widget/index.d.ts +0 -1
  364. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-column.component.d.ts +2 -2
  365. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-edit.component.d.ts +4 -2
  366. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-filter.component.d.ts +2 -2
  367. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-print.component.d.ts +2 -2
  368. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-view.component.d.ts +3 -2
  369. package/widgets/lib/widgets/editors/text-box-widget/index.d.ts +0 -1
  370. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-column.component.d.ts +2 -2
  371. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-edit.component.d.ts +7 -8
  372. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-filter.component.d.ts +2 -2
  373. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-print.component.d.ts +2 -2
  374. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-view.component.d.ts +3 -3
  375. package/widgets/lib/widgets/editors/toggle-widget/index.d.ts +0 -1
  376. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-column.component.d.ts +3 -3
  377. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-edit.component.d.ts +5 -2
  378. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-filter.component.d.ts +2 -2
  379. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-print.component.d.ts +2 -2
  380. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-view.component.d.ts +5 -5
  381. package/widgets/lib/widgets/index.d.ts +1 -0
  382. package/widgets/lib/widgets/layout/block-widget/block-widget-designer.component.d.ts +11 -0
  383. package/widgets/lib/widgets/layout/block-widget/{block-widget.component.d.ts → block-widget-view.component.d.ts} +5 -3
  384. package/widgets/lib/widgets/layout/block-widget/index.d.ts +2 -1
  385. package/widgets/lib/widgets/layout/page-widget/index.d.ts +2 -0
  386. package/widgets/lib/widgets/layout/page-widget/page-widget-designer.component.d.ts +10 -0
  387. package/widgets/lib/widgets/layout/page-widget/page-widget-view.component.d.ts +8 -0
  388. package/widgets/lib/widgets/layout/page-widget/page-widget.config.d.ts +2 -0
  389. package/widgets/lib/widgets/layout/repeater-widget/index.d.ts +0 -2
  390. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-designer.component.d.ts +4 -2
  391. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-edit.component.d.ts +2 -2
  392. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-print.component.d.ts +2 -2
  393. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-view.component.d.ts +2 -2
  394. package/widgets/lib/widgets/layout/text-block-widget/index.d.ts +2 -0
  395. package/widgets/lib/widgets/layout/text-block-widget/text-block-widget-view.component.d.ts +10 -0
  396. package/widgets/lib/widgets/layout/text-block-widget/text-block-widget.config.d.ts +2 -0
  397. package/esm2022/layout/designer/lib/components/widget-property-viewer.component.mjs +0 -86
  398. package/esm2022/layout/entity/lib/widgets/lookup-widget/lookup-widget-designer.component.mjs +0 -19
  399. package/esm2022/widgets/lib/widgets/editors/contact-widget/contact-widget-designer.component.mjs +0 -19
  400. package/esm2022/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-designer.component.mjs +0 -19
  401. package/esm2022/widgets/lib/widgets/editors/email-box-widget/email-box-widget-designer.component.mjs +0 -19
  402. package/esm2022/widgets/lib/widgets/editors/file-box-widget/file-box-widget-designer.component.mjs +0 -19
  403. package/esm2022/widgets/lib/widgets/editors/gallery-widget/gallery-widget-designer.component.mjs +0 -19
  404. package/esm2022/widgets/lib/widgets/editors/large-text-widget/large-text-widget-designer.component.mjs +0 -19
  405. package/esm2022/widgets/lib/widgets/editors/link-widget/link-widget-designer.component.mjs +0 -19
  406. package/esm2022/widgets/lib/widgets/editors/map-box-widget/map-box-widget-designer.component.mjs +0 -19
  407. package/esm2022/widgets/lib/widgets/editors/number-box-widget/number-box-widget-designer.component.mjs +0 -19
  408. package/esm2022/widgets/lib/widgets/editors/password-box-widget/password-box-widget-designer.component.mjs +0 -19
  409. package/esm2022/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-designer.component.mjs +0 -19
  410. package/esm2022/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-designer.component.mjs +0 -19
  411. package/esm2022/widgets/lib/widgets/editors/select-box-widget/select-box-widget-designer.component.mjs +0 -19
  412. package/esm2022/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-designer.component.mjs +0 -19
  413. package/esm2022/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-designer.component.mjs +0 -19
  414. package/esm2022/widgets/lib/widgets/editors/text-box-widget/text-box-widget-designer.component.mjs +0 -19
  415. package/esm2022/widgets/lib/widgets/editors/toggle-widget/toggle-widget-designer.component.mjs +0 -19
  416. package/esm2022/widgets/lib/widgets/layout/block-widget/block-widget.component.mjs +0 -34
  417. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-column.component.mjs +0 -19
  418. package/esm2022/widgets/lib/widgets/layout/repeater-widget/repeater-widget-filter.component.mjs +0 -20
  419. package/fesm2022/acorex-platform-layouts-entity-modify-view.component-CjofXJku.mjs.map +0 -1
  420. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-D1vzPrng.mjs.map +0 -1
  421. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-DCE6c3Is.mjs.map +0 -1
  422. package/fesm2022/acorex-platform-widgets-checkbox-widget-column.component-CJUV6lFi.mjs.map +0 -1
  423. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-T-tXqoMd.mjs.map +0 -1
  424. package/layout/entity/lib/widgets/lookup-widget/lookup-widget-designer.component.d.ts +0 -6
  425. package/widgets/lib/widgets/editors/contact-widget/contact-widget-designer.component.d.ts +0 -6
  426. package/widgets/lib/widgets/editors/date-time-box-widget/date-time-box-widget-designer.component.d.ts +0 -6
  427. package/widgets/lib/widgets/editors/email-box-widget/email-box-widget-designer.component.d.ts +0 -6
  428. package/widgets/lib/widgets/editors/file-box-widget/file-box-widget-designer.component.d.ts +0 -6
  429. package/widgets/lib/widgets/editors/gallery-widget/gallery-widget-designer.component.d.ts +0 -6
  430. package/widgets/lib/widgets/editors/large-text-widget/large-text-widget-designer.component.d.ts +0 -6
  431. package/widgets/lib/widgets/editors/link-widget/link-widget-designer.component.d.ts +0 -6
  432. package/widgets/lib/widgets/editors/map-box-widget/map-box-widget-designer.component.d.ts +0 -6
  433. package/widgets/lib/widgets/editors/number-box-widget/number-box-widget-designer.component.d.ts +0 -6
  434. package/widgets/lib/widgets/editors/password-box-widget/password-box-widget-designer.component.d.ts +0 -6
  435. package/widgets/lib/widgets/editors/phone-box-widget/phone-box-widget-designer.component.d.ts +0 -6
  436. package/widgets/lib/widgets/editors/rich-text-widget/rich-text-widget-designer.component.d.ts +0 -6
  437. package/widgets/lib/widgets/editors/select-box-widget/select-box-widget-designer.component.d.ts +0 -6
  438. package/widgets/lib/widgets/editors/selection-list-widget/selection-list-widget-designer.component.d.ts +0 -6
  439. package/widgets/lib/widgets/editors/signature-pad-widget/signature-pad-widget-designer.component.d.ts +0 -6
  440. package/widgets/lib/widgets/editors/text-box-widget/text-box-widget-designer.component.d.ts +0 -6
  441. package/widgets/lib/widgets/editors/toggle-widget/toggle-widget-designer.component.d.ts +0 -6
  442. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-column.component.d.ts +0 -6
  443. package/widgets/lib/widgets/layout/repeater-widget/repeater-widget-filter.component.d.ts +0 -6
@@ -1,14 +1,1006 @@
1
- import * as i3 from '@acorex/platform/layout/builder';
2
- import { AXPWidgetRegistryService, AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
1
+ import * as i3$1 from '@acorex/platform/layout/builder';
2
+ import { AXPWidgetRegistryService, AXP_WIDGET_TOKEN, AXPLayoutBuilderModule, AXPContainerWidgetComponent } from '@acorex/platform/layout/builder';
3
+ import * as i1 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
3
5
  import * as i0 from '@angular/core';
4
- import { input, inject, signal, computed, effect, Component, NgModule } from '@angular/core';
5
- import { capitalize, unionBy, sortBy, isArray, isNil, isEmpty, merge, cloneDeep } from 'lodash-es';
6
- import * as i1 from '@acorex/components/collapse';
7
- import { AXCollapseModule } from '@acorex/components/collapse';
8
- import * as i2 from '@acorex/components/tabs';
6
+ import { signal, computed, Injectable, inject, Injector, NgZone, ElementRef, input, effect, Component, ChangeDetectionStrategy, HostListener, ViewEncapsulation, NgModule, EventEmitter, untracked, Output } from '@angular/core';
7
+ import * as i3 from '@acorex/components/skeleton';
8
+ import { AXSkeletonModule } from '@acorex/components/skeleton';
9
+ import { AXUnsubscriber } from '@acorex/core/utils';
10
+ import * as i2 from '@angular/cdk/portal';
11
+ import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
12
+ import { cloneDeep, merge, sortBy, set, get, capitalize, unionBy, isArray, isNil, isEmpty } from 'lodash-es';
13
+ import { Subject, first, merge as merge$1 } from 'rxjs';
14
+ import { AXPopupService } from '@acorex/components/popup';
15
+ import * as i2$1 from '@acorex/components/button';
16
+ import { AXButtonModule } from '@acorex/components/button';
17
+ import * as i1$1 from '@acorex/components/decorators';
18
+ import { AXDecoratorModule } from '@acorex/components/decorators';
19
+ import * as i5 from '@acorex/components/button-group';
20
+ import { AXButtonGroupModule } from '@acorex/components/button-group';
21
+ import * as i3$2 from '@acorex/components/drawer';
22
+ import { AXDrawerModule } from '@acorex/components/drawer';
23
+ import * as i6 from '@acorex/components/dropdown';
24
+ import { AXDropdownModule } from '@acorex/components/dropdown';
25
+ import * as i2$2 from '@acorex/components/menu';
26
+ import { AXMenuModule } from '@acorex/components/menu';
27
+ import * as i2$3 from '@acorex/components/tabs';
9
28
  import { AXTabsModule } from '@acorex/components/tabs';
10
- import { CommonModule } from '@angular/common';
11
- import { AXPWidgetsModule } from '@acorex/platform/widgets';
29
+ import * as i1$2 from '@acorex/components/breadcrumbs';
30
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
31
+ import * as i1$3 from '@acorex/components/collapse';
32
+ import { AXCollapseModule } from '@acorex/components/collapse';
33
+
34
+ class AXPObjectHistoryManager {
35
+ constructor() {
36
+ this.undoStack = signal([]); // Undo history as a signal
37
+ this.redoStack = signal([]); // Redo history as a signal
38
+ this._currentState = signal(null); // Current state as a signal
39
+ this.maxHistorySize = 50;
40
+ this.revertedIndex = null; // Track the index when reverting
41
+ this.currentState = this._currentState.asReadonly();
42
+ this.canUndo = computed(() => this.undoStack().length > 0);
43
+ this.canRedo = computed(() => this.redoStack().length > 0);
44
+ // Get the undo history for UI with disabled future states
45
+ this.history = computed(() => {
46
+ const undoHistory = this.undoStack();
47
+ return undoHistory.map((state, index) => ({
48
+ ...state,
49
+ index,
50
+ disabled: this.revertedIndex !== null && index > this.revertedIndex
51
+ }));
52
+ });
53
+ }
54
+ // Save a new state and clear redo if necessary
55
+ saveState(newState, description) {
56
+ const newHistoryState = {
57
+ state: cloneDeep(newState),
58
+ date: new Date(),
59
+ description: description,
60
+ };
61
+ // Limit undo history size
62
+ if (this.undoStack().length >= this.maxHistorySize) {
63
+ this.undoStack.set(this.undoStack().slice(1)); // Remove oldest state
64
+ }
65
+ // Add the current state to the undo stack
66
+ //if (this._currentState()) {
67
+ this.undoStack.set([...this.undoStack(), this._currentState()]);
68
+ //}
69
+ // Set the new state as the current state
70
+ this._currentState.set(newHistoryState);
71
+ // Clear the redo stack if a new state is saved after undoing
72
+ if (this.revertedIndex !== null) {
73
+ this.redoStack.set([]);
74
+ this.revertedIndex = null; // Reset reverted index
75
+ }
76
+ }
77
+ // Update the current state's last entry in the undo stack
78
+ updateState(newState) {
79
+ const lastStateIndex = this.undoStack().length - 1;
80
+ // Check if there is a valid state to update
81
+ if (lastStateIndex >= 0) {
82
+ const lastState = this.undoStack()[lastStateIndex];
83
+ // Update the state in the last history entry
84
+ const updatedState = {
85
+ ...lastState,
86
+ state: cloneDeep(newState),
87
+ date: new Date() // Update the date to reflect the change
88
+ };
89
+ // Update the undo stack with the modified state
90
+ const updatedUndoStack = [...this.undoStack()];
91
+ updatedUndoStack[lastStateIndex] = updatedState;
92
+ this.undoStack.set(updatedUndoStack);
93
+ // Also update the currentState to reflect the latest change
94
+ this._currentState.set(updatedState);
95
+ }
96
+ }
97
+ // Undo the last action and update the current state
98
+ undo() {
99
+ if (this.undoStack().length > 0) {
100
+ const previousState = this.undoStack().pop(); // Get the last state
101
+ this.redoStack.set([...this.redoStack(), this._currentState()]); // Save current state to redo stack
102
+ this._currentState.set(previousState); // Revert to the previous state
103
+ this.revertedIndex = this.undoStack().length - 1; // Update reverted index
104
+ }
105
+ }
106
+ // Redo the last undone action and update the current state
107
+ redo() {
108
+ if (this.redoStack().length > 0) {
109
+ const nextState = this.redoStack().pop(); // Get the next state
110
+ this.undoStack.set([...this.undoStack(), this._currentState()]); // Save current state to undo stack
111
+ this._currentState.set(nextState); // Apply the redo state
112
+ this.revertedIndex = this.undoStack().length - 1; // Update reverted index
113
+ }
114
+ }
115
+ // Revert to a specific state by index in the undo stack
116
+ revert(index) {
117
+ if (index < 0 || index >= this.undoStack().length) {
118
+ return; // Invalid index, do nothing
119
+ }
120
+ const targetState = this.undoStack()[index];
121
+ const currentStateSnapshot = this._currentState(); // Save the current state for redo
122
+ // Move states after the reverted index to the redo stack
123
+ const statesToRedo = this.undoStack().slice(index + 1);
124
+ this.redoStack.set([currentStateSnapshot, ...statesToRedo]);
125
+ // Update the undo stack to the reverted point
126
+ this.undoStack.set(this.undoStack().slice(0, index + 1));
127
+ // Set the reverted state as the current state
128
+ this._currentState.set(targetState);
129
+ this.revertedIndex = index; // Track the reverted index
130
+ }
131
+ // Clear all history
132
+ clear() {
133
+ this.undoStack.set([]);
134
+ this.redoStack.set([]);
135
+ this.revertedIndex = null;
136
+ this._currentState.set(null);
137
+ }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, providedIn: 'root' }); }
140
+ }
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPObjectHistoryManager, decorators: [{
142
+ type: Injectable,
143
+ args: [{
144
+ providedIn: 'root',
145
+ }]
146
+ }] });
147
+
148
+ class AXPDesignerService {
149
+ constructor() {
150
+ this.popupService = inject(AXPopupService);
151
+ this.widgetRegisteryService = inject(AXPWidgetRegistryService);
152
+ this.historyManager = inject((AXPObjectHistoryManager));
153
+ this.clipboard = signal(null);
154
+ this.canCutCopy = computed(() => this.selectedNode() != null && this.selectedNode()?.name != "page");
155
+ this.canPaste = computed(() => (this.clipboard() != null));
156
+ this.history = computed(() => this.historyManager.history());
157
+ this.canUndo = computed(() => this.historyManager.canUndo());
158
+ this.canRedo = computed(() => this.historyManager.canRedo());
159
+ this.root = signal(this.createPage());
160
+ this.breadcrumbs = computed(() => {
161
+ return this.selectedNode() ? this.findBreadcrumbs(this.root(), this.selectedNode()) ?? [] : [];
162
+ });
163
+ this.selectedNode = signal(null);
164
+ this._lastSelectedNode = null;
165
+ this._focusedNode = null;
166
+ this.focusedNode = () => this._focusedNode;
167
+ this.mode = signal('designer');
168
+ this.size = signal('xl');
169
+ this.onSelected = new Subject();
170
+ this.onRefresh = new Subject();
171
+ this.onUpdate = new Subject();
172
+ this.onFocused = new Subject();
173
+ }
174
+ register(command) {
175
+ if (!this._lastSelectedNode) {
176
+ this.select({ widget: command.widget });
177
+ }
178
+ else {
179
+ this.select({ widget: this._lastSelectedNode });
180
+ }
181
+ }
182
+ select(command) {
183
+ this.selectedNode.set(command.widget);
184
+ this._lastSelectedNode = this.selectedNode();
185
+ this.onSelected.next(command);
186
+ }
187
+ update(command) {
188
+ if (command.mode == 'update') {
189
+ this.historyManager.saveState(cloneDeep(this.root()), `Updated ${this.selectedNode()?.name}`);
190
+ }
191
+ this.selectedNode.update(c => merge(this.selectedNode(), command.values));
192
+ this.onUpdate.next({ widget: this.selectedNode(), values: command.values });
193
+ }
194
+ focus(command) {
195
+ if (this._focusedNode != command.widget) {
196
+ this._focusedNode = command.widget;
197
+ this.onFocused.next({ widget: this._focusedNode });
198
+ }
199
+ }
200
+ refresh(command) {
201
+ this.onRefresh.next({ widget: command.widget });
202
+ }
203
+ findBreadcrumbs(node, targetNode, breadcrumb = []) {
204
+ // Add the current node to the breadcrumb path
205
+ const currentBreadcrumb = [...breadcrumb, node];
206
+ // Check if the current node is the target node
207
+ if (node === targetNode) {
208
+ return currentBreadcrumb;
209
+ }
210
+ // If the node has children, recursively search them
211
+ if (node.children) {
212
+ for (const child of node.children) {
213
+ const result = this.findBreadcrumbs(child, targetNode, currentBreadcrumb);
214
+ if (result) {
215
+ return result;
216
+ }
217
+ }
218
+ }
219
+ // Return undefined if no match is found
220
+ return undefined;
221
+ }
222
+ async showPicker(currentNode) {
223
+ const com = await import('./acorex-platform-layout-designer-widget-picker.component-DkZGbnkz.mjs').then(c => c.AXPDesignerWidgetPickerComponent);
224
+ const result = await this.popupService.open(com, {
225
+ title: "Widget Gallery",
226
+ size: 'md',
227
+ closeButton: true,
228
+ data: {
229
+ widgets: sortBy(this.widgetRegisteryService.all().filter(c => c.visible != false), c => c.title)
230
+ }
231
+ });
232
+ if ((result.data?.widgets ?? []).length) {
233
+ const selected = result.data?.widgets;
234
+ selected.forEach(c => {
235
+ this.addWidget(currentNode, { type: c.name });
236
+ });
237
+ }
238
+ }
239
+ createPage() {
240
+ const config = this.widgetRegisteryService.resolve('page');
241
+ const page = {
242
+ type: 'page',
243
+ children: [],
244
+ name: "page",
245
+ };
246
+ set(page, '__meta__.id', Math.random() * Math.pow(10, 18));
247
+ set(page, '__meta__.config', config);
248
+ this.historyManager.saveState(page, "New");
249
+ return page;
250
+ }
251
+ findWidgetById(root, id) {
252
+ if (get(root, "__meta__.id") === id) {
253
+ return root; // Return the root if it matches the ID
254
+ }
255
+ if (!root.children)
256
+ return null;
257
+ for (const child of root.children) {
258
+ const found = this.findWidgetById(child, id);
259
+ if (found) {
260
+ return found; // Return the found child
261
+ }
262
+ }
263
+ return null; // Node not found
264
+ }
265
+ findParent(id, parent = this.root()) {
266
+ if (!parent.children)
267
+ return null;
268
+ if (parent.children.some(child => get(child, "__meta__.id") === id)) {
269
+ return parent; // Return this node as it's the parent of the node with the given ID
270
+ }
271
+ for (const child of parent.children) {
272
+ const foundParent = this.findParent(id, child);
273
+ if (foundParent)
274
+ return foundParent;
275
+ }
276
+ return null; // No parent found
277
+ }
278
+ findNearestContainer(node, searchUpward = true) {
279
+ if (searchUpward) {
280
+ let current = node;
281
+ while (current) {
282
+ const config = this.widgetRegisteryService.resolve(current.type);
283
+ if (config && config.container) {
284
+ return current;
285
+ }
286
+ current = this.findParent(get(current, "__meta__.id")); // Use findParent to navigate upwards
287
+ }
288
+ }
289
+ else {
290
+ // Recursive search to find the first container among children
291
+ if (node.children) {
292
+ for (const child of node.children) {
293
+ const config = this.widgetRegisteryService.resolve(child.type);
294
+ if (config && config.container) {
295
+ return child;
296
+ }
297
+ const foundContainer = this.findNearestContainer(child, false); // Continue searching downwards
298
+ if (foundContainer)
299
+ return foundContainer;
300
+ }
301
+ }
302
+ }
303
+ return null; // Return null if no container found
304
+ }
305
+ addWidget(currentNode, node) {
306
+ if (!currentNode)
307
+ return null;
308
+ //
309
+ const cloned = cloneDeep(node);
310
+ this.historyManager.saveState(cloneDeep(this.root()), `Added ${cloned.type}`);
311
+ //
312
+ if (!currentNode.children) {
313
+ currentNode.children = [];
314
+ }
315
+ const config = this.widgetRegisteryService.resolve(node.type);
316
+ //
317
+ cloned.name = this.generateUniqueName(node.type);
318
+ set(cloned, '__meta__.id', Math.random() * Math.pow(10, 18));
319
+ set(cloned, '__meta__.config', config);
320
+ //
321
+ currentNode.children.push(cloned);
322
+ //
323
+ this.historyManager.updateState(this.root());
324
+ //
325
+ this.refresh({ widget: currentNode });
326
+ this.select({ widget: cloned });
327
+ return cloned;
328
+ }
329
+ removeWidget(node) {
330
+ if (node.type === "page") {
331
+ console.error("Cannot remove the page node.");
332
+ return; // Prevent removing the root page node
333
+ }
334
+ this.historyManager.saveState(cloneDeep(this.root()), `Removed ${node.name}`);
335
+ const nodeIdToRemove = get(node, "__meta__.id");
336
+ if (!nodeIdToRemove) {
337
+ throw new Error("Node does not have a valid __meta__.id to identify it for removal.");
338
+ }
339
+ // Find the parent of the node to remove it
340
+ const parent = this.findParent(nodeIdToRemove, this.root());
341
+ if (!parent) {
342
+ throw new Error("Parent node not found. The node might be the root node or does not exist.");
343
+ }
344
+ const index = parent.children?.findIndex(child => get(child, "__meta__.id") === nodeIdToRemove) ?? -1;
345
+ if (index > -1) {
346
+ parent.children.splice(index, 1);
347
+ //
348
+ this.historyManager.updateState(this.root());
349
+ //
350
+ this.refresh({ widget: parent }); // Refresh the UI to reflect changes
351
+ this.select({ widget: parent }); // Select the parent node after removal
352
+ }
353
+ else {
354
+ throw new Error("Node to remove not found in the widget tree.");
355
+ }
356
+ }
357
+ revertToChange(index) {
358
+ this.historyManager.revert(index);
359
+ this.root.set(this.historyManager.currentState()?.state);
360
+ this.refresh({ widget: this.root() });
361
+ }
362
+ redo() {
363
+ if (this.historyManager.canRedo()) {
364
+ this.historyManager.redo();
365
+ this.root.set(this.historyManager.currentState()?.state);
366
+ this.refresh({ widget: this.root() });
367
+ }
368
+ }
369
+ undo() {
370
+ if (this.historyManager.canUndo()) {
371
+ this.historyManager.undo();
372
+ this.root.set(this.historyManager.currentState()?.state);
373
+ this.refresh({ widget: this.root() });
374
+ }
375
+ }
376
+ formatOutputJSON(obj, nodeName) {
377
+ // Check if the object is an array
378
+ if (Array.isArray(obj)) {
379
+ return obj.map(item => this.formatOutputJSON(item, nodeName));
380
+ }
381
+ else if (typeof obj === 'object' && obj !== null) {
382
+ // Create a new object to store the result
383
+ let newObj = {};
384
+ for (let key in obj) {
385
+ // Only add the key if it's not the nodeName we want to remove
386
+ if (key !== nodeName) {
387
+ newObj[key] = this.formatOutputJSON(obj[key], nodeName);
388
+ }
389
+ }
390
+ return newObj;
391
+ }
392
+ // If the value is not an object or array, return it as is
393
+ return obj;
394
+ }
395
+ copy(widget = this.selectedNode()) {
396
+ if (!widget)
397
+ return;
398
+ this.clipboard.set(cloneDeep(widget)); // Use lodash's cloneDeep to ensure a deep copy
399
+ }
400
+ cut(widget = this.selectedNode()) {
401
+ if (!widget)
402
+ return;
403
+ this.copy(widget); // Copy the widget to the clipboard
404
+ this.removeWidget(widget); // Reuse the removeWidget method which should handle undo internally
405
+ }
406
+ paste(parentNode = this.selectedNode() ?? this.root()) {
407
+ if (!this.clipboard() || !this.selectedNode()) {
408
+ console.error("Clipboard is empty or no node is selected.");
409
+ return;
410
+ }
411
+ const newNode = cloneDeep(this.clipboard());
412
+ const nearestContainer = this.findNearestContainer(parentNode, true);
413
+ if (!nearestContainer) {
414
+ console.error("No suitable container found.");
415
+ return;
416
+ }
417
+ //
418
+ this.historyManager.saveState(newNode, `Pasted ${newNode.name}`); // Prepare for undo functionality
419
+ //
420
+ if (!nearestContainer.children) {
421
+ nearestContainer.children = [];
422
+ }
423
+ set(newNode, "__meta__.id", Math.random() * Math.pow(10, 18)); // Ensure a unique ID
424
+ //
425
+ nearestContainer.children.push(newNode); // Add the new node to the container
426
+ //
427
+ this.historyManager.updateState(this.root());
428
+ //
429
+ this.refresh({ widget: nearestContainer }); // Refresh the UI
430
+ this.select({ widget: newNode }); // Select the newly pasted node
431
+ }
432
+ export() {
433
+ const json = this.formatOutputJSON(this.root(), "__meta__");
434
+ return JSON.stringify(json);
435
+ }
436
+ download() {
437
+ // Convert the object to a JSON string
438
+ const jsonStr = this.export();
439
+ // Create a blob object from the JSON string
440
+ const blob = new Blob([jsonStr], { type: "application/json" });
441
+ // Create a URL for the blob object
442
+ const url = URL.createObjectURL(blob);
443
+ // Create a temporary <a> element to trigger the download
444
+ const a = document.createElement("a");
445
+ a.href = url;
446
+ a.download = "export.json";
447
+ // Append the <a> element to the document body (necessary for some browsers)
448
+ document.body.appendChild(a);
449
+ // Trigger the download by clicking the <a> element
450
+ a.click();
451
+ // Clean up by revoking the object URL and removing the <a> element
452
+ URL.revokeObjectURL(url);
453
+ document.body.removeChild(a);
454
+ }
455
+ /**
456
+ * Generates a well-formed, unique name for a new widget node based on its type.
457
+ * @param type The type of the widget (e.g., 'textBox', 'numberBox').
458
+ * @returns A unique name for the widget (e.g., 'textBox1', 'numberBox2').
459
+ */
460
+ generateUniqueName(type) {
461
+ // Normalize the type to follow camelCase convention
462
+ const baseName = type.charAt(0).toLowerCase() + type.slice(1);
463
+ let index = 1;
464
+ let uniqueName = `${baseName}${index}`;
465
+ // Gather all existing names to check against
466
+ const existingNames = new Set();
467
+ this.collectAllNames(this.root(), existingNames);
468
+ // Increment the index until a unique name is found
469
+ while (existingNames.has(uniqueName)) {
470
+ index++;
471
+ uniqueName = `${baseName}${index}`;
472
+ }
473
+ return uniqueName;
474
+ }
475
+ /**
476
+ * Collects all existing widget names from the widget tree.
477
+ * @param node The current node being inspected.
478
+ * @param names A set to store existing names.
479
+ */
480
+ collectAllNames(node, names) {
481
+ if (node.name) {
482
+ names.add(node.name);
483
+ }
484
+ if (node.children) {
485
+ for (const child of node.children) {
486
+ this.collectAllNames(child, names);
487
+ }
488
+ }
489
+ }
490
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
491
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService }); }
492
+ }
493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerService, decorators: [{
494
+ type: Injectable
495
+ }] });
496
+
497
+ class AXPWidgetDesignerRendererComponent {
498
+ /**
499
+ * @ignore
500
+ */
501
+ constructor() {
502
+ this.mergedOptions = signal({});
503
+ this.injector = inject(Injector);
504
+ this.widgetRegistery = inject(AXPWidgetRegistryService);
505
+ this.unsubscriber = inject(AXUnsubscriber);
506
+ this.zone = inject(NgZone);
507
+ this.isLoading = signal(true);
508
+ this.service = inject(AXPDesignerService);
509
+ this.elementRef = inject(ElementRef);
510
+ this.parentNode = input();
511
+ this.index = input();
512
+ this.mode = input.required();
513
+ this.node = input.required();
514
+ this.hostElement = () => this.elementRef.nativeElement;
515
+ this.isCurrentWidget = (w) => get(w, '__meta__.id') == get(this.node(), '__meta__.id');
516
+ this.service.onUpdate.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
517
+ if (this.isCurrentWidget(c.widget)) {
518
+ this.applyOptions(c.values?.options);
519
+ }
520
+ });
521
+ //
522
+ this.service.onSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
523
+ this.zone.runOutsideAngular(() => {
524
+ if (this.isCurrentWidget(c.widget)) {
525
+ this.hostElement()?.classList.add('axp-state-selected');
526
+ }
527
+ else {
528
+ this.hostElement()?.classList.remove('axp-state-selected');
529
+ }
530
+ });
531
+ });
532
+ //
533
+ this.service.onFocused.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
534
+ if (c.widget && this.isCurrentWidget(c.widget)) {
535
+ this.addOverlay();
536
+ }
537
+ else {
538
+ this.removeOverlay();
539
+ }
540
+ });
541
+ //
542
+ this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
543
+ if (this.isCurrentWidget(c.widget)) {
544
+ this.instance.setChildren(this.node().children ?? []);
545
+ }
546
+ });
547
+ //
548
+ effect(async () => {
549
+ await this.loadComponent();
550
+ }, { allowSignalWrites: true });
551
+ }
552
+ async loadComponent() {
553
+ this.isLoading.set(true);
554
+ this.config = this.widgetRegistery.resolve(this.node().type);
555
+ //
556
+ const props = this.config?.components[this.mode()]?.properties
557
+ ?.filter((c) => c.schema.defaultValue)
558
+ .map((c) => ({ [c.name]: c.schema.defaultValue }))
559
+ .reduce((acc, curr) => {
560
+ return { ...acc, ...curr };
561
+ }, {});
562
+ //
563
+ this.mergedOptions.set(merge(props, this.node().options) || {});
564
+ this.preprocessAndInitialOptions(cloneDeep(this.node().options));
565
+ const tokenValue = {
566
+ node: this.node(),
567
+ options: this.mergedOptions(),
568
+ config: this.config,
569
+ defaultValue: this.node().defaultValue,
570
+ };
571
+ const token = Injector.create({
572
+ parent: this.injector,
573
+ providers: [
574
+ {
575
+ provide: AXP_WIDGET_TOKEN,
576
+ useValue: tokenValue,
577
+ },
578
+ ],
579
+ });
580
+ var com = await this.config?.components[this.mode()]?.component();
581
+ this.portal = new ComponentPortal(com, null, token);
582
+ this.isLoading.set(false);
583
+ }
584
+ async handleAttached(portalOutletRef) {
585
+ portalOutletRef = portalOutletRef;
586
+ this.instance = portalOutletRef.instance;
587
+ this.instance.parent = this.parentNode();
588
+ this.instance.index = this.index();
589
+ this.instance.mode = this.mode();
590
+ //
591
+ this.instance.onReady.pipe(first()).subscribe(() => {
592
+ if (this.mode() == 'designer') {
593
+ this.hostElement()?.addEventListener('mouseover', (e) => {
594
+ e.stopPropagation();
595
+ this.service.focus({ widget: this.node() });
596
+ });
597
+ this.hostElement()?.addEventListener('mouseleave', (e) => {
598
+ e.stopPropagation();
599
+ this.service.focus({ widget: null });
600
+ });
601
+ this.hostElement()?.addEventListener('click', (e) => {
602
+ e.stopPropagation();
603
+ this.service.select({ widget: this.node() });
604
+ });
605
+ this.service.register({
606
+ config: this.config,
607
+ id: get(this.node(), '__meta__.id'),
608
+ instance: this.instance,
609
+ widget: this.node(),
610
+ });
611
+ }
612
+ });
613
+ }
614
+ addOverlay() {
615
+ this.zone.runOutsideAngular(() => {
616
+ //console.log('add', this.node().type);
617
+ if (this.hostElement()) {
618
+ this.hostElement()?.classList.add('axp-state-hover');
619
+ //
620
+ if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.container)
621
+ return;
622
+ this.overlay = document.createElement('div');
623
+ this.overlay.classList.add('axp-widget-overlay');
624
+ this.overlay.addEventListener('click', (e) => {
625
+ e.preventDefault();
626
+ e.stopPropagation();
627
+ this.service.select({ widget: this.node() });
628
+ });
629
+ this.overlay.addEventListener('mouseleave', (e) => {
630
+ e.preventDefault();
631
+ e.stopPropagation();
632
+ this.service.focus({ widget: null });
633
+ });
634
+ this.hostElement().appendChild(this.overlay);
635
+ }
636
+ });
637
+ }
638
+ removeOverlay() {
639
+ //console.log('remove', this.node().type);
640
+ this.zone.runOutsideAngular(() => {
641
+ if (this.hostElement()) {
642
+ this.hostElement()?.classList.remove('axp-state-hover');
643
+ //
644
+ this.overlay?.remove();
645
+ }
646
+ });
647
+ }
648
+ preprocessAndInitialOptions(obj, pathPrefix = '') {
649
+ if (!obj)
650
+ return;
651
+ Object.entries(obj).forEach(([key, value]) => {
652
+ const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;
653
+ this.mergedOptions.update((currentOptions) => {
654
+ return set(currentOptions, currentPath, value);
655
+ });
656
+ });
657
+ }
658
+ applyOptions(values) {
659
+ if (this.node().defaultValue != null) {
660
+ this.instance.setValue(this.node().defaultValue);
661
+ }
662
+ this.mergedOptions.update((currentOptions) => {
663
+ return merge(currentOptions, values);
664
+ });
665
+ this.instance?.setOptions(this.mergedOptions());
666
+ }
667
+ async onKeydownHandler(event) {
668
+ if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode())) {
669
+ // handle delete
670
+ if (event.key == "Delete") {
671
+ event.preventDefault();
672
+ event.stopPropagation();
673
+ this.service.removeWidget(this.node());
674
+ }
675
+ //
676
+ // handle delete
677
+ if (this.config?.container && event.key == "Insert") {
678
+ this.service.showPicker(this.node());
679
+ }
680
+ }
681
+ }
682
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
683
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetDesignerRendererComponent, isStandalone: true, selector: "axp-widget-designer-renderer", inputs: { parentNode: { classPropertyName: "parentNode", publicName: "parentNode", isSignal: true, isRequired: false, transformFunction: null }, index: { classPropertyName: "index", publicName: "index", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, node: { classPropertyName: "node", publicName: "node", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "document:keydown": "onKeydownHandler($event)" }, classAttribute: "axp-widget-host" }, providers: [
684
+ {
685
+ provide: AXUnsubscriber,
686
+ },
687
+ ], ngImport: i0, template: `
688
+ @if(mergedOptions().isVisible!=false) { @if(isLoading()){
689
+ <ax-skeleton [animated]="true" class="ax-w-full lg:ax-w-[50%] ax-h-8 ax-rounded"></ax-skeleton>
690
+ } @else {
691
+ <ng-container *ngTemplateOutlet="tt"></ng-container>
692
+ } }
693
+ <ng-template #tt>
694
+ <ng-template [cdkPortalOutlet]="portal" (attached)="handleAttached($event)"></ng-template>
695
+ </ng-template>
696
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: PortalModule }, { kind: "directive", type: i2.CdkPortalOutlet, selector: "[cdkPortalOutlet]", inputs: ["cdkPortalOutlet"], outputs: ["attached"], exportAs: ["cdkPortalOutlet"] }, { kind: "ngmodule", type: AXSkeletonModule }, { kind: "component", type: i3.AXSkeletonComponent, selector: "ax-skeleton", inputs: ["animated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
697
+ }
698
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererComponent, decorators: [{
699
+ type: Component,
700
+ args: [{
701
+ selector: 'axp-widget-designer-renderer',
702
+ template: `
703
+ @if(mergedOptions().isVisible!=false) { @if(isLoading()){
704
+ <ax-skeleton [animated]="true" class="ax-w-full lg:ax-w-[50%] ax-h-8 ax-rounded"></ax-skeleton>
705
+ } @else {
706
+ <ng-container *ngTemplateOutlet="tt"></ng-container>
707
+ } }
708
+ <ng-template #tt>
709
+ <ng-template [cdkPortalOutlet]="portal" (attached)="handleAttached($event)"></ng-template>
710
+ </ng-template>
711
+ `,
712
+ changeDetection: ChangeDetectionStrategy.OnPush,
713
+ standalone: true,
714
+ imports: [CommonModule, PortalModule, AXSkeletonModule, CommonModule],
715
+ providers: [
716
+ {
717
+ provide: AXUnsubscriber,
718
+ },
719
+ ],
720
+ host: { class: 'axp-widget-host' },
721
+ }]
722
+ }], ctorParameters: () => [], propDecorators: { onKeydownHandler: [{
723
+ type: HostListener,
724
+ args: ['document:keydown', ['$event']]
725
+ }] } });
726
+
727
+ class AXPDesignerBoardComponent {
728
+ constructor() {
729
+ this.context = {};
730
+ this.elementRef = inject((ElementRef));
731
+ this.breakpointMap = {
732
+ 'sm': 640,
733
+ 'md': 768,
734
+ 'lg': 1024,
735
+ 'xl': 1280,
736
+ 'xxl': 1536
737
+ };
738
+ this.service = inject(AXPDesignerService);
739
+ this.width = computed(() => {
740
+ switch (this.service.size()) {
741
+ case 'sm':
742
+ return '340px';
743
+ case 'md':
744
+ case 'lg':
745
+ return '768px';
746
+ default:
747
+ return '100%';
748
+ }
749
+ });
750
+ this.ef = effect(() => {
751
+ this.removeCustomClass();
752
+ if (this.service.size() != 'xl') {
753
+ this.applyResponsiveStyles(this.service.size());
754
+ }
755
+ });
756
+ }
757
+ // Unified method to extract media queries and create a custom class
758
+ applyResponsiveStyles(breakpoint) {
759
+ const minWidth = get(this.breakpointMap, breakpoint);
760
+ const mediaRules = [];
761
+ // Loop through all the stylesheets
762
+ for (let sheet of Array.from(document.styleSheets)) {
763
+ try {
764
+ // Loop through CSS rules
765
+ for (let rule of Array.from(sheet.cssRules)) {
766
+ // Check if the rule is a CSSMediaRule
767
+ if (rule instanceof CSSMediaRule && rule.media.mediaText.includes(`min-width: ${minWidth}px`)) {
768
+ // Loop through the media rule's CSS rules
769
+ for (let subRule of Array.from(rule.cssRules)) {
770
+ mediaRules.push(subRule.cssText);
771
+ }
772
+ }
773
+ }
774
+ }
775
+ catch (e) {
776
+ console.error('Error accessing stylesheet:', e);
777
+ }
778
+ }
779
+ // Create a dynamic class for the media queries
780
+ this.createCustomClass(`axp-preview-${breakpoint}`, mediaRules, breakpoint);
781
+ }
782
+ createCustomClass(className, styles, breakpoint) {
783
+ const styleSheet = document.createElement('style');
784
+ styleSheet.setAttribute("data-screen", breakpoint);
785
+ // Construct a pure CSS string, dynamically replacing the breakpoint prefix
786
+ let styleString = "";
787
+ styles.forEach(style => {
788
+ // Replace any prefixed classes like 'lg:' or 'md:' dynamically
789
+ const dynamicPrefix = new RegExp(`\\.${breakpoint}\\\\:`, 'g');
790
+ styleString += `.${className} ${style.replace(dynamicPrefix, '.')}`; // Replace the breakpoint prefix
791
+ });
792
+ styleSheet.innerText = styleString;
793
+ this.removeCustomClass();
794
+ this.elementRef.nativeElement.appendChild(styleSheet);
795
+ }
796
+ removeCustomClass() {
797
+ this.elementRef.nativeElement.querySelectorAll('style').forEach(s => s.remove());
798
+ }
799
+ handleKeyboardEvent(event) {
800
+ if (event.ctrlKey) {
801
+ switch (event.key.toLowerCase()) { // Convert the key to lowercase to ensure case insensitivity
802
+ case 'z':
803
+ event.preventDefault(); // Prevent the browser's default undo action
804
+ this.service.undo();
805
+ break;
806
+ case 'y':
807
+ event.preventDefault(); // Prevent the browser's default redo action
808
+ this.service.redo();
809
+ break;
810
+ case 'c':
811
+ if (this.service.canCutCopy()) {
812
+ event.preventDefault(); // Prevent the browser's default copy action
813
+ this.service.copy();
814
+ }
815
+ break;
816
+ case 'x':
817
+ if (this.service.canCutCopy()) {
818
+ event.preventDefault(); // Prevent the browser's default cut action
819
+ this.service.cut();
820
+ }
821
+ break;
822
+ case 'v':
823
+ if (this.service.canPaste()) {
824
+ event.preventDefault(); // Prevent the browser's default paste action
825
+ this.service.paste();
826
+ }
827
+ break;
828
+ }
829
+ }
830
+ }
831
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
832
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerBoardComponent, isStandalone: true, selector: "axp-designer-board", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: AXPWidgetDesignerRendererComponent, selector: "axp-widget-designer-renderer", inputs: ["parentNode", "index", "mode", "node"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
833
+ }
834
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBoardComponent, decorators: [{
835
+ type: Component,
836
+ args: [{ selector: 'axp-designer-board', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
837
+ CommonModule,
838
+ AXPLayoutBuilderModule,
839
+ AXPWidgetDesignerRendererComponent
840
+ ], template: "<div class=\"axp-designer-board axp-state-design axp-preview-{{service.size()}}\" [style.width]=\"width()\">\n <axp-widgets-container [(context)]=\"context\">\n <axp-widget-designer-renderer [node]=\"service.root()\" [mode]=\"service.mode()\">\n </axp-widget-designer-renderer>\n </axp-widgets-container>\n</div>" }]
841
+ }], propDecorators: { handleKeyboardEvent: [{
842
+ type: HostListener,
843
+ args: ['document:keydown', ['$event']]
844
+ }] } });
845
+
846
+ class AXPDesignerAddWidgetButtonComponent {
847
+ constructor() {
848
+ this.designerService = inject(AXPDesignerService);
849
+ this.parent = inject(AXPContainerWidgetComponent);
850
+ }
851
+ async handleClick(e) {
852
+ e.nativeEvent.stopPropagation();
853
+ await this.designerService.showPicker(this.parent.node);
854
+ }
855
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
856
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerAddWidgetButtonComponent, isStandalone: true, selector: "axp-designer-add-widget-button", ngImport: i0, template: `
857
+ <div class="ax-container ax-mx-auto">
858
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
859
+ <ax-icon icon="fa-solid fa-plus"></ax-icon>
860
+ </ax-button>
861
+ </div>
862
+ `, isInline: true, styles: ["axp-designer-add-widget-button .ax-container{display:flex;justify-content:center;padding:.5rem}\n"], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
863
+ }
864
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerAddWidgetButtonComponent, decorators: [{
865
+ type: Component,
866
+ args: [{ selector: 'axp-designer-add-widget-button', template: `
867
+ <div class="ax-container ax-mx-auto">
868
+ <ax-button [text]="'Add New Element'" (onClick)="handleClick($event)" [look]="'twotone'">
869
+ <ax-icon icon="fa-solid fa-plus"></ax-icon>
870
+ </ax-button>
871
+ </div>
872
+ `, standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXButtonModule, AXDecoratorModule], encapsulation: ViewEncapsulation.None, styles: ["axp-designer-add-widget-button .ax-container{display:flex;justify-content:center;padding:.5rem}\n"] }]
873
+ }] });
874
+
875
+ class AXPDesignerModule {
876
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
877
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
878
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule }); }
879
+ }
880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, decorators: [{
881
+ type: NgModule,
882
+ args: [{
883
+ imports: [],
884
+ exports: [],
885
+ declarations: [],
886
+ }]
887
+ }] });
888
+
889
+ class AXPDesignerBreadcrumbsComponent {
890
+ constructor() {
891
+ this.service = inject(AXPDesignerService);
892
+ }
893
+ getTitle(node) {
894
+ return get(node, "__meta__.config.title");
895
+ }
896
+ handleClick(node) {
897
+ this.service.select({ widget: node });
898
+ }
899
+ handleMouseOver(node) {
900
+ this.service.focus({ widget: node });
901
+ }
902
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
903
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerBreadcrumbsComponent, isStandalone: true, selector: "axp-designer-breadcrumbs", ngImport: i0, template: `
904
+ <ax-breadcrumbs class="ax-text-white">
905
+ @for( b of service.breadcrumbs();track $index){
906
+ <ax-breadcrumbs-item>
907
+ <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{getTitle(b)}}</a>
908
+ </ax-breadcrumbs-item>
909
+ }
910
+ <ng-template #divider>
911
+ <i class="ax-icon ax-icon-chevron-right"></i>
912
+ </ng-template>
913
+ </ax-breadcrumbs>
914
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i1$2.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i1$2.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "ngmodule", type: AXDecoratorModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
915
+ }
916
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerBreadcrumbsComponent, decorators: [{
917
+ type: Component,
918
+ args: [{
919
+ selector: 'axp-designer-breadcrumbs',
920
+ template: `
921
+ <ax-breadcrumbs class="ax-text-white">
922
+ @for( b of service.breadcrumbs();track $index){
923
+ <ax-breadcrumbs-item>
924
+ <a (click)="handleClick(b)" (mouseover)="handleMouseOver(b)"> {{getTitle(b)}}</a>
925
+ </ax-breadcrumbs-item>
926
+ }
927
+ <ng-template #divider>
928
+ <i class="ax-icon ax-icon-chevron-right"></i>
929
+ </ng-template>
930
+ </ax-breadcrumbs>
931
+ `,
932
+ encapsulation: ViewEncapsulation.None,
933
+ changeDetection: ChangeDetectionStrategy.OnPush,
934
+ standalone: true,
935
+ imports: [
936
+ CommonModule,
937
+ AXPLayoutBuilderModule,
938
+ AXBreadcrumbsModule,
939
+ AXDecoratorModule
940
+ ],
941
+ }]
942
+ }] });
943
+
944
+ class AXPDesignerHeaderMenuComponent {
945
+ constructor() {
946
+ this.service = inject(AXPDesignerService);
947
+ }
948
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
949
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPDesignerHeaderMenuComponent, isStandalone: true, selector: "axp-designer-header-menu", ngImport: i0, template: "<ax-menu [openOn]=\"'hover'\">\n <ax-menu-item text=\"Home\">\n <ax-menu-item text=\"New\"></ax-menu-item>\n <ax-menu-item text=\"Export\">\n <ax-menu-item text=\"Download JSON\" (onClick)=\"service.download()\">\n </ax-menu-item>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Edit\">\n <ax-menu-item text=\"Undo\" [disabled]=\"!service.canUndo()\" (onClick)=\"service.undo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-left\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Z\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Redo\" [disabled]=\"!service.canRedo()\" (onClick)=\"service.redo()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-rotate-right\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+Y\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-divider></ax-divider>\n <ax-menu-item text=\"Cut\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.cut()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-cut\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+X\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Copy\" [disabled]=\"!service.canCutCopy()\" (onClick)=\"service.copy()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-copy\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+C\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n <ax-menu-item text=\"Paste\" [disabled]=\"!service.canPaste()\" (onClick)=\"service.paste()\">\n <ax-prefix>\n <ax-icon>\n <i class=\"fa-solid fa-paste\"></i>\n </ax-icon>\n </ax-prefix>\n <ax-suffix>\n <ax-text>\n Ctrl+V\n </ax-text>\n </ax-suffix>\n </ax-menu-item>\n </ax-menu-item>\n <ax-menu-item text=\"Help\">\n <ax-menu-item text=\"About\"></ax-menu-item>\n </ax-menu-item>\n</ax-menu>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "component", type: i2$2.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["disabled", "text", "active"], outputs: ["activeChange", "onClick"] }, { kind: "component", type: i2$2.AXMenuComponent, selector: "ax-menu", inputs: ["orientation", "openOn"] }] }); }
950
+ }
951
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHeaderMenuComponent, decorators: [{
952
+ type: Component,
953
+ args: [{ standalone: true, imports: [
954
+ CommonModule,
955
+ AXDecoratorModule,
956
+ AXMenuModule,
957
+ ], 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>" }]
958
+ }] });
959
+
960
+ class AXPDesignerOutlineComponent {
961
+ constructor() {
962
+ this.service = inject(AXPDesignerService);
963
+ this.collapsedStates = new Map();
964
+ this.root = signal(this.service.root());
965
+ merge$1(this.service.onRefresh, this.service.onUpdate)
966
+ .subscribe(() => {
967
+ this.root.update(c => ({ ...this.service.root() }));
968
+ });
969
+ }
970
+ toggleCollapse(node) {
971
+ // Toggle the current state or set to true if undefined
972
+ this.collapsedStates.set(node, !this.collapsedStates.get(node));
973
+ }
974
+ isCollapsed(node) {
975
+ // Return the collapsed state, default is false (expanded)
976
+ return !!this.collapsedStates.get(node);
977
+ }
978
+ getConfig(node) {
979
+ return get(node, "__meta__.config");
980
+ }
981
+ handleClick(e, node) {
982
+ e.stopPropagation();
983
+ this.service.select({ widget: node });
984
+ }
985
+ handleToggleClick(event, item) {
986
+ event.stopPropagation(); // Prevents the event from bubbling up to parent elements
987
+ this.toggleCollapse(item);
988
+ }
989
+ handleMouseOver(e, node) {
990
+ e.stopPropagation();
991
+ this.service.focus({ widget: node });
992
+ }
993
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
994
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n\n @if(root().children?.length)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
995
+ }
996
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
997
+ type: Component,
998
+ args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
999
+ CommonModule,
1000
+ AXPLayoutBuilderModule,
1001
+ AXDecoratorModule,
1002
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n\n @if(root().children?.length)\n {\n <ul class=\"ax-text-white ax-text-sm ax-bg-gray-800 ax-p-2 ax-rounded-md ax-space-y-1\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\"\n (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-blue-200]=\"item === service.selectedNode()\"\n [class.ax-text-blue-900]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-p-1 ax-px-2\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config= getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span>{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-pl-5 ax-space-y-1\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
1003
+ }], ctorParameters: () => [] });
12
1004
 
13
1005
  class AXPWidgetPropertyViewerComponent {
14
1006
  constructor() {
@@ -21,26 +1013,32 @@ class AXPWidgetPropertyViewerComponent {
21
1013
  this.groups = computed(() => {
22
1014
  return this.tabs().length ? this.tabs()[this.currentTabIndex()].groups : [];
23
1015
  });
24
- this.context = {};
1016
+ this.onChanged = new EventEmitter();
1017
+ this.context = signal({});
25
1018
  this.initialContext = {};
26
1019
  effect(() => {
27
- const config = this.widgetRegistryService.resolve(this.widget().name);
1020
+ if (!this.widget())
1021
+ return;
1022
+ const config = this.widgetRegistryService.resolve(this.widget()?.type);
28
1023
  if (config) {
1024
+ this.initialContext = {};
29
1025
  this.config.set(config);
30
1026
  this.fillTabs();
31
1027
  }
32
1028
  else {
33
- console.error(`Invalid widget name: ${this.widget().name}`);
1029
+ console.error(`Invalid widget name: ${this.widget()}`);
34
1030
  }
35
1031
  }, { allowSignalWrites: true });
36
1032
  }
37
1033
  fillTabs() {
38
- const tabs = [{
39
- name: "general",
40
- title: "General",
41
- groups: []
42
- }];
43
- Object.entries(this.config()?.components ?? {}).forEach(c => {
1034
+ const tabs = [
1035
+ {
1036
+ name: 'general',
1037
+ title: 'General',
1038
+ groups: [],
1039
+ },
1040
+ ];
1041
+ Object.entries(this.config()?.components ?? {}).forEach((c) => {
44
1042
  if (c[1].component != null && c[1].properties?.length) {
45
1043
  tabs.push({ name: c[0], title: capitalize(c[0]), groups: [] });
46
1044
  }
@@ -48,32 +1046,38 @@ class AXPWidgetPropertyViewerComponent {
48
1046
  ///
49
1047
  this.allPoperties = [];
50
1048
  ///
51
- tabs.forEach(tab => {
52
- const props = tab.name == "general" ? (this.config()?.properties ?? []) : (this.config()?.components[tab.name].properties ?? []);
1049
+ tabs.forEach((tab) => {
1050
+ const props = tab.name == 'general'
1051
+ ? this.config()?.properties ?? []
1052
+ : ((this.config()?.components)[tab.name]?.properties ?? []).filter((c) => c.visible);
1053
+ //
53
1054
  this.allPoperties.push(...props);
54
- tab.groups = unionBy(sortBy(props.map(pg => ({
1055
+ tab.groups = unionBy(sortBy(props.map((pg) => ({
55
1056
  isCollapsed: false,
56
1057
  name: pg.group.name,
57
1058
  title: pg.group.title,
58
- props: sortBy(props.filter(p => p.group.name == pg.group.name), 'title'),
1059
+ props: sortBy(props.filter((p) => p.group.name == pg.group.name), 'title'),
59
1060
  })), 'title'), 'name');
60
1061
  });
61
- this.tabs.set(tabs);
1062
+ this.tabs.set(tabs.filter((c) => c.groups.length));
62
1063
  //
63
1064
  this.initialContext = this.allPoperties
64
- .filter(c => (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) ||
65
- (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)))
66
- .map(c => ({ [c.name]: c.schema.defaultValue }))
67
- .reduce((acc, curr) => {
68
- return { ...acc, ...curr };
1065
+ .filter((c) => (!isArray(c.schema.defaultValue) && !isNil(c.schema.defaultValue)) || (isArray(c.schema.defaultValue) && !isEmpty(c.schema.defaultValue)))
1066
+ .reduce((acc, c) => {
1067
+ set(acc, c.schema.interface.path, c.schema.defaultValue); // Use lodash's set
1068
+ return acc;
69
1069
  }, {});
70
1070
  //
71
- this.context = merge(cloneDeep(this.initialContext), this.context);
72
- //
73
- console.log(this.initialContext, this.context);
1071
+ untracked(() => {
1072
+ this.context.set(merge(cloneDeep(this.initialContext), this.widget()));
1073
+ this.onChanged.emit({ values: this.context(), mode: 'init' });
1074
+ });
74
1075
  }
75
1076
  handleContextChange(e) {
76
- console.log(e);
1077
+ untracked(() => {
1078
+ this.context.set(e.data);
1079
+ });
1080
+ this.onChanged.emit({ values: this.context(), mode: 'update', });
77
1081
  }
78
1082
  handleTabChange(event) {
79
1083
  const indx = event.index;
@@ -82,44 +1086,62 @@ class AXPWidgetPropertyViewerComponent {
82
1086
  }
83
1087
  }
84
1088
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
85
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: { widget: { classPropertyName: "widget", publicName: "widget", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "<axp-widgets-container [(context)]=\"context\" (contextChange)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-py-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\">\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\n <ax-collapse-group>\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\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n</axp-widgets-container>", styles: ["ax-collapse .ax-collapse-header{font-weight:600}\n"], dependencies: [{ kind: "component", type: i1.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i1.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "component", type: i2.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "component", type: i3.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["contextChange"] }, { kind: "component", type: i3.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "parentNode", "index"] }] }); }
1089
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPWidgetPropertyViewerComponent, isStandalone: true, selector: "axp-widget-property-viewer", inputs: { widget: { classPropertyName: "widget", publicName: "widget", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { onChanged: "onChanged" }, ngImport: i0, template: "<axp-widgets-container [context]=\"context()\" (onChanged)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-pb-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\" [look]=\"'with-line'\">\n @for( tab of tabs();track $index){\n <ax-tab-item [text]=\"tab.title\" [key]=\"$index.toString()\" [active]=\"currentTabIndex() === $index\">\n </ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-flex-1 ax-overflow-auto\">\n <ax-collapse-group class=\"ax-h-fit\" look=\"blank\">\n @for( group of groups();track $index){\n <ax-collapse [caption]=\"group.title\" look=\"solid\" [(isCollapsed)]=\"group.isCollapsed\">\n <div class=\"ax-flex ax-flex-col ax-divide-y\">\n @for( p of group.props;track $index){\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-py-2 first:ax-pt-0 last:ax-pb-0\">\n <span class=\"ax-font-semibold\">{{p.title}}</span>\n @if(p.schema.interface)\n {\n <axp-widget-renderer [node]=\"p.schema.interface\" [mode]=\"'edit'\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n </div>\n</axp-widgets-container>", styles: ["ax-collapse .ax-collapse-header{font-weight:600}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXCollapseModule }, { kind: "component", type: i1$3.AXCollapseComponent, selector: "ax-collapse", inputs: ["disabled", "look", "isCollapsed", "showHeader", "caption", "icon", "isLoading", "headerTemplate"], outputs: ["onClick", "isCollapsedChange"] }, { kind: "component", type: i1$3.AXCollapseGroupComponent, selector: "ax-collapse-group", inputs: ["look", "accordion", "activeIndex"], outputs: ["accordionChange", "activeIndexChange"] }, { kind: "ngmodule", type: AXTabsModule }, { kind: "component", type: i2$3.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i2$3.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i3$1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "component", type: i3$1.AXPWidgetRendererComponent, selector: "axp-widget-renderer", inputs: ["node", "mode", "parentNode", "index"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
86
1090
  }
87
1091
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetPropertyViewerComponent, decorators: [{
88
1092
  type: Component,
89
- args: [{ selector: 'axp-widget-property-viewer', template: "<axp-widgets-container [(context)]=\"context\" (contextChange)=\"handleContextChange($event)\">\n <div class=\"ax-flex ax-flex-col\">\n <div class=\"ax-py-2\">\n <ax-tabs look=\"default\" (onActiveTabChanged)=\"handleTabChange($event)\">\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\n <ax-collapse-group>\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\">\n </axp-widget-renderer>\n }\n </div>\n }\n </div>\n </ax-collapse>\n }\n </ax-collapse-group>\n </div>\n</axp-widgets-container>", styles: ["ax-collapse .ax-collapse-header{font-weight:600}\n"] }]
90
- }], ctorParameters: () => [] });
1093
+ args: [{ selector: 'axp-widget-property-viewer', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXCollapseModule, AXTabsModule, AXPLayoutBuilderModule], 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"] }]
1094
+ }], ctorParameters: () => [], propDecorators: { onChanged: [{
1095
+ type: Output
1096
+ }] } });
91
1097
 
92
- class AXPDesignerModule {
93
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
94
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, declarations: [AXPWidgetPropertyViewerComponent], imports: [CommonModule,
95
- AXCollapseModule,
96
- AXTabsModule,
97
- AXPWidgetsModule,
98
- AXPLayoutBuilderModule], exports: [AXPWidgetPropertyViewerComponent] }); }
99
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, imports: [CommonModule,
100
- AXCollapseModule,
101
- AXTabsModule,
102
- AXPWidgetsModule,
103
- AXPLayoutBuilderModule] }); }
1098
+ class AXPDesignerHistoryComponent {
1099
+ constructor() {
1100
+ this.service = inject(AXPDesignerService);
1101
+ }
1102
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerHistoryComponent, isStandalone: true, selector: "axp-designer-history", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-2 ax-p-2 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.revertToChange($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\">\n {{ step.description }} {{step.disabled}}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
104
1104
  }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerModule, decorators: [{
106
- type: NgModule,
107
- args: [{
108
- imports: [
1105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerHistoryComponent, decorators: [{
1106
+ type: Component,
1107
+ args: [{ selector: 'axp-designer-history', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1108
+ CommonModule,
1109
+ AXDecoratorModule,
1110
+ ], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <!-- Header -->\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">History</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n\n <!-- History List or Empty State -->\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(service.history().length)\n {\n <!-- History Items -->\n <ul class=\"ax-space-y-2 ax-p-2 ax-text-white ax-text-sm\">\n @for (step of service.history(); track $index) {\n <li (click)=\"service.revertToChange($index)\"\n class=\"ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700\">\n {{ step.description }} {{step.disabled}}\n </li>\n }\n </ul>\n }\n @else {\n <!-- No History Found -->\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">\n No changes have been made yet.\n </div>\n }\n </div>\n</div>" }]
1111
+ }] });
1112
+
1113
+ class AXPLayoutDesignerComponent {
1114
+ constructor() {
1115
+ this.service = inject(AXPDesignerService);
1116
+ this.nodeConfig = computed(() => this.service.selectedNode() ? get(this.service.selectedNode(), '__meta__.config') : null);
1117
+ }
1118
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1119
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerComponent, isStandalone: true, selector: "axp-layout-designer", providers: [AXPDesignerService], ngImport: i0, template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center \">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\"></div>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1);position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1)}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: AXPDesignerBoardComponent, selector: "axp-designer-board" }, { kind: "component", type: AXPWidgetPropertyViewerComponent, selector: "axp-widget-property-viewer", inputs: ["widget"], outputs: ["onChanged"] }, { kind: "component", type: AXPDesignerBreadcrumbsComponent, selector: "axp-designer-breadcrumbs" }, { kind: "component", type: AXPDesignerOutlineComponent, selector: "axp-designer-outline" }, { kind: "component", type: AXPDesignerHeaderMenuComponent, selector: "axp-designer-header-menu" }, { kind: "component", type: AXPDesignerHistoryComponent, selector: "axp-designer-history" }, { kind: "ngmodule", type: AXTabsModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i2$1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "component", type: i2$1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i2$1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i3$2.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i3$2.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i1$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i1$1.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXMenuModule }, { kind: "ngmodule", type: AXButtonGroupModule }, { kind: "component", type: i5.AXButtonGroupComponent, selector: "ax-button-group", inputs: ["disabled", "color", "look", "selection"], outputs: ["onBlur", "onFocus", "lookChange", "colorChange", "disabledChange", "selectionChange"] }, { kind: "ngmodule", type: AXDropdownModule }, { kind: "component", type: i6.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }], encapsulation: i0.ViewEncapsulation.None }); }
1120
+ }
1121
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerComponent, decorators: [{
1122
+ type: Component,
1123
+ args: [{ selector: 'axp-layout-designer', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
109
1124
  CommonModule,
110
- AXCollapseModule,
111
- AXTabsModule,
112
- AXPWidgetsModule,
113
1125
  AXPLayoutBuilderModule,
114
- ],
115
- exports: [AXPWidgetPropertyViewerComponent],
116
- declarations: [AXPWidgetPropertyViewerComponent],
117
- }]
1126
+ AXPDesignerBoardComponent,
1127
+ AXPWidgetPropertyViewerComponent,
1128
+ AXPDesignerBreadcrumbsComponent,
1129
+ AXPDesignerOutlineComponent,
1130
+ AXPDesignerHeaderMenuComponent,
1131
+ AXPDesignerHistoryComponent,
1132
+ AXTabsModule,
1133
+ AXButtonModule,
1134
+ AXDrawerModule,
1135
+ AXDecoratorModule,
1136
+ AXMenuModule,
1137
+ AXButtonGroupModule,
1138
+ AXDropdownModule,
1139
+ ], providers: [AXPDesignerService], template: "<ax-drawer-container class=\"ax-h-full ax-w-full ax-flex ax-relative child:ax-h-full ax-overflow-hidden ax-dark\">\n <ax-content class=\"ax-contents\">\n <!-- Toolbar Side -->\n <div class=\"ax-min-w-10 ax-bg-surface ax-border-e ax-xs ax-flex ax-flex-col ax-items-center \">\n <div class=\"ax-min-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-border-b\">\n <img src=\"assets/logos/logo.png\" class=\"ax-w-6\" />\n </div>\n <div class=\"ax-py-1\"></div>\n <div class=\"ax-flex ax-flex-col ax-gap-2\">\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-puzzle ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-plus ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\">\n <ax-icon class=\"fa-solid fa-database ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"outline.toggle()\" title=\"Outline\">\n <ax-icon class=\"fa-solid fa-list-tree ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" (onClick)=\"history.toggle()\" title=\"History\">\n <ax-icon class=\"fa-solid fa-clock-rotate-left ax-text-sm\"> </ax-icon>\n </ax-button>\n <ax-button color=\"ghost\" look=\"twotone\" title=\"Timeline\">\n <ax-icon class=\"fa-solid fa-diagram-sankey ax-text-sm\"> </ax-icon>\n </ax-button>\n </div>\n </div>\n <!-- Main Side -->\n <div class=\"ax-col-span-10 ax-flex ax-flex-col ax-flex-1\">\n <!-- Header Toolbar -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-b ax-flex ax-flex-grow ax-justify-between ax-px-2\">\n <div class=\"ax-flex ax-items-center ax-justify-center ax-text-white\">\n <axp-designer-header-menu></axp-designer-header-menu>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button-group color=\"ghost\" look=\"twotone\" [selection]=\"'single'\">\n <ax-button-item [selected]=\"service.size() == 'xl'\" [data]=\"'xl'\" (onClick)=\"service.size.set('xl')\">\n <ax-icon class=\"fa-light fa-desktop\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'lg'\" [data]=\"'lg'\" (onClick)=\"service.size.set('lg')\">\n <ax-icon class=\"fa-light fa-tablet\"></ax-icon>\n </ax-button-item>\n <ax-button-item [selected]=\"service.size() == 'sm'\" [data]=\"'sm'\" (onClick)=\"service.size.set('sm')\">\n <ax-icon class=\"fa-light fa-mobile\"></ax-icon>\n </ax-button-item>\n </ax-button-group>\n </div>\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-xs ax-items-center\">\n <ax-button text=\"Design\" look=\"outline\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-light fa-chevron-down\"></ax-icon>\n </ax-suffix>\n <ax-dropdown-panel>\n <ax-button-item-list>\n <ax-button-item text=\"Print\" name=\"print\"> </ax-button-item>\n <ax-button-item text=\"View\" name=\"view\"> </ax-button-item>\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n <ax-button color=\"success\" look=\"outline\" text=\"Preview\" class=\"ax-xs\">\n <ax-suffix>\n <ax-icon class=\"fa-solid fa-play\"></ax-icon>\n </ax-suffix>\n </ax-button>\n </div>\n </div>\n <!-- Board -->\n <div class=\"ax-h-full \">\n <ax-drawer-container class=\"ax-w-full ax-h-full\">\n <ax-drawer #bd location=\"start\" mode=\"push\">\n <ax-content>\n <div class=\"ax-min-w-80 ax-h-full ax-overflow-auto ax-border-e\"></div>\n </ax-content>\n </ax-drawer>\n <!-- Outline Pnael -->\n <ax-drawer #outline location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-outline></axp-designer-outline>\n </ax-content>\n </ax-drawer>\n <!-- History Pnael -->\n <ax-drawer #history location=\"start\" mode=\"push\">\n <ax-content>\n <axp-designer-history></axp-designer-history>\n </ax-content>\n </ax-drawer>\n <!-- Content of board -->\n <ax-content class=\"ax-light\">\n <axp-designer-board class=\"ax-h-full ax-bg-on-surface ax-flex ax-justify-center\"> </axp-designer-board>\n </ax-content>\n </ax-drawer-container>\n </div>\n <!-- Footer -->\n <div class=\"ax-min-h-10 ax-bg-surface ax-border-t ax-flex ax-items-center\">\n <axp-designer-breadcrumbs class=\"ax-border-default ax-border-t ax-p-2 ax-font-normal\">\n </axp-designer-breadcrumbs>\n </div>\n </div>\n </ax-content>\n <!-- Property Side -->\n <ax-drawer class=\"ax-w-80 ax-border-s\" location=\"end\" mode=\"push\" [collapsed]=\"false\" #pd>\n <ax-content>\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-py-2 ax-px-4 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <i [ngClass]=\"nodeConfig()?.icon\"></i>\n <span class=\"ax-font-semibold\">{{ nodeConfig()?.title }}</span>\n </div>\n </div>\n <axp-widget-property-viewer [widget]=\"service.selectedNode()!\"\n (onChanged)=\"service.update({ values: $event.values, mode: $event.mode })\" class=\"ax-w-1/4\">\n </axp-widget-property-viewer>\n </ax-content>\n </ax-drawer>\n</ax-drawer-container>", styles: [".axp-designer-board{display:block;height:100%;width:100%;overflow:auto;--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-surface),var(--tw-bg-opacity));padding:.75rem}.axp-designer-board.axp-state-design .axp-widget-host{position:relative;display:block;cursor:pointer;padding:.25rem}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-selected{outline-style:solid;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1);position:relative}.axp-designer-board.axp-state-design .axp-widget-host.axp-state-hover{outline-style:dashed;outline-width:1px;outline-offset:1px;outline-color:rgba(var(--ax-color-primary-500),1)}.axp-designer-board.axp-state-design .axp-widget-host .axp-widget-overlay{position:absolute;left:0;top:0;right:0;bottom:0;z-index:10;height:100%;width:100%;background:rgba(202,123,123,.39)}@keyframes moveLight{0%{background-position:0% 50%}to{background-position:100% 50%}}\n"] }]
118
1140
  }] });
119
1141
 
120
1142
  /**
121
1143
  * Generated bundle index. Do not edit.
122
1144
  */
123
1145
 
124
- export { AXPDesignerModule, AXPWidgetPropertyViewerComponent };
1146
+ export { AXPDesignerAddWidgetButtonComponent, AXPDesignerBoardComponent, AXPDesignerModule, AXPDesignerService, AXPLayoutDesignerComponent, AXPWidgetDesignerRendererComponent, AXPWidgetPropertyViewerComponent };
125
1147
  //# sourceMappingURL=acorex-platform-layout-designer.mjs.map