@acorex/platform 18.0.13 → 18.0.15

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 (188) hide show
  1. package/esm2022/auth/lib/session.service.mjs +7 -5
  2. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +4 -2
  3. package/esm2022/layout/builder/lib/builder/widget.types.mjs +8 -2
  4. package/esm2022/layout/designer/index.mjs +2 -2
  5. package/esm2022/layout/designer/lib/board/board.component.mjs +27 -7
  6. package/esm2022/layout/designer/lib/designer/designer.component.mjs +5 -4
  7. package/esm2022/layout/designer/lib/designer.service.mjs +6 -4
  8. package/esm2022/layout/designer/lib/header-menu/header-menu.component.mjs +1 -1
  9. package/esm2022/layout/designer/lib/helpers/add-widget-button/add-widget-button.component.mjs +3 -3
  10. package/esm2022/layout/designer/lib/helpers/grid-drawer/grid-drawer.component.mjs +3 -3
  11. package/esm2022/layout/designer/lib/outline/outline.component.mjs +3 -3
  12. package/esm2022/layout/designer/lib/preview/preview.component.mjs +20 -0
  13. package/esm2022/layout/designer/lib/widget-designer-renderer.directive.mjs +224 -0
  14. package/esm2022/layout/designer/lib/widget-picker/widget-picker.component.mjs +3 -3
  15. package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +15 -5
  16. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +30 -17
  17. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.mjs +19 -9
  18. package/esm2022/widgets/lib/properties/editors.props.mjs +20 -96
  19. package/esm2022/widgets/lib/properties/general.props.mjs +96 -0
  20. package/esm2022/widgets/lib/properties/index.mjs +3 -1
  21. package/esm2022/widgets/lib/properties/layout.props.mjs +216 -6
  22. package/esm2022/widgets/lib/widgets/actions/button/button-widget-designer.component.mjs +54 -0
  23. package/esm2022/widgets/lib/widgets/actions/button/button-widget-view.component.mjs +3 -2
  24. package/esm2022/widgets/lib/widgets/actions/button/button-widget.config.mjs +2 -2
  25. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget-edit.component.mjs +13 -4
  26. package/esm2022/widgets/lib/widgets/advance/file/file-box-widget.config.mjs +3 -2
  27. package/esm2022/widgets/lib/widgets/advance/gallery/gallery-widget-edit.component.mjs +13 -4
  28. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget-edit.component.mjs +12 -3
  29. package/esm2022/widgets/lib/widgets/advance/map/map-box-widget.config.mjs +8 -3
  30. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.mjs +16 -7
  31. package/esm2022/widgets/lib/widgets/advance/qrcode/qrcode-widget.config.mjs +5 -4
  32. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.mjs +12 -3
  33. package/esm2022/widgets/lib/widgets/advance/signature/signature-pad-widget.config.mjs +3 -2
  34. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-designer.component.mjs +54 -0
  35. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.mjs +21 -21
  36. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.mjs +4 -1
  37. package/esm2022/widgets/lib/widgets/editors/checkbox/checkbox-widget.config.mjs +13 -4
  38. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-designer.component.mjs +53 -0
  39. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget-edit.component.mjs +24 -12
  40. package/esm2022/widgets/lib/widgets/editors/color/color-box-widget.config.mjs +14 -6
  41. package/esm2022/widgets/lib/widgets/editors/contact/contact-widget-edit.component.mjs +13 -4
  42. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.mjs +13 -4
  43. package/esm2022/widgets/lib/widgets/editors/date-time/date-time-box-widget.config.mjs +4 -2
  44. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget-edit.component.mjs +13 -4
  45. package/esm2022/widgets/lib/widgets/editors/email/email-box-widget.config.mjs +3 -2
  46. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.mjs +13 -4
  47. package/esm2022/widgets/lib/widgets/editors/large-text/large-text-widget.config.mjs +3 -2
  48. package/esm2022/widgets/lib/widgets/editors/link/link-widget-edit.component.mjs +13 -4
  49. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget-edit.component.mjs +13 -4
  50. package/esm2022/widgets/lib/widgets/editors/number/number-box-widget.config.mjs +3 -2
  51. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget-edit.component.mjs +12 -8
  52. package/esm2022/widgets/lib/widgets/editors/password/password-box-widget.config.mjs +3 -2
  53. package/esm2022/widgets/lib/widgets/editors/phone/phone-box-widget-edit.component.mjs +13 -4
  54. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.mjs +15 -6
  55. package/esm2022/widgets/lib/widgets/editors/rich-text/rich-text-widget.config.mjs +3 -2
  56. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-edit.component.mjs +12 -3
  57. package/esm2022/widgets/lib/widgets/editors/select/select-box-widget-view.component.mjs +13 -4
  58. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +13 -4
  59. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget-edit.component.mjs +13 -4
  60. package/esm2022/widgets/lib/widgets/editors/text/text-box-widget.config.mjs +3 -2
  61. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.mjs +14 -4
  62. package/esm2022/widgets/lib/widgets/editors/toggle/toggle-widget.config.mjs +3 -2
  63. package/esm2022/widgets/lib/widgets/layout/block/block-widget-designer.component.mjs +40 -17
  64. package/esm2022/widgets/lib/widgets/layout/block/block-widget-view.component.mjs +17 -3
  65. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +8 -3
  66. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.mjs +19 -9
  67. package/esm2022/widgets/lib/widgets/layout/form-field/form-field-widget.config.mjs +3 -2
  68. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget-designer.component.mjs +47 -42
  69. package/esm2022/widgets/lib/widgets/layout/grid/grid-widget.config.mjs +9 -6
  70. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.mjs +105 -0
  71. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-print.component.mjs +19 -0
  72. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.mjs +18 -0
  73. package/esm2022/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.mjs +31 -0
  74. package/esm2022/widgets/lib/widgets/layout/grid-item/index.mjs +5 -0
  75. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.mjs +84 -0
  76. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-print.component.mjs +19 -0
  77. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.mjs +18 -0
  78. package/esm2022/widgets/lib/widgets/layout/grid-row/grid-row-widget.config.mjs +28 -0
  79. package/esm2022/widgets/lib/widgets/layout/grid-row/index.mjs +5 -0
  80. package/esm2022/widgets/lib/widgets/layout/page/page-widget-designer.component.mjs +8 -9
  81. package/esm2022/widgets/lib/widgets/layout/page/page-widget-view.component.mjs +1 -2
  82. package/esm2022/widgets/lib/widgets/layout/page/page-widget.config.mjs +2 -2
  83. package/esm2022/widgets/lib/widgets/layout/repeater/repeater-widget-designer.component.mjs +6 -6
  84. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-designer.component.mjs +38 -0
  85. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.mjs +3 -2
  86. package/esm2022/widgets/lib/widgets/layout/text-block/text-block-widget.config.mjs +4 -5
  87. package/esm2022/widgets/lib/widgets.module.mjs +7 -1
  88. package/fesm2022/acorex-platform-auth.mjs +6 -4
  89. package/fesm2022/acorex-platform-auth.mjs.map +1 -1
  90. package/fesm2022/acorex-platform-layout-builder.mjs +10 -2
  91. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  92. package/fesm2022/acorex-platform-layout-designer-preview.component-9dJh_ulU.mjs +23 -0
  93. package/fesm2022/acorex-platform-layout-designer-preview.component-9dJh_ulU.mjs.map +1 -0
  94. package/fesm2022/{acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs → acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs} +3 -3
  95. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-DXgcm-fP.mjs.map +1 -0
  96. package/fesm2022/acorex-platform-layout-designer.mjs +91 -85
  97. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  98. package/fesm2022/acorex-platform-layout-entity.mjs +12 -2
  99. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  100. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-DKNRxpQk.mjs → acorex-platform-themes-default-entity-master-create-view.component-BGT0puX_.mjs} +25 -15
  101. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-BGT0puX_.mjs.map +1 -0
  102. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-BDk03AnX.mjs → acorex-platform-themes-default-entity-master-modify-view.component-BHo31YVi.mjs} +7 -7
  103. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BHo31YVi.mjs.map +1 -0
  104. package/fesm2022/{acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs → acorex-platform-themes-default-error-401.component-zyAGwz2j.mjs} +3 -3
  105. package/fesm2022/{acorex-platform-themes-default-error-401.component-D5QQ2HAv.mjs.map → acorex-platform-themes-default-error-401.component-zyAGwz2j.mjs.map} +1 -1
  106. package/fesm2022/{acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs → acorex-platform-themes-default-error-404.component-DcxQ89LL.mjs} +3 -3
  107. package/fesm2022/{acorex-platform-themes-default-error-404.component-DSY_D3Iq.mjs.map → acorex-platform-themes-default-error-404.component-DcxQ89LL.mjs.map} +1 -1
  108. package/fesm2022/{acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs → acorex-platform-themes-default-error-offline.component-BMB6D5Cx.mjs} +3 -3
  109. package/fesm2022/{acorex-platform-themes-default-error-offline.component-B6wSkMdd.mjs.map → acorex-platform-themes-default-error-offline.component-BMB6D5Cx.mjs.map} +1 -1
  110. package/fesm2022/acorex-platform-themes-default.mjs +40 -34
  111. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  112. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs +57 -0
  113. package/fesm2022/acorex-platform-widgets-button-widget-designer.component-C0S_HJkl.mjs.map +1 -0
  114. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-DfUr_DMU.mjs +57 -0
  115. package/fesm2022/acorex-platform-widgets-checkbox-widget-designer.component-DfUr_DMU.mjs.map +1 -0
  116. package/fesm2022/{acorex-platform-widgets-checkbox-widget-view.component-BCsej7C6.mjs → acorex-platform-widgets-checkbox-widget-view.component-tPk6Gylo.mjs} +4 -1
  117. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-tPk6Gylo.mjs.map +1 -0
  118. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-BF24k3Y-.mjs +56 -0
  119. package/fesm2022/acorex-platform-widgets-color-box-widget-designer.component-BF24k3Y-.mjs.map +1 -0
  120. package/fesm2022/{acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs → acorex-platform-widgets-page-widget-designer.component-6BMZ0qRw.mjs} +8 -9
  121. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-6BMZ0qRw.mjs.map +1 -0
  122. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs +41 -0
  123. package/fesm2022/acorex-platform-widgets-text-block-widget-designer.component-Bi9hlpvB.mjs.map +1 -0
  124. package/fesm2022/acorex-platform-widgets.mjs +1165 -363
  125. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  126. package/layout/builder/lib/builder/widget.types.d.ts +6 -1
  127. package/layout/designer/index.d.ts +1 -1
  128. package/layout/designer/lib/board/board.component.d.ts +2 -0
  129. package/layout/designer/lib/designer.service.d.ts +1 -1
  130. package/layout/designer/lib/preview/preview.component.d.ts +8 -0
  131. package/layout/designer/lib/{widget-designer-renderer.component.d.ts → widget-designer-renderer.directive.d.ts} +6 -7
  132. package/package.json +18 -17
  133. package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +4 -1
  134. package/themes/default/lib/layouts/entity-layouts/entity-master-create-view/entity-master-create-view.component.d.ts +1 -1
  135. package/widgets/lib/properties/editors.props.d.ts +1 -5
  136. package/widgets/lib/properties/general.props.d.ts +6 -0
  137. package/widgets/lib/properties/index.d.ts +2 -0
  138. package/widgets/lib/properties/layout.props.d.ts +15 -1
  139. package/widgets/lib/widgets/actions/button/button-widget-designer.component.d.ts +15 -0
  140. package/widgets/lib/widgets/actions/button/button-widget-view.component.d.ts +1 -1
  141. package/widgets/lib/widgets/advance/file/file-box-widget-edit.component.d.ts +1 -0
  142. package/widgets/lib/widgets/advance/gallery/gallery-widget-edit.component.d.ts +1 -0
  143. package/widgets/lib/widgets/advance/map/map-box-widget-edit.component.d.ts +1 -0
  144. package/widgets/lib/widgets/advance/qrcode/qrcode-widget-view.component.d.ts +1 -0
  145. package/widgets/lib/widgets/advance/signature/signature-pad-widget-edit.component.d.ts +1 -0
  146. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-designer.component.d.ts +10 -0
  147. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-edit.component.d.ts +2 -5
  148. package/widgets/lib/widgets/editors/checkbox/checkbox-widget-view.component.d.ts +3 -0
  149. package/widgets/lib/widgets/editors/color/color-box-widget-designer.component.d.ts +11 -0
  150. package/widgets/lib/widgets/editors/color/color-box-widget-edit.component.d.ts +3 -0
  151. package/widgets/lib/widgets/editors/contact/contact-widget-edit.component.d.ts +1 -0
  152. package/widgets/lib/widgets/editors/date-time/date-time-box-widget-edit.component.d.ts +1 -0
  153. package/widgets/lib/widgets/editors/email/email-box-widget-edit.component.d.ts +1 -0
  154. package/widgets/lib/widgets/editors/large-text/large-text-widget-edit.component.d.ts +1 -0
  155. package/widgets/lib/widgets/editors/link/link-widget-edit.component.d.ts +1 -0
  156. package/widgets/lib/widgets/editors/number/number-box-widget-edit.component.d.ts +1 -0
  157. package/widgets/lib/widgets/editors/password/password-box-widget-edit.component.d.ts +1 -2
  158. package/widgets/lib/widgets/editors/phone/phone-box-widget-edit.component.d.ts +1 -0
  159. package/widgets/lib/widgets/editors/rich-text/rich-text-widget-edit.component.d.ts +1 -0
  160. package/widgets/lib/widgets/editors/select/select-box-widget-edit.component.d.ts +1 -0
  161. package/widgets/lib/widgets/editors/select/select-box-widget-view.component.d.ts +1 -0
  162. package/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.d.ts +1 -0
  163. package/widgets/lib/widgets/editors/text/text-box-widget-edit.component.d.ts +1 -0
  164. package/widgets/lib/widgets/editors/toggle/toggle-widget-edit.component.d.ts +2 -1
  165. package/widgets/lib/widgets/layout/block/block-widget-designer.component.d.ts +5 -1
  166. package/widgets/lib/widgets/layout/block/block-widget-view.component.d.ts +3 -0
  167. package/widgets/lib/widgets/layout/form-field/form-field-widget-designer.component.d.ts +2 -1
  168. package/widgets/lib/widgets/layout/grid/grid-widget-designer.component.d.ts +2 -5
  169. package/widgets/lib/widgets/layout/grid/grid-widget.config.d.ts +1 -1
  170. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-designer.component.d.ts +17 -0
  171. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-print.component.d.ts +6 -0
  172. package/widgets/lib/widgets/layout/grid-item/grid-item-widget-view.component.d.ts +6 -0
  173. package/widgets/lib/widgets/layout/grid-item/grid-item-widget.config.d.ts +7 -0
  174. package/widgets/lib/widgets/layout/grid-item/index.d.ts +4 -0
  175. package/widgets/lib/widgets/layout/grid-row/grid-row-widget-designer.component.d.ts +15 -0
  176. package/widgets/lib/widgets/layout/grid-row/grid-row-widget-print.component.d.ts +6 -0
  177. package/widgets/lib/widgets/layout/grid-row/grid-row-widget-view.component.d.ts +6 -0
  178. package/widgets/lib/widgets/layout/grid-row/grid-row-widget.config.d.ts +7 -0
  179. package/widgets/lib/widgets/layout/grid-row/index.d.ts +4 -0
  180. package/widgets/lib/widgets/layout/page/page-widget-designer.component.d.ts +3 -2
  181. package/widgets/lib/widgets/layout/text-block/text-block-widget-designer.component.d.ts +11 -0
  182. package/widgets/lib/widgets/layout/text-block/text-block-widget-view.component.d.ts +1 -1
  183. package/esm2022/layout/designer/lib/widget-designer-renderer.component.mjs +0 -243
  184. package/fesm2022/acorex-platform-layout-designer-widget-picker.component-CaMaBGON.mjs.map +0 -1
  185. package/fesm2022/acorex-platform-themes-default-entity-master-create-view.component-DKNRxpQk.mjs.map +0 -1
  186. package/fesm2022/acorex-platform-themes-default-entity-master-modify-view.component-BDk03AnX.mjs.map +0 -1
  187. package/fesm2022/acorex-platform-widgets-checkbox-widget-view.component-BCsej7C6.mjs.map +0 -1
  188. package/fesm2022/acorex-platform-widgets-page-widget-designer.component-DlfG4EP1.mjs.map +0 -1
