@tsi-developpement/tsi-shared-ui 0.0.1

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 (558) hide show
  1. package/esm2022/lib/consts/app-providers.mjs +11 -0
  2. package/esm2022/lib/consts/html-template.const.mjs +40 -0
  3. package/esm2022/lib/consts/index.mjs +8 -0
  4. package/esm2022/lib/consts/localization-key.mjs +12 -0
  5. package/esm2022/lib/consts/locals.const.mjs +8 -0
  6. package/esm2022/lib/consts/queryParamNames.const.mjs +11 -0
  7. package/esm2022/lib/consts/themes.mjs +5 -0
  8. package/esm2022/lib/consts/tsi-consts.mjs +45 -0
  9. package/esm2022/lib/end-points/authorization-endpoints.mjs +35 -0
  10. package/esm2022/lib/end-points/baseuri.mjs +11 -0
  11. package/esm2022/lib/end-points/endpoints.mjs +208 -0
  12. package/esm2022/lib/end-points/import-export-endpoint.mjs +35 -0
  13. package/esm2022/lib/end-points/index.mjs +7 -0
  14. package/esm2022/lib/end-points/presentation-settings-endpoints.mjs +13 -0
  15. package/esm2022/lib/end-points/reporting-endpoints.mjs +55 -0
  16. package/esm2022/lib/end-points/shared-endpoint.mjs +12 -0
  17. package/esm2022/lib/end-points/user-identity-endpoints.mjs +61 -0
  18. package/esm2022/lib/enums/Language.mjs +9 -0
  19. package/esm2022/lib/enums/auto-complete.mjs +6 -0
  20. package/esm2022/lib/enums/button-type.enum.mjs +6 -0
  21. package/esm2022/lib/enums/claim-types.mjs +15 -0
  22. package/esm2022/lib/enums/code-format.mjs +6 -0
  23. package/esm2022/lib/enums/component-use-modes-enum.mjs +19 -0
  24. package/esm2022/lib/enums/css-units.mjs +10 -0
  25. package/esm2022/lib/enums/decimal-format.mjs +8 -0
  26. package/esm2022/lib/enums/display-types.mjs +35 -0
  27. package/esm2022/lib/enums/filter-operator-type.mjs +34 -0
  28. package/esm2022/lib/enums/form-validation-error.mjs +7 -0
  29. package/esm2022/lib/enums/grid-selection-mode.mjs +7 -0
  30. package/esm2022/lib/enums/grid-sort-mode.mjs +7 -0
  31. package/esm2022/lib/enums/http-method-types.mjs +6 -0
  32. package/esm2022/lib/enums/index.mjs +25 -0
  33. package/esm2022/lib/enums/input-types.mjs +20 -0
  34. package/esm2022/lib/enums/layout-orientation.mjs +6 -0
  35. package/esm2022/lib/enums/logout-reason-enum.mjs +8 -0
  36. package/esm2022/lib/enums/modal-size-enum.mjs +10 -0
  37. package/esm2022/lib/enums/report-type.mjs +9 -0
  38. package/esm2022/lib/enums/status.mjs +9 -0
  39. package/esm2022/lib/enums/text-box-type.mjs +7 -0
  40. package/esm2022/lib/enums/tooltipPosition.enum.mjs +8 -0
  41. package/esm2022/lib/enums/tsi-component-enum.mjs +40 -0
  42. package/esm2022/lib/enums/type-import.mjs +6 -0
  43. package/esm2022/lib/functions/array.functions.mjs +8 -0
  44. package/esm2022/lib/functions/index.mjs +3 -0
  45. package/esm2022/lib/functions/modal-open.function.mjs +69 -0
  46. package/esm2022/lib/guards/admin.guard.mjs +37 -0
  47. package/esm2022/lib/guards/auth.guard.mjs +30 -0
  48. package/esm2022/lib/guards/index.mjs +4 -0
  49. package/esm2022/lib/guards/permission.guard.mjs +32 -0
  50. package/esm2022/lib/interfaces/configuration/configuration.mjs +2 -0
  51. package/esm2022/lib/interfaces/generic-form/generic-form.mjs +118 -0
  52. package/esm2022/lib/interfaces/generic-types/dictionary.mjs +2 -0
  53. package/esm2022/lib/interfaces/grid/grid-configuration.mjs +2 -0
  54. package/esm2022/lib/interfaces/index.mjs +12 -0
  55. package/esm2022/lib/interfaces/modal/dynamic.component.mjs +7 -0
  56. package/esm2022/lib/interfaces/modal/modal-size.mjs +2 -0
  57. package/esm2022/lib/interfaces/pagination/pagination-base.mjs +2 -0
  58. package/esm2022/lib/interfaces/select-list/combo-status-model.mjs +10 -0
  59. package/esm2022/lib/interfaces/settings/app-settings.mjs +2 -0
  60. package/esm2022/lib/interfaces/styles/css-size-property.mjs +17 -0
  61. package/esm2022/lib/interfaces/translation/translation.mjs +2 -0
  62. package/esm2022/lib/models/Notes/Note.mjs +7 -0
  63. package/esm2022/lib/models/application/configuration/endpoint-infos.mjs +3 -0
  64. package/esm2022/lib/models/application/configuration/entity-delete-behavior.mjs +2 -0
  65. package/esm2022/lib/models/authorization/authorization-token-mapper.mjs +24 -0
  66. package/esm2022/lib/models/authorization/authorization-token.mjs +2 -0
  67. package/esm2022/lib/models/common/component-descriminator.mjs +2 -0
  68. package/esm2022/lib/models/common/entity-properties.mjs +2 -0
  69. package/esm2022/lib/models/common/entity-validations.mjs +2 -0
  70. package/esm2022/lib/models/common/event-schema.mjs +2 -0
  71. package/esm2022/lib/models/common/key-value-pair.mjs +2 -0
  72. package/esm2022/lib/models/entity-info/entity-info.mjs +29 -0
  73. package/esm2022/lib/models/filter/filter-by-existing-values.mjs +7 -0
  74. package/esm2022/lib/models/filter/paged-result-request-base.mjs +13 -0
  75. package/esm2022/lib/models/filter/search-field.mjs +2 -0
  76. package/esm2022/lib/models/import-export/import-export.mjs +15 -0
  77. package/esm2022/lib/models/index.mjs +38 -0
  78. package/esm2022/lib/models/journalisation-application/journalisation-application.mjs +10 -0
  79. package/esm2022/lib/models/journalisation-application/status-history.mjs +3 -0
  80. package/esm2022/lib/models/layout/layout-config.mjs +2 -0
  81. package/esm2022/lib/models/modal/bs-modal.mjs +6 -0
  82. package/esm2022/lib/models/presentation-settings/presentation-settings.mjs +8 -0
  83. package/esm2022/lib/models/progress-bar/progress-bar-create-request.mjs +2 -0
  84. package/esm2022/lib/models/progress-bar/progress-bar-response.mjs +8 -0
  85. package/esm2022/lib/models/progress-bar/progress-bar-update-request.mjs +3 -0
  86. package/esm2022/lib/models/remote-services-utility/subscription-result.mjs +17 -0
  87. package/esm2022/lib/models/reporting/json-data-connection.mjs +2 -0
  88. package/esm2022/lib/models/reporting/optional-endpoints.mjs +2 -0
  89. package/esm2022/lib/models/reporting/report-template-response.mjs +2 -0
  90. package/esm2022/lib/models/reporting/report-to-edit-template.mjs +2 -0
  91. package/esm2022/lib/models/reporting/report-to-print.mjs +2 -0
  92. package/esm2022/lib/models/reporting/report-to-template.mjs +2 -0
  93. package/esm2022/lib/models/settings/devise.mjs +3 -0
  94. package/esm2022/lib/models/settings/fichier.mjs +6 -0
  95. package/esm2022/lib/models/settings/type-fichier.mjs +3 -0
  96. package/esm2022/lib/models/tsi-card/tsi-card.mjs +3 -0
  97. package/esm2022/lib/models/user-identity/login-response.mjs +7 -0
  98. package/esm2022/lib/models/user-identity/tenant.mjs +3 -0
  99. package/esm2022/lib/models/user-identity/user-identity.mjs +3 -0
  100. package/esm2022/lib/models/workflow/workflow.mjs +14 -0
  101. package/esm2022/lib/package-initializer.mjs +7 -0
  102. package/esm2022/lib/pipes/cut-label.pipe.mjs +23 -0
  103. package/esm2022/lib/pipes/index.mjs +8 -0
  104. package/esm2022/lib/pipes/localize.pipe.mjs +51 -0
  105. package/esm2022/lib/pipes/modal-label.pipe.mjs +37 -0
  106. package/esm2022/lib/pipes/shorten.pipe.mjs +20 -0
  107. package/esm2022/lib/pipes/to-number.pipe.mjs +20 -0
  108. package/esm2022/lib/pipes/tsi-currency.pipe.mjs +29 -0
  109. package/esm2022/lib/pipes/tsi-decimal.pipe.mjs +21 -0
  110. package/esm2022/lib/providers/index.mjs +2 -0
  111. package/esm2022/lib/providers/shared-ui-tsi.provider.mjs +15 -0
  112. package/esm2022/lib/routes/admin.routes.mjs +5 -0
  113. package/esm2022/lib/routes/app.routes.mjs +7 -0
  114. package/esm2022/lib/routes/identity.routes.mjs +4 -0
  115. package/esm2022/lib/routes/index.mjs +5 -0
  116. package/esm2022/lib/routes/manage-reporting.routes.mjs +5 -0
  117. package/esm2022/lib/services/Component-Finder/tsi-component-finder.service.mjs +22 -0
  118. package/esm2022/lib/services/Import-Export/modele-import.service.mjs +59 -0
  119. package/esm2022/lib/services/Note/Note.service.mjs +35 -0
  120. package/esm2022/lib/services/UserIdentity/identity-platform-authentication.service.mjs +29 -0
  121. package/esm2022/lib/services/UserIdentity/user-identity.service.mjs +40 -0
  122. package/esm2022/lib/services/application/api-explorer.service.mjs +24 -0
  123. package/esm2022/lib/services/application/app.layout.service.mjs +97 -0
  124. package/esm2022/lib/services/application/parametres-application-parambase.service.mjs +20 -0
  125. package/esm2022/lib/services/authorization/authorization.service.mjs +124 -0
  126. package/esm2022/lib/services/authorization/identity-manager.service.mjs +97 -0
  127. package/esm2022/lib/services/base/crud-base.service.mjs +38 -0
  128. package/esm2022/lib/services/configuration/entity-configuration.service.mjs +49 -0
  129. package/esm2022/lib/services/currentUser/currentUser.service.mjs +49 -0
  130. package/esm2022/lib/services/date-helper.service.mjs +133 -0
  131. package/esm2022/lib/services/dialog-data.service.mjs +32 -0
  132. package/esm2022/lib/services/fichier/fichier-upload.service.mjs +44 -0
  133. package/esm2022/lib/services/fichier/fichier.service.mjs +20 -0
  134. package/esm2022/lib/services/formula.service.mjs +20 -0
  135. package/esm2022/lib/services/generator/html-template-generator.service.mjs +196 -0
  136. package/esm2022/lib/services/index.mjs +41 -0
  137. package/esm2022/lib/services/journalisation/journalisation-application.service.mjs +23 -0
  138. package/esm2022/lib/services/journalisation/status-history.service.mjs +23 -0
  139. package/esm2022/lib/services/layout/layout-helper.service.mjs +72 -0
  140. package/esm2022/lib/services/modal/tsi-bs-modal.service.mjs +37 -0
  141. package/esm2022/lib/services/modal/tsi-modal.service.mjs +21 -0
  142. package/esm2022/lib/services/module-code/module-code.service.mjs +31 -0
  143. package/esm2022/lib/services/module-main-parameter.service.mjs +31 -0
  144. package/esm2022/lib/services/notification/error-response-manager.service.mjs +57 -0
  145. package/esm2022/lib/services/notification/tsi-confirmation.service.mjs +37 -0
  146. package/esm2022/lib/services/notification/tsi-message.service.mjs +54 -0
  147. package/esm2022/lib/services/notification/tsi-notification.service.mjs +47 -0
  148. package/esm2022/lib/services/presentation-setting/presentation-designer-base.service.mjs +26 -0
  149. package/esm2022/lib/services/presentation-setting/presentation-designer.service.mjs +58 -0
  150. package/esm2022/lib/services/presentation-setting/presentation-setting.service.mjs +39 -0
  151. package/esm2022/lib/services/progress-bar/progress-bar-helper.service.mjs +39 -0
  152. package/esm2022/lib/services/progress-bar/progress-bar.service.mjs +30 -0
  153. package/esm2022/lib/services/record-info-popup.service.mjs +21 -0
  154. package/esm2022/lib/services/reporting/dashboard-module.service.mjs +24 -0
  155. package/esm2022/lib/services/reporting/reporting.service.mjs +111 -0
  156. package/esm2022/lib/services/settings/app-settings.service.mjs +47 -0
  157. package/esm2022/lib/services/settings/keyboard-shortcut.service.mjs +30 -0
  158. package/esm2022/lib/services/status/entityStatus.service.mjs +21 -0
  159. package/esm2022/lib/services/translation/translation.service.mjs +71 -0
  160. package/esm2022/lib/services/validation/entity-validations.service.mjs +21 -0
  161. package/esm2022/lib/services/validation/generic-validation-state.service.mjs +30 -0
  162. package/esm2022/lib/services/validation/input-registry.service.mjs +25 -0
  163. package/esm2022/lib/services/workflow/workflow-configuration.service.mjs +80 -0
  164. package/esm2022/lib/shared.module.mjs +643 -0
  165. package/esm2022/lib/tsi-base/components/app-base/app-base.component.mjs +101 -0
  166. package/esm2022/lib/tsi-base/components/tsi-base/tsi-base.component.mjs +25 -0
  167. package/esm2022/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.mjs +645 -0
  168. package/esm2022/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.mjs +514 -0
  169. package/esm2022/lib/tsi-base/index.mjs +6 -0
  170. package/esm2022/lib/tsi-base/tsi-input-base/tsi-input-base.component.mjs +141 -0
  171. package/esm2022/lib/tsi-components/alert-import-message/alert-import-message.component.mjs +19 -0
  172. package/esm2022/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.mjs +40 -0
  173. package/esm2022/lib/tsi-components/button-components/tsi-button/tsi-button.component.mjs +75 -0
  174. package/esm2022/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.mjs +173 -0
  175. package/esm2022/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.mjs +201 -0
  176. package/esm2022/lib/tsi-components/index.mjs +80 -0
  177. package/esm2022/lib/tsi-components/input-components/editable-grid/editable-grid.component.mjs +643 -0
  178. package/esm2022/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.mjs +120 -0
  179. package/esm2022/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.mjs +53 -0
  180. package/esm2022/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.mjs +62 -0
  181. package/esm2022/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.mjs +116 -0
  182. package/esm2022/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.mjs +51 -0
  183. package/esm2022/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.mjs +195 -0
  184. package/esm2022/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.mjs +54 -0
  185. package/esm2022/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.mjs +55 -0
  186. package/esm2022/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.mjs +43 -0
  187. package/esm2022/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.mjs +56 -0
  188. package/esm2022/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.mjs +649 -0
  189. package/esm2022/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.mjs +44 -0
  190. package/esm2022/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.mjs +50 -0
  191. package/esm2022/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.mjs +65 -0
  192. package/esm2022/lib/tsi-components/logout-popup/logout-popup.component.mjs +12 -0
  193. package/esm2022/lib/tsi-components/manage-import-export/manage-import-export.component.mjs +435 -0
  194. package/esm2022/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.mjs +148 -0
  195. package/esm2022/lib/tsi-components/manage-reporting/manage-reporting.component.mjs +1075 -0
  196. package/esm2022/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.mjs +31 -0
  197. package/esm2022/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.mjs +24 -0
  198. package/esm2022/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.mjs +19 -0
  199. package/esm2022/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.mjs +22 -0
  200. package/esm2022/lib/tsi-components/modal-component/modal.component.mjs +138 -0
  201. package/esm2022/lib/tsi-components/modal-loader/modal-loader.component.mjs +58 -0
  202. package/esm2022/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.mjs +32 -0
  203. package/esm2022/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.mjs +18 -0
  204. package/esm2022/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.mjs +17 -0
  205. package/esm2022/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.mjs +57 -0
  206. package/esm2022/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.mjs +27 -0
  207. package/esm2022/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.mjs +25 -0
  208. package/esm2022/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.mjs +139 -0
  209. package/esm2022/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.mjs +1509 -0
  210. package/esm2022/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.mjs +144 -0
  211. package/esm2022/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.mjs +13 -0
  212. package/esm2022/lib/tsi-components/output-components/tsi-label/tsi-label.component.mjs +24 -0
  213. package/esm2022/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.mjs +18 -0
  214. package/esm2022/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.mjs +20 -0
  215. package/esm2022/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.mjs +17 -0
  216. package/esm2022/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.mjs +30 -0
  217. package/esm2022/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.mjs +17 -0
  218. package/esm2022/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.mjs +427 -0
  219. package/esm2022/lib/tsi-components/reporting/reporting.component.mjs +667 -0
  220. package/esm2022/lib/tsi-components/spinner/spinner.component.mjs +15 -0
  221. package/esm2022/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.mjs +21 -0
  222. package/esm2022/lib/tsi-components/tsi-calender/context-menu/context-menu.component.mjs +46 -0
  223. package/esm2022/lib/tsi-components/tsi-calender/tsi-calender.component.mjs +297 -0
  224. package/esm2022/lib/tsi-components/tsi-card/tsi-card.component.mjs +64 -0
  225. package/esm2022/lib/tsi-components/tsi-card-list/tsi-card-list.component.mjs +112 -0
  226. package/esm2022/lib/tsi-components/tsi-change-password/tsi-change-password.component.mjs +39 -0
  227. package/esm2022/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.mjs +83 -0
  228. package/esm2022/lib/tsi-components/tsi-divider/tsi-divider.component.mjs +18 -0
  229. package/esm2022/lib/tsi-components/tsi-form/tsi-form.component.mjs +305 -0
  230. package/esm2022/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.mjs +15 -0
  231. package/esm2022/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.mjs +883 -0
  232. package/esm2022/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.mjs +149 -0
  233. package/esm2022/lib/tsi-components/tsi-kanban/tsi-kanban.component.mjs +231 -0
  234. package/esm2022/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.mjs +119 -0
  235. package/esm2022/lib/tsi-components/tsi-modal/tsi-modal.component.mjs +25 -0
  236. package/esm2022/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.mjs +119 -0
  237. package/esm2022/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.mjs +54 -0
  238. package/esm2022/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.mjs +27 -0
  239. package/esm2022/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.mjs +123 -0
  240. package/esm2022/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.mjs +41 -0
  241. package/esm2022/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.mjs +187 -0
  242. package/esm2022/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.mjs +170 -0
  243. package/esm2022/lib/tsi-components/tsi-search-box/tsi-search-box.component.mjs +142 -0
  244. package/esm2022/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.mjs +37 -0
  245. package/esm2022/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.mjs +52 -0
  246. package/esm2022/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.mjs +46 -0
  247. package/esm2022/lib/tsi-components/tsi-tenants/tsi-tenants.component.mjs +122 -0
  248. package/esm2022/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.mjs +21 -0
  249. package/esm2022/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.mjs +186 -0
  250. package/esm2022/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.mjs +54 -0
  251. package/esm2022/lib/tsi-directives/auto-select.directive.mjs +33 -0
  252. package/esm2022/lib/tsi-directives/busy.directive.mjs +32 -0
  253. package/esm2022/lib/tsi-directives/dynamic-component-loader/ad.directive.mjs +16 -0
  254. package/esm2022/lib/tsi-directives/index.mjs +8 -0
  255. package/esm2022/lib/tsi-directives/module-main-parameter.directive.mjs +16 -0
  256. package/esm2022/lib/tsi-directives/presentation-designer-base.directive.mjs +238 -0
  257. package/esm2022/lib/tsi-directives/presentation-designer.directive.mjs +205 -0
  258. package/esm2022/lib/tsi-directives/validation.directive.mjs +85 -0
  259. package/esm2022/lib/tsi-helpers/compoent-reference.helper.mjs +7 -0
  260. package/esm2022/lib/tsi-helpers/date-helper.mjs +21 -0
  261. package/esm2022/lib/tsi-helpers/export-excel.helper.mjs +40 -0
  262. package/esm2022/lib/tsi-helpers/filter-helper.mjs +126 -0
  263. package/esm2022/lib/tsi-helpers/grid-col-style.helper.mjs +7 -0
  264. package/esm2022/lib/tsi-helpers/guid.helper.mjs +19 -0
  265. package/esm2022/lib/tsi-helpers/helpers.mjs +9 -0
  266. package/esm2022/lib/tsi-helpers/index.mjs +13 -0
  267. package/esm2022/lib/tsi-helpers/mapping-helper.mjs +10 -0
  268. package/esm2022/lib/tsi-helpers/object.helper.mjs +6 -0
  269. package/esm2022/lib/tsi-helpers/primeng-translate-config.mjs +55 -0
  270. package/esm2022/lib/tsi-helpers/storage-manager.mjs +33 -0
  271. package/esm2022/lib/tsi-helpers/type-registry.helper.mjs +49 -0
  272. package/esm2022/lib/types/enum-description.type.mjs +2 -0
  273. package/esm2022/lib/types/index.mjs +3 -0
  274. package/esm2022/lib/types/time-only.mjs +42 -0
  275. package/esm2022/public-api.mjs +21 -0
  276. package/esm2022/tsi-developpement-tsi-shared-ui.mjs +5 -0
  277. package/esm2022/tsi-tsi-shared-ui.mjs +5 -0
  278. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs +17486 -0
  279. package/fesm2022/tsi-developpement-tsi-shared-ui.mjs.map +1 -0
  280. package/fesm2022/tsi-tsi-shared-ui.mjs +17486 -0
  281. package/fesm2022/tsi-tsi-shared-ui.mjs.map +1 -0
  282. package/index.d.ts +5 -0
  283. package/lib/consts/app-providers.d.ts +4 -0
  284. package/lib/consts/html-template.const.d.ts +12 -0
  285. package/lib/consts/index.d.ts +7 -0
  286. package/lib/consts/localization-key.d.ts +11 -0
  287. package/lib/consts/locals.const.d.ts +7 -0
  288. package/lib/consts/queryParamNames.const.d.ts +10 -0
  289. package/lib/consts/themes.d.ts +4 -0
  290. package/lib/consts/tsi-consts.d.ts +40 -0
  291. package/lib/end-points/authorization-endpoints.d.ts +31 -0
  292. package/lib/end-points/baseuri.d.ts +10 -0
  293. package/lib/end-points/endpoints.d.ts +205 -0
  294. package/lib/end-points/import-export-endpoint.d.ts +33 -0
  295. package/lib/end-points/index.d.ts +6 -0
  296. package/lib/end-points/presentation-settings-endpoints.d.ts +11 -0
  297. package/lib/end-points/reporting-endpoints.d.ts +53 -0
  298. package/lib/end-points/shared-endpoint.d.ts +9 -0
  299. package/lib/end-points/user-identity-endpoints.d.ts +59 -0
  300. package/lib/enums/Language.d.ts +9 -0
  301. package/lib/enums/auto-complete.d.ts +4 -0
  302. package/lib/enums/button-type.enum.d.ts +4 -0
  303. package/lib/enums/claim-types.d.ts +13 -0
  304. package/lib/enums/code-format.d.ts +4 -0
  305. package/lib/enums/component-use-modes-enum.d.ts +17 -0
  306. package/lib/enums/css-units.d.ts +8 -0
  307. package/lib/enums/decimal-format.d.ts +6 -0
  308. package/lib/enums/display-types.d.ts +17 -0
  309. package/lib/enums/filter-operator-type.d.ts +18 -0
  310. package/lib/enums/form-validation-error.d.ts +11 -0
  311. package/lib/enums/grid-selection-mode.d.ts +5 -0
  312. package/lib/enums/grid-sort-mode.d.ts +5 -0
  313. package/lib/enums/http-method-types.d.ts +4 -0
  314. package/lib/enums/index.d.ts +24 -0
  315. package/lib/enums/input-types.d.ts +18 -0
  316. package/lib/enums/layout-orientation.d.ts +4 -0
  317. package/lib/enums/logout-reason-enum.d.ts +6 -0
  318. package/lib/enums/modal-size-enum.d.ts +10 -0
  319. package/lib/enums/report-type.d.ts +7 -0
  320. package/lib/enums/status.d.ts +7 -0
  321. package/lib/enums/text-box-type.d.ts +5 -0
  322. package/lib/enums/tooltipPosition.enum.d.ts +6 -0
  323. package/lib/enums/tsi-component-enum.d.ts +37 -0
  324. package/lib/enums/type-import.d.ts +4 -0
  325. package/lib/functions/array.functions.d.ts +1 -0
  326. package/lib/functions/index.d.ts +1 -0
  327. package/lib/functions/modal-open.function.d.ts +9 -0
  328. package/lib/guards/admin.guard.d.ts +14 -0
  329. package/lib/guards/auth.guard.d.ts +12 -0
  330. package/lib/guards/index.d.ts +3 -0
  331. package/lib/guards/permission.guard.d.ts +2 -0
  332. package/lib/interfaces/configuration/configuration.d.ts +10 -0
  333. package/lib/interfaces/generic-form/generic-form.d.ts +45 -0
  334. package/lib/interfaces/generic-types/dictionary.d.ts +3 -0
  335. package/lib/interfaces/grid/grid-configuration.d.ts +116 -0
  336. package/lib/interfaces/index.d.ts +11 -0
  337. package/lib/interfaces/modal/dynamic.component.d.ts +18 -0
  338. package/lib/interfaces/modal/modal-size.d.ts +4 -0
  339. package/lib/interfaces/pagination/pagination-base.d.ts +46 -0
  340. package/lib/interfaces/select-list/combo-status-model.d.ts +8 -0
  341. package/lib/interfaces/settings/app-settings.d.ts +4 -0
  342. package/lib/interfaces/styles/css-size-property.d.ts +10 -0
  343. package/lib/interfaces/translation/translation.d.ts +10 -0
  344. package/lib/models/Notes/Note.d.ts +25 -0
  345. package/lib/models/application/configuration/endpoint-infos.d.ts +6 -0
  346. package/lib/models/application/configuration/entity-delete-behavior.d.ts +6 -0
  347. package/lib/models/authorization/authorization-token-mapper.d.ts +4 -0
  348. package/lib/models/authorization/authorization-token.d.ts +16 -0
  349. package/lib/models/common/component-descriminator.d.ts +4 -0
  350. package/lib/models/common/entity-properties.d.ts +5 -0
  351. package/lib/models/common/entity-validations.d.ts +7 -0
  352. package/lib/models/common/event-schema.d.ts +6 -0
  353. package/lib/models/common/key-value-pair.d.ts +4 -0
  354. package/lib/models/entity-info/entity-info.d.ts +37 -0
  355. package/lib/models/filter/filter-by-existing-values.d.ts +6 -0
  356. package/lib/models/filter/paged-result-request-base.d.ts +16 -0
  357. package/lib/models/filter/search-field.d.ts +35 -0
  358. package/lib/models/import-export/import-export.d.ts +28 -0
  359. package/lib/models/index.d.ts +37 -0
  360. package/lib/models/journalisation-application/journalisation-application.d.ts +39 -0
  361. package/lib/models/journalisation-application/status-history.d.ts +12 -0
  362. package/lib/models/layout/layout-config.d.ts +3 -0
  363. package/lib/models/modal/bs-modal.d.ts +5 -0
  364. package/lib/models/presentation-settings/presentation-settings.d.ts +14 -0
  365. package/lib/models/progress-bar/progress-bar-create-request.d.ts +8 -0
  366. package/lib/models/progress-bar/progress-bar-response.d.ts +10 -0
  367. package/lib/models/progress-bar/progress-bar-update-request.d.ts +9 -0
  368. package/lib/models/remote-services-utility/subscription-result.d.ts +15 -0
  369. package/lib/models/reporting/json-data-connection.d.ts +6 -0
  370. package/lib/models/reporting/optional-endpoints.d.ts +8 -0
  371. package/lib/models/reporting/report-template-response.d.ts +13 -0
  372. package/lib/models/reporting/report-to-edit-template.d.ts +29 -0
  373. package/lib/models/reporting/report-to-print.d.ts +18 -0
  374. package/lib/models/reporting/report-to-template.d.ts +19 -0
  375. package/lib/models/settings/devise.d.ts +9 -0
  376. package/lib/models/settings/fichier.d.ts +14 -0
  377. package/lib/models/settings/type-fichier.d.ts +4 -0
  378. package/lib/models/tsi-card/tsi-card.d.ts +9 -0
  379. package/lib/models/user-identity/login-response.d.ts +8 -0
  380. package/lib/models/user-identity/tenant.d.ts +5 -0
  381. package/lib/models/user-identity/user-identity.d.ts +5 -0
  382. package/lib/models/workflow/workflow.d.ts +36 -0
  383. package/lib/package-initializer.d.ts +1 -0
  384. package/lib/pipes/cut-label.pipe.d.ts +7 -0
  385. package/lib/pipes/index.d.ts +7 -0
  386. package/lib/pipes/localize.pipe.d.ts +11 -0
  387. package/lib/pipes/modal-label.pipe.d.ts +10 -0
  388. package/lib/pipes/shorten.pipe.d.ts +7 -0
  389. package/lib/pipes/to-number.pipe.d.ts +7 -0
  390. package/lib/pipes/tsi-currency.pipe.d.ts +10 -0
  391. package/lib/pipes/tsi-decimal.pipe.d.ts +7 -0
  392. package/lib/providers/index.d.ts +1 -0
  393. package/lib/providers/shared-ui-tsi.provider.d.ts +8 -0
  394. package/lib/routes/admin.routes.d.ts +4 -0
  395. package/lib/routes/app.routes.d.ts +6 -0
  396. package/lib/routes/identity.routes.d.ts +3 -0
  397. package/lib/routes/index.d.ts +4 -0
  398. package/lib/routes/manage-reporting.routes.d.ts +4 -0
  399. package/lib/services/Component-Finder/tsi-component-finder.service.d.ts +10 -0
  400. package/lib/services/Import-Export/modele-import.service.d.ts +21 -0
  401. package/lib/services/Note/Note.service.d.ts +15 -0
  402. package/lib/services/UserIdentity/identity-platform-authentication.service.d.ts +13 -0
  403. package/lib/services/UserIdentity/user-identity.service.d.ts +15 -0
  404. package/lib/services/application/api-explorer.service.d.ts +13 -0
  405. package/lib/services/application/app.layout.service.d.ts +47 -0
  406. package/lib/services/application/parametres-application-parambase.service.d.ts +10 -0
  407. package/lib/services/authorization/authorization.service.d.ts +46 -0
  408. package/lib/services/authorization/identity-manager.service.d.ts +23 -0
  409. package/lib/services/base/crud-base.service.d.ts +20 -0
  410. package/lib/services/configuration/entity-configuration.service.d.ts +22 -0
  411. package/lib/services/currentUser/currentUser.service.d.ts +26 -0
  412. package/lib/services/date-helper.service.d.ts +32 -0
  413. package/lib/services/dialog-data.service.d.ts +12 -0
  414. package/lib/services/fichier/fichier-upload.service.d.ts +15 -0
  415. package/lib/services/fichier/fichier.service.d.ts +10 -0
  416. package/lib/services/formula.service.d.ts +10 -0
  417. package/lib/services/generator/html-template-generator.service.d.ts +28 -0
  418. package/lib/services/index.d.ts +40 -0
  419. package/lib/services/journalisation/journalisation-application.service.d.ts +12 -0
  420. package/lib/services/journalisation/status-history.service.d.ts +12 -0
  421. package/lib/services/layout/layout-helper.service.d.ts +25 -0
  422. package/lib/services/modal/tsi-bs-modal.service.d.ts +16 -0
  423. package/lib/services/modal/tsi-modal.service.d.ts +9 -0
  424. package/lib/services/module-code/module-code.service.d.ts +18 -0
  425. package/lib/services/module-main-parameter.service.d.ts +12 -0
  426. package/lib/services/notification/error-response-manager.service.d.ts +13 -0
  427. package/lib/services/notification/tsi-confirmation.service.d.ts +11 -0
  428. package/lib/services/notification/tsi-message.service.d.ts +13 -0
  429. package/lib/services/notification/tsi-notification.service.d.ts +18 -0
  430. package/lib/services/presentation-setting/presentation-designer-base.service.d.ts +14 -0
  431. package/lib/services/presentation-setting/presentation-designer.service.d.ts +19 -0
  432. package/lib/services/presentation-setting/presentation-setting.service.d.ts +16 -0
  433. package/lib/services/progress-bar/progress-bar-helper.service.d.ts +19 -0
  434. package/lib/services/progress-bar/progress-bar.service.d.ts +16 -0
  435. package/lib/services/record-info-popup.service.d.ts +10 -0
  436. package/lib/services/reporting/dashboard-module.service.d.ts +11 -0
  437. package/lib/services/reporting/reporting.service.d.ts +32 -0
  438. package/lib/services/settings/app-settings.service.d.ts +13 -0
  439. package/lib/services/settings/keyboard-shortcut.service.d.ts +9 -0
  440. package/lib/services/status/entityStatus.service.d.ts +11 -0
  441. package/lib/services/translation/translation.service.d.ts +20 -0
  442. package/lib/services/validation/entity-validations.service.d.ts +10 -0
  443. package/lib/services/validation/generic-validation-state.service.d.ts +15 -0
  444. package/lib/services/validation/input-registry.service.d.ts +11 -0
  445. package/lib/services/workflow/workflow-configuration.service.d.ts +28 -0
  446. package/lib/shared.module.d.ts +141 -0
  447. package/lib/tsi-base/components/app-base/app-base.component.d.ts +28 -0
  448. package/lib/tsi-base/components/tsi-base/tsi-base.component.d.ts +11 -0
  449. package/lib/tsi-base/components/tsi-form-base/tsi-form-base.component.d.ts +118 -0
  450. package/lib/tsi-base/components/tsi-list-base/tsi-list-base.component.d.ts +85 -0
  451. package/lib/tsi-base/index.d.ts +5 -0
  452. package/lib/tsi-base/tsi-input-base/tsi-input-base.component.d.ts +34 -0
  453. package/lib/tsi-components/alert-import-message/alert-import-message.component.d.ts +10 -0
  454. package/lib/tsi-components/button-components/Tsi-Submit-Button/tsi-submit-button.component.d.ts +16 -0
  455. package/lib/tsi-components/button-components/tsi-button/tsi-button.component.d.ts +26 -0
  456. package/lib/tsi-components/create-or-edit-entity-informations/create-or-edit-entity-informations.component.d.ts +31 -0
  457. package/lib/tsi-components/create-or-edit-modele-import/create-or-edit-modele-import.component.d.ts +52 -0
  458. package/lib/tsi-components/index.d.ts +79 -0
  459. package/lib/tsi-components/input-components/editable-grid/editable-grid.component.d.ts +127 -0
  460. package/lib/tsi-components/input-components/tsi-checkbox/tsi-checkbox.component.d.ts +30 -0
  461. package/lib/tsi-components/input-components/tsi-currency-other-input/tsi-currency-other-input.component.d.ts +18 -0
  462. package/lib/tsi-components/input-components/tsi-currency-societe-input/tsi-currency-societe-input.component.d.ts +21 -0
  463. package/lib/tsi-components/input-components/tsi-date-picker/tsi-date-picker.component.d.ts +38 -0
  464. package/lib/tsi-components/input-components/tsi-decimal-input/tsi-decimal-input.component.d.ts +14 -0
  465. package/lib/tsi-components/input-components/tsi-file-manager/tsi-file-manager.component.d.ts +45 -0
  466. package/lib/tsi-components/input-components/tsi-formula-box/tsi-formula-box.component.d.ts +17 -0
  467. package/lib/tsi-components/input-components/tsi-integer/tsi-integer.component.d.ts +19 -0
  468. package/lib/tsi-components/input-components/tsi-radio-button/tsi-radio-button.component.d.ts +16 -0
  469. package/lib/tsi-components/input-components/tsi-rate-input/tsi-rate-input.component.d.ts +16 -0
  470. package/lib/tsi-components/input-components/tsi-search-combo/tsi-search-combo.component.d.ts +92 -0
  471. package/lib/tsi-components/input-components/tsi-text-area/tsi-text-area.component.d.ts +17 -0
  472. package/lib/tsi-components/input-components/tsi-text-box/tsi-text-box.component.d.ts +21 -0
  473. package/lib/tsi-components/input-components/tsi-time-picker/tsi-time-picker.component.d.ts +23 -0
  474. package/lib/tsi-components/logout-popup/logout-popup.component.d.ts +5 -0
  475. package/lib/tsi-components/manage-import-export/manage-import-export.component.d.ts +64 -0
  476. package/lib/tsi-components/manage-reporting/add-report-popup/add-report-popup.component.d.ts +151 -0
  477. package/lib/tsi-components/manage-reporting/manage-reporting.component.d.ts +109 -0
  478. package/lib/tsi-components/message-components/tsi-error-message/tsi-error-message.component.d.ts +15 -0
  479. package/lib/tsi-components/message-components/tsi-info-message/tsi-info-message.component.d.ts +13 -0
  480. package/lib/tsi-components/message-components/tsi-redirection-message/tsi-redirection-message.component.d.ts +9 -0
  481. package/lib/tsi-components/message-components/tsi-success-message/tsi-success-message.component.d.ts +13 -0
  482. package/lib/tsi-components/modal-component/modal.component.d.ts +25 -0
  483. package/lib/tsi-components/modal-loader/modal-loader.component.d.ts +27 -0
  484. package/lib/tsi-components/output-components/display-nested-prop/display-nested-prop.component.d.ts +14 -0
  485. package/lib/tsi-components/output-components/tsi-checkbox-display/tsi-checkbox-display.component.d.ts +6 -0
  486. package/lib/tsi-components/output-components/tsi-currency-other-display/tsi-currency-other-display.component.d.ts +7 -0
  487. package/lib/tsi-components/output-components/tsi-currency-societe-display/tsi-currency-societe-display.component.d.ts +19 -0
  488. package/lib/tsi-components/output-components/tsi-date-display/tsi-date-display.component.d.ts +10 -0
  489. package/lib/tsi-components/output-components/tsi-decimal-display/tsi-decimal-display.component.d.ts +9 -0
  490. package/lib/tsi-components/output-components/tsi-display-grid/tsi-display-grid.component.d.ts +41 -0
  491. package/lib/tsi-components/output-components/tsi-generic-grid/tsi-generic-grid.component.d.ts +231 -0
  492. package/lib/tsi-components/output-components/tsi-image-display/tsi-image-display.component.d.ts +46 -0
  493. package/lib/tsi-components/output-components/tsi-integer-display/tsi-integer-display.component.d.ts +6 -0
  494. package/lib/tsi-components/output-components/tsi-label/tsi-label.component.d.ts +8 -0
  495. package/lib/tsi-components/output-components/tsi-label-legend/tsi-label-legend.component.d.ts +6 -0
  496. package/lib/tsi-components/output-components/tsi-legend/tsi-legend.component.d.ts +9 -0
  497. package/lib/tsi-components/output-components/tsi-paragraph/tsi-paragraph.component.d.ts +6 -0
  498. package/lib/tsi-components/output-components/tsi-rate-display/tsi-rate-display.component.d.ts +10 -0
  499. package/lib/tsi-components/output-components/tsi-time-display/tsi-time-display.component.d.ts +7 -0
  500. package/lib/tsi-components/output-components/tsi-view-grid/tsi-view-grid.component.d.ts +97 -0
  501. package/lib/tsi-components/reporting/reporting.component.d.ts +103 -0
  502. package/lib/tsi-components/spinner/spinner.component.d.ts +8 -0
  503. package/lib/tsi-components/tsi-bubble-info/tsi-bubble-info.component.d.ts +9 -0
  504. package/lib/tsi-components/tsi-calender/context-menu/context-menu.component.d.ts +25 -0
  505. package/lib/tsi-components/tsi-calender/tsi-calender.component.d.ts +50 -0
  506. package/lib/tsi-components/tsi-card/tsi-card.component.d.ts +25 -0
  507. package/lib/tsi-components/tsi-card-list/tsi-card-list.component.d.ts +35 -0
  508. package/lib/tsi-components/tsi-change-password/tsi-change-password.component.d.ts +21 -0
  509. package/lib/tsi-components/tsi-code-generator/tsi-code-generator.component.d.ts +23 -0
  510. package/lib/tsi-components/tsi-divider/tsi-divider.component.d.ts +6 -0
  511. package/lib/tsi-components/tsi-form/tsi-form.component.d.ts +91 -0
  512. package/lib/tsi-components/tsi-form-modal-footer/tsi-form-modal-footer.component.d.ts +8 -0
  513. package/lib/tsi-components/tsi-generic-crud/tsi-generic-crud.component.d.ts +156 -0
  514. package/lib/tsi-components/tsi-generic-form/tsi-generic-form.component.d.ts +28 -0
  515. package/lib/tsi-components/tsi-kanban/tsi-kanban.component.d.ts +68 -0
  516. package/lib/tsi-components/tsi-log-event-history/tsi-log-event-history.component.d.ts +35 -0
  517. package/lib/tsi-components/tsi-modal/tsi-modal.component.d.ts +10 -0
  518. package/lib/tsi-components/tsi-modal-footer/tsi-modal-footer.component.d.ts +38 -0
  519. package/lib/tsi-components/tsi-modal-header/tsi-modal-header.component.d.ts +19 -0
  520. package/lib/tsi-components/tsi-notes-avertir/tsi-notes-avertir.component.d.ts +13 -0
  521. package/lib/tsi-components/tsi-notes-createoredit/tsi-notes.component.d.ts +21 -0
  522. package/lib/tsi-components/tsi-notes-grid/tsi-notes-grid.component.d.ts +12 -0
  523. package/lib/tsi-components/tsi-popup-text-viewer/tsi-popup-text-viewer.component.d.ts +41 -0
  524. package/lib/tsi-components/tsi-progress-bar/tsi-progress-bar.component.d.ts +38 -0
  525. package/lib/tsi-components/tsi-search-box/tsi-search-box.component.d.ts +44 -0
  526. package/lib/tsi-components/tsi-send-mail/tsi-send-mail.component.d.ts +21 -0
  527. package/lib/tsi-components/tsi-tab-panel/tsi-tab-panel.component.d.ts +18 -0
  528. package/lib/tsi-components/tsi-tab-view/tsi-tab-view.component.d.ts +17 -0
  529. package/lib/tsi-components/tsi-tenants/tsi-tenants.component.d.ts +39 -0
  530. package/lib/tsi-components/tsi-tooltip/tsi-tooltip.component.d.ts +9 -0
  531. package/lib/tsi-components/tsi-upload-fiche/tsi-upload-fiche.component.d.ts +35 -0
  532. package/lib/tsi-components/tsi-upload-grid/tsi-upload-grid.component.d.ts +13 -0
  533. package/lib/tsi-directives/auto-select.directive.d.ts +9 -0
  534. package/lib/tsi-directives/busy.directive.d.ts +11 -0
  535. package/lib/tsi-directives/dynamic-component-loader/ad.directive.d.ts +8 -0
  536. package/lib/tsi-directives/index.d.ts +7 -0
  537. package/lib/tsi-directives/module-main-parameter.directive.d.ts +8 -0
  538. package/lib/tsi-directives/presentation-designer-base.directive.d.ts +41 -0
  539. package/lib/tsi-directives/presentation-designer.directive.d.ts +37 -0
  540. package/lib/tsi-directives/validation.directive.d.ts +18 -0
  541. package/lib/tsi-helpers/compoent-reference.helper.d.ts +5 -0
  542. package/lib/tsi-helpers/date-helper.d.ts +6 -0
  543. package/lib/tsi-helpers/export-excel.helper.d.ts +5 -0
  544. package/lib/tsi-helpers/filter-helper.d.ts +12 -0
  545. package/lib/tsi-helpers/grid-col-style.helper.d.ts +5 -0
  546. package/lib/tsi-helpers/guid.helper.d.ts +6 -0
  547. package/lib/tsi-helpers/helpers.d.ts +4 -0
  548. package/lib/tsi-helpers/index.d.ts +12 -0
  549. package/lib/tsi-helpers/mapping-helper.d.ts +5 -0
  550. package/lib/tsi-helpers/object.helper.d.ts +3 -0
  551. package/lib/tsi-helpers/primeng-translate-config.d.ts +54 -0
  552. package/lib/tsi-helpers/storage-manager.d.ts +8 -0
  553. package/lib/tsi-helpers/type-registry.helper.d.ts +34 -0
  554. package/lib/types/enum-description.type.d.ts +3 -0
  555. package/lib/types/index.d.ts +2 -0
  556. package/lib/types/time-only.d.ts +17 -0
  557. package/package.json +24 -0
  558. package/public-api.d.ts +17 -0
