@seniorsistemas/angular-components 17.27.1-fix-interactive-content-22e06381 → 17.27.1-fixlookupteste-sds-110-c424f879

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 (932) hide show
  1. package/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.d.ts +2 -1
  2. package/dynamic-form/lib/dynamic-form/dynamic-form.module.d.ts +23 -23
  3. package/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +2 -0
  4. package/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.d.ts +3 -3
  5. package/esm2022/accordion/lib/accordion/accordion.component.mjs +84 -0
  6. package/esm2022/accordion/lib/accordion/accordion.module.mjs +36 -0
  7. package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +124 -0
  8. package/esm2022/accordion/lib/accordion/models/accordion-button-settings.mjs +2 -0
  9. package/esm2022/accordion/public-api.mjs +4 -0
  10. package/esm2022/accordion/seniorsistemas-angular-components-accordion.mjs +5 -0
  11. package/esm2022/alert/lib/alert/alert.component.mjs +44 -0
  12. package/esm2022/alert/lib/alert/alert.module.mjs +18 -0
  13. package/esm2022/alert/public-api.mjs +3 -0
  14. package/esm2022/alert/seniorsistemas-angular-components-alert.mjs +5 -0
  15. package/esm2022/badge/lib/badge/badge.component.mjs +46 -0
  16. package/esm2022/badge/lib/badge/badge.module.mjs +20 -0
  17. package/esm2022/badge/lib/badge/types/badge-colors.mjs +4 -0
  18. package/esm2022/badge/lib/badge/types/badge-types.mjs +2 -0
  19. package/esm2022/badge/public-api.mjs +3 -0
  20. package/esm2022/badge/seniorsistemas-angular-components-badge.mjs +5 -0
  21. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +156 -0
  22. package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.module.mjs +21 -0
  23. package/esm2022/bignumber-input/public-api.mjs +3 -0
  24. package/esm2022/bignumber-input/seniorsistemas-angular-components-bignumber-input.mjs +5 -0
  25. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +105 -0
  26. package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.module.mjs +20 -0
  27. package/esm2022/breadcrumb/public-api.mjs +3 -0
  28. package/esm2022/breadcrumb/seniorsistemas-angular-components-breadcrumb.mjs +5 -0
  29. package/esm2022/button/lib/button/button.component.mjs +106 -0
  30. package/esm2022/button/lib/button/button.module.mjs +18 -0
  31. package/esm2022/button/lib/button/models/button-animations.mjs +2 -0
  32. package/esm2022/button/lib/button/models/button-badge-config.mjs +2 -0
  33. package/esm2022/button/lib/button/models/button-priority.mjs +2 -0
  34. package/esm2022/button/lib/button/models/button-size.mjs +2 -0
  35. package/esm2022/button/lib/button/models/index.mjs +2 -0
  36. package/esm2022/button/public-api.mjs +4 -0
  37. package/esm2022/button/seniorsistemas-angular-components-button.mjs +5 -0
  38. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +611 -0
  39. package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.module.mjs +18 -0
  40. package/esm2022/calendar-mask/public-api.mjs +3 -0
  41. package/esm2022/calendar-mask/seniorsistemas-angular-components-calendar-mask.mjs +5 -0
  42. package/esm2022/card/lib/card/card.component.mjs +85 -0
  43. package/esm2022/card/lib/card/card.module.mjs +19 -0
  44. package/esm2022/card/public-api.mjs +3 -0
  45. package/esm2022/card/seniorsistemas-angular-components-card.mjs +5 -0
  46. package/esm2022/chat/lib/chat/chat.component.mjs +29 -0
  47. package/esm2022/chat/lib/chat/chat.module.mjs +22 -0
  48. package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +29 -0
  49. package/esm2022/chat/lib/chat/types/chat-message.mjs +2 -0
  50. package/esm2022/chat/public-api.mjs +3 -0
  51. package/esm2022/chat/seniorsistemas-angular-components-chat.mjs +5 -0
  52. package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +67 -0
  53. package/esm2022/checkbox/public-api.mjs +2 -0
  54. package/esm2022/checkbox/seniorsistemas-angular-components-checkbox.mjs +5 -0
  55. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +129 -0
  56. package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.module.mjs +19 -0
  57. package/esm2022/checkbox-list/lib/checkbox-list/models/checkbox-list-data.mjs +2 -0
  58. package/esm2022/checkbox-list/lib/checkbox-list/models/checkbox-list-state.mjs +2 -0
  59. package/esm2022/checkbox-list/public-api.mjs +3 -0
  60. package/esm2022/checkbox-list/seniorsistemas-angular-components-checkbox-list.mjs +5 -0
  61. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +67 -0
  62. package/esm2022/chips/lib/chips/chips/chips.component.mjs +241 -0
  63. package/esm2022/chips/lib/chips/chips.module.mjs +22 -0
  64. package/esm2022/chips/lib/chips/models/chip-models.mjs +2 -0
  65. package/esm2022/chips/public-api.mjs +3 -0
  66. package/esm2022/chips/seniorsistemas-angular-components-chips.mjs +5 -0
  67. package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +111 -0
  68. package/esm2022/code-editor/lib/code-editor/code-editor.module.mjs +32 -0
  69. package/esm2022/code-editor/lib/code-editor/core/facades/core-facade.mjs +85 -0
  70. package/esm2022/code-editor/lib/code-editor/core/facades/linter-facade.mjs +2 -0
  71. package/esm2022/code-editor/lib/code-editor/core/models/enums/marker-severity.mjs +7 -0
  72. package/esm2022/code-editor/lib/code-editor/core/models/index.mjs +5 -0
  73. package/esm2022/code-editor/lib/code-editor/core/models/interfaces/marker.mjs +2 -0
  74. package/esm2022/code-editor/lib/code-editor/core/use-cases/core-linters.mjs +11 -0
  75. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/codemirror-6-core.mjs +97 -0
  76. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/editor-languages.mjs +17 -0
  77. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/json/json.language.mjs +67 -0
  78. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-empty-state.mjs +29 -0
  79. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-loading-state.mjs +29 -0
  80. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-state-wrapper/autocomplete-state-wrapper-style.mjs +17 -0
  81. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/autocomplete-state-wrapper/autocomplete-state-wrapper.mjs +77 -0
  82. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-states/index.mjs +4 -0
  83. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete-style.mjs +35 -0
  84. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete.mjs +334 -0
  85. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/autocomplete/autocomplete.service.mjs +25 -0
  86. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/base-configs/base-configs.mjs +18 -0
  87. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/extensions/base-configs/grammar.mjs +37 -0
  88. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/completion-types.mjs +10 -0
  89. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/enum-type-order.mjs +8 -0
  90. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/keywords.mjs +12 -0
  91. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/meta-type.mjs +36 -0
  92. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/enums/request-types.mjs +9 -0
  93. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/index.mjs +22 -0
  94. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/completion-Item.mjs +2 -0
  95. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/facade-metadata-name.mjs +2 -0
  96. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/fields-order-by.mjs +2 -0
  97. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/get-facade-metadata-by-path.mjs +2 -0
  98. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-context-metadata-by-id.mjs +2 -0
  99. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-expression-metadata.mjs +2 -0
  100. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/list-facade-metadata-names.mjs +2 -0
  101. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-expression-metadata.mjs +2 -0
  102. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-context-metadata.mjs +2 -0
  103. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-facade-metadata.mjs +2 -0
  104. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-front-field-metadata.mjs +2 -0
  105. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/rec-page-request.mjs +2 -0
  106. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/safe-http-communication.mjs +2 -0
  107. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/models/interfaces/tax-calculation-configs.mjs +2 -0
  108. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/tax-calculation-language-configs.mjs +11 -0
  109. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/tax-calculation.language.mjs +9 -0
  110. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/get-language-configs.mjs +14 -0
  111. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/get-safe-response.mjs +18 -0
  112. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/languages/tax-calculation/utils/index.mjs +3 -0
  113. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/index.mjs +4 -0
  114. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/types/diagnostic-severity.mjs +2 -0
  115. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/models/types/editor-theme.mjs +2 -0
  116. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/editor-themes.mjs +15 -0
  117. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/autocomplete-tooltip.mjs +61 -0
  118. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/font-style.mjs +39 -0
  119. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/line-counter.mjs +25 -0
  120. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/extensions/scrollbars.mjs +18 -0
  121. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-highlight-style.mjs +16 -0
  122. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +13 -0
  123. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-theme.mjs +22 -0
  124. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/convert-markers-to-diagnostics.mjs +15 -0
  125. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/index.mjs +3 -0
  126. package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/utils/is-current-position-inside-string.mjs +5 -0
  127. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/custom-http-client.mjs +82 -0
  128. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/format-blob-response.mjs +10 -0
  129. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/format-json-response.mjs +9 -0
  130. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-http-client/json-response-formatters/index.mjs +3 -0
  131. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations-service.mjs +37 -0
  132. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/custom-translations.module.mjs +32 -0
  133. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/index.mjs +3 -0
  134. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/models/index.mjs +3 -0
  135. package/esm2022/code-editor/lib/code-editor/infra/utils/custom-translations/models/interfaces/translations.mjs +2 -0
  136. package/esm2022/code-editor/lib/code-editor/infra/utils/index.mjs +3 -0
  137. package/esm2022/code-editor/lib/code-editor/models/enums/languages.mjs +6 -0
  138. package/esm2022/code-editor/lib/code-editor/models/enums/themes.mjs +5 -0
  139. package/esm2022/code-editor/lib/code-editor/models/index.mjs +6 -0
  140. package/esm2022/code-editor/lib/code-editor/models/interfaces/editor-options.mjs +2 -0
  141. package/esm2022/code-editor/public-api.mjs +6 -0
  142. package/esm2022/code-editor/seniorsistemas-angular-components-code-editor.mjs +5 -0
  143. package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +81 -0
  144. package/esm2022/collapse-link/lib/collapse-link/collapse-link.module.mjs +18 -0
  145. package/esm2022/collapse-link/public-api.mjs +3 -0
  146. package/esm2022/collapse-link/seniorsistemas-angular-components-collapse-link.mjs +5 -0
  147. package/esm2022/common/lib/angular-components.module.mjs +24 -0
  148. package/esm2022/common/lib/custom-http-client/custom-http-client.mjs +86 -0
  149. package/esm2022/common/lib/custom-http-client/json-response-formatters/format-blob-response.mjs +10 -0
  150. package/esm2022/common/lib/custom-http-client/json-response-formatters/format-json-response.mjs +9 -0
  151. package/esm2022/common/lib/debouce.mjs +35 -0
  152. package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +11 -0
  153. package/esm2022/common/lib/svg-factory/components/senior-icon/senior-icon.component.mjs +11 -0
  154. package/esm2022/common/lib/svg-factory/components/svg-factory-icons.mjs +2 -0
  155. package/esm2022/common/lib/svg-factory/index.mjs +3 -0
  156. package/esm2022/common/lib/svg-factory/svg-factory.directive.mjs +44 -0
  157. package/esm2022/common/lib/svg-factory/svg-factory.module.mjs +26 -0
  158. package/esm2022/common/public-api.mjs +5 -0
  159. package/esm2022/common/seniorsistemas-angular-components-common.mjs +5 -0
  160. package/esm2022/confirm-dialog/lib/confirm-dialog.model.mjs +2 -0
  161. package/esm2022/confirm-dialog/lib/confirm-dialog.service.mjs +34 -0
  162. package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +17 -0
  163. package/esm2022/confirm-dialog/public-api.mjs +2 -0
  164. package/esm2022/confirm-dialog/seniorsistemas-angular-components-confirm-dialog.mjs +5 -0
  165. package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +52 -0
  166. package/esm2022/control-errors/lib/control-errors/control-errors.module.mjs +19 -0
  167. package/esm2022/control-errors/public-api.mjs +3 -0
  168. package/esm2022/control-errors/seniorsistemas-angular-components-control-errors.mjs +5 -0
  169. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +319 -0
  170. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.module.mjs +41 -0
  171. package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.service.mjs +42 -0
  172. package/esm2022/country-phone-picker/lib/country-phone-picker/models/country-phone-data.mjs +2 -0
  173. package/esm2022/country-phone-picker/lib/country-phone-picker/models/ordination.mjs +7 -0
  174. package/esm2022/country-phone-picker/lib/country-phone-picker/models/phone-selection-data.mjs +2 -0
  175. package/esm2022/country-phone-picker/lib/country-phone-picker/resources/countries.mjs +228 -0
  176. package/esm2022/country-phone-picker/public-api.mjs +5 -0
  177. package/esm2022/country-phone-picker/seniorsistemas-angular-components-country-phone-picker.mjs +5 -0
  178. package/esm2022/currency/lib/currency.service.mjs +25 -0
  179. package/esm2022/currency/lib/models/currencies.mjs +161 -0
  180. package/esm2022/currency/lib/types/currency.mjs +2 -0
  181. package/esm2022/currency/public-api.mjs +3 -0
  182. package/esm2022/currency/seniorsistemas-angular-components-currency.mjs +5 -0
  183. package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +690 -0
  184. package/esm2022/custom-fields/lib/custom-fields/custom-fields.module.mjs +45 -0
  185. package/esm2022/custom-fields/lib/custom-fields/custom-fields.service.mjs +35 -0
  186. package/esm2022/custom-fields/lib/custom-fields/models/custom-field-type.mjs +17 -0
  187. package/esm2022/custom-fields/public-api.mjs +4 -0
  188. package/esm2022/custom-fields/seniorsistemas-angular-components-custom-fields.mjs +5 -0
  189. package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +82 -0
  190. package/esm2022/dialog/lib/src/dialog/models/active-dialog.mjs +18 -0
  191. package/esm2022/dialog/lib/src/dialog/models/dialog-models.mjs +2 -0
  192. package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +96 -0
  193. package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +29 -0
  194. package/esm2022/dialog/public-api.mjs +4 -0
  195. package/esm2022/dialog/seniorsistemas-angular-components-dialog.mjs +5 -0
  196. package/esm2022/dynamic-form/lib/dynamic-form/components/field-label/field-label.component.mjs +20 -0
  197. package/esm2022/dynamic-form/lib/dynamic-form/components/grid/row/row.component.mjs +41 -0
  198. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/lookup.component.mjs +632 -0
  199. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/default-filter.mjs +2 -0
  200. package/esm2022/dynamic-form/lib/dynamic-form/components/lookup/types/label-options.mjs +2 -0
  201. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/base-structure-component.mjs +2 -0
  202. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/fieldset/fieldset.component.mjs +27 -0
  203. package/esm2022/dynamic-form/lib/dynamic-form/components/structure/section/section.component.mjs +33 -0
  204. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-config.mjs +71 -0
  205. package/esm2022/dynamic-form/lib/dynamic-form/configurations/dynamic-type.mjs +26 -0
  206. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/grid.mjs +14 -0
  207. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid/row.mjs +10 -0
  208. package/esm2022/dynamic-form/lib/dynamic-form/configurations/grid-type.mjs +5 -0
  209. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/fieldset.mjs +10 -0
  210. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/section.mjs +31 -0
  211. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure/structure.mjs +9 -0
  212. package/esm2022/dynamic-form/lib/dynamic-form/configurations/structure-type.mjs +6 -0
  213. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.component.mjs +41 -0
  214. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.directive.mjs +107 -0
  215. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.mjs +189 -0
  216. package/esm2022/dynamic-form/lib/dynamic-form/dynamic-form.module.mjs +289 -0
  217. package/esm2022/dynamic-form/lib/dynamic-form/form-field/addon-config.mjs +2 -0
  218. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-size.mjs +13 -0
  219. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/field-type.mjs +34 -0
  220. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +24 -0
  221. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +37 -0
  222. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/blob-field.mjs +31 -0
  223. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-field.mjs +30 -0
  224. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +15 -0
  225. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/button-field.mjs +47 -0
  226. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/calendar-field.mjs +56 -0
  227. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +9 -0
  228. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/chips-field.mjs +25 -0
  229. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +15 -0
  230. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/currency-field.mjs +14 -0
  231. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/decimal-field.mjs +16 -0
  232. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/editor-field.mjs +15 -0
  233. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/field.mjs +64 -0
  234. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/lookup-field.mjs +66 -0
  235. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/number-field.mjs +38 -0
  236. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/password-field.mjs +33 -0
  237. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/profile-picture.mjs +35 -0
  238. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +27 -0
  239. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/select-field.mjs +43 -0
  240. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/slider-field.mjs +30 -0
  241. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +17 -0
  242. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-field.mjs +30 -0
  243. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-area-ia-field.mjs +32 -0
  244. package/esm2022/dynamic-form/lib/dynamic-form/form-field/configurations/fields/text-field.mjs +38 -0
  245. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/autocomplete/autocomplete-field.component.mjs +36 -0
  246. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/base-field-component.mjs +22 -0
  247. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +124 -0
  248. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-radio-field/boolean-field.component.mjs +27 -0
  249. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/boolean/boolean-switch-field/boolean-switch-field.component.mjs +23 -0
  250. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/button-field/button-field.component.mjs +31 -0
  251. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/calendar/calendar-field.component.mjs +118 -0
  252. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/checkbox/checkbox-field.component.mjs +21 -0
  253. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/chips/chips-field.component.mjs +59 -0
  254. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/country-phone-picker/country-phone-picker-field.component.mjs +29 -0
  255. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/currency/currency-field.component.mjs +90 -0
  256. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/editor/editor-field.component.mjs +23 -0
  257. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/file-upload/file-upload-field.component.mjs +56 -0
  258. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/lookup/lookup-field.component.mjs +23 -0
  259. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/number/number-field.component.mjs +121 -0
  260. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/password/password-field.component.mjs +75 -0
  261. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/profile-picture/profile-picture-field.component.mjs +22 -0
  262. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/radio-button/radio-button-field.component.mjs +52 -0
  263. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/select/select-field.component.mjs +24 -0
  264. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/slider/slider-field.component.mjs +103 -0
  265. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/star-rating/star-rating-field.component.mjs +25 -0
  266. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text/text-field.component.mjs +88 -0
  267. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +29 -0
  268. package/esm2022/dynamic-form/lib/dynamic-form/form-field/fields/text-area-ia/text-area-ia-field.component.mjs +22 -0
  269. package/esm2022/dynamic-form/lib/dynamic-form/form-field/form-field.mjs +243 -0
  270. package/esm2022/dynamic-form/lib/dynamic-form/services/dynamic-form-cache.mjs +150 -0
  271. package/esm2022/dynamic-form/public-api.mjs +44 -0
  272. package/esm2022/dynamic-form/seniorsistemas-angular-components-dynamic-form.mjs +5 -0
  273. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +44 -0
  274. package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.module.mjs +18 -0
  275. package/esm2022/editable-overlay/public-api.mjs +3 -0
  276. package/esm2022/editable-overlay/seniorsistemas-angular-components-editable-overlay.mjs +5 -0
  277. package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +51 -0
  278. package/esm2022/empty-state/lib/empty-state/empty-state.module.mjs +22 -0
  279. package/esm2022/empty-state/lib/empty-state/go-back/go-back.component.mjs +34 -0
  280. package/esm2022/empty-state/public-api.mjs +4 -0
  281. package/esm2022/empty-state/seniorsistemas-angular-components-empty-state.mjs +5 -0
  282. package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +78 -0
  283. package/esm2022/fieldset/lib/fieldset/fieldset.models.mjs +2 -0
  284. package/esm2022/fieldset/lib/fieldset/fieldset.module.mjs +19 -0
  285. package/esm2022/fieldset/public-api.mjs +3 -0
  286. package/esm2022/fieldset/seniorsistemas-angular-components-fieldset.mjs +5 -0
  287. package/esm2022/file-upload/lib/file-upload/file-upload.component.mjs +276 -0
  288. package/esm2022/file-upload/lib/file-upload/file-upload.module.mjs +38 -0
  289. package/esm2022/file-upload/lib/file-upload/file-upload.service.mjs +18 -0
  290. package/esm2022/file-upload/lib/file-upload/models/file-dto.mjs +2 -0
  291. package/esm2022/file-upload/lib/file-upload/models/file-upload-permissions.mjs +2 -0
  292. package/esm2022/file-upload/lib/file-upload/models/list-blob-metadata.mjs +2 -0
  293. package/esm2022/file-upload/lib/file-upload/models/uploadError.mjs +2 -0
  294. package/esm2022/file-upload/lib/file-upload/models/validate-errors.mjs +2 -0
  295. package/esm2022/file-upload/public-api.mjs +3 -0
  296. package/esm2022/file-upload/seniorsistemas-angular-components-file-upload.mjs +5 -0
  297. package/esm2022/gantt/lib/gantt/components/gantt/arrow.mjs +87 -0
  298. package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +294 -0
  299. package/esm2022/gantt/lib/gantt/components/gantt/gantt-options.mjs +20 -0
  300. package/esm2022/gantt/lib/gantt/components/gantt/gantt.mjs +812 -0
  301. package/esm2022/gantt/lib/gantt/components/gantt/popup.mjs +110 -0
  302. package/esm2022/gantt/lib/gantt/components/gantt/utils/date-utils.mjs +116 -0
  303. package/esm2022/gantt/lib/gantt/components/gantt/utils/svg-utils.mjs +111 -0
  304. package/esm2022/gantt/lib/gantt/components/side-table/side-table.component.mjs +32 -0
  305. package/esm2022/gantt/lib/gantt/gantt.component.mjs +146 -0
  306. package/esm2022/gantt/lib/gantt/gantt.module.mjs +24 -0
  307. package/esm2022/gantt/lib/gantt/models/index.mjs +2 -0
  308. package/esm2022/gantt/lib/gantt/models/options.mjs +2 -0
  309. package/esm2022/gantt/lib/gantt/models/task.mjs +2 -0
  310. package/esm2022/gantt/lib/gantt/models/view-mode.mjs +12 -0
  311. package/esm2022/gantt/public-api.mjs +4 -0
  312. package/esm2022/gantt/seniorsistemas-angular-components-gantt.mjs +5 -0
  313. package/esm2022/global-search/lib/global-search/components/dropdown/global-search-dropdown-item.component.mjs +73 -0
  314. package/esm2022/global-search/lib/global-search/global-search.component.mjs +140 -0
  315. package/esm2022/global-search/lib/global-search/global-search.module.mjs +78 -0
  316. package/esm2022/global-search/lib/global-search/types/global-search-size.enum.mjs +2 -0
  317. package/esm2022/global-search/public-api.mjs +5 -0
  318. package/esm2022/global-search/seniorsistemas-angular-components-global-search.mjs +5 -0
  319. package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +34 -0
  320. package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +19 -0
  321. package/esm2022/grid-menu/lib/grid-menu/grid-menu.module.mjs +19 -0
  322. package/esm2022/grid-menu/lib/grid-menu/types/grid-menu-item.mjs +2 -0
  323. package/esm2022/grid-menu/public-api.mjs +4 -0
  324. package/esm2022/grid-menu/seniorsistemas-angular-components-grid-menu.mjs +5 -0
  325. package/esm2022/help-popover/lib/help-popover/help-popover/help-popover.component.mjs +84 -0
  326. package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +314 -0
  327. package/esm2022/help-popover/lib/help-popover/help-popover.module.mjs +25 -0
  328. package/esm2022/help-popover/lib/help-popover/models/help-popover.models.mjs +2 -0
  329. package/esm2022/help-popover/public-api.mjs +4 -0
  330. package/esm2022/help-popover/seniorsistemas-angular-components-help-popover.mjs +5 -0
  331. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/components/ia-insight-card-loader/ia-insight-card-loader.component.mjs +13 -0
  332. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-card/ia-insight-card.component.mjs +82 -0
  333. package/esm2022/ia-insight/lib/ia-insight/components/ia-insight-sidebar/ia-insight-sidebar.component.mjs +49 -0
  334. package/esm2022/ia-insight/lib/ia-insight/ia-insight.component.mjs +66 -0
  335. package/esm2022/ia-insight/lib/ia-insight/ia-insight.module.mjs +47 -0
  336. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-item.mjs +2 -0
  337. package/esm2022/ia-insight/lib/ia-insight/models/ia-insight-template-types.mjs +2 -0
  338. package/esm2022/ia-insight/lib/ia-insight/models/index.mjs +2 -0
  339. package/esm2022/ia-insight/public-api.mjs +4 -0
  340. package/esm2022/ia-insight/seniorsistemas-angular-components-ia-insight.mjs +5 -0
  341. package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +179 -0
  342. package/esm2022/image-cropper/lib/image-cropper/image-cropper.module.mjs +23 -0
  343. package/esm2022/image-cropper/lib/image-cropper/image-cropper.service.mjs +73 -0
  344. package/esm2022/image-cropper/public-api.mjs +4 -0
  345. package/esm2022/image-cropper/seniorsistemas-angular-components-image-cropper.mjs +5 -0
  346. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +28 -0
  347. package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.module.mjs +18 -0
  348. package/esm2022/infinite-scroll/public-api.mjs +3 -0
  349. package/esm2022/infinite-scroll/seniorsistemas-angular-components-infinite-scroll.mjs +5 -0
  350. package/esm2022/info-sign/lib/info-sign/components/info-sign/info-sign.component.mjs +17 -0
  351. package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +68 -0
  352. package/esm2022/info-sign/lib/info-sign/info-sign.module.mjs +20 -0
  353. package/esm2022/info-sign/public-api.mjs +3 -0
  354. package/esm2022/info-sign/seniorsistemas-angular-components-info-sign.mjs +5 -0
  355. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.mjs +53 -0
  356. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.mjs +32 -0
  357. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +85 -0
  358. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +32 -0
  359. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area/inline-edit-text-area.component.mjs +33 -0
  360. package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.mjs +32 -0
  361. package/esm2022/inline-edit/lib/inline-edit/components/index.mjs +8 -0
  362. package/esm2022/inline-edit/lib/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +105 -0
  363. package/esm2022/inline-edit/lib/inline-edit/fields/index.mjs +8 -0
  364. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-calendar-field.mjs +45 -0
  365. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-field.mjs +13 -0
  366. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-lookup-field.mjs +60 -0
  367. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +38 -0
  368. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-area-field.mjs +15 -0
  369. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-area-ia-field.mjs +7 -0
  370. package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-text-field.mjs +7 -0
  371. package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +66 -0
  372. package/esm2022/inline-edit/lib/inline-edit/inline-edit.module.mjs +102 -0
  373. package/esm2022/inline-edit/lib/inline-edit/types/addon-config.mjs +2 -0
  374. package/esm2022/inline-edit/public-api.mjs +4 -0
  375. package/esm2022/inline-edit/seniorsistemas-angular-components-inline-edit.mjs +5 -0
  376. package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +63 -0
  377. package/esm2022/interactive-content/public-api.mjs +2 -0
  378. package/esm2022/interactive-content/seniorsistemas-angular-components-interactive-content.mjs +5 -0
  379. package/esm2022/kanban/lib/kanban/components/kanban-column/kanban-column.component.mjs +100 -0
  380. package/esm2022/kanban/lib/kanban/components/kanban-item/kanban-item.component.mjs +62 -0
  381. package/esm2022/kanban/lib/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +17 -0
  382. package/esm2022/kanban/lib/kanban/kanban-event.service.mjs +26 -0
  383. package/esm2022/kanban/lib/kanban/kanban.component.mjs +219 -0
  384. package/esm2022/kanban/lib/kanban/kanban.module.mjs +56 -0
  385. package/esm2022/kanban/lib/kanban/types/index.mjs +2 -0
  386. package/esm2022/kanban/lib/kanban/types/kanban-data.mjs +2 -0
  387. package/esm2022/kanban/lib/kanban/types/kanban-template-types.mjs +2 -0
  388. package/esm2022/kanban/public-api.mjs +3 -0
  389. package/esm2022/kanban/seniorsistemas-angular-components-kanban.mjs +5 -0
  390. package/esm2022/label-value/lib/label-value/label-value.component.mjs +35 -0
  391. package/esm2022/label-value/lib/label-value/label-value.module.mjs +22 -0
  392. package/esm2022/label-value/lib/label-value/types/label-value-configuration.mjs +2 -0
  393. package/esm2022/label-value/public-api.mjs +3 -0
  394. package/esm2022/label-value/seniorsistemas-angular-components-label-value.mjs +5 -0
  395. package/esm2022/lib/locale/fallback.mjs +333 -0
  396. package/esm2022/loading-state/lib/loading-state/components/dots-indicator/dots-indicator.components.mjs +11 -0
  397. package/esm2022/loading-state/lib/loading-state/components/loading-state-indicators.mjs +6 -0
  398. package/esm2022/loading-state/lib/loading-state/components/logo-indicator/logo-indicator.component.mjs +12 -0
  399. package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +74 -0
  400. package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +62 -0
  401. package/esm2022/loading-state/lib/loading-state/loading-state.module.mjs +30 -0
  402. package/esm2022/loading-state/public-api.mjs +5 -0
  403. package/esm2022/loading-state/seniorsistemas-angular-components-loading-state.mjs +5 -0
  404. package/esm2022/locale/lib/locale/locale.module.mjs +85 -0
  405. package/esm2022/locale/lib/locale/locale.service.mjs +87 -0
  406. package/esm2022/locale/lib/locale/options/calendar.mjs +24 -0
  407. package/esm2022/locale/lib/locale/options/index.mjs +27 -0
  408. package/esm2022/locale/lib/locale/options/number.mjs +9 -0
  409. package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +18 -0
  410. package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +38 -0
  411. package/esm2022/locale/lib/locale/pipes/localized-currency-impure.pipe.mjs +21 -0
  412. package/esm2022/locale/lib/locale/pipes/localized-currency.pipe.mjs +53 -0
  413. package/esm2022/locale/lib/locale/pipes/localized-date-impure.pipe.mjs +15 -0
  414. package/esm2022/locale/lib/locale/pipes/localized-date.pipe.mjs +23 -0
  415. package/esm2022/locale/lib/locale/pipes/localized-number.pipe.mjs +31 -0
  416. package/esm2022/locale/lib/locale/pipes/localized-time-impure.pipe.mjs +15 -0
  417. package/esm2022/locale/lib/locale/pipes/localized-time.pipe.mjs +23 -0
  418. package/esm2022/locale/public-api.mjs +13 -0
  419. package/esm2022/locale/seniorsistemas-angular-components-locale.mjs +5 -0
  420. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +63 -0
  421. package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.module.mjs +18 -0
  422. package/esm2022/localized-number-input/public-api.mjs +3 -0
  423. package/esm2022/localized-number-input/seniorsistemas-angular-components-localized-number-input.mjs +5 -0
  424. package/esm2022/mask/lib/mask/mask-formatter.module.mjs +16 -0
  425. package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +65 -0
  426. package/esm2022/mask/public-api.mjs +3 -0
  427. package/esm2022/mask/seniorsistemas-angular-components-mask.mjs +5 -0
  428. package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +37 -0
  429. package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +51 -0
  430. package/esm2022/mouse-events/lib/mouse-events/mouse-events.module.mjs +27 -0
  431. package/esm2022/mouse-events/public-api.mjs +4 -0
  432. package/esm2022/mouse-events/seniorsistemas-angular-components-mouse-events.mjs +5 -0
  433. package/esm2022/navigation-button/lib/navigation-button/models/index.mjs +2 -0
  434. package/esm2022/navigation-button/lib/navigation-button/models/navigation-button-item.mjs +2 -0
  435. package/esm2022/navigation-button/lib/navigation-button/models/navigation-button-step-changed-info.mjs +2 -0
  436. package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +134 -0
  437. package/esm2022/navigation-button/lib/navigation-button/navigation-button.module.mjs +20 -0
  438. package/esm2022/navigation-button/public-api.mjs +4 -0
  439. package/esm2022/navigation-button/seniorsistemas-angular-components-navigation-button.mjs +5 -0
  440. package/esm2022/number-input/lib/number-input/number-input.directive.mjs +164 -0
  441. package/esm2022/number-input/lib/number-input/number-input.module.mjs +21 -0
  442. package/esm2022/number-input/public-api.mjs +3 -0
  443. package/esm2022/number-input/seniorsistemas-angular-components-number-input.mjs +5 -0
  444. package/esm2022/numeric/lib/numeric.module.mjs +18 -0
  445. package/esm2022/numeric/lib/numeric.pipe.mjs +29 -0
  446. package/esm2022/numeric/lib/numeric.service.mjs +92 -0
  447. package/esm2022/numeric/public-api.mjs +4 -0
  448. package/esm2022/numeric/seniorsistemas-angular-components-numeric.mjs +5 -0
  449. package/esm2022/object-card/lib/object-card/elements/field/object-card-field.component.mjs +51 -0
  450. package/esm2022/object-card/lib/object-card/elements/main/object-card-main.component.mjs +87 -0
  451. package/esm2022/object-card/lib/object-card/object-card.component.mjs +171 -0
  452. package/esm2022/object-card/lib/object-card/object-card.module.mjs +24 -0
  453. package/esm2022/object-card/public-api.mjs +5 -0
  454. package/esm2022/object-card/seniorsistemas-angular-components-object-card.mjs +5 -0
  455. package/esm2022/paginator/lib/models/paginator.models.mjs +2 -0
  456. package/esm2022/paginator/lib/paginator/paginator.component.mjs +138 -0
  457. package/esm2022/paginator/public-api.mjs +2 -0
  458. package/esm2022/paginator/seniorsistemas-angular-components-paginator.mjs +5 -0
  459. package/esm2022/panel/lib/panel/panel.component.mjs +91 -0
  460. package/esm2022/panel/lib/panel/panel.module.mjs +20 -0
  461. package/esm2022/panel/public-api.mjs +3 -0
  462. package/esm2022/panel/seniorsistemas-angular-components-panel.mjs +5 -0
  463. package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +92 -0
  464. package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +210 -0
  465. package/esm2022/password-strength/lib/password-strength/password-strength.module.mjs +19 -0
  466. package/esm2022/password-strength/lib/password-strength/types/password-positions.mjs +2 -0
  467. package/esm2022/password-strength/lib/password-strength/types/password-strengths.mjs +2 -0
  468. package/esm2022/password-strength/public-api.mjs +4 -0
  469. package/esm2022/password-strength/seniorsistemas-angular-components-password-strength.mjs +5 -0
  470. package/esm2022/picklist/lib/picklist/picklist.component.mjs +299 -0
  471. package/esm2022/picklist/lib/picklist/picklist.module.mjs +36 -0
  472. package/esm2022/picklist/lib/picklist/types/index.mjs +2 -0
  473. package/esm2022/picklist/lib/picklist/types/picklist-item.mjs +2 -0
  474. package/esm2022/picklist/lib/picklist/types/picklist-template-types.mjs +2 -0
  475. package/esm2022/picklist/public-api.mjs +5 -0
  476. package/esm2022/picklist/seniorsistemas-angular-components-picklist.mjs +5 -0
  477. package/esm2022/product-header/lib/product-header/product-header.component.mjs +44 -0
  478. package/esm2022/product-header/lib/product-header/product-header.module.mjs +20 -0
  479. package/esm2022/product-header/public-api.mjs +3 -0
  480. package/esm2022/product-header/seniorsistemas-angular-components-product-header.mjs +5 -0
  481. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/confirmation-texts.mjs +2 -0
  482. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/cropper-labels-config.mjs +2 -0
  483. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/file-validation-errors.mjs +2 -0
  484. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/index.mjs +2 -0
  485. package/esm2022/profile-picture-picker/lib/profile-picture-picker/models/profile-picture-picker-data.mjs +2 -0
  486. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +277 -0
  487. package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.module.mjs +25 -0
  488. package/esm2022/profile-picture-picker/lib/profile-picture-picker/validators/index.mjs +2 -0
  489. package/esm2022/profile-picture-picker/lib/profile-picture-picker/validators/validators.mjs +28 -0
  490. package/esm2022/profile-picture-picker/public-api.mjs +4 -0
  491. package/esm2022/profile-picture-picker/seniorsistemas-angular-components-profile-picture-picker.mjs +5 -0
  492. package/esm2022/progressbar/lib/progressbar/components/progressbar-determinate/progressbar-determinate.component.mjs +60 -0
  493. package/esm2022/progressbar/lib/progressbar/components/progressbar-indeterminate/progressbar-indeterminate.component.mjs +19 -0
  494. package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +57 -0
  495. package/esm2022/progressbar/lib/progressbar/progressbar.module.mjs +21 -0
  496. package/esm2022/progressbar/lib/progressbar/types/index.mjs +2 -0
  497. package/esm2022/progressbar/lib/progressbar/types/progressbar-colors.mjs +2 -0
  498. package/esm2022/progressbar/lib/progressbar/types/progressbar-mode.mjs +2 -0
  499. package/esm2022/progressbar/public-api.mjs +4 -0
  500. package/esm2022/progressbar/seniorsistemas-angular-components-progressbar.mjs +5 -0
  501. package/esm2022/public-api.mjs +2 -0
  502. package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +82 -0
  503. package/esm2022/radio-button/lib/radio-button-group/models/radio-button-group.models.mjs +2 -0
  504. package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +62 -0
  505. package/esm2022/radio-button/lib/services/radio-button-registry.service.mjs +38 -0
  506. package/esm2022/radio-button/public-api.mjs +3 -0
  507. package/esm2022/radio-button/seniorsistemas-angular-components-radio-button.mjs +5 -0
  508. package/esm2022/rating-scale/lib/rating-scale/models/index.mjs +2 -0
  509. package/esm2022/rating-scale/lib/rating-scale/models/rating-scale-node.mjs +2 -0
  510. package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +54 -0
  511. package/esm2022/rating-scale/lib/rating-scale/rating-scale.module.mjs +24 -0
  512. package/esm2022/rating-scale/public-api.mjs +3 -0
  513. package/esm2022/rating-scale/seniorsistemas-angular-components-rating-scale.mjs +5 -0
  514. package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +27 -0
  515. package/esm2022/select/lib/select/select.component.mjs +712 -0
  516. package/esm2022/select/public-api.mjs +2 -0
  517. package/esm2022/select/seniorsistemas-angular-components-select.mjs +5 -0
  518. package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +28 -0
  519. package/esm2022/select-button/lib/select-button/models/select-button-item.mjs +2 -0
  520. package/esm2022/select-button/lib/select-button/select-button.component.mjs +122 -0
  521. package/esm2022/select-button/lib/select-button/select-button.module.mjs +23 -0
  522. package/esm2022/select-button/public-api.mjs +3 -0
  523. package/esm2022/select-button/seniorsistemas-angular-components-select-button.mjs +5 -0
  524. package/esm2022/seniorsistemas-angular-components.mjs +5 -0
  525. package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +19 -0
  526. package/esm2022/shared/lib/shared/border-button/border-button.module.mjs +19 -0
  527. package/esm2022/shared/lib/shared/helpers.mjs +31 -0
  528. package/esm2022/shared/lib/shared/models/border-button-options.mjs +2 -0
  529. package/esm2022/shared/lib/shared/models/severities.mjs +9 -0
  530. package/esm2022/shared/public-api.mjs +5 -0
  531. package/esm2022/shared/seniorsistemas-angular-components-shared.mjs +5 -0
  532. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +114 -0
  533. package/esm2022/sidebar/lib/sidebar/sidebar.module.mjs +20 -0
  534. package/esm2022/sidebar/public-api.mjs +3 -0
  535. package/esm2022/sidebar/seniorsistemas-angular-components-sidebar.mjs +5 -0
  536. package/esm2022/slide-panel/lib/slide-panel/slide-panel.component.mjs +137 -0
  537. package/esm2022/slide-panel/lib/slide-panel/slide-panel.module.mjs +20 -0
  538. package/esm2022/slide-panel/lib/slide-panel/slide-panel.service.mjs +26 -0
  539. package/esm2022/slide-panel/public-api.mjs +4 -0
  540. package/esm2022/slide-panel/seniorsistemas-angular-components-slide-panel.mjs +5 -0
  541. package/esm2022/slider/lib/slider/slider.component.mjs +601 -0
  542. package/esm2022/slider/lib/slider/slider.module.mjs +19 -0
  543. package/esm2022/slider/public-api.mjs +3 -0
  544. package/esm2022/slider/seniorsistemas-angular-components-slider.mjs +5 -0
  545. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +217 -0
  546. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.module.mjs +24 -0
  547. package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition.service.mjs +146 -0
  548. package/esm2022/speech-recognition/lib/speech-recognition/text-to-speech.service.mjs +81 -0
  549. package/esm2022/speech-recognition/public-api.mjs +5 -0
  550. package/esm2022/speech-recognition/seniorsistemas-angular-components-speech-recognition.mjs +5 -0
  551. package/esm2022/split-button/lib/split-button/models/index.mjs +2 -0
  552. package/esm2022/split-button/lib/split-button/models/split-button-option.mjs +2 -0
  553. package/esm2022/split-button/lib/split-button/models/split-button-type.mjs +2 -0
  554. package/esm2022/split-button/lib/split-button/split-button.component.mjs +64 -0
  555. package/esm2022/split-button/lib/split-button/split-button.module.mjs +18 -0
  556. package/esm2022/split-button/public-api.mjs +4 -0
  557. package/esm2022/split-button/seniorsistemas-angular-components-split-button.mjs +5 -0
  558. package/esm2022/star-rating/public-api.mjs +2 -0
  559. package/esm2022/star-rating/seniorsistemas-angular-components-star-rating.mjs +5 -0
  560. package/esm2022/star-rating/star-rating/star-rating-models.mjs +2 -0
  561. package/esm2022/star-rating/star-rating/star-rating.component.mjs +63 -0
  562. package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +119 -0
  563. package/esm2022/stats-card/lib/stats-card/stats-card.module.mjs +19 -0
  564. package/esm2022/stats-card/public-api.mjs +3 -0
  565. package/esm2022/stats-card/seniorsistemas-angular-components-stats-card.mjs +5 -0
  566. package/esm2022/steps/lib/steps/steps.component.mjs +122 -0
  567. package/esm2022/steps/lib/steps/steps.module.mjs +19 -0
  568. package/esm2022/steps/public-api.mjs +3 -0
  569. package/esm2022/steps/seniorsistemas-angular-components-steps.mjs +5 -0
  570. package/esm2022/structure/lib/structure/footer.component.mjs +14 -0
  571. package/esm2022/structure/lib/structure/header.component.mjs +14 -0
  572. package/esm2022/structure/lib/structure/structure.module.mjs +19 -0
  573. package/esm2022/structure/public-api.mjs +5 -0
  574. package/esm2022/structure/seniorsistemas-angular-components-structure.mjs +5 -0
  575. package/esm2022/switch/lib/switch/switch.component.mjs +93 -0
  576. package/esm2022/switch/lib/switch/switch.module.mjs +18 -0
  577. package/esm2022/switch/public-api.mjs +3 -0
  578. package/esm2022/switch/seniorsistemas-angular-components-switch.mjs +5 -0
  579. package/esm2022/table/lib/locale-utils.mjs +15 -0
  580. package/esm2022/table/lib/table/export-utils.mjs +112 -0
  581. package/esm2022/table/lib/table/navigation/navigation.directive.mjs +130 -0
  582. package/esm2022/table/lib/table/row-toggler/row-toggler.directive.mjs +38 -0
  583. package/esm2022/table/lib/table/table-column/index.mjs +3 -0
  584. package/esm2022/table/lib/table/table-column/models/badge-column.interface.mjs +2 -0
  585. package/esm2022/table/lib/table/table-column/models/badge-configs.interface.mjs +2 -0
  586. package/esm2022/table/lib/table/table-column/models/column-colors.mjs +2 -0
  587. package/esm2022/table/lib/table/table-column/models/column-values.interface.mjs +2 -0
  588. package/esm2022/table/lib/table/table-column/models/column.interface.mjs +2 -0
  589. package/esm2022/table/lib/table/table-column/models/dynamic-editable-grid.interface.mjs +2 -0
  590. package/esm2022/table/lib/table/table-column/models/enum-badge-colors.mjs +10 -0
  591. package/esm2022/table/lib/table/table-column/models/enum-column-field-type.mjs +13 -0
  592. package/esm2022/table/lib/table/table-column/models/index.mjs +11 -0
  593. package/esm2022/table/lib/table/table-column/models/locale-options.interface.mjs +2 -0
  594. package/esm2022/table/lib/table/table-column/models/number-locale-options.interface.mjs +2 -0
  595. package/esm2022/table/lib/table/table-column/table-columns.component.mjs +299 -0
  596. package/esm2022/table/lib/table/table-paging/index.mjs +3 -0
  597. package/esm2022/table/lib/table/table-paging/models/custom-action.interface.mjs +2 -0
  598. package/esm2022/table/lib/table/table-paging/models/index.mjs +2 -0
  599. package/esm2022/table/lib/table/table-paging/table-paging.component.mjs +321 -0
  600. package/esm2022/table/lib/table/table.module.mjs +27 -0
  601. package/esm2022/table/public-api.mjs +6 -0
  602. package/esm2022/table/seniorsistemas-angular-components-table.mjs +5 -0
  603. package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +151 -0
  604. package/esm2022/table-header/lib/table-header/table-header-checkox.module.mjs +20 -0
  605. package/esm2022/table-header/public-api.mjs +3 -0
  606. package/esm2022/table-header/seniorsistemas-angular-components-table-header.mjs +5 -0
  607. package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +36 -0
  608. package/esm2022/tabs/lib/tabs/tabs.component.mjs +51 -0
  609. package/esm2022/tabs/public-api.mjs +3 -0
  610. package/esm2022/tabs/seniorsistemas-angular-components-tabs.mjs +5 -0
  611. package/esm2022/template/lib/template/template.directive.mjs +22 -0
  612. package/esm2022/template/lib/template/template.module.mjs +17 -0
  613. package/esm2022/template/public-api.mjs +3 -0
  614. package/esm2022/template/seniorsistemas-angular-components-template.mjs +5 -0
  615. package/esm2022/text-area/lib/text-area/text-area.component.mjs +116 -0
  616. package/esm2022/text-area/lib/text-area.module.mjs +35 -0
  617. package/esm2022/text-area/public-api.mjs +3 -0
  618. package/esm2022/text-area/seniorsistemas-angular-components-text-area.mjs +5 -0
  619. package/esm2022/text-area-ia/lib/services/IAssist/iassist.service.mjs +77 -0
  620. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-input-data.mjs +3 -0
  621. package/esm2022/text-area-ia/lib/services/IAssist/models/iassist-response.mjs +3 -0
  622. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.component.mjs +150 -0
  623. package/esm2022/text-area-ia/lib/text-area-ia/text-area-ia.module.mjs +50 -0
  624. package/esm2022/text-area-ia/public-api.mjs +3 -0
  625. package/esm2022/text-area-ia/seniorsistemas-angular-components-text-area-ia.mjs +5 -0
  626. package/esm2022/thumbnail/lib/thumbnail/thumbnail-size.mjs +2 -0
  627. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +77 -0
  628. package/esm2022/thumbnail/lib/thumbnail/thumbnail.module.mjs +20 -0
  629. package/esm2022/thumbnail/lib/thumbnail/thumbnail.service.mjs +62 -0
  630. package/esm2022/thumbnail/public-api.mjs +4 -0
  631. package/esm2022/thumbnail/seniorsistemas-angular-components-thumbnail.mjs +5 -0
  632. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-image/thumbnail-item-image.component.mjs +17 -0
  633. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/components/thumbnail-item-video/thumbnail-item-video.component.mjs +42 -0
  634. package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +64 -0
  635. package/esm2022/thumbnails/lib/thumbnails/models/thumbnails-item.mjs +2 -0
  636. package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +48 -0
  637. package/esm2022/thumbnails/lib/thumbnails/thumbnails.module.mjs +24 -0
  638. package/esm2022/thumbnails/public-api.mjs +3 -0
  639. package/esm2022/thumbnails/seniorsistemas-angular-components-thumbnails.mjs +5 -0
  640. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +303 -0
  641. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
  642. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +73 -0
  643. package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +179 -0
  644. package/esm2022/tiered-menu/lib/tiered-menu/models/index.mjs +2 -0
  645. package/esm2022/tiered-menu/lib/tiered-menu/models/tiered-menu-item-data.mjs +2 -0
  646. package/esm2022/tiered-menu/lib/tiered-menu/models/tiered-menu-item-internal-data.mjs +2 -0
  647. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.event.service.mjs +17 -0
  648. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +11 -0
  649. package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.service.mjs +54 -0
  650. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +234 -0
  651. package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.module.mjs +34 -0
  652. package/esm2022/tiered-menu/public-api.mjs +6 -0
  653. package/esm2022/tiered-menu/seniorsistemas-angular-components-tiered-menu.mjs +5 -0
  654. package/esm2022/tile/lib/tile/tile.component.mjs +65 -0
  655. package/esm2022/tile/lib/tile/tile.module.mjs +20 -0
  656. package/esm2022/tile/public-api.mjs +3 -0
  657. package/esm2022/tile/seniorsistemas-angular-components-tile.mjs +5 -0
  658. package/esm2022/timeline/lib/timeline/components/horizontal-timeline/horizontal-timeline.component.mjs +24 -0
  659. package/esm2022/timeline/lib/timeline/components/horizontal-timeline/horizontal-timeline.module.mjs +20 -0
  660. package/esm2022/timeline/lib/timeline/components/timeline-icon-item/timeline-icon-item.component.mjs +26 -0
  661. package/esm2022/timeline/lib/timeline/components/timeline-icon-item/timeline-icon-item.module.mjs +19 -0
  662. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/collapse-option/collapse-option.component.mjs +21 -0
  663. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/collapsed-items/collapsed-items.component.mjs +33 -0
  664. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/range-line/range-line.component.mjs +11 -0
  665. package/esm2022/timeline/lib/timeline/components/vertical-timeline/components/vertical-items/vertical-items.component.mjs +29 -0
  666. package/esm2022/timeline/lib/timeline/components/vertical-timeline/vertical-timeline.component.mjs +60 -0
  667. package/esm2022/timeline/lib/timeline/components/vertical-timeline/vertical-timeline.module.mjs +33 -0
  668. package/esm2022/timeline/lib/timeline/models/timeline-item-severity.mjs +7 -0
  669. package/esm2022/timeline/lib/timeline/models/timeline-item-size.mjs +6 -0
  670. package/esm2022/timeline/lib/timeline/models/timeline-item.mjs +44 -0
  671. package/esm2022/timeline/lib/timeline/timeline.component.mjs +66 -0
  672. package/esm2022/timeline/lib/timeline/timeline.module.mjs +32 -0
  673. package/esm2022/timeline/public-api.mjs +6 -0
  674. package/esm2022/timeline/seniorsistemas-angular-components-timeline.mjs +5 -0
  675. package/esm2022/toast/lib/toast/toast.component.mjs +46 -0
  676. package/esm2022/toast/lib/toast/toast.module.mjs +17 -0
  677. package/esm2022/toast/lib/toast/toast.service.mjs +68 -0
  678. package/esm2022/toast/lib/toast/types/toast.mjs +2 -0
  679. package/esm2022/toast/public-api.mjs +4 -0
  680. package/esm2022/toast/seniorsistemas-angular-components-toast.mjs +5 -0
  681. package/esm2022/token-list/lib/token-list/models/index.mjs +2 -0
  682. package/esm2022/token-list/lib/token-list/models/token.mjs +2 -0
  683. package/esm2022/token-list/lib/token-list/token-list.component.mjs +42 -0
  684. package/esm2022/token-list/lib/token-list/token-list.module.mjs +18 -0
  685. package/esm2022/token-list/public-api.mjs +4 -0
  686. package/esm2022/token-list/seniorsistemas-angular-components-token-list.mjs +5 -0
  687. package/esm2022/tooltip/lib/tooltip/models/mobile-behavior.mjs +2 -0
  688. package/esm2022/tooltip/lib/tooltip/models/tooltip-event.mjs +2 -0
  689. package/esm2022/tooltip/lib/tooltip/models/tooltip-position.mjs +2 -0
  690. package/esm2022/tooltip/lib/tooltip/tooltip.component.mjs +18 -0
  691. package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +339 -0
  692. package/esm2022/tooltip/lib/tooltip/tooltip.module.mjs +19 -0
  693. package/esm2022/tooltip/public-api.mjs +3 -0
  694. package/esm2022/tooltip/seniorsistemas-angular-components-tooltip.mjs +5 -0
  695. package/esm2022/utils/lib/utils/breakpoints.mjs +11 -0
  696. package/esm2022/utils/lib/utils/utils.mjs +51 -0
  697. package/esm2022/utils/public-api.mjs +3 -0
  698. package/esm2022/utils/seniorsistemas-angular-components-utils.mjs +5 -0
  699. package/esm2022/workspace-switch/lib/workspace-switch/models/index.mjs +2 -0
  700. package/esm2022/workspace-switch/lib/workspace-switch/models/workspace.mjs +2 -0
  701. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +137 -0
  702. package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.module.mjs +18 -0
  703. package/esm2022/workspace-switch/public-api.mjs +3 -0
  704. package/esm2022/workspace-switch/seniorsistemas-angular-components-workspace-switch.mjs +5 -0
  705. package/fesm2022/seniorsistemas-angular-components-accordion.mjs +10 -10
  706. package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
  707. package/fesm2022/seniorsistemas-angular-components-alert.mjs +7 -7
  708. package/fesm2022/seniorsistemas-angular-components-badge.mjs +7 -7
  709. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +7 -7
  710. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +7 -7
  711. package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -7
  712. package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
  713. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -7
  714. package/fesm2022/seniorsistemas-angular-components-card.mjs +7 -7
  715. package/fesm2022/seniorsistemas-angular-components-chat.mjs +10 -10
  716. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -7
  717. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +3 -3
  718. package/fesm2022/seniorsistemas-angular-components-chips.mjs +10 -10
  719. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  720. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +11 -11
  721. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -7
  722. package/fesm2022/seniorsistemas-angular-components-common.mjs +20 -20
  723. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +6 -6
  724. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -7
  725. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +10 -10
  726. package/fesm2022/seniorsistemas-angular-components-currency.mjs +3 -3
  727. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +10 -10
  728. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +9 -9
  729. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  730. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +125 -119
  731. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  732. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -7
  733. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +10 -10
  734. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +9 -10
  735. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  736. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +10 -10
  737. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +10 -10
  738. package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
  739. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +10 -10
  740. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +10 -10
  741. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +10 -10
  742. package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs +16 -16
  743. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +10 -10
  744. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -7
  745. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +10 -10
  746. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
  747. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +28 -28
  748. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  749. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +7 -3
  750. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  751. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +19 -19
  752. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -7
  753. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +16 -16
  754. package/fesm2022/seniorsistemas-angular-components-locale.mjs +34 -34
  755. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +7 -7
  756. package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -7
  757. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +10 -10
  758. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +8 -8
  759. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
  760. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +7 -7
  761. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +10 -10
  762. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +13 -13
  763. package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
  764. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +3 -3
  765. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  766. package/fesm2022/seniorsistemas-angular-components-panel.mjs +7 -7
  767. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +10 -10
  768. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -7
  769. package/fesm2022/seniorsistemas-angular-components-product-header.mjs +7 -7
  770. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -7
  771. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +13 -13
  772. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +182 -0
  773. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -0
  774. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -7
  775. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +10 -10
  776. package/fesm2022/seniorsistemas-angular-components-select.mjs +6 -6
  777. package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -7
  778. package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
  779. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +42 -23
  780. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  781. package/fesm2022/seniorsistemas-angular-components-slide-panel.mjs +10 -10
  782. package/fesm2022/seniorsistemas-angular-components-slider.mjs +8 -8
  783. package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
  784. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +13 -13
  785. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -7
  786. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +4 -4
  787. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  788. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -7
  789. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
  790. package/fesm2022/seniorsistemas-angular-components-steps.mjs +7 -7
  791. package/fesm2022/seniorsistemas-angular-components-steps.mjs.map +1 -1
  792. package/fesm2022/seniorsistemas-angular-components-structure.mjs +11 -11
  793. package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
  794. package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -7
  795. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -7
  796. package/fesm2022/seniorsistemas-angular-components-table.mjs +16 -16
  797. package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
  798. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +91 -0
  799. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -0
  800. package/fesm2022/seniorsistemas-angular-components-template.mjs +12 -15
  801. package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
  802. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +10 -10
  803. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +7 -7
  804. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +10 -10
  805. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +16 -16
  806. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +54 -92
  807. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  808. package/fesm2022/seniorsistemas-angular-components-tile.mjs +7 -7
  809. package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
  810. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +40 -40
  811. package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
  812. package/fesm2022/seniorsistemas-angular-components-toast.mjs +10 -10
  813. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -7
  814. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +24 -14
  815. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
  816. package/fesm2022/seniorsistemas-angular-components-utils.mjs +13 -4
  817. package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
  818. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -7
  819. package/fesm2022/seniorsistemas-angular-components.mjs +1 -0
  820. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  821. package/fieldset/lib/fieldset/fieldset.component.d.ts +1 -1
  822. package/fieldset/lib/fieldset/fieldset.module.d.ts +1 -2
  823. package/index.d.ts +5 -0
  824. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +2 -1
  825. package/lib/locale/fallback.d.ts +1 -0
  826. package/package.json +13 -89
  827. package/public-api.d.ts +1 -0
  828. package/radio-button/index.d.ts +5 -0
  829. package/radio-button/lib/radio-button/radio-button.component.d.ts +31 -0
  830. package/radio-button/lib/radio-button-group/models/radio-button-group.models.d.ts +5 -0
  831. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +25 -0
  832. package/radio-button/lib/services/radio-button-registry.service.d.ts +12 -0
  833. package/radio-button/public-api.d.ts +3 -0
  834. package/select/index.d.ts +5 -0
  835. package/select/lib/select/components/select-option/select-option.component.d.ts +14 -0
  836. package/select/lib/select/select.component.d.ts +275 -0
  837. package/select/public-api.d.ts +1 -0
  838. package/sidebar/lib/sidebar/sidebar.component.d.ts +7 -6
  839. package/src/lib/styles/tailwind.scss +4 -0
  840. package/tabs/index.d.ts +5 -0
  841. package/tabs/lib/tab-item/tab-item.component.d.ts +18 -0
  842. package/tabs/lib/tabs/tabs.component.d.ts +16 -0
  843. package/tabs/public-api.d.ts +2 -0
  844. package/tailwind.css +455 -414
  845. package/template/lib/template/template.directive.d.ts +2 -3
  846. package/template/lib/template/template.module.d.ts +3 -3
  847. package/tooltip/lib/tooltip/tooltip.directive.d.ts +4 -2
  848. package/tooltip/lib/tooltip/tooltip.module.d.ts +3 -3
  849. package/utils/lib/utils/utils.d.ts +2 -0
  850. package/accordion/package.json +0 -3
  851. package/alert/package.json +0 -3
  852. package/badge/package.json +0 -3
  853. package/bignumber-input/package.json +0 -3
  854. package/breadcrumb/package.json +0 -3
  855. package/button/package.json +0 -3
  856. package/calendar-mask/package.json +0 -3
  857. package/card/package.json +0 -3
  858. package/chat/package.json +0 -3
  859. package/checkbox/package.json +0 -3
  860. package/checkbox-list/package.json +0 -3
  861. package/chips/package.json +0 -3
  862. package/code-editor/package.json +0 -3
  863. package/collapse-link/package.json +0 -3
  864. package/common/package.json +0 -3
  865. package/confirm-dialog/package.json +0 -3
  866. package/control-errors/package.json +0 -3
  867. package/country-phone-picker/package.json +0 -3
  868. package/currency/package.json +0 -3
  869. package/custom-fields/package.json +0 -3
  870. package/dialog/package.json +0 -3
  871. package/dynamic-form/package.json +0 -3
  872. package/editable-overlay/package.json +0 -3
  873. package/empty-state/package.json +0 -3
  874. package/fieldset/package.json +0 -3
  875. package/file-upload/package.json +0 -3
  876. package/gantt/package.json +0 -3
  877. package/global-search/package.json +0 -3
  878. package/grid-menu/package.json +0 -3
  879. package/help-popover/package.json +0 -3
  880. package/ia-insight/package.json +0 -3
  881. package/image-cropper/package.json +0 -3
  882. package/infinite-scroll/package.json +0 -3
  883. package/info-sign/package.json +0 -3
  884. package/inline-edit/package.json +0 -3
  885. package/interactive-content/package.json +0 -3
  886. package/kanban/package.json +0 -3
  887. package/label-value/package.json +0 -3
  888. package/loading-state/package.json +0 -3
  889. package/locale/package.json +0 -3
  890. package/localized-number-input/package.json +0 -3
  891. package/mask/package.json +0 -3
  892. package/mouse-events/package.json +0 -3
  893. package/navigation-button/package.json +0 -3
  894. package/number-input/package.json +0 -3
  895. package/numeric/package.json +0 -3
  896. package/object-card/package.json +0 -3
  897. package/paginator/package.json +0 -3
  898. package/panel/package.json +0 -3
  899. package/password-strength/package.json +0 -3
  900. package/picklist/package.json +0 -3
  901. package/product-header/package.json +0 -3
  902. package/profile-picture-picker/package.json +0 -3
  903. package/progressbar/package.json +0 -3
  904. package/rating-scale/package.json +0 -3
  905. package/select-button/package.json +0 -3
  906. package/shared/package.json +0 -3
  907. package/sidebar/package.json +0 -3
  908. package/slide-panel/package.json +0 -3
  909. package/slider/package.json +0 -3
  910. package/speech-recognition/package.json +0 -3
  911. package/split-button/package.json +0 -3
  912. package/star-rating/package.json +0 -3
  913. package/stats-card/package.json +0 -3
  914. package/steps/package.json +0 -3
  915. package/structure/package.json +0 -3
  916. package/switch/package.json +0 -3
  917. package/table/package.json +0 -3
  918. package/table-header/package.json +0 -3
  919. package/template/package.json +0 -3
  920. package/text-area/package.json +0 -3
  921. package/text-area-ia/package.json +0 -3
  922. package/thumbnail/package.json +0 -3
  923. package/thumbnails/package.json +0 -3
  924. package/tiered-menu/lib/tiered-menu/utils.d.ts +0 -2
  925. package/tiered-menu/package.json +0 -3
  926. package/tile/package.json +0 -3
  927. package/timeline/package.json +0 -3
  928. package/toast/package.json +0 -3
  929. package/token-list/package.json +0 -3
  930. package/tooltip/package.json +0 -3
  931. package/utils/package.json +0 -3
  932. package/workspace-switch/package.json +0 -3