@@ -47,10 +47,10 @@ export class AXPDesignerOutlineComponent {
47
47
  this.service.focus({ widget: node });
48
48
  }
49
49
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
50
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
50
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerOutlineComponent, isStandalone: true, selector: "axp-designer-outline", ngImport: i0, template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group\">\n <span class=\"ax-w-5 \">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate ax-flex-1 ax-pe-2\">{{config.title}} : {{item.name}}</span>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2 ax-justify-end \">\n @if(config.container)\n {\n <i class=\"fa-light fa-plus hover:ax-text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n }\n @if(config.name!=\"page-layout\")\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removeWidget(item)\"></i>\n }\n </div>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorCloseButtonComponent, selector: "ax-close-button", inputs: ["icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
51
51
  }
52
52
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerOutlineComponent, decorators: [{
53
53
  type: Component,
54
- args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXPLayoutBuilderModule, AXDecoratorModule], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm\">\n <span class=\"ax-w-5\">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate\">{{config.title}} : {{item.name}}</span>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
54
+ args: [{ selector: 'axp-designer-outline', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, AXPLayoutBuilderModule, AXDecoratorModule], template: "<div class=\"ax-flex ax-flex-col ax-border-e ax-w-72\">\n <div class=\"ax-flex ax-flex-row ax-w-full ax-justify-between ax-text-white ax-p-2 ax-border-b\">\n <div class=\"ax-flex ax-flex-row ax-gap-2 ax-items-center\">\n <span class=\"ax-font-semibold\">Outline</span>\n </div>\n <ax-close-button></ax-close-button>\n </div>\n <div class=\"ax-flex-1 ax-h-full ax-overflow-auto\">\n @if(root().children?.length)\n {\n <ul class=\"ax-space-y-1 ax-p-1 ax-text-white ax-text-sm\">\n @for( node of root().children;track $index)\n {\n <ng-container [ngTemplateOutlet]=\"sideMenu\" [ngTemplateOutletContext]=\"{ $implicit: node }\">\n </ng-container>\n }\n </ul>\n <ng-template #sideMenu let-item>\n <li (click)=\"handleClick($event,item)\" (mouseover)=\"handleMouseOver($event,item)\">\n <div [class.ax-bg-neutral-700]=\"item === service.selectedNode()\"\n class=\"ax-flex ax-flex-row ax-items-center ax-cursor-pointer ax-transition ax-duration-150 ax-ease-in-out ax-hover:bg-gray-700 ax-py-1 ax-px-2 ax-rounded-sm ax-group\">\n <span class=\"ax-w-5 \">\n @if(item.children?.length)\n {\n <i class=\"fa-solid\" [class.fa-chevron-right]=\"isCollapsed(item)\"\n (click)=\"handleToggleClick($event, item)\" [class.fa-chevron-down]=\"!isCollapsed(item)\"></i>\n }\n </span>\n @let config = getConfig(item);\n <span class=\"ax-w-5\">\n @if(config.icon)\n {\n <i [ngClass]=\"config.icon\"></i>\n }\n </span>\n <span class=\"ax-truncate ax-flex-1 ax-pe-2\">{{config.title}} : {{item.name}}</span>\n <div class=\"ax-invisible group-hover:ax-visible ax-flex ax-gap-2 ax-justify-end \">\n @if(config.container)\n {\n <i class=\"fa-light fa-plus hover:ax-text-primary-500\" (click)=\"service.showPicker(item)\"></i>\n }\n @if(config.name!=\"page-layout\")\n {\n <i class=\"fa-light fa-xmark hover:ax-text-danger-500\" (click)=\"service.removeWidget(item)\"></i>\n }\n </div>\n </div>\n @if(item.children?.length && !isCollapsed(item)) {\n <ul class=\"ax-space-y-1 ax-ps-3 ax-text-white ax-text-sm\">\n <ng-container *ngFor=\"let child of item.children\" [ngTemplateOutlet]=\"sideMenu\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\">\n </ng-container>\n </ul>\n }\n </li>\n </ng-template>\n }\n @else {\n <div class=\"ax-flex ax-justify-center ax-items-center ax-text-gray-300 ax-p-4\">No widgets found in the page\n </div>\n }\n </div>\n</div>" }]
55
55
  }], ctorParameters: () => [] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0bGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL291dGxpbmUvb3V0bGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL291dGxpbmUvb3V0bGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQWtDLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFVekQsTUFBTSxPQUFPLDJCQUEyQjtJQU90QztRQU5VLFlBQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVyQyxvQkFBZSxHQUFzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRS9DLFNBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE9BQU87UUFDYixPQUFPO1lBQ0wsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7WUFDaEMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QixDQUFDO0lBQ3JCLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBUztRQUM5Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsV0FBVyxDQUFDLElBQVM7UUFDN0IsMERBQTBEO1FBQzFELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxTQUFTLENBQUMsSUFBbUI7UUFDckMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUEyQixDQUFDO0lBQ2hFLENBQUM7SUFFUyxXQUFXLENBQUMsQ0FBYSxFQUFFLElBQW1CO1FBQ3RELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLElBQVM7UUFDdEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMseURBQXlEO1FBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVTLGVBQWUsQ0FBQyxDQUFhLEVBQUUsSUFBbUI7UUFDMUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs4R0EvQ1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsZ0ZDaEJ4Qyxra0ZBb0RNLDJDRHRDTSxZQUFZLGdhQUFFLHNCQUFzQiw4QkFBRSxpQkFBaUI7OzJGQUV0RCwyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUVqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQTGF5b3V0QnVpbGRlck1vZHVsZSwgQVhQV2lkZ2V0Q29uZmlnLCBBWFBXaWRnZXROb2RlLCBBWFBXaWRnZXRzQ2F0YWxvZyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgc2lnbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBEZXNpZ25lclNlcnZpY2UgfSBmcm9tICcuLi9kZXNpZ25lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhwLWRlc2lnbmVyLW91dGxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJ291dGxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhQTGF5b3V0QnVpbGRlck1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBEZXNpZ25lck91dGxpbmVDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgc2VydmljZSA9IGluamVjdChBWFBEZXNpZ25lclNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBjb2xsYXBzZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gIHByb3RlY3RlZCByb290ID0gc2lnbmFsKHRoaXMuZ2V0VHJlZSgpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBtZXJnZSh0aGlzLnNlcnZpY2Uub25SZWZyZXNoLCB0aGlzLnNlcnZpY2Uub25VcGRhdGUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJvb3QudXBkYXRlKChjKSA9PiAoeyAuLi50aGlzLmdldFRyZWUoKSB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRyZWUoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLmRvY3VtZW50LFxuICAgICAgY2hpbGRyZW46IFt0aGlzLnNlcnZpY2UuY3VycmVudFBhZ2UoKV0sXG4gICAgfSBhcyBBWFBXaWRnZXROb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVDb2xsYXBzZShub2RlOiBhbnkpIHtcbiAgICAvLyBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb3Igc2V0IHRvIHRydWUgaWYgdW5kZWZpbmVkXG4gICAgdGhpcy5jb2xsYXBzZWRTdGF0ZXMuc2V0KG5vZGUsICF0aGlzLmNvbGxhcHNlZFN0YXRlcy5nZXQobm9kZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQ29sbGFwc2VkKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFJldHVybiB0aGUgY29sbGFwc2VkIHN0YXRlLCBkZWZhdWx0IGlzIGZhbHNlIChleHBhbmRlZClcbiAgICByZXR1cm4gISF0aGlzLmNvbGxhcHNlZFN0YXRlcy5nZXQobm9kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29uZmlnKG5vZGU6IEFYUFdpZGdldE5vZGUpOiBBWFBXaWRnZXRDb25maWcge1xuICAgIHJldHVybiBnZXQobm9kZSwgJ19fbWV0YV9fLmNvbmZpZycpIGFzIGFueSBhcyBBWFBXaWRnZXRDb25maWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2soZTogTW91c2VFdmVudCwgbm9kZTogQVhQV2lkZ2V0Tm9kZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZXJ2aWNlLnNlbGVjdCh7IHdpZGdldDogbm9kZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVUb2dnbGVDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogYW55KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnRzIHRoZSBldmVudCBmcm9tIGJ1YmJsaW5nIHVwIHRvIHBhcmVudCBlbGVtZW50c1xuICAgIHRoaXMudG9nZ2xlQ29sbGFwc2UoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlTW91c2VPdmVyKGU6IE1vdXNlRXZlbnQsIG5vZGU6IEFYUFdpZGdldE5vZGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VydmljZS5mb2N1cyh7IHdpZGdldDogbm9kZSB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtYm9yZGVyLWUgYXgtdy03MlwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtcm93IGF4LXctZnVsbCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtdGV4dC13aGl0ZSBheC1wLTIgYXgtYm9yZGVyLWJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1yb3cgYXgtZ2FwLTIgYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGRcIj5PdXRsaW5lPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LWNsb3NlLWJ1dHRvbj48L2F4LWNsb3NlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LWgtZnVsbCBheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIEBpZihyb290KCkuY2hpbGRyZW4/Lmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICA8dWwgY2xhc3M9XCJheC1zcGFjZS15LTEgYXgtcC0xIGF4LXRleHQtd2hpdGUgYXgtdGV4dC1zbVwiPlxuICAgICAgICAgICAgQGZvciggbm9kZSBvZiByb290KCkuY2hpbGRyZW47dHJhY2sgJGluZGV4KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaWRlTWVudSBsZXQtaXRlbT5cbiAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LGl0ZW0pXCIgKG1vdXNlb3Zlcik9XCJoYW5kbGVNb3VzZU92ZXIoJGV2ZW50LGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuYXgtYmctbmV1dHJhbC03MDBdPVwiaXRlbSA9PT0gc2VydmljZS5zZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LXJvdyBheC1pdGVtcy1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXIgYXgtdHJhbnNpdGlvbiBheC1kdXJhdGlvbi0xNTAgYXgtZWFzZS1pbi1vdXQgYXgtaG92ZXI6YmctZ3JheS03MDAgYXgtcHktMSBheC1weC0yIGF4LXJvdW5kZWQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC13LTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihpdGVtLmNoaWxkcmVuPy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkXCIgW2NsYXNzLmZhLWNoZXZyb24tcmlnaHRdPVwiaXNDb2xsYXBzZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVUb2dnbGVDbGljaygkZXZlbnQsIGl0ZW0pXCIgW2NsYXNzLmZhLWNoZXZyb24tZG93bl09XCIhaXNDb2xsYXBzZWQoaXRlbSlcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGxldCBjb25maWcgPSBnZXRDb25maWcoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdy01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29uZmlnLmljb24pXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJjb25maWcuaWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRydW5jYXRlXCI+e3tjb25maWcudGl0bGV9fSA6IHt7aXRlbS5uYW1lfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgQGlmKGl0ZW0uY2hpbGRyZW4/Lmxlbmd0aCAmJiAhaXNDb2xsYXBzZWQoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJheC1zcGFjZS15LTEgYXgtcHMtMyBheC10ZXh0LXdoaXRlIGF4LXRleHQtc21cIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgaXRlbS5jaGlsZHJlblwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNpZGVNZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2hpbGQgfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICAgICAgQGVsc2Uge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1qdXN0aWZ5LWNlbnRlciBheC1pdGVtcy1jZW50ZXIgYXgtdGV4dC1ncmF5LTMwMCBheC1wLTRcIj5ObyB3aWRnZXRzIGZvdW5kIGluIHRoZSBwYWdlXG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0bGluZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL291dGxpbmUvb3V0bGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL291dGxpbmUvb3V0bGluZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQWtDLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUgsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7QUFVekQsTUFBTSxPQUFPLDJCQUEyQjtJQU90QztRQU5VLFlBQU8sR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVyQyxvQkFBZSxHQUFzQixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBRS9DLFNBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFHdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNsRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLE9BQU87UUFDYixPQUFPO1lBQ0wsSUFBSSxFQUFFLGlCQUFpQixDQUFDLFFBQVE7WUFDaEMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QixDQUFDO0lBQ3JCLENBQUM7SUFFTyxjQUFjLENBQUMsSUFBUztRQUM5Qix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRVMsV0FBVyxDQUFDLElBQVM7UUFDN0IsMERBQTBEO1FBQzFELE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFUyxTQUFTLENBQUMsSUFBbUI7UUFDckMsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLGlCQUFpQixDQUEyQixDQUFDO0lBQ2hFLENBQUM7SUFFUyxXQUFXLENBQUMsQ0FBYSxFQUFFLElBQW1CO1FBQ3RELENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLElBQVM7UUFDdEQsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMseURBQXlEO1FBQ2xGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVTLGVBQWUsQ0FBQyxDQUFhLEVBQUUsSUFBbUI7UUFDMUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQzs4R0EvQ1UsMkJBQTJCO2tHQUEzQiwyQkFBMkIsZ0ZDaEJ4QyxvckdBOERNLDJDRGhETSxZQUFZLGdhQUFFLHNCQUFzQiw4QkFBRSxpQkFBaUI7OzJGQUV0RCwyQkFBMkI7a0JBUnZDLFNBQVM7K0JBQ0Usc0JBQXNCLGlCQUVqQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhQTGF5b3V0QnVpbGRlck1vZHVsZSwgQVhQV2lkZ2V0Q29uZmlnLCBBWFBXaWRnZXROb2RlLCBBWFBXaWRnZXRzQ2F0YWxvZyB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgc2lnbmFsLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBEZXNpZ25lclNlcnZpY2UgfSBmcm9tICcuLi9kZXNpZ25lci5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXhwLWRlc2lnbmVyLW91dGxpbmUnLFxuICB0ZW1wbGF0ZVVybDogJ291dGxpbmUuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhQTGF5b3V0QnVpbGRlck1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBEZXNpZ25lck91dGxpbmVDb21wb25lbnQge1xuICBwcm90ZWN0ZWQgc2VydmljZSA9IGluamVjdChBWFBEZXNpZ25lclNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCBjb2xsYXBzZWRTdGF0ZXM6IE1hcDxhbnksIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gIHByb3RlY3RlZCByb290ID0gc2lnbmFsKHRoaXMuZ2V0VHJlZSgpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBtZXJnZSh0aGlzLnNlcnZpY2Uub25SZWZyZXNoLCB0aGlzLnNlcnZpY2Uub25VcGRhdGUpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnJvb3QudXBkYXRlKChjKSA9PiAoeyAuLi50aGlzLmdldFRyZWUoKSB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRyZWUoKTogQVhQV2lkZ2V0Tm9kZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IEFYUFdpZGdldHNDYXRhbG9nLmRvY3VtZW50LFxuICAgICAgY2hpbGRyZW46IFt0aGlzLnNlcnZpY2UuY3VycmVudFBhZ2UoKV0sXG4gICAgfSBhcyBBWFBXaWRnZXROb2RlO1xuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVDb2xsYXBzZShub2RlOiBhbnkpIHtcbiAgICAvLyBUb2dnbGUgdGhlIGN1cnJlbnQgc3RhdGUgb3Igc2V0IHRvIHRydWUgaWYgdW5kZWZpbmVkXG4gICAgdGhpcy5jb2xsYXBzZWRTdGF0ZXMuc2V0KG5vZGUsICF0aGlzLmNvbGxhcHNlZFN0YXRlcy5nZXQobm9kZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzQ29sbGFwc2VkKG5vZGU6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFJldHVybiB0aGUgY29sbGFwc2VkIHN0YXRlLCBkZWZhdWx0IGlzIGZhbHNlIChleHBhbmRlZClcbiAgICByZXR1cm4gISF0aGlzLmNvbGxhcHNlZFN0YXRlcy5nZXQobm9kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29uZmlnKG5vZGU6IEFYUFdpZGdldE5vZGUpOiBBWFBXaWRnZXRDb25maWcge1xuICAgIHJldHVybiBnZXQobm9kZSwgJ19fbWV0YV9fLmNvbmZpZycpIGFzIGFueSBhcyBBWFBXaWRnZXRDb25maWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ2xpY2soZTogTW91c2VFdmVudCwgbm9kZTogQVhQV2lkZ2V0Tm9kZSkge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zZXJ2aWNlLnNlbGVjdCh7IHdpZGdldDogbm9kZSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVUb2dnbGVDbGljayhldmVudDogTW91c2VFdmVudCwgaXRlbTogYW55KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIFByZXZlbnRzIHRoZSBldmVudCBmcm9tIGJ1YmJsaW5nIHVwIHRvIHBhcmVudCBlbGVtZW50c1xuICAgIHRoaXMudG9nZ2xlQ29sbGFwc2UoaXRlbSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlTW91c2VPdmVyKGU6IE1vdXNlRXZlbnQsIG5vZGU6IEFYUFdpZGdldE5vZGUpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc2VydmljZS5mb2N1cyh7IHdpZGdldDogbm9kZSB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtYm9yZGVyLWUgYXgtdy03MlwiPlxuICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtcm93IGF4LXctZnVsbCBheC1qdXN0aWZ5LWJldHdlZW4gYXgtdGV4dC13aGl0ZSBheC1wLTIgYXgtYm9yZGVyLWJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1yb3cgYXgtZ2FwLTIgYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGRcIj5PdXRsaW5lPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGF4LWNsb3NlLWJ1dHRvbj48L2F4LWNsb3NlLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleC0xIGF4LWgtZnVsbCBheC1vdmVyZmxvdy1hdXRvXCI+XG4gICAgICAgIEBpZihyb290KCkuY2hpbGRyZW4/Lmxlbmd0aClcbiAgICAgICAge1xuICAgICAgICA8dWwgY2xhc3M9XCJheC1zcGFjZS15LTEgYXgtcC0xIGF4LXRleHQtd2hpdGUgYXgtdGV4dC1zbVwiPlxuICAgICAgICAgICAgQGZvciggbm9kZSBvZiByb290KCkuY2hpbGRyZW47dHJhY2sgJGluZGV4KVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzaWRlTWVudVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC91bD5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNzaWRlTWVudSBsZXQtaXRlbT5cbiAgICAgICAgICAgIDxsaSAoY2xpY2spPVwiaGFuZGxlQ2xpY2soJGV2ZW50LGl0ZW0pXCIgKG1vdXNlb3Zlcik9XCJoYW5kbGVNb3VzZU92ZXIoJGV2ZW50LGl0ZW0pXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbY2xhc3MuYXgtYmctbmV1dHJhbC03MDBdPVwiaXRlbSA9PT0gc2VydmljZS5zZWxlY3RlZE5vZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LXJvdyBheC1pdGVtcy1jZW50ZXIgYXgtY3Vyc29yLXBvaW50ZXIgYXgtdHJhbnNpdGlvbiBheC1kdXJhdGlvbi0xNTAgYXgtZWFzZS1pbi1vdXQgYXgtaG92ZXI6YmctZ3JheS03MDAgYXgtcHktMSBheC1weC0yIGF4LXJvdW5kZWQtc20gYXgtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC13LTUgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZFwiIFtjbGFzcy5mYS1jaGV2cm9uLXJpZ2h0XT1cImlzQ29sbGFwc2VkKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlVG9nZ2xlQ2xpY2soJGV2ZW50LCBpdGVtKVwiIFtjbGFzcy5mYS1jaGV2cm9uLWRvd25dPVwiIWlzQ29sbGFwc2VkKGl0ZW0pXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIEBsZXQgY29uZmlnID0gZ2V0Q29uZmlnKGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXctNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmKGNvbmZpZy5pY29uKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwiY29uZmlnLmljb25cIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJheC10cnVuY2F0ZSBheC1mbGV4LTEgYXgtcGUtMlwiPnt7Y29uZmlnLnRpdGxlfX0gOiB7e2l0ZW0ubmFtZX19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtaW52aXNpYmxlIGdyb3VwLWhvdmVyOmF4LXZpc2libGUgYXgtZmxleCBheC1nYXAtMiAgYXgtanVzdGlmeS1lbmQgXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYoY29uZmlnLmNvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtbGlnaHQgZmEtcGx1cyBob3ZlcjpheC10ZXh0LXByaW1hcnktNTAwXCIgKGNsaWNrKT1cInNlcnZpY2Uuc2hvd1BpY2tlcihpdGVtKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZihjb25maWcubmFtZSE9XCJwYWdlLWxheW91dFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1saWdodCBmYS14bWFyayAgaG92ZXI6YXgtdGV4dC1kYW5nZXItNTAwXCIgKGNsaWNrKT1cInNlcnZpY2UucmVtb3ZlV2lkZ2V0KGl0ZW0pXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICBAaWYoaXRlbS5jaGlsZHJlbj8ubGVuZ3RoICYmICFpc0NvbGxhcHNlZChpdGVtKSkge1xuICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImF4LXNwYWNlLXktMSBheC1wcy0zIGF4LXRleHQtd2hpdGUgYXgtdGV4dC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLmNoaWxkcmVuXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwic2lkZU1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjaGlsZCB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICBAZWxzZSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWp1c3RpZnktY2VudGVyIGF4LWl0ZW1zLWNlbnRlciBheC10ZXh0LWdyYXktMzAwIGF4LXAtNFwiPk5vIHdpZGdldHMgZm91bmQgaW4gdGhlIHBhZ2VcbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,20 @@