@@ -0,0 +1,149 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { TsiComponentEnum, Modes } from '../../enums';
3
+ import { TsiFormComponentBaseComponent } from '../../tsi-base/components/tsi-form-base/tsi-form-base.component';
4
+ import { LocalizationKeys } from '../../consts/localization-key';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "../../services";
7
+ import * as i2 from "primeng/dynamicdialog";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "@angular/forms";
10
+ import * as i5 from "primeng/tabview";
11
+ import * as i6 from "../input-components/tsi-search-combo/tsi-search-combo.component";
12
+ import * as i7 from "../input-components/tsi-checkbox/tsi-checkbox.component";
13
+ import * as i8 from "../input-components/tsi-currency-other-input/tsi-currency-other-input.component";
14
+ import * as i9 from "../input-components/tsi-currency-societe-input/tsi-currency-societe-input.component";
15
+ import * as i10 from "../input-components/tsi-date-picker/tsi-date-picker.component";
16
+ import * as i11 from "../input-components/tsi-decimal-input/tsi-decimal-input.component";
17
+ import * as i12 from "../input-components/tsi-integer/tsi-integer.component";
18
+ import * as i13 from "../input-components/tsi-rate-input/tsi-rate-input.component";
19
+ import * as i14 from "../input-components/tsi-text-box/tsi-text-box.component";
20
+ import * as i15 from "../output-components/tsi-label/tsi-label.component";
21
+ import * as i16 from "../output-components/tsi-paragraph/tsi-paragraph.component";
22
+ import * as i17 from "../tsi-modal-footer/tsi-modal-footer.component";
23
+ import * as i18 from "../tsi-modal-header/tsi-modal-header.component";
24
+ import * as i19 from "../../tsi-directives/busy.directive";
25
+ import * as i20 from "../../pipes/localize.pipe";
26
+ import * as i21 from "../../pipes/modal-label.pipe";
27
+ export class TsiGenericFormComponent extends TsiFormComponentBaseComponent {
28
+ openNext() {
29
+ this.index = (this.index === 2) ? 0 : this.index + 1;
30
+ }
31
+ openPrev() {
32
+ this.index = (this.index === 0) ? 2 : this.index - 1;
33
+ }
34
+ //#endregion
35
+ constructor(_message, _notify, _confirm, ref, config) {
36
+ super(ref, config);
37
+ this._message = _message;
38
+ this._notify = _notify;
39
+ this._confirm = _confirm;
40
+ this.ref = ref;
41
+ this.config = config;
42
+ this.index = 0;
43
+ //item: any;
44
+ this.tsiComponents = TsiComponentEnum;
45
+ this.blocs = [];
46
+ }
47
+ ngOnInit() {
48
+ super.ngOnInit();
49
+ if ((this.mode == Modes.edit || this.mode == Modes.delete)
50
+ && this.id != null
51
+ && this.id != undefined
52
+ && this.crudService != null
53
+ && this.crudService != undefined) {
54
+ this.isloading = true;
55
+ this.crudService.getById(this.id)
56
+ .subscribe({
57
+ next: (data) => {
58
+ this.item = data;
59
+ this._notify.success(this.l(LocalizationKeys.retrievedSuccessfully));
60
+ },
61
+ error: (error) => {
62
+ this._notify.error(error.message);
63
+ },
64
+ complete: () => { this.isloading = false; }
65
+ });
66
+ }
67
+ }
68
+ save() {
69
+ super.save();
70
+ switch (this.mode) {
71
+ case Modes.create:
72
+ this._saveCreateMode();
73
+ break;
74
+ case Modes.edit:
75
+ this._saveEditMode();
76
+ break;
77
+ case Modes.delete:
78
+ this._saveDeleteMode();
79
+ break;
80
+ default: throw new Error('no mode have bben set to TsiGenericFormComponent');
81
+ }
82
+ }
83
+ //#region private methods
84
+ _saveCreateMode() {
85
+ if (this.crudService != null
86
+ && this.crudService != undefined) {
87
+ this.isloading = true;
88
+ this.crudService.create(this.item)
89
+ .subscribe({
90
+ next: (data) => {
91
+ this._notify.success(this.l(LocalizationKeys.createdSuccessfully));
92
+ },
93
+ error: (error) => {
94
+ this._notify.error(error.message);
95
+ },
96
+ complete: () => { this.isloading = false; }
97
+ });
98
+ }
99
+ }
100
+ _saveEditMode() {
101
+ if (this.id != null
102
+ && this.id != undefined
103
+ && this.crudService != null
104
+ && this.crudService != undefined) {
105
+ this.isloading = true;
106
+ this.crudService.update(this.item, this.id)
107
+ .subscribe({
108
+ next: (data) => {
109
+ this._notify.success(this.l(LocalizationKeys.updatedSuccessfully));
110
+ },
111
+ error: (error) => {
112
+ this._notify.error(error.message);
113
+ },
114
+ complete: () => { this.isloading = false; }
115
+ });
116
+ }
117
+ }
118
+ _saveDeleteMode() {
119
+ if (this.id != null
120
+ && this.id != undefined
121
+ && this.crudService != null
122
+ && this.crudService != undefined) {
123
+ this.isloading = true;
124
+ this.crudService.delete(this.id)
125
+ .subscribe({
126
+ next: (data) => {
127
+ this._notify.success(this.l(LocalizationKeys.deletedSuccessfully));
128
+ },
129
+ error: (error) => {
130
+ this._notify.error(error.message);
131
+ },
132
+ complete: () => { this.isloading = false; }
133
+ });
134
+ }
135
+ }
136
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericFormComponent, deps: [{ token: i1.TsiMessageService }, { token: i1.TsiNotificationService }, { token: i1.TsiConfirmationService }, { token: i2.DynamicDialogRef }, { token: i2.DynamicDialogConfig }], target: i0.ɵɵFactoryTarget.Component }); }
137
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiGenericFormComponent, selector: "tsi-generic-form", inputs: { crudService: "crudService", configuration: "configuration", blocs: "blocs" }, usesInheritance: true, ngImport: i0, template: "<form class=\"form-horizontal\" autocomplete=\"off\" #editfactureAchatModal=\"ngForm\" (ngSubmit)=\"save()\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'gesc_achats_factureachat'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode()\" [busy]=\"isloading\">\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of blocs\">\r\n\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph; else tabBlock\">\r\n <Tsi-Paragraph [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tabBlock>\r\n <ng-container>\r\n <p-tabView [(activeIndex)]=\"index\">\r\n <p-tabPanel *ngFor=\"let tab of bloc.tabPanels;\"\r\n [header]=\"tab.tabHeader ? tab.tabHeader : '' | localize\">\r\n <!-- Here start -->\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of tab.blocs\">\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph\">\r\n <Tsi-Paragraph\r\n [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- Here Finish -->\r\n </p-tabPanel>\r\n </p-tabView>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</form>", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.TabView, selector: "p-tabView", inputs: ["style", "styleClass", "controlClose", "scrollable", "activeIndex", "selectOnFocus", "nextButtonAriaLabel", "prevButtonAriaLabel", "autoHideButtons", "tabindex"], outputs: ["onChange", "onClose", "activeIndexChange"] }, { kind: "component", type: i5.TabPanel, selector: "p-tabPanel", inputs: ["closable", "headerStyle", "headerStyleClass", "cache", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "selected", "disabled", "header", "leftIcon", "rightIcon"] }, { kind: "component", type: i6.TsiSearchComboComponent, selector: "Tsi-Search-Combo", inputs: ["elementSourceUrl", "listSourceUrl", "id-field", "label-field", "multiple", "sort", "showClear", "reloadDataSource", "isFiltered", "selectedLabel", "maxWidth", "businessClass", "currentRowItem", "datasource", "bind", "showSearchButton", "showAddButton", "showConsultButton", "showUpdateButton"], outputs: ["bindChange", "datasource-loaded", "init", "isLoaded", "selectedLabelChange", "onClick", "onSearchButtonClick"] }, { kind: "component", type: i7.TsiCheckboxComponent, selector: "Tsi-CheckBox", inputs: ["class", "isBinary", "checked", "tooltipText", "tooltipPosition"], outputs: ["inputFieldChange", "checkedChange"] }, { kind: "component", type: i8.TsiCurrencyOtherInputComponent, selector: "Tsi-Currency-Other-Input", inputs: ["numOfDecimal", "currency", "class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i9.TsiCurrencySocieteInputComponent, selector: "Tsi-Currency-Societe-Input", inputs: ["class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i10.TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: ["required", "showTime", "showButtonBar"], outputs: ["inputFieldChange"] }, { kind: "component", type: i11.TsiDecimalInputComponent, selector: "Tsi-Decimal-Input", inputs: ["numOfDecimal", "class"], outputs: ["inputFieldChange"] }, { kind: "component", type: i12.TsiIntegerComponent, selector: "Tsi-Integer", inputs: ["class", "minValue", "maxValue", "delayChangeTime"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i13.TsiRateInputComponent, selector: "Tsi-Rate-Input", inputs: ["required", "isFraction", "numOfDecimal"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i14.TsiTextBoxComponent, selector: "Tsi-Text-Box", inputs: ["textBoxType", "autocomplete"], outputs: ["newItemEvent", "inputFieldChange"] }, { kind: "component", type: i15.TsiLabelComponent, selector: "Tsi-Label", inputs: ["labelValue", "styleClass", "infoText"] }, { kind: "component", type: i16.TsiParagraphComponent, selector: "Tsi-Paragraph", inputs: ["paragraphName"] }, { kind: "component", type: i17.TsiModalFooterComponent, selector: "Tsi-Modal-Footer", inputs: ["cancelDisabled", "saveDisabled", "cancelLabel", "saveLabel", "isConsult", "isDuplicate", "isOnlyCreate"], outputs: ["onCancelClick", "onSaveClick"] }, { kind: "component", type: i18.TsiModalHeaderComponent, selector: "Tsi-Modal-Header", inputs: ["inputTitle"], outputs: ["onCloseClick"] }, { kind: "directive", type: i19.BusyDirective, selector: "[busy]", inputs: ["busy"] }, { kind: "pipe", type: i20.LocalizePipe, name: "localize" }, { kind: "pipe", type: i21.ModalLabelPipe, name: "modalLabel" }] }); }
138
+ }
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiGenericFormComponent, decorators: [{
140
+ type: Component,
141
+ args: [{ selector: 'tsi-generic-form', template: "<form class=\"form-horizontal\" autocomplete=\"off\" #editfactureAchatModal=\"ngForm\" (ngSubmit)=\"save()\">\r\n <Tsi-Modal-Header [inputTitle]=\"header | modalLabel :mode:'gesc_achats_factureachat'\" (onCloseClick)=\"hide()\">\r\n </Tsi-Modal-Header>\r\n <fieldset [disabled]=\"isDeleteMode()\" [busy]=\"isloading\">\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of blocs\">\r\n\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\" [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\" [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph; else tabBlock\">\r\n <Tsi-Paragraph [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <ng-template #tabBlock>\r\n <ng-container>\r\n <p-tabView [(activeIndex)]=\"index\">\r\n <p-tabPanel *ngFor=\"let tab of bloc.tabPanels;\"\r\n [header]=\"tab.tabHeader ? tab.tabHeader : '' | localize\">\r\n <!-- Here start -->\r\n <div class=\"grid\">\r\n <div *ngFor=\"let bloc of tab.blocs\">\r\n <!-- Tsi-Label -->\r\n <div *ngIf=\"bloc.type == tsiComponents.Label; else searchComboBlock\">\r\n <Tsi-Label [labelValue]=\"bloc.typeConfig['labelValue'] ? bloc.typeConfig['labelValue'] : '' | localize\">\r\n </Tsi-Label>\r\n </div>\r\n <!-- Tsi-Search-Combo -->\r\n <ng-template #searchComboBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.SearchCombo; else currencySocieteInputBlock\">\r\n <Tsi-Search-Combo [elementSourceUrl]=\"bloc.typeConfig['elementSourceUrl']\"\r\n [listSourceUrl]=\"bloc.typeConfig['listSourceUrl']\" [(bind)]=\"item[bloc.typeConfig['bind']]\"\r\n [id-field]=\"bloc.typeConfig['id-field']\" [label-field]=\"bloc.typeConfig['label-field']\"\r\n [isFiltered]=\"bloc.typeConfig['isFiltered']\"></Tsi-Search-Combo>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Societe-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencySocieteInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencySocieteInput; else currencyOtherInputBlock\">\r\n <Tsi-Currency-Societe-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Societe-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Currency-Other-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #currencyOtherInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.CurrencyOtherInput; else datePickerInputBlock\">\r\n <Tsi-Currency-Other-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Currency-Other-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Date-Picker -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #datePickerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DatePicker; else checkBoxInputBlock\">\r\n <Tsi-Date-Picker [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Date-Picker>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-CheckBox -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #checkBoxInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Checkbox; else decimalInputBlock\">\r\n <Tsi-CheckBox [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-CheckBox>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Decimal-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #decimalInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.DecimalInput; else integerInputBlock\">\r\n <Tsi-Decimal-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Decimal-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Integer -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #integerInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.Integer; else rateInputBlock\">\r\n <Tsi-Integer [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Integer>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Rate-Input -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #rateInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.RateInput; else textInputBlock\">\r\n <Tsi-Rate-Input [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Rate-Input>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Text-Box -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #textInputBlock>\r\n <ng-container\r\n *ngIf=\"bloc.type == tsiComponents.TextBox; else paragrapheBlock\">\r\n <Tsi-Text-Box [inputName]=\"bloc.typeConfig['inputName']\"\r\n [inputId]=\"bloc.typeConfig['inputId']\"\r\n [(inputField)]=\"item[bloc.typeConfig['inputField']]\">\r\n </Tsi-Text-Box>\r\n </ng-container>\r\n </ng-template>\r\n\r\n <!-- Tsi-Paragraph -->\r\n <ng-template class=\"{{bloc.styleClass}}\" #paragrapheBlock>\r\n <ng-container *ngIf=\"bloc.type == tsiComponents.Paragraph\">\r\n <Tsi-Paragraph\r\n [paragraphName]=\"bloc.typeConfig['paragraphName']| localize\">\r\n </Tsi-Paragraph>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <!-- Here Finish -->\r\n </p-tabPanel>\r\n </p-tabView>\r\n </ng-container>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </fieldset>\r\n\r\n <Tsi-Modal-Footer [cancelDisabled]=\"saving\" (onCancelClick)=\"hide()\">\r\n </Tsi-Modal-Footer>\r\n</form>" }]
142
+ }], ctorParameters: () => [{ type: i1.TsiMessageService }, { type: i1.TsiNotificationService }, { type: i1.TsiConfirmationService }, { type: i2.DynamicDialogRef }, { type: i2.DynamicDialogConfig }], propDecorators: { crudService: [{
143
+ type: Input
144
+ }], configuration: [{
145
+ type: Input
146
+ }], blocs: [{
147
+ type: Input
148
+ }] } });
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWdlbmVyaWMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWdlbmVyaWMtZm9ybS90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2ktZ2VuZXJpYy1mb3JtL3RzaS1nZW5lcmljLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUd0RCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxpRUFBaUUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPakUsTUFBTSxPQUFPLHVCQUF3QixTQUFRLDZCQUE2QjtJQUd0RSxRQUFRO1FBQ0osSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBT0gsWUFBWTtJQUNaLFlBQW9CLFFBQTJCLEVBQ3JDLE9BQStCLEVBQy9CLFFBQWdDLEVBQ3hCLEdBQXFCLEVBQ3JCLE1BQTJCO1FBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUpoRCxhQUFRLEdBQVIsUUFBUSxDQUFtQjtRQUNyQyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQixhQUFRLEdBQVIsUUFBUSxDQUF3QjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFrQjtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFxQjtRQXBCN0MsVUFBSyxHQUFXLENBQUMsQ0FBQztRQVNsQixZQUFZO1FBQ1osa0JBQWEsR0FBRyxnQkFBZ0IsQ0FBQztRQUl4QixVQUFLLEdBQXFCLEVBQUUsQ0FBQztJQU0rQixDQUFDO0lBRTdELFFBQVE7UUFDZixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUM7ZUFDckQsSUFBSSxDQUFDLEVBQUUsSUFBSSxJQUFJO2VBQ2YsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTO2VBQ3BCLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSTtlQUN4QixJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQzlCLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM1QyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVRLElBQUk7UUFDWCxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDWixRQUFRLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLEtBQUssQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFBQyxNQUFNO1lBQ2pELEtBQUssS0FBSyxDQUFDLElBQUk7Z0JBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUFDLE1BQU07WUFDN0MsS0FBSyxLQUFLLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQUMsTUFBTTtZQUNqRCxPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztJQUNILENBQUM7SUFFRCx5QkFBeUI7SUFDakIsZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSTtlQUN2QixJQUFJLENBQUMsV0FBVyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQy9CLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUF3QixFQUFFLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzVDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSTtlQUNkLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztlQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7ZUFDeEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7aUJBQ3hDLFNBQVMsQ0FBQztnQkFDVCxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDYixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFDRCxLQUFLLEVBQUUsQ0FBQyxLQUF3QixFQUFFLEVBQUU7b0JBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztnQkFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzVDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSTtlQUNkLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztlQUNwQixJQUFJLENBQUMsV0FBVyxJQUFJLElBQUk7ZUFDeEIsSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2lCQUM3QixTQUFTLENBQUM7Z0JBQ1QsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsS0FBd0IsRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBQ0QsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzthQUM1QyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQzsrR0E3R1UsdUJBQXVCO21HQUF2Qix1QkFBdUIsdUtDZHBDLGdnZ0JBME9POzs0RkQ1Tk0sdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLGtCQUFrQjtpT0FpQm5CLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgVHNpQ29tcG9uZW50RW51bSwgTW9kZXMgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUNvbmZpZ3VyYXRpb24sIElGb3JtQmxvYyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBDcnVkQmFzZVNlcnZpY2UsIFRzaU1lc3NhZ2VTZXJ2aWNlLCBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLCBUc2lDb25maXJtYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBUc2lGb3JtQ29tcG9uZW50QmFzZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RzaS1iYXNlL2NvbXBvbmVudHMvdHNpLWZvcm0tYmFzZS90c2ktZm9ybS1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RzaS1nZW5lcmljLWZvcm0nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90c2ktZ2VuZXJpYy1mb3JtLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUdlbmVyaWNGb3JtQ29tcG9uZW50IGV4dGVuZHMgVHNpRm9ybUNvbXBvbmVudEJhc2VDb21wb25lbnQge1xyXG4gIGluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAgIG9wZW5OZXh0KCkge1xyXG4gICAgICAgIHRoaXMuaW5kZXggPSAodGhpcy5pbmRleCA9PT0gMikgPyAwIDogdGhpcy5pbmRleCArIDE7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlblByZXYoKSB7XHJcbiAgICAgICAgdGhpcy5pbmRleCA9ICh0aGlzLmluZGV4ID09PSAwKSA/IDIgOiB0aGlzLmluZGV4IC0gMTtcclxuICAgIH1cclxuICAvL2l0ZW06IGFueTtcclxuICB0c2lDb21wb25lbnRzID0gVHNpQ29tcG9uZW50RW51bTtcclxuICAvLyNyZWdpb24gXHJcbiAgQElucHV0KCkgY3J1ZFNlcnZpY2U/OiBDcnVkQmFzZVNlcnZpY2U8YW55LCBhbnksIGFueSwgYW55PjtcclxuICBASW5wdXQoKSBjb25maWd1cmF0aW9uPzogSUdlbmVyaWNGb3JtQ29uZmlndXJhdGlvbjtcclxuICBASW5wdXQoKSBibG9jczogQXJyYXk8SUZvcm1CbG9jPiA9IFtdO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21lc3NhZ2U6IFRzaU1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbm90aWZ5OiBUc2lOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlybTogVHNpQ29uZmlybWF0aW9uU2VydmljZSxcclxuICAgIHB1YmxpYyBvdmVycmlkZSByZWY6IER5bmFtaWNEaWFsb2dSZWYsXHJcbiAgICBwdWJsaWMgb3ZlcnJpZGUgY29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnKSB7IHN1cGVyKHJlZiwgY29uZmlnKTsgfVxyXG5cclxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICBpZiAoKHRoaXMubW9kZSA9PSBNb2Rlcy5lZGl0IHx8IHRoaXMubW9kZSA9PSBNb2Rlcy5kZWxldGUpXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmlkICE9IHVuZGVmaW5lZFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IG51bGxcclxuICAgICAgJiYgdGhpcy5jcnVkU2VydmljZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5pc2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNydWRTZXJ2aWNlLmdldEJ5SWQodGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXRlbSA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5zdWNjZXNzKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnJldHJpZXZlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB0aGlzLmlzbG9hZGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzYXZlKCk6IHZvaWQge1xyXG4gICAgc3VwZXIuc2F2ZSgpXHJcbiAgICBzd2l0Y2ggKHRoaXMubW9kZSkge1xyXG4gICAgICBjYXNlIE1vZGVzLmNyZWF0ZTogdGhpcy5fc2F2ZUNyZWF0ZU1vZGUoKTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgTW9kZXMuZWRpdDogdGhpcy5fc2F2ZUVkaXRNb2RlKCk7IGJyZWFrO1xyXG4gICAgICBjYXNlIE1vZGVzLmRlbGV0ZTogdGhpcy5fc2F2ZURlbGV0ZU1vZGUoKTsgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcignbm8gbW9kZSBoYXZlIGJiZW4gc2V0IHRvIFRzaUdlbmVyaWNGb3JtQ29tcG9uZW50Jyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfc2F2ZUNyZWF0ZU1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jcnVkU2VydmljZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNsb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jcnVkU2VydmljZS5jcmVhdGUodGhpcy5pdGVtKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZ5LnN1Y2Nlc3ModGhpcy5sKExvY2FsaXphdGlvbktleXMuY3JlYXRlZFN1Y2Nlc3NmdWxseSkpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5lcnJvcihlcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB0aGlzLmlzbG9hZGluZyA9IGZhbHNlOyB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zYXZlRWRpdE1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UudXBkYXRlKHRoaXMuaXRlbSwgdGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmeS5zdWNjZXNzKHRoaXMubChMb2NhbGl6YXRpb25LZXlzLnVwZGF0ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkuZXJyb3IoZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgdGhpcy5pc2xvYWRpbmcgPSBmYWxzZTsgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2F2ZURlbGV0ZU1vZGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMuaWQgIT0gdW5kZWZpbmVkXHJcbiAgICAgICYmIHRoaXMuY3J1ZFNlcnZpY2UgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmNydWRTZXJ2aWNlICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzbG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMuY3J1ZFNlcnZpY2UuZGVsZXRlKHRoaXMuaWQpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZnkuc3VjY2Vzcyh0aGlzLmwoTG9jYWxpemF0aW9uS2V5cy5kZWxldGVkU3VjY2Vzc2Z1bGx5KSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZ5LmVycm9yKGVycm9yLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7IHRoaXMuaXNsb2FkaW5nID0gZmFsc2U7IH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGZvcm0gY2xhc3M9XCJmb3JtLWhvcml6b250YWxcIiBhdXRvY29tcGxldGU9XCJvZmZcIiAjZWRpdGZhY3R1cmVBY2hhdE1vZGFsPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cInNhdmUoKVwiPlxyXG4gICAgPFRzaS1Nb2RhbC1IZWFkZXIgW2lucHV0VGl0bGVdPVwiaGVhZGVyIHwgbW9kYWxMYWJlbCA6bW9kZTonZ2VzY19hY2hhdHNfZmFjdHVyZWFjaGF0J1wiIChvbkNsb3NlQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1IZWFkZXI+XHJcbiAgICA8ZmllbGRzZXQgW2Rpc2FibGVkXT1cImlzRGVsZXRlTW9kZSgpXCIgW2J1c3ldPVwiaXNsb2FkaW5nXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImdyaWRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYmxvYyBvZiBibG9jc1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLUxhYmVsIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkxhYmVsOyBlbHNlIHNlYXJjaENvbWJvQmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICA8VHNpLUxhYmVsIFtsYWJlbFZhbHVlXT1cImJsb2MudHlwZUNvbmZpZ1snbGFiZWxWYWx1ZSddID8gYmxvYy50eXBlQ29uZmlnWydsYWJlbFZhbHVlJ10gOiAnJyAgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvVHNpLUxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1TZWFyY2gtQ29tYm8gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NlYXJjaENvbWJvQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlNlYXJjaENvbWJvOyBlbHNlIGN1cnJlbmN5U29jaWV0ZUlucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1TZWFyY2gtQ29tYm8gW2VsZW1lbnRTb3VyY2VVcmxdPVwiYmxvYy50eXBlQ29uZmlnWydlbGVtZW50U291cmNlVXJsJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xpc3RTb3VyY2VVcmxdPVwiYmxvYy50eXBlQ29uZmlnWydsaXN0U291cmNlVXJsJ11cIiBbKGJpbmQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydiaW5kJ11dXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZC1maWVsZF09XCJibG9jLnR5cGVDb25maWdbJ2lkLWZpZWxkJ11cIiBbbGFiZWwtZmllbGRdPVwiYmxvYy50eXBlQ29uZmlnWydsYWJlbC1maWVsZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZpbHRlcmVkXT1cImJsb2MudHlwZUNvbmZpZ1snaXNGaWx0ZXJlZCddXCI+PC9Uc2ktU2VhcmNoLUNvbWJvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNjdXJyZW5jeVNvY2lldGVJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5DdXJyZW5jeVNvY2lldGVJbnB1dDsgZWxzZSBjdXJyZW5jeU90aGVySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCIgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY3VycmVuY3lPdGhlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5T3RoZXJJbnB1dDsgZWxzZSBkYXRlUGlja2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ3VycmVuY3ktT3RoZXItSW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURhdGUtUGlja2VyIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNkYXRlUGlja2VySW5wdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuRGF0ZVBpY2tlcjsgZWxzZSBjaGVja0JveElucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EYXRlLVBpY2tlciBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIiBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLURhdGUtUGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1DaGVja0JveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY2hlY2tCb3hJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5DaGVja2JveDsgZWxzZSBkZWNpbWFsSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUNoZWNrQm94IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2RlY2ltYWxJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5EZWNpbWFsSW5wdXQ7IGVsc2UgaW50ZWdlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGVjaW1hbC1JbnB1dD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktSW50ZWdlciAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjaW50ZWdlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkludGVnZXI7IGVsc2UgcmF0ZUlucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1JbnRlZ2VyIFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktSW50ZWdlcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUmF0ZS1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjcmF0ZUlucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlJhdGVJbnB1dDsgZWxzZSB0ZXh0SW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVJhdGUtSW5wdXQgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCIgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjdGV4dElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlRleHRCb3g7IGVsc2UgcGFyYWdyYXBoZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCIgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1UZXh0LUJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSBUc2ktUGFyYWdyYXBoIC0tPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNwYXJhZ3JhcGhlQmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlBhcmFncmFwaDsgZWxzZSB0YWJCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVBhcmFncmFwaCBbcGFyYWdyYXBoTmFtZV09XCJibG9jLnR5cGVDb25maWdbJ3BhcmFncmFwaE5hbWUnXXwgbG9jYWxpemVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktUGFyYWdyYXBoPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RhYkJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYlZpZXcgWyhhY3RpdmVJbmRleCldPVwiaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYlBhbmVsICpuZ0Zvcj1cImxldCB0YWIgb2YgYmxvYy50YWJQYW5lbHM7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyXT1cInRhYi50YWJIZWFkZXIgPyB0YWIudGFiSGVhZGVyIDogJycgfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSGVyZSBzdGFydCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBibG9jIG9mIHRhYi5ibG9jc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBUc2ktTGFiZWwgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuTGFiZWw7IGVsc2Ugc2VhcmNoQ29tYm9CbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxUc2ktTGFiZWwgW2xhYmVsVmFsdWVdPVwiYmxvYy50eXBlQ29uZmlnWydsYWJlbFZhbHVlJ10gPyBibG9jLnR5cGVDb25maWdbJ2xhYmVsVmFsdWUnXSA6ICcnICB8IGxvY2FsaXplXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Uc2ktTGFiZWw+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gVHNpLVNlYXJjaC1Db21ibyAtLT5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2VhcmNoQ29tYm9CbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuU2VhcmNoQ29tYm87IGVsc2UgY3VycmVuY3lTb2NpZXRlSW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8VHNpLVNlYXJjaC1Db21ibyBbZWxlbWVudFNvdXJjZVVybF09XCJibG9jLnR5cGVDb25maWdbJ2VsZW1lbnRTb3VyY2VVcmwnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGlzdFNvdXJjZVVybF09XCJibG9jLnR5cGVDb25maWdbJ2xpc3RTb3VyY2VVcmwnXVwiIFsoYmluZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2JpbmQnXV1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkLWZpZWxkXT1cImJsb2MudHlwZUNvbmZpZ1snaWQtZmllbGQnXVwiIFtsYWJlbC1maWVsZF09XCJibG9jLnR5cGVDb25maWdbJ2xhYmVsLWZpZWxkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lzRmlsdGVyZWRdPVwiYmxvYy50eXBlQ29uZmlnWydpc0ZpbHRlcmVkJ11cIj48L1RzaS1TZWFyY2gtQ29tYm8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUN1cnJlbmN5LVNvY2lldGUtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2N1cnJlbmN5U29jaWV0ZUlucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5U29jaWV0ZUlucHV0OyBlbHNlIGN1cnJlbmN5T3RoZXJJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ3VycmVuY3ktU29jaWV0ZS1JbnB1dCBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1DdXJyZW5jeS1Tb2NpZXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1DdXJyZW5jeS1PdGhlci1JbnB1dCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjY3VycmVuY3lPdGhlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkN1cnJlbmN5T3RoZXJJbnB1dDsgZWxzZSBkYXRlUGlja2VySW5wdXRCbG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VHNpLUN1cnJlbmN5LU90aGVyLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLUN1cnJlbmN5LU90aGVyLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1EYXRlLVBpY2tlciAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjZGF0ZVBpY2tlcklucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkRhdGVQaWNrZXI7IGVsc2UgY2hlY2tCb3hJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktRGF0ZS1QaWNrZXIgW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktRGF0ZS1QaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUNoZWNrQm94IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNjaGVja0JveElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLkNoZWNrYm94OyBlbHNlIGRlY2ltYWxJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktQ2hlY2tCb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLURlY2ltYWwtSW5wdXQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2RlY2ltYWxJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5EZWNpbWFsSW5wdXQ7IGVsc2UgaW50ZWdlcklucHV0QmxvY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1EZWNpbWFsLUlucHV0IFtpbnB1dE5hbWVdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dE5hbWUnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRJZF09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0SWQnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGlucHV0RmllbGQpXT1cIml0ZW1bYmxvYy50eXBlQ29uZmlnWydpbnB1dEZpZWxkJ11dXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVHNpLURlY2ltYWwtSW5wdXQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLUludGVnZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2xhc3M9XCJ7e2Jsb2Muc3R5bGVDbGFzc319XCIgI2ludGVnZXJJbnB1dEJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5JbnRlZ2VyOyBlbHNlIHJhdGVJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktSW50ZWdlciBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1JbnRlZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1SYXRlLUlucHV0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNsYXNzPVwie3tibG9jLnN0eWxlQ2xhc3N9fVwiICNyYXRlSW5wdXRCbG9jaz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYmxvYy50eXBlID09IHRzaUNvbXBvbmVudHMuUmF0ZUlucHV0OyBlbHNlIHRleHRJbnB1dEJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktUmF0ZS1JbnB1dCBbaW5wdXROYW1lXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXROYW1lJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SWRdPVwiYmxvYy50eXBlQ29uZmlnWydpbnB1dElkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhpbnB1dEZpZWxkKV09XCJpdGVtW2Jsb2MudHlwZUNvbmZpZ1snaW5wdXRGaWVsZCddXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1SYXRlLUlucHV0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRzaS1UZXh0LUJveCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjdGV4dElucHV0QmxvY2s+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImJsb2MudHlwZSA9PSB0c2lDb21wb25lbnRzLlRleHRCb3g7IGVsc2UgcGFyYWdyYXBoZUJsb2NrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUc2ktVGV4dC1Cb3ggW2lucHV0TmFtZV09XCJibG9jLnR5cGVDb25maWdbJ2lucHV0TmFtZSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dElkXT1cImJsb2MudHlwZUNvbmZpZ1snaW5wdXRJZCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoaW5wdXRGaWVsZCldPVwiaXRlbVtibG9jLnR5cGVDb25maWdbJ2lucHV0RmllbGQnXV1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9Uc2ktVGV4dC1Cb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHNpLVBhcmFncmFwaCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjbGFzcz1cInt7YmxvYy5zdHlsZUNsYXNzfX1cIiAjcGFyYWdyYXBoZUJsb2NrPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJibG9jLnR5cGUgPT0gdHNpQ29tcG9uZW50cy5QYXJhZ3JhcGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRzaS1QYXJhZ3JhcGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhZ3JhcGhOYW1lXT1cImJsb2MudHlwZUNvbmZpZ1sncGFyYWdyYXBoTmFtZSddfCBsb2NhbGl6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RzaS1QYXJhZ3JhcGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEhlcmUgRmluaXNoIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wLXRhYlBhbmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3AtdGFiVmlldz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9maWVsZHNldD5cclxuXHJcbiAgICA8VHNpLU1vZGFsLUZvb3RlciBbY2FuY2VsRGlzYWJsZWRdPVwic2F2aW5nXCIgKG9uQ2FuY2VsQ2xpY2spPVwiaGlkZSgpXCI+XHJcbiAgICA8L1RzaS1Nb2RhbC1Gb290ZXI+XHJcbjwvZm9ybT4iXX0=
@@ -0,0 +1,231 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { firstValueFrom } from 'rxjs';
3
+ import { LocalizationKeys } from '../../consts/localization-key';
4
+ import { defaultCardHeader } from '../../consts/tsi-consts';
5
+ import { AppBaseComponent } from '../../tsi-base/components/app-base/app-base.component';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "../../services/configuration/entity-configuration.service";
8
+ import * as i2 from "../../pipes/localize.pipe";
9
+ import * as i3 from "../../services/status/entityStatus.service";
10
+ import * as i4 from "../../services/notification/tsi-notification.service";
11
+ import * as i5 from "@angular/common";
12
+ import * as i6 from "primeng/paginator";
13
+ import * as i7 from "../spinner/spinner.component";
14
+ /**
15
+ * TsiKanbanComponent
16
+ * Description: Displays a Kanban board view for TSI entities.
17
+ */
18
+ export class TsiKanbanComponent extends AppBaseComponent {
19
+ set page(value) {
20
+ this._page = value;
21
+ this.handlePageChange(value);
22
+ }
23
+ get page() { return this._page; }
24
+ constructor(cdr, _entityConfig, _localize, _entityStatusService, _notificationService) {
25
+ super();
26
+ this.cdr = cdr;
27
+ this._entityConfig = _entityConfig;
28
+ this._localize = _localize;
29
+ this._entityStatusService = _entityStatusService;
30
+ this._notificationService = _notificationService;
31
+ this.buttonClicked = new EventEmitter();
32
+ this.callSearch = new EventEmitter();
33
+ this.cards = [];
34
+ this.cardMapByStatus = new Map();
35
+ this.draggedCard = null;
36
+ this.first = 0;
37
+ this.rows = 10;
38
+ this.totalCount = 0;
39
+ this.isLoading = false;
40
+ this.originalStatus = '';
41
+ this.localizedStatusLabels = [];
42
+ this.localizedStatusLabels = [
43
+ {
44
+ key: 'new',
45
+ localized: this._localize.transform('gesc_param_article_statut_enums_new').trim()
46
+ }
47
+ ];
48
+ }
49
+ async ngOnInit() {
50
+ await this.getBusinessClassStatus(this.cardBusinessClass);
51
+ this.page$.subscribe(async (page) => {
52
+ if (page) {
53
+ this.isLoading = !!page.loading;
54
+ await this.handlePageChange(page);
55
+ }
56
+ });
57
+ }
58
+ dragStart(_, card) {
59
+ this.draggedCard = card;
60
+ this.previousStatus = this.draggedCard.status;
61
+ }
62
+ dragEnd() { this.draggedCard = null; }
63
+ allowDrop(event) { event.preventDefault(); }
64
+ trackByStatus(index, status) { return status.key; }
65
+ trackByCard(index, card) { return card.uid; }
66
+ drop(event, newStatusKey) {
67
+ this.isLoading = true;
68
+ event.preventDefault();
69
+ if (!this.draggedCard)
70
+ return;
71
+ const card = this.draggedCard;
72
+ const previousStatus = this.previousStatus;
73
+ if (this.draggedCard.status !== newStatusKey) {
74
+ this.draggedCard.status = newStatusKey;
75
+ let uid = this.draggedCard.uid;
76
+ this.crudService?.getById(uid).subscribe({
77
+ next: (resp) => {
78
+ const realStatusKey = Object.keys(resp).find(key => key.toLowerCase() === this.originalStatus.toLowerCase());
79
+ if (!realStatusKey) {
80
+ this.draggedCard = null;
81
+ this.updateCardMap();
82
+ return;
83
+ }
84
+ const updatedItem = {
85
+ ...resp,
86
+ [realStatusKey]: newStatusKey
87
+ };
88
+ this.crudService?.update(updatedItem, uid).subscribe({
89
+ next: (resp) => {
90
+ this.isLoading = true;
91
+ this._notificationService.success(this._localize.transform(LocalizationKeys.savedSuccessfully));
92
+ this.draggedCard = null;
93
+ this.updateCardMap();
94
+ this.isLoading = false;
95
+ },
96
+ error: (error) => {
97
+ let from = this._localize.transform("gesc_param_error_switch_status_from");
98
+ let to = this._localize.transform("gesc_param_error_switch_status_to");
99
+ let message = `${from} '${this.getLocalizedStatus(this.previousStatus)}' ${to} '${this.getLocalizedStatus(card.status)}'`;
100
+ this._notificationService.error(message);
101
+ card.status = previousStatus;
102
+ this.draggedCard = null;
103
+ this.updateCardMap();
104
+ this.isLoading = false;
105
+ }
106
+ });
107
+ },
108
+ error: (error) => {
109
+ card.status = previousStatus;
110
+ this.draggedCard = null;
111
+ this.updateCardMap();
112
+ this.isLoading = false;
113
+ },
114
+ });
115
+ this.updateCardMap();
116
+ }
117
+ this.draggedCard = null;
118
+ }
119
+ onPageChange(event) {
120
+ this.first = event.first ?? 0;
121
+ this.rows = event.rows ?? 10;
122
+ this.callSearch.emit({ skipCount: this.first, maxResultCount: this.rows });
123
+ }
124
+ getStatusClass(card) {
125
+ const index = this.localizedStatusLabels.findIndex(l => l.key === card.status);
126
+ return `status-${index >= 0 ? index : 'default'}`;
127
+ }
128
+ getLocalizedStatus(key) {
129
+ if (!key)
130
+ return '';
131
+ const match = this.localizedStatusLabels.find(s => s.key === key);
132
+ return match?.localized ?? key;
133
+ }
134
+ async handlePageChange(page) {
135
+ if (!page?.items)
136
+ return;
137
+ this.cards = await this.mapItemsToCards(page.items);
138
+ this.totalCount = page.totalCount;
139
+ this.updateCardMap();
140
+ }
141
+ async getEntityInfo() {
142
+ this.entityInfo = await this._entityConfig.getEntityInfoFromCache(this.cardBusinessClass);
143
+ }
144
+ getColKeys() {
145
+ return {
146
+ photo: this.entityInfo?.cardHeaderPhotoColumn?.toLowerCase() ?? '',
147
+ col1: this.entityInfo?.cardTitleColumn?.toLowerCase() ?? '',
148
+ col2: this.entityInfo?.cardSubHeaderColumn?.toLowerCase() ?? '',
149
+ col3: this.entityInfo?.cardDescriptionColumn?.toLowerCase() ?? '',
150
+ status: this.entityInfo?.statusColumnName?.toLowerCase() ?? ''
151
+ };
152
+ }
153
+ async mapItemsToCards(items) {
154
+ await this.getEntityInfo();
155
+ const { col1, col2, col3, photo, status } = this.getColKeys();
156
+ const validKeys = this.localizedStatusLabels.map(s => s.key);
157
+ this.originalStatus = status;
158
+ return items.map((item, index) => {
159
+ const keys = Object.keys(item).reduce((acc, key) => {
160
+ acc[key.toLowerCase()] = key;
161
+ return acc;
162
+ }, {});
163
+ const rawStatus = item[keys[status]]?.trim();
164
+ const isValidStatus = rawStatus && validKeys.includes(rawStatus);
165
+ const finalStatus = isValidStatus ? rawStatus : 'new';
166
+ return {
167
+ id: index + 1 + this.first,
168
+ uid: `${item.uid}`,
169
+ headerTitle: `${item[keys[col1]] ?? ''}`,
170
+ subHeaderTitle: `${item[keys[col2]] ?? ''}`,
171
+ description: `${item[keys[col3]] ?? ''}`,
172
+ status: finalStatus,
173
+ photo: item[keys[photo]] || defaultCardHeader.image
174
+ };
175
+ });
176
+ }
177
+ updateCardMap() {
178
+ const map = new Map();
179
+ for (const label of this.localizedStatusLabels) {
180
+ map.set(label.key, []);
181
+ }
182
+ for (const card of this.cards) {
183
+ const group = map.get(card.status);
184
+ if (group) {
185
+ group.push(card);
186
+ }
187
+ else {
188
+ console.log(`Unmapped card status: ${card.status}`, card);
189
+ }
190
+ }
191
+ for (const [key, cards] of map.entries()) {
192
+ cards.sort((a, b) => (a.headerTitle ?? '').localeCompare(b.headerTitle ?? ''));
193
+ }
194
+ this.cardMapByStatus = map;
195
+ this.cdr.markForCheck();
196
+ }
197
+ async getBusinessClassStatus(className) {
198
+ const response = await firstValueFrom(this._entityStatusService.getEntityStatus(className));
199
+ const statuses = response?.entityStatus ?? [];
200
+ this.localizedStatusLabels = [
201
+ { key: 'new', localized: this._localize.transform('gesc_param_article_statut_enums_new').trim() },
202
+ ...statuses.map((s) => ({
203
+ key: s.key,
204
+ localized: this._localize.transform(s.value).trim()
205
+ }))
206
+ ];
207
+ }
208
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.EntityConfigurationService }, { token: i2.LocalizePipe }, { token: i3.EntityStatusService }, { token: i4.TsiNotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiKanbanComponent, selector: "Tsi-kanban", inputs: { cardBusinessClass: "cardBusinessClass", header: "header", id: "id", page$: "page$", crudService: "crudService", page: "page" }, outputs: { buttonClicked: "buttonClicked", callSearch: "callSearch" }, usesInheritance: true, ngImport: i0, template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let status of localizedStatusLabels; trackBy: trackByStatus\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, status.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ status.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ cardMapByStatus.get(status.key)?.length || 0 }})\r\n </span>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByStatus.get(status.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getStatusClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'gesc_document_statut' | localize }}:</span>\r\n <span>{{ getLocalizedStatus(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.status-0{border-left-color:#7269ef}.status-1{border-left-color:#00c853}.status-2{border-left-color:#ffab00}.status-3{border-left-color:#d50000}[class*=status-]{border-left-style:solid;border-left-width:4px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.Paginator, selector: "p-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "component", type: i7.SpinnerComponent, selector: "app-spinner" }, { kind: "pipe", type: i2.LocalizePipe, name: "localize" }] }); }
210
+ }
211
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiKanbanComponent, decorators: [{
212
+ type: Component,
213
+ args: [{ selector: 'Tsi-kanban', template: "<div class=\"card flex justify-content-center\">\r\n <p-paginator\r\n [first]=\"first\"\r\n [rows]=\"rows\"\r\n [totalRecords]=\"totalCount\"\r\n [rowsPerPageOptions]=\"[1, 10, 25, 50]\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [showCurrentPageReport]=\"true\"\r\n currentPageReportTemplate=\"{{ 'Showing' | localize }} {first} {{'to' | localize}} {last} {{ 'of' | localize }} {totalRecords}\">\r\n </p-paginator>\r\n</div>\r\n\r\n<div class=\"kanban-board flex gap-4 overflow-auto\">\r\n <div *ngFor=\"let status of localizedStatusLabels; trackBy: trackByStatus\"\r\n class=\"kanban-column flex flex-column border-round surface-0 shadow-2\"\r\n (dragover)=\"allowDrop($event)\"\r\n (drop)=\"drop($event, status.key)\">\r\n \r\n <div class=\"column-header p-3 border-bottom-1 surface-border font-semibold\">\r\n {{ status.localized }}\r\n <span class=\"text-sm font-normal text-gray-500\">\r\n ({{ cardMapByStatus.get(status.key)?.length || 0 }})\r\n </span>\r\n </div>\r\n\r\n <div class=\"column-cards flex-1 overflow-auto p-3\">\r\n <div *ngFor=\"let card of cardMapByStatus.get(status.key); trackBy: trackByCard\"\r\n class=\"kanban-card p-3 border-round bg-white mb-3 shadow-1\"\r\n [ngClass]=\"getStatusClass(card)\"\r\n draggable=\"true\"\r\n (dragstart)=\"dragStart($event, card)\"\r\n (dragend)=\"dragEnd()\">\r\n \r\n <div class=\"font-bold mb-2\">{{ card.headerTitle }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">{{ card.description }}</div>\r\n <div class=\"text-sm text-gray-600 mb-3\">\r\n <span class=\"font-semibold\">{{ 'gesc_document_statut' | localize }}:</span>\r\n <span>{{ getLocalizedStatus(card.status) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<div class=\"overlay\" *ngIf=\"isLoading\">\r\n <div class=\"spinner-wrapper\">\r\n <app-spinner></app-spinner>\r\n </div>\r\n</div>\r\n", styles: [":host{display:block;padding:1rem}[draggable=true]{-webkit-user-select:none;user-select:none}.kanban-board{height:calc(100vh - 100px);padding:1rem}.kanban-column{width:300px;max-height:100%;display:flex;flex-direction:column;background-color:#f8f9fa}.column-header{font-size:1rem;font-weight:700;background-color:#fff;border-radius:6px 6px 0 0}.column-cards{overflow-y:auto;flex:1}.kanban-card{border-left:4px solid;cursor:move;transition:border-color .3s ease}.status-0{border-left-color:#7269ef}.status-1{border-left-color:#00c853}.status-2{border-left-color:#ffab00}.status-3{border-left-color:#d50000}[class*=status-]{border-left-style:solid;border-left-width:4px}\n"] }]
214
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.EntityConfigurationService }, { type: i2.LocalizePipe }, { type: i3.EntityStatusService }, { type: i4.TsiNotificationService }], propDecorators: { buttonClicked: [{
215
+ type: Output
216
+ }], callSearch: [{
217
+ type: Output
218
+ }], cardBusinessClass: [{
219
+ type: Input
220
+ }], header: [{
221
+ type: Input
222
+ }], id: [{
223
+ type: Input
224
+ }], page$: [{
225
+ type: Input
226
+ }], crudService: [{
227
+ type: Input
228
+ }], page: [{
229
+ type: Input
230
+ }] } });
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWthbmJhbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90c2ktc2hhcmVkLXVpL3NyYy9saWIvdHNpLWNvbXBvbmVudHMvdHNpLWthbmJhbi90c2kta2FuYmFuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy90c2kta2FuYmFuL3RzaS1rYW5iYW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEcsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFHakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdURBQXVELENBQUM7Ozs7Ozs7OztBQU96Rjs7O0dBR0c7QUFNSCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZ0JBQWdCO0lBWXBELElBQWEsSUFBSSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLElBQUksS0FBSyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBa0JqQyxZQUNZLEdBQXNCLEVBQ3RCLGFBQXlDLEVBQ3pDLFNBQXVCLEVBQ3ZCLG9CQUF5QyxFQUN6QyxvQkFBNEM7UUFFcEQsS0FBSyxFQUFFLENBQUM7UUFOQSxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixrQkFB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QUFDLEdBQUc7Z0JBQ1YsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUU7YUFDdEQsQ0FBQyxDQUFDO1NBQ04sQ0FBQztJQUNOLENBQUM7K0dBcFBRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDBSQ3ZCL0Isd2dFQWlEQTs7NEZEMUJhLGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZO2lPQU1aLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEVBQUU7c0JBQVYsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFHTyxJQUFJO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFnaW5hdG9yU3RhdGUgfSBmcm9tICdwcmltZW5nL3BhZ2luYXRvcic7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgQnV0dG9uQ2xpY2tSZXN1bHQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgVHNpQ2FyZCB9IGZyb20gJy4uLy4uL21vZGVscyc7XHJcbmltcG9ydCB7IGRlZmF1bHRDYXJkSGVhZGVyIH0gZnJvbSAnLi4vLi4vY29uc3RzL3RzaS1jb25zdHMnO1xyXG5pbXBvcnQgeyBBcHBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vdHNpLWJhc2UvY29tcG9uZW50cy9hcHAtYmFzZS9hcHAtYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb2NhbGl6ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGl6ZS5waXBlJztcclxuaW1wb3J0IHsgQ3J1ZEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS9jcnVkLWJhc2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlndXJhdGlvbi9lbnRpdHktY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlTdGF0dXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc3RhdHVzL2VudGl0eVN0YXR1cy5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBUc2lLYW5iYW5Db21wb25lbnRcclxuICogRGVzY3JpcHRpb246IERpc3BsYXlzIGEgS2FuYmFuIGJvYXJkIHZpZXcgZm9yIFRTSSBlbnRpdGllcy5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdUc2kta2FuYmFuJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90c2kta2FuYmFuLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi90c2kta2FuYmFuLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaUthbmJhbkNvbXBvbmVudCBleHRlbmRzIEFwcEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICAgIEBPdXRwdXQoKSBidXR0b25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdXR0b25DbGlja1Jlc3VsdD4oKTtcclxuICAgIEBPdXRwdXQoKSBjYWxsU2VhcmNoID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgQElucHV0KCkgY2FyZEJ1c2luZXNzQ2xhc3M6IGFueTtcclxuICAgIEBJbnB1dCgpIGhlYWRlcjogYW55O1xyXG4gICAgQElucHV0KCkgaWQ6IGFueTtcclxuICAgIEBJbnB1dCgpIHBhZ2UkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgICBASW5wdXQoKSBjcnVkU2VydmljZT86IENydWRCYXNlU2VydmljZTxhbnksIGFueSwgYW55LCBhbnk+O1xyXG5cclxuICAgIHByaXZhdGUgX3BhZ2U6IGFueTtcclxuICAgIEBJbnB1dCgpIHNldCBwYWdlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9wYWdlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVQYWdlQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICAgIGdldCBwYWdlKCkgeyByZXR1cm4gdGhpcy5fcGFnZTsgfVxyXG5cclxuICAgIGNhcmRzOiBUc2lDYXJkW10gPSBbXTtcclxuICAgIGNhcmRNYXBCeVN0YXR1czogTWFwPHN0cmluZywgVHNpQ2FyZFtdPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBkcmFnZ2VkQ2FyZDogVHNpQ2FyZCB8IG51bGwgPSBudWxsO1xyXG4gICAgZmlyc3QgPSAwO1xyXG4gICAgcm93cyA9IDEwO1xyXG4gICAgdG90YWxDb3VudCA9IDA7XHJcbiAgICBpc0xvYWRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBvcmlnaW5hbFN0YXR1czogc3RyaW5nID0gJyc7XHJcbiAgICBwcmV2aW91c1N0YXR1czogYW55O1xyXG5cclxuICAgIGxvY2FsaXplZFN0YXR1c0xhYmVsczogeyBrZXk6IHN0cmluZzsgbG9jYWxpemVkOiBzdHJpbmcgfVtdID1cclxuICAgICAgICBbXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBfZW50aXR5Q29uZmlnOiBFbnRpdHlDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9sb2NhbGl6ZTogTG9jYWxpemVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX2VudGl0eVN0YXR1c1NlcnZpY2U6IEVudGl0eVN0YXR1c1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZWRTdGF0dXNMYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGtleTogJ25ldycsXHJcbiAgICAgICAgICAgICAgICBsb2NhbGl6ZWQ6IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybSgnZ2VzY19wYXJhbV9hcnRpY2xlX3N0YXR1dF9lbnVtc19uZXcnKS50cmltKClcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBvdmVycmlkZSBhc3luYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEJ1c2luZXNzQ2xhc3NTdGF0dXModGhpcy5jYXJkQnVzaW5lc3NDbGFzcyk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZSQuc3Vic2NyaWJlKGFzeW5jIHBhZ2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocGFnZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIXBhZ2UubG9hZGluZztcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlUGFnZUNoYW5nZShwYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRyYWdTdGFydChfOiBEcmFnRXZlbnQsIGNhcmQ6IFRzaUNhcmQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gY2FyZDtcclxuICAgICAgICB0aGlzLnByZXZpb3VzU3RhdHVzID0gdGhpcy5kcmFnZ2VkQ2FyZC5zdGF0dXM7XHJcbiAgICB9XHJcblxyXG4gICAgZHJhZ0VuZCgpOiB2b2lkIHsgdGhpcy5kcmFnZ2VkQ2FyZCA9IG51bGw7IH1cclxuXHJcbiAgICBhbGxvd0Ryb3AoZXZlbnQ6IERyYWdFdmVudCk6IHZvaWQgeyBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyB9XHJcblxyXG4gICAgdHJhY2tCeVN0YXR1cyhpbmRleDogbnVtYmVyLCBzdGF0dXM6IHsga2V5OiBzdHJpbmc7IGxvY2FsaXplZDogc3RyaW5nIH0pIHsgcmV0dXJuIHN0YXR1cy5rZXk7IH1cclxuXHJcbiAgICB0cmFja0J5Q2FyZChpbmRleDogbnVtYmVyLCBjYXJkOiBUc2lDYXJkKSB7IHJldHVybiBjYXJkLnVpZDsgfVxyXG5cclxuICAgIGRyb3AoZXZlbnQ6IERyYWdFdmVudCwgbmV3U3RhdHVzS2V5OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuZHJhZ2dlZENhcmQpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgY2FyZCA9IHRoaXMuZHJhZ2dlZENhcmQ7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0dXMgPSB0aGlzLnByZXZpb3VzU3RhdHVzO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5kcmFnZ2VkQ2FyZC5zdGF0dXMgIT09IG5ld1N0YXR1c0tleSkge1xyXG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRDYXJkLnN0YXR1cyA9IG5ld1N0YXR1c0tleTtcclxuXHJcbiAgICAgICAgICAgIGxldCB1aWQgPSB0aGlzLmRyYWdnZWRDYXJkLnVpZCE7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNydWRTZXJ2aWNlPy5nZXRCeUlkKHVpZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhbFN0YXR1c0tleSA9IE9iamVjdC5rZXlzKHJlc3ApLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gdGhpcy5vcmlnaW5hbFN0YXR1cy50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWFsU3RhdHVzS2V5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZENhcmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNhcmRNYXAoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJlc3AsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFsU3RhdHVzS2V5XTogbmV3U3RhdHVzS2V5XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcnVkU2VydmljZT8udXBkYXRlKHVwZGF0ZWRJdGVtLCB1aWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKExvY2FsaXphdGlvbktleXMuc2F2ZWRTdWNjZXNzZnVsbHkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZENhcmQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnJvbSA9IHRoaXMuX2xvY2FsaXplLnRyYW5zZm9ybShcImdlc2NfcGFyYW1fZXJyb3Jfc3dpdGNoX3N0YXR1c19mcm9tXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvID0gdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKFwiZ2VzY19wYXJhbV9lcnJvcl9zd2l0Y2hfc3RhdHVzX3RvXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtZXNzYWdlID0gYCR7ZnJvbX0gJyR7dGhpcy5nZXRMb2NhbGl6ZWRTdGF0dXModGhpcy5wcmV2aW91c1N0YXR1cyl9JyAke3RvfSAnJHt0aGlzLmdldExvY2FsaXplZFN0YXR1cyhjYXJkLnN0YXR1cyl9J2A7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcmQuc3RhdHVzID0gcHJldmlvdXNTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2FyZE1hcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhcmQuc3RhdHVzID0gcHJldmlvdXNTdGF0dXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcmFnZ2VkQ2FyZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRyYWdnZWRDYXJkID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBvblBhZ2VDaGFuZ2UoZXZlbnQ6IFBhZ2luYXRvclN0YXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0ID8/IDA7XHJcbiAgICAgICAgdGhpcy5yb3dzID0gZXZlbnQucm93cyA/PyAxMDtcclxuICAgICAgICB0aGlzLmNhbGxTZWFyY2guZW1pdCh7IHNraXBDb3VudDogdGhpcy5maXJzdCwgbWF4UmVzdWx0Q291bnQ6IHRoaXMucm93cyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTdGF0dXNDbGFzcyhjYXJkOiBUc2lDYXJkKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubG9jYWxpemVkU3RhdHVzTGFiZWxzLmZpbmRJbmRleChsID0+IGwua2V5ID09PSBjYXJkLnN0YXR1cyk7XHJcbiAgICAgICAgcmV0dXJuIGBzdGF0dXMtJHtpbmRleCA+PSAwID8gaW5kZXggOiAnZGVmYXVsdCd9YDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2NhbGl6ZWRTdGF0dXMoa2V5OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICgha2V5KSByZXR1cm4gJyc7XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSB0aGlzLmxvY2FsaXplZFN0YXR1c0xhYmVscy5maW5kKHMgPT4gcy5rZXkgPT09IGtleSk7XHJcbiAgICAgICAgcmV0dXJuIG1hdGNoPy5sb2NhbGl6ZWQgPz8ga2V5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlUGFnZUNoYW5nZShwYWdlOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXBhZ2U/Lml0ZW1zKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FyZHMgPSBhd2FpdCB0aGlzLm1hcEl0ZW1zVG9DYXJkcyhwYWdlLml0ZW1zKTtcclxuICAgICAgICB0aGlzLnRvdGFsQ291bnQgPSBwYWdlLnRvdGFsQ291bnQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDYXJkTWFwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlJbmZvKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuZW50aXR5SW5mbyA9IGF3YWl0IHRoaXMuX2VudGl0eUNvbmZpZy5nZXRFbnRpdHlJbmZvRnJvbUNhY2hlKHRoaXMuY2FyZEJ1c2luZXNzQ2xhc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29sS2V5cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBwaG90bzogdGhpcy5lbnRpdHlJbmZvPy5jYXJkSGVhZGVyUGhvdG9Db2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDE6IHRoaXMuZW50aXR5SW5mbz8uY2FyZFRpdGxlQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBjb2wyOiB0aGlzLmVudGl0eUluZm8/LmNhcmRTdWJIZWFkZXJDb2x1bW4/LnRvTG93ZXJDYXNlKCkgPz8gJycsXHJcbiAgICAgICAgICAgIGNvbDM6IHRoaXMuZW50aXR5SW5mbz8uY2FyZERlc2NyaXB0aW9uQ29sdW1uPy50b0xvd2VyQ2FzZSgpID8/ICcnLFxyXG4gICAgICAgICAgICBzdGF0dXM6IHRoaXMuZW50aXR5SW5mbz8uc3RhdHVzQ29sdW1uTmFtZT8udG9Mb3dlckNhc2UoKSA/PyAnJ1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBtYXBJdGVtc1RvQ2FyZHMoaXRlbXM6IGFueVtdKTogUHJvbWlzZTxUc2lDYXJkW10+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmdldEVudGl0eUluZm8oKTtcclxuXHJcbiAgICAgICAgY29uc3QgeyBjb2wxLCBjb2wyLCBjb2wzLCBwaG90bywgc3RhdHVzIH0gPSB0aGlzLmdldENvbEtleXMoKTtcclxuICAgICAgICBjb25zdCB2YWxpZEtleXMgPSB0aGlzLmxvY2FsaXplZFN0YXR1c0xhYmVscy5tYXAocyA9PiBzLmtleSk7XHJcblxyXG4gICAgICAgIHRoaXMub3JpZ2luYWxTdGF0dXMgPSBzdGF0dXM7XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaXRlbSkucmVkdWNlKChhY2MsIGtleSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgYWNjW2tleS50b0xvd2VyQ2FzZSgpXSA9IGtleTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcmF3U3RhdHVzID0gaXRlbVtrZXlzW3N0YXR1c11dPy50cmltKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsaWRTdGF0dXMgPSByYXdTdGF0dXMgJiYgdmFsaWRLZXlzLmluY2x1ZGVzKHJhd1N0YXR1cyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0gaXNWYWxpZFN0YXR1cyA/IHJhd1N0YXR1cyA6ICduZXcnO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGlkOiBpbmRleCArIDEgKyB0aGlzLmZpcnN0LFxyXG4gICAgICAgICAgICAgICAgdWlkOiBgJHtpdGVtLnVpZH1gLFxyXG4gICAgICAgICAgICAgICAgaGVhZGVyVGl0bGU6IGAke2l0ZW1ba2V5c1tjb2wxXV0gPz8gJyd9YCxcclxuICAgICAgICAgICAgICAgIHN1YkhlYWRlclRpdGxlOiBgJHtpdGVtW2tleXNbY29sMl1dID8/ICcnfWAsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7aXRlbVtrZXlzW2NvbDNdXSA/PyAnJ31gLFxyXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBmaW5hbFN0YXR1cyxcclxuICAgICAgICAgICAgICAgIHBob3RvOiBpdGVtW2tleXNbcGhvdG9dXSB8fCBkZWZhdWx0Q2FyZEhlYWRlci5pbWFnZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2FyZE1hcCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgVHNpQ2FyZFtdPigpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGxhYmVsIG9mIHRoaXMubG9jYWxpemVkU3RhdHVzTGFiZWxzKSB7XHJcbiAgICAgICAgICAgIG1hcC5zZXQobGFiZWwua2V5LCBbXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhcmQgb2YgdGhpcy5jYXJkcykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cCA9IG1hcC5nZXQoY2FyZC5zdGF0dXMhKTtcclxuICAgICAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBncm91cC5wdXNoKGNhcmQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFVubWFwcGVkIGNhcmQgc3RhdHVzOiAke2NhcmQuc3RhdHVzfWAsIGNhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhcmRzXSBvZiBtYXAuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgIGNhcmRzLnNvcnQoKGEsIGIpID0+IChhLmhlYWRlclRpdGxlID8/ICcnKS5sb2NhbGVDb21wYXJlKGIuaGVhZGVyVGl0bGUgPz8gJycpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuY2FyZE1hcEJ5U3RhdHVzID0gbWFwO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0QnVzaW5lc3NDbGFzc1N0YXR1cyhjbGFzc05hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuX2VudGl0eVN0YXR1c1NlcnZpY2UuZ2V0RW50aXR5U3RhdHVzKGNsYXNzTmFtZSkpO1xyXG4gICAgICAgIGNvbnN0IHN0YXR1c2VzID0gcmVzcG9uc2U/LmVudGl0eVN0YXR1cyA/PyBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2NhbGl6ZWRTdGF0dXNMYWJlbHMgPSBbXHJcbiAgICAgICAgICAgIHsga2V5OiAnbmV3JywgbG9jYWxpemVkOiB0aGlzLl9sb2NhbGl6ZS50cmFuc2Zvcm0oJ2dlc2NfcGFyYW1fYXJ0aWNsZV9zdGF0dXRfZW51bXNfbmV3JykudHJpbSgpIH0sXHJcbiAgICAgICAgICAgIC4uLnN0YXR1c2VzLm1hcCgoczogYW55KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAga2V5OiBzLmtleSxcclxuICAgICAgICAgICAgICAgIGxvY2FsaXplZDogdGhpcy5fbG9jYWxpemUudHJhbnNmb3JtKHMudmFsdWUpLnRyaW0oKVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICBdO1xyXG4gICAgfVxyXG59IiwiPGRpdiBjbGFzcz1cImNhcmQgZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XHJcbiAgPHAtcGFnaW5hdG9yXHJcbiAgICBbZmlyc3RdPVwiZmlyc3RcIlxyXG4gICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsQ291bnRcIlxyXG4gICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJbMSwgMTAsIDI1LCA1MF1cIlxyXG4gICAgKG9uUGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxyXG4gICAgY3VycmVudFBhZ2VSZXBvcnRUZW1wbGF0ZT1cInt7ICdTaG93aW5nJyB8IGxvY2FsaXplIH19IHtmaXJzdH0ge3sndG8nIHwgbG9jYWxpemV9fSB7bGFzdH0ge3sgJ29mJyB8IGxvY2FsaXplIH19IHt0b3RhbFJlY29yZHN9XCI+XHJcbiAgPC9wLXBhZ2luYXRvcj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwia2FuYmFuLWJvYXJkIGZsZXggZ2FwLTQgb3ZlcmZsb3ctYXV0b1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiBsb2NhbGl6ZWRTdGF0dXNMYWJlbHM7IHRyYWNrQnk6IHRyYWNrQnlTdGF0dXNcIlxyXG4gICAgICAgY2xhc3M9XCJrYW5iYW4tY29sdW1uIGZsZXggZmxleC1jb2x1bW4gYm9yZGVyLXJvdW5kIHN1cmZhY2UtMCBzaGFkb3ctMlwiXHJcbiAgICAgICAoZHJhZ292ZXIpPVwiYWxsb3dEcm9wKCRldmVudClcIlxyXG4gICAgICAgKGRyb3ApPVwiZHJvcCgkZXZlbnQsIHN0YXR1cy5rZXkpXCI+XHJcbiAgICAgICBcclxuICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4taGVhZGVyIHAtMyBib3JkZXItYm90dG9tLTEgc3VyZmFjZS1ib3JkZXIgZm9udC1zZW1pYm9sZFwiPlxyXG4gICAgICB7eyBzdGF0dXMubG9jYWxpemVkIH19XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LWdyYXktNTAwXCI+XHJcbiAgICAgICAgKHt7IGNhcmRNYXBCeVN0YXR1cy5nZXQoc3RhdHVzLmtleSk/Lmxlbmd0aCB8fCAwIH19KVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uLWNhcmRzIGZsZXgtMSBvdmVyZmxvdy1hdXRvIHAtM1wiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjYXJkIG9mIGNhcmRNYXBCeVN0YXR1cy5nZXQoc3RhdHVzLmtleSk7IHRyYWNrQnk6IHRyYWNrQnlDYXJkXCJcclxuICAgICAgICAgICBjbGFzcz1cImthbmJhbi1jYXJkIHAtMyBib3JkZXItcm91bmQgYmctd2hpdGUgbWItMyBzaGFkb3ctMVwiXHJcbiAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U3RhdHVzQ2xhc3MoY2FyZClcIlxyXG4gICAgICAgICAgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgICAgICAgIChkcmFnc3RhcnQpPVwiZHJhZ1N0YXJ0KCRldmVudCwgY2FyZClcIlxyXG4gICAgICAgICAgIChkcmFnZW5kKT1cImRyYWdFbmQoKVwiPlxyXG4gICAgICAgICAgIFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmb250LWJvbGQgbWItMlwiPnt7IGNhcmQuaGVhZGVyVGl0bGUgfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNjAwIG1iLTNcIj57eyBjYXJkLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTYwMCBtYi0zXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyAnZ2VzY19kb2N1bWVudF9zdGF0dXQnIHwgbG9jYWxpemUgfX06PC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4+e3sgZ2V0TG9jYWxpemVkU3RhdHVzKGNhcmQuc3RhdHVzKSB9fTwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48ZGl2IGNsYXNzPVwib3ZlcmxheVwiICpuZ0lmPVwiaXNMb2FkaW5nXCI+XHJcbiAgPGRpdiBjbGFzcz1cInNwaW5uZXItd3JhcHBlclwiPlxyXG4gICAgPGFwcC1zcGlubmVyPjwvYXBwLXNwaW5uZXI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=