@acorex/platform 18.0.10 → 18.0.11

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