@acorex/platform 18.2.2 → 18.2.3

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 (311) hide show
  1. package/common/lib/app/operators.d.ts +1 -0
  2. package/common/lib/common.module.d.ts +6 -7
  3. package/common/lib/data/filter-middleware.service.d.ts +28 -0
  4. package/common/lib/data/index.d.ts +3 -1
  5. package/common/lib/data/operators.service.d.ts +14 -0
  6. package/common/lib/layout/index.d.ts +0 -2
  7. package/common/lib/schema/widgets/dateTime/dateTime-widget-edit.component.d.ts +0 -2
  8. package/common/lib/schema/widgets/dateTime/dateTime-widget-filter.component.d.ts +1 -0
  9. package/common/lib/schema/widgets/email/email-widget-edit.component.d.ts +0 -2
  10. package/common/lib/schema/widgets/phone/phone-widget-edit.component.d.ts +0 -2
  11. package/common/lib/schema/widgets/text/text-widget-edit.component.d.ts +0 -2
  12. package/common/lib/settings/setting-definition.provider.d.ts +6 -6
  13. package/common/lib/settings/settings.types.d.ts +18 -9
  14. package/esm2022/common/lib/app/operators.mjs +16 -1
  15. package/esm2022/common/lib/common.module.mjs +23 -12
  16. package/esm2022/common/lib/data/filter-middleware.service.mjs +53 -0
  17. package/esm2022/common/lib/data/index.mjs +4 -2
  18. package/esm2022/common/lib/data/operators.service.mjs +15 -0
  19. package/esm2022/common/lib/layout/index.mjs +1 -3
  20. package/esm2022/common/lib/layout/menu/menu.service.mjs +2 -2
  21. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-edit.component.mjs +7 -8
  22. package/esm2022/common/lib/schema/widgets/dateTime/dateTime-widget-filter.component.mjs +47 -25
  23. package/esm2022/common/lib/schema/widgets/email/email-widget-edit.component.mjs +6 -7
  24. package/esm2022/common/lib/schema/widgets/phone/phone-widget-edit.component.mjs +6 -7
  25. package/esm2022/common/lib/schema/widgets/text/text-widget-edit.component.mjs +6 -7
  26. package/esm2022/common/lib/settings/setting-definition.provider.mjs +141 -187
  27. package/esm2022/common/lib/settings/settings.types.mjs +2 -7
  28. package/esm2022/common/lib/utils/data-generator.mjs +1 -1
  29. package/esm2022/layout/builder/lib/builder/widget-catalog.mjs +2 -1
  30. package/esm2022/layout/builder/lib/builder/widget.types.mjs +11 -6
  31. package/esm2022/layout/designer/lib/designer/components/header-menu/header-menu.component.mjs +2 -7
  32. package/esm2022/layout/entity/lib/entity-detail-list.viewmodel.mjs +8 -6
  33. package/esm2022/layout/entity/lib/entity-master-create.viewmodel.mjs +4 -3
  34. package/esm2022/layout/entity/lib/entity-master-list.viewmodel.mjs +9 -7
  35. package/esm2022/layout/entity/lib/entity-master-single.viewmodel.mjs +4 -3
  36. package/esm2022/layout/entity/lib/entity-master-update.viewmodel.mjs +3 -3
  37. package/esm2022/layout/entity/lib/entity.module.mjs +12 -1
  38. package/esm2022/layout/setting/acorex-platform-layout-setting.mjs +5 -0
  39. package/esm2022/layout/setting/index.mjs +2 -0
  40. package/esm2022/layout/setting/lib/setting.viewmodel.mjs +50 -0
  41. package/esm2022/layouts/lib/admin/admin.module.mjs +17 -5
  42. package/esm2022/layouts/lib/admin/entity-layout/entity-create-view/entity-create-view.config.mjs +3 -3
  43. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/detail-view.config.mjs +4 -3
  44. package/esm2022/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.mjs +8 -23
  45. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-columns/list-view-option-columns.component.mjs +2 -6
  46. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-conditions/list-view-option-conditions.component.mjs +4 -5
  47. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.mjs +4 -8
  48. package/esm2022/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.mjs +12 -10
  49. package/esm2022/layouts/lib/admin/entity-layout/entity-modify-view/entity-modify-view.config.mjs +3 -3
  50. package/esm2022/layouts/lib/admin/entity-layout/entity-quick-view/entity-quick-view.component.mjs +1 -3
  51. package/esm2022/themes/default/index.mjs +2 -1
  52. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.mjs +18 -24
  53. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.mjs +6 -9
  54. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.mjs +2 -6
  55. package/esm2022/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.mjs +6 -8
  56. package/esm2022/themes/default/lib/layouts/root-layout/components/header/header.component.mjs +6 -8
  57. package/esm2022/themes/default/lib/layouts/root-layout/root-layout.component.mjs +11 -38
  58. package/esm2022/themes/default/lib/layouts/setting-layout/convert-setting-data.mjs +49 -0
  59. package/esm2022/themes/default/lib/layouts/setting-layout/index.mjs +3 -0
  60. package/esm2022/themes/default/lib/layouts/setting-layout/setting-preview/setting-preview.component.mjs +104 -0
  61. package/esm2022/themes/default/lib/layouts/setting-layout/setting-view/setting-menu.component.mjs +44 -0
  62. package/esm2022/themes/shared/lib/services/theme.service.mjs +183 -19
  63. package/esm2022/widgets/lib/properties/layout.props.mjs +13 -13
  64. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-column.component.mjs +20 -0
  65. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-designer.component.mjs +18 -0
  66. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.mjs +24 -0
  67. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-filter.component.mjs +20 -0
  68. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-print.component.mjs +19 -0
  69. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget-view.component.mjs +22 -0
  70. package/esm2022/widgets/lib/widgets/advance/cron-job/cron-job-widget.config.mjs +31 -0
  71. package/esm2022/widgets/lib/widgets/advance/cron-job/index.mjs +8 -0
  72. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-designer.component.mjs +4 -9
  73. package/esm2022/widgets/lib/widgets/editors/selection-list/selection-list-widget-edit.component.mjs +2 -9
  74. package/esm2022/widgets/lib/widgets/layout/block/block-widget.config.mjs +6 -7
  75. package/esm2022/widgets/lib/widgets.module.mjs +5 -2
  76. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs → acorex-platform-common-avatar-widget-edit.component-DtC2IaE8.mjs} +3 -4
  77. package/fesm2022/{acorex-platform-common-avatar-widget-edit.component-vDhYokEG.mjs.map → acorex-platform-common-avatar-widget-edit.component-DtC2IaE8.mjs.map} +1 -1
  78. package/fesm2022/{acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs → acorex-platform-common-avatar-widget-view.component-BOIV0Be1.mjs} +4 -5
  79. package/fesm2022/acorex-platform-common-avatar-widget-view.component-BOIV0Be1.mjs.map +1 -0
  80. package/fesm2022/{acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs → acorex-platform-common-boolean-widget-filter.component-S4-3SmKA.mjs} +3 -4
  81. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-S4-3SmKA.mjs.map +1 -0
  82. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs → acorex-platform-common-checkbox-widget-column.component-DOoneR7g.mjs} +4 -5
  83. package/fesm2022/{acorex-platform-common-checkbox-widget-column.component-Bj5rjEk1.mjs.map → acorex-platform-common-checkbox-widget-column.component-DOoneR7g.mjs.map} +1 -1
  84. package/fesm2022/{acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs → acorex-platform-common-checkbox-widget-edit.component-PFRq-XS-.mjs} +4 -5
  85. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-PFRq-XS-.mjs.map +1 -0
  86. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs → acorex-platform-common-checkbox-widget-view.component-CKz8XnjT.mjs} +4 -5
  87. package/fesm2022/{acorex-platform-common-checkbox-widget-view.component-CbQwjE_u.mjs.map → acorex-platform-common-checkbox-widget-view.component-CKz8XnjT.mjs.map} +1 -1
  88. package/fesm2022/{acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs → acorex-platform-common-dateTime-widget-column.component-DG0leXAo.mjs} +4 -5
  89. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-DG0leXAo.mjs.map +1 -0
  90. package/fesm2022/{acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs → acorex-platform-common-dateTime-widget-edit.component-D8W-XEcx.mjs} +10 -13
  91. package/fesm2022/acorex-platform-common-dateTime-widget-edit.component-D8W-XEcx.mjs.map +1 -0
  92. package/fesm2022/{acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs → acorex-platform-common-dateTime-widget-filter.component-DngCKwFY.mjs} +49 -28
  93. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-DngCKwFY.mjs.map +1 -0
  94. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs → acorex-platform-common-dateTime-widget-view.component-KGgJkiKB.mjs} +4 -5
  95. package/fesm2022/{acorex-platform-common-dateTime-widget-view.component-DxNwm_5m.mjs.map → acorex-platform-common-dateTime-widget-view.component-KGgJkiKB.mjs.map} +1 -1
  96. package/fesm2022/{acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs → acorex-platform-common-email-widget-column.component-CLNqSuB7.mjs} +4 -5
  97. package/fesm2022/acorex-platform-common-email-widget-column.component-CLNqSuB7.mjs.map +1 -0
  98. package/fesm2022/{acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs → acorex-platform-common-email-widget-edit.component--0gaRm4s.mjs} +9 -11
  99. package/fesm2022/acorex-platform-common-email-widget-edit.component--0gaRm4s.mjs.map +1 -0
  100. package/fesm2022/{acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs → acorex-platform-common-email-widget-view.component-C3AUr1HO.mjs} +4 -5
  101. package/fesm2022/{acorex-platform-common-email-widget-view.component-ClRjKVy6.mjs.map → acorex-platform-common-email-widget-view.component-C3AUr1HO.mjs.map} +1 -1
  102. package/fesm2022/{acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs → acorex-platform-common-file-widget-column.component-C9AHk2UP.mjs} +4 -5
  103. package/fesm2022/acorex-platform-common-file-widget-column.component-C9AHk2UP.mjs.map +1 -0
  104. package/fesm2022/{acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs → acorex-platform-common-file-widget-edit.component-L7bln9k0.mjs} +4 -5
  105. package/fesm2022/{acorex-platform-common-file-widget-edit.component-DsIqehpt.mjs.map → acorex-platform-common-file-widget-edit.component-L7bln9k0.mjs.map} +1 -1
  106. package/fesm2022/{acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs → acorex-platform-common-file-widget-filter.component-Ce35mqny.mjs} +4 -5
  107. package/fesm2022/acorex-platform-common-file-widget-filter.component-Ce35mqny.mjs.map +1 -0
  108. package/fesm2022/{acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs → acorex-platform-common-file-widget-view.component-BvMzrs5C.mjs} +4 -5
  109. package/fesm2022/{acorex-platform-common-file-widget-view.component-DTl_Rehd.mjs.map → acorex-platform-common-file-widget-view.component-BvMzrs5C.mjs.map} +1 -1
  110. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs → acorex-platform-common-gallery-widget-edit.component-BVuV2Ib8.mjs} +3 -4
  111. package/fesm2022/{acorex-platform-common-gallery-widget-edit.component-DHeFVg5x.mjs.map → acorex-platform-common-gallery-widget-edit.component-BVuV2Ib8.mjs.map} +1 -1
  112. package/fesm2022/{acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs → acorex-platform-common-gallery-widget-filter.component-C8tdM6PX.mjs} +4 -5
  113. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-C8tdM6PX.mjs.map +1 -0
  114. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs → acorex-platform-common-gallery-widget-view.component-D8YmSi9C.mjs} +3 -4
  115. package/fesm2022/{acorex-platform-common-gallery-widget-view.component-CkcRvfv-.mjs.map → acorex-platform-common-gallery-widget-view.component-D8YmSi9C.mjs.map} +1 -1
  116. package/fesm2022/{acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs → acorex-platform-common-largetext-widget-edit.component-DGMxpnsr.mjs} +4 -5
  117. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-DGMxpnsr.mjs.map +1 -0
  118. package/fesm2022/{acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs → acorex-platform-common-lookup-widget-column.component-B-cEaNjv.mjs} +4 -5
  119. package/fesm2022/acorex-platform-common-lookup-widget-column.component-B-cEaNjv.mjs.map +1 -0
  120. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs → acorex-platform-common-lookup-widget-edit.component-DqB_g9Zz.mjs} +4 -5
  121. package/fesm2022/{acorex-platform-common-lookup-widget-edit.component-B0HQnsb8.mjs.map → acorex-platform-common-lookup-widget-edit.component-DqB_g9Zz.mjs.map} +1 -1
  122. package/fesm2022/{acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs → acorex-platform-common-lookup-widget-filter.component-0TPWNWSd.mjs} +3 -4
  123. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-0TPWNWSd.mjs.map +1 -0
  124. package/fesm2022/{acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs → acorex-platform-common-lookup-widget-view.component-DYAg76YH.mjs} +4 -5
  125. package/fesm2022/acorex-platform-common-lookup-widget-view.component-DYAg76YH.mjs.map +1 -0
  126. package/fesm2022/{acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs → acorex-platform-common-map-widget-edit.component-C3cpsXD5.mjs} +4 -5
  127. package/fesm2022/acorex-platform-common-map-widget-edit.component-C3cpsXD5.mjs.map +1 -0
  128. package/fesm2022/{acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs → acorex-platform-common-map-widget-view.component-C-DCNaJi.mjs} +4 -5
  129. package/fesm2022/acorex-platform-common-map-widget-view.component-C-DCNaJi.mjs.map +1 -0
  130. package/fesm2022/{acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs → acorex-platform-common-messenger-widget-column.component-B2A7ZBEP.mjs} +4 -5
  131. package/fesm2022/acorex-platform-common-messenger-widget-column.component-B2A7ZBEP.mjs.map +1 -0
  132. package/fesm2022/{acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs → acorex-platform-common-messenger-widget-edit.component-DC8vQDo0.mjs} +4 -5
  133. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-DC8vQDo0.mjs.map +1 -0
  134. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs → acorex-platform-common-messenger-widget-view.component-B6FavkmG.mjs} +4 -5
  135. package/fesm2022/{acorex-platform-common-messenger-widget-view.component-DEbnPggG.mjs.map → acorex-platform-common-messenger-widget-view.component-B6FavkmG.mjs.map} +1 -1
  136. package/fesm2022/{acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs → acorex-platform-common-number-widget-edit.component-Bc5-ZUw4.mjs} +4 -5
  137. package/fesm2022/acorex-platform-common-number-widget-edit.component-Bc5-ZUw4.mjs.map +1 -0
  138. package/fesm2022/{acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs → acorex-platform-common-number-widget-filter.component-DxfJ90n4.mjs} +4 -5
  139. package/fesm2022/acorex-platform-common-number-widget-filter.component-DxfJ90n4.mjs.map +1 -0
  140. package/fesm2022/{acorex-platform-common-number-widget-view.component-ROrdklif.mjs → acorex-platform-common-number-widget-view.component-DGfLSGw1.mjs} +4 -5
  141. package/fesm2022/acorex-platform-common-number-widget-view.component-DGfLSGw1.mjs.map +1 -0
  142. package/fesm2022/{acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs → acorex-platform-common-password-widget-column.component-DEHaVLGK.mjs} +4 -5
  143. package/fesm2022/{acorex-platform-common-password-widget-column.component-vXdE4UjM.mjs.map → acorex-platform-common-password-widget-column.component-DEHaVLGK.mjs.map} +1 -1
  144. package/fesm2022/{acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs → acorex-platform-common-password-widget-edit.component-DrYyu5v-.mjs} +4 -5
  145. package/fesm2022/acorex-platform-common-password-widget-edit.component-DrYyu5v-.mjs.map +1 -0
  146. package/fesm2022/{acorex-platform-common-password-widget-view.component-rpjAeimk.mjs → acorex-platform-common-password-widget-view.component-B_HU-3J1.mjs} +4 -4
  147. package/fesm2022/{acorex-platform-common-password-widget-view.component-rpjAeimk.mjs.map → acorex-platform-common-password-widget-view.component-B_HU-3J1.mjs.map} +1 -1
  148. package/fesm2022/{acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs → acorex-platform-common-phone-widget-column.component-D99ncxxJ.mjs} +4 -5
  149. package/fesm2022/{acorex-platform-common-phone-widget-column.component-BbuUbPCu.mjs.map → acorex-platform-common-phone-widget-column.component-D99ncxxJ.mjs.map} +1 -1
  150. package/fesm2022/{acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs → acorex-platform-common-phone-widget-edit.component-a5EAI9FK.mjs} +8 -10
  151. package/fesm2022/acorex-platform-common-phone-widget-edit.component-a5EAI9FK.mjs.map +1 -0
  152. package/fesm2022/{acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs → acorex-platform-common-phone-widget-view.component-BlFVuoNN.mjs} +4 -5
  153. package/fesm2022/{acorex-platform-common-phone-widget-view.component-DDBCR_QY.mjs.map → acorex-platform-common-phone-widget-view.component-BlFVuoNN.mjs.map} +1 -1
  154. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs → acorex-platform-common-rich-text-widget-column.component-DOdv5I2s.mjs} +4 -5
  155. package/fesm2022/{acorex-platform-common-rich-text-widget-column.component-BHiq7hdp.mjs.map → acorex-platform-common-rich-text-widget-column.component-DOdv5I2s.mjs.map} +1 -1
  156. package/fesm2022/{acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs → acorex-platform-common-rich-text-widget-edit.component-DL5UyAqe.mjs} +4 -5
  157. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-DL5UyAqe.mjs.map +1 -0
  158. package/fesm2022/{acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs → acorex-platform-common-rich-text-widget-view.component-B9WB-mx9.mjs} +4 -5
  159. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-B9WB-mx9.mjs.map +1 -0
  160. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs → acorex-platform-common-selection-list-widget-column.component-CkOuYy0Z.mjs} +4 -5
  161. package/fesm2022/{acorex-platform-common-selection-list-widget-column.component-C2JikSdw.mjs.map → acorex-platform-common-selection-list-widget-column.component-CkOuYy0Z.mjs.map} +1 -1
  162. package/fesm2022/{acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs → acorex-platform-common-selection-list-widget-edit.component-BmbDQ1LH.mjs} +4 -5
  163. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-BmbDQ1LH.mjs.map +1 -0
  164. package/fesm2022/{acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs → acorex-platform-common-selection-list-widget-filter.component-Dm_1-7eT.mjs} +3 -4
  165. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-Dm_1-7eT.mjs.map +1 -0
  166. package/fesm2022/{acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs → acorex-platform-common-selection-list-widget-view.component-3hinF85C.mjs} +4 -5
  167. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-3hinF85C.mjs.map +1 -0
  168. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs → acorex-platform-common-signature-pad-widget-edit.component-DmmPbw-A.mjs} +3 -4
  169. package/fesm2022/{acorex-platform-common-signature-pad-widget-edit.component-BimaJ4_d.mjs.map → acorex-platform-common-signature-pad-widget-edit.component-DmmPbw-A.mjs.map} +1 -1
  170. package/fesm2022/{acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs → acorex-platform-common-signature-pad-widget-view.component-DkFaMNk8.mjs} +4 -5
  171. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-DkFaMNk8.mjs.map +1 -0
  172. package/fesm2022/{acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs → acorex-platform-common-string-widget-filter.component-DAqR2PUN.mjs} +4 -5
  173. package/fesm2022/acorex-platform-common-string-widget-filter.component-DAqR2PUN.mjs.map +1 -0
  174. package/fesm2022/{acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs → acorex-platform-common-text-widget-column.component-DVczwvKA.mjs} +4 -5
  175. package/fesm2022/{acorex-platform-common-text-widget-column.component-Be7Nr0lJ.mjs.map → acorex-platform-common-text-widget-column.component-DVczwvKA.mjs.map} +1 -1
  176. package/fesm2022/{acorex-platform-common-text-widget-edit.component-feJTTnye.mjs → acorex-platform-common-text-widget-edit.component-DC_GnFhe.mjs} +9 -12
  177. package/fesm2022/acorex-platform-common-text-widget-edit.component-DC_GnFhe.mjs.map +1 -0
  178. package/fesm2022/{acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs → acorex-platform-common-text-widget-view.component-BK3HZGgb.mjs} +4 -5
  179. package/fesm2022/{acorex-platform-common-text-widget-view.component-DsUAJ-md.mjs.map → acorex-platform-common-text-widget-view.component-BK3HZGgb.mjs.map} +1 -1
  180. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs → acorex-platform-common-toggle-widget-column.component-Bp1d7SAE.mjs} +4 -5
  181. package/fesm2022/{acorex-platform-common-toggle-widget-column.component-BFwzsY4-.mjs.map → acorex-platform-common-toggle-widget-column.component-Bp1d7SAE.mjs.map} +1 -1
  182. package/fesm2022/{acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs → acorex-platform-common-toggle-widget-edit.component-D64m4agx.mjs} +4 -5
  183. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-D64m4agx.mjs.map +1 -0
  184. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs → acorex-platform-common-toggle-widget-view.component-BTaXXZ88.mjs} +4 -5
  185. package/fesm2022/{acorex-platform-common-toggle-widget-view.component-DYz6VTey.mjs.map → acorex-platform-common-toggle-widget-view.component-BTaXXZ88.mjs.map} +1 -1
  186. package/fesm2022/acorex-platform-common.mjs +835 -974
  187. package/fesm2022/acorex-platform-common.mjs.map +1 -1
  188. package/fesm2022/acorex-platform-layout-builder.mjs +10 -4
  189. package/fesm2022/acorex-platform-layout-builder.mjs.map +1 -1
  190. package/fesm2022/acorex-platform-layout-designer.mjs +1 -6
  191. package/fesm2022/acorex-platform-layout-designer.mjs.map +1 -1
  192. package/fesm2022/acorex-platform-layout-entity.mjs +28 -13
  193. package/fesm2022/acorex-platform-layout-entity.mjs.map +1 -1
  194. package/fesm2022/acorex-platform-layout-setting.mjs +57 -0
  195. package/fesm2022/acorex-platform-layout-setting.mjs.map +1 -0
  196. package/fesm2022/acorex-platform-layouts.mjs +37 -46
  197. package/fesm2022/acorex-platform-layouts.mjs.map +1 -1
  198. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs → acorex-platform-themes-default-entity-master-create-view.component-CJY8R3sa.mjs} +6 -6
  199. package/fesm2022/{acorex-platform-themes-default-entity-master-create-view.component-Cf5ttvrG.mjs.map → acorex-platform-themes-default-entity-master-create-view.component-CJY8R3sa.mjs.map} +1 -1
  200. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C6zgLyry.mjs +301 -0
  201. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-C6zgLyry.mjs.map +1 -0
  202. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs → acorex-platform-themes-default-entity-master-modify-view.component-wPZPhMgy.mjs} +6 -6
  203. package/fesm2022/{acorex-platform-themes-default-entity-master-modify-view.component-CCvE7XiE.mjs.map → acorex-platform-themes-default-entity-master-modify-view.component-wPZPhMgy.mjs.map} +1 -1
  204. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DNXWb6ij.mjs +148 -0
  205. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-DNXWb6ij.mjs.map +1 -0
  206. package/fesm2022/acorex-platform-themes-default.mjs +219 -77
  207. package/fesm2022/acorex-platform-themes-default.mjs.map +1 -1
  208. package/fesm2022/acorex-platform-themes-shared.mjs +184 -20
  209. package/fesm2022/acorex-platform-themes-shared.mjs.map +1 -1
  210. package/fesm2022/{acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs → acorex-platform-widgets-template-widget-edit.component-DwPYeF0y.mjs} +2 -1
  211. package/fesm2022/{acorex-platform-widgets-template-widget-edit.component-JlCVB-Aq.mjs.map → acorex-platform-widgets-template-widget-edit.component-DwPYeF0y.mjs.map} +1 -1
  212. package/fesm2022/acorex-platform-widgets.mjs +180 -34
  213. package/fesm2022/acorex-platform-widgets.mjs.map +1 -1
  214. package/layout/builder/lib/builder/widget.types.d.ts +1 -2
  215. package/layout/entity/lib/entity-detail-list.viewmodel.d.ts +1 -0
  216. package/layout/entity/lib/entity-master-create.viewmodel.d.ts +2 -2
  217. package/layout/entity/lib/entity-master-list.viewmodel.d.ts +1 -0
  218. package/layout/setting/README.md +4 -0
  219. package/layout/setting/index.d.ts +1 -0
  220. package/layout/setting/lib/setting.viewmodel.d.ts +13 -0
  221. package/layouts/lib/admin/admin.module.d.ts +6 -3
  222. package/layouts/lib/admin/entity-layout/entity-details-view/entity-details-view.component.d.ts +42 -9
  223. package/layouts/lib/admin/entity-layout/entity-list-view/components/list-view-option-columns/list-view-option-columns.component.d.ts +0 -2
  224. package/layouts/lib/admin/entity-layout/entity-list-view/entity-list-view.component.d.ts +0 -2
  225. package/layouts/lib/admin/entity-layout/entity-list-view/list-view.config.d.ts +4 -2
  226. package/layouts/lib/admin/entity-layout/entity-quick-view/entity-quick-view.component.d.ts +0 -1
  227. package/package.json +18 -18
  228. package/themes/default/index.d.ts +1 -0
  229. package/themes/default/lib/layouts/entity-layouts/entity-detail-list-view/entity-detail-list-view.component.d.ts +43 -8
  230. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/entity-master-list-view.component.d.ts +42 -4
  231. package/themes/default/lib/layouts/entity-layouts/entity-master-list-view/list-view-option-columns/list-view-option-columns.component.d.ts +0 -2
  232. package/themes/default/lib/layouts/entity-layouts/entity-master-single-view/entity-master-single-view.component.d.ts +42 -3
  233. package/themes/default/lib/layouts/root-layout/components/header/header.component.d.ts +42 -2
  234. package/themes/default/lib/layouts/root-layout/root-layout.component.d.ts +42 -11
  235. package/themes/default/lib/layouts/setting-layout/convert-setting-data.d.ts +21 -0
  236. package/themes/default/lib/layouts/setting-layout/index.d.ts +2 -0
  237. package/themes/default/lib/layouts/setting-layout/setting-preview/setting-preview.component.d.ts +24 -0
  238. package/themes/default/lib/layouts/setting-layout/setting-view/setting-menu.component.d.ts +20 -0
  239. package/themes/shared/lib/components/theme-slot.component.d.ts +31 -5
  240. package/themes/shared/lib/services/theme.service.d.ts +45 -5
  241. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-column.component.d.ts +6 -0
  242. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-designer.component.d.ts +6 -0
  243. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-edit.component.d.ts +8 -0
  244. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-filter.component.d.ts +6 -0
  245. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-print.component.d.ts +6 -0
  246. package/widgets/lib/widgets/advance/cron-job/cron-job-widget-view.component.d.ts +7 -0
  247. package/widgets/lib/widgets/advance/cron-job/cron-job-widget.config.d.ts +7 -0
  248. package/widgets/lib/widgets/advance/cron-job/index.d.ts +7 -0
  249. package/common/lib/layout/layout.service.d.ts +0 -19
  250. package/common/lib/layout/theme/store/admin-layout.actions.d.ts +0 -7
  251. package/common/lib/layout/theme/store/admin-layout.effects.d.ts +0 -9
  252. package/common/lib/layout/theme/store/admin-layout.reducers.d.ts +0 -19
  253. package/common/lib/layout/theme/store/admin-layout.selectors.d.ts +0 -4
  254. package/common/lib/layout/theme/store/admin-layout.state.d.ts +0 -11
  255. package/common/lib/layout/theme/store/index.d.ts +0 -5
  256. package/esm2022/common/lib/layout/layout.service.mjs +0 -79
  257. package/esm2022/common/lib/layout/theme/store/admin-layout.actions.mjs +0 -11
  258. package/esm2022/common/lib/layout/theme/store/admin-layout.effects.mjs +0 -21
  259. package/esm2022/common/lib/layout/theme/store/admin-layout.reducers.mjs +0 -64
  260. package/esm2022/common/lib/layout/theme/store/admin-layout.selectors.mjs +0 -7
  261. package/esm2022/common/lib/layout/theme/store/admin-layout.state.mjs +0 -13
  262. package/esm2022/common/lib/layout/theme/store/index.mjs +0 -6
  263. package/esm2022/mocks/acorex-platform-mocks.mjs +0 -5
  264. package/esm2022/mocks/index.mjs +0 -7
  265. package/esm2022/mocks/lib/mocks.module.mjs +0 -15
  266. package/esm2022/mocks/lib/services/mocker.service.mjs +0 -114
  267. package/esm2022/mocks/lib/storage/storage.mock.service.mjs +0 -183
  268. package/fesm2022/acorex-platform-common-avatar-widget-view.component-Dew3CVLm.mjs.map +0 -1
  269. package/fesm2022/acorex-platform-common-boolean-widget-filter.component-BdE7WOK5.mjs.map +0 -1
  270. package/fesm2022/acorex-platform-common-checkbox-widget-edit.component-ChXbJsuG.mjs.map +0 -1
  271. package/fesm2022/acorex-platform-common-dateTime-widget-column.component-QUYyDVw8.mjs.map +0 -1
  272. package/fesm2022/acorex-platform-common-dateTime-widget-edit.component-CzLb3xnR.mjs.map +0 -1
  273. package/fesm2022/acorex-platform-common-dateTime-widget-filter.component-DZRQ6yVk.mjs.map +0 -1
  274. package/fesm2022/acorex-platform-common-email-widget-column.component-Cm-fhlNZ.mjs.map +0 -1
  275. package/fesm2022/acorex-platform-common-email-widget-edit.component-BfXFBLF6.mjs.map +0 -1
  276. package/fesm2022/acorex-platform-common-file-widget-column.component-B0v2rSWI.mjs.map +0 -1
  277. package/fesm2022/acorex-platform-common-file-widget-filter.component-C3uBjqF-.mjs.map +0 -1
  278. package/fesm2022/acorex-platform-common-gallery-widget-filter.component-Di446i2c.mjs.map +0 -1
  279. package/fesm2022/acorex-platform-common-largetext-widget-edit.component-D89AlBSm.mjs.map +0 -1
  280. package/fesm2022/acorex-platform-common-lookup-widget-column.component-CB0ehp_y.mjs.map +0 -1
  281. package/fesm2022/acorex-platform-common-lookup-widget-filter.component-Dxj_XEYV.mjs.map +0 -1
  282. package/fesm2022/acorex-platform-common-lookup-widget-view.component-BtO3feA9.mjs.map +0 -1
  283. package/fesm2022/acorex-platform-common-map-widget-edit.component-hXIZrhzg.mjs.map +0 -1
  284. package/fesm2022/acorex-platform-common-map-widget-view.component-RgV-r8q6.mjs.map +0 -1
  285. package/fesm2022/acorex-platform-common-messenger-widget-column.component-DGWQWuzM.mjs.map +0 -1
  286. package/fesm2022/acorex-platform-common-messenger-widget-edit.component-Blv1qL4e.mjs.map +0 -1
  287. package/fesm2022/acorex-platform-common-number-widget-edit.component-gQCEBhPv.mjs.map +0 -1
  288. package/fesm2022/acorex-platform-common-number-widget-filter.component-CvEw3awN.mjs.map +0 -1
  289. package/fesm2022/acorex-platform-common-number-widget-view.component-ROrdklif.mjs.map +0 -1
  290. package/fesm2022/acorex-platform-common-password-widget-edit.component-BCOoHtGl.mjs.map +0 -1
  291. package/fesm2022/acorex-platform-common-phone-widget-edit.component-Bo_aOxfZ.mjs.map +0 -1
  292. package/fesm2022/acorex-platform-common-rich-text-widget-edit.component-12odUyzb.mjs.map +0 -1
  293. package/fesm2022/acorex-platform-common-rich-text-widget-view.component-Xr0ohz5L.mjs.map +0 -1
  294. package/fesm2022/acorex-platform-common-selection-list-widget-edit.component-C1QPfHCm.mjs.map +0 -1
  295. package/fesm2022/acorex-platform-common-selection-list-widget-filter.component-DIgxHmqa.mjs.map +0 -1
  296. package/fesm2022/acorex-platform-common-selection-list-widget-view.component-D-VQ4JNC.mjs.map +0 -1
  297. package/fesm2022/acorex-platform-common-signature-pad-widget-view.component-USd0U707.mjs.map +0 -1
  298. package/fesm2022/acorex-platform-common-string-widget-filter.component-wI9D-Ju5.mjs.map +0 -1
  299. package/fesm2022/acorex-platform-common-text-widget-edit.component-feJTTnye.mjs.map +0 -1
  300. package/fesm2022/acorex-platform-common-toggle-widget-edit.component-Cuf9_RrU.mjs.map +0 -1
  301. package/fesm2022/acorex-platform-mocks.mjs +0 -319
  302. package/fesm2022/acorex-platform-mocks.mjs.map +0 -1
  303. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs +0 -306
  304. package/fesm2022/acorex-platform-themes-default-entity-master-list-view.component-BLb_4pK5.mjs.map +0 -1
  305. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs +0 -150
  306. package/fesm2022/acorex-platform-themes-default-entity-master-single-view.component-CwrgQFY7.mjs.map +0 -1
  307. package/mocks/README.md +0 -3
  308. package/mocks/index.d.ts +0 -3
  309. package/mocks/lib/mocks.module.d.ts +0 -7
  310. package/mocks/lib/services/mocker.service.d.ts +0 -29
  311. package/mocks/lib/storage/storage.mock.service.d.ts +0 -25