@@ -0,0 +1,690 @@
1
+ import { HttpEventType } from '@angular/common/http';
2
+ import { Component, Input, Optional, } from '@angular/core';
3
+ import { FormArray, FormControl, FormGroup, NG_VALIDATORS, NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
4
+ import BigNumber from 'bignumber.js';
5
+ import { Subject, forkJoin, of, throwError } from 'rxjs';
6
+ import { catchError, finalize, takeUntil } from 'rxjs/operators';
7
+ import { DynamicType, FieldType, FormField, NumberField, NumberFieldComponent } from '@seniorsistemas/angular-components/dynamic-form';
8
+ import moment from 'moment';
9
+ import { CustomFieldType } from './models/custom-field-type';
10
+ import * as i0 from "@angular/core";
11
+ import * as i1 from "./custom-fields.service";
12
+ import * as i2 from "@seniorsistemas/angular-components/locale";
13
+ import * as i3 from "@angular/platform-browser";
14
+ import * as i4 from "@ngx-translate/core";
15
+ import * as i5 from "@angular/forms";
16
+ import * as i6 from "@seniorsistemas/angular-components/dynamic-form";
17
+ export class CustomFieldsComponent {
18
+ customFieldsService;
19
+ localeService;
20
+ sanitizer;
21
+ translateService;
22
+ controlContainer;
23
+ domain;
24
+ service;
25
+ entity;
26
+ invalidErrorLabel = '';
27
+ entityObject;
28
+ customFieldsEndpoint = 'platform/field_customization/queries/getEntity';
29
+ fileLocationEndpoint = 'platform/field_customization/actions/requestUpload';
30
+ requestAccessEndpoint = 'platform/field_customization/actions/requestAccess';
31
+ requiredErrorMessage = '';
32
+ displayTimeInfoSign = 0;
33
+ showFileUploadDate = false;
34
+ ready$ = null;
35
+ disableFields;
36
+ rowType = DynamicType.Row;
37
+ fields = [];
38
+ formGroup = new FormGroup({});
39
+ ready = false;
40
+ onChange;
41
+ onTouched;
42
+ value;
43
+ ngUsubscribe = new Subject();
44
+ uploadCanceled;
45
+ hasBlob;
46
+ hasUploaded;
47
+ constructor(customFieldsService, localeService, sanitizer, translateService, controlContainer) {
48
+ this.customFieldsService = customFieldsService;
49
+ this.localeService = localeService;
50
+ this.sanitizer = sanitizer;
51
+ this.translateService = translateService;
52
+ this.controlContainer = controlContainer;
53
+ this.invalidErrorLabel = this.translateService.instant('platform.angular_components.invalid_value');
54
+ }
55
+ get hasCustomFields() {
56
+ return !!this.fields?.length;
57
+ }
58
+ get parentForm() {
59
+ return this.controlContainer.control;
60
+ }
61
+ get parentControl() {
62
+ return this.parentForm.get('custom');
63
+ }
64
+ ngOnInit() {
65
+ this._validateInputs();
66
+ this._createForm();
67
+ this.addDisplayTimeInfoSignToFields();
68
+ }
69
+ ngAfterViewInit() {
70
+ this.enableOrDisableFields(!!this.disableFields);
71
+ this.formGroup.valueChanges.subscribe(() => this.onChange?.(this.parseFieldsValues()));
72
+ }
73
+ ngOnChanges(changes) {
74
+ const _disableFields = changes['disableFields'];
75
+ if (_disableFields) {
76
+ this.enableOrDisableFields(_disableFields.currentValue);
77
+ }
78
+ }
79
+ ngOnDestroy() {
80
+ this.ngUsubscribe.next();
81
+ this.ngUsubscribe.complete();
82
+ }
83
+ registerOnChange(fn) {
84
+ this.onChange = fn;
85
+ }
86
+ registerOnTouched(fn) {
87
+ this.onTouched = fn;
88
+ }
89
+ writeValue(value) {
90
+ if (this.ready) {
91
+ const newValue = this.parseValuesForFields(value);
92
+ this.formGroup.patchValue(newValue);
93
+ this.value = newValue;
94
+ this.createFilesIfSetFormValuesAfterInit();
95
+ }
96
+ else {
97
+ this.formGroup.patchValue(value || {});
98
+ this.value = value;
99
+ }
100
+ }
101
+ setDisabledState(isDisabled) {
102
+ if (isDisabled) {
103
+ this.formGroup.disable({ emitEvent: false });
104
+ }
105
+ else {
106
+ this.formGroup.enable({ emitEvent: false });
107
+ }
108
+ }
109
+ getCustomFields() {
110
+ if (this.entityObject?.entity_) {
111
+ return of(this.entityObject);
112
+ }
113
+ return this.customFieldsService.getCustomFields(this.domain, this.service, this.entity, this.customFieldsEndpoint);
114
+ }
115
+ validate() {
116
+ const errors = {};
117
+ Object.keys(this.formGroup.controls).forEach((field) => {
118
+ const { errors: controlErrors } = this.formGroup.get(field);
119
+ if (controlErrors) {
120
+ errors[field] = controlErrors;
121
+ }
122
+ });
123
+ return errors;
124
+ }
125
+ cleanFields() {
126
+ this.formGroup.reset();
127
+ }
128
+ enableOrDisableFields(disabled) {
129
+ if (!this.formGroup) {
130
+ return;
131
+ }
132
+ for (const controlName of Object.keys(this.formGroup.value)) {
133
+ disabled ? this.formGroup.get(controlName)?.disable() : this.formGroup.get(controlName)?.enable();
134
+ }
135
+ }
136
+ _validateInputs() {
137
+ if (!this.domain) {
138
+ throw new Error('You need to specify the custom-fields domain!');
139
+ }
140
+ if (!this.service) {
141
+ throw new Error('You need to specify the custom-fields service!');
142
+ }
143
+ if (!this.entity) {
144
+ throw new Error('You need to specify the custom-fields entity!');
145
+ }
146
+ }
147
+ _createForm() {
148
+ this.formGroup = new FormGroup({});
149
+ const observables = [this.getCustomFields(), this.localeService.get()];
150
+ forkJoin(observables)
151
+ .pipe(takeUntil(this.ngUsubscribe), finalize(() => {
152
+ this.formGroup.markAsPristine();
153
+ this.parentControl?.markAsPristine();
154
+ if (this.ready$) {
155
+ this.ready$.next(true);
156
+ }
157
+ }))
158
+ .subscribe((response) => {
159
+ const [customFieldsResponse, localeOptions] = response;
160
+ const defaults = {};
161
+ defaults[CustomFieldType.String] = {};
162
+ defaults[CustomFieldType.Boolean] = { defaultValue: false };
163
+ defaults[CustomFieldType.Integer] = {};
164
+ defaults[CustomFieldType.Double] = { defaultMask: '' };
165
+ defaults[CustomFieldType.Money] = {};
166
+ defaults[CustomFieldType.Date] = {};
167
+ defaults[CustomFieldType.DateTime] = {};
168
+ defaults[CustomFieldType.LocalDateTime] = {};
169
+ defaults[CustomFieldType.Time] = {};
170
+ defaults[CustomFieldType.Blob] = {};
171
+ defaults[CustomFieldType.Enum] = {};
172
+ defaults[CustomFieldType.Binary] = {};
173
+ defaults[CustomFieldType.Any] = {};
174
+ if (!customFieldsResponse || !customFieldsResponse.entity_) {
175
+ return;
176
+ }
177
+ const { active, fields } = customFieldsResponse.entity_;
178
+ if (!active) {
179
+ return;
180
+ }
181
+ fields
182
+ .filter((field) => field.customizable && field.customization?.active)
183
+ .forEach((field) => {
184
+ const formField = this.getFormField(field, localeOptions);
185
+ const fieldType = field.type;
186
+ if (field.type === CustomFieldType.Blob && this.value[formField.name]) {
187
+ this.createBlobToFileUpload(formField);
188
+ }
189
+ const { validationRegex } = field.customization;
190
+ const asIsTypes = [
191
+ CustomFieldType.Boolean,
192
+ CustomFieldType.Money,
193
+ CustomFieldType.Date,
194
+ CustomFieldType.DateTime,
195
+ CustomFieldType.LocalDateTime,
196
+ CustomFieldType.Time,
197
+ ];
198
+ const validators = [];
199
+ if (validationRegex && !asIsTypes.includes(fieldType)) {
200
+ validators.push(Validators.pattern(validationRegex));
201
+ }
202
+ if (fieldType === CustomFieldType.Integer && !formField.mask) {
203
+ validators.push(Validators.pattern(/^\-?\d*$/));
204
+ }
205
+ if (formField.required?.()) {
206
+ validators.push(Validators.required);
207
+ }
208
+ const control = new FormControl({ value: defaults[fieldType].defaultValue, disabled: this.formGroup.disabled }, validators);
209
+ this.formGroup.addControl(formField.name, control);
210
+ this.fields.push(formField);
211
+ });
212
+ this.createFieldCustomization(fields);
213
+ this.formGroup.patchValue(this.parseValuesForFields(this.value));
214
+ this.ready = true;
215
+ });
216
+ }
217
+ parseValuesForFields(values) {
218
+ const parsedValues = { ...values };
219
+ this.fields.forEach((field) => {
220
+ const type = field.type;
221
+ const name = field.name;
222
+ const value = values?.[name];
223
+ /**
224
+ * Tratamento exclusivo para campos boolean que tem o status Empty
225
+ * Essa condicional necessita estar antes do if (!value) return;
226
+ * Pois ela tem um status que usa null no valor do campo radio boolean
227
+ */
228
+ if (type === FieldType.Boolean) {
229
+ const isString = typeof value === 'string';
230
+ const notValid = !isString && typeof value !== 'boolean';
231
+ if (notValid) {
232
+ parsedValues[name] = null;
233
+ }
234
+ else {
235
+ // Condicional para campos que retornam string de boolen do backand
236
+ if (isString) {
237
+ parsedValues[name] = value === 'true' ? true : false;
238
+ }
239
+ else {
240
+ parsedValues[name] = value;
241
+ }
242
+ }
243
+ }
244
+ if (!value) {
245
+ return;
246
+ }
247
+ switch (type) {
248
+ case FieldType.Date:
249
+ parsedValues[name] = moment(value).toDate();
250
+ break;
251
+ case FieldType.DateTime:
252
+ parsedValues[name] = moment(value).toDate();
253
+ break;
254
+ case FieldType.LocalDateTime:
255
+ parsedValues[name] = moment(value, 'YYYY-MM-DD[T]HH:mm:ss.SSS').toDate();
256
+ break;
257
+ case FieldType.Time:
258
+ parsedValues[name] = moment(value, 'HH:mm:ss').toDate();
259
+ break;
260
+ default:
261
+ break;
262
+ }
263
+ });
264
+ return parsedValues;
265
+ }
266
+ /**
267
+ * Algumas equipes só setam valor no formulário, após o carregamento da tela
268
+ * Como é bem padrão isso, foi necessário criar esse método para gerar o file
269
+ * após setar o valor no formulário
270
+ */
271
+ createFilesIfSetFormValuesAfterInit() {
272
+ if (!this.hasUploaded) {
273
+ this.fields
274
+ .filter((field) => field.type === FieldType.Blob)
275
+ .forEach((field) => {
276
+ if (this.formGroup.get(field.name)?.value) {
277
+ this.createBlobToFileUpload(field);
278
+ }
279
+ });
280
+ }
281
+ }
282
+ parseFieldsValues() {
283
+ const parsedValues = {};
284
+ this.fields.forEach((field) => {
285
+ const { type, mask, scale } = field;
286
+ const name = field.name;
287
+ let value = this.formGroup.get(name)?.value;
288
+ if (value) {
289
+ switch (type) {
290
+ case FieldType.Number:
291
+ if (mask)
292
+ value = new BigNumber(value).toFixed(scale).toString();
293
+ break;
294
+ case FieldType.Date:
295
+ value = moment(value).format('YYYY-MM-DD');
296
+ break;
297
+ case FieldType.DateTime:
298
+ value = moment(value).format();
299
+ break;
300
+ case FieldType.LocalDateTime:
301
+ value = moment(value).format('YYYY-MM-DD[T]HH:mm:ss.SSS');
302
+ break;
303
+ case FieldType.Time:
304
+ value = moment(value).format('HH:mm:ss');
305
+ break;
306
+ default:
307
+ break;
308
+ }
309
+ }
310
+ if ((value === null || value === undefined) && this.isTypeNumberOrEnum(type)) {
311
+ parsedValues[name] = field.multiple ? [] : null;
312
+ }
313
+ else {
314
+ parsedValues[name] = value;
315
+ }
316
+ });
317
+ if (this.hasBlob) {
318
+ parsedValues['fieldCustomization'] = this.formGroup.get('fieldCustomization')?.value;
319
+ }
320
+ return parsedValues;
321
+ }
322
+ isTypeNumberOrEnum(type) {
323
+ const numberOrEnum = [FieldType.Number, FieldType.Enum];
324
+ return numberOrEnum.includes(type);
325
+ }
326
+ getFormField(field, localeOptions) {
327
+ let parameters = {};
328
+ switch (field.type) {
329
+ case CustomFieldType.Blob:
330
+ parameters = this.getBlobParameters();
331
+ break;
332
+ case CustomFieldType.Boolean:
333
+ parameters = this.getBooleanParameters();
334
+ break;
335
+ case 'Enumeration':
336
+ case CustomFieldType.Enum:
337
+ field.type = FieldType.Enum;
338
+ parameters = this.getEnumParameters(field);
339
+ break;
340
+ case CustomFieldType.Money:
341
+ parameters = {
342
+ type: FieldType.Custom,
343
+ CustomFieldComponentClass: NumberFieldComponent,
344
+ CustomFieldClass: NumberField,
345
+ precision: 15,
346
+ scale: 2,
347
+ leftAddon: {
348
+ label: localeOptions?.number?.currencySymbol ?? 'R$',
349
+ },
350
+ ignoreLabel: true,
351
+ };
352
+ break;
353
+ case CustomFieldType.Double:
354
+ parameters = {
355
+ type: FieldType.Custom,
356
+ CustomFieldComponentClass: NumberFieldComponent,
357
+ CustomFieldClass: NumberField,
358
+ precision: 15,
359
+ scale: 2,
360
+ ignoreLabel: true,
361
+ };
362
+ break;
363
+ case CustomFieldType.Integer:
364
+ parameters = {
365
+ type: FieldType.Custom,
366
+ CustomFieldComponentClass: NumberFieldComponent,
367
+ CustomFieldClass: NumberField,
368
+ precision: 15,
369
+ scale: 0,
370
+ ignoreLabel: true,
371
+ };
372
+ break;
373
+ case CustomFieldType.Any:
374
+ field.type = FieldType.String;
375
+ break;
376
+ }
377
+ return new FormField({
378
+ name: field.id,
379
+ label: field.customization.label,
380
+ tooltip: field.customization.tooltip,
381
+ infoSign: field.customization.infoSign,
382
+ type: field.type,
383
+ mask: field.customization.mask,
384
+ required: () => field.customization.mandatory,
385
+ calendarOptions: localeOptions.calendar,
386
+ currencyOptions: localeOptions.number,
387
+ ...parameters,
388
+ });
389
+ }
390
+ getEnumParameters(field) {
391
+ return {
392
+ showClear: true,
393
+ multiple: field.customization.customEnumeration.multiple,
394
+ options: field.customization.customEnumeration.values.map((e) => ({ label: e.value, value: e.key })),
395
+ };
396
+ }
397
+ getBooleanParameters() {
398
+ return {
399
+ optionsLabel: {
400
+ true: this.getTranslateLabel(`true_label`),
401
+ false: this.getTranslateLabel(`false_label`),
402
+ empty: this.getTranslateLabel(`empty_label`),
403
+ },
404
+ };
405
+ }
406
+ getBlobParameters() {
407
+ return {
408
+ size: {
409
+ sm: 12,
410
+ md: 12,
411
+ lg: 12,
412
+ xl: 12,
413
+ },
414
+ accept: 'image/*, application/*, text/*',
415
+ chooseLabel: this.getTranslateLabel(`choose_label`),
416
+ removeLabel: this.getTranslateLabel(`remove_label`),
417
+ cancelLabel: this.getTranslateLabel(`cancel_label`),
418
+ successTooltip: this.getTranslateLabel(`success_tooltip`),
419
+ multiple: false,
420
+ onUploadFile: (event, formfield) => {
421
+ this.hasUploaded = true;
422
+ this.uploadFile(event, formfield);
423
+ },
424
+ onRemoveFile: (event, formfield) => {
425
+ this.removeFile(event, formfield);
426
+ },
427
+ onCancelUpload: (event, formfield) => {
428
+ this.cancelUpload(event, formfield);
429
+ },
430
+ onDownloadFile: (event, formfield) => {
431
+ this.downloadFile(event, formfield);
432
+ },
433
+ showFileUploadDate: this.showFileUploadDate,
434
+ };
435
+ }
436
+ /**
437
+ * É necessário criar o fieldCustomization quando há um Blob na entidade para gerar o
438
+ * com os fields inseridos e deletados.
439
+ */
440
+ createFieldCustomization(fields) {
441
+ this.hasBlob = !!fields.filter((field) => field.type === CustomFieldType.Blob).length;
442
+ if (this.hasBlob) {
443
+ this.formGroup.addControl('fieldCustomization', new FormArray([
444
+ new FormGroup({
445
+ domain: new FormControl(this.domain),
446
+ service: new FormControl(this.service),
447
+ entity: new FormControl(this.entity),
448
+ toDelete: new FormControl({ value: {}, disabled: false }),
449
+ toInsert: new FormControl({ value: {}, disabled: false }),
450
+ }),
451
+ ]));
452
+ }
453
+ }
454
+ createBlobToFileUpload(field) {
455
+ const _name = field.name;
456
+ const objectId = this.value[_name] ? this.value[_name] : this.formGroup.get(_name)?.value;
457
+ const fileName = objectId.substring(objectId.lastIndexOf('/') + 1);
458
+ const file = { objectId, name: fileName, savedFile: true };
459
+ field.files = [file];
460
+ }
461
+ downloadFile(event, field) {
462
+ const { index, anchor } = event;
463
+ const _files = field.files || [];
464
+ if (!_files.length) {
465
+ return;
466
+ }
467
+ const currentFile = _files[index];
468
+ if (currentFile.objectURL) {
469
+ anchor.nativeElement.click();
470
+ }
471
+ else {
472
+ const _objectId = currentFile.objectId;
473
+ this.customFieldsService
474
+ .requestAccess(_objectId, this.requestAccessEndpoint)
475
+ .pipe(takeUntil(this.ngUsubscribe))
476
+ .subscribe((data) => {
477
+ const { fileName, uri } = data;
478
+ this.customFieldsService
479
+ .getFile(uri)
480
+ .pipe(takeUntil(this.ngUsubscribe))
481
+ .subscribe((blob) => {
482
+ const newFile = new File([blob], fileName);
483
+ newFile.objectURL = this.sanitizer.bypassSecurityTrustUrl(uri);
484
+ anchor.nativeElement.setAttribute('href', uri);
485
+ newFile.objectId = currentFile.objectId;
486
+ newFile.savedFile = true;
487
+ _files[index] = newFile;
488
+ field.files = [..._files];
489
+ anchor.nativeElement.click();
490
+ });
491
+ });
492
+ }
493
+ }
494
+ uploadFile(event, formField) {
495
+ const { files } = event;
496
+ const field = this.fields.find((record) => record.name === formField.name);
497
+ if (!field) {
498
+ return;
499
+ }
500
+ // Se ocorrer um upload, já existindo um arquivo com upload feito. É necessário excluir o mesmo.
501
+ if (field?.files?.length) {
502
+ this.removeFile({ file: field.files[0] }, field);
503
+ }
504
+ field.files = files;
505
+ const _name = field.name;
506
+ for (let i = 0; i < files.length; i++) {
507
+ const file = files[i];
508
+ if (!file.savedFile && !file.progress) {
509
+ file.isUploading = true;
510
+ this.formGroup.get(_name)?.setValidators(isUploading(file));
511
+ this.formGroup.get(_name)?.updateValueAndValidity();
512
+ this.customFieldsService
513
+ .getFileLocationUrl({
514
+ domain: this.domain,
515
+ service: this.service,
516
+ entityName: this.entity,
517
+ field: _name,
518
+ fileName: file.name,
519
+ }, this.fileLocationEndpoint)
520
+ .pipe(takeUntil(this.ngUsubscribe), catchError((err) => of(this.defaltCatchError(field, err, i))))
521
+ .subscribe((data) => {
522
+ const { location, version, objectId } = data;
523
+ file.version = version;
524
+ file.objectId = objectId;
525
+ file.uploadSubscribe = this.customFieldsService
526
+ .uploadTempFile(location, file)
527
+ .pipe(takeUntil(this.ngUsubscribe), catchError((err) => of(this.defaltCatchError(field, err, i))), finalize(() => {
528
+ file.isUploading = false;
529
+ }))
530
+ .subscribe((response) => {
531
+ const { type } = response;
532
+ if (!this.uploadCanceled) {
533
+ if (type === HttpEventType.UploadProgress) {
534
+ file.progress = Math.round(response.loaded / response.total) * 100;
535
+ }
536
+ else if (type === HttpEventType.Response) {
537
+ file.objectURL = this.sanitizer.bypassSecurityTrustUrl(URL.createObjectURL(file));
538
+ const value = { objectId, name: file.name, version: file.version };
539
+ const toInsert = this.formGroup.get('fieldCustomization')?.value[0].toInsert;
540
+ const fieldCustomization = this.formGroup.get('fieldCustomization')?.value;
541
+ if (fieldCustomization) {
542
+ fieldCustomization.value[0].toInsert = {
543
+ ...toInsert,
544
+ [_name]: value,
545
+ };
546
+ }
547
+ this.formGroup.get(_name)?.setValue(`${file.objectId}/${file.name}`);
548
+ this.formGroup.get(_name)?.clearValidators();
549
+ this.formGroup.get(_name)?.updateValueAndValidity();
550
+ field.files = [file];
551
+ }
552
+ }
553
+ else if (this.uploadCanceled && type === HttpEventType.Response) {
554
+ this.uploadCanceled = false;
555
+ }
556
+ });
557
+ field.files = [file];
558
+ });
559
+ }
560
+ }
561
+ }
562
+ removeFile(event, formField) {
563
+ const { file } = event;
564
+ const field = this.fields.find((record) => record.name === formField.name);
565
+ if (!field) {
566
+ return;
567
+ }
568
+ const _name = field.name;
569
+ field.files = [];
570
+ if (file.objectId) {
571
+ // Quando é um arquivo já salvo o objectId já é no formato "objectId/name"
572
+ const value = file.savedFile ? `${file.objectId}` : `${file.objectId}/${file.name}`;
573
+ const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];
574
+ const toDelete = fieldCustomization.toDelete;
575
+ delete fieldCustomization.toInsert[_name];
576
+ fieldCustomization.value[0].toDelete = {
577
+ ...toDelete,
578
+ [_name]: [...(toDelete[_name] || []), value],
579
+ };
580
+ }
581
+ this.formGroup.get(_name)?.clearValidators();
582
+ this.formGroup.get(_name)?.setValue('');
583
+ this.formGroup.get(_name)?.updateValueAndValidity();
584
+ }
585
+ cancelUpload(index, formField) {
586
+ this.uploadCanceled = true;
587
+ const field = this.fields.find((record) => record.name === formField.name);
588
+ if (!field) {
589
+ return;
590
+ }
591
+ const _name = field.name;
592
+ const _files = field.files || [];
593
+ _files[index]?.uploadSubscribe?.unsubscribe();
594
+ field.files = [];
595
+ const fieldCustomization = this.formGroup.get('fieldCustomization')?.value[0];
596
+ delete fieldCustomization.toInsert[_name];
597
+ this.formGroup.get(_name)?.clearValidators();
598
+ this.formGroup.get(_name)?.setValue('');
599
+ this.formGroup.get(_name)?.updateValueAndValidity();
600
+ }
601
+ defaltCatchError(field, err, index) {
602
+ const { files } = field;
603
+ if (files) {
604
+ files[index].error = err;
605
+ files[index].isUploading = false;
606
+ field.files = [...files];
607
+ const _name = field.name;
608
+ this.formGroup.get(_name)?.setValidators([errorOnUpload(files[index])]);
609
+ this.formGroup.get(_name)?.updateValueAndValidity();
610
+ return throwError(() => new Error('error in upload file. Details: ' + err.message));
611
+ }
612
+ else {
613
+ return throwError(() => new Error('error in upload file. Details: ' + err.message));
614
+ }
615
+ }
616
+ getTranslateLabel(label) {
617
+ return this.translateService.instant(`${this.domain}.${this.service}.${label}`);
618
+ }
619
+ addDisplayTimeInfoSignToFields() {
620
+ this.fields.forEach((field) => {
621
+ field.displayTimeInfoSign = this.displayTimeInfoSign;
622
+ });
623
+ }
624
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsComponent, deps: [{ token: i1.CustomFieldsService }, { token: i2.LocaleService }, { token: i3.DomSanitizer }, { token: i4.TranslateService }, { token: i5.ControlContainer, optional: true }], target: i0.ɵɵFactoryTarget.Component });
625
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CustomFieldsComponent, selector: "s-custom-fields", inputs: { domain: "domain", service: "service", entity: "entity", invalidErrorLabel: "invalidErrorLabel", entityObject: "entityObject", customFieldsEndpoint: "customFieldsEndpoint", fileLocationEndpoint: "fileLocationEndpoint", requestAccessEndpoint: "requestAccessEndpoint", requiredErrorMessage: "requiredErrorMessage", displayTimeInfoSign: "displayTimeInfoSign", showFileUploadDate: "showFileUploadDate", ready$: "ready$", disableFields: "disableFields" }, providers: [
626
+ {
627
+ provide: NG_VALUE_ACCESSOR,
628
+ useExisting: CustomFieldsComponent,
629
+ multi: true,
630
+ },
631
+ {
632
+ provide: NG_VALIDATORS,
633
+ useExisting: CustomFieldsComponent,
634
+ multi: true,
635
+ },
636
+ ], usesOnChanges: true, ngImport: i0, template: "@let errorMessages = {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage\n};\n\n@let configs = [\n {\n type: rowType,\n fields\n }\n];\n\n<s-dynamic-form\n [configs]=\"configs\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\">\n</s-dynamic-form>\n", dependencies: [{ kind: "component", type: i6.DynamicFormComponent, selector: "s-dynamic-form", inputs: ["id", "configs", "fields", "form", "errorMessages"] }] });
637
+ }
638
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CustomFieldsComponent, decorators: [{
639
+ type: Component,
640
+ args: [{ selector: 's-custom-fields', providers: [
641
+ {
642
+ provide: NG_VALUE_ACCESSOR,
643
+ useExisting: CustomFieldsComponent,
644
+ multi: true,
645
+ },
646
+ {
647
+ provide: NG_VALIDATORS,
648
+ useExisting: CustomFieldsComponent,
649
+ multi: true,
650
+ },
651
+ ], template: "@let errorMessages = {\n pattern: invalidErrorLabel,\n required: requiredErrorMessage\n};\n\n@let configs = [\n {\n type: rowType,\n fields\n }\n];\n\n<s-dynamic-form\n [configs]=\"configs\"\n [form]=\"formGroup\"\n [errorMessages]=\"errorMessages\">\n</s-dynamic-form>\n" }]
652
+ }], ctorParameters: () => [{ type: i1.CustomFieldsService }, { type: i2.LocaleService }, { type: i3.DomSanitizer }, { type: i4.TranslateService }, { type: i5.ControlContainer, decorators: [{
653
+ type: Optional
654
+ }] }], propDecorators: { domain: [{
655
+ type: Input,
656
+ args: [{ required: true }]
657
+ }], service: [{
658
+ type: Input,
659
+ args: [{ required: true }]
660
+ }], entity: [{
661
+ type: Input,
662
+ args: [{ required: true }]
663
+ }], invalidErrorLabel: [{
664
+ type: Input
665
+ }], entityObject: [{
666
+ type: Input
667
+ }], customFieldsEndpoint: [{
668
+ type: Input
669
+ }], fileLocationEndpoint: [{
670
+ type: Input
671
+ }], requestAccessEndpoint: [{
672
+ type: Input
673
+ }], requiredErrorMessage: [{
674
+ type: Input
675
+ }], displayTimeInfoSign: [{
676
+ type: Input
677
+ }], showFileUploadDate: [{
678
+ type: Input
679
+ }], ready$: [{
680
+ type: Input
681
+ }], disableFields: [{
682
+ type: Input
683
+ }] } });
684
+ function isUploading(file) {
685
+ return () => (file.isUploading ? { isUploading: true } : null);
686
+ }
687
+ function errorOnUpload(file) {
688
+ return () => (file.error ? { uploadError: true } : null);
689
+ }
690
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvY3VzdG9tLWZpZWxkcy9zcmMvbGliL2N1c3RvbS1maWVsZHMvY3VzdG9tLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hFLE9BQU8sRUFFSCxTQUFTLEVBRVQsS0FBSyxFQUlMLFFBQVEsR0FFWCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1QsYUFBYSxFQUNiLGlCQUFpQixFQUdqQixVQUFVLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUl4QixPQUFPLFNBQVMsTUFBTSxjQUFjLENBQUM7QUFDckMsT0FBTyxFQUErQixPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBR3ZJLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUU1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7Ozs7O0FBa0I3RCxNQUFNLE9BQU8scUJBQXFCO0lBdURUO0lBQ0E7SUFDQTtJQUNBO0lBQ1k7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QWEsQ0FBQyxJQUFhO0lBQ2hDLE9BQU8sR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwRXZlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDb250cm9sQ29udGFpbmVyLFxuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1BcnJheSxcbiAgICBGb3JtQ29udHJvbCxcbiAgICBGb3JtR3JvdXAsXG4gICAgTkdfVkFMSURBVE9SUyxcbiAgICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICBWYWxpZGF0b3IsXG4gICAgVmFsaWRhdG9yRm4sXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBEeW5hbWljVHlwZSwgRmllbGRUeXBlLCBGb3JtRmllbGQsIE51bWJlckZpZWxkLCBOdW1iZXJGaWVsZENvbXBvbmVudCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZHluYW1pYy1mb3JtJztcbmltcG9ydCB7IEZpbGVEdG8gfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2ZpbGUtdXBsb2FkJztcbmltcG9ydCB7IExvY2FsZU9wdGlvbnMsIExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBDdXN0b21GaWVsZHNTZXJ2aWNlIH0gZnJvbSAnLi9jdXN0b20tZmllbGRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tRmllbGRUeXBlIH0gZnJvbSAnLi9tb2RlbHMvY3VzdG9tLWZpZWxkLXR5cGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtY3VzdG9tLWZpZWxkcycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDdXN0b21GaWVsZHNDb21wb25lbnQsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDdXN0b21GaWVsZHNDb21wb25lbnQsXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21GaWVsZHNDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIGRvbWFpbiE6IHN0cmluZztcblxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHVibGljIHNlcnZpY2UhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHB1YmxpYyBlbnRpdHkhOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpbnZhbGlkRXJyb3JMYWJlbCA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZW50aXR5T2JqZWN0OiBhbnk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjdXN0b21GaWVsZHNFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL3F1ZXJpZXMvZ2V0RW50aXR5JztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGZpbGVMb2NhdGlvbkVuZHBvaW50ID0gJ3BsYXRmb3JtL2ZpZWxkX2N1c3RvbWl6YXRpb24vYWN0aW9ucy9yZXF1ZXN0VXBsb2FkJztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlcXVlc3RBY2Nlc3NFbmRwb2ludCA9ICdwbGF0Zm9ybS9maWVsZF9jdXN0b21pemF0aW9uL2FjdGlvbnMvcmVxdWVzdEFjY2Vzcyc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyByZXF1aXJlZEVycm9yTWVzc2FnZSA9ICcnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWVJbmZvU2lnbiA9IDA7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93RmlsZVVwbG9hZERhdGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlYWR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBkaXNhYmxlRmllbGRzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgcHJvdGVjdGVkIHJvd1R5cGUgPSBEeW5hbWljVHlwZS5Sb3c7XG5cbiAgICBwdWJsaWMgZmllbGRzOiBGb3JtRmllbGRbXSA9IFtdO1xuICAgIHB1YmxpYyBmb3JtR3JvdXA6IEZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xuICAgIHByaXZhdGUgcmVhZHkgPSBmYWxzZTtcbiAgICBwcml2YXRlIG9uQ2hhbmdlOiBhbnk7XG4gICAgcHJpdmF0ZSBvblRvdWNoZWQ6IGFueTtcbiAgICBwcml2YXRlIHZhbHVlOiBhbnk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1VzdWJzY3JpYmU6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHByaXZhdGUgdXBsb2FkQ2FuY2VsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgcHJpdmF0ZSBoYXNCbG9iOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByaXZhdGUgaGFzVXBsb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBjdXN0b21GaWVsZHNTZXJ2aWNlOiBDdXN0b21GaWVsZHNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLFxuICAgICkge1xuICAgICAgICB0aGlzLmludmFsaWRFcnJvckxhYmVsID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5pbnZhbGlkX3ZhbHVlJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNDdXN0b21GaWVsZHMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZmllbGRzPy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRGb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRDb250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Rm9ybS5nZXQoJ2N1c3RvbScpIGFzIEZvcm1Db250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdmFsaWRhdGVJbnB1dHMoKTtcbiAgICAgICAgdGhpcy5fY3JlYXRlRm9ybSgpO1xuICAgICAgICB0aGlzLmFkZERpc3BsYXlUaW1lSW5mb1NpZ25Ub0ZpZWxkcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZW5hYmxlT3JEaXNhYmxlRmllbGRzKCEhdGhpcy5kaXNhYmxlRmllbGRzKTtcblxuICAgICAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMub25DaGFuZ2U/Lih0aGlzLnBhcnNlRmllbGRzVmFsdWVzKCkpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBfZGlzYWJsZUZpZWxkcyA9IGNoYW5nZXNbJ2Rpc2FibGVGaWVsZHMnXTtcbiAgICAgICAgaWYgKF9kaXNhYmxlRmllbGRzKSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZU9yRGlzYWJsZUZpZWxkcyhfZGlzYWJsZUZpZWxkcy5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLm5nVXN1YnNjcmliZS5uZXh0KCk7XG4gICAgICAgIHRoaXMubmdVc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IEZ1bmN0aW9uKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5yZWFkeSkge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnBhcnNlVmFsdWVzRm9yRmllbGRzKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUobmV3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWxlc0lmU2V0Rm9ybVZhbHVlc0FmdGVySW5pdCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh2YWx1ZSB8fCB7fSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEN1c3RvbUZpZWxkcygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgICAgICBpZiAodGhpcy5lbnRpdHlPYmplY3Q/LmVudGl0eV8pIHtcbiAgICAgICAgICAgIHJldHVybiBvZih0aGlzLmVudGl0eU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZS5nZXRDdXN0b21GaWVsZHMoXG4gICAgICAgICAgICB0aGlzLmRvbWFpbixcbiAgICAgICAgICAgIHRoaXMuc2VydmljZSxcbiAgICAgICAgICAgIHRoaXMuZW50aXR5LFxuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNFbmRwb2ludCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGVycm9yczogYW55ID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvcnM6IGNvbnRyb2xFcnJvcnMgfSA9IHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcnNbZmllbGRdID0gY29udHJvbEVycm9ycztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgfVxuXG4gICAgcHVibGljIGNsZWFuRmllbGRzKCkge1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW5hYmxlT3JEaXNhYmxlRmllbGRzKGRpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgb2YgT2JqZWN0LmtleXModGhpcy5mb3JtR3JvdXAudmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk/LmRpc2FibGUoKSA6IHRoaXMuZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk/LmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsaWRhdGVJbnB1dHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kb21haW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignWW91IG5lZWQgdG8gc3BlY2lmeSB0aGUgY3VzdG9tLWZpZWxkcyBkb21haW4hJylcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIHNlcnZpY2UhJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmVudGl0eSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgbmVlZCB0byBzcGVjaWZ5IHRoZSBjdXN0b20tZmllbGRzIGVudGl0eSEnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUZvcm0oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgIGNvbnN0IG9ic2VydmFibGVzID0gW3RoaXMuZ2V0Q3VzdG9tRmllbGRzKCksIHRoaXMubG9jYWxlU2VydmljZS5nZXQoKV07XG4gICAgICAgIGZvcmtKb2luKG9ic2VydmFibGVzKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Q29udHJvbD8ubWFya0FzUHJpc3RpbmUoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeSQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVhZHkkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IFtjdXN0b21GaWVsZHNSZXNwb25zZSwgbG9jYWxlT3B0aW9uc10gPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0czogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLlN0cmluZ10gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQm9vbGVhbl0gPSB7IGRlZmF1bHRWYWx1ZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuSW50ZWdlcl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRG91YmxlXSA9IHsgZGVmYXVsdE1hc2s6ICcnIH07XG4gICAgICAgICAgICAgICAgZGVmYXVsdHNbQ3VzdG9tRmllbGRUeXBlLk1vbmV5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlXSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5EYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuTG9jYWxEYXRlVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuVGltZV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmxvYl0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuRW51bV0gPSB7fTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0c1tDdXN0b21GaWVsZFR5cGUuQmluYXJ5XSA9IHt9O1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW0N1c3RvbUZpZWxkVHlwZS5BbnldID0ge307XG5cbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbUZpZWxkc1Jlc3BvbnNlIHx8ICFjdXN0b21GaWVsZHNSZXNwb25zZS5lbnRpdHlfKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBhY3RpdmUsIGZpZWxkcyB9ID0gY3VzdG9tRmllbGRzUmVzcG9uc2UuZW50aXR5XztcbiAgICAgICAgICAgICAgICBpZiAoIWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRzXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLmN1c3RvbWl6YWJsZSAmJiBmaWVsZC5jdXN0b21pemF0aW9uPy5hY3RpdmUpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmdldEZvcm1GaWVsZChmaWVsZCwgbG9jYWxlT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZC50eXBlID09PSBDdXN0b21GaWVsZFR5cGUuQmxvYiAmJiB0aGlzLnZhbHVlW2Zvcm1GaWVsZC5uYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmb3JtRmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHZhbGlkYXRpb25SZWdleCB9ID0gZmllbGQuY3VzdG9taXphdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXNJc1R5cGVzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Cb29sZWFuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkVHlwZS5Nb25leSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZFR5cGUuRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLkxvY2FsRGF0ZVRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRUeXBlLlRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvblJlZ2V4ICYmICFhc0lzVHlwZXMuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4odmFsaWRhdGlvblJlZ2V4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRUeXBlID09PSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlciAmJiAhZm9ybUZpZWxkLm1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eXFwtP1xcZCokLykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkLnJlcXVpcmVkPy4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnJlcXVpcmVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBkZWZhdWx0c1tmaWVsZFR5cGVdLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IHRoaXMuZm9ybUdyb3VwLmRpc2FibGVkIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdG9ycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woZm9ybUZpZWxkLm5hbWUsIGNvbnRyb2wpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkcy5wdXNoKGZvcm1GaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMucGFyc2VWYWx1ZXNGb3JGaWVsZHModGhpcy52YWx1ZSkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXJzZVZhbHVlc0ZvckZpZWxkcyh2YWx1ZXM6IGFueSkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXMgPSB7IC4uLnZhbHVlcyB9O1xuXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0eXBlID0gZmllbGQudHlwZSBhcyBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVzPy5bbmFtZV07XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdGFtZW50byBleGNsdXNpdm8gcGFyYSBjYW1wb3MgYm9vbGVhbiBxdWUgdGVtIG8gc3RhdHVzIEVtcHR5XG4gICAgICAgICAgICAgKiBFc3NhIGNvbmRpY2lvbmFsIG5lY2Vzc2l0YSBlc3RhciBhbnRlcyBkbyBpZiAoIXZhbHVlKSByZXR1cm47XG4gICAgICAgICAgICAgKiBQb2lzIGVsYSB0ZW0gdW0gc3RhdHVzIHF1ZSB1c2EgbnVsbCBubyB2YWxvciBkbyBjYW1wbyByYWRpbyBib29sZWFuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlID09PSBGaWVsZFR5cGUuQm9vbGVhbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcbiAgICAgICAgICAgICAgICBjb25zdCBub3RWYWxpZCA9ICFpc1N0cmluZyAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbiAgICAgICAgICAgICAgICBpZiAobm90VmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBDb25kaWNpb25hbCBwYXJhIGNhbXBvcyBxdWUgcmV0b3JuYW0gc3RyaW5nIGRlIGJvb2xlbiBkbyBiYWNrYW5kXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1N0cmluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gdmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5EYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlKS50b0RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuTG9jYWxEYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWVzW25hbWVdID0gbW9tZW50KHZhbHVlLCAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTUycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSBtb21lbnQodmFsdWUsICdISDptbTpzcycpLnRvRGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHBhcnNlZFZhbHVlcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbGd1bWFzIGVxdWlwZXMgc8OzIHNldGFtIHZhbG9yIG5vIGZvcm11bMOhcmlvLCBhcMOzcyBvIGNhcnJlZ2FtZW50byBkYSB0ZWxhXG4gICAgICogQ29tbyDDqSBiZW0gcGFkcsOjbyBpc3NvLCBmb2kgbmVjZXNzw6FyaW8gY3JpYXIgZXNzZSBtw6l0b2RvIHBhcmEgZ2VyYXIgbyBmaWxlXG4gICAgICogYXDDs3Mgc2V0YXIgbyB2YWxvciBubyBmb3JtdWzDoXJpb1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlRmlsZXNJZlNldEZvcm1WYWx1ZXNBZnRlckluaXQoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNVcGxvYWRlZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZHNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChmaWVsZDogRm9ybUZpZWxkKSA9PiBmaWVsZC50eXBlID09PSBGaWVsZFR5cGUuQmxvYilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHBhcnNlRmllbGRzVmFsdWVzKCkge1xuICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZXM6IGFueSA9IHt9O1xuXG4gICAgICAgIHRoaXMuZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIG1hc2ssIHNjYWxlIH0gPSBmaWVsZDtcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmaWVsZC5uYW1lO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KG5hbWUpPy52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXNrKSB2YWx1ZSA9IG5ldyBCaWdOdW1iZXIodmFsdWUpLnRvRml4ZWQoc2NhbGUgYXMgbnVtYmVyKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgRmllbGRUeXBlLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCdZWVlZLU1NLUREJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuRGF0ZVRpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbWVudCh2YWx1ZSkuZm9ybWF0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBGaWVsZFR5cGUuTG9jYWxEYXRlVGltZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlKS5mb3JtYXQoJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEZpZWxkVHlwZS5UaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUpLmZvcm1hdCgnSEg6bW06c3MnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpICYmIHRoaXMuaXNUeXBlTnVtYmVyT3JFbnVtKHR5cGUgYXMgRmllbGRUeXBlKSkge1xuICAgICAgICAgICAgICAgIHBhcnNlZFZhbHVlc1tuYW1lXSA9IGZpZWxkLm11bHRpcGxlID8gW10gOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZXNbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzQmxvYikge1xuICAgICAgICAgICAgcGFyc2VkVmFsdWVzWydmaWVsZEN1c3RvbWl6YXRpb24nXSA9IHRoaXMuZm9ybUdyb3VwLmdldCgnZmllbGRDdXN0b21pemF0aW9uJyk/LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZWRWYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1R5cGVOdW1iZXJPckVudW0odHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IG51bWJlck9yRW51bSA9IFtGaWVsZFR5cGUuTnVtYmVyLCBGaWVsZFR5cGUuRW51bV07XG4gICAgICAgIHJldHVybiBudW1iZXJPckVudW0uaW5jbHVkZXModHlwZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtRmllbGQoZmllbGQ6IGFueSwgbG9jYWxlT3B0aW9uczogTG9jYWxlT3B0aW9ucyk6IEZvcm1GaWVsZCB7XG4gICAgICAgIGxldCBwYXJhbWV0ZXJzOiBQYXJ0aWFsPEZvcm1GaWVsZD4gPSB7fTtcblxuICAgICAgICBzd2l0Y2ggKGZpZWxkLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJsb2I6XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0QmxvYlBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgcGFyYW1ldGVycyA9IHRoaXMuZ2V0Qm9vbGVhblBhcmFtZXRlcnMoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0VudW1lcmF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkVudW06XG4gICAgICAgICAgICAgICAgZmllbGQudHlwZSA9IEZpZWxkVHlwZS5FbnVtO1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB0aGlzLmdldEVudW1QYXJhbWV0ZXJzKGZpZWxkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLk1vbmV5OlxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEZpZWxkVHlwZS5DdXN0b20sXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpZWxkQ29tcG9uZW50Q2xhc3M6IE51bWJlckZpZWxkQ29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENsYXNzOiBOdW1iZXJGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAxNSxcbiAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgICAgIGxlZnRBZGRvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGxvY2FsZU9wdGlvbnM/Lm51bWJlcj8uY3VycmVuY3lTeW1ib2wgPz8gJ1IkJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlTGFiZWw6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQ3VzdG9tRmllbGRUeXBlLkRvdWJsZTpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENvbXBvbmVudENsYXNzOiBOdW1iZXJGaWVsZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDbGFzczogTnVtYmVyRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAyLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVMYWJlbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuSW50ZWdlcjpcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBGaWVsZFR5cGUuQ3VzdG9tLFxuICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWVsZENvbXBvbmVudENsYXNzOiBOdW1iZXJGaWVsZENvbXBvbmVudCxcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmllbGRDbGFzczogTnVtYmVyRmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogMTUsXG4gICAgICAgICAgICAgICAgICAgIHNjYWxlOiAwLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVMYWJlbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBDdXN0b21GaWVsZFR5cGUuQW55OlxuICAgICAgICAgICAgICAgIGZpZWxkLnR5cGUgPSBGaWVsZFR5cGUuU3RyaW5nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBGb3JtRmllbGQoe1xuICAgICAgICAgICAgbmFtZTogZmllbGQuaWQsXG4gICAgICAgICAgICBsYWJlbDogZmllbGQuY3VzdG9taXphdGlvbi5sYWJlbCxcbiAgICAgICAgICAgIHRvb2x0aXA6IGZpZWxkLmN1c3RvbWl6YXRpb24udG9vbHRpcCxcbiAgICAgICAgICAgIGluZm9TaWduOiBmaWVsZC5jdXN0b21pemF0aW9uLmluZm9TaWduLFxuICAgICAgICAgICAgdHlwZTogZmllbGQudHlwZSxcbiAgICAgICAgICAgIG1hc2s6IGZpZWxkLmN1c3RvbWl6YXRpb24ubWFzayxcbiAgICAgICAgICAgIHJlcXVpcmVkOiAoKSA9PiBmaWVsZC5jdXN0b21pemF0aW9uLm1hbmRhdG9yeSxcbiAgICAgICAgICAgIGNhbGVuZGFyT3B0aW9uczogbG9jYWxlT3B0aW9ucy5jYWxlbmRhcixcbiAgICAgICAgICAgIGN1cnJlbmN5T3B0aW9uczogbG9jYWxlT3B0aW9ucy5udW1iZXIsXG4gICAgICAgICAgICAuLi5wYXJhbWV0ZXJzLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudW1QYXJhbWV0ZXJzKGZpZWxkOiBhbnkpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2hvd0NsZWFyOiB0cnVlLFxuICAgICAgICAgICAgbXVsdGlwbGU6IGZpZWxkLmN1c3RvbWl6YXRpb24uY3VzdG9tRW51bWVyYXRpb24ubXVsdGlwbGUsXG4gICAgICAgICAgICBvcHRpb25zOiBmaWVsZC5jdXN0b21pemF0aW9uLmN1c3RvbUVudW1lcmF0aW9uLnZhbHVlcy5tYXAoKGU6IGFueSkgPT4gKHsgbGFiZWw6IGUudmFsdWUsIHZhbHVlOiBlLmtleSB9KSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCb29sZWFuUGFyYW1ldGVycygpOiBvYmplY3Qge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgb3B0aW9uc0xhYmVsOiB7XG4gICAgICAgICAgICAgICAgdHJ1ZTogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgdHJ1ZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGZhbHNlOiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBmYWxzZV9sYWJlbGApLFxuICAgICAgICAgICAgICAgIGVtcHR5OiB0aGlzLmdldFRyYW5zbGF0ZUxhYmVsKGBlbXB0eV9sYWJlbGApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2JQYXJhbWV0ZXJzKCk6IG9iamVjdCB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzaXplOiB7XG4gICAgICAgICAgICAgICAgc206IDEyLFxuICAgICAgICAgICAgICAgIG1kOiAxMixcbiAgICAgICAgICAgICAgICBsZzogMTIsXG4gICAgICAgICAgICAgICAgeGw6IDEyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFjY2VwdDogJ2ltYWdlLyosIGFwcGxpY2F0aW9uLyosIHRleHQvKicsXG4gICAgICAgICAgICBjaG9vc2VMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2hvb3NlX2xhYmVsYCksXG4gICAgICAgICAgICByZW1vdmVMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgcmVtb3ZlX2xhYmVsYCksXG4gICAgICAgICAgICBjYW5jZWxMYWJlbDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgY2FuY2VsX2xhYmVsYCksXG4gICAgICAgICAgICBzdWNjZXNzVG9vbHRpcDogdGhpcy5nZXRUcmFuc2xhdGVMYWJlbChgc3VjY2Vzc190b29sdGlwYCksXG4gICAgICAgICAgICBtdWx0aXBsZTogZmFsc2UsXG4gICAgICAgICAgICBvblVwbG9hZEZpbGU6IChldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNVcGxvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy51cGxvYWRGaWxlKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUmVtb3ZlRmlsZTogKGV2ZW50OiB7IGZpbGU6IEZpbGVEdG8gfSwgZm9ybWZpZWxkOiBGb3JtRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DYW5jZWxVcGxvYWQ6IChldmVudDogbnVtYmVyLCBmb3JtZmllbGQ6IEZvcm1GaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsVXBsb2FkKGV2ZW50LCBmb3JtZmllbGQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRG93bmxvYWRGaWxlOiAoZXZlbnQ6IHsgaW5kZXg6IG51bWJlcjsgYW5jaG9yOiBFbGVtZW50UmVmIH0sIGZvcm1maWVsZDogRm9ybUZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEZpbGUoZXZlbnQsIGZvcm1maWVsZCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2hvd0ZpbGVVcGxvYWREYXRlOiB0aGlzLnNob3dGaWxlVXBsb2FkRGF0ZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDDiSBuZWNlc3PDoXJpbyBjcmlhciBvIGZpZWxkQ3VzdG9taXphdGlvbiBxdWFuZG8gaMOhIHVtIEJsb2IgbmEgZW50aWRhZGUgcGFyYSBnZXJhciBvXG4gICAgICogY29tIG9zIGZpZWxkcyBpbnNlcmlkb3MgZSBkZWxldGFkb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVGaWVsZEN1c3RvbWl6YXRpb24oZmllbGRzOiBhbnlbXSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhc0Jsb2IgPSAhIWZpZWxkcy5maWx0ZXIoKGZpZWxkOiBhbnkpID0+IGZpZWxkLnR5cGUgPT09IEN1c3RvbUZpZWxkVHlwZS5CbG9iKS5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmhhc0Jsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgICAgICAgJ2ZpZWxkQ3VzdG9taXphdGlvbicsXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1BcnJheShbXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiBuZXcgRm9ybUNvbnRyb2wodGhpcy5kb21haW4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZTogbmV3IEZvcm1Db250cm9sKHRoaXMuc2VydmljZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6IG5ldyBGb3JtQ29udHJvbCh0aGlzLmVudGl0eSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RlbGV0ZTogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0b0luc2VydDogbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IHt9LCBkaXNhYmxlZDogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQmxvYlRvRmlsZVVwbG9hZChmaWVsZDogRm9ybUZpZWxkKSB7XG4gICAgICAgIGNvbnN0IF9uYW1lID0gZmllbGQubmFtZTtcbiAgICAgICAgY29uc3Qgb2JqZWN0SWQgPSB0aGlzLnZhbHVlW19uYW1lXSA/IHRoaXMudmFsdWVbX25hbWVdIDogdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udmFsdWU7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gb2JqZWN0SWQuc3Vic3RyaW5nKG9iamVjdElkLmxhc3RJbmRleE9mKCcvJykgKyAxKTtcbiAgICAgICAgY29uc3QgZmlsZTogUGFydGlhbDxGaWxlRHRvPiA9IHsgb2JqZWN0SWQsIG5hbWU6IGZpbGVOYW1lLCBzYXZlZEZpbGU6IHRydWUgfTtcbiAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZSBhcyBGaWxlRHRvXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRvd25sb2FkRmlsZShldmVudDogeyBpbmRleDogbnVtYmVyOyBhbmNob3I6IEVsZW1lbnRSZWYgfSwgZmllbGQ6IEZvcm1GaWVsZCkge1xuICAgICAgICBjb25zdCB7IGluZGV4LCBhbmNob3IgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBfZmlsZXMgPSBmaWVsZC5maWxlcyB8fCBbXTtcbiAgICAgICAgaWYgKCFfZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEZpbGUgPSBfZmlsZXNbaW5kZXhdO1xuICAgICAgICBpZiAoY3VycmVudEZpbGUub2JqZWN0VVJMKSB7XG4gICAgICAgICAgICBhbmNob3IubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX29iamVjdElkID0gY3VycmVudEZpbGUub2JqZWN0SWQgYXMgc3RyaW5nO1xuICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLnJlcXVlc3RBY2Nlc3MoX29iamVjdElkLCB0aGlzLnJlcXVlc3RBY2Nlc3NFbmRwb2ludClcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGZpbGVOYW1lLCB1cmkgfSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VzdG9tRmllbGRzU2VydmljZVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldEZpbGUodXJpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVc3Vic2NyaWJlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGJsb2I6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVOYW1lKSBhcyBGaWxlRHRvO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybCh1cmkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIHVyaSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3RmlsZS5vYmplY3RJZCA9IGN1cnJlbnRGaWxlLm9iamVjdElkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbGUuc2F2ZWRGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZmlsZXNbaW5kZXhdID0gbmV3RmlsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5fZmlsZXNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvci5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShldmVudDogeyBmaWxlczogRmlsZUR0b1tdIH0sIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsZXMgfSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZDogRm9ybUZpZWxkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpO1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZSBvY29ycmVyIHVtIHVwbG9hZCwgasOhIGV4aXN0aW5kbyB1bSBhcnF1aXZvIGNvbSB1cGxvYWQgZmVpdG8uIMOJIG5lY2Vzc8OhcmlvIGV4Y2x1aXIgbyBtZXNtby5cbiAgICAgICAgaWYgKGZpZWxkPy5maWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUoeyBmaWxlOiBmaWVsZC5maWxlc1swXSB9LCBmaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgZmllbGQuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgICAgICAgIGlmICghZmlsZS5zYXZlZEZpbGUgJiYgIWZpbGUucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBmaWxlLmlzVXBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWxpZGF0b3JzKGlzVXBsb2FkaW5nKGZpbGUpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRGaWxlTG9jYXRpb25VcmwoXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWluOiB0aGlzLmRvbWFpbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZTogdGhpcy5lbnRpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IF9uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlTG9jYXRpb25FbmRwb2ludCxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLm5nVXN1YnNjcmliZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgbG9jYXRpb24sIHZlcnNpb24sIG9iamVjdElkIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS52ZXJzaW9uID0gdmVyc2lvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0SWQgPSBvYmplY3RJZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUudXBsb2FkU3Vic2NyaWJlID0gdGhpcy5jdXN0b21GaWVsZHNTZXJ2aWNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnVwbG9hZFRlbXBGaWxlKGxvY2F0aW9uLCBmaWxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1VzdWJzY3JpYmUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiBvZih0aGlzLmRlZmFsdENhdGNoRXJyb3IoZmllbGQsIGVyciwgaSkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5pc1VwbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IHR5cGUgfSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkQ2FuY2VsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09PSBIdHRwRXZlbnRUeXBlLlVwbG9hZFByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGgucm91bmQocmVzcG9uc2UubG9hZGVkIC8gcmVzcG9uc2UudG90YWwpICogMTAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gSHR0cEV2ZW50VHlwZS5SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUub2JqZWN0VVJMID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFVybChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7IG9iamVjdElkLCBuYW1lOiBmaWxlLm5hbWUsIHZlcnNpb246IGZpbGUudmVyc2lvbiB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvSW5zZXJ0ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKT8udmFsdWVbMF0udG9JbnNlcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRDdXN0b21pemF0aW9uID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdmaWVsZEN1c3RvbWl6YXRpb24nKT8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkQ3VzdG9taXphdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEN1c3RvbWl6YXRpb24udmFsdWVbMF0udG9JbnNlcnQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b0luc2VydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtfbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWx1ZShgJHtmaWxlLm9iamVjdElkfS8ke2ZpbGUubmFtZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuZmlsZXMgPSBbZmlsZV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy51cGxvYWRDYW5jZWxlZCAmJiB0eXBlID09PSBIdHRwRXZlbnRUeXBlLlJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZENhbmNlbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLmZpbGVzID0gW2ZpbGVdO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlRmlsZShldmVudDogeyBmaWxlOiBGaWxlRHRvIH0sIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgZmlsZSB9ID0gZXZlbnQ7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCgocmVjb3JkOiBGb3JtRmllbGQpID0+IHJlY29yZC5uYW1lID09PSBmb3JtRmllbGQubmFtZSk7XG4gICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICAgIGZpZWxkLmZpbGVzID0gW107XG4gICAgICAgIGlmIChmaWxlLm9iamVjdElkKSB7XG4gICAgICAgICAgICAvLyBRdWFuZG8gw6kgdW0gYXJxdWl2byBqw6Egc2Fsdm8gbyBvYmplY3RJZCBqw6Egw6kgbm8gZm9ybWF0byBcIm9iamVjdElkL25hbWVcIlxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWxlLnNhdmVkRmlsZSA/IGAke2ZpbGUub2JqZWN0SWR9YCA6IGAke2ZpbGUub2JqZWN0SWR9LyR7ZmlsZS5uYW1lfWA7XG4gICAgICAgICAgICBjb25zdCBmaWVsZEN1c3RvbWl6YXRpb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZVswXTtcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlID0gZmllbGRDdXN0b21pemF0aW9uLnRvRGVsZXRlO1xuICAgICAgICAgICAgZGVsZXRlIGZpZWxkQ3VzdG9taXphdGlvbi50b0luc2VydFtfbmFtZV07XG4gICAgICAgICAgICBmaWVsZEN1c3RvbWl6YXRpb24udmFsdWVbMF0udG9EZWxldGUgPSB7XG4gICAgICAgICAgICAgICAgLi4udG9EZWxldGUsXG4gICAgICAgICAgICAgICAgW19uYW1lXTogWy4uLih0b0RlbGV0ZVtfbmFtZV0gfHwgW10pLCB2YWx1ZV0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnNldFZhbHVlKCcnKTtcbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KF9uYW1lKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FuY2VsVXBsb2FkKGluZGV4OiBudW1iZXIsIGZvcm1GaWVsZDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBsb2FkQ2FuY2VsZWQgPSB0cnVlO1xuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuZmllbGRzLmZpbmQoKHJlY29yZDogRm9ybUZpZWxkKSA9PiByZWNvcmQubmFtZSA9PT0gZm9ybUZpZWxkLm5hbWUpO1xuICAgICAgICBpZiAoIWZpZWxkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgX25hbWUgPSBmaWVsZC5uYW1lO1xuICAgICAgICBjb25zdCBfZmlsZXMgPSBmaWVsZC5maWxlcyB8fCBbXTtcbiAgICAgICAgX2ZpbGVzW2luZGV4XT8udXBsb2FkU3Vic2NyaWJlPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBmaWVsZC5maWxlcyA9IFtdO1xuICAgICAgICBjb25zdCBmaWVsZEN1c3RvbWl6YXRpb24gPSB0aGlzLmZvcm1Hcm91cC5nZXQoJ2ZpZWxkQ3VzdG9taXphdGlvbicpPy52YWx1ZVswXTtcbiAgICAgICAgZGVsZXRlIGZpZWxkQ3VzdG9taXphdGlvbi50b0luc2VydFtfbmFtZV07XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWx1ZSgnJyk7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlZmFsdENhdGNoRXJyb3IoZmllbGQ6IEZvcm1GaWVsZCwgZXJyOiBIdHRwRXJyb3JSZXNwb25zZSwgaW5kZXg6IG51bWJlcik6IE9ic2VydmFibGU8bmV2ZXI+IHtcbiAgICAgICAgY29uc3QgeyBmaWxlcyB9ID0gZmllbGQ7XG4gICAgICAgIGlmIChmaWxlcykge1xuICAgICAgICAgICAgZmlsZXNbaW5kZXhdLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgZmlsZXNbaW5kZXhdLmlzVXBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBmaWVsZC5maWxlcyA9IFsuLi5maWxlc107XG4gICAgICAgICAgICBjb25zdCBfbmFtZSA9IGZpZWxkLm5hbWU7XG4gICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoX25hbWUpPy5zZXRWYWxpZGF0b3JzKFtlcnJvck9uVXBsb2FkKGZpbGVzW2luZGV4XSldKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChfbmFtZSk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignZXJyb3IgaW4gdXBsb2FkIGZpbGUuIERldGFpbHM6ICcgKyBlcnIubWVzc2FnZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdlcnJvciBpbiB1cGxvYWQgZmlsZS4gRGV0YWlsczogJyArIGVyci5tZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRyYW5zbGF0ZUxhYmVsKGxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYCR7dGhpcy5kb21haW59LiR7dGhpcy5zZXJ2aWNlfS4ke2xhYmVsfWApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkRGlzcGxheVRpbWVJbmZvU2lnblRvRmllbGRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgZmllbGQuZGlzcGxheVRpbWVJbmZvU2lnbiA9IHRoaXMuZGlzcGxheVRpbWVJbmZvU2lnbjtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc1VwbG9hZGluZyhmaWxlOiBGaWxlRHRvKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoKSA9PiAoZmlsZS5pc1VwbG9hZGluZyA/IHsgaXNVcGxvYWRpbmc6IHRydWUgfSA6IG51bGwpO1xufVxuXG5mdW5jdGlvbiBlcnJvck9uVXBsb2FkKGZpbGU6IEZpbGVEdG8pOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuICgpID0+IChmaWxlLmVycm9yID8geyB1cGxvYWRFcnJvcjogdHJ1ZSB9IDogbnVsbCk7XG59XG5cbiIsIkBsZXQgZXJyb3JNZXNzYWdlcyA9IHtcbiAgICBwYXR0ZXJuOiBpbnZhbGlkRXJyb3JMYWJlbCxcbiAgICByZXF1aXJlZDogcmVxdWlyZWRFcnJvck1lc3NhZ2Vcbn07XG5cbkBsZXQgY29uZmlncyA9IFtcbiAgICB7XG4gICAgICAgIHR5cGU6IHJvd1R5cGUsXG4gICAgICAgIGZpZWxkc1xuICAgIH1cbl07XG5cbjxzLWR5bmFtaWMtZm9ybVxuICAgIFtjb25maWdzXT1cImNvbmZpZ3NcIlxuICAgIFtmb3JtXT1cImZvcm1Hcm91cFwiXG4gICAgW2Vycm9yTWVzc2FnZXNdPVwiZXJyb3JNZXNzYWdlc1wiPlxuPC9zLWR5bmFtaWMtZm9ybT5cbiJdfQ==