@seniorsistemas/angular-components 17.27.1-feature-sds-110-660dd566 → 17.27.1-feature-sds-110-d6af3a99

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 (907) 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 +631 -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 +20 -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-alert.mjs +7 -7
  707. package/fesm2022/seniorsistemas-angular-components-badge.mjs +7 -7
  708. package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +7 -7
  709. package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +7 -7
  710. package/fesm2022/seniorsistemas-angular-components-button.mjs +7 -7
  711. package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +7 -7
  712. package/fesm2022/seniorsistemas-angular-components-card.mjs +7 -7
  713. package/fesm2022/seniorsistemas-angular-components-chat.mjs +10 -10
  714. package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +7 -7
  715. package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +3 -3
  716. package/fesm2022/seniorsistemas-angular-components-chips.mjs +10 -10
  717. package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +11 -11
  718. package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +7 -7
  719. package/fesm2022/seniorsistemas-angular-components-common.mjs +20 -20
  720. package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +6 -6
  721. package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +7 -7
  722. package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +10 -10
  723. package/fesm2022/seniorsistemas-angular-components-currency.mjs +3 -3
  724. package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +10 -10
  725. package/fesm2022/seniorsistemas-angular-components-dialog.mjs +9 -9
  726. package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
  727. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +121 -116
  728. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  729. package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +7 -7
  730. package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +10 -10
  731. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +8 -8
  732. package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
  733. package/fesm2022/seniorsistemas-angular-components-file-upload.mjs +10 -10
  734. package/fesm2022/seniorsistemas-angular-components-gantt.mjs +10 -10
  735. package/fesm2022/seniorsistemas-angular-components-global-search.mjs +10 -10
  736. package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +10 -10
  737. package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +10 -10
  738. package/fesm2022/seniorsistemas-angular-components-ia-insight.mjs +16 -16
  739. package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +10 -10
  740. package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +7 -7
  741. package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +10 -10
  742. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +28 -28
  743. package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
  744. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +7 -3
  745. package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
  746. package/fesm2022/seniorsistemas-angular-components-kanban.mjs +19 -19
  747. package/fesm2022/seniorsistemas-angular-components-label-value.mjs +7 -7
  748. package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +16 -16
  749. package/fesm2022/seniorsistemas-angular-components-locale.mjs +34 -34
  750. package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +7 -7
  751. package/fesm2022/seniorsistemas-angular-components-mask.mjs +7 -7
  752. package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +10 -10
  753. package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +7 -7
  754. package/fesm2022/seniorsistemas-angular-components-number-input.mjs +7 -7
  755. package/fesm2022/seniorsistemas-angular-components-numeric.mjs +10 -10
  756. package/fesm2022/seniorsistemas-angular-components-object-card.mjs +13 -13
  757. package/fesm2022/seniorsistemas-angular-components-paginator.mjs +3 -3
  758. package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
  759. package/fesm2022/seniorsistemas-angular-components-panel.mjs +7 -7
  760. package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +10 -10
  761. package/fesm2022/seniorsistemas-angular-components-picklist.mjs +7 -7
  762. package/fesm2022/seniorsistemas-angular-components-product-header.mjs +7 -7
  763. package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +7 -7
  764. package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +13 -13
  765. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +182 -0
  766. package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -0
  767. package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +7 -7
  768. package/fesm2022/seniorsistemas-angular-components-select-button.mjs +10 -10
  769. package/fesm2022/seniorsistemas-angular-components-select.mjs +6 -6
  770. package/fesm2022/seniorsistemas-angular-components-shared.mjs +7 -7
  771. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +42 -23
  772. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  773. package/fesm2022/seniorsistemas-angular-components-slide-panel.mjs +10 -10
  774. package/fesm2022/seniorsistemas-angular-components-slider.mjs +7 -7
  775. package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +13 -13
  776. package/fesm2022/seniorsistemas-angular-components-split-button.mjs +7 -7
  777. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +4 -4
  778. package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
  779. package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +7 -7
  780. package/fesm2022/seniorsistemas-angular-components-steps.mjs +7 -7
  781. package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -10
  782. package/fesm2022/seniorsistemas-angular-components-switch.mjs +7 -7
  783. package/fesm2022/seniorsistemas-angular-components-table-header.mjs +7 -7
  784. package/fesm2022/seniorsistemas-angular-components-table.mjs +16 -16
  785. package/fesm2022/seniorsistemas-angular-components-tabs.mjs +6 -6
  786. package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
  787. package/fesm2022/seniorsistemas-angular-components-template.mjs +7 -7
  788. package/fesm2022/seniorsistemas-angular-components-text-area-ia.mjs +10 -10
  789. package/fesm2022/seniorsistemas-angular-components-text-area.mjs +7 -7
  790. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +10 -10
  791. package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +16 -16
  792. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +54 -92
  793. package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
  794. package/fesm2022/seniorsistemas-angular-components-tile.mjs +7 -7
  795. package/fesm2022/seniorsistemas-angular-components-timeline.mjs +40 -40
  796. package/fesm2022/seniorsistemas-angular-components-toast.mjs +10 -10
  797. package/fesm2022/seniorsistemas-angular-components-token-list.mjs +7 -7
  798. package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +10 -10
  799. package/fesm2022/seniorsistemas-angular-components-utils.mjs +13 -4
  800. package/fesm2022/seniorsistemas-angular-components-utils.mjs.map +1 -1
  801. package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +7 -7
  802. package/fesm2022/seniorsistemas-angular-components.mjs +1 -0
  803. package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
  804. package/fieldset/lib/fieldset/fieldset.component.d.ts +1 -1
  805. package/index.d.ts +5 -0
  806. package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +2 -1
  807. package/lib/locale/fallback.d.ts +1 -0
  808. package/package.json +7 -90
  809. package/public-api.d.ts +1 -0
  810. package/radio-button/index.d.ts +5 -0
  811. package/radio-button/lib/radio-button/radio-button.component.d.ts +31 -0
  812. package/radio-button/lib/radio-button-group/models/radio-button-group.models.d.ts +5 -0
  813. package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +25 -0
  814. package/radio-button/lib/services/radio-button-registry.service.d.ts +12 -0
  815. package/radio-button/public-api.d.ts +3 -0
  816. package/select/index.d.ts +5 -0
  817. package/select/lib/select/components/select-option/select-option.component.d.ts +14 -0
  818. package/select/lib/select/select.component.d.ts +275 -0
  819. package/select/public-api.d.ts +1 -0
  820. package/sidebar/lib/sidebar/sidebar.component.d.ts +7 -6
  821. package/src/lib/styles/tailwind.scss +3 -0
  822. package/tailwind.css +80 -30
  823. package/utils/lib/utils/utils.d.ts +2 -0
  824. package/accordion/package.json +0 -3
  825. package/alert/package.json +0 -3
  826. package/badge/package.json +0 -3
  827. package/bignumber-input/package.json +0 -3
  828. package/breadcrumb/package.json +0 -3
  829. package/button/package.json +0 -3
  830. package/calendar-mask/package.json +0 -3
  831. package/card/package.json +0 -3
  832. package/chat/package.json +0 -3
  833. package/checkbox/package.json +0 -3
  834. package/checkbox-list/package.json +0 -3
  835. package/chips/package.json +0 -3
  836. package/code-editor/package.json +0 -3
  837. package/collapse-link/package.json +0 -3
  838. package/common/package.json +0 -3
  839. package/confirm-dialog/package.json +0 -3
  840. package/control-errors/package.json +0 -3
  841. package/country-phone-picker/package.json +0 -3
  842. package/currency/package.json +0 -3
  843. package/custom-fields/package.json +0 -3
  844. package/dialog/package.json +0 -3
  845. package/dynamic-form/package.json +0 -3
  846. package/editable-overlay/package.json +0 -3
  847. package/empty-state/package.json +0 -3
  848. package/fieldset/package.json +0 -3
  849. package/file-upload/package.json +0 -3
  850. package/gantt/package.json +0 -3
  851. package/global-search/package.json +0 -3
  852. package/grid-menu/package.json +0 -3
  853. package/help-popover/package.json +0 -3
  854. package/ia-insight/package.json +0 -3
  855. package/image-cropper/package.json +0 -3
  856. package/infinite-scroll/package.json +0 -3
  857. package/info-sign/package.json +0 -3
  858. package/inline-edit/package.json +0 -3
  859. package/interactive-content/package.json +0 -3
  860. package/kanban/package.json +0 -3
  861. package/label-value/package.json +0 -3
  862. package/loading-state/package.json +0 -3
  863. package/locale/package.json +0 -3
  864. package/localized-number-input/package.json +0 -3
  865. package/mask/package.json +0 -3
  866. package/mouse-events/package.json +0 -3
  867. package/navigation-button/package.json +0 -3
  868. package/number-input/package.json +0 -3
  869. package/numeric/package.json +0 -3
  870. package/object-card/package.json +0 -3
  871. package/paginator/package.json +0 -3
  872. package/panel/package.json +0 -3
  873. package/password-strength/package.json +0 -3
  874. package/picklist/package.json +0 -3
  875. package/product-header/package.json +0 -3
  876. package/profile-picture-picker/package.json +0 -3
  877. package/progressbar/package.json +0 -3
  878. package/rating-scale/package.json +0 -3
  879. package/select-button/package.json +0 -3
  880. package/shared/package.json +0 -3
  881. package/sidebar/package.json +0 -3
  882. package/slide-panel/package.json +0 -3
  883. package/slider/package.json +0 -3
  884. package/speech-recognition/package.json +0 -3
  885. package/split-button/package.json +0 -3
  886. package/star-rating/package.json +0 -3
  887. package/stats-card/package.json +0 -3
  888. package/steps/package.json +0 -3
  889. package/structure/package.json +0 -3
  890. package/switch/package.json +0 -3
  891. package/table/package.json +0 -3
  892. package/table-header/package.json +0 -3
  893. package/tabs/package.json +0 -3
  894. package/template/package.json +0 -3
  895. package/text-area/package.json +0 -3
  896. package/text-area-ia/package.json +0 -3
  897. package/thumbnail/package.json +0 -3
  898. package/thumbnails/package.json +0 -3
  899. package/tiered-menu/lib/tiered-menu/utils.d.ts +0 -2
  900. package/tiered-menu/package.json +0 -3
  901. package/tile/package.json +0 -3
  902. package/timeline/package.json +0 -3
  903. package/toast/package.json +0 -3
  904. package/token-list/package.json +0 -3
  905. package/tooltip/package.json +0 -3
  906. package/utils/package.json +0 -3
  907. package/workspace-switch/package.json +0 -3