@@ -0,0 +1,104 @@
1
+ import { AXBreadcrumbsModule } from '@acorex/components/breadcrumbs';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import { AXDecoratorModule } from '@acorex/components/decorators';
4
+ import { AXToastService } from '@acorex/components/toast';
5
+ import { AXTranslationModule } from '@acorex/core/translation';
6
+ import { AXPSettingDefinitionProviderService, AXPStickyDirective } from '@acorex/platform/common';
7
+ import { AXPLayoutBuilderModule } from '@acorex/platform/layout/builder';
8
+ import { AsyncPipe } from '@angular/common';
9
+ import { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';
10
+ import { ActivatedRoute, Router, RouterLink } from '@angular/router';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@acorex/platform/layout/builder";
13
+ import * as i2 from "@acorex/components/breadcrumbs";
14
+ import * as i3 from "@acorex/components/button";
15
+ import * as i4 from "@acorex/core/translation";
16
+ export class AXPSettingsPreviewComponent {
17
+ setContext(value) {
18
+ this.context.set(value);
19
+ }
20
+ constructor() {
21
+ this.activatedRoute = inject(ActivatedRoute);
22
+ this.router = inject(Router);
23
+ this.toastService = inject(AXToastService);
24
+ this.settingService = inject(AXPSettingDefinitionProviderService);
25
+ this.data = signal(null);
26
+ this.context = signal({});
27
+ this.isSaving = signal(false);
28
+ this.previousContext = signal({});
29
+ this.canCancel = computed(() => this.isObjectEmpty(this.context()));
30
+ this.canSave = computed(() => !this.isSaving() &&
31
+ !this.isObjectEmpty(this.context()) &&
32
+ !this.areObjectsEqual(this.context(), this.previousContext()));
33
+ this.fullRoute = this.router.url.split('/settings')[0] + '/settings/';
34
+ this.eff = effect(() => console.log(this.context()));
35
+ debugger;
36
+ this.activatedRoute.params.subscribe((i) => {
37
+ const apiData = this.settingService.findGroupDetails(i?.['group']);
38
+ // console.log(apiData);
39
+ this.data.set(apiData);
40
+ });
41
+ }
42
+ isObjectEmpty(obj) {
43
+ // Check if the object has any own properties
44
+ return Object.keys(obj).length === 0;
45
+ }
46
+ areObjectsEqual(obj1, obj2) {
47
+ // Check if both are not objects or are null, compare directly
48
+ if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) {
49
+ return obj1 === obj2;
50
+ }
51
+ // Check if the keys' lengths match
52
+ const keys1 = Object.keys(obj1);
53
+ const keys2 = Object.keys(obj2);
54
+ if (keys1.length !== keys2.length) {
55
+ return false;
56
+ }
57
+ // Recursively compare each key and value
58
+ for (const key of keys1) {
59
+ const keyTyped = key;
60
+ if (!obj2.hasOwnProperty(key) || !this.areObjectsEqual(obj1[keyTyped], obj2[keyTyped])) {
61
+ return false;
62
+ }
63
+ }
64
+ return true;
65
+ }
66
+ onCancel() {
67
+ this.context.set({});
68
+ }
69
+ onSave() {
70
+ this.previousContext.set(this.context());
71
+ //call api
72
+ this.isSaving.set(true);
73
+ this.toastService.show({
74
+ color: 'success',
75
+ title: `saved successfully`,
76
+ location: 'bottom-center',
77
+ closeButton: true,
78
+ timeOut: 3000,
79
+ timeOutProgress: false,
80
+ });
81
+ //simulate wait until api call is responded
82
+ setTimeout(() => {
83
+ this.isSaving.set(false);
84
+ }, 500);
85
+ }
86
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPSettingsPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
87
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPSettingsPreviewComponent, isStandalone: true, selector: "ng-component", host: { classAttribute: "ax-w-full" }, ngImport: i0, template: "<div #content>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n [stickyParent]=\"content\"\n >\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-2xl ax-font-bold\">{{ data()?.breadcrumb?.[0]?.title }}</div>\n @if(false) {\n <div class=\"ax-text-sm ax-text-neutral-600\">description</div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n <ax-breadcrumbs-item [active]=\"false\" [routerLink]=\"fullRoute\"> Home </ax-breadcrumbs-item>\n @for(b of data()?.breadcrumb;track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [class.!dark:ax-text-neutral-200]=\"last\"\n [routerLink]=\"fullRoute + b.name\"\n >\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n </div>\n </div>\n <axp-widgets-container\n class=\"ax-flex ax-flex-col ax-gap-2 ax-p-4 ax-h-full ax-w-full\"\n [context]=\"context()\"\n (contextChange)=\"setContext($event)\"\n >\n <div class=\"ax-bg-surface ax-my-5 ax-border ax-rounded-xl\">\n @if(data()?.sections){ @for(i of data()?.sections; track i.name){\n <div class=\"ax-p-2 ax-w-full\">\n <div class=\"ax-py-4 ax-px-2\">\n <span class=\"ax-font-bold ax-text-xl\">{{ i.title }}</span>\n </div>\n @for(j of i.settings; track j.name){\n <div class=\"ax-p-2\">\n <p class=\"ax-text-sm ax-pb-1 ax-pl-1\">{{ j.title }}:</p>\n <div class=\"ax-max-w-[50%]\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\"> </ng-container>\n </div>\n </div>\n }\n </div>\n }\n <div class=\"ax-w-full ax-gap-3 ax-p-4 ax-pt-6 ax-border-t ax-flex ax-justify-end ax-items-center\">\n <ax-button [disabled]=\"canCancel()\" (onClick)=\"onCancel()\" [text]=\"'cancel' | translate | async\"></ax-button>\n <ax-button\n [disabled]=\"!canSave()\"\n (onClick)=\"onSave()\"\n color=\"primary\"\n [text]=\"'save-changes' | translate | async\"\n ></ax-button>\n </div>\n }@else {\n <div class=\"ax-p-3\">\n @for(group of data()?.childGroups; track $index){\n <div class=\"ax-p-4\">\n <a [routerLink]=\"fullRoute + group.name\" class=\"ax-text-primary-600 ax-underline ax-font-bold ax-text-xl\">{{\n group.title\n }}</a>\n </div>\n }\n </div>\n }\n </div></axp-widgets-container\n >\n</div>\n", dependencies: [{ kind: "ngmodule", type: AXPLayoutBuilderModule }, { kind: "component", type: i1.AXPWidgetContainerComponent, selector: "axp-widgets-container", inputs: ["context", "variables", "functions"], outputs: ["onChanged", "contextChange"] }, { kind: "directive", type: i1.AXPWidgetRendererDirective, selector: "[axp-widget-renderer]", inputs: ["parentNode", "index", "mode", "node"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "ngmodule", type: AXBreadcrumbsModule }, { kind: "component", type: i2.AXBreadCrumbsComponent, selector: "ax-breadcrumbs" }, { kind: "component", type: i2.AXBreadCrumbsItemComponent, selector: "ax-breadcrumbs-item", inputs: ["disabled", "active"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i3.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: AXTranslationModule }, { kind: "pipe", type: i4.AXTranslatorPipe, name: "translate" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: AXPStickyDirective, selector: "[axpSticky]", inputs: ["axpSticky", "stickyOffset", "stickyParent", "stickyTarget"], outputs: ["isStickyChange"], exportAs: ["axpSticky"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
88
+ }
89
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPSettingsPreviewComponent, decorators: [{
90
+ type: Component,
91
+ args: [{ standalone: true, imports: [
92
+ AXPLayoutBuilderModule,
93
+ AXDecoratorModule,
94
+ AXBreadcrumbsModule,
95
+ RouterLink,
96
+ AXButtonModule,
97
+ AXTranslationModule,
98
+ AsyncPipe,
99
+ AXPStickyDirective,
100
+ ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
101
+ class: 'ax-w-full',
102
+ }, template: "<div #content>\n <div\n class=\"ax-flex ax-flex-col ax-pt-4 ax-sticky ax-top-0 ax-z-10 ax-transition-all\"\n #sticky=\"axpSticky\"\n [axpSticky]=\"'ax-bg-surface ax-px-6 ax-py-3 ax-mx-6 ax-shadow-xl'\"\n [stickyOffset]=\"30\"\n [stickyParent]=\"content\"\n >\n <div class=\"ax-flex ax-justify-between ax-items-center\">\n <div class=\"ax-flex ax-gap-1 ax-items-center\">\n <div class=\"ax-flex ax-flex-col ax-gap-2 ax-transition\">\n <div class=\"ax-text-xl md:ax-text-2xl ax-font-bold\">{{ data()?.breadcrumb?.[0]?.title }}</div>\n @if(false) {\n <div class=\"ax-text-sm ax-text-neutral-600\">description</div>\n }\n <ax-breadcrumbs class=\"child:ax-font-normal child:ax-text-neutral-400\">\n <ng-template #divider>\n <i class=\"fa-solid fa-chevron-right ax-text-xs ax-mx-2\"></i>\n </ng-template>\n <ax-breadcrumbs-item [active]=\"false\" [routerLink]=\"fullRoute\"> Home </ax-breadcrumbs-item>\n @for(b of data()?.breadcrumb;track $index;let last=$last) {\n <ax-breadcrumbs-item\n [active]=\"last\"\n [class.!ax-font-semibold]=\"last\"\n [class.!ax-text-neutral-600]=\"last\"\n [class.!dark:ax-text-neutral-200]=\"last\"\n [routerLink]=\"fullRoute + b.name\"\n >\n {{ b.title }}\n </ax-breadcrumbs-item>\n }\n </ax-breadcrumbs>\n </div>\n </div>\n </div>\n </div>\n <axp-widgets-container\n class=\"ax-flex ax-flex-col ax-gap-2 ax-p-4 ax-h-full ax-w-full\"\n [context]=\"context()\"\n (contextChange)=\"setContext($event)\"\n >\n <div class=\"ax-bg-surface ax-my-5 ax-border ax-rounded-xl\">\n @if(data()?.sections){ @for(i of data()?.sections; track i.name){\n <div class=\"ax-p-2 ax-w-full\">\n <div class=\"ax-py-4 ax-px-2\">\n <span class=\"ax-font-bold ax-text-xl\">{{ i.title }}</span>\n </div>\n @for(j of i.settings; track j.name){\n <div class=\"ax-p-2\">\n <p class=\"ax-text-sm ax-pb-1 ax-pl-1\">{{ j.title }}:</p>\n <div class=\"ax-max-w-[50%]\">\n <ng-container axp-widget-renderer [node]=\"j.widget\" [mode]=\"'edit'\"> </ng-container>\n </div>\n </div>\n }\n </div>\n }\n <div class=\"ax-w-full ax-gap-3 ax-p-4 ax-pt-6 ax-border-t ax-flex ax-justify-end ax-items-center\">\n <ax-button [disabled]=\"canCancel()\" (onClick)=\"onCancel()\" [text]=\"'cancel' | translate | async\"></ax-button>\n <ax-button\n [disabled]=\"!canSave()\"\n (onClick)=\"onSave()\"\n color=\"primary\"\n [text]=\"'save-changes' | translate | async\"\n ></ax-button>\n </div>\n }@else {\n <div class=\"ax-p-3\">\n @for(group of data()?.childGroups; track $index){\n <div class=\"ax-p-4\">\n <a [routerLink]=\"fullRoute + group.name\" class=\"ax-text-primary-600 ax-underline ax-font-bold ax-text-xl\">{{\n group.title\n }}</a>\n </div>\n }\n </div>\n }\n </div></axp-widgets-container\n >\n</div>\n" }]
103
+ }], ctorParameters: () => [] });
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1wcmV2aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL3NldHRpbmctbGF5b3V0L3NldHRpbmctcHJldmlldy9zZXR0aW5nLXByZXZpZXcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvc2V0dGluZy1sYXlvdXQvc2V0dGluZy1wcmV2aWV3L3NldHRpbmctcHJldmlldy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQy9ELE9BQU8sRUFBbUIsbUNBQW1DLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuSCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckcsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7OztBQW9CckUsTUFBTSxPQUFPLDJCQUEyQjtJQVM1QixVQUFVLENBQUMsS0FBVTtRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBZUQ7UUF6QmlCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLFdBQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEIsaUJBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFdEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsbUNBQW1DLENBQUMsQ0FBQztRQUVwRSxTQUFJLEdBQUcsTUFBTSxDQUF5QixJQUFJLENBQUMsQ0FBQztRQUM1QyxZQUFPLEdBQUcsTUFBTSxDQUFtQixFQUFFLENBQUMsQ0FBQztRQUt6QyxhQUFRLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLG9CQUFlLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNCLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQy9ELFlBQU8sR0FBRyxRQUFRLENBQzFCLEdBQUcsRUFBRSxDQUNILENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25DLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQ2hFLENBQUM7UUFFRixjQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUNqRSxRQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUc5QyxRQUFRLENBQUM7UUFDVCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbkUsd0JBQXdCO1lBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxHQUFXO1FBQy9CLDZDQUE2QztRQUM3QyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sZUFBZSxDQUFJLElBQU8sRUFBRSxJQUFPO1FBQ3pDLDhEQUE4RDtRQUM5RCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0YsT0FBTyxJQUFJLEtBQUssSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxtQ0FBbUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQseUNBQXlDO1FBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7WUFDeEIsTUFBTSxRQUFRLEdBQUcsR0FBYyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDdkYsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVTLFFBQVE7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVTLE1BQU07UUFDZCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6QyxVQUFVO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckIsS0FBSyxFQUFFLFNBQVM7WUFDaEIsS0FBSyxFQUFFLG9CQUFvQjtZQUMzQixRQUFRLEVBQUUsZUFBZTtZQUN6QixXQUFXLEVBQUUsSUFBSTtZQUNqQixPQUFPLEVBQUUsSUFBSTtZQUNiLGVBQWUsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUNILDJDQUEyQztRQUMzQyxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzs4R0FyRlUsMkJBQTJCO2tHQUEzQiwyQkFBMkIsK0dDN0J4Qyw2cUdBZ0ZBLDJDRGpFSSxzQkFBc0Isc1dBQ3RCLGlCQUFpQiw4QkFDakIsbUJBQW1CLGdQQUNuQixVQUFVLG1PQUNWLGNBQWMsdVpBQ2QsbUJBQW1CLDBGQUNuQixTQUFTLDhDQUNULGtCQUFrQjs7MkZBT1QsMkJBQTJCO2tCQWxCdkMsU0FBUztpQ0FFSSxJQUFJLFdBQ1A7d0JBQ1Asc0JBQXNCO3dCQUN0QixpQkFBaUI7d0JBQ2pCLG1CQUFtQjt3QkFDbkIsVUFBVTt3QkFDVixjQUFjO3dCQUNkLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxrQkFBa0I7cUJBQ25CLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNKLEtBQUssRUFBRSxXQUFXO3FCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYQnJlYWRjcnVtYnNNb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnJlYWRjcnVtYnMnO1xuaW1wb3J0IHsgQVhCdXR0b25Nb2R1bGUgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvYnV0dG9uJztcbmltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhUb2FzdFNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvdG9hc3QnO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBBWFBHcm91cERldGFpbHMsIEFYUFNldHRpbmdEZWZpbml0aW9uUHJvdmlkZXJTZXJ2aWNlLCBBWFBTdGlja3lEaXJlY3RpdmUgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBBWFBMYXlvdXRCdWlsZGVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9sYXlvdXQvYnVpbGRlcic7XG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlckxpbmsgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICdzZXR0aW5nLXByZXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQVhQTGF5b3V0QnVpbGRlck1vZHVsZSxcbiAgICBBWERlY29yYXRvck1vZHVsZSxcbiAgICBBWEJyZWFkY3J1bWJzTW9kdWxlLFxuICAgIFJvdXRlckxpbmssXG4gICAgQVhCdXR0b25Nb2R1bGUsXG4gICAgQVhUcmFuc2xhdGlvbk1vZHVsZSxcbiAgICBBc3luY1BpcGUsXG4gICAgQVhQU3RpY2t5RGlyZWN0aXZlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaG9zdDoge1xuICAgIGNsYXNzOiAnYXgtdy1mdWxsJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgQVhQU2V0dGluZ3NQcmV2aWV3Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhY3RpdmF0ZWRSb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgdG9hc3RTZXJ2aWNlID0gaW5qZWN0KEFYVG9hc3RTZXJ2aWNlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdEZWZpbml0aW9uUHJvdmlkZXJTZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgZGF0YSA9IHNpZ25hbDxBWFBHcm91cERldGFpbHMgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIGNvbnRleHQgPSBzaWduYWw8UmVjb3JkPGFueSwgYW55Pj4oe30pO1xuICBwcm90ZWN0ZWQgc2V0Q29udGV4dCh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5jb250ZXh0LnNldCh2YWx1ZSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2F2aW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBwcmV2aW91c0NvbnRleHQgPSBzaWduYWwoe30pO1xuICBwcm90ZWN0ZWQgY2FuQ2FuY2VsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc09iamVjdEVtcHR5KHRoaXMuY29udGV4dCgpKSk7XG4gIHByb3RlY3RlZCBjYW5TYXZlID0gY29tcHV0ZWQoXG4gICAgKCkgPT5cbiAgICAgICF0aGlzLmlzU2F2aW5nKCkgJiZcbiAgICAgICF0aGlzLmlzT2JqZWN0RW1wdHkodGhpcy5jb250ZXh0KCkpICYmXG4gICAgICAhdGhpcy5hcmVPYmplY3RzRXF1YWwodGhpcy5jb250ZXh0KCksIHRoaXMucHJldmlvdXNDb250ZXh0KCkpXG4gICk7XG5cbiAgZnVsbFJvdXRlID0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCcvc2V0dGluZ3MnKVswXSArICcvc2V0dGluZ3MvJztcbiAgZWZmID0gZWZmZWN0KCgpID0+IGNvbnNvbGUubG9nKHRoaXMuY29udGV4dCgpKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZGVidWdnZXI7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKChpKSA9PiB7XG4gICAgICBjb25zdCBhcGlEYXRhID0gdGhpcy5zZXR0aW5nU2VydmljZS5maW5kR3JvdXBEZXRhaWxzKGk/LlsnZ3JvdXAnXSk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhhcGlEYXRhKTtcbiAgICAgIHRoaXMuZGF0YS5zZXQoYXBpRGF0YSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzT2JqZWN0RW1wdHkob2JqOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgb2JqZWN0IGhhcyBhbnkgb3duIHByb3BlcnRpZXNcbiAgICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDA7XG4gIH1cblxuICBwcml2YXRlIGFyZU9iamVjdHNFcXVhbDxUPihvYmoxOiBULCBvYmoyOiBUKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hlY2sgaWYgYm90aCBhcmUgbm90IG9iamVjdHMgb3IgYXJlIG51bGwsIGNvbXBhcmUgZGlyZWN0bHlcbiAgICBpZiAodHlwZW9mIG9iajEgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmoyICE9PSAnb2JqZWN0JyB8fCBvYmoxID09PSBudWxsIHx8IG9iajIgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBvYmoxID09PSBvYmoyO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIHRoZSBrZXlzJyBsZW5ndGhzIG1hdGNoXG4gICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyhvYmoxKTtcbiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKG9iajIpO1xuXG4gICAgaWYgKGtleXMxLmxlbmd0aCAhPT0ga2V5czIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBlYWNoIGtleSBhbmQgdmFsdWVcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzMSkge1xuICAgICAgY29uc3Qga2V5VHlwZWQgPSBrZXkgYXMga2V5b2YgVDtcbiAgICAgIGlmICghb2JqMi5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8ICF0aGlzLmFyZU9iamVjdHNFcXVhbChvYmoxW2tleVR5cGVkXSwgb2JqMltrZXlUeXBlZF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHQuc2V0KHt9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvblNhdmUoKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aW91c0NvbnRleHQuc2V0KHRoaXMuY29udGV4dCgpKTtcbiAgICAvL2NhbGwgYXBpXG4gICAgdGhpcy5pc1NhdmluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy50b2FzdFNlcnZpY2Uuc2hvdyh7XG4gICAgICBjb2xvcjogJ3N1Y2Nlc3MnLFxuICAgICAgdGl0bGU6IGBzYXZlZCBzdWNjZXNzZnVsbHlgLFxuICAgICAgbG9jYXRpb246ICdib3R0b20tY2VudGVyJyxcbiAgICAgIGNsb3NlQnV0dG9uOiB0cnVlLFxuICAgICAgdGltZU91dDogMzAwMCxcbiAgICAgIHRpbWVPdXRQcm9ncmVzczogZmFsc2UsXG4gICAgfSk7XG4gICAgLy9zaW11bGF0ZSB3YWl0IHVudGlsIGFwaSBjYWxsIGlzIHJlc3BvbmRlZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc1NhdmluZy5zZXQoZmFsc2UpO1xuICAgIH0sIDUwMCk7XG4gIH1cbn1cbiIsIjxkaXYgI2NvbnRlbnQ+XG4gIDxkaXZcbiAgICBjbGFzcz1cImF4LWZsZXggYXgtZmxleC1jb2wgYXgtcHQtNCBheC1zdGlja3kgYXgtdG9wLTAgYXgtei0xMCBheC10cmFuc2l0aW9uLWFsbFwiXG4gICAgI3N0aWNreT1cImF4cFN0aWNreVwiXG4gICAgW2F4cFN0aWNreV09XCInYXgtYmctc3VyZmFjZSBheC1weC02IGF4LXB5LTMgYXgtbXgtNiBheC1zaGFkb3cteGwnXCJcbiAgICBbc3RpY2t5T2Zmc2V0XT1cIjMwXCJcbiAgICBbc3RpY2t5UGFyZW50XT1cImNvbnRlbnRcIlxuICA+XG4gICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtanVzdGlmeS1iZXR3ZWVuIGF4LWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImF4LWZsZXggYXgtZ2FwLTEgYXgtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LXRyYW5zaXRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXgtdGV4dC14bCBtZDpheC10ZXh0LTJ4bCBheC1mb250LWJvbGRcIj57eyBkYXRhKCk/LmJyZWFkY3J1bWI/LlswXT8udGl0bGUgIH19PC9kaXY+XG4gICAgICAgICAgQGlmKGZhbHNlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LXRleHQtc20gYXgtdGV4dC1uZXV0cmFsLTYwMFwiPmRlc2NyaXB0aW9uPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxheC1icmVhZGNydW1icyBjbGFzcz1cImNoaWxkOmF4LWZvbnQtbm9ybWFsIGNoaWxkOmF4LXRleHQtbmV1dHJhbC00MDBcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGl2aWRlcj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1jaGV2cm9uLXJpZ2h0IGF4LXRleHQteHMgYXgtbXgtMlwiPjwvaT5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8YXgtYnJlYWRjcnVtYnMtaXRlbSBbYWN0aXZlXT1cImZhbHNlXCIgW3JvdXRlckxpbmtdPVwiZnVsbFJvdXRlXCI+IEhvbWUgPC9heC1icmVhZGNydW1icy1pdGVtPlxuICAgICAgICAgICAgQGZvcihiIG9mIGRhdGEoKT8uYnJlYWRjcnVtYjt0cmFjayAkaW5kZXg7bGV0IGxhc3Q9JGxhc3QpIHtcbiAgICAgICAgICAgIDxheC1icmVhZGNydW1icy1pdGVtXG4gICAgICAgICAgICAgIFthY3RpdmVdPVwibGFzdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy4hYXgtZm9udC1zZW1pYm9sZF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLiFheC10ZXh0LW5ldXRyYWwtNjAwXT1cImxhc3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuIWRhcms6YXgtdGV4dC1uZXV0cmFsLTIwMF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZnVsbFJvdXRlICsgYi5uYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgYi50aXRsZSB9fVxuICAgICAgICAgICAgPC9heC1icmVhZGNydW1icy1pdGVtPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvYXgtYnJlYWRjcnVtYnM+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8YXhwLXdpZGdldHMtY29udGFpbmVyXG4gICAgY2xhc3M9XCJheC1mbGV4IGF4LWZsZXgtY29sIGF4LWdhcC0yIGF4LXAtNCBheC1oLWZ1bGwgYXgtdy1mdWxsXCJcbiAgICBbY29udGV4dF09XCJjb250ZXh0KClcIlxuICAgIChjb250ZXh0Q2hhbmdlKT1cInNldENvbnRleHQoJGV2ZW50KVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYXgtYmctc3VyZmFjZSBheC1teS01IGF4LWJvcmRlciBheC1yb3VuZGVkLXhsXCI+XG4gICAgICBAaWYoZGF0YSgpPy5zZWN0aW9ucyl7IEBmb3IoaSBvZiBkYXRhKCk/LnNlY3Rpb25zOyB0cmFjayBpLm5hbWUpe1xuICAgICAgPGRpdiBjbGFzcz1cImF4LXAtMiBheC13LWZ1bGxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXB5LTQgYXgtcHgtMlwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXgtZm9udC1ib2xkIGF4LXRleHQteGxcIj57eyBpLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGZvcihqIG9mIGkuc2V0dGluZ3M7IHRyYWNrIGoubmFtZSl7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJheC1wLTJcIj5cbiAgICAgICAgICA8cCBjbGFzcz1cImF4LXRleHQtc20gYXgtcGItMSBheC1wbC0xXCI+e3sgai50aXRsZSB9fTo8L3A+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImF4LW1heC13LVs1MCVdXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyIGF4cC13aWRnZXQtcmVuZGVyZXIgW25vZGVdPVwiai53aWRnZXRcIiBbbW9kZV09XCInZWRpdCdcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxkaXYgY2xhc3M9XCJheC13LWZ1bGwgYXgtZ2FwLTMgYXgtcC00IGF4LXB0LTYgYXgtYm9yZGVyLXQgYXgtZmxleCBheC1qdXN0aWZ5LWVuZCBheC1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGF4LWJ1dHRvbiBbZGlzYWJsZWRdPVwiY2FuQ2FuY2VsKClcIiAob25DbGljayk9XCJvbkNhbmNlbCgpXCIgW3RleHRdPVwiJ2NhbmNlbCcgfCB0cmFuc2xhdGUgfCBhc3luY1wiPjwvYXgtYnV0dG9uPlxuICAgICAgICA8YXgtYnV0dG9uXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5TYXZlKClcIlxuICAgICAgICAgIChvbkNsaWNrKT1cIm9uU2F2ZSgpXCJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgIFt0ZXh0XT1cIidzYXZlLWNoYW5nZXMnIHwgdHJhbnNsYXRlIHwgYXN5bmNcIlxuICAgICAgICA+PC9heC1idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICAgIH1AZWxzZSB7XG4gICAgICA8ZGl2IGNsYXNzPVwiYXgtcC0zXCI+XG4gICAgICAgIEBmb3IoZ3JvdXAgb2YgZGF0YSgpPy5jaGlsZEdyb3VwczsgdHJhY2sgJGluZGV4KXtcbiAgICAgICAgPGRpdiBjbGFzcz1cImF4LXAtNFwiPlxuICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cImZ1bGxSb3V0ZSArIGdyb3VwLm5hbWVcIiBjbGFzcz1cImF4LXRleHQtcHJpbWFyeS02MDAgYXgtdW5kZXJsaW5lIGF4LWZvbnQtYm9sZCBheC10ZXh0LXhsXCI+e3tcbiAgICAgICAgICAgIGdyb3VwLnRpdGxlXG4gICAgICAgICAgfX08L2E+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj48L2F4cC13aWRnZXRzLWNvbnRhaW5lclxuICA+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,44 @@
1
+ import { AXDecoratorModule } from '@acorex/components/decorators';
2
+ import { AXDrawerModule } from '@acorex/components/drawer';
3
+ import { AXTreeViewModule } from '@acorex/components/tree-view';
4
+ import { AXPSettingDefinitionProviderService } from '@acorex/platform/common';
5
+ import { CommonModule } from '@angular/common';
6
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, inject, signal, viewChild, } from '@angular/core';
7
+ import { ActivatedRoute, Router, RouterOutlet } from '@angular/router';
8
+ import { convertToTreeViewSchema } from '../convert-setting-data';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@acorex/components/drawer";
11
+ import * as i2 from "@acorex/components/decorators";
12
+ import * as i3 from "@acorex/components/tree-view";
13
+ export class AXPSettingsMenuComponent {
14
+ constructor() {
15
+ this.drawerComp = viewChild('drawer');
16
+ this.settingService = inject(AXPSettingDefinitionProviderService);
17
+ this.activatedRoute = inject(ActivatedRoute);
18
+ this.router = inject(Router);
19
+ this.data = signal([]);
20
+ this.formattedData = computed(() => convertToTreeViewSchema(this.data()));
21
+ this.activatedRoute.params.subscribe((i) => {
22
+ i?.['group'];
23
+ });
24
+ afterNextRender(() => {
25
+ this.drawerComp()?.open();
26
+ });
27
+ }
28
+ async ngOnInit() {
29
+ await this.getData();
30
+ }
31
+ async getData() {
32
+ this.data.set(await this.settingService.items());
33
+ }
34
+ onClick(item) {
35
+ this.router.navigate([item.data?.['id']], { relativeTo: this.activatedRoute });
36
+ }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPSettingsMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXPSettingsMenuComponent, isStandalone: true, selector: "ng-component", viewQueries: [{ propertyName: "drawerComp", first: true, predicate: ["drawer"], descendants: true, isSignal: true }], ngImport: i0, template: "<ax-drawer-container class=\"ax-min-w-96 ax-flex ax-items-center ax-h-[100vh-104px]\">\n <ax-drawer #drawer location=\"start\" mode=\"push\" [collapsed]=\"true\">\n <ax-content class=\"ax-flex ax-min-w-[300px] ax-flex-col ax-p-6 ax-border-r\">\n <p class=\"ax-text-xl ax-font-bold ax-pb-6\">Settings</p>\n @if(data()){\n <ax-tree-view\n (onNodeClick)=\"onClick($event)\"\n [hasChildField]=\"'hasChild'\"\n [selectable]=\"false\"\n [items]=\"formattedData()\"\n ></ax-tree-view>\n }\n </ax-content>\n </ax-drawer>\n\n <ax-content class=\"ax-bg-light-100 dark:ax-bg-dark-500 ax-flex ax-h-full ax-w-full ax-p-3 dark:ax-border-white/30\">\n <router-outlet></router-outlet>\n </ax-content>\n</ax-drawer-container>\n", dependencies: [{ kind: "ngmodule", type: AXDrawerModule }, { kind: "component", type: i1.AXDrawerComponent, selector: "ax-drawer", inputs: ["location", "showBackdrop", "mode", "closeOthers", "collapsed"], outputs: ["locationChange", "modeChange", "collapsedChange"] }, { kind: "component", type: i1.AXDrawerContainerComponent, selector: "ax-drawer-container" }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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" }, { kind: "ngmodule", type: AXTreeViewModule }, { kind: "component", type: i3.AXTreeViewComponent, selector: "ax-tree-view", inputs: ["items", "selectable", "selectionMode", "selectionBehavior", "showActiveNode", "valueField", "textField", "visibleField", "disableField", "hasChildField", "iconField"], outputs: ["onSelectionChange", "onItemClick", "onNodeClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39
+ }
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXPSettingsMenuComponent, decorators: [{
41
+ type: Component,
42
+ args: [{ standalone: true, imports: [AXDrawerModule, CommonModule, RouterOutlet, AXDecoratorModule, AXTreeViewModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ax-drawer-container class=\"ax-min-w-96 ax-flex ax-items-center ax-h-[100vh-104px]\">\n <ax-drawer #drawer location=\"start\" mode=\"push\" [collapsed]=\"true\">\n <ax-content class=\"ax-flex ax-min-w-[300px] ax-flex-col ax-p-6 ax-border-r\">\n <p class=\"ax-text-xl ax-font-bold ax-pb-6\">Settings</p>\n @if(data()){\n <ax-tree-view\n (onNodeClick)=\"onClick($event)\"\n [hasChildField]=\"'hasChild'\"\n [selectable]=\"false\"\n [items]=\"formattedData()\"\n ></ax-tree-view>\n }\n </ax-content>\n </ax-drawer>\n\n <ax-content class=\"ax-bg-light-100 dark:ax-bg-dark-500 ax-flex ax-h-full ax-w-full ax-p-3 dark:ax-border-white/30\">\n <router-outlet></router-outlet>\n </ax-content>\n</ax-drawer-container>\n" }]
43
+ }], ctorParameters: () => [] });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL2RlZmF1bHQvc3JjL2xpYi9sYXlvdXRzL3NldHRpbmctbGF5b3V0L3NldHRpbmctdmlldy9zZXR0aW5nLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS90aGVtZXMvZGVmYXVsdC9zcmMvbGliL2xheW91dHMvc2V0dGluZy1sYXlvdXQvc2V0dGluZy12aWV3L3NldHRpbmctbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNsRSxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRWhFLE9BQU8sRUFBNEIsbUNBQW1DLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7QUFRbEUsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQztRQVBBLGVBQVUsR0FBRyxTQUFTLENBQW9CLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELG1CQUFjLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxDQUFDLENBQUM7UUFDN0QsbUJBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDeEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QixTQUFJLEdBQUcsTUFBTSxDQUE2QixFQUFFLENBQUMsQ0FBQztRQUM5QyxrQkFBYSxHQUFHLFFBQVEsQ0FBcUIsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUd2RixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN6QyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNkLENBQUMsQ0FBQyxDQUFBO1FBQ0YsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ0QsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQThCO1FBQ3BDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQzs4R0ExQlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsOExDekJyQywwd0JBbUJBLDJDREdZLGNBQWMsNlVBQUUsWUFBWSwrQkFBRSxZQUFZLDBKQUFFLGlCQUFpQixzUEFBRSxnQkFBZ0I7OzJGQUc5RSx3QkFBd0I7a0JBTnBDLFNBQVM7aUNBRUksSUFBSSxXQUNQLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsbUJBQ3pFLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWERlY29yYXRvck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kZWNvcmF0b3JzJztcbmltcG9ydCB7IEFYRHJhd2VyQ29tcG9uZW50LCBBWERyYXdlck1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9kcmF3ZXInO1xuaW1wb3J0IHsgQVhUcmVlVmlld01vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy90cmVlLXZpZXcnO1xuaW1wb3J0IHsgQVhUcmVlSXRlbUNsaWNrQmFzZUV2ZW50LCBBWFRyZWVWaWV3U2NoZW1hIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3RyZWUtdmlldy9saWIvdHJlZS12aWV3LmNsYXNzJztcbmltcG9ydCB7IEFYUFNldHRpbmdEZWZpbml0aW9uSXRlbSwgQVhQU2V0dGluZ0RlZmluaXRpb25Qcm92aWRlclNlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgYWZ0ZXJOZXh0UmVuZGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBPbkluaXQsXG4gIHNpZ25hbCxcbiAgdmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIsIFJvdXRlck91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb252ZXJ0VG9UcmVlVmlld1NjaGVtYSB9IGZyb20gJy4uL2NvbnZlcnQtc2V0dGluZy1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHRlbXBsYXRlVXJsOiAnc2V0dGluZy1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0FYRHJhd2VyTW9kdWxlLCBDb21tb25Nb2R1bGUsIFJvdXRlck91dGxldCwgQVhEZWNvcmF0b3JNb2R1bGUsIEFYVHJlZVZpZXdNb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQVhQU2V0dGluZ3NNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZHJhd2VyQ29tcCA9IHZpZXdDaGlsZDxBWERyYXdlckNvbXBvbmVudD4oJ2RyYXdlcicpO1xuICBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nRGVmaW5pdGlvblByb3ZpZGVyU2VydmljZSk7XG4gIGFjdGl2YXRlZFJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlKTtcbiAgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gIGRhdGEgPSBzaWduYWw8QVhQU2V0dGluZ0RlZmluaXRpb25JdGVtW10+KFtdKTtcbiAgZm9ybWF0dGVkRGF0YSA9IGNvbXB1dGVkPEFYVHJlZVZpZXdTY2hlbWFbXT4oKCkgPT4gY29udmVydFRvVHJlZVZpZXdTY2hlbWEodGhpcy5kYXRhKCkpKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnBhcmFtcy5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICAgIGk/LlsnZ3JvdXAnXVxuICAgIH0pXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuZHJhd2VyQ29tcCgpPy5vcGVuKCk7XG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5nZXREYXRhKCk7XG4gIH1cblxuICBhc3luYyBnZXREYXRhKCkge1xuICAgIHRoaXMuZGF0YS5zZXQoYXdhaXQgdGhpcy5zZXR0aW5nU2VydmljZS5pdGVtcygpKTtcbiAgfVxuXG4gIG9uQ2xpY2soaXRlbTogQVhUcmVlSXRlbUNsaWNrQmFzZUV2ZW50KSB7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2l0ZW0uZGF0YT8uWydpZCddXSwgeyByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2YXRlZFJvdXRlIH0pO1xuICB9XG5cbiAgLy8gcHJpdmF0ZSB2aWV3TW9kZWwgPSBpbmplY3QoQVhQU2V0dGluZ3NWaWV3TW9kZWwpO1xuICAvLyBwcm90ZWN0ZWQgZGF0YVNvdXJjZSA9IHRoaXMudmlld01vZGVsLmRhdGFTb3VyY2U7XG4gIC8vIEBWaWV3Q2hpbGQoJ2dyaWQnKSBncmlkITogQVhEYXRhVGFibGVDb21wb25lbnQ7XG4gIC8vIC8vINi52YbZiNin2YYg2LXZgdit2Ycg2KrZhti424zZhdin2KpcbiAgLy8gcHJvdGVjdGVkIHRpdGxlID0gdGhpcy52aWV3TW9kZWwudGl0bGU7XG4gIC8vIC8vINmF2YLYr9in2LEg2KzYs9iq2KzZiNuMINiq2YbYuNuM2YXYp9iqXG4gIC8vIHByb3RlY3RlZCBzZWFyY2hWYWx1ZSA9ICcnO1xuICAvLyBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG4gIC8vIC8vINmH2YbYr9mEINiq2LrbjNuM2LHYp9iqINis2LPYqtis2YhcbiAgLy8gaGFuZGxlU2VhcmNoVmFsdWVDaGFuZ2UoZXZlbnQ6IEFYVmFsdWVDaGFuZ2VkRXZlbnQpIHtcbiAgLy8gICBpZiAoZXZlbnQuaXNVc2VySW50ZXJhY3Rpb24pIHtcbiAgLy8gICAgIHRoaXMudmlld01vZGVsLmFwcGx5U2VhcmNoKGV2ZW50LnZhbHVlKTtcbiAgLy8gICB9XG4gIC8vIH1cbiAgLy8gLy8g2KfZhtiq2K7Yp9ioINiq2YbYuNuM2YUg24zYpyDar9ix2YjZhyDYqtmG2LjbjNmFXG4gIC8vIGhhbmRsZVJvd0RiQ2xpY2socm93RGF0YTogYW55KSB7XG4gIC8vICAgdGhpcy52aWV3TW9kZWwuc2VsZWN0U2V0dGluZyhyb3dEYXRhKTtcbiAgLy8gfVxuICAvLyAvLyDYsNiu24zYsdmHINiq2LrbjNuM2LHYp9iqINiq2YbYuNuM2YXYp9iqXG4gIC8vIHNhdmVTZXR0aW5nKHNldHRpbmdLZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAvLyAgIHRoaXMudmlld01vZGVsLnNhdmVTZXR0aW5nKHsga2V5OiBzZXR0aW5nS2V5LCB2YWx1ZSB9KTtcbiAgLy8gfVxufVxuIiwiPGF4LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJheC1taW4tdy05NiBheC1mbGV4IGF4LWl0ZW1zLWNlbnRlciBheC1oLVsxMDB2aC0xMDRweF1cIj5cbiAgPGF4LWRyYXdlciAjZHJhd2VyIGxvY2F0aW9uPVwic3RhcnRcIiBtb2RlPVwicHVzaFwiIFtjb2xsYXBzZWRdPVwidHJ1ZVwiPlxuICAgIDxheC1jb250ZW50IGNsYXNzPVwiYXgtZmxleCBheC1taW4tdy1bMzAwcHhdIGF4LWZsZXgtY29sIGF4LXAtNiBheC1ib3JkZXItclwiPlxuICAgICAgPHAgY2xhc3M9XCJheC10ZXh0LXhsIGF4LWZvbnQtYm9sZCBheC1wYi02XCI+U2V0dGluZ3M8L3A+XG4gICAgICBAaWYoZGF0YSgpKXtcbiAgICAgIDxheC10cmVlLXZpZXdcbiAgICAgICAgKG9uTm9kZUNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtoYXNDaGlsZEZpZWxkXT1cIidoYXNDaGlsZCdcIlxuICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgIFtpdGVtc109XCJmb3JtYXR0ZWREYXRhKClcIlxuICAgICAgPjwvYXgtdHJlZS12aWV3PlxuICAgICAgfVxuICAgIDwvYXgtY29udGVudD5cbiAgPC9heC1kcmF3ZXI+XG5cbiAgPGF4LWNvbnRlbnQgY2xhc3M9XCJheC1iZy1saWdodC0xMDAgZGFyazpheC1iZy1kYXJrLTUwMCBheC1mbGV4IGF4LWgtZnVsbCBheC13LWZ1bGwgYXgtcC0zIGRhcms6YXgtYm9yZGVyLXdoaXRlLzMwXCI+XG4gICAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuICA8L2F4LWNvbnRlbnQ+XG48L2F4LWRyYXdlci1jb250YWluZXI+XG4iXX0=
@@ -1,6 +1,7 @@
1
1
  import { AXPSettingsService } from '@acorex/platform/common';
2
2
  import { computed, inject } from '@angular/core';
3
3
  import { patchState, signalStore, withComputed, withHooks, withMethods, withState } from '@ngrx/signals';
4
+ import { timer } from 'rxjs';
4
5
  // Theme Enum
5
6
  export var AXPThemeVariant;
6
7
  (function (AXPThemeVariant) {
@@ -8,44 +9,188 @@ export var AXPThemeVariant;
8
9
  AXPThemeVariant["Dark"] = "dark";
9
10
  AXPThemeVariant["System"] = "system";
10
11
  })(AXPThemeVariant || (AXPThemeVariant = {}));
11
- const THEME_VARIANT_KEY = 'theme-variant';
12
- // ThemeStore - Manages theme settings and system changes
12
+ // Screen Size Enum
13
+ export var AXPScreenSize;
14
+ (function (AXPScreenSize) {
15
+ AXPScreenSize["Small"] = "small";
16
+ AXPScreenSize["Medium"] = "medium";
17
+ AXPScreenSize["Large"] = "large";
18
+ })(AXPScreenSize || (AXPScreenSize = {}));
19
+ // Device Type Enum
20
+ export var AXPDeviceType;
21
+ (function (AXPDeviceType) {
22
+ AXPDeviceType["Mobile"] = "mobile";
23
+ AXPDeviceType["Tablet"] = "tablet";
24
+ AXPDeviceType["Desktop"] = "desktop";
25
+ })(AXPDeviceType || (AXPDeviceType = {}));
26
+ // Side Menu State Enum
27
+ export var AXPSideMenuState;
28
+ (function (AXPSideMenuState) {
29
+ AXPSideMenuState["Opened"] = "opened";
30
+ AXPSideMenuState["Closed"] = "closed";
31
+ })(AXPSideMenuState || (AXPSideMenuState = {}));
32
+ const THEME_VARIANT_KEY = 'layout:theme:variant';
33
+ const THEME_SIDEMENU_STATE_KEY = 'layout:theme:sidemenu';
34
+ // ThemeStore - Manages theme settings, system changes, and loading states
13
35
  export const AXPLayoutThemeService = signalStore({ providedIn: 'root' },
14
36
  // Initial State
15
- withState((settingService = inject(AXPSettingsService)) => {
37
+ withState(() => {
16
38
  const initialTheme = AXPThemeVariant.System;
17
39
  const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
40
+ // Helper function to get the initial screen size
41
+ const getScreenSize = () => {
42
+ const width = window.innerWidth;
43
+ if (width <= 600)
44
+ return AXPScreenSize.Small;
45
+ if (width <= 1024)
46
+ return AXPScreenSize.Medium;
47
+ return AXPScreenSize.Large;
48
+ };
49
+ // Helper function to determine device type
50
+ const getDeviceType = () => {
51
+ const userAgent = navigator.userAgent.toLowerCase();
52
+ if (/mobile|android|iphone|ipad/.test(userAgent)) {
53
+ return AXPDeviceType.Mobile;
54
+ }
55
+ else if (/tablet/.test(userAgent)) {
56
+ return AXPDeviceType.Tablet;
57
+ }
58
+ return AXPDeviceType.Desktop;
59
+ };
60
+ // Helper function to determine if the device supports touch
61
+ const isTouchDevice = () => {
62
+ return 'ontouchstart' in window || navigator.maxTouchPoints > 0;
63
+ };
18
64
  const state = {
19
65
  currentTheme: initialTheme,
20
66
  systemTheme: (systemPrefersDark ? AXPThemeVariant.Dark : AXPThemeVariant.Light),
21
- listener: null,
67
+ screenSize: getScreenSize(),
68
+ deviceType: getDeviceType(),
69
+ isTouchDevice: isTouchDevice(),
70
+ overlayLoading: false,
71
+ navigationLoading: false,
72
+ overlayLoadingTaskCount: 0,
73
+ navigationLoadingTaskCount: 0,
74
+ sideMenuState: (getScreenSize() === AXPScreenSize.Large ? AXPSideMenuState.Opened : AXPSideMenuState.Closed),
75
+ _listener: null,
76
+ _resizeListener: null,
22
77
  };
23
78
  return state;
24
79
  }),
25
80
  // Computed Signals
26
- withComputed(({ currentTheme, systemTheme }) => ({
81
+ withComputed(({ currentTheme, systemTheme, screenSize, deviceType, isTouchDevice, sideMenuState, overlayLoading, navigationLoading }) => ({
27
82
  isDarkMode: computed(() => currentTheme() === AXPThemeVariant.Dark ||
28
83
  (currentTheme() === AXPThemeVariant.System && systemTheme() === AXPThemeVariant.Dark)),
29
84
  isLightMode: computed(() => currentTheme() === AXPThemeVariant.Light ||
30
85
  (currentTheme() === AXPThemeVariant.System && systemTheme() === AXPThemeVariant.Light)),
31
86
  isSystemMode: computed(() => currentTheme() === AXPThemeVariant.System),
87
+ isSideMenuOpen: computed(() => sideMenuState() === AXPSideMenuState.Opened),
88
+ isSmall: computed(() => screenSize() === AXPScreenSize.Small),
89
+ isMedium: computed(() => screenSize() === AXPScreenSize.Medium),
90
+ isLarge: computed(() => screenSize() === AXPScreenSize.Large),
91
+ isMobileDevice: computed(() => deviceType() === AXPDeviceType.Mobile),
92
+ isTabletDevice: computed(() => deviceType() === AXPDeviceType.Tablet),
93
+ isDesktopDevice: computed(() => deviceType() === AXPDeviceType.Desktop),
94
+ isTouchScreen: computed(() => isTouchDevice()),
95
+ isOverlayLoading: computed(() => overlayLoading()),
96
+ isNavigationLoading: computed(() => navigationLoading()),
32
97
  })),
33
98
  // Methods for State Management
34
99
  withMethods((store, settingService = inject(AXPSettingsService)) => {
100
+ // Update HTML class based on theme
35
101
  const updateHtmlClass = (dark) => {
36
102
  const html = document.getElementsByTagName('html')[0];
37
103
  dark ? html.classList.add('ax-dark') : html.classList.remove('ax-dark');
38
104
  };
105
+ // Update screen size based on window width
106
+ const updateScreenSize = () => {
107
+ const width = window.innerWidth;
108
+ let newScreenSize;
109
+ if (width <= 600) {
110
+ newScreenSize = AXPScreenSize.Small;
111
+ }
112
+ else if (width <= 1024) {
113
+ newScreenSize = AXPScreenSize.Medium;
114
+ }
115
+ else {
116
+ newScreenSize = AXPScreenSize.Large;
117
+ }
118
+ if (newScreenSize !== store.screenSize()) {
119
+ patchState(store, { screenSize: newScreenSize });
120
+ if (store.sideMenuState() !== AXPSideMenuState.Closed) {
121
+ patchState(store, { sideMenuState: newScreenSize === AXPScreenSize.Small ? AXPSideMenuState.Closed : AXPSideMenuState.Opened });
122
+ settingService.set(THEME_SIDEMENU_STATE_KEY, store.sideMenuState());
123
+ }
124
+ }
125
+ };
126
+ const minimumDisplayTime = 500; // milliseconds
39
127
  return {
128
+ // Change theme and update HTML class
40
129
  changeTheme(theme) {
41
130
  settingService.set(THEME_VARIANT_KEY, theme);
42
131
  patchState(store, { currentTheme: theme });
43
132
  updateHtmlClass(store.isDarkMode());
44
133
  },
45
- applyCurrentTheme() {
134
+ // Open side menu
135
+ openSideMenu() {
136
+ patchState(store, { sideMenuState: AXPSideMenuState.Opened });
137
+ settingService.set(THEME_SIDEMENU_STATE_KEY, AXPSideMenuState.Opened);
138
+ },
139
+ // Close side menu
140
+ closeSideMenu() {
141
+ patchState(store, { sideMenuState: AXPSideMenuState.Closed });
142
+ settingService.set(THEME_SIDEMENU_STATE_KEY, AXPSideMenuState.Closed);
143
+ },
144
+ // Toggle side menu state
145
+ toggleSideMenu() {
146
+ const newSideMenuState = store.sideMenuState() === AXPSideMenuState.Opened ? AXPSideMenuState.Closed : AXPSideMenuState.Opened;
147
+ patchState(store, { sideMenuState: newSideMenuState });
148
+ settingService.set(THEME_SIDEMENU_STATE_KEY, newSideMenuState);
149
+ },
150
+ // Set navigation loading state with a task counter
151
+ setNavigationLoading(value) {
152
+ if (value) {
153
+ patchState(store, { navigationLoadingTaskCount: store.navigationLoadingTaskCount() + 1 });
154
+ patchState(store, { navigationLoading: true });
155
+ }
156
+ else {
157
+ if (store.navigationLoadingTaskCount() > 0) {
158
+ patchState(store, { navigationLoadingTaskCount: store.navigationLoadingTaskCount() - 1 });
159
+ }
160
+ if (store.navigationLoadingTaskCount() === 0) {
161
+ timer(minimumDisplayTime).subscribe(() => {
162
+ if (store.navigationLoadingTaskCount() === 0) {
163
+ patchState(store, { navigationLoading: false });
164
+ }
165
+ });
166
+ }
167
+ }
168
+ },
169
+ // Set overlay loading state with a task counter
170
+ setOverlayLoading(value) {
171
+ if (value) {
172
+ patchState(store, { overlayLoadingTaskCount: store.overlayLoadingTaskCount() + 1 });
173
+ patchState(store, { overlayLoading: true });
174
+ }
175
+ else {
176
+ if (store.overlayLoadingTaskCount() > 0) {
177
+ patchState(store, { overlayLoadingTaskCount: store.overlayLoadingTaskCount() - 1 });
178
+ }
179
+ if (store.overlayLoadingTaskCount() === 0) {
180
+ timer(minimumDisplayTime).subscribe(() => {
181
+ if (store.overlayLoadingTaskCount() === 0) {
182
+ patchState(store, { overlayLoading: false });
183
+ }
184
+ });
185
+ }
186
+ }
187
+ },
188
+ // Apply the current theme to the HTML class
189
+ _applyCurrentTheme() {
46
190
  updateHtmlClass(store.isDarkMode());
47
191
  },
48
- setupListener() {
192
+ // Set up event listener for system theme changes
193
+ _setupSystemColorListener() {
49
194
  const mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');
50
195
  const listener = (e) => {
51
196
  patchState(store, { systemTheme: e.matches ? AXPThemeVariant.Dark : AXPThemeVariant.Light });
@@ -54,33 +199,52 @@ withMethods((store, settingService = inject(AXPSettingsService)) => {
54
199
  mediaQueryList.addEventListener('change', listener);
55
200
  return listener;
56
201
  },
57
- removeListener(listener) {
202
+ // Remove event listener for system theme changes
203
+ _removeSystemColorListener(listener) {
58
204
  const mediaQueryList = window.matchMedia('(prefers-color-scheme: dark)');
59
205
  mediaQueryList.removeEventListener('change', listener);
60
206
  },
207
+ // Set up event listener for window resize
208
+ _setupResizeListener() {
209
+ const listener = () => {
210
+ updateScreenSize();
211
+ };
212
+ window.addEventListener('resize', listener);
213
+ return listener;
214
+ },
215
+ // Remove event listener for window resize
216
+ _removeResizeListener(listener) {
217
+ window.removeEventListener('resize', listener);
218
+ },
61
219
  };
62
220
  }),
63
221
  // Lifecycle Hooks
64
222
  withHooks((store, settingService = inject(AXPSettingsService)) => ({
65
223
  onInit() {
66
- //
224
+ // Initialize theme and side menu setting from storage
67
225
  (async () => {
68
226
  const settingTheme = (await settingService.get(THEME_VARIANT_KEY)) ?? AXPThemeVariant.System;
69
- if (settingTheme) {
70
- patchState(store, { currentTheme: settingTheme });
71
- }
72
- store.applyCurrentTheme();
227
+ patchState(store, { currentTheme: settingTheme });
228
+ const settingSideMenu = (await settingService.get(THEME_SIDEMENU_STATE_KEY)) ?? store.sideMenuState();
229
+ patchState(store, { sideMenuState: settingSideMenu });
230
+ store._applyCurrentTheme();
73
231
  })();
74
232
  // Set up event listener for system theme changes
75
- const listener = store.setupListener();
76
- patchState(store, { listener });
233
+ const listener = store._setupSystemColorListener();
234
+ patchState(store, { _listener: listener });
235
+ // Set up event listener for window resize
236
+ const resizeListener = store._setupResizeListener();
237
+ patchState(store, { _resizeListener: resizeListener });
77
238
  },
78
239
  onDestroy() {
79
- // Clean up event listener when store is destroyed
80
- const { listener } = store;
240
+ // Clean up event listeners when store is destroyed
241
+ const { _listener: listener, _resizeListener: resizeListener } = store;
81
242
  if (listener) {
82
- store.removeListener(listener);
243
+ store._removeSystemColorListener(listener);
244
+ }
245
+ if (resizeListener) {
246
+ store._removeResizeListener(resizeListener);
83
247
  }
84
248
  },
85
249
  })));
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpHLGFBQWE7QUFDYixNQUFNLENBQU4sSUFBWSxlQUlYO0FBSkQsV0FBWSxlQUFlO0lBQ3pCLGtDQUFlLENBQUE7SUFDZixnQ0FBYSxDQUFBO0lBQ2Isb0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUpXLGVBQWUsS0FBZixlQUFlLFFBSTFCO0FBRUQsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7QUFFMUMseURBQXlEO0FBQ3pELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLFdBQVcsQ0FDOUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFO0FBQ3RCLGdCQUFnQjtBQUNoQixTQUFTLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRTtJQUN4RCxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO0lBQzVDLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNwRixNQUFNLEtBQUssR0FBRztRQUNaLFlBQVksRUFBRSxZQUFZO1FBQzFCLFdBQVcsRUFBRSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFB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RSxjQUFjLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakUsTUFBTTtRQUNKLEVBQUU7UUFDRixDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ1YsTUFBTSxZQUFZLEdBQ2YsQ0FBQyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBcUIsSUFBSSxlQUFlLENBQUMsTUFBTSxDQUFDO1lBQy9GLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUNwRCxDQUFDO1lBQ0QsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNMLGlEQUFpRDtRQUNqRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkMsVUFBVSxDQUFDLEtBQUssRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELFNBQVM7UUFDUCxrREFBa0Q7UUFDbEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUMzQixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsS0FBSyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBWFBTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICdAYWNvcmV4L3BsYXRmb3JtL2NvbW1vbic7XG5pbXBvcnQgeyBjb21wdXRlZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBwYXRjaFN0YXRlLCBzaWduYWxTdG9yZSwgd2l0aENvbXB1dGVkLCB3aXRoSG9va3MsIHdpdGhNZXRob2RzLCB3aXRoU3RhdGUgfSBmcm9tICdAbmdyeC9zaWduYWxzJztcblxuLy8gVGhlbWUgRW51bVxuZXhwb3J0IGVudW0gQVhQVGhlbWVWYXJpYW50IHtcbiAgTGlnaHQgPSAnbGlnaHQnLFxuICBEYXJrID0gJ2RhcmsnLFxuICBTeXN0ZW0gPSAnc3lzdGVtJyxcbn1cblxuY29uc3QgVEhFTUVfVkFSSUFOVF9LRVkgPSAndGhlbWUtdmFyaWFudCc7XG5cbi8vIFRoZW1lU3RvcmUgLSBNYW5hZ2VzIHRoZW1lIHNldHRpbmdzIGFuZCBzeXN0ZW0gY2hhbmdlc1xuZXhwb3J0IGNvbnN0IEFYUExheW91dFRoZW1lU2VydmljZSA9IHNpZ25hbFN0b3JlKFxuICB7IHByb3ZpZGVkSW46ICdyb290JyB9LFxuICAvLyBJbml0aWFsIFN0YXRlXG4gIHdpdGhTdGF0ZSgoc2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoQVhQU2V0dGluZ3NTZXJ2aWNlKSkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxUaGVtZSA9IEFYUFRoZW1lVmFyaWFudC5TeXN0ZW07XG4gICAgY29uc3Qgc3lzdGVtUHJlZmVyc0RhcmsgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBjdXJyZW50VGhlbWU6IGluaXRpYWxUaGVtZSxcbiAgICAgIHN5c3RlbVRoZW1lOiAoc3lzdGVtUHJlZmVyc0RhcmsgPyBBWFBUaGVtZVZhcmlhbnQuRGFyayA6IEFYUFRoZW1lVmFyaWFudC5MaWdodCkgYXMgQVhQVGhlbWVWYXJpYW50LFxuICAgICAgbGlzdGVuZXI6IG51bGwgYXMgKChlOiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB2b2lkKSB8IG51bGwsXG4gICAgfTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfSksXG5cbiAgLy8gQ29tcHV0ZWQgU2lnbmFsc1xuICB3aXRoQ29tcHV0ZWQoKHsgY3VycmVudFRoZW1lLCBzeXN0ZW1UaGVtZSB9KSA9PiAoe1xuICAgIGlzRGFya01vZGU6IGNvbXB1dGVkKFxuICAgICAgKCkgPT5cbiAgICAgICAgY3VycmVudFRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5EYXJrIHx8XG4gICAgICAgIChjdXJyZW50VGhlbWUoKSA9PT0gQVhQVGhlbWVWYXJpYW50LlN5c3RlbSAmJiBzeXN0ZW1UaGVtZSgpID09PSBBWFBUaGVtZVZhcmlhbnQuRGFyaylcbiAgICApLFxuICAgIGlzTGlnaHRNb2RlOiBjb21wdXRlZChcbiAgICAgICgpID0+XG4gICAgICAgIGN1cnJlbnRUaGVtZSgpID09PSBBWFBUaGVtZVZhcmlhbnQuTGlnaHQgfHxcbiAgICAgICAgKGN1cnJlbnRUaGVtZSgpID09PSBBWFBUaGVtZVZhcmlhbnQuU3lzdGVtICYmIHN5c3RlbVRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5MaWdodClcbiAgICApLFxuICAgIGlzU3lzdGVtTW9kZTogY29tcHV0ZWQoKCkgPT4gY3VycmVudFRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5TeXN0ZW0pLFxuICB9KSksXG5cbiAgLy8gTWV0aG9kcyBmb3IgU3RhdGUgTWFuYWdlbWVudFxuICB3aXRoTWV0aG9kcygoc3RvcmUsIHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdzU2VydmljZSkpID0+IHtcbiAgICBjb25zdCB1cGRhdGVIdG1sQ2xhc3MgPSAoZGFyazogYm9vbGVhbikgPT4ge1xuICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdodG1sJylbMF07XG4gICAgICBkYXJrID8gaHRtbC5jbGFzc0xpc3QuYWRkKCdheC1kYXJrJykgOiBodG1sLmNsYXNzTGlzdC5yZW1vdmUoJ2F4LWRhcmsnKTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VUaGVtZSh0aGVtZTogQVhQVGhlbWVWYXJpYW50KSB7XG4gICAgICAgIHNldHRpbmdTZXJ2aWNlLnNldChUSEVNRV9WQVJJQU5UX0tFWSwgdGhlbWUpO1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IGN1cnJlbnRUaGVtZTogdGhlbWUgfSk7XG4gICAgICAgIHVwZGF0ZUh0bWxDbGFzcyhzdG9yZS5pc0RhcmtNb2RlKCkpO1xuICAgICAgfSxcbiAgICAgIGFwcGx5Q3VycmVudFRoZW1lKCkge1xuICAgICAgICB1cGRhdGVIdG1sQ2xhc3Moc3RvcmUuaXNEYXJrTW9kZSgpKTtcbiAgICAgIH0sXG4gICAgICBzZXR1cExpc3RlbmVyKCkge1xuICAgICAgICBjb25zdCBtZWRpYVF1ZXJ5TGlzdCA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJyk7XG4gICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKGU6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHtcbiAgICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHN5c3RlbVRoZW1lOiBlLm1hdGNoZXMgPyBBWFBUaGVtZVZhcmlhbnQuRGFyayA6IEFYUFRoZW1lVmFyaWFudC5MaWdodCB9KTtcbiAgICAgICAgICB1cGRhdGVIdG1sQ2xhc3Moc3RvcmUuaXNEYXJrTW9kZSgpKTtcbiAgICAgICAgfTtcbiAgICAgICAgbWVkaWFRdWVyeUxpc3QuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgICAgIHJldHVybiBsaXN0ZW5lcjtcbiAgICAgIH0sXG4gICAgICByZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcjogKGU6IE1lZGlhUXVlcnlMaXN0RXZlbnQpID0+IHZvaWQpIHtcbiAgICAgICAgY29uc3QgbWVkaWFRdWVyeUxpc3QgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xuICAgICAgICBtZWRpYVF1ZXJ5TGlzdC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG4gICAgICB9LFxuICAgIH07XG4gIH0pLFxuXG4gIC8vIExpZmVjeWNsZSBIb29rc1xuICB3aXRoSG9va3MoKHN0b3JlLCBzZXR0aW5nU2VydmljZSA9IGluamVjdChBWFBTZXR0aW5nc1NlcnZpY2UpKSA9PiAoe1xuICAgIG9uSW5pdCgpIHtcbiAgICAgIC8vXG4gICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBzZXR0aW5nVGhlbWUgPVxuICAgICAgICAgICgoYXdhaXQgc2V0dGluZ1NlcnZpY2UuZ2V0KFRIRU1FX1ZBUklBTlRfS0VZKSkgYXMgQVhQVGhlbWVWYXJpYW50KSA/PyBBWFBUaGVtZVZhcmlhbnQuU3lzdGVtO1xuICAgICAgICBpZiAoc2V0dGluZ1RoZW1lKSB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBjdXJyZW50VGhlbWU6IHNldHRpbmdUaGVtZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdG9yZS5hcHBseUN1cnJlbnRUaGVtZSgpO1xuICAgICAgfSkoKTtcbiAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3Igc3lzdGVtIHRoZW1lIGNoYW5nZXNcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gc3RvcmUuc2V0dXBMaXN0ZW5lcigpO1xuICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBsaXN0ZW5lciB9KTtcbiAgICB9LFxuICAgIG9uRGVzdHJveSgpIHtcbiAgICAgIC8vIENsZWFuIHVwIGV2ZW50IGxpc3RlbmVyIHdoZW4gc3RvcmUgaXMgZGVzdHJveWVkXG4gICAgICBjb25zdCB7IGxpc3RlbmVyIH0gPSBzdG9yZTtcbiAgICAgIGlmIChsaXN0ZW5lcikge1xuICAgICAgICBzdG9yZS5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB9XG4gICAgfSxcbiAgfSkpXG4pO1xuIl19
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGhlbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vdGhlbWVzL3NoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3RoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0IsYUFBYTtBQUNiLE1BQU0sQ0FBTixJQUFZLGVBSVg7QUFKRCxXQUFZLGVBQWU7SUFDekIsa0NBQWUsQ0FBQTtJQUNmLGdDQUFhLENBQUE7SUFDYixvQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSlcsZUFBZSxLQUFmLGVBQWUsUUFJMUI7QUFFRCxtQkFBbUI7QUFDbkIsTUFBTSxDQUFOLElBQVksYUFJWDtBQUpELFdBQVksYUFBYTtJQUN2QixnQ0FBZSxDQUFBO0lBQ2Ysa0NBQWlCLENBQUE7SUFDakIsZ0NBQWUsQ0FBQTtBQUNqQixDQUFDLEVBSlcsYUFBYSxLQUFiLGFBQWEsUUFJeEI7QUFFRCxtQkFBbUI7QUFDbkIsTUFBTSxDQUFOLElBQVksYUFJWDtBQUpELFdBQVksYUFBYTtJQUN2QixrQ0FBaUIsQ0FBQTtJQUNqQixrQ0FBaUIsQ0FBQTtJQUNqQixvQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsYUFBYSxLQUFiLGFBQWEsUUFJeEI7QUFFRCx1QkFBdUI7QUFDdkIsTUFBTSxDQUFOLElBQVksZ0JBR1g7QUFIRCxXQUFZLGdCQUFnQjtJQUMxQixxQ0FBaUIsQ0FB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QUNuQixLQUFLLENBQUMscUJBQXFCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDOUMsQ0FBQztJQUNILENBQUM7Q0FDRixDQUFDLENBQUMsQ0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhQU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnQGFjb3JleC9wbGF0Zm9ybS9jb21tb24nO1xuaW1wb3J0IHsgY29tcHV0ZWQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGF0Y2hTdGF0ZSwgc2lnbmFsU3RvcmUsIHdpdGhDb21wdXRlZCwgd2l0aEhvb2tzLCB3aXRoTWV0aG9kcywgd2l0aFN0YXRlIH0gZnJvbSAnQG5ncngvc2lnbmFscyc7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG4vLyBUaGVtZSBFbnVtXG5leHBvcnQgZW51bSBBWFBUaGVtZVZhcmlhbnQge1xuICBMaWdodCA9ICdsaWdodCcsXG4gIERhcmsgPSAnZGFyaycsXG4gIFN5c3RlbSA9ICdzeXN0ZW0nLFxufVxuXG4vLyBTY3JlZW4gU2l6ZSBFbnVtXG5leHBvcnQgZW51bSBBWFBTY3JlZW5TaXplIHtcbiAgU21hbGwgPSAnc21hbGwnLFxuICBNZWRpdW0gPSAnbWVkaXVtJyxcbiAgTGFyZ2UgPSAnbGFyZ2UnLFxufVxuXG4vLyBEZXZpY2UgVHlwZSBFbnVtXG5leHBvcnQgZW51bSBBWFBEZXZpY2VUeXBlIHtcbiAgTW9iaWxlID0gJ21vYmlsZScsXG4gIFRhYmxldCA9ICd0YWJsZXQnLFxuICBEZXNrdG9wID0gJ2Rlc2t0b3AnLFxufVxuXG4vLyBTaWRlIE1lbnUgU3RhdGUgRW51bVxuZXhwb3J0IGVudW0gQVhQU2lkZU1lbnVTdGF0ZSB7XG4gIE9wZW5lZCA9ICdvcGVuZWQnLFxuICBDbG9zZWQgPSAnY2xvc2VkJyxcbn1cblxuY29uc3QgVEhFTUVfVkFSSUFOVF9LRVkgPSAnbGF5b3V0OnRoZW1lOnZhcmlhbnQnO1xuY29uc3QgVEhFTUVfU0lERU1FTlVfU1RBVEVfS0VZID0gJ2xheW91dDp0aGVtZTpzaWRlbWVudSc7XG5cbi8vIFRoZW1lU3RvcmUgLSBNYW5hZ2VzIHRoZW1lIHNldHRpbmdzLCBzeXN0ZW0gY2hhbmdlcywgYW5kIGxvYWRpbmcgc3RhdGVzXG5leHBvcnQgY29uc3QgQVhQTGF5b3V0VGhlbWVTZXJ2aWNlID0gc2lnbmFsU3RvcmUoXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0sXG5cbiAgLy8gSW5pdGlhbCBTdGF0ZVxuICB3aXRoU3RhdGUoKCkgPT4ge1xuICAgIGNvbnN0IGluaXRpYWxUaGVtZSA9IEFYUFRoZW1lVmFyaWFudC5TeXN0ZW07XG4gICAgY29uc3Qgc3lzdGVtUHJlZmVyc0RhcmsgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXM7XG5cbiAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBpbml0aWFsIHNjcmVlbiBzaXplXG4gICAgY29uc3QgZ2V0U2NyZWVuU2l6ZSA9ICgpOiBBWFBTY3JlZW5TaXplID0+IHtcbiAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBpZiAod2lkdGggPD0gNjAwKSByZXR1cm4gQVhQU2NyZWVuU2l6ZS5TbWFsbDtcbiAgICAgIGlmICh3aWR0aCA8PSAxMDI0KSByZXR1cm4gQVhQU2NyZWVuU2l6ZS5NZWRpdW07XG4gICAgICByZXR1cm4gQVhQU2NyZWVuU2l6ZS5MYXJnZTtcbiAgICB9O1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBkZXZpY2UgdHlwZVxuICAgIGNvbnN0IGdldERldmljZVR5cGUgPSAoKTogQVhQRGV2aWNlVHlwZSA9PiB7XG4gICAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoL21vYmlsZXxhbmRyb2lkfGlwaG9uZXxpcGFkLy50ZXN0KHVzZXJBZ2VudCkpIHtcbiAgICAgICAgcmV0dXJuIEFYUERldmljZVR5cGUuTW9iaWxlO1xuICAgICAgfSBlbHNlIGlmICgvdGFibGV0Ly50ZXN0KHVzZXJBZ2VudCkpIHtcbiAgICAgICAgcmV0dXJuIEFYUERldmljZVR5cGUuVGFibGV0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIEFYUERldmljZVR5cGUuRGVza3RvcDtcbiAgICB9O1xuXG4gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgZGV2aWNlIHN1cHBvcnRzIHRvdWNoXG4gICAgY29uc3QgaXNUb3VjaERldmljZSA9ICgpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiAnb250b3VjaHN0YXJ0JyBpbiB3aW5kb3cgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMDtcbiAgICB9O1xuXG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICBjdXJyZW50VGhlbWU6IGluaXRpYWxUaGVtZSxcbiAgICAgIHN5c3RlbVRoZW1lOiAoc3lzdGVtUHJlZmVyc0RhcmsgPyBBWFBUaGVtZVZhcmlhbnQuRGFyayA6IEFYUFRoZW1lVmFyaWFudC5MaWdodCkgYXMgQVhQVGhlbWVWYXJpYW50LFxuICAgICAgc2NyZWVuU2l6ZTogZ2V0U2NyZWVuU2l6ZSgpLFxuICAgICAgZGV2aWNlVHlwZTogZ2V0RGV2aWNlVHlwZSgpLFxuICAgICAgaXNUb3VjaERldmljZTogaXNUb3VjaERldmljZSgpLFxuICAgICAgb3ZlcmxheUxvYWRpbmc6IGZhbHNlLFxuICAgICAgbmF2aWdhdGlvbkxvYWRpbmc6IGZhbHNlLFxuICAgICAgb3ZlcmxheUxvYWRpbmdUYXNrQ291bnQ6IDAsXG4gICAgICBuYXZpZ2F0aW9uTG9hZGluZ1Rhc2tDb3VudDogMCxcbiAgICAgIHNpZGVNZW51U3RhdGU6IChnZXRTY3JlZW5TaXplKCkgPT09IEFYUFNjcmVlblNpemUuTGFyZ2UgPyBBWFBTaWRlTWVudVN0YXRlLk9wZW5lZCA6IEFYUFNpZGVNZW51U3RhdGUuQ2xvc2VkKSBhcyBBWFBTaWRlTWVudVN0YXRlLFxuICAgICAgX2xpc3RlbmVyOiBudWxsIGFzICgoZTogTWVkaWFRdWVyeUxpc3RFdmVudCkgPT4gdm9pZCkgfCBudWxsLFxuICAgICAgX3Jlc2l6ZUxpc3RlbmVyOiBudWxsIGFzICgoKSA9PiB2b2lkKSB8IG51bGwsXG4gICAgfTtcblxuICAgIHJldHVybiBzdGF0ZTtcbiAgfSksXG5cbiAgLy8gQ29tcHV0ZWQgU2lnbmFsc1xuICB3aXRoQ29tcHV0ZWQoKHsgY3VycmVudFRoZW1lLCBzeXN0ZW1UaGVtZSwgc2NyZWVuU2l6ZSwgZGV2aWNlVHlwZSwgaXNUb3VjaERldmljZSwgc2lkZU1lbnVTdGF0ZSwgb3ZlcmxheUxvYWRpbmcsIG5hdmlnYXRpb25Mb2FkaW5nIH0pID0+ICh7XG4gICAgaXNEYXJrTW9kZTogY29tcHV0ZWQoXG4gICAgICAoKSA9PlxuICAgICAgICBjdXJyZW50VGhlbWUoKSA9PT0gQVhQVGhlbWVWYXJpYW50LkRhcmsgfHxcbiAgICAgICAgKGN1cnJlbnRUaGVtZSgpID09PSBBWFBUaGVtZVZhcmlhbnQuU3lzdGVtICYmIHN5c3RlbVRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5EYXJrKVxuICAgICksXG4gICAgaXNMaWdodE1vZGU6IGNvbXB1dGVkKFxuICAgICAgKCkgPT5cbiAgICAgICAgY3VycmVudFRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5MaWdodCB8fFxuICAgICAgICAoY3VycmVudFRoZW1lKCkgPT09IEFYUFRoZW1lVmFyaWFudC5TeXN0ZW0gJiYgc3lzdGVtVGhlbWUoKSA9PT0gQVhQVGhlbWVWYXJpYW50LkxpZ2h0KVxuICAgICksXG4gICAgaXNTeXN0ZW1Nb2RlOiBjb21wdXRlZCgoKSA9PiBjdXJyZW50VGhlbWUoKSA9PT0gQVhQVGhlbWVWYXJpYW50LlN5c3RlbSksXG4gICAgaXNTaWRlTWVudU9wZW46IGNvbXB1dGVkKCgpID0+IHNpZGVNZW51U3RhdGUoKSA9PT0gQVhQU2lkZU1lbnVTdGF0ZS5PcGVuZWQpLFxuICAgIGlzU21hbGw6IGNvbXB1dGVkKCgpID0+IHNjcmVlblNpemUoKSA9PT0gQVhQU2NyZWVuU2l6ZS5TbWFsbCksXG4gICAgaXNNZWRpdW06IGNvbXB1dGVkKCgpID0+IHNjcmVlblNpemUoKSA9PT0gQVhQU2NyZWVuU2l6ZS5NZWRpdW0pLFxuICAgIGlzTGFyZ2U6IGNvbXB1dGVkKCgpID0+IHNjcmVlblNpemUoKSA9PT0gQVhQU2NyZWVuU2l6ZS5MYXJnZSksXG4gICAgaXNNb2JpbGVEZXZpY2U6IGNvbXB1dGVkKCgpID0+IGRldmljZVR5cGUoKSA9PT0gQVhQRGV2aWNlVHlwZS5Nb2JpbGUpLFxuICAgIGlzVGFibGV0RGV2aWNlOiBjb21wdXRlZCgoKSA9PiBkZXZpY2VUeXBlKCkgPT09IEFYUERldmljZVR5cGUuVGFibGV0KSxcbiAgICBpc0Rlc2t0b3BEZXZpY2U6IGNvbXB1dGVkKCgpID0+IGRldmljZVR5cGUoKSA9PT0gQVhQRGV2aWNlVHlwZS5EZXNrdG9wKSxcbiAgICBpc1RvdWNoU2NyZWVuOiBjb21wdXRlZCgoKSA9PiBpc1RvdWNoRGV2aWNlKCkpLFxuICAgIGlzT3ZlcmxheUxvYWRpbmc6IGNvbXB1dGVkKCgpID0+IG92ZXJsYXlMb2FkaW5nKCkpLFxuICAgIGlzTmF2aWdhdGlvbkxvYWRpbmc6IGNvbXB1dGVkKCgpID0+IG5hdmlnYXRpb25Mb2FkaW5nKCkpLFxuICB9KSksXG5cbiAgLy8gTWV0aG9kcyBmb3IgU3RhdGUgTWFuYWdlbWVudFxuICB3aXRoTWV0aG9kcygoc3RvcmUsIHNldHRpbmdTZXJ2aWNlID0gaW5qZWN0KEFYUFNldHRpbmdzU2VydmljZSkpID0+IHtcbiAgICAvLyBVcGRhdGUgSFRNTCBjbGFzcyBiYXNlZCBvbiB0aGVtZVxuICAgIGNvbnN0IHVwZGF0ZUh0bWxDbGFzcyA9IChkYXJrOiBib29sZWFuKSA9PiB7XG4gICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2h0bWwnKVswXTtcbiAgICAgIGRhcmsgPyBodG1sLmNsYXNzTGlzdC5hZGQoJ2F4LWRhcmsnKSA6IGh0bWwuY2xhc3NMaXN0LnJlbW92ZSgnYXgtZGFyaycpO1xuICAgIH07XG5cbiAgICAvLyBVcGRhdGUgc2NyZWVuIHNpemUgYmFzZWQgb24gd2luZG93IHdpZHRoXG4gICAgY29uc3QgdXBkYXRlU2NyZWVuU2l6ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHdpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBsZXQgbmV3U2NyZWVuU2l6ZTogQVhQU2NyZWVuU2l6ZTtcblxuICAgICAgaWYgKHdpZHRoIDw9IDYwMCkge1xuICAgICAgICBuZXdTY3JlZW5TaXplID0gQVhQU2NyZWVuU2l6ZS5TbWFsbDtcbiAgICAgIH0gZWxzZSBpZiAod2lkdGggPD0gMTAyNCkge1xuICAgICAgICBuZXdTY3JlZW5TaXplID0gQVhQU2NyZWVuU2l6ZS5NZWRpdW07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTY3JlZW5TaXplID0gQVhQU2NyZWVuU2l6ZS5MYXJnZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5ld1NjcmVlblNpemUgIT09IHN0b3JlLnNjcmVlblNpemUoKSkge1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IHNjcmVlblNpemU6IG5ld1NjcmVlblNpemUgfSk7XG4gICAgICAgIGlmIChzdG9yZS5zaWRlTWVudVN0YXRlKCkgIT09IEFYUFNpZGVNZW51U3RhdGUuQ2xvc2VkKSB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzaWRlTWVudVN0YXRlOiBuZXdTY3JlZW5TaXplID09PSBBWFBTY3JlZW5TaXplLlNtYWxsID8gQVhQU2lkZU1lbnVTdGF0ZS5DbG9zZWQgOiBBWFBTaWRlTWVudVN0YXRlLk9wZW5lZCB9KTtcbiAgICAgICAgICBzZXR0aW5nU2VydmljZS5zZXQoVEhFTUVfU0lERU1FTlVfU1RBVEVfS0VZLCBzdG9yZS5zaWRlTWVudVN0YXRlKCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG1pbmltdW1EaXNwbGF5VGltZSA9IDUwMDsgLy8gbWlsbGlzZWNvbmRzXG5cbiAgICByZXR1cm4ge1xuICAgICAgLy8gQ2hhbmdlIHRoZW1lIGFuZCB1cGRhdGUgSFRNTCBjbGFzc1xuICAgICAgY2hhbmdlVGhlbWUodGhlbWU6IEFYUFRoZW1lVmFyaWFudCkge1xuICAgICAgICBzZXR0aW5nU2VydmljZS5zZXQoVEhFTUVfVkFSSUFOVF9LRVksIHRoZW1lKTtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBjdXJyZW50VGhlbWU6IHRoZW1lIH0pO1xuICAgICAgICB1cGRhdGVIdG1sQ2xhc3Moc3RvcmUuaXNEYXJrTW9kZSgpKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIE9wZW4gc2lkZSBtZW51XG4gICAgICBvcGVuU2lkZU1lbnUoKSB7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2lkZU1lbnVTdGF0ZTogQVhQU2lkZU1lbnVTdGF0ZS5PcGVuZWQgfSk7XG4gICAgICAgIHNldHRpbmdTZXJ2aWNlLnNldChUSEVNRV9TSURFTUVOVV9TVEFURV9LRVksIEFYUFNpZGVNZW51U3RhdGUuT3BlbmVkKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIENsb3NlIHNpZGUgbWVudVxuICAgICAgY2xvc2VTaWRlTWVudSgpIHtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzaWRlTWVudVN0YXRlOiBBWFBTaWRlTWVudVN0YXRlLkNsb3NlZCB9KTtcbiAgICAgICAgc2V0dGluZ1NlcnZpY2Uuc2V0KFRIRU1FX1NJREVNRU5VX1NUQVRFX0tFWSwgQVhQU2lkZU1lbnVTdGF0ZS5DbG9zZWQpO1xuICAgICAgfSxcblxuICAgICAgLy8gVG9nZ2xlIHNpZGUgbWVudSBzdGF0ZVxuICAgICAgdG9nZ2xlU2lkZU1lbnUoKSB7XG4gICAgICAgIGNvbnN0IG5ld1NpZGVNZW51U3RhdGUgPSBzdG9yZS5zaWRlTWVudVN0YXRlKCkgPT09IEFYUFNpZGVNZW51U3RhdGUuT3BlbmVkID8gQVhQU2lkZU1lbnVTdGF0ZS5DbG9zZWQgOiBBWFBTaWRlTWVudVN0YXRlLk9wZW5lZDtcbiAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzaWRlTWVudVN0YXRlOiBuZXdTaWRlTWVudVN0YXRlIH0pO1xuICAgICAgICBzZXR0aW5nU2VydmljZS5zZXQoVEhFTUVfU0lERU1FTlVfU1RBVEVfS0VZLCBuZXdTaWRlTWVudVN0YXRlKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFNldCBuYXZpZ2F0aW9uIGxvYWRpbmcgc3RhdGUgd2l0aCBhIHRhc2sgY291bnRlclxuICAgICAgc2V0TmF2aWdhdGlvbkxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBuYXZpZ2F0aW9uTG9hZGluZ1Rhc2tDb3VudDogc3RvcmUubmF2aWdhdGlvbkxvYWRpbmdUYXNrQ291bnQoKSArIDEgfSk7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBuYXZpZ2F0aW9uTG9hZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RvcmUubmF2aWdhdGlvbkxvYWRpbmdUYXNrQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgbmF2aWdhdGlvbkxvYWRpbmdUYXNrQ291bnQ6IHN0b3JlLm5hdmlnYXRpb25Mb2FkaW5nVGFza0NvdW50KCkgLSAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RvcmUubmF2aWdhdGlvbkxvYWRpbmdUYXNrQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGltZXIobWluaW11bURpc3BsYXlUaW1lKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUubmF2aWdhdGlvbkxvYWRpbmdUYXNrQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgbmF2aWdhdGlvbkxvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIFNldCBvdmVybGF5IGxvYWRpbmcgc3RhdGUgd2l0aCBhIHRhc2sgY291bnRlclxuICAgICAgc2V0T3ZlcmxheUxvYWRpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBvdmVybGF5TG9hZGluZ1Rhc2tDb3VudDogc3RvcmUub3ZlcmxheUxvYWRpbmdUYXNrQ291bnQoKSArIDEgfSk7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBvdmVybGF5TG9hZGluZzogdHJ1ZSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3RvcmUub3ZlcmxheUxvYWRpbmdUYXNrQ291bnQoKSA+IDApIHtcbiAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgb3ZlcmxheUxvYWRpbmdUYXNrQ291bnQ6IHN0b3JlLm92ZXJsYXlMb2FkaW5nVGFza0NvdW50KCkgLSAxIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RvcmUub3ZlcmxheUxvYWRpbmdUYXNrQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgdGltZXIobWluaW11bURpc3BsYXlUaW1lKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUub3ZlcmxheUxvYWRpbmdUYXNrQ291bnQoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgb3ZlcmxheUxvYWRpbmc6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIC8vIEFwcGx5IHRoZSBjdXJyZW50IHRoZW1lIHRvIHRoZSBIVE1MIGNsYXNzXG4gICAgICBfYXBwbHlDdXJyZW50VGhlbWUoKSB7XG4gICAgICAgIHVwZGF0ZUh0bWxDbGFzcyhzdG9yZS5pc0RhcmtNb2RlKCkpO1xuICAgICAgfSxcblxuICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyIGZvciBzeXN0ZW0gdGhlbWUgY2hhbmdlc1xuICAgICAgX3NldHVwU3lzdGVtQ29sb3JMaXN0ZW5lcigpIHtcbiAgICAgICAgY29uc3QgbWVkaWFRdWVyeUxpc3QgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xuICAgICAgICBjb25zdCBsaXN0ZW5lciA9IChlOiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB7XG4gICAgICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBzeXN0ZW1UaGVtZTogZS5tYXRjaGVzID8gQVhQVGhlbWVWYXJpYW50LkRhcmsgOiBBWFBUaGVtZVZhcmlhbnQuTGlnaHQgfSk7XG4gICAgICAgICAgdXBkYXRlSHRtbENsYXNzKHN0b3JlLmlzRGFya01vZGUoKSk7XG4gICAgICAgIH07XG4gICAgICAgIG1lZGlhUXVlcnlMaXN0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcbiAgICAgICAgcmV0dXJuIGxpc3RlbmVyO1xuICAgICAgfSxcblxuICAgICAgLy8gUmVtb3ZlIGV2ZW50IGxpc3RlbmVyIGZvciBzeXN0ZW0gdGhlbWUgY2hhbmdlc1xuICAgICAgX3JlbW92ZVN5c3RlbUNvbG9yTGlzdGVuZXIobGlzdGVuZXI6IChlOiBNZWRpYVF1ZXJ5TGlzdEV2ZW50KSA9PiB2b2lkKSB7XG4gICAgICAgIGNvbnN0IG1lZGlhUXVlcnlMaXN0ID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKTtcbiAgICAgICAgbWVkaWFRdWVyeUxpc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuICAgICAgfSxcblxuICAgICAgLy8gU2V0IHVwIGV2ZW50IGxpc3RlbmVyIGZvciB3aW5kb3cgcmVzaXplXG4gICAgICBfc2V0dXBSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgICAgdXBkYXRlU2NyZWVuU2l6ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbGlzdGVuZXIpO1xuICAgICAgICByZXR1cm4gbGlzdGVuZXI7XG4gICAgICB9LFxuXG4gICAgICAvLyBSZW1vdmUgZXZlbnQgbGlzdGVuZXIgZm9yIHdpbmRvdyByZXNpemVcbiAgICAgIF9yZW1vdmVSZXNpemVMaXN0ZW5lcihsaXN0ZW5lcjogKCkgPT4gdm9pZCkge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbGlzdGVuZXIpO1xuICAgICAgfSxcbiAgICB9O1xuICB9KSxcblxuICAvLyBMaWZlY3ljbGUgSG9va3NcbiAgd2l0aEhvb2tzKChzdG9yZSwgc2V0dGluZ1NlcnZpY2UgPSBpbmplY3QoQVhQU2V0dGluZ3NTZXJ2aWNlKSkgPT4gKHtcbiAgICBvbkluaXQoKSB7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZW1lIGFuZCBzaWRlIG1lbnUgc2V0dGluZyBmcm9tIHN0b3JhZ2VcbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNldHRpbmdUaGVtZSA9ICgoYXdhaXQgc2V0dGluZ1NlcnZpY2UuZ2V0KFRIRU1FX1ZBUklBTlRfS0VZKSkgYXMgQVhQVGhlbWVWYXJpYW50KSA/PyBBWFBUaGVtZVZhcmlhbnQuU3lzdGVtO1xuICAgICAgICBwYXRjaFN0YXRlKHN0b3JlLCB7IGN1cnJlbnRUaGVtZTogc2V0dGluZ1RoZW1lIH0pO1xuICAgICAgICBjb25zdCBzZXR0aW5nU2lkZU1lbnUgPSAoKGF3YWl0IHNldHRpbmdTZXJ2aWNlLmdldChUSEVNRV9TSURFTUVOVV9TVEFURV9LRVkpKSBhcyBBWFBTaWRlTWVudVN0YXRlKSA/PyBzdG9yZS5zaWRlTWVudVN0YXRlKCk7XG4gICAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgc2lkZU1lbnVTdGF0ZTogc2V0dGluZ1NpZGVNZW51IH0pO1xuICAgICAgICBzdG9yZS5fYXBwbHlDdXJyZW50VGhlbWUoKTtcbiAgICAgIH0pKCk7XG5cbiAgICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lciBmb3Igc3lzdGVtIHRoZW1lIGNoYW5nZXNcbiAgICAgIGNvbnN0IGxpc3RlbmVyID0gc3RvcmUuX3NldHVwU3lzdGVtQ29sb3JMaXN0ZW5lcigpO1xuICAgICAgcGF0Y2hTdGF0ZShzdG9yZSwgeyBfbGlzdGVuZXI6IGxpc3RlbmVyIH0pO1xuXG4gICAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXIgZm9yIHdpbmRvdyByZXNpemVcbiAgICAgIGNvbnN0IHJlc2l6ZUxpc3RlbmVyID0gc3RvcmUuX3NldHVwUmVzaXplTGlzdGVuZXIoKTtcbiAgICAgIHBhdGNoU3RhdGUoc3RvcmUsIHsgX3Jlc2l6ZUxpc3RlbmVyOiByZXNpemVMaXN0ZW5lciB9KTtcbiAgICB9LFxuXG4gICAgb25EZXN0cm95KCkge1xuICAgICAgLy8gQ2xlYW4gdXAgZXZlbnQgbGlzdGVuZXJzIHdoZW4gc3RvcmUgaXMgZGVzdHJveWVkXG4gICAgICBjb25zdCB7IF9saXN0ZW5lcjogbGlzdGVuZXIsIF9yZXNpemVMaXN0ZW5lcjogcmVzaXplTGlzdGVuZXIgfSA9IHN0b3JlO1xuICAgICAgaWYgKGxpc3RlbmVyKSB7XG4gICAgICAgIHN0b3JlLl9yZW1vdmVTeXN0ZW1Db2xvckxpc3RlbmVyKGxpc3RlbmVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChyZXNpemVMaXN0ZW5lcikge1xuICAgICAgICBzdG9yZS5fcmVtb3ZlUmVzaXplTGlzdGVuZXIocmVzaXplTGlzdGVuZXIpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pKVxuKTtcbiJdfQ==