1
+ import { AXButtonModule } from '@acorex/components/button';
2
+ import { AXDecoratorModule } from '@acorex/components/decorators';
3
+ import { Component, ViewEncapsulation } from '@angular/core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@acorex/components/button";
6
+ import * as i2 from "@acorex/components/decorators";
7
+ export class AXPLayoutDesignerPreviewComponent {
8
+ constructor() { }
9
+ ngOnInit() { }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.0", type: AXPLayoutDesignerPreviewComponent, isStandalone: true, selector: "axp-layout-preview", ngImport: i0, template: "<div class=\"ax-dark ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-surface ax-shadow\">\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <p class=\"ax-text-neutral-100\">Preview Title</p>\n <div class=\"ax-flex\">\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-sliders\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-up-right-and-down-left-from-center\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n\n </div>\n <div\n class=\"ax-select-none ax-flex ax-items-center ax-gap-1 ax-w-fit ax-rounded-full ax-text-sm ax-font-medium ax-p-1 ax-text-neutral-100 ax-bg-surface ax-absolute ax-bottom-3 ax-inset-x-0 ax-mx-auto\">\n <ax-button class=\"ax-sm\" look=\"blank\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <p>1 of 10</p>\n <ax-button class=\"ax-sm\" look=\"blank\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-chevron-right\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "responsiveOn", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "responsiveOnChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.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" }], encapsulation: i0.ViewEncapsulation.None }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPLayoutDesignerPreviewComponent, decorators: [{
14
+ type: Component,
15
+ args: [{ selector: 'axp-layout-preview', encapsulation: ViewEncapsulation.None, standalone: true, imports: [
16
+ AXButtonModule,
17
+ AXDecoratorModule
18
+ ], template: "<div class=\"ax-dark ax-h-full ax-relative ax-bg-default\">\n <div class=\"ax-flex ax-items-center ax-justify-between ax-h-12 ax-bg-surface ax-shadow\">\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-edit\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <p class=\"ax-text-neutral-100\">Preview Title</p>\n <div class=\"ax-flex\">\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-sliders\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <ax-button look=\"blank\" class=\"ax-lg\">\n <ax-prefix>\n <ax-icon class=\"fa-regular fa-up-right-and-down-left-from-center\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n\n </div>\n <div\n class=\"ax-select-none ax-flex ax-items-center ax-gap-1 ax-w-fit ax-rounded-full ax-text-sm ax-font-medium ax-p-1 ax-text-neutral-100 ax-bg-surface ax-absolute ax-bottom-3 ax-inset-x-0 ax-mx-auto\">\n <ax-button class=\"ax-sm\" look=\"blank\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-chevron-left\"></ax-icon>\n </ax-prefix>\n </ax-button>\n <p>1 of 10</p>\n <ax-button class=\"ax-sm\" look=\"blank\">\n <ax-prefix>\n <ax-icon class=\"fa-solid fa-chevron-right\"></ax-icon>\n </ax-prefix>\n </ax-button>\n </div>\n</div>" }]
19
+ }], ctorParameters: () => [] });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBVSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQWFyRSxNQUFNLE9BQU8saUNBQWlDO0lBQzFDLGdCQUFnQixDQUFDO0lBRWpCLFFBQVEsS0FBVyxDQUFDOzhHQUhYLGlDQUFpQztrR0FBakMsaUNBQWlDLDhFQ2Y5QywraURBb0NNLHlERHpCRSxjQUFjLHVaQUNkLGlCQUFpQjs7MkZBR1osaUNBQWlDO2tCQVg3QyxTQUFTOytCQUNJLG9CQUFvQixpQkFHZixpQkFBaUIsQ0FBQyxJQUFJLGNBQ3pCLElBQUksV0FDUDt3QkFDTCxjQUFjO3dCQUNkLGlCQUFpQjtxQkFDcEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHsgQVhEZWNvcmF0b3JNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvZGVjb3JhdG9ycyc7XG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdheHAtbGF5b3V0LXByZXZpZXcnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcmV2aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9wcmV2aWV3LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgICAgIEFYRGVjb3JhdG9yTW9kdWxlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBBWFBMYXlvdXREZXNpZ25lclByZXZpZXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWRhcmsgYXgtaC1mdWxsIGF4LXJlbGF0aXZlIGF4LWJnLWRlZmF1bHRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1pdGVtcy1jZW50ZXIgYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWgtMTIgYXgtYmctc3VyZmFjZSBheC1zaGFkb3dcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiBjbGFzcz1cImF4LWxnXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtcmVndWxhciBmYS1lZGl0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtbmV1dHJhbC0xMDBcIj5QcmV2aWV3IFRpdGxlPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleFwiPlxuICAgICAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwiYmxhbmtcIiBjbGFzcz1cImF4LWxnXCI+XG4gICAgICAgICAgICAgICAgPGF4LXByZWZpeD5cbiAgICAgICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1yZWd1bGFyIGZhLXNsaWRlcnNcIj48L2F4LWljb24+XG4gICAgICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgICAgICA8L2F4LWJ1dHRvbj5cbiAgICAgICAgICAgIDxheC1idXR0b24gbG9vaz1cImJsYW5rXCIgY2xhc3M9XCJheC1sZ1wiPlxuICAgICAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtcmVndWxhciBmYS11cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyXCI+PC9heC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYXgtcHJlZml4PlxuICAgICAgICAgICAgPC9heC1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImF4LXNlbGVjdC1ub25lIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0xIGF4LXctZml0IGF4LXJvdW5kZWQtZnVsbCBheC10ZXh0LXNtIGF4LWZvbnQtbWVkaXVtIGF4LXAtMSBheC10ZXh0LW5ldXRyYWwtMTAwIGF4LWJnLXN1cmZhY2UgYXgtYWJzb2x1dGUgYXgtYm90dG9tLTMgYXgtaW5zZXQteC0wIGF4LW14LWF1dG9cIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBjbGFzcz1cImF4LXNtXCIgbG9vaz1cImJsYW5rXCI+XG4gICAgICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgICAgIDxheC1pY29uIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi1sZWZ0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgICAgICA8cD4xIG9mIDEwPC9wPlxuICAgICAgICA8YXgtYnV0dG9uIGNsYXNzPVwiYXgtc21cIiBsb29rPVwiYmxhbmtcIj5cbiAgICAgICAgICAgIDxheC1wcmVmaXg+XG4gICAgICAgICAgICAgICAgPGF4LWljb24gY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0XCI+PC9heC1pY29uPlxuICAgICAgICAgICAgPC9heC1wcmVmaXg+XG4gICAgICAgIDwvYXgtYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,224 @@
1
+ import { AXUnsubscriber } from '@acorex/core/utils';
2
+ import { AXP_WIDGET_TOKEN, AXPWidgetRegistryService, } from '@acorex/platform/layout/builder';
3
+ import { Directive, effect, HostListener, inject, Injector, input, NgZone, signal, ViewContainerRef, } from '@angular/core';
4
+ import { cloneDeep, get, merge, set } from 'lodash-es';
5
+ import { first } from 'rxjs';
6
+ import { AXPDesignerService } from './designer.service';
7
+ import * as i0 from "@angular/core";
8
+ export class AXPWidgetDesignerRendererDirective {
9
+ /**
10
+ * @ignore
11
+ */
12
+ constructor() {
13
+ this.mergedOptions = signal({});
14
+ this.injector = inject(Injector);
15
+ this.widgetRegistery = inject(AXPWidgetRegistryService);
16
+ this.unsubscriber = inject(AXUnsubscriber);
17
+ this.zone = inject(NgZone);
18
+ this.isLoading = signal(true);
19
+ this.service = inject(AXPDesignerService);
20
+ this.viewContainerRef = inject(ViewContainerRef);
21
+ this.parentNode = input();
22
+ this.index = input();
23
+ this.mode = input.required();
24
+ this.node = input.required();
25
+ this.hostElement = () => this.instance?.host;
26
+ this.isCurrentWidget = (w) => get(w, '__meta__.id') == get(this.node(), '__meta__.id');
27
+ this.service.onUpdate.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
28
+ if (this.isCurrentWidget(c.widget)) {
29
+ this.applyOptions(c.values?.options);
30
+ }
31
+ });
32
+ //
33
+ this.service.onSelected.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
34
+ this.zone.runOutsideAngular(() => {
35
+ if (this.isCurrentWidget(c.widget)) {
36
+ this.select();
37
+ }
38
+ else {
39
+ this.unselect();
40
+ }
41
+ });
42
+ });
43
+ //
44
+ this.service.onFocused.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
45
+ if (c.widget && this.isCurrentWidget(c.widget)) {
46
+ this.addOverlay();
47
+ }
48
+ else {
49
+ this.removeOverlay();
50
+ }
51
+ });
52
+ //
53
+ this.service.onRefresh.pipe(this.unsubscriber.takeUntilDestroy).subscribe((c) => {
54
+ if (this.isCurrentWidget(c.widget)) {
55
+ this.instance?.setChildren(this.node().children ?? []);
56
+ }
57
+ });
58
+ //
59
+ effect(async () => {
60
+ await this.loadComponent();
61
+ }, { allowSignalWrites: true });
62
+ }
63
+ async loadComponent() {
64
+ //console.log('loadComponent', this.node().type);
65
+ this.viewContainerRef.clear();
66
+ this.isLoading.set(true);
67
+ this.config = this.widgetRegistery.resolve(this.node().type);
68
+ //
69
+ const props = this.config?.components[this.mode()]?.properties
70
+ ?.filter((c) => c.schema.defaultValue)
71
+ .map((c) => ({ [c.name]: c.schema.defaultValue }))
72
+ .reduce((acc, curr) => {
73
+ return { ...acc, ...curr };
74
+ }, {});
75
+ //
76
+ this.mergedOptions.set(merge(props, this.node().options) || {});
77
+ this.preprocessAndInitialOptions(cloneDeep(this.node().options));
78
+ const tokenValue = {
79
+ node: this.node(),
80
+ options: this.mergedOptions(),
81
+ config: this.config,
82
+ defaultValue: this.node().defaultValue,
83
+ };
84
+ const token = Injector.create({
85
+ parent: this.injector,
86
+ providers: [
87
+ {
88
+ provide: AXP_WIDGET_TOKEN,
89
+ useValue: tokenValue,
90
+ },
91
+ ],
92
+ });
93
+ var com = await this.config?.components[this.mode()]?.component();
94
+ this.instance = this.viewContainerRef.createComponent(com, { injector: token }).instance;
95
+ this.instance.parent = this.parentNode();
96
+ this.instance.index = this.index();
97
+ this.instance.mode = this.mode();
98
+ //
99
+ this.instance.onReady.pipe(first()).subscribe(() => {
100
+ const host = this.hostElement();
101
+ host.classList.add("axp-widget-host");
102
+ if (this.mode() == 'designer' && host) {
103
+ host.addEventListener('mouseover', (e) => {
104
+ e.stopPropagation();
105
+ this.addOverlay();
106
+ this.service.focus({ widget: this.node() });
107
+ });
108
+ host.addEventListener('mouseleave', (e) => {
109
+ e.stopPropagation();
110
+ this.removeOverlay();
111
+ this.service.focus({ widget: null });
112
+ });
113
+ host.addEventListener('click', (e) => {
114
+ e.stopPropagation();
115
+ this.select();
116
+ this.service.select({ widget: this.node() });
117
+ });
118
+ this.service.register({
119
+ config: this.config,
120
+ id: get(this.node(), '__meta__.id'),
121
+ instance: this.instance,
122
+ widget: this.node(),
123
+ });
124
+ }
125
+ });
126
+ }
127
+ select() {
128
+ this.hostElement()?.classList.add('axp-state-selected');
129
+ this.hostElement()?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
130
+ }
131
+ unselect() {
132
+ this.hostElement()?.classList.remove('axp-state-selected');
133
+ }
134
+ addOverlay() {
135
+ this.zone.runOutsideAngular(() => {
136
+ if (this.hostElement()) {
137
+ this.hostElement()?.classList.add('axp-state-hover');
138
+ //
139
+ if (this.hostElement().querySelector('.axp-widget-overlay') || this.config?.container) {
140
+ return;
141
+ }
142
+ ;
143
+ this.overlay = document.createElement('div');
144
+ this.overlay.classList.add('axp-widget-overlay');
145
+ this.overlay.addEventListener('click', (e) => {
146
+ e.preventDefault();
147
+ e.stopPropagation();
148
+ this.service.select({ widget: this.node() });
149
+ });
150
+ this.overlay.addEventListener('mouseleave', (e) => {
151
+ e.preventDefault();
152
+ e.stopPropagation();
153
+ this.service.focus({ widget: null });
154
+ });
155
+ this.hostElement().appendChild(this.overlay);
156
+ }
157
+ });
158
+ }
159
+ removeOverlay() {
160
+ this.zone.runOutsideAngular(() => {
161
+ if (this.hostElement()) {
162
+ this.hostElement()?.classList.remove('axp-state-hover');
163
+ //
164
+ this.overlay?.remove();
165
+ }
166
+ });
167
+ }
168
+ preprocessAndInitialOptions(obj, pathPrefix = '') {
169
+ if (!obj)
170
+ return;
171
+ Object.entries(obj).forEach(([key, value]) => {
172
+ const currentPath = pathPrefix ? `${pathPrefix}.${key}` : key;
173
+ this.mergedOptions.update((currentOptions) => {
174
+ return set(currentOptions, currentPath, value);
175
+ });
176
+ });
177
+ }
178
+ applyOptions(values) {
179
+ if (this.instance && this.node().defaultValue != null) {
180
+ this.instance.setValue(this.node().defaultValue);
181
+ }
182
+ this.mergedOptions.update((currentOptions) => {
183
+ return merge(currentOptions, values);
184
+ });
185
+ this.instance?.setOptions(this.mergedOptions());
186
+ }
187
+ async onKeydownHandler(event) {
188
+ if (this.service.selectedNode() && this.isCurrentWidget(this.service.selectedNode())) {
189
+ // handle delete
190
+ if (event.key == "Delete") {
191
+ event.preventDefault();
192
+ event.stopPropagation();
193
+ this.service.removeWidget(this.node());
194
+ }
195
+ //
196
+ // handle delete
197
+ if (this.config?.container && event.key == "Insert") {
198
+ this.service.showPicker(this.node());
199
+ }
200
+ }
201
+ }
202
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
203
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.0", type: AXPWidgetDesignerRendererDirective, 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)" } }, providers: [
204
+ {
205
+ provide: AXUnsubscriber,
206
+ },
207
+ ], ngImport: i0 }); }
208
+ }
209
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPWidgetDesignerRendererDirective, decorators: [{
210
+ type: Directive,
211
+ args: [{
212
+ selector: '[axp-widget-designer-renderer]',
213
+ standalone: true,
214
+ providers: [
215
+ {
216
+ provide: AXUnsubscriber,
217
+ },
218
+ ],
219
+ }]
220
+ }], ctorParameters: () => [], propDecorators: { onKeydownHandler: [{
221
+ type: HostListener,
222
+ args: ['document:keydown', ['$event']]
223
+ }] } });
224
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWRlc2lnbmVyLXJlbmRlcmVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vbGF5b3V0L2Rlc2lnbmVyL3NyYy9saWIvd2lkZ2V0LWRlc2lnbmVyLXJlbmRlcmVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUNMLGdCQUFnQixFQUtoQix3QkFBd0IsR0FFekIsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6QyxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFHTixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixnQkFBZ0IsR0FFakIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQVd4RCxNQUFNLE9BQU8sa0NBQWtDO0lBeUI3Qzs7T0FFRztJQUNIO1FBM0JVLGtCQUFhLEdBQXdCLE1BQU0sQ0FBTSxFQUFFLENBQUMsQ0FBQztRQUV2RCxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzFCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDbkQsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsU0FBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUV0QixjQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBSTNCLFlBQU8sR0FB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QUFDO2dCQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN6QyxDQUFDO1lBQ0QsRUFBRTtZQUNGLGdCQUFnQjtZQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQzs4R0F6TlUsa0NBQWtDO2tHQUFsQyxrQ0FBa0MseW9CQU5sQztZQUNUO2dCQUNFLE9BQU8sRUFBRSxjQUFjO2FBQ3hCO1NBQ0Y7OzJGQUVVLGtDQUFrQztrQkFUOUMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0NBQWdDO29CQUMxQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxjQUFjO3lCQUN4QjtxQkFDRjtpQkFDRjt3REE0TU8sZ0JBQWdCO3NCQURyQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhVbnN1YnNjcmliZXIgfSBmcm9tICdAYWNvcmV4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQVhQX1dJREdFVF9UT0tFTixcbiAgQVhQV2lkZ2V0Q29tcG9uZW50LFxuICBBWFBXaWRnZXRDb25maWcsXG4gIEFYUFdpZGdldE5vZGUsXG4gIEFYUFdpZGdldE5vZGVUb2tlbixcbiAgQVhQV2lkZ2V0UmVnaXN0cnlTZXJ2aWNlLFxuICBBWFBXaWRnZXRSZW5kZXJNb2RlLFxufSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2xheW91dC9idWlsZGVyJztcbmltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSG9zdExpc3RlbmVyLFxuICBpbmplY3QsXG4gIEluamVjdG9yLFxuICBpbnB1dCxcbiAgTmdab25lLFxuICBzaWduYWwsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCwgZ2V0LCBtZXJnZSwgc2V0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBWFBEZXNpZ25lclNlcnZpY2UgfSBmcm9tICcuL2Rlc2lnbmVyLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYXhwLXdpZGdldC1kZXNpZ25lci1yZW5kZXJlcl0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWFVuc3Vic2NyaWJlcixcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBXaWRnZXREZXNpZ25lclJlbmRlcmVyRGlyZWN0aXZlIHtcbiAgcHJvdGVjdGVkIG1lcmdlZE9wdGlvbnM6IFdyaXRhYmxlU2lnbmFsPGFueT4gPSBzaWduYWw8YW55Pih7fSk7XG5cbiAgcHJpdmF0ZSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByb3RlY3RlZCB3aWRnZXRSZWdpc3RlcnkgPSBpbmplY3QoQVhQV2lkZ2V0UmVnaXN0cnlTZXJ2aWNlKTtcbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlciA9IGluamVjdChBWFVuc3Vic2NyaWJlcik7XG4gIHByb3RlY3RlZCB6b25lID0gaW5qZWN0KE5nWm9uZSk7XG5cbiAgcHJvdGVjdGVkIGlzTG9hZGluZyA9IHNpZ25hbCh0cnVlKTtcbiAgcHJpdmF0ZSBpbnN0YW5jZSE6IEFYUFdpZGdldENvbXBvbmVudDtcbiAgcHJpdmF0ZSBjb25maWc/OiBBWFBXaWRnZXRDb25maWcgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBzZXJ2aWNlID0gaW5qZWN0KEFYUERlc2lnbmVyU2VydmljZSk7XG4gIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICBwYXJlbnROb2RlID0gaW5wdXQ8QVhQV2lkZ2V0Q29tcG9uZW50IHwgbnVsbD4oKTtcblxuICBpbmRleCA9IGlucHV0PG51bWJlciB8IG51bGw+KCk7XG5cbiAgbW9kZSA9IGlucHV0LnJlcXVpcmVkPEFYUFdpZGdldFJlbmRlck1vZGU+KCk7XG4gIG5vZGUgPSBpbnB1dC5yZXF1aXJlZDxBWFBXaWRnZXROb2RlPigpO1xuXG4gIHByaXZhdGUgaG9zdEVsZW1lbnQgPSAoKSA9PiB0aGlzLmluc3RhbmNlPy5ob3N0IGFzIEhUTUxEaXZFbGVtZW50O1xuICBwcml2YXRlIGlzQ3VycmVudFdpZGdldCA9ICh3OiBBWFBXaWRnZXROb2RlKSA9PiBnZXQodywgJ19fbWV0YV9fLmlkJykgPT0gZ2V0KHRoaXMubm9kZSgpLCAnX19tZXRhX18uaWQnKTtcblxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLm9uVXBkYXRlLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICBpZiAodGhpcy5pc0N1cnJlbnRXaWRnZXQoYy53aWRnZXQpKSB7XG4gICAgICAgIHRoaXMuYXBwbHlPcHRpb25zKGMudmFsdWVzPy5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5vblNlbGVjdGVkLnBpcGUodGhpcy51bnN1YnNjcmliZXIudGFrZVVudGlsRGVzdHJveSkuc3Vic2NyaWJlKChjKSA9PiB7XG4gICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc0N1cnJlbnRXaWRnZXQoYy53aWRnZXQpKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3QoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudW5zZWxlY3QoKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5vbkZvY3VzZWQucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgIGlmIChjLndpZGdldCAmJiB0aGlzLmlzQ3VycmVudFdpZGdldChjLndpZGdldCkpIHtcbiAgICAgICAgdGhpcy5hZGRPdmVybGF5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZU92ZXJsYXkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5vblJlZnJlc2gucGlwZSh0aGlzLnVuc3Vic2NyaWJlci50YWtlVW50aWxEZXN0cm95KS5zdWJzY3JpYmUoKGMpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzQ3VycmVudFdpZGdldChjLndpZGdldCkpIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZT8uc2V0Q2hpbGRyZW4odGhpcy5ub2RlKCkuY2hpbGRyZW4gPz8gW10pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vXG4gICAgZWZmZWN0KFxuICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRDb21wb25lbnQoKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuICB9XG5cblxuICBwcml2YXRlIGFzeW5jIGxvYWRDb21wb25lbnQoKSB7XG4gICAgLy9jb25zb2xlLmxvZygnbG9hZENvbXBvbmVudCcsIHRoaXMubm9kZSgpLnR5cGUpO1xuICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgIHRoaXMuaXNMb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmNvbmZpZyA9IHRoaXMud2lkZ2V0UmVnaXN0ZXJ5LnJlc29sdmUodGhpcy5ub2RlKCkudHlwZSk7XG4gICAgLy9cbiAgICBjb25zdCBwcm9wcyA9IHRoaXMuY29uZmlnPy5jb21wb25lbnRzW3RoaXMubW9kZSgpXT8ucHJvcGVydGllc1xuICAgICAgPy5maWx0ZXIoKGMpID0+IGMuc2NoZW1hLmRlZmF1bHRWYWx1ZSlcbiAgICAgIC5tYXAoKGMpID0+ICh7IFtjLm5hbWVdOiBjLnNjaGVtYS5kZWZhdWx0VmFsdWUgfSkpXG4gICAgICAucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgcmV0dXJuIHsgLi4uYWNjLCAuLi5jdXJyIH07XG4gICAgICB9LCB7fSk7XG4gICAgLy9cbiAgICB0aGlzLm1lcmdlZE9wdGlvbnMuc2V0KG1lcmdlKHByb3BzLCB0aGlzLm5vZGUoKS5vcHRpb25zKSB8fCB7fSk7XG4gICAgdGhpcy5wcmVwcm9jZXNzQW5kSW5pdGlhbE9wdGlvbnMoY2xvbmVEZWVwKHRoaXMubm9kZSgpLm9wdGlvbnMpKTtcblxuICAgIGNvbnN0IHRva2VuVmFsdWUgPSB7XG4gICAgICBub2RlOiB0aGlzLm5vZGUoKSxcbiAgICAgIG9wdGlvbnM6IHRoaXMubWVyZ2VkT3B0aW9ucygpLFxuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGRlZmF1bHRWYWx1ZTogdGhpcy5ub2RlKCkuZGVmYXVsdFZhbHVlLFxuICAgIH0gYXMgQVhQV2lkZ2V0Tm9kZVRva2VuO1xuXG4gICAgY29uc3QgdG9rZW4gPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBBWFBfV0lER0VUX1RPS0VOLFxuICAgICAgICAgIHVzZVZhbHVlOiB0b2tlblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgICB2YXIgY29tID0gYXdhaXQgdGhpcy5jb25maWc/LmNvbXBvbmVudHNbdGhpcy5tb2RlKCldPy5jb21wb25lbnQoKTtcbiAgICB0aGlzLmluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudDxBWFBXaWRnZXRDb21wb25lbnQ8YW55Pj4oY29tLCB7IGluamVjdG9yOiB0b2tlbiB9KS5pbnN0YW5jZTtcbiAgICB0aGlzLmluc3RhbmNlLnBhcmVudCA9IHRoaXMucGFyZW50Tm9kZSgpO1xuICAgIHRoaXMuaW5zdGFuY2UuaW5kZXggPSB0aGlzLmluZGV4KCk7XG4gICAgdGhpcy5pbnN0YW5jZS5tb2RlID0gdGhpcy5tb2RlKCk7XG4gICAgLy9cbiAgICB0aGlzLmluc3RhbmNlLm9uUmVhZHkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgY29uc3QgaG9zdCA9IHRoaXMuaG9zdEVsZW1lbnQoKTtcbiAgICAgIGhvc3QuY2xhc3NMaXN0LmFkZChcImF4cC13aWRnZXQtaG9zdFwiKTtcbiAgICAgIGlmICh0aGlzLm1vZGUoKSA9PSAnZGVzaWduZXInICYmIGhvc3QpIHtcbiAgICAgICAgaG9zdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5hZGRPdmVybGF5KCk7XG4gICAgICAgICAgdGhpcy5zZXJ2aWNlLmZvY3VzKHsgd2lkZ2V0OiB0aGlzLm5vZGUoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIChlKSA9PiB7XG4gICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZU92ZXJsYXkoKTtcbiAgICAgICAgICB0aGlzLnNlcnZpY2UuZm9jdXMoeyB3aWRnZXQ6IG51bGwgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGhvc3QuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgdGhpcy5zZWxlY3QoKTtcbiAgICAgICAgICB0aGlzLnNlcnZpY2Uuc2VsZWN0KHsgd2lkZ2V0OiB0aGlzLm5vZGUoKSB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VydmljZS5yZWdpc3Rlcih7XG4gICAgICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyEsXG4gICAgICAgICAgaWQ6IGdldCh0aGlzLm5vZGUoKSwgJ19fbWV0YV9fLmlkJykgYXMgYW55IGFzIG51bWJlcixcbiAgICAgICAgICBpbnN0YW5jZTogdGhpcy5pbnN0YW5jZSxcbiAgICAgICAgICB3aWRnZXQ6IHRoaXMubm9kZSgpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3ZlcmxheTogSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gIHByaXZhdGUgc2VsZWN0KCkge1xuICAgIHRoaXMuaG9zdEVsZW1lbnQoKT8uY2xhc3NMaXN0LmFkZCgnYXhwLXN0YXRlLXNlbGVjdGVkJyk7XG4gICAgdGhpcy5ob3N0RWxlbWVudCgpPy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgfVxuXG4gIHVuc2VsZWN0KCkge1xuICAgIHRoaXMuaG9zdEVsZW1lbnQoKT8uY2xhc3NMaXN0LnJlbW92ZSgnYXhwLXN0YXRlLXNlbGVjdGVkJyk7XG4gIH1cblxuICBwcml2YXRlIGFkZE92ZXJsYXkoKSB7XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmhvc3RFbGVtZW50KCkpIHtcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudCgpPy5jbGFzc0xpc3QuYWRkKCdheHAtc3RhdGUtaG92ZXInKTtcbiAgICAgICAgLy9cbiAgICAgICAgaWYgKHRoaXMuaG9zdEVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcuYXhwLXdpZGdldC1vdmVybGF5JykgfHwgdGhpcy5jb25maWc/LmNvbnRhaW5lcikge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5LmNsYXNzTGlzdC5hZGQoJ2F4cC13aWRnZXQtb3ZlcmxheScpO1xuICAgICAgICB0aGlzLm92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2VydmljZS5zZWxlY3QoeyB3aWRnZXQ6IHRoaXMubm9kZSgpIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vdmVybGF5LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoZSkgPT4ge1xuICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIHRoaXMuc2VydmljZS5mb2N1cyh7IHdpZGdldDogbnVsbCB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQoKS5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVPdmVybGF5KCkge1xuICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5ob3N0RWxlbWVudCgpKSB7XG4gICAgICAgIHRoaXMuaG9zdEVsZW1lbnQoKT8uY2xhc3NMaXN0LnJlbW92ZSgnYXhwLXN0YXRlLWhvdmVyJyk7XG4gICAgICAgIC8vXG4gICAgICAgIHRoaXMub3ZlcmxheT8ucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcmVwcm9jZXNzQW5kSW5pdGlhbE9wdGlvbnMob2JqOiBhbnksIHBhdGhQcmVmaXg6IHN0cmluZyA9ICcnKTogdm9pZCB7XG4gICAgaWYgKCFvYmopIHJldHVybjtcbiAgICBPYmplY3QuZW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFBhdGggPSBwYXRoUHJlZml4ID8gYCR7cGF0aFByZWZpeH0uJHtrZXl9YCA6IGtleTtcbiAgICAgIHRoaXMubWVyZ2VkT3B0aW9ucy51cGRhdGUoKGN1cnJlbnRPcHRpb25zKSA9PiB7XG4gICAgICAgIHJldHVybiBzZXQoY3VycmVudE9wdGlvbnMsIGN1cnJlbnRQYXRoLCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlPcHRpb25zKHZhbHVlczogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5ub2RlKCkuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0VmFsdWUodGhpcy5ub2RlKCkuZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gICAgdGhpcy5tZXJnZWRPcHRpb25zLnVwZGF0ZSgoY3VycmVudE9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBtZXJnZShjdXJyZW50T3B0aW9ucywgdmFsdWVzKTtcbiAgICB9KTtcbiAgICB0aGlzLmluc3RhbmNlPy5zZXRPcHRpb25zKHRoaXMubWVyZ2VkT3B0aW9ucygpKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxuICBhc3luYyBvbktleWRvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKHRoaXMuc2VydmljZS5zZWxlY3RlZE5vZGUoKSAmJiB0aGlzLmlzQ3VycmVudFdpZGdldCh0aGlzLnNlcnZpY2Uuc2VsZWN0ZWROb2RlKCkhKSkge1xuICAgICAgLy8gaGFuZGxlIGRlbGV0ZVxuICAgICAgaWYgKGV2ZW50LmtleSA9PSBcIkRlbGV0ZVwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNlcnZpY2UucmVtb3ZlV2lkZ2V0KHRoaXMubm9kZSgpKTtcbiAgICAgIH1cbiAgICAgIC8vXG4gICAgICAvLyBoYW5kbGUgZGVsZXRlXG4gICAgICBpZiAodGhpcy5jb25maWc/LmNvbnRhaW5lciAmJiBldmVudC5rZXkgPT0gXCJJbnNlcnRcIikge1xuICAgICAgICB0aGlzLnNlcnZpY2Uuc2hvd1BpY2tlcih0aGlzLm5vZGUoKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -88,10 +88,10 @@ export class AXPDesignerWidgetPickerComponent extends AXBasePageComponent {
88
88
  this.close({ widgets: this.selectedWidgets() });
89
89
  }
90
90
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
91
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-text-primary-500\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-500\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-400 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-400 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.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: i5.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i5.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: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
91
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPDesignerWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AXCommonModule }, { kind: "directive", type: i2.AXAutoFocusDirective, selector: "[axAutoFocus]", inputs: ["axAutoFocus", "axAutoFocusTime"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i4.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: i5.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i5.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: AXTabsModule }, { kind: "component", type: i6.AXTabsComponent, selector: "ax-tabs", inputs: ["look", "location", "fitParent", "minWidth", "content"], outputs: ["onActiveTabChanged"] }, { kind: "component", type: i6.AXTabItemComponent, selector: "ax-tab-item", inputs: ["disabled", "text", "key", "headerTemplate", "active"], outputs: ["disabledChange", "onClick", "onBlur", "onFocus", "activeChange"] }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i7.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "delayTime"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], encapsulation: i0.ViewEncapsulation.None }); }
92
92
  }
93
93
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPDesignerWidgetPickerComponent, decorators: [{
94
94
  type: Component,
95
- args: [{ standalone: true, imports: [CommonModule, AXCommonModule, FormsModule, AXButtonModule, AXDecoratorModule, AXTabsModule, AXSearchBoxModule, AXPStickyDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div\n class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-text-primary-500\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-500\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-400 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-400 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"] }]
95
+ args: [{ standalone: true, imports: [CommonModule, AXCommonModule, FormsModule, AXButtonModule, AXDecoratorModule, AXTabsModule, AXSearchBoxModule, AXPStickyDirective], encapsulation: ViewEncapsulation.None, template: "<div class=\"ax-flex ax-flex-col lg:ax-h-[75vh]\">\n <div>\n <ax-tabs [look]=\"'with-line'\" (onActiveTabChanged)=\"handleTabChange($event)\">\n @for(w of tabs;track $index)\n {\n <ax-tab-item [text]=\"w.title\" [key]=\"$index.toString()\"\n [active]=\"currentTabIndex() === $index\"></ax-tab-item>\n }\n </ax-tabs>\n </div>\n <div class=\"ax-overflow-auto\" #content>\n <div class=\"ax-p-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all \" #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-shadow-xl'\" [stickyParent]=\"content\" [stickyOffset]=\"10\">\n <ax-search-box look=\"fill\" placeholder=\"e.g. Button, Text, ...\" [(ngModel)]=\"searchTerm\" [delayTime]=\"300\"\n [axAutoFocus]=\"true\">\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"ax-flex ax-flex-col ax-p-4 ax-pt-0\">\n <ng-template #itemTpl let-w>\n <div (click)=\"handleClick($event,w)\"\n class=\"ax-py-2 ax-px-3 ax-rounded-md ax-flex ax-gap-3 ax-items-center ax-group hover:ax-bg-primary-100 ax-cursor-pointer\"\n [class.ax-bg-primary-100]=\"isWidgetSelected(w)\">\n <div class=\"ax-w-10 ax-h-10 ax-flex ax-items-center ax-justify-center ax-rounded-md ax-border ax-border-neutral-200 ax-text-neutral-500 ax-bg-neutral-100 group-hover:ax-bg-primary-200\"\n [class.ax-bg-primary-200]=\"isWidgetSelected(w)\">\n <i [ngClass]=\"w.icon\" class=\"ax-text-lg group-hover:ax-text-primary-700\"\n [class.ax-text-primary-700]=\"isWidgetSelected(w)\"></i>\n </div>\n <div class=\"ax-flex ax-flex-col ax-gap-1 ax-flex-1\">\n <div class=\"ax-flex ax-items-center ax-gap-2\">\n <div class=\"ax-font-semibold ax-text-sm\">{{w.title}}</div>\n <div (click)=\"handlePinClick($event,w)\">\n @if (w.pinned) {\n <i class=\"fa-solid fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45\"></i>\n }\n @else {\n <i\n class=\"fa-light fa-thumbtack ax-text-sm ax-text-neutral-500 ax-rotate-45 ax-invisible group-hover:ax-visible\"></i>\n }\n </div>\n </div>\n <span class=\"ax-text-xs ax-text-neutral-400 ax-truncate\">\n {{w.description}}\n </span>\n </div>\n </div>\n </ng-template>\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of pinnedList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n @if(pinnedList().length)\n {\n <hr class=\"ax-my-4 ax-border-dashed\">\n }\n <div class=\"ax-grid ax-grid-cols-2 ax-gap-2 \">\n @for(w of regularList();track $index)\n {\n <ng-container *ngTemplateOutlet=\"itemTpl;context:{ $implicit: w}\"></ng-container>\n }\n </div>\n </div>\n </div>\n</div>\n@if(selectedWidgets().length)\n{\n<ax-footer>\n <ax-suffix>\n <ax-button look=\"solid\" color=\"primary\" text=\"{{ selectedWidgets().length }} Selected\"\n (onClick)=\"handleConfirmSelection()\"></ax-button>\n </ax-suffix>\n</ax-footer>\n}", styles: [".selected-widget{border-width:1px;--tw-border-opacity: 1;border-color:rgba(var(--ax-color-primary-500),var(--tw-border-opacity));--tw-bg-opacity: 1;background-color:rgba(var(--ax-color-primary-100),var(--tw-bg-opacity))}.selected-widget i{--tw-text-opacity: 1;color:rgba(var(--ax-color-primary-500),var(--tw-text-opacity))}\n"] }]
96
96
  }] });
97
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3dpZGdldC1waWNrZXIvd2lkZ2V0LXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3dpZGdldC1waWNrZXIvd2lkZ2V0LXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQTBCLE1BQU0seUJBQXlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFtQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFlcEMsTUFBTSxPQUFP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LGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsc0JBQXNCO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDOzhHQWxGVSxnQ0FBZ0M7a0dBQWhDLGdDQUFnQywrUkMxQjdDLDRwSEF5RUMsOFhEcERXLFlBQVksbVNBQUUsY0FBYywySkFBRSxXQUFXLDhWQUFFLGNBQWMsdVpBQUUsaUJBQWlCLHNXQUFFLFlBQVksa2FBQUUsaUJBQWlCLDRYQUFFLGtCQUFrQjs7MkZBS2hJLGdDQUFnQztrQkFQNUMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLGlCQUU3SCxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFNlYXJjaEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcbmltcG9ydCB7IEFYVGFic01vZHVsZSwgQVhUYWJTdHJpcENoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90YWJzJztcbmltcG9ydCB7IEFYUFN0aWNreURpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUF9XSURHRVRTX0dST1VQUywgQVhQV2lkZ2V0Q29uZmlnLCBBWFBXaWRnZXRHcm91cCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIG1vZGVsLCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGlzcGxheVdpZGdldENvbmZpZyBleHRlbmRzIEFYUFdpZGdldENvbmZpZyB7XG4gIHBpbm5lZDogYm9vbGVhbjtcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBWEJ1dHRvbk1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGUsIEFYVGFic01vZHVsZSwgQVhTZWFyY2hCb3hNb2R1bGUsIEFYUFN0aWNreURpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBEZXNpZ25lcldpZGdldFBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFYQmFzZVBhZ2VDb21wb25lbnQge1xuXG5cbiAgcHJvdGVjdGVkIHNlYXJjaFRlcm0gPSBtb2RlbCgnJyk7XG5cbiAgLy8gU2lnbmFsc1xuICBwcml2YXRlIHdpZGdldHM6IEFYUFdpZGdldENvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgZGlzcGxheVdpZGdldHMgPSBzaWduYWw8QVhQRGlzcGxheVdpZGdldENvbmZpZ1tdPihbXSk7XG5cbiAgLy8gU2lnbmFsIHRvIHRyYWNrIHNlbGVjdGVkIHdpZGdldHNcbiAgcHJvdGVjdGVkIHNlbGVjdGVkV2lkZ2V0cyA9IHNpZ25hbDxBWFBEaXNwbGF5V2lkZ2V0Q29uZmlnW10+KFtdKTtcblxuICAvLyBDb21wdXRlZCBmb3IgZmlsdGVyZWQgYW5kIG9yZGVyZWQgd2lkZ2V0IGxpc3RcbiAgcHJpdmF0ZSBvcmRlcmVkTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFiTmFtZSA9IHRoaXMuc2VsZWN0ZWRUYWIoKS5uYW1lO1xuXG4gICAgcmV0dXJuIG9yZGVyQnkoXG4gICAgICB0aGlzLmRpc3BsYXlXaWRnZXRzKCkuZmlsdGVyKHcgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVzVGFiID0gc2VsZWN0ZWRUYWJOYW1lID09PSAnYWxsJyB8fCB3Lmdyb3VwLm5hbWUgPT09IHNlbGVjdGVkVGFiTmFtZTtcbiAgICAgICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9ICFzZWFyY2ggfHwgdy50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgfHwgdy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1RhYiAmJiBtYXRjaGVzU2VhcmNoO1xuICAgICAgfSksXG4gICAgICBbJ3Bpbm5lZCcsICd0aXRsZSddLCBbJ2Rlc2MnLCAnYXNjJ11cbiAgICApO1xuICB9KTtcblxuICAvLyBQaW5uZWQgYW5kIHJlZ3VsYXIgbGlzdHNcbiAgcHJvdGVjdGVkIHBpbm5lZExpc3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9yZGVyZWRMaXN0KCkuZmlsdGVyKGMgPT4gYy5waW5uZWQpKTtcbiAgcHJvdGVjdGVkIHJlZ3VsYXJMaXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmRlcmVkTGlzdCgpLmZpbHRlcihjID0+ICFjLnBpbm5lZCkpO1xuXG4gIC8vIFRhYnMgZm9yIHRoZSB3aWRnZXQgZ3JvdXBzXG4gIHByb3RlY3RlZCB0YWJzOiBBWFBXaWRnZXRHcm91cFtdID0gb3JkZXJCeShbeyBuYW1lOiAnYWxsJywgdGl0bGU6ICdBbGwnLCBvcmRlcjogMCB9LCAuLi5BWFBfV0lER0VUU19HUk9VUFNdLCBjID0+IGMub3JkZXIpO1xuICBwcm90ZWN0ZWQgY3VycmVudFRhYkluZGV4ID0gc2lnbmFsKDApO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRUYWIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRhYnNbdGhpcy5jdXJyZW50VGFiSW5kZXgoKV0pO1xuXG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5kaXNwbGF5V2lkZ2V0cy5zZXQodGhpcy53aWRnZXRzLm1hcChjID0+ICh7IC4uLmMsIHBpbm5lZDogZmFsc2UgfSkpKVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVRhYkNoYW5nZShldmVudDogQVhUYWJTdHJpcENoYW5nZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGluZHggPSBldmVudC5pbmRleDtcbiAgICBpZiAodGhpcy5jdXJyZW50VGFiSW5kZXgoKSAhPSBpbmR4KSB7XG4gICAgICB0aGlzLmN1cnJlbnRUYWJJbmRleC5zZXQoaW5keCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCB3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpIHtcbiAgICAvL3RoaXMuY2xvc2UoeyB3aWRnZXRzOiBbd2lkZ2V0XSB9KTtcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzKCk7XG4gICAgICBjb25zdCBpc0FscmVhZHlTZWxlY3RlZCA9IGN1cnJlbnRTZWxlY3Rpb24uc29tZSh3ID0+IHcgPT09IHdpZGdldCk7XG5cbiAgICAgIGlmIChpc0FscmVhZHlTZWxlY3RlZCkge1xuICAgICAgICAvLyBEZXNlbGVjdCB3aWRnZXQgaWYgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5zZXQoY3VycmVudFNlbGVjdGlvbi5maWx0ZXIodyA9PiB3ICE9PSB3aWRnZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB3aWRnZXQgdG8gc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnNldChbLi4uY3VycmVudFNlbGVjdGlvbiwgd2lkZ2V0XSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIENUUkwgaXMgbm90IHByZXNzZWQsIHNlbGVjdCBvbmx5IHRoZSBjbGlja2VkIHdpZGdldFxuICAgICAgLy90aGlzLnNlbGVjdGVkV2lkZ2V0cy5zZXQoW3dpZGdldF0pO1xuICAgICAgdGhpcy5jbG9zZSh7IHdpZGdldHM6IFt3aWRnZXRdIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVQaW5DbGljayhlOiBNb3VzZUV2ZW50LCB3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpZGdldC5waW5uZWQgPSAhd2lkZ2V0LnBpbm5lZDtcbiAgICB0aGlzLmRpc3BsYXlXaWRnZXRzLnNldChbLi4udGhpcy5kaXNwbGF5V2lkZ2V0cygpXSk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHdpZGdldCBpcyBzZWxlY3RlZFxuICBwcm90ZWN0ZWQgaXNXaWRnZXRTZWxlY3RlZCh3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdpZGdldHMoKS5pbmNsdWRlcyh3aWRnZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbmZpcm1TZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSh7IHdpZGdldHM6IHRoaXMuc2VsZWN0ZWRXaWRnZXRzKCkgfSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgbGc6YXgtaC1bNzV2aF1cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8YXgtdGFicyBbbG9va109XCInd2l0aC1saW5lJ1wiIChvbkFjdGl2ZVRhYkNoYW5nZWQpPVwiaGFuZGxlVGFiQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIEBmb3IodyBvZiB0YWJzO3RyYWNrICRpbmRleClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIDxheC10YWItaXRlbSBbdGV4dF09XCJ3LnRpdGxlXCIgW2tleV09XCIkaW5kZXgudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJjdXJyZW50VGFiSW5kZXgoKSA9PT0gJGluZGV4XCI+PC9heC10YWItaXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9heC10YWJzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheC1vdmVyZmxvdy1hdXRvXCIgI2NvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTQgYXgtc3RpY2t5IGF4LXRvcC0wIGF4LXotMTAgYXgtdHJhbnNpdGlvbi1hbGwgXCIgI3N0aWNreT1cImF4cFN0aWNreVwiXG4gICAgICAgICAgICBbYXhwU3RpY2t5XT1cIidheC1iZy1zdXJmYWNlIGF4LXNoYWRvdy14bCdcIiBbc3RpY2t5UGFyZW50XT1cImNvbnRlbnRcIiBbc3RpY2t5T2Zmc2V0XT1cIjEwXCI+XG4gICAgICAgICAgICA8YXgtc2VhcmNoLWJveCBsb29rPVwiZmlsbFwiIHBsYWNlaG9sZGVyPVwiZS5nLiBCdXR0b24sIFRleHQsIC4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIFtkZWxheVRpbWVdPVwiMzAwXCJcbiAgICAgICAgICAgICAgICBbYXhBdXRvRm9jdXNdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1wLTQgYXgtcHQtMFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtVHBsIGxldC13PlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCx3KVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtcHktMiBheC1weC0zIGF4LXJvdW5kZWQtbWQgYXgtZmxleCBheC1nYXAtMyBheC1pdGVtcy1jZW50ZXIgYXgtZ3JvdXAgaG92ZXI6YXgtYmctcHJpbWFyeS0xMDAgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctcHJpbWFyeS0xMDBdPVwiaXNXaWRnZXRTZWxlY3RlZCh3KVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImF4LXctMTAgYXgtaC0xMCBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1qdXN0aWZ5LWNlbnRlciBheC1yb3VuZGVkLW1kIGF4LWJvcmRlciBheC1ib3JkZXItbmV1dHJhbC0yMDAgYXgtdGV4dC1uZXV0cmFsLTUwMCBheC1iZy1uZXV0cmFsLTEwMCBncm91cC1ob3ZlcjpheC10ZXh0LXByaW1hcnktNTAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbbmdDbGFzc109XCJ3Lmljb25cIiBjbGFzcz1cImF4LXRleHQtbGcgZ3JvdXAtaG92ZXI6YXgtdGV4dC1wcmltYXJ5LTUwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0xIGF4LWZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWZvbnQtc2VtaWJvbGQgYXgtdGV4dC1zbVwiPnt7dy50aXRsZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiaGFuZGxlUGluQ2xpY2soJGV2ZW50LHcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAody5waW5uZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10aHVtYnRhY2sgYXgtdGV4dC1zbSBheC10ZXh0LW5ldXRyYWwtNDAwIGF4LXJvdGF0ZS00NVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhLWxpZ2h0IGZhLXRodW1idGFjayBheC10ZXh0LXNtIGF4LXRleHQtbmV1dHJhbC00MDAgYXgtcm90YXRlLTQ1IGF4LWludmlzaWJsZSBncm91cC1ob3ZlcjpheC12aXNpYmxlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtdGV4dC14cyBheC10ZXh0LW5ldXRyYWwtNDAwIGF4LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3t3LmRlc2NyaXB0aW9ufX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWdyaWQgYXgtZ3JpZC1jb2xzLTIgYXgtZ2FwLTIgXCI+XG4gICAgICAgICAgICAgICAgQGZvcih3IG9mIHBpbm5lZExpc3QoKTt0cmFjayAkaW5kZXgpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtVHBsO2NvbnRleHQ6eyAkaW1wbGljaXQ6IHd9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYocGlubmVkTGlzdCgpLmxlbmd0aClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIDxociBjbGFzcz1cImF4LW15LTQgYXgtYm9yZGVyLWRhc2hlZFwiPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF4LWdyaWQgYXgtZ3JpZC1jb2xzLTIgYXgtZ2FwLTIgXCI+XG4gICAgICAgICAgICAgICAgQGZvcih3IG9mIHJlZ3VsYXJMaXN0KCk7dHJhY2sgJGluZGV4KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRwbDtjb250ZXh0OnsgJGltcGxpY2l0OiB3fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuQGlmKHNlbGVjdGVkV2lkZ2V0cygpLmxlbmd0aClcbntcbjxheC1mb290ZXI+XG4gICAgPGF4LXN1ZmZpeD5cbiAgICAgICAgPGF4LWJ1dHRvbiBsb29rPVwic29saWRcIiBjb2xvcj1cInByaW1hcnlcIiB0ZXh0PVwie3sgc2VsZWN0ZWRXaWRnZXRzKCkubGVuZ3RoIH19IFNlbGVjdGVkXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImhhbmRsZUNvbmZpcm1TZWxlY3Rpb24oKVwiPjwvYXgtYnV0dG9uPlxuICAgIDwvYXgtc3VmZml4PlxuPC9heC1mb290ZXI+XG59Il19
97
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LXBpY2tlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3dpZGdldC1waWNrZXIvd2lkZ2V0LXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3BsYXRmb3JtL2xheW91dC9kZXNpZ25lci9zcmMvbGliL3dpZGdldC1waWNrZXIvd2lkZ2V0LXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQTBCLE1BQU0seUJBQXlCLENBQUM7QUFDL0UsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFtQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFlcEMsTUFBTSxPQUFP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LGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRVMsc0JBQXNCO1FBQzlCLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDOzhHQWxGVSxnQ0FBZ0M7a0dBQWhDLGdDQUFnQywrUkMxQjdDLDh4SEEwRUMsOFhEckRXLFlBQVksbVNBQUUsY0FBYywySkFBRSxXQUFXLDhWQUFFLGNBQWMsdVpBQUUsaUJBQWlCLHNXQUFFLFlBQVksa2FBQUUsaUJBQWlCLDRYQUFFLGtCQUFrQjs7MkZBS2hJLGdDQUFnQztrQkFQNUMsU0FBUztpQ0FDSSxJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLGlCQUU3SCxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYQmFzZVBhZ2VDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvcGFnZSc7XG5pbXBvcnQgeyBBWFNlYXJjaEJveE1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9zZWFyY2gtYm94JztcbmltcG9ydCB7IEFYVGFic01vZHVsZSwgQVhUYWJTdHJpcENoYW5nZWRFdmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90YWJzJztcbmltcG9ydCB7IEFYUFN0aWNreURpcmVjdGl2ZSB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vY29tbW9uJztcbmltcG9ydCB7IEFYUF9XSURHRVRTX0dST1VQUywgQVhQV2lkZ2V0Q29uZmlnLCBBWFBXaWRnZXRHcm91cCB9IGZyb20gJ0BhY29yZXgvcGxhdGZvcm0vbGF5b3V0L2J1aWxkZXInO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIG1vZGVsLCBzaWduYWwsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQVhQRGlzcGxheVdpZGdldENvbmZpZyBleHRlbmRzIEFYUFdpZGdldENvbmZpZyB7XG4gIHBpbm5lZDogYm9vbGVhbjtcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQVhDb21tb25Nb2R1bGUsIEZvcm1zTW9kdWxlLCBBWEJ1dHRvbk1vZHVsZSwgQVhEZWNvcmF0b3JNb2R1bGUsIEFYVGFic01vZHVsZSwgQVhTZWFyY2hCb3hNb2R1bGUsIEFYUFN0aWNreURpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LXBpY2tlci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBWFBEZXNpZ25lcldpZGdldFBpY2tlckNvbXBvbmVudCBleHRlbmRzIEFYQmFzZVBhZ2VDb21wb25lbnQge1xuXG5cbiAgcHJvdGVjdGVkIHNlYXJjaFRlcm0gPSBtb2RlbCgnJyk7XG5cbiAgLy8gU2lnbmFsc1xuICBwcml2YXRlIHdpZGdldHM6IEFYUFdpZGdldENvbmZpZ1tdID0gW107XG4gIHByaXZhdGUgZGlzcGxheVdpZGdldHMgPSBzaWduYWw8QVhQRGlzcGxheVdpZGdldENvbmZpZ1tdPihbXSk7XG5cbiAgLy8gU2lnbmFsIHRvIHRyYWNrIHNlbGVjdGVkIHdpZGdldHNcbiAgcHJvdGVjdGVkIHNlbGVjdGVkV2lkZ2V0cyA9IHNpZ25hbDxBWFBEaXNwbGF5V2lkZ2V0Q29uZmlnW10+KFtdKTtcblxuICAvLyBDb21wdXRlZCBmb3IgZmlsdGVyZWQgYW5kIG9yZGVyZWQgd2lkZ2V0IGxpc3RcbiAgcHJpdmF0ZSBvcmRlcmVkTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWFyY2ggPSB0aGlzLnNlYXJjaFRlcm0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkVGFiTmFtZSA9IHRoaXMuc2VsZWN0ZWRUYWIoKS5uYW1lO1xuXG4gICAgcmV0dXJuIG9yZGVyQnkoXG4gICAgICB0aGlzLmRpc3BsYXlXaWRnZXRzKCkuZmlsdGVyKHcgPT4ge1xuICAgICAgICBjb25zdCBtYXRjaGVzVGFiID0gc2VsZWN0ZWRUYWJOYW1lID09PSAnYWxsJyB8fCB3Lmdyb3VwLm5hbWUgPT09IHNlbGVjdGVkVGFiTmFtZTtcbiAgICAgICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9ICFzZWFyY2ggfHwgdy50aXRsZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaCkgfHwgdy5kZXNjcmlwdGlvbj8udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1RhYiAmJiBtYXRjaGVzU2VhcmNoO1xuICAgICAgfSksXG4gICAgICBbJ3Bpbm5lZCcsICd0aXRsZSddLCBbJ2Rlc2MnLCAnYXNjJ11cbiAgICApO1xuICB9KTtcblxuICAvLyBQaW5uZWQgYW5kIHJlZ3VsYXIgbGlzdHNcbiAgcHJvdGVjdGVkIHBpbm5lZExpc3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9yZGVyZWRMaXN0KCkuZmlsdGVyKGMgPT4gYy5waW5uZWQpKTtcbiAgcHJvdGVjdGVkIHJlZ3VsYXJMaXN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcmRlcmVkTGlzdCgpLmZpbHRlcihjID0+ICFjLnBpbm5lZCkpO1xuXG4gIC8vIFRhYnMgZm9yIHRoZSB3aWRnZXQgZ3JvdXBzXG4gIHByb3RlY3RlZCB0YWJzOiBBWFBXaWRnZXRHcm91cFtdID0gb3JkZXJCeShbeyBuYW1lOiAnYWxsJywgdGl0bGU6ICdBbGwnLCBvcmRlcjogMCB9LCAuLi5BWFBfV0lER0VUU19HUk9VUFNdLCBjID0+IGMub3JkZXIpO1xuICBwcm90ZWN0ZWQgY3VycmVudFRhYkluZGV4ID0gc2lnbmFsKDApO1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRUYWIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnRhYnNbdGhpcy5jdXJyZW50VGFiSW5kZXgoKV0pO1xuXG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgdGhpcy5kaXNwbGF5V2lkZ2V0cy5zZXQodGhpcy53aWRnZXRzLm1hcChjID0+ICh7IC4uLmMsIHBpbm5lZDogZmFsc2UgfSkpKVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVRhYkNoYW5nZShldmVudDogQVhUYWJTdHJpcENoYW5nZWRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGluZHggPSBldmVudC5pbmRleDtcbiAgICBpZiAodGhpcy5jdXJyZW50VGFiSW5kZXgoKSAhPSBpbmR4KSB7XG4gICAgICB0aGlzLmN1cnJlbnRUYWJJbmRleC5zZXQoaW5keCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCB3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpIHtcbiAgICAvL3RoaXMuY2xvc2UoeyB3aWRnZXRzOiBbd2lkZ2V0XSB9KTtcbiAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgY29uc3QgY3VycmVudFNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzKCk7XG4gICAgICBjb25zdCBpc0FscmVhZHlTZWxlY3RlZCA9IGN1cnJlbnRTZWxlY3Rpb24uc29tZSh3ID0+IHcgPT09IHdpZGdldCk7XG5cbiAgICAgIGlmIChpc0FscmVhZHlTZWxlY3RlZCkge1xuICAgICAgICAvLyBEZXNlbGVjdCB3aWRnZXQgaWYgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5zZXQoY3VycmVudFNlbGVjdGlvbi5maWx0ZXIodyA9PiB3ICE9PSB3aWRnZXQpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEFkZCB3aWRnZXQgdG8gc2VsZWN0aW9uXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzLnNldChbLi4uY3VycmVudFNlbGVjdGlvbiwgd2lkZ2V0XSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIENUUkwgaXMgbm90IHByZXNzZWQsIHNlbGVjdCBvbmx5IHRoZSBjbGlja2VkIHdpZGdldFxuICAgICAgLy90aGlzLnNlbGVjdGVkV2lkZ2V0cy5zZXQoW3dpZGdldF0pO1xuICAgICAgdGhpcy5jbG9zZSh7IHdpZGdldHM6IFt3aWRnZXRdIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVQaW5DbGljayhlOiBNb3VzZUV2ZW50LCB3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHdpZGdldC5waW5uZWQgPSAhd2lkZ2V0LnBpbm5lZDtcbiAgICB0aGlzLmRpc3BsYXlXaWRnZXRzLnNldChbLi4udGhpcy5kaXNwbGF5V2lkZ2V0cygpXSk7XG4gIH1cblxuICAvLyBDaGVjayBpZiBhIHdpZGdldCBpcyBzZWxlY3RlZFxuICBwcm90ZWN0ZWQgaXNXaWRnZXRTZWxlY3RlZCh3aWRnZXQ6IEFYUERpc3BsYXlXaWRnZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFdpZGdldHMoKS5pbmNsdWRlcyh3aWRnZXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbmZpcm1TZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZSh7IHdpZGdldHM6IHRoaXMuc2VsZWN0ZWRXaWRnZXRzKCkgfSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgbGc6YXgtaC1bNzV2aF1cIj5cbiAgICA8ZGl2PlxuICAgICAgICA8YXgtdGFicyBbbG9va109XCInd2l0aC1saW5lJ1wiIChvbkFjdGl2ZVRhYkNoYW5nZWQpPVwiaGFuZGxlVGFiQ2hhbmdlKCRldmVudClcIj5cbiAgICAgICAgICAgIEBmb3IodyBvZiB0YWJzO3RyYWNrICRpbmRleClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIDxheC10YWItaXRlbSBbdGV4dF09XCJ3LnRpdGxlXCIgW2tleV09XCIkaW5kZXgudG9TdHJpbmcoKVwiXG4gICAgICAgICAgICAgICAgW2FjdGl2ZV09XCJjdXJyZW50VGFiSW5kZXgoKSA9PT0gJGluZGV4XCI+PC9heC10YWItaXRlbT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9heC10YWJzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJheC1vdmVyZmxvdy1hdXRvXCIgI2NvbnRlbnQ+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTQgYXgtc3RpY2t5IGF4LXRvcC0wIGF4LXotMTAgYXgtdHJhbnNpdGlvbi1hbGwgXCIgI3N0aWNreT1cImF4cFN0aWNreVwiXG4gICAgICAgICAgICBbYXhwU3RpY2t5XT1cIidheC1iZy1zdXJmYWNlIGF4LXNoYWRvdy14bCdcIiBbc3RpY2t5UGFyZW50XT1cImNvbnRlbnRcIiBbc3RpY2t5T2Zmc2V0XT1cIjEwXCI+XG4gICAgICAgICAgICA8YXgtc2VhcmNoLWJveCBsb29rPVwiZmlsbFwiIHBsYWNlaG9sZGVyPVwiZS5nLiBCdXR0b24sIFRleHQsIC4uLlwiIFsobmdNb2RlbCldPVwic2VhcmNoVGVybVwiIFtkZWxheVRpbWVdPVwiMzAwXCJcbiAgICAgICAgICAgICAgICBbYXhBdXRvRm9jdXNdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDxheC1jbGVhci1idXR0b24+PC9heC1jbGVhci1idXR0b24+XG4gICAgICAgICAgICA8L2F4LXNlYXJjaC1ib3g+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1wLTQgYXgtcHQtMFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpdGVtVHBsIGxldC13PlxuICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZUNsaWNrKCRldmVudCx3KVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXgtcHktMiBheC1weC0zIGF4LXJvdW5kZWQtbWQgYXgtZmxleCBheC1nYXAtMyBheC1pdGVtcy1jZW50ZXIgYXgtZ3JvdXAgaG92ZXI6YXgtYmctcHJpbWFyeS0xMDAgYXgtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctcHJpbWFyeS0xMDBdPVwiaXNXaWRnZXRTZWxlY3RlZCh3KVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdy0xMCBheC1oLTEwIGF4LWZsZXggYXgtaXRlbXMtY2VudGVyIGF4LWp1c3RpZnktY2VudGVyIGF4LXJvdW5kZWQtbWQgYXgtYm9yZGVyIGF4LWJvcmRlci1uZXV0cmFsLTIwMCBheC10ZXh0LW5ldXRyYWwtNTAwIGF4LWJnLW5ldXRyYWwtMTAwICBncm91cC1ob3ZlcjpheC1iZy1wcmltYXJ5LTIwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXgtYmctcHJpbWFyeS0yMDBdPVwiaXNXaWRnZXRTZWxlY3RlZCh3KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW25nQ2xhc3NdPVwidy5pY29uXCIgY2xhc3M9XCJheC10ZXh0LWxnIGdyb3VwLWhvdmVyOmF4LXRleHQtcHJpbWFyeS03MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5heC10ZXh0LXByaW1hcnktNzAwXT1cImlzV2lkZ2V0U2VsZWN0ZWQodylcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtZmxleCBheC1mbGV4LWNvbCBheC1nYXAtMSBheC1mbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1nYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1mb250LXNlbWlib2xkIGF4LXRleHQtc21cIj57e3cudGl0bGV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImhhbmRsZVBpbkNsaWNrKCRldmVudCx3KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHcucGlubmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtdGh1bWJ0YWNrIGF4LXRleHQtc20gYXgtdGV4dC1uZXV0cmFsLTUwMCBheC1yb3RhdGUtNDVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYS1saWdodCBmYS10aHVtYnRhY2sgYXgtdGV4dC1zbSBheC10ZXh0LW5ldXRyYWwtNTAwIGF4LXJvdGF0ZS00NSBheC1pbnZpc2libGUgZ3JvdXAtaG92ZXI6YXgtdmlzaWJsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImF4LXRleHQteHMgYXgtdGV4dC1uZXV0cmFsLTQwMCBheC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dy5kZXNjcmlwdGlvbn19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1ncmlkIGF4LWdyaWQtY29scy0yIGF4LWdhcC0yIFwiPlxuICAgICAgICAgICAgICAgIEBmb3IodyBvZiBwaW5uZWRMaXN0KCk7dHJhY2sgJGluZGV4KVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVRwbDtjb250ZXh0OnsgJGltcGxpY2l0OiB3fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgQGlmKHBpbm5lZExpc3QoKS5sZW5ndGgpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJheC1teS00IGF4LWJvcmRlci1kYXNoZWRcIj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJheC1ncmlkIGF4LWdyaWQtY29scy0yIGF4LWdhcC0yIFwiPlxuICAgICAgICAgICAgICAgIEBmb3IodyBvZiByZWd1bGFyTGlzdCgpO3RyYWNrICRpbmRleClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1UcGw7Y29udGV4dDp7ICRpbXBsaWNpdDogd31cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbkBpZihzZWxlY3RlZFdpZGdldHMoKS5sZW5ndGgpXG57XG48YXgtZm9vdGVyPlxuICAgIDxheC1zdWZmaXg+XG4gICAgICAgIDxheC1idXR0b24gbG9vaz1cInNvbGlkXCIgY29sb3I9XCJwcmltYXJ5XCIgdGV4dD1cInt7IHNlbGVjdGVkV2lkZ2V0cygpLmxlbmd0aCB9fSBTZWxlY3RlZFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJoYW5kbGVDb25maXJtU2VsZWN0aW9uKClcIj48L2F4LWJ1dHRvbj5cbiAgICA8L2F4LXN1ZmZpeD5cbjwvYXgtZm9vdGVyPlxufSJdfQ==