@@ -0,0 +1,712 @@
1
+ import { DomPortalOutlet, TemplatePortal } from '@angular/cdk/portal';
2
+ import { ScrollingModule } from '@angular/cdk/scrolling';
3
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
4
+ import { Component, computed, ElementRef, forwardRef, inject, input, model, PLATFORM_ID, signal, viewChild, ViewContainerRef, } from '@angular/core';
5
+ import { FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
6
+ import { TranslateModule, TranslateService } from '@ngx-translate/core';
7
+ import { debounceTime, distinctUntilChanged, takeUntil } from 'rxjs/operators';
8
+ import { SelectOptionComponent } from './components/select-option/select-option.component';
9
+ import { Subject } from 'rxjs';
10
+ import { CheckboxComponent } from '@seniorsistemas/angular-components/checkbox';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common";
13
+ import * as i2 from "@angular/forms";
14
+ import * as i3 from "@angular/cdk/scrolling";
15
+ import * as i4 from "@ngx-translate/core";
16
+ export class SelectComponent {
17
+ placeholder = input('');
18
+ multiple = input(false);
19
+ options = input.required();
20
+ optionLabel = input();
21
+ optionValue = input();
22
+ showClear = input(false);
23
+ filter = input(false);
24
+ checkmark = input(false);
25
+ filterBy = input();
26
+ group = input(false);
27
+ virtualScroll = input(false);
28
+ virtualScrollItemSize = input(37);
29
+ emptyMessage = input(null);
30
+ useRawValue = input(false);
31
+ dataKey = input();
32
+ disabled = model(false);
33
+ showOptions = signal(false);
34
+ value = signal(null);
35
+ values = signal([]);
36
+ filterValue = signal('');
37
+ focusedIndex = signal(-1);
38
+ dropTop = 0;
39
+ dropLeft = 0;
40
+ dropWidth = 0;
41
+ _portalHost = null;
42
+ /**
43
+ * Verifica se todas as opções visíveis (filtradas e não agrupadoras) estão selecionadas.
44
+ *
45
+ * - Retorna `true` se todas as opções filtradas estiverem presentes em `values()`.
46
+ * - Ignora opções marcadas como `grouper`.
47
+ * - Usa `_getCompareValueExtractor()` para comparar os valores de forma consistente.
48
+ *
49
+ * Esse estado é usado para controlar o checkbox de "Selecionar todos" quando todas as opções visíveis estão marcadas.
50
+ */
51
+ allSelected = computed(() => {
52
+ const selected = this.values();
53
+ const options = this.filteredOptions().filter((o) => !o.grouper);
54
+ return (options.length > 0 &&
55
+ options.every((option) => selected.some((s) => this._getCompareValueExtractor()(s) === this._getCompareValueExtractor()(option))));
56
+ });
57
+ focusedItem = computed(() => this.filteredOptions().at(this.focusedIndex())?.data ?? null);
58
+ /**
59
+ * Converte as opções externas (`options()`) em uma estrutura interna padronizada (`InternalDropdownOption<T>`).
60
+ *
61
+ * - Se os dados forem primitivos (string, number, etc.), gera opções com IDs baseados no índice.
62
+ * - Se os dados forem objetos, delega a criação das opções para `_addIdToOptions()`, que adiciona IDs e marca agrupadores.
63
+ * - Se o modo agrupado estiver ativo (`group()`), transforma as opções em uma lista achatada com agrupadores via `_grouperToFlat()`.
64
+ *
65
+ * Essa estrutura é usada internamente para renderização, filtragem e controle de seleção.
66
+ */
67
+ internalOptions = computed(() => {
68
+ const opts = this.options();
69
+ const optionsWithId = this.TIsPrimitive()
70
+ ? opts.map((value, index) => ({
71
+ id: `id_primitive_${index}`,
72
+ grouper: false,
73
+ data: value,
74
+ }))
75
+ : this._addIdToOptions(opts);
76
+ return this.group() ? this._grouperToFlat(optionsWithId) : optionsWithId;
77
+ });
78
+ /**
79
+ * Retorna o texto que deve ser exibido no componente com base nos valores selecionados.
80
+ *
81
+ * - No modo múltiplo:
82
+ * - Se houver mais de um item selecionado, exibe uma mensagem traduzida com o total de registros.
83
+ * - Se houver apenas um item selecionado, exibe o label correspondente.
84
+ * - No modo simples:
85
+ * - Exibe o label do valor selecionado. *
86
+ * - Se nenhum valor estiver selecionado, retorna uma string vazia.
87
+ *
88
+ * Essa lógica é usada para mostrar o conteúdo atual do campo de seleção.
89
+ */
90
+ print = computed(() => {
91
+ if (this.multiple()) {
92
+ const selected = this.values();
93
+ if (selected.length > 1) {
94
+ return this._translateService.instant(`platform.angular_components.total_records_selected`, {
95
+ count: selected.length,
96
+ });
97
+ }
98
+ else if (selected.length === 1) {
99
+ return this._getLabelFromOption(selected[0]);
100
+ }
101
+ }
102
+ else if (this.value()) {
103
+ return this._getLabelFromOption(this.value());
104
+ }
105
+ return '';
106
+ });
107
+ isClean = computed(() => {
108
+ return this.multiple() ? !this.values().length : !this.value();
109
+ });
110
+ TIsPrimitive = computed(() => {
111
+ const opts = this.options();
112
+ if (!opts.length)
113
+ return false;
114
+ return ['string', 'number', 'boolean'].includes(typeof opts[0]);
115
+ });
116
+ /**
117
+ * Indica se o estado de seleção está indeterminado.
118
+ *
119
+ * - Retorna `true` quando **algumas**, mas não todas, opções visíveis estão selecionadas.
120
+ * - Retorna `false` quando **todas** ou **nenhuma** das opções visíveis estão selecionadas.
121
+ * - Ignora opções marcadas como `grouper`.
122
+ *
123
+ * Esse estado é usado, por exemplo, para exibir o checkbox de "Selecionar todos" em modo indeterminado.
124
+ */
125
+ selectAllIsIndeterminate = computed(() => {
126
+ const selected = this.values();
127
+ const options = this.filteredOptions().filter((o) => !o.grouper);
128
+ const all = options.length > 0 && options.every((o) => selected.includes(o.data));
129
+ const none = options.every((o) => !selected.includes(o.data));
130
+ return !all && !none;
131
+ });
132
+ /**
133
+ * Retorna a lista de opções filtradas com base no valor digitado pelo usuário.
134
+ *
135
+ * - Se o filtro estiver desativado ou vazio, retorna todas as opções.
136
+ * - Caso contrário, aplica o filtro usando o(s) campo(s) definidos em `filterBy`.
137
+ * - Ignora opções marcadas como `grouper`.
138
+ * - Usa o extrator de label para comparar os valores com o texto buscado.
139
+ */
140
+ filteredOptions = computed(() => {
141
+ const allOptions = this.internalOptions();
142
+ const search = this.filterValue().toLowerCase().trim();
143
+ if (!this.filter() || !search) {
144
+ return allOptions;
145
+ }
146
+ const filterBy = this.filterBy();
147
+ return allOptions.filter((option) => {
148
+ if (option.grouper) {
149
+ return false;
150
+ }
151
+ const labelExtractor = this._getLabelExtractor();
152
+ let label = '';
153
+ if (!filterBy) {
154
+ label = labelExtractor(option.data);
155
+ }
156
+ else if (Array.isArray(filterBy)) {
157
+ label = filterBy.map((by) => String(option.data[by] ?? '')).join(' ');
158
+ }
159
+ else {
160
+ label = String(option.data[filterBy] ?? '');
161
+ }
162
+ return label.toLowerCase().includes(search);
163
+ });
164
+ });
165
+ filterForm = new FormGroup({
166
+ filter: new FormControl('', { nonNullable: true }),
167
+ });
168
+ _elementRef = inject((ElementRef));
169
+ _dropdownTemplate = viewChild('dropdownTemplate');
170
+ _containerDiv = viewChild('containerDiv');
171
+ _onChange = () => { };
172
+ _onTouched = () => { };
173
+ platformId = inject(PLATFORM_ID);
174
+ _viewContainerRef = inject(ViewContainerRef);
175
+ _translateService = inject(TranslateService);
176
+ destroy$ = new Subject();
177
+ /**
178
+ * Inicializa o componente, validando os inputs e configurando o filtro com debounce.
179
+ */
180
+ ngOnInit() {
181
+ this._validateInputs();
182
+ this.filterForm
183
+ .get('filter')
184
+ .valueChanges.pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$))
185
+ .subscribe((value) => {
186
+ this.filterValue.set(value);
187
+ });
188
+ }
189
+ /**
190
+ * Executa limpeza de recursos ao destruir o componente.
191
+ */
192
+ ngOnDestroy() {
193
+ this._destroyDropdownPortal();
194
+ if (this._portalHost) {
195
+ this._portalHost.dispose();
196
+ this._portalHost = null;
197
+ }
198
+ this.destroy$.next();
199
+ this.destroy$.complete();
200
+ }
201
+ /**
202
+ * Define o valor no componente vindo do formulário externo.
203
+ * @param value Valor atribuído pelo Angular forms.
204
+ */
205
+ writeValue(value) {
206
+ if (this.multiple()) {
207
+ if (Array.isArray(value)) {
208
+ const items = this.TIsPrimitive()
209
+ ? value.map((v) => this._findOptionByPrimitiveValue(v)).filter(Boolean)
210
+ : this.useRawValue()
211
+ ? value
212
+ : value.map((v) => this._findOptionByValue(v)).filter(Boolean);
213
+ this.values.set(items);
214
+ }
215
+ else {
216
+ this.values.set([]);
217
+ }
218
+ }
219
+ else {
220
+ const item = this.TIsPrimitive()
221
+ ? this._findOptionByPrimitiveValue(value)
222
+ : this.useRawValue()
223
+ ? value
224
+ : this._findOptionByValue(value);
225
+ this.value.set(item ?? null);
226
+ }
227
+ }
228
+ /**
229
+ * Registra a função que será chamada quando o valor mudar.
230
+ * @param onChange Função callback.
231
+ */
232
+ registerOnChange(onChange) {
233
+ this._onChange = onChange;
234
+ }
235
+ /**
236
+ * Registra a função que será chamada quando o componente for "tocado".
237
+ * @param onTouched Função callback.
238
+ */
239
+ registerOnTouched(onTouched) {
240
+ this._onTouched = onTouched;
241
+ }
242
+ /**
243
+ * Define o estado de desabilitado do componente.
244
+ * @param disabled Indica se o componente está desabilitado.
245
+ */
246
+ setDisabledState(disabled) {
247
+ this.disabled.set(disabled);
248
+ }
249
+ /**
250
+ * Alterna a exibição da lista de opções (dropdown).
251
+ */
252
+ toggle() {
253
+ if (this.disabled()) {
254
+ return;
255
+ }
256
+ const shouldOpen = !this.showOptions();
257
+ this.showOptions.set(shouldOpen);
258
+ if (shouldOpen) {
259
+ setTimeout(() => {
260
+ this._createDropdownPortal();
261
+ });
262
+ }
263
+ else {
264
+ this._destroyDropdownPortal();
265
+ }
266
+ }
267
+ /**
268
+ * Seleciona ou desseleciona um item na lista.
269
+ * @param item Item a ser selecionado ou desmarcado.
270
+ */
271
+ selectItem(item) {
272
+ if (this.disabled()) {
273
+ return;
274
+ }
275
+ const getCompareValue = this._getCompareValueExtractor();
276
+ if (this.multiple()) {
277
+ const store = [...this.values()];
278
+ const itemValue = getCompareValue(item);
279
+ const index = store.findIndex((selectedItem) => {
280
+ return getCompareValue(selectedItem) === itemValue;
281
+ });
282
+ if (index !== -1) {
283
+ store.splice(index, 1);
284
+ }
285
+ else {
286
+ store.push(item);
287
+ }
288
+ this.values.set(store);
289
+ const result = this.useRawValue() ? store : store.map((i) => this._getValueExtractor()(i));
290
+ this._onChange(result);
291
+ }
292
+ else {
293
+ this.value.set(item);
294
+ const result = this.useRawValue() ? item : this._getValueExtractor()(item);
295
+ this._onChange(result);
296
+ this._closeDropdown();
297
+ }
298
+ this._onTouched();
299
+ }
300
+ /**
301
+ * Limpa a seleção atual.
302
+ * @param event Evento do clique.
303
+ */
304
+ clear(event) {
305
+ if (this.disabled()) {
306
+ return;
307
+ }
308
+ if (this.multiple()) {
309
+ this.values.set([]);
310
+ this._onChange(this._removeInternalProperties(this.values()));
311
+ }
312
+ else {
313
+ this.value.set(null);
314
+ this._onChange(this.value());
315
+ }
316
+ this._closeDropdown();
317
+ this._onTouched();
318
+ event.stopPropagation();
319
+ }
320
+ /**
321
+ * Limpa o filtro aplicado à lista de opções.
322
+ */
323
+ clearFilter() {
324
+ this.filterForm.get('filter')?.reset();
325
+ }
326
+ /**
327
+ * Fecha o dropdown se o clique ocorrer fora do componente.
328
+ * @param event Evento do clique.
329
+ */
330
+ onDocumentClick(event) {
331
+ const clickTarget = event.target;
332
+ const clickedInsideComponent = this._elementRef.nativeElement.contains(clickTarget);
333
+ const dropdownInBody = document.querySelector('.dropdown-body-class')?.contains(clickTarget);
334
+ if (!clickedInsideComponent && !dropdownInBody) {
335
+ this._closeDropdown();
336
+ }
337
+ }
338
+ /**
339
+ * Fecha o dropdown em eventos de redimensionamento de janela.
340
+ */
341
+ onWindowResize(_) {
342
+ if (this.showOptions()) {
343
+ this._closeDropdown();
344
+ }
345
+ }
346
+ /**
347
+ * Dispara a abertura/fechamento do dropdown ao clicar no container.
348
+ */
349
+ onContainerDivClick() {
350
+ this.toggle();
351
+ this._containerDiv()?.nativeElement.focus();
352
+ }
353
+ /**
354
+ * Trata eventos de teclado para navegação e seleção.
355
+ * @param event Evento do teclado.
356
+ */
357
+ onKeyDown(event) {
358
+ const options = this.filteredOptions();
359
+ if (!options.length) {
360
+ return;
361
+ }
362
+ const _selectOption = () => {
363
+ if (this.focusedIndex() >= 0 && this.focusedIndex() < options.length) {
364
+ event.preventDefault();
365
+ this.selectItem(options[this.focusedIndex()].data);
366
+ }
367
+ };
368
+ switch (event.key) {
369
+ case 'ArrowDown':
370
+ event.preventDefault();
371
+ this._focusNextOption(options);
372
+ break;
373
+ case 'ArrowUp':
374
+ event.preventDefault();
375
+ this._focusPreviousOption(options);
376
+ break;
377
+ case 'Tab':
378
+ _selectOption();
379
+ this._closeDropdown();
380
+ break;
381
+ case 'Enter':
382
+ if (this.showOptions()) {
383
+ _selectOption();
384
+ }
385
+ else {
386
+ this.toggle();
387
+ }
388
+ break;
389
+ case 'Escape':
390
+ this._closeDropdown();
391
+ break;
392
+ case ' ':
393
+ _selectOption();
394
+ break;
395
+ }
396
+ }
397
+ /**
398
+ * Retorna o rótulo de exibição de uma opção.
399
+ * @param option Item da lista de opções.
400
+ * @returns Texto que será exibido no dropdown.
401
+ */
402
+ getOptionLabel(option) {
403
+ return this._getLabelFromOption(option);
404
+ }
405
+ /**
406
+ * Função usada para o trackBy no for do template.
407
+ * @param _ Índice do item.
408
+ * @param item Item da lista.
409
+ * @returns ID único da opção.
410
+ */
411
+ trackById(_, item) {
412
+ return item.id;
413
+ }
414
+ /**
415
+ * Verifica se uma opção está selecionada.
416
+ * @param option Opção a ser verificada.
417
+ * @returns Verdadeiro se a opção estiver selecionada.
418
+ */
419
+ isOptionSelected(option) {
420
+ const getCompareValue = this._getCompareValueExtractor();
421
+ if (this.multiple()) {
422
+ const selectedValues = this.values().map(getCompareValue);
423
+ return selectedValues.includes(getCompareValue(option));
424
+ }
425
+ else {
426
+ const currentValue = this.value();
427
+ return currentValue !== null && getCompareValue(currentValue) === getCompareValue(option);
428
+ }
429
+ }
430
+ /**
431
+ * Alterna a seleção de todos os itens filtrados.
432
+ */
433
+ toggleSelectAll() {
434
+ if (!this.multiple()) {
435
+ return;
436
+ }
437
+ const options = this.filteredOptions().filter((o) => !o.grouper);
438
+ if (this.allSelected()) {
439
+ this.values.set([]);
440
+ }
441
+ else {
442
+ this.values.set(options.map((o) => o.data));
443
+ }
444
+ this._onChange(this._removeInternalProperties(this.values()));
445
+ }
446
+ /**
447
+ * Procura e retorna uma opção com valor primitivo igual ao informado.
448
+ *
449
+ * @param value Valor primitivo (string, number ou boolean).
450
+ * @returns A opção correspondente, ou `null` se não encontrada.
451
+ */
452
+ _findOptionByPrimitiveValue(value) {
453
+ return this.internalOptions().find((opt) => opt.data === value)?.data ?? null;
454
+ }
455
+ /**
456
+ * Remove propriedades internas adicionadas pelo componente, retornando apenas os dados crus.
457
+ *
458
+ * Usado para garantir que apenas os objetos de dados reais sejam emitidos ao formulário,
459
+ * especialmente no modo múltiplo.
460
+ *
461
+ * @param value Valor armazenado internamente (com ou sem `InternalDropdownOption`).
462
+ * @returns Os dados "puros", sem propriedades adicionais.
463
+ */
464
+ _removeInternalProperties(value) {
465
+ if (this.TIsPrimitive()) {
466
+ return value;
467
+ }
468
+ return Array.isArray(value)
469
+ ? value.map((opt) => opt.data)
470
+ : value.data;
471
+ }
472
+ /**
473
+ * Retorna o texto (label) correspondente a uma determinada opção.
474
+ * Usa a propriedade definida em `optionLabel`, ou tenta usar uma propriedade padrão (`label`).
475
+ *
476
+ * @param option A opção a ser exibida.
477
+ * @returns O texto legível da opção para exibição no componente.
478
+ */
479
+ _getLabelFromOption(option) {
480
+ if (['string', 'number', 'boolean'].includes(typeof option)) {
481
+ return String(option);
482
+ }
483
+ const labelKey = this.optionLabel();
484
+ if (!labelKey) {
485
+ return String(option.label ?? '');
486
+ }
487
+ return String(option[labelKey]);
488
+ }
489
+ /**
490
+ * Valida os inputs obrigatórios do componente.
491
+ */
492
+ _validateInputs() {
493
+ if (!this.useRawValue() && !this.TIsPrimitive() && !this.optionValue()) {
494
+ throw new Error(`The 'optionValue' input must be provided for non-primitive options when useRawValue is false.`);
495
+ }
496
+ if (!this.TIsPrimitive() && !this.optionValue() && !this.dataKey()) {
497
+ throw new Error('Either the optionValue or dataKey input must be provided for non-primitive options.');
498
+ }
499
+ if (!this.TIsPrimitive() && !this.optionLabel()) {
500
+ throw new Error(`The 'optionLabel' input must be provided for non-primitive options.`);
501
+ }
502
+ }
503
+ _findOptionByValue(value) {
504
+ if (this.useRawValue()) {
505
+ return this.options().find((option) => option === value) ?? null;
506
+ }
507
+ const getValue = this._getValueExtractor();
508
+ return this.options().find((option) => getValue(option) === value) ?? null;
509
+ }
510
+ /**
511
+ * Extrai o valor final de uma opção, com base em `optionValue`.
512
+ * @returns Função que retorna o valor da opção.
513
+ */
514
+ _getValueExtractor() {
515
+ if (this.TIsPrimitive()) {
516
+ return (option) => option;
517
+ }
518
+ if (this.useRawValue()) {
519
+ return (option) => option;
520
+ }
521
+ const valueInput = this.optionValue();
522
+ if (valueInput) {
523
+ return (option) => option[valueInput];
524
+ }
525
+ throw new Error(`optionValue is required for non-primitive options.`);
526
+ }
527
+ /**
528
+ * Extrai o valor comparável de uma opção.
529
+ * @returns Função que retorna a chave de comparação.
530
+ */
531
+ _getCompareValueExtractor() {
532
+ if (this.TIsPrimitive()) {
533
+ return (option) => option;
534
+ }
535
+ if (this.dataKey()) {
536
+ const key = this.dataKey();
537
+ return (option) => option[key];
538
+ }
539
+ return this._getValueExtractor();
540
+ }
541
+ /**
542
+ * Fecha o dropdown e redefine o foco.
543
+ */
544
+ _closeDropdown() {
545
+ this.showOptions.set(false);
546
+ this._destroyDropdownPortal();
547
+ this.focusedIndex.set(-1);
548
+ }
549
+ /**
550
+ * Adiciona identificadores únicos às opções.
551
+ * @param options Lista original de opções.
552
+ * @returns Lista com IDs adicionados.
553
+ */
554
+ _addIdToOptions(options) {
555
+ const timestamp = Date.now();
556
+ return options.map((option, index) => {
557
+ if (this.group() && Array.isArray(option.items)) {
558
+ return {
559
+ data: option,
560
+ id: `id_${timestamp}_${index++}`,
561
+ grouper: true,
562
+ };
563
+ }
564
+ return {
565
+ data: option,
566
+ id: `id_${timestamp}_${index++}`,
567
+ };
568
+ });
569
+ }
570
+ /**
571
+ * Converte uma estrutura agrupada em uma lista achatada.
572
+ * @param options Lista de opções com agrupadores.
573
+ * @returns Lista achatada de opções e grupos.
574
+ */
575
+ _grouperToFlat(options) {
576
+ const result = [];
577
+ options.forEach((option) => {
578
+ if (option.grouper && Array.isArray(option.data.items)) {
579
+ result.push(option);
580
+ const groupItems = option.data.items.map((item, index) => ({
581
+ data: item,
582
+ id: `${option.id}_item_${index}`,
583
+ }));
584
+ result.push(...groupItems);
585
+ }
586
+ else {
587
+ result.push(option);
588
+ }
589
+ });
590
+ return result;
591
+ }
592
+ /**
593
+ * Move o foco para a próxima opção.
594
+ * @param options Lista de opções visíveis.
595
+ */
596
+ _focusNextOption(options) {
597
+ let nextIndex = this.focusedIndex() + 1;
598
+ while (nextIndex < options.length && options[nextIndex].grouper) {
599
+ nextIndex++;
600
+ }
601
+ if (nextIndex < options.length) {
602
+ this.focusedIndex.set(nextIndex);
603
+ this._scrollToFocusedOption();
604
+ }
605
+ }
606
+ /**
607
+ * Move o foco para a opção anterior.
608
+ * @param options Lista de opções visíveis.
609
+ */
610
+ _focusPreviousOption(options) {
611
+ let prevIndex = this.focusedIndex() - 1;
612
+ while (prevIndex >= 0 && options[prevIndex].grouper) {
613
+ prevIndex--;
614
+ }
615
+ if (prevIndex >= 0) {
616
+ this.focusedIndex.set(prevIndex);
617
+ this._scrollToFocusedOption();
618
+ }
619
+ }
620
+ /**
621
+ * Rola o dropdown até a opção atualmente focada.
622
+ */
623
+ _scrollToFocusedOption() {
624
+ const id = this.filteredOptions()[this.focusedIndex()]?.id;
625
+ if (!id) {
626
+ return;
627
+ }
628
+ const el = document.getElementById(id);
629
+ el?.scrollIntoView({ block: 'nearest' });
630
+ }
631
+ /**
632
+ * Extrai o texto de uma opção, com base em `optionLabel`.
633
+ * @returns Função que retorna o label da opção.
634
+ */
635
+ _getLabelExtractor() {
636
+ if (this.TIsPrimitive()) {
637
+ return (option) => String(option);
638
+ }
639
+ const labelInput = this.optionLabel();
640
+ if (labelInput) {
641
+ return (option) => String(option[labelInput] ?? '');
642
+ }
643
+ else {
644
+ throw new Error(`optionLabel is required for non-primitive options.`);
645
+ }
646
+ }
647
+ /**
648
+ * Cria e posiciona dinamicamente o dropdown como portal.
649
+ */
650
+ _createDropdownPortal() {
651
+ if (!isPlatformBrowser(this.platformId)) {
652
+ return;
653
+ }
654
+ const container = this._containerDiv();
655
+ const template = this._dropdownTemplate();
656
+ if (!container || !template) {
657
+ return;
658
+ }
659
+ const dropElementRect = container.nativeElement.getBoundingClientRect();
660
+ this.dropTop = dropElementRect.bottom + window.scrollY;
661
+ this.dropLeft = dropElementRect.left + window.scrollX;
662
+ this.dropWidth = dropElementRect.width;
663
+ this._destroyDropdownPortal();
664
+ this._portalHost = new DomPortalOutlet(document.body);
665
+ const portal = new TemplatePortal(template, this._viewContainerRef);
666
+ this._portalHost.attach(portal);
667
+ const dropdownEl = document.querySelector('.dropdown-body-class');
668
+ if (dropdownEl) {
669
+ dropdownEl.style.position = 'absolute';
670
+ dropdownEl.style.top = `${this.dropTop + 4}px`;
671
+ dropdownEl.style.left = `${this.dropLeft}px`;
672
+ dropdownEl.style.width = `${this.dropWidth}px`;
673
+ }
674
+ }
675
+ /**
676
+ * Remove o portal do dropdown do DOM.
677
+ */
678
+ _destroyDropdownPortal() {
679
+ if (this._portalHost?.hasAttached()) {
680
+ this._portalHost.detach();
681
+ }
682
+ }
683
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
684
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SelectComponent, isStandalone: true, selector: "s-select", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, optionLabel: { classPropertyName: "optionLabel", publicName: "optionLabel", isSignal: true, isRequired: false, transformFunction: null }, optionValue: { classPropertyName: "optionValue", publicName: "optionValue", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, filter: { classPropertyName: "filter", publicName: "filter", isSignal: true, isRequired: false, transformFunction: null }, checkmark: { classPropertyName: "checkmark", publicName: "checkmark", isSignal: true, isRequired: false, transformFunction: null }, filterBy: { classPropertyName: "filterBy", publicName: "filterBy", isSignal: true, isRequired: false, transformFunction: null }, group: { classPropertyName: "group", publicName: "group", isSignal: true, isRequired: false, transformFunction: null }, virtualScroll: { classPropertyName: "virtualScroll", publicName: "virtualScroll", isSignal: true, isRequired: false, transformFunction: null }, virtualScrollItemSize: { classPropertyName: "virtualScrollItemSize", publicName: "virtualScrollItemSize", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, useRawValue: { classPropertyName: "useRawValue", publicName: "useRawValue", isSignal: true, isRequired: false, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { disabled: "disabledChange" }, host: { listeners: { "document:click": "onDocumentClick($event)", "window:resize": "onWindowResize($event)" } }, providers: [
685
+ {
686
+ provide: NG_VALUE_ACCESSOR,
687
+ useExisting: forwardRef(() => SelectComponent),
688
+ multi: true,
689
+ },
690
+ ], viewQueries: [{ propertyName: "_dropdownTemplate", first: true, predicate: ["dropdownTemplate"], descendants: true, isSignal: true }, { propertyName: "_containerDiv", first: true, predicate: ["containerDiv"], descendants: true, isSignal: true }], ngImport: i0, template: "<ng-template #portalAnchor></ng-template>\n\n<div\n #containerDiv\n class=\"group flex w-full overflow-hidden rounded-[3px] border outline-1 outline-primary focus:outline\"\n [ngClass]=\"{\n 'pointer-events-none border-grayscale-20 bg-grayscale-5': disabled(),\n 'pointer-events-auto border-grayscale-30 bg-grayscale-0': !disabled(),\n }\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n>\n <span\n class=\"flex flex-grow select-none px-3 py-[7px]\"\n [ngClass]=\"{\n 'text-grayscale-90': !disabled() && !isClean(),\n 'text-grayscale-60': !disabled() && isClean(),\n 'text-grayscale-30': disabled(),\n }\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n >\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n }\n\n <div\n class=\"flex items-center border-l px-3 group-hover:bg-grayscale-10 group-focus:border-primary\"\n [ngClass]=\"{ 'border-grayscale-20': disabled(), 'border-grayscale-30': !disabled() }\"\n >\n <i\n class=\"fas\"\n [ngClass]=\"{\n 'text-grayscale-30': disabled(),\n 'text-grayscale-90': !disabled(),\n 'fa-caret-down': !showOptions(),\n 'fa-caret-up': showOptions(),\n }\"\n ></i>\n </div>\n</div>\n\n<ng-template #dropdownTemplate>\n <div\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"dropTop\"\n [style.left.px]=\"dropLeft\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 outline-1 outline-primary\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n />\n </form>\n <i class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"></i>\n </div>\n <button (click)=\"clearFilter()\">\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option.data)\"\n (selected)=\"selectItem(option.data)\"\n [isGrouper]=\"option.grouper\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul class=\"max-h-52 overflow-auto\">\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option.data)\"\n (selected)=\"selectItem(option.data)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">{{\n emptyMessage() ?? 'platform.angular_components.no_records_found' | translate\n }}</span>\n }\n </div>\n</ng-template>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i3.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i3.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i3.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: SelectOptionComponent, selector: "s-select-option", inputs: ["id", "label", "multiple", "checkmark", "isGrouper", "isFocused", "isSelected"], outputs: ["isSelectedChange", "selected"] }, { kind: "component", type: CheckboxComponent, selector: "s-checkbox", inputs: ["disabled", "checked", "indeterminate", "label"], outputs: ["disabledChange", "checkedChange", "indeterminateChange"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
691
+ }
692
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SelectComponent, decorators: [{
693
+ type: Component,
694
+ args: [{ selector: 's-select', standalone: true, imports: [
695
+ CommonModule,
696
+ ReactiveFormsModule,
697
+ ScrollingModule,
698
+ SelectOptionComponent,
699
+ CheckboxComponent,
700
+ TranslateModule,
701
+ ], host: {
702
+ '(document:click)': 'onDocumentClick($event)',
703
+ '(window:resize)': 'onWindowResize($event)',
704
+ }, providers: [
705
+ {
706
+ provide: NG_VALUE_ACCESSOR,
707
+ useExisting: forwardRef(() => SelectComponent),
708
+ multi: true,
709
+ },
710
+ ], template: "<ng-template #portalAnchor></ng-template>\n\n<div\n #containerDiv\n class=\"group flex w-full overflow-hidden rounded-[3px] border outline-1 outline-primary focus:outline\"\n [ngClass]=\"{\n 'pointer-events-none border-grayscale-20 bg-grayscale-5': disabled(),\n 'pointer-events-auto border-grayscale-30 bg-grayscale-0': !disabled(),\n }\"\n [attr.aria-disabled]=\"disabled()\"\n (click)=\"onContainerDivClick()\"\n (keydown)=\"onKeyDown($event)\"\n tabindex=\"0\"\n>\n <span\n class=\"flex flex-grow select-none px-3 py-[7px]\"\n [ngClass]=\"{\n 'text-grayscale-90': !disabled() && !isClean(),\n 'text-grayscale-60': !disabled() && isClean(),\n 'text-grayscale-30': disabled(),\n }\"\n >\n {{ print() || placeholder() }}\n </span>\n\n @if (!disabled() && showClear() && !isClean()) {\n <button\n class=\"mx-3\"\n (click)=\"clear($event)\"\n >\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n }\n\n <div\n class=\"flex items-center border-l px-3 group-hover:bg-grayscale-10 group-focus:border-primary\"\n [ngClass]=\"{ 'border-grayscale-20': disabled(), 'border-grayscale-30': !disabled() }\"\n >\n <i\n class=\"fas\"\n [ngClass]=\"{\n 'text-grayscale-30': disabled(),\n 'text-grayscale-90': !disabled(),\n 'fa-caret-down': !showOptions(),\n 'fa-caret-up': showOptions(),\n }\"\n ></i>\n </div>\n</div>\n\n<ng-template #dropdownTemplate>\n <div\n class=\"dropdown-body-class z-[1000] rounded-[3px] bg-grayscale-0 py-1 shadow-md\"\n [style.position]=\"'absolute'\"\n [style.top.px]=\"dropTop\"\n [style.left.px]=\"dropLeft\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (filter()) {\n <div class=\"flex w-full items-center gap-3 px-3 py-1.5\">\n @if (multiple()) {\n <s-checkbox\n #selectAllCheckbox\n [checked]=\"allSelected()\"\n [indeterminate]=\"selectAllIsIndeterminate()\"\n (checkedChange)=\"toggleSelectAll()\"\n ></s-checkbox>\n }\n\n <div class=\"relative flex h-[35px] grow\">\n <form\n class=\"flex grow\"\n [formGroup]=\"filterForm\"\n >\n <input\n class=\"w-full grow rounded-[3px] border border-grayscale-30 pl-2.5 pr-7 outline-1 outline-primary\"\n type=\"text\"\n formControlName=\"filter\"\n (click)=\"$event.stopPropagation()\"\n />\n </form>\n <i class=\"fas fa-search absolute right-2.5 top-2.5 text-grayscale-90\"></i>\n </div>\n <button (click)=\"clearFilter()\">\n <i class=\"fas fa-times flex items-center\"></i>\n </button>\n </div>\n }\n\n <!-- Virtual scroll -->\n @if (virtualScroll() && filteredOptions().length > 10) {\n <cdk-virtual-scroll-viewport\n [itemSize]=\"virtualScrollItemSize()\"\n class=\"h-52 overflow-auto\"\n >\n <ng-container *cdkVirtualFor=\"let option of filteredOptions(); trackBy: trackById\">\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option.data)\"\n (selected)=\"selectItem(option.data)\"\n [isGrouper]=\"option.grouper\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n }\n\n <!-- Normal list -->\n @if (!virtualScroll() || filteredOptions().length <= 10) {\n <ul class=\"max-h-52 overflow-auto\">\n @for (option of filteredOptions(); track option.id) {\n <s-select-option\n [id]=\"option.id\"\n [label]=\"getOptionLabel(option.data)\"\n [multiple]=\"multiple()\"\n [checkmark]=\"checkmark()\"\n [isSelected]=\"isOptionSelected(option.data)\"\n (selected)=\"selectItem(option.data)\"\n [isGrouper]=\"option.grouper ?? false\"\n [isFocused]=\"option.data === focusedItem()\"\n ></s-select-option>\n }\n </ul>\n }\n\n @if (filteredOptions().length === 0) {\n <span class=\"m-3 text-grayscale-60\">{{\n emptyMessage() ?? 'platform.angular_components.no_records_found' | translate\n }}</span>\n }\n </div>\n</ng-template>\n" }]
711
+ }] });
712
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zZWxlY3Qvc3JjL2xpYi9zZWxlY3Qvc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUdMLFdBQVcsRUFDWCxNQUFNLEVBRU4sU0FBUyxFQUNULGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0SCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDOzs7Ozs7QUEr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Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0osaVJDdkRMLGd3S0F1SUEsMkNEakdRLFlBQVksNEhBQ1osbUJBQW1CLDQ4QkFDbkIsZUFBZSw0akJBQ2YscUJBQXFCLGlNQUNyQixpQkFBaUIsc0xBQ2pCLGVBQWU7OzRGQWNWLGVBQWU7a0JBeEIzQixTQUFTOytCQUNJLFVBQVUsY0FFUixJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YscUJBQXFCO3dCQUNyQixpQkFBaUI7d0JBQ2pCLGVBQWU7cUJBQ2xCLFFBQ0s7d0JBQ0Ysa0JBQWtCLEVBQUUseUJBQXlCO3dCQUM3QyxpQkFBaUIsRUFBRSx3QkFBd0I7cUJBQzlDLGFBQ1U7d0JBQ1A7NEJBQ0ksT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgU2Nyb2xsaW5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUsIGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgZm9yd2FyZFJlZixcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgbW9kZWwsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBQTEFURk9STV9JRCxcbiAgICBzaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIE5HX1ZBTFVFX0FDQ0VTU09SLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2VsZWN0T3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlbGVjdC1vcHRpb24vc2VsZWN0LW9wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ2hlY2tib3hDb21wb25lbnQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2NoZWNrYm94JztcblxuaW50ZXJmYWNlIEludGVybmFsRHJvcGRvd25PcHRpb248VD4ge1xuICAgIGRhdGE6IFQ7XG4gICAgaWQ6IHN0cmluZztcbiAgICBncm91cGVyPzogYm9vbGVhbjtcbn1cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1zZWxlY3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFNjcm9sbGluZ01vZHVsZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBDaGVja2JveENvbXBvbmVudCxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICAnKGRvY3VtZW50OmNsaWNrKSc6ICdvbkRvY3VtZW50Q2xpY2soJGV2ZW50KScsXG4gICAgICAgICcod2luZG93OnJlc2l6ZSknOiAnb25XaW5kb3dSZXNpemUoJGV2ZW50KScsXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTZWxlY3RDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q29tcG9uZW50PFQ+IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXIgPSBpbnB1dCgnJyk7XG4gICAgcHVibGljIG11bHRpcGxlID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICAgIHB1YmxpYyBvcHRpb25MYWJlbCA9IGlucHV0PGtleW9mIFQ+KCk7XG4gICAgcHVibGljIG9wdGlvblZhbHVlID0gaW5wdXQ8a2V5b2YgVD4oKTtcbiAgICBwdWJsaWMgc2hvd0NsZWFyID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyBmaWx0ZXIgPSBpbnB1dChmYWxzZSk7XG4gICAgcHVibGljIGNoZWNrbWFyayA9IGlucHV0KGZhbHNlKTtcbiAgICBwdWJsaWMgZmlsdGVyQnkgPSBpbnB1dDxrZXlvZiBUIHwgKGtleW9mIFQpW10+KCk7XG4gICAgcHVibGljIGdyb3VwID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsID0gaW5wdXQoZmFsc2UpO1xuICAgIHB1YmxpYyB2aXJ0dWFsU2Nyb2xsSXRlbVNpemUgPSBpbnB1dCgzNyk7XG4gICAgcHVibGljIGVtcHR5TWVzc2FnZSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICAgIHB1YmxpYyB1c2VSYXdWYWx1ZSA9IGlucHV0KGZhbHNlKTtcbiAgICBwdWJsaWMgZGF0YUtleSA9IGlucHV0PGtleW9mIFQ+KCk7XG5cbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBtb2RlbChmYWxzZSk7XG4gICAgcHVibGljIHNob3dPcHRpb25zID0gc2lnbmFsKGZhbHNlKTtcblxuICAgIHB1YmxpYyB2YWx1ZSA9IHNpZ25hbDxUIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIHZhbHVlcyA9IHNpZ25hbDxUW10+KFtdKTtcbiAgICBwdWJsaWMgZmlsdGVyVmFsdWUgPSBzaWduYWwoJycpO1xuICAgIHB1YmxpYyBmb2N1c2VkSW5kZXggPSBzaWduYWwoLTEpO1xuXG4gICAgcHVibGljIGRyb3BUb3AgPSAwO1xuICAgIHB1YmxpYyBkcm9wTGVmdCA9IDA7XG4gICAgcHVibGljIGRyb3BXaWR0aCA9IDA7XG5cbiAgICBwcml2YXRlIF9wb3J0YWxIb3N0OiBEb21Qb3J0YWxPdXRsZXQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWNhIHNlIHRvZGFzIGFzIG9ww6fDtWVzIHZpc8OtdmVpcyAoZmlsdHJhZGFzIGUgbsOjbyBhZ3J1cGFkb3JhcykgZXN0w6NvIHNlbGVjaW9uYWRhcy5cbiAgICAgKlxuICAgICAqIC0gUmV0b3JuYSBgdHJ1ZWAgc2UgdG9kYXMgYXMgb3DDp8O1ZXMgZmlsdHJhZGFzIGVzdGl2ZXJlbSBwcmVzZW50ZXMgZW0gYHZhbHVlcygpYC5cbiAgICAgKiAtIElnbm9yYSBvcMOnw7VlcyBtYXJjYWRhcyBjb21vIGBncm91cGVyYC5cbiAgICAgKiAtIFVzYSBgX2dldENvbXBhcmVWYWx1ZUV4dHJhY3RvcigpYCBwYXJhIGNvbXBhcmFyIG9zIHZhbG9yZXMgZGUgZm9ybWEgY29uc2lzdGVudGUuXG4gICAgICpcbiAgICAgKiBFc3NlIGVzdGFkbyDDqSB1c2FkbyBwYXJhIGNvbnRyb2xhciBvIGNoZWNrYm94IGRlIFwiU2VsZWNpb25hciB0b2Rvc1wiIHF1YW5kbyB0b2RhcyBhcyBvcMOnw7VlcyB2aXPDrXZlaXMgZXN0w6NvIG1hcmNhZGFzLlxuICAgICAqL1xuICAgIHB1YmxpYyBhbGxTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlcygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5maWx0ZXIoKG8pID0+ICFvLmdyb3VwZXIpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb3B0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICBvcHRpb25zLmV2ZXJ5KChvcHRpb24pID0+XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQuc29tZShcbiAgICAgICAgICAgICAgICAgICAgKHMpID0+IHRoaXMuX2dldENvbXBhcmVWYWx1ZUV4dHJhY3RvcigpKHMpID09PSB0aGlzLl9nZXRDb21wYXJlVmFsdWVFeHRyYWN0b3IoKShvcHRpb24gYXMgVCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBmb2N1c2VkSXRlbSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZmlsdGVyZWRPcHRpb25zKCkuYXQodGhpcy5mb2N1c2VkSW5kZXgoKSk/LmRhdGEgPz8gbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0ZSBhcyBvcMOnw7VlcyBleHRlcm5hcyAoYG9wdGlvbnMoKWApIGVtIHVtYSBlc3RydXR1cmEgaW50ZXJuYSBwYWRyb25pemFkYSAoYEludGVybmFsRHJvcGRvd25PcHRpb248VD5gKS5cbiAgICAgKlxuICAgICAqIC0gU2Ugb3MgZGFkb3MgZm9yZW0gcHJpbWl0aXZvcyAoc3RyaW5nLCBudW1iZXIsIGV0Yy4pLCBnZXJhIG9ww6fDtWVzIGNvbSBJRHMgYmFzZWFkb3Mgbm8gw61uZGljZS5cbiAgICAgKiAtIFNlIG9zIGRhZG9zIGZvcmVtIG9iamV0b3MsIGRlbGVnYSBhIGNyaWHDp8OjbyBkYXMgb3DDp8O1ZXMgcGFyYSBgX2FkZElkVG9PcHRpb25zKClgLCBxdWUgYWRpY2lvbmEgSURzIGUgbWFyY2EgYWdydXBhZG9yZXMuXG4gICAgICogLSBTZSBvIG1vZG8gYWdydXBhZG8gZXN0aXZlciBhdGl2byAoYGdyb3VwKClgKSwgdHJhbnNmb3JtYSBhcyBvcMOnw7VlcyBlbSB1bWEgbGlzdGEgYWNoYXRhZGEgY29tIGFncnVwYWRvcmVzIHZpYSBgX2dyb3VwZXJUb0ZsYXQoKWAuXG4gICAgICpcbiAgICAgKiBFc3NhIGVzdHJ1dHVyYSDDqSB1c2FkYSBpbnRlcm5hbWVudGUgcGFyYSByZW5kZXJpemHDp8OjbywgZmlsdHJhZ2VtIGUgY29udHJvbGUgZGUgc2VsZcOnw6NvLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnRlcm5hbE9wdGlvbnMgPSBjb21wdXRlZDxJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10+KCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucygpO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnNXaXRoSWQ6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSA9IHRoaXMuVElzUHJpbWl0aXZlKClcbiAgICAgICAgICAgID8gb3B0cy5tYXAoKHZhbHVlLCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICBpZDogYGlkX3ByaW1pdGl2ZV8ke2luZGV4fWAsXG4gICAgICAgICAgICAgICAgZ3JvdXBlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGF0YTogdmFsdWUgYXMgVCxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgOiB0aGlzLl9hZGRJZFRvT3B0aW9ucyhvcHRzKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5ncm91cCgpID8gdGhpcy5fZ3JvdXBlclRvRmxhdChvcHRpb25zV2l0aElkKSA6IG9wdGlvbnNXaXRoSWQ7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gdGV4dG8gcXVlIGRldmUgc2VyIGV4aWJpZG8gbm8gY29tcG9uZW50ZSBjb20gYmFzZSBub3MgdmFsb3JlcyBzZWxlY2lvbmFkb3MuXG4gICAgICpcbiAgICAgKiAtIE5vIG1vZG8gbcO6bHRpcGxvOlxuICAgICAqICAgLSBTZSBob3V2ZXIgbWFpcyBkZSB1bSBpdGVtIHNlbGVjaW9uYWRvLCBleGliZSB1bWEgbWVuc2FnZW0gdHJhZHV6aWRhIGNvbSBvIHRvdGFsIGRlIHJlZ2lzdHJvcy5cbiAgICAgKiAgIC0gU2UgaG91dmVyIGFwZW5hcyB1bSBpdGVtIHNlbGVjaW9uYWRvLCBleGliZSBvIGxhYmVsIGNvcnJlc3BvbmRlbnRlLlxuICAgICAqIC0gTm8gbW9kbyBzaW1wbGVzOlxuICAgICAqICAgLSBFeGliZSBvIGxhYmVsIGRvIHZhbG9yIHNlbGVjaW9uYWRvLiAgICAgKlxuICAgICAqIC0gU2UgbmVuaHVtIHZhbG9yIGVzdGl2ZXIgc2VsZWNpb25hZG8sIHJldG9ybmEgdW1hIHN0cmluZyB2YXppYS5cbiAgICAgKlxuICAgICAqIEVzc2EgbMOzZ2ljYSDDqSB1c2FkYSBwYXJhIG1vc3RyYXIgbyBjb250ZcO6ZG8gYXR1YWwgZG8gY2FtcG8gZGUgc2VsZcOnw6NvLlxuICAgICAqL1xuXG4gICAgcHVibGljIHByaW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWVzKCk7XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHBsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy50b3RhbF9yZWNvcmRzX3NlbGVjdGVkYCwge1xuICAgICAgICAgICAgICAgICAgICBjb3VudDogc2VsZWN0ZWQubGVuZ3RoLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TGFiZWxGcm9tT3B0aW9uKHNlbGVjdGVkWzBdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRMYWJlbEZyb21PcHRpb24odGhpcy52YWx1ZSgpIGFzIFQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGlzQ2xlYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlKCkgPyAhdGhpcy52YWx1ZXMoKS5sZW5ndGggOiAhdGhpcy52YWx1ZSgpO1xuICAgIH0pO1xuXG4gICAgcHVibGljIFRJc1ByaW1pdGl2ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHRoaXMub3B0aW9ucygpO1xuICAgICAgICBpZiAoIW9wdHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiBbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHR5cGVvZiBvcHRzWzBdKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEluZGljYSBzZSBvIGVzdGFkbyBkZSBzZWxlw6fDo28gZXN0w6EgaW5kZXRlcm1pbmFkby5cbiAgICAgKlxuICAgICAqIC0gUmV0b3JuYSBgdHJ1ZWAgcXVhbmRvICoqYWxndW1hcyoqLCBtYXMgbsOjbyB0b2Rhcywgb3DDp8O1ZXMgdmlzw612ZWlzIGVzdMOjbyBzZWxlY2lvbmFkYXMuXG4gICAgICogLSBSZXRvcm5hIGBmYWxzZWAgcXVhbmRvICoqdG9kYXMqKiBvdSAqKm5lbmh1bWEqKiBkYXMgb3DDp8O1ZXMgdmlzw612ZWlzIGVzdMOjbyBzZWxlY2lvbmFkYXMuXG4gICAgICogLSBJZ25vcmEgb3DDp8O1ZXMgbWFyY2FkYXMgY29tbyBgZ3JvdXBlcmAuXG4gICAgICpcbiAgICAgKiBFc3NlIGVzdGFkbyDDqSB1c2FkbywgcG9yIGV4ZW1wbG8sIHBhcmEgZXhpYmlyIG8gY2hlY2tib3ggZGUgXCJTZWxlY2lvbmFyIHRvZG9zXCIgZW0gbW9kbyBpbmRldGVybWluYWRvLlxuICAgICAqL1xuXG4gICAgcHVibGljIHNlbGVjdEFsbElzSW5kZXRlcm1pbmF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlcygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5maWx0ZXIoKG8pID0+ICFvLmdyb3VwZXIpO1xuXG4gICAgICAgIGNvbnN0IGFsbCA9IG9wdGlvbnMubGVuZ3RoID4gMCAmJiBvcHRpb25zLmV2ZXJ5KChvKSA9PiBzZWxlY3RlZC5pbmNsdWRlcyhvLmRhdGEpKTtcbiAgICAgICAgY29uc3Qgbm9uZSA9IG9wdGlvbnMuZXZlcnkoKG8pID0+ICFzZWxlY3RlZC5pbmNsdWRlcyhvLmRhdGEpKTtcblxuICAgICAgICByZXR1cm4gIWFsbCAmJiAhbm9uZTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIFJldG9ybmEgYSBsaXN0YSBkZSBvcMOnw7VlcyBmaWx0cmFkYXMgY29tIGJhc2Ugbm8gdmFsb3IgZGlnaXRhZG8gcGVsbyB1c3XDoXJpby5cbiAgICAgKlxuICAgICAqIC0gU2UgbyBmaWx0cm8gZXN0aXZlciBkZXNhdGl2YWRvIG91IHZhemlvLCByZXRvcm5hIHRvZGFzIGFzIG9ww6fDtWVzLlxuICAgICAqIC0gQ2FzbyBjb250csOhcmlvLCBhcGxpY2EgbyBmaWx0cm8gdXNhbmRvIG8ocykgY2FtcG8ocykgZGVmaW5pZG9zIGVtIGBmaWx0ZXJCeWAuXG4gICAgICogLSBJZ25vcmEgb3DDp8O1ZXMgbWFyY2FkYXMgY29tbyBgZ3JvdXBlcmAuXG4gICAgICogLSBVc2EgbyBleHRyYXRvciBkZSBsYWJlbCBwYXJhIGNvbXBhcmFyIG9zIHZhbG9yZXMgY29tIG8gdGV4dG8gYnVzY2Fkby5cbiAgICAgKi9cblxuICAgIHB1YmxpYyBmaWx0ZXJlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsbE9wdGlvbnMgPSB0aGlzLmludGVybmFsT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBzZWFyY2ggPSB0aGlzLmZpbHRlclZhbHVlKCkudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmZpbHRlcigpIHx8ICFzZWFyY2gpIHtcbiAgICAgICAgICAgIHJldHVybiBhbGxPcHRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsdGVyQnkgPSB0aGlzLmZpbHRlckJ5KCk7XG4gICAgICAgIHJldHVybiBhbGxPcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmdyb3VwZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxhYmVsRXh0cmFjdG9yID0gdGhpcy5fZ2V0TGFiZWxFeHRyYWN0b3IoKTtcbiAgICAgICAgICAgIGxldCBsYWJlbCA9ICcnO1xuXG4gICAgICAgICAgICBpZiAoIWZpbHRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBsYWJlbEV4dHJhY3RvcihvcHRpb24uZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyQnkpKSB7XG4gICAgICAgICAgICAgICAgbGFiZWwgPSBmaWx0ZXJCeS5tYXAoKGJ5KSA9PiBTdHJpbmcob3B0aW9uLmRhdGFbYnldID8/ICcnKSkuam9pbignICcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsYWJlbCA9IFN0cmluZyhvcHRpb24uZGF0YVtmaWx0ZXJCeV0gPz8gJycpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyByZWFkb25seSBmaWx0ZXJGb3JtID0gbmV3IEZvcm1Hcm91cDx7IGZpbHRlcjogRm9ybUNvbnRyb2w8c3RyaW5nPiB9Pih7XG4gICAgICAgIGZpbHRlcjogbmV3IEZvcm1Db250cm9sPHN0cmluZz4oJycsIHsgbm9uTnVsbGFibGU6IHRydWUgfSksXG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcbiAgICBwcml2YXRlIF9kcm9wZG93blRlbXBsYXRlID0gdmlld0NoaWxkPFRlbXBsYXRlUmVmPGFueT4+KCdkcm9wZG93blRlbXBsYXRlJyk7XG4gICAgcHJpdmF0ZSBfY29udGFpbmVyRGl2ID0gdmlld0NoaWxkPEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+PignY29udGFpbmVyRGl2Jyk7XG4gICAgcHJpdmF0ZSBfb25DaGFuZ2U6ICh2YWx1ZTogVCB8IFRbXSB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4geyB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwbGF0Zm9ybUlkID0gaW5qZWN0KFBMQVRGT1JNX0lEKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF92aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3RyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIEluaWNpYWxpemEgbyBjb21wb25lbnRlLCB2YWxpZGFuZG8gb3MgaW5wdXRzIGUgY29uZmlndXJhbmRvIG8gZmlsdHJvIGNvbSBkZWJvdW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlSW5wdXRzKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJGb3JtXG4gICAgICAgICAgICAuZ2V0KCdmaWx0ZXInKSFcbiAgICAgICAgICAgIC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUoMzAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclZhbHVlLnNldCh2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeGVjdXRhIGxpbXBlemEgZGUgcmVjdXJzb3MgYW8gZGVzdHJ1aXIgbyBjb21wb25lbnRlLlxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveURyb3Bkb3duUG9ydGFsKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX3BvcnRhbEhvc3QpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcnRhbEhvc3QuZGlzcG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fcG9ydGFsSG9zdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlZmluZSBvIHZhbG9yIG5vIGNvbXBvbmVudGUgdmluZG8gZG8gZm9ybXVsw6FyaW8gZXh0ZXJuby5cbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsb3IgYXRyaWJ1w61kbyBwZWxvIEFuZ3VsYXIgZm9ybXMuXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuVElzUHJpbWl0aXZlKClcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAoKHYpID0+IHRoaXMuX2ZpbmRPcHRpb25CeVByaW1pdGl2ZVZhbHVlKHYpKS5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnVzZVJhd1ZhbHVlKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWUubWFwKCh2KSA9PiB0aGlzLl9maW5kT3B0aW9uQnlWYWx1ZSh2KSkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXMuc2V0KGl0ZW1zIGFzIFRbXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5USXNQcmltaXRpdmUoKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fZmluZE9wdGlvbkJ5UHJpbWl0aXZlVmFsdWUodmFsdWUpXG4gICAgICAgICAgICAgICAgOiB0aGlzLnVzZVJhd1ZhbHVlKClcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2ZpbmRPcHRpb25CeVZhbHVlKHZhbHVlKTtcblxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXQoaXRlbSA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdHJhIGEgZnVuw6fDo28gcXVlIHNlcsOhIGNoYW1hZGEgcXVhbmRvIG8gdmFsb3IgbXVkYXIuXG4gICAgICogQHBhcmFtIG9uQ2hhbmdlIEZ1bsOnw6NvIGNhbGxiYWNrLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKG9uQ2hhbmdlOiAodmFsdWU6IFQgfCBUW10gfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlID0gb25DaGFuZ2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVnaXN0cmEgYSBmdW7Dp8OjbyBxdWUgc2Vyw6EgY2hhbWFkYSBxdWFuZG8gbyBjb21wb25lbnRlIGZvciBcInRvY2Fkb1wiLlxuICAgICAqIEBwYXJhbSBvblRvdWNoZWQgRnVuw6fDo28gY2FsbGJhY2suXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKG9uVG91Y2hlZDogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vblRvdWNoZWQgPSBvblRvdWNoZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lIG8gZXN0YWRvIGRlIGRlc2FiaWxpdGFkbyBkbyBjb21wb25lbnRlLlxuICAgICAqIEBwYXJhbSBkaXNhYmxlZCBJbmRpY2Egc2UgbyBjb21wb25lbnRlIGVzdMOhIGRlc2FiaWxpdGFkby5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkLnNldChkaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWx0ZXJuYSBhIGV4aWJpw6fDo28gZGEgbGlzdGEgZGUgb3DDp8O1ZXMgKGRyb3Bkb3duKS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaG91bGRPcGVuID0gIXRoaXMuc2hvd09wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zaG93T3B0aW9ucy5zZXQoc2hvdWxkT3Blbik7XG5cbiAgICAgICAgaWYgKHNob3VsZE9wZW4pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURyb3Bkb3duUG9ydGFsKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2Rlc3Ryb3lEcm9wZG93blBvcnRhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWNpb25hIG91IGRlc3NlbGVjaW9uYSB1bSBpdGVtIG5hIGxpc3RhLlxuICAgICAqIEBwYXJhbSBpdGVtIEl0ZW0gYSBzZXIgc2VsZWNpb25hZG8gb3UgZGVzbWFyY2Fkby5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0SXRlbShpdGVtOiBUKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbXBhcmVWYWx1ZSA9IHRoaXMuX2dldENvbXBhcmVWYWx1ZUV4dHJhY3RvcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0b3JlID0gWy4uLnRoaXMudmFsdWVzKCldO1xuICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gZ2V0Q29tcGFyZVZhbHVlKGl0ZW0pO1xuXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHN0b3JlLmZpbmRJbmRleCgoc2VsZWN0ZWRJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBhcmVWYWx1ZShzZWxlY3RlZEl0ZW0pID09PSBpdGVtVmFsdWU7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN0b3JlLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0b3JlLnB1c2goaXRlbSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldChzdG9yZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMudXNlUmF3VmFsdWUoKSA/IHN0b3JlIDogc3RvcmUubWFwKChpKSA9PiB0aGlzLl9nZXRWYWx1ZUV4dHJhY3RvcigpKGkpKTtcblxuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KGl0ZW0pO1xuXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnVzZVJhd1ZhbHVlKCkgPyBpdGVtIDogdGhpcy5fZ2V0VmFsdWVFeHRyYWN0b3IoKShpdGVtKTtcblxuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UocmVzdWx0KTtcbiAgICAgICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExpbXBhIGEgc2VsZcOnw6NvIGF0dWFsLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZG8gY2xpcXVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQoW10pO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fcmVtb3ZlSW50ZXJuYWxQcm9wZXJ0aWVzKHRoaXMudmFsdWVzKCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSgpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Nsb3NlRHJvcGRvd24oKTtcblxuICAgICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTGltcGEgbyBmaWx0cm8gYXBsaWNhZG8gw6AgbGlzdGEgZGUgb3DDp8O1ZXMuXG4gICAgICovXG4gICAgcHVibGljIGNsZWFyRmlsdGVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0uZ2V0KCdmaWx0ZXInKT8ucmVzZXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGZWNoYSBvIGRyb3Bkb3duIHNlIG8gY2xpcXVlIG9jb3JyZXIgZm9yYSBkbyBjb21wb25lbnRlLlxuICAgICAqIEBwYXJhbSBldmVudCBFdmVudG8gZG8gY2xpcXVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZTtcblxuICAgICAgICBjb25zdCBjbGlja2VkSW5zaWRlQ29tcG9uZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGNsaWNrVGFyZ2V0KTtcbiAgICAgICAgY29uc3QgZHJvcGRvd25JbkJvZHkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuZHJvcGRvd24tYm9keS1jbGFzcycpPy5jb250YWlucyhjbGlja1RhcmdldCk7XG5cbiAgICAgICAgaWYgKCFjbGlja2VkSW5zaWRlQ29tcG9uZW50ICYmICFkcm9wZG93bkluQm9keSkge1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmVjaGEgbyBkcm9wZG93biBlbSBldmVudG9zIGRlIHJlZGltZW5zaW9uYW1lbnRvIGRlIGphbmVsYS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25XaW5kb3dSZXNpemUoXzogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd09wdGlvbnMoKSkge1xuICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzcGFyYSBhIGFiZXJ0dXJhL2ZlY2hhbWVudG8gZG8gZHJvcGRvd24gYW8gY2xpY2FyIG5vIGNvbnRhaW5lci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Db250YWluZXJEaXZDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50b2dnbGUoKTtcbiAgICAgICAgdGhpcy5fY29udGFpbmVyRGl2KCk/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmF0YSBldmVudG9zIGRlIHRlY2xhZG8gcGFyYSBuYXZlZ2HDp8OjbyBlIHNlbGXDp8Ojby5cbiAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnRvIGRvIHRlY2xhZG8uXG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBfc2VsZWN0T3B0aW9uID0gKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNlZEluZGV4KCkgPj0gMCAmJiB0aGlzLmZvY3VzZWRJbmRleCgpIDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SXRlbShvcHRpb25zW3RoaXMuZm9jdXNlZEluZGV4KCldLmRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNOZXh0T3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb2N1c1ByZXZpb3VzT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgICAgICAgICBfc2VsZWN0T3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2xvc2VEcm9wZG93bigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNob3dPcHRpb25zKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3NlbGVjdE9wdGlvbigpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgICAgICAgICB0aGlzLl9jbG9zZURyb3Bkb3duKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICcgJzpcbiAgICAgICAgICAgICAgICBfc2VsZWN0T3B0aW9uKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRvcm5hIG8gcsOzdHVsbyBkZSBleGliacOnw6NvIGRlIHVtYSBvcMOnw6NvLlxuICAgICAqIEBwYXJhbSBvcHRpb24gSXRlbSBkYSBsaXN0YSBkZSBvcMOnw7Vlcy5cbiAgICAgKiBAcmV0dXJucyBUZXh0byBxdWUgc2Vyw6EgZXhpYmlkbyBubyBkcm9wZG93bi5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0T3B0aW9uTGFiZWwob3B0aW9uOiBUKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhYmVsRnJvbU9wdGlvbihvcHRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZ1bsOnw6NvIHVzYWRhIHBhcmEgbyB0cmFja0J5IG5vIGZvciBkbyB0ZW1wbGF0ZS5cbiAgICAgKiBAcGFyYW0gXyDDjW5kaWNlIGRvIGl0ZW0uXG4gICAgICogQHBhcmFtIGl0ZW0gSXRlbSBkYSBsaXN0YS5cbiAgICAgKiBAcmV0dXJucyBJRCDDum5pY28gZGEgb3DDp8Ojby5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJhY2tCeUlkKF86IG51bWJlciwgaXRlbTogSW50ZXJuYWxEcm9wZG93bk9wdGlvbjxUPik6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWNhIHNlIHVtYSBvcMOnw6NvIGVzdMOhIHNlbGVjaW9uYWRhLlxuICAgICAqIEBwYXJhbSBvcHRpb24gT3DDp8OjbyBhIHNlciB2ZXJpZmljYWRhLlxuICAgICAqIEByZXR1cm5zIFZlcmRhZGVpcm8gc2UgYSBvcMOnw6NvIGVzdGl2ZXIgc2VsZWNpb25hZGEuXG4gICAgICovXG4gICAgcHVibGljIGlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGdldENvbXBhcmVWYWx1ZSA9IHRoaXMuX2dldENvbXBhcmVWYWx1ZUV4dHJhY3RvcigpO1xuXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy52YWx1ZXMoKS5tYXAoZ2V0Q29tcGFyZVZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxlY3RlZFZhbHVlcy5pbmNsdWRlcyhnZXRDb21wYXJlVmFsdWUob3B0aW9uKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlKCk7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudFZhbHVlICE9PSBudWxsICYmIGdldENvbXBhcmVWYWx1ZShjdXJyZW50VmFsdWUpID09PSBnZXRDb21wYXJlVmFsdWUob3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsdGVybmEgYSBzZWxlw6fDo28gZGUgdG9kb3Mgb3MgaXRlbnMgZmlsdHJhZG9zLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVTZWxlY3RBbGwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKS5maWx0ZXIoKG8pID0+ICFvLmdyb3VwZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLmFsbFNlbGVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVzLnNldChbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5zZXQob3B0aW9ucy5tYXAoKG8pID0+IG8uZGF0YSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy5fcmVtb3ZlSW50ZXJuYWxQcm9wZXJ0aWVzKHRoaXMudmFsdWVzKCkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jdXJhIGUgcmV0b3JuYSB1bWEgb3DDp8OjbyBjb20gdmFsb3IgcHJpbWl0aXZvIGlndWFsIGFvIGluZm9ybWFkby5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBWYWxvciBwcmltaXRpdm8gKHN0cmluZywgbnVtYmVyIG91IGJvb2xlYW4pLlxuICAgICAqIEByZXR1cm5zIEEgb3DDp8OjbyBjb3JyZXNwb25kZW50ZSwgb3UgYG51bGxgIHNlIG7Do28gZW5jb250cmFkYS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9maW5kT3B0aW9uQnlQcmltaXRpdmVWYWx1ZSh2YWx1ZTogYW55KTogVCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbE9wdGlvbnMoKS5maW5kKChvcHQpID0+IG9wdC5kYXRhID09PSB2YWx1ZSk/LmRhdGEgPz8gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgcHJvcHJpZWRhZGVzIGludGVybmFzIGFkaWNpb25hZGFzIHBlbG8gY29tcG9uZW50ZSwgcmV0b3JuYW5kbyBhcGVuYXMgb3MgZGFkb3MgY3J1cy5cbiAgICAgKlxuICAgICAqIFVzYWRvIHBhcmEgZ2FyYW50aXIgcXVlIGFwZW5hcyBvcyBvYmpldG9zIGRlIGRhZG9zIHJlYWlzIHNlamFtIGVtaXRpZG9zIGFvIGZvcm11bMOhcmlvLFxuICAgICAqIGVzcGVjaWFsbWVudGUgbm8gbW9kbyBtw7psdGlwbG8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVmFsb3IgYXJtYXplbmFkbyBpbnRlcm5hbWVudGUgKGNvbSBvdSBzZW0gYEludGVybmFsRHJvcGRvd25PcHRpb25gKS5cbiAgICAgKiBAcmV0dXJucyBPcyBkYWRvcyBcInB1cm9zXCIsIHNlbSBwcm9wcmllZGFkZXMgYWRpY2lvbmFpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9yZW1vdmVJbnRlcm5hbFByb3BlcnRpZXModmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5USXNQcmltaXRpdmUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgob3B0OiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+KSA9PiBvcHQuZGF0YSlcbiAgICAgICAgICAgIDogKHZhbHVlIGFzIEludGVybmFsRHJvcGRvd25PcHRpb248VD4pLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0b3JuYSBvIHRleHRvIChsYWJlbCkgY29ycmVzcG9uZGVudGUgYSB1bWEgZGV0ZXJtaW5hZGEgb3DDp8Ojby5cbiAgICAgKiBVc2EgYSBwcm9wcmllZGFkZSBkZWZpbmlkYSBlbSBgb3B0aW9uTGFiZWxgLCBvdSB0ZW50YSB1c2FyIHVtYSBwcm9wcmllZGFkZSBwYWRyw6NvIChgbGFiZWxgKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBvcHRpb24gQSBvcMOnw6NvIGEgc2VyIGV4aWJpZGEuXG4gICAgICogQHJldHVybnMgTyB0ZXh0byBsZWfDrXZlbCBkYSBvcMOnw6NvIHBhcmEgZXhpYmnDp8OjbyBubyBjb21wb25lbnRlLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldExhYmVsRnJvbU9wdGlvbihvcHRpb246IFQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nXS5pbmNsdWRlcyh0eXBlb2Ygb3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFiZWxLZXkgPSB0aGlzLm9wdGlvbkxhYmVsKCk7XG5cbiAgICAgICAgaWYgKCFsYWJlbEtleSkge1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZygob3B0aW9uIGFzIGFueSkubGFiZWwgPz8gJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRpb25bbGFiZWxLZXldKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGEgb3MgaW5wdXRzIG9icmlnYXTDs3Jpb3MgZG8gY29tcG9uZW50ZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF92YWxpZGF0ZUlucHV0cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnVzZVJhd1ZhbHVlKCkgJiYgIXRoaXMuVElzUHJpbWl0aXZlKCkgJiYgIXRoaXMub3B0aW9uVmFsdWUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBUaGUgJ29wdGlvblZhbHVlJyBpbnB1dCBtdXN0IGJlIHByb3ZpZGVkIGZvciBub24tcHJpbWl0aXZlIG9wdGlvbnMgd2hlbiB1c2VSYXdWYWx1ZSBpcyBmYWxzZS5gLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5USXNQcmltaXRpdmUoKSAmJiAhdGhpcy5vcHRpb25WYWx1ZSgpICYmICF0aGlzLmRhdGFLZXkoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFaXRoZXIgdGhlIG9wdGlvblZhbHVlIG9yIGRhdGFLZXkgaW5wdXQgbXVzdCBiZSBwcm92aWRlZCBmb3Igbm9uLXByaW1pdGl2ZSBvcHRpb25zLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLlRJc1ByaW1pdGl2ZSgpICYmICF0aGlzLm9wdGlvbkxhYmVsKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICdvcHRpb25MYWJlbCcgaW5wdXQgbXVzdCBiZSBwcm92aWRlZCBmb3Igbm9uLXByaW1pdGl2ZSBvcHRpb25zLmApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZmluZE9wdGlvbkJ5VmFsdWUodmFsdWU6IGFueSk6IFQgfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMudXNlUmF3VmFsdWUoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucygpLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uID09PSB2YWx1ZSkgPz8gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldFZhbHVlID0gdGhpcy5fZ2V0VmFsdWVFeHRyYWN0b3IoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucygpLmZpbmQoKG9wdGlvbikgPT4gZ2V0VmFsdWUob3B0aW9uKSA9PT0gdmFsdWUpID8/IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFpIG8gdmFsb3IgZmluYWwgZGUgdW1hIG9ww6fDo28sIGNvbSBiYXNlIGVtIGBvcHRpb25WYWx1ZWAuXG4gICAgICogQHJldHVybnMgRnVuw6fDo28gcXVlIHJldG9ybmEgbyB2YWxvciBkYSBvcMOnw6NvLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldFZhbHVlRXh0cmFjdG9yKCk6IChvcHRpb246IFQpID0+IGFueSB7XG4gICAgICAgIGlmICh0aGlzLlRJc1ByaW1pdGl2ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gKG9wdGlvbjogYW55KSA9PiBvcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy51c2VSYXdWYWx1ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gKG9wdGlvbjogVCkgPT4gb3B0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWVJbnB1dCA9IHRoaXMub3B0aW9uVmFsdWUoKTtcblxuICAgICAgICBpZiAodmFsdWVJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIChvcHRpb246IFQpID0+IG9wdGlvblt2YWx1ZUlucHV0XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb3B0aW9uVmFsdWUgaXMgcmVxdWlyZWQgZm9yIG5vbi1wcmltaXRpdmUgb3B0aW9ucy5gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWkgbyB2YWxvciBjb21wYXLDoXZlbCBkZSB1bWEgb3DDp8Ojby5cbiAgICAgKiBAcmV0dXJucyBGdW7Dp8OjbyBxdWUgcmV0b3JuYSBhIGNoYXZlIGRlIGNvbXBhcmHDp8Ojby5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9nZXRDb21wYXJlVmFsdWVFeHRyYWN0b3IoKTogKG9wdGlvbjogVCkgPT4gYW55IHtcbiAgICAgICAgaWYgKHRoaXMuVElzUHJpbWl0aXZlKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAob3B0aW9uOiBhbnkpID0+IG9wdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRhdGFLZXkoKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5kYXRhS2V5KCkhO1xuICAgICAgICAgICAgcmV0dXJuIChvcHRpb246IFQpID0+IG9wdGlvbltrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldFZhbHVlRXh0cmFjdG9yKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmVjaGEgbyBkcm9wZG93biBlIHJlZGVmaW5lIG8gZm9jby5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNob3dPcHRpb25zLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lEcm9wZG93blBvcnRhbCgpO1xuICAgICAgICB0aGlzLmZvY3VzZWRJbmRleC5zZXQoLTEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkaWNpb25hIGlkZW50aWZpY2Fkb3JlcyDDum5pY29zIMOgcyBvcMOnw7Vlcy5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBMaXN0YSBvcmlnaW5hbCBkZSBvcMOnw7Vlcy5cbiAgICAgKiBAcmV0dXJucyBMaXN0YSBjb20gSURzIGFkaWNpb25hZG9zLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2FkZElkVG9PcHRpb25zKG9wdGlvbnM6IFRbXSk6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSB7XG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IERhdGUubm93KCk7XG5cbiAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwKChvcHRpb24sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cCgpICYmIEFycmF5LmlzQXJyYXkoKG9wdGlvbiBhcyBhbnkpLml0ZW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG9wdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaWQ6IGBpZF8ke3RpbWVzdGFtcH1fJHtpbmRleCsrfWAsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpb24sXG4gICAgICAgICAgICAgICAgaWQ6IGBpZF8ke3RpbWVzdGFtcH1fJHtpbmRleCsrfWAsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0ZSB1bWEgZXN0cnV0dXJhIGFncnVwYWRhIGVtIHVtYSBsaXN0YSBhY2hhdGFkYS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBMaXN0YSBkZSBvcMOnw7VlcyBjb20gYWdydXBhZG9yZXMuXG4gICAgICogQHJldHVybnMgTGlzdGEgYWNoYXRhZGEgZGUgb3DDp8O1ZXMgZSBncnVwb3MuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZ3JvdXBlclRvRmxhdChvcHRpb25zOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10pOiBJbnRlcm5hbERyb3Bkb3duT3B0aW9uPFQ+W10ge1xuICAgICAgICBjb25zdCByZXN1bHQ6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSA9IFtdO1xuXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLmdyb3VwZXIgJiYgQXJyYXkuaXNBcnJheSgob3B0aW9uLmRhdGEgYXMgYW55KS5pdGVtcykpIHtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChvcHRpb24pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwSXRlbXMgPSAob3B0aW9uLmRhdGEgYXMgYW55KS5pdGVtcy5tYXAoKGl0ZW06IFQsIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGlkOiBgJHtvcHRpb24uaWR9X2l0ZW1fJHtpbmRleH1gLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi5ncm91cEl0ZW1zKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gob3B0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlIG8gZm9jbyBwYXJhIGEgcHLDs3hpbWEgb3DDp8Ojby5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBMaXN0YSBkZSBvcMOnw7VlcyB2aXPDrXZlaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfZm9jdXNOZXh0T3B0aW9uKG9wdGlvbnM6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSkge1xuICAgICAgICBsZXQgbmV4dEluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKSArIDE7XG5cbiAgICAgICAgd2hpbGUgKG5leHRJbmRleCA8IG9wdGlvbnMubGVuZ3RoICYmIG9wdGlvbnNbbmV4dEluZGV4XS5ncm91cGVyKSB7XG4gICAgICAgICAgICBuZXh0SW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0SW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KG5leHRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmUgbyBmb2NvIHBhcmEgYSBvcMOnw6NvIGFudGVyaW9yLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIExpc3RhIGRlIG9ww6fDtWVzIHZpc8OtdmVpcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9mb2N1c1ByZXZpb3VzT3B0aW9uKG9wdGlvbnM6IEludGVybmFsRHJvcGRvd25PcHRpb248VD5bXSkge1xuICAgICAgICBsZXQgcHJldkluZGV4ID0gdGhpcy5mb2N1c2VkSW5kZXgoKSAtIDE7XG5cbiAgICAgICAgd2hpbGUgKHByZXZJbmRleCA+PSAwICYmIG9wdGlvbnNbcHJldkluZGV4XS5ncm91cGVyKSB7XG4gICAgICAgICAgICBwcmV2SW5kZXgtLTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2SW5kZXggPj0gMCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkSW5kZXguc2V0KHByZXZJbmRleCk7XG4gICAgICAgICAgICB0aGlzLl9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGEgbyBkcm9wZG93biBhdMOpIGEgb3DDp8OjbyBhdHVhbG1lbnRlIGZvY2FkYS5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9zY3JvbGxUb0ZvY3VzZWRPcHRpb24oKSB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMoKVt0aGlzLmZvY3VzZWRJbmRleCgpXT8uaWQ7XG5cbiAgICAgICAgaWYgKCFpZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XG4gICAgICAgIGVsPy5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFpIG8gdGV4dG8gZGUgdW1hIG9ww6fDo28sIGNvbSBiYXNlIGVtIGBvcHRpb25MYWJlbGAuXG4gICAgICogQHJldHVybnMgRnVuw6fDo28gcXVlIHJldG9ybmEgbyBsYWJlbCBkYSBvcMOnw6NvLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2dldExhYmVsRXh0cmFjdG9yKCk6IChvcHRpb246IFQpID0+IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLlRJc1ByaW1pdGl2ZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gKG9wdGlvbjogYW55KSA9PiBTdHJpbmcob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhYmVsSW5wdXQgPSB0aGlzLm9wdGlvbkxhYmVsKCk7XG5cbiAgICAgICAgaWYgKGxhYmVsSW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiAob3B0aW9uOiBUKSA9PiBTdHJpbmcob3B0aW9uW2xhYmVsSW5wdXRdID8/ICcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgb3B0aW9uTGFiZWwgaXMgcmVxdWlyZWQgZm9yIG5vbi1wcmltaXRpdmUgb3B0aW9ucy5gKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyaWEgZSBwb3NpY2lvbmEgZGluYW1pY2FtZW50ZSBvIGRyb3Bkb3duIGNvbW8gcG9ydGFsLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2NyZWF0ZURyb3Bkb3duUG9ydGFsKCk6IHZvaWQge1xuICAgICAgICBpZiAoIWlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lckRpdigpO1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuX2Ryb3Bkb3duVGVtcGxhdGUoKTtcblxuICAgICAgICBpZiAoIWNvbnRhaW5lciB8fCAhdGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3BFbGVtZW50UmVjdCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIHRoaXMuZHJvcFRvcCA9IGRyb3BFbGVtZW50UmVjdC5ib3R0b20gKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICAgICAgdGhpcy5kcm9wTGVmdCA9IGRyb3BFbGVtZW50UmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIHRoaXMuZHJvcFdpZHRoID0gZHJvcEVsZW1lbnRSZWN0LndpZHRoO1xuXG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lEcm9wZG93blBvcnRhbCgpO1xuXG4gICAgICAgIHRoaXMuX3BvcnRhbEhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KGRvY3VtZW50LmJvZHkpO1xuXG4gICAgICAgIGNvbnN0IHBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0ZW1wbGF0ZSwgdGhpcy5fdmlld0NvbnRhaW5lclJlZik7XG5cbiAgICAgICAgdGhpcy5fcG9ydGFsSG9zdC5hdHRhY2gocG9ydGFsKTtcblxuICAgICAgICBjb25zdCBkcm9wZG93bkVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmRyb3Bkb3duLWJvZHktY2xhc3MnKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICAgIGlmIChkcm9wZG93bkVsKSB7XG4gICAgICAgICAgICBkcm9wZG93bkVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgIGRyb3Bkb3duRWwuc3R5bGUudG9wID0gYCR7dGhpcy5kcm9wVG9wICsgNH1weGA7XG4gICAgICAgICAgICBkcm9wZG93bkVsLnN0eWxlLmxlZnQgPSBgJHt0aGlzLmRyb3BMZWZ0fXB4YDtcbiAgICAgICAgICAgIGRyb3Bkb3duRWwuc3R5bGUud2lkdGggPSBgJHt0aGlzLmRyb3BXaWR0aH1weGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmUgbyBwb3J0YWwgZG8gZHJvcGRvd24gZG8gRE9NLlxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lEcm9wZG93blBvcnRhbCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3BvcnRhbEhvc3Q/Lmhhc0F0dGFjaGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcnRhbEhvc3QuZGV0YWNoKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3BvcnRhbEFuY2hvcj48L25nLXRlbXBsYXRlPlxuXG48ZGl2XG4gICAgI2NvbnRhaW5lckRpdlxuICAgIGNsYXNzPVwiZ3JvdXAgZmxleCB3LWZ1bGwgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtWzNweF0gYm9yZGVyIG91dGxpbmUtMSBvdXRsaW5lLXByaW1hcnkgZm9jdXM6b3V0bGluZVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBib3JkZXItZ3JheXNjYWxlLTIwIGJnLWdyYXlzY2FsZS01JzogZGlzYWJsZWQoKSxcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzLWF1dG8gYm9yZGVyLWdyYXlzY2FsZS0zMCBiZy1ncmF5c2NhbGUtMCc6ICFkaXNhYmxlZCgpLFxuICAgIH1cIlxuICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgKGNsaWNrKT1cIm9uQ29udGFpbmVyRGl2Q2xpY2soKVwiXG4gICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4+XG4gICAgPHNwYW5cbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtZ3JvdyBzZWxlY3Qtbm9uZSBweC0zIHB5LVs3cHhdXCJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3RleHQtZ3JheXNjYWxlLTkwJzogIWRpc2FibGVkKCkgJiYgIWlzQ2xlYW4oKSxcbiAgICAgICAgICAgICd0ZXh0LWdyYXlzY2FsZS02MCc6ICFkaXNhYmxlZCgpICYmIGlzQ2xlYW4oKSxcbiAgICAgICAgICAgICd0ZXh0LWdyYXlzY2FsZS0zMCc6IGRpc2FibGVkKCksXG4gICAgICAgIH1cIlxuICAgID5cbiAgICAgICAge3sgcHJpbnQoKSB8fCBwbGFjZWhvbGRlcigpIH19XG4gICAgPC9zcGFuPlxuXG4gICAgQGlmICghZGlzYWJsZWQoKSAmJiBzaG93Q2xlYXIoKSAmJiAhaXNDbGVhbigpKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwibXgtM1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzIGZsZXggaXRlbXMtY2VudGVyXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgYm9yZGVyLWwgcHgtMyBncm91cC1ob3ZlcjpiZy1ncmF5c2NhbGUtMTAgZ3JvdXAtZm9jdXM6Ym9yZGVyLXByaW1hcnlcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdib3JkZXItZ3JheXNjYWxlLTIwJzogZGlzYWJsZWQoKSwgJ2JvcmRlci1ncmF5c2NhbGUtMzAnOiAhZGlzYWJsZWQoKSB9XCJcbiAgICA+XG4gICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImZhc1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgJ3RleHQtZ3JheXNjYWxlLTMwJzogZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICAndGV4dC1ncmF5c2NhbGUtOTAnOiAhZGlzYWJsZWQoKSxcbiAgICAgICAgICAgICAgICAnZmEtY2FyZXQtZG93bic6ICFzaG93T3B0aW9ucygpLFxuICAgICAgICAgICAgICAgICdmYS1jYXJldC11cCc6IHNob3dPcHRpb25zKCksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgPjwvaT5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duVGVtcGxhdGU+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWJvZHktY2xhc3Mgei1bMTAwMF0gcm91bmRlZC1bM3B4XSBiZy1ncmF5c2NhbGUtMCBweS0xIHNoYWRvdy1tZFwiXG4gICAgICAgIFtzdHlsZS5wb3NpdGlvbl09XCInYWJzb2x1dGUnXCJcbiAgICAgICAgW3N0eWxlLnRvcC5weF09XCJkcm9wVG9wXCJcbiAgICAgICAgW3N0eWxlLmxlZnQucHhdPVwiZHJvcExlZnRcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICA+XG4gICAgICAgIEBpZiAoZmlsdGVyKCkpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBpdGVtcy1jZW50ZXIgZ2FwLTMgcHgtMyBweS0xLjVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKG11bHRpcGxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHMtY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICNzZWxlY3RBbGxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RBbGxJc0luZGV0ZXJtaW5hdGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2hlY2tlZENoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoKVwiXG4gICAgICAgICAgICAgICAgICAgID48L3MtY2hlY2tib3g+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIGZsZXggaC1bMzVweF0gZ3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGdyb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJmaWx0ZXJGb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZ3JvdyByb3VuZGVkLVszcHhdIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTMwIHBsLTIuNSBwci03IG91dGxpbmUtMSBvdXRsaW5lLXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2ggYWJzb2x1dGUgcmlnaHQtMi41IHRvcC0yLjUgdGV4dC1ncmF5c2NhbGUtOTBcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcyBmbGV4IGl0ZW1zLWNlbnRlclwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPCEtLSBWaXJ0dWFsIHNjcm9sbCAtLT5cbiAgICAgICAgQGlmICh2aXJ0dWFsU2Nyb2xsKCkgJiYgZmlsdGVyZWRPcHRpb25zKCkubGVuZ3RoID4gMTApIHtcbiAgICAgICAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnRcbiAgICAgICAgICAgICAgICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC01MiBvdmVyZmxvdy1hdXRvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpjZGtWaXJ0dWFsRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnMoKTsgdHJhY2tCeTogdHJhY2tCeUlkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzLXNlbGVjdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJvcHRpb24uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldE9wdGlvbkxhYmVsKG9wdGlvbi5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwibXVsdGlwbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2ttYXJrXT1cImNoZWNrbWFyaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc1NlbGVjdGVkXT1cImlzT3B0aW9uU2VsZWN0ZWQob3B0aW9uLmRhdGEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJzZWxlY3RJdGVtKG9wdGlvbi5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNHcm91cGVyXT1cIm9wdGlvbi5ncm91cGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpc0ZvY3VzZWRdPVwib3B0aW9uLmRhdGEgPT09IGZvY3VzZWRJdGVtKClcIlxuICAgICAgICAgICAgICAgICAgICA+PC9zLXNlbGVjdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICAgICAgfVxuXG4gICAgICAgIDwhLS0gTm9ybWFsIGxpc3QgLS0+XG4gICAgICAgIEBpZiAoIXZpcnR1YWxTY3JvbGwoKSB8fCBmaWx0ZXJlZE9wdGlvbnMoKS5sZW5ndGggPD0gMTApIHtcbiAgICAgICAgICAgIDx1bCBjbGFzcz1cIm1heC1oLTUyIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgICAgICAgICAgICBAZm9yIChvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKCk7IHRyYWNrIG9wdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgICAgICA8cy1zZWxlY3Qtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwib3B0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJnZXRPcHRpb25MYWJlbChvcHRpb24uZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpcGxlXT1cIm11bHRpcGxlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrbWFya109XCJjaGVja21hcmsoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNTZWxlY3RlZF09XCJpc09wdGlvblNlbGVjdGVkKG9wdGlvbi5kYXRhKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0ZWQpPVwic2VsZWN0SXRlbShvcHRpb24uZGF0YSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lzR3JvdXBlcl09XCJvcHRpb24uZ3JvdXBlciA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXNGb2N1c2VkXT1cIm9wdGlvbi5kYXRhID09PSBmb2N1c2VkSXRlbSgpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvcy1zZWxlY3Qtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgKGZpbHRlcmVkT3B0aW9ucygpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLTMgdGV4dC1ncmF5c2NhbGUtNjBcIj57e1xuICAgICAgICAgICAgICAgIGVtcHR5TWVzc2FnZSgpID8/ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMubm9fcmVjb3Jkc19mb3VuZCcgